Skip to content

feat: respect configured output verbosity; quiet medium by default#6

Merged
0xmrpeter merged 1 commit into
Open-ACP:mainfrom
kevin-david:verbosity
May 11, 2026
Merged

feat: respect configured output verbosity; quiet medium by default#6
0xmrpeter merged 1 commit into
Open-ACP:mainfrom
kevin-david:verbosity

Conversation

@kevin-david

@kevin-david kevin-david commented May 7, 2026

Copy link
Copy Markdown
Contributor

Why

The verbosity mode setting was effectively dead before — the discord adapter's sendMessage override called super.sendMessage(), which resolves verbosity via the base class's channel-config lookup. That lookup doesn't see the discord plugin's settings-backed outputMode and silently fell back to medium. As a result, neither low nor high had any runtime effect.

What changes

Routing fixsendMessage now dispatches via this.resolveMode(sessionId), which reads the discord plugin settings (and per-session override).

Medium becomes quieter — usage embeds and the cross-channel Task-completed ping were firing at every prompt's end. Most users find that noisy at the default tier. They're now gated to high only — opt-in via explicit verbosity for users who want the metrics.

Mode Thinking text Tool cards Usage embed Task-completed
low hidden* compact* hidden hidden
medium shown full hidden (NEW) hidden (NEW)
high shown full + extra shown shown

* Low has a pre-existing draft-finalization bug (text never finalizes because handleUsage isn't called when usage events are filtered upstream by HIDDEN_ON_LOW). Out of scope for this PR — happy to address separately if anyone wants low to be a viable tier.

Test plan

  • Verified by running from source locally
  • Reviewer: set outputMode: "high" → confirm usage embed and Task-completed fire at end of each prompt
  • Reviewer: set outputMode: "medium" → confirm thinking text + tool cards still render but no usage embed / Task-completed

🤖 Generated with Claude Code

The verbosity mode setting was effectively dead before — the discord adapter's
sendMessage override called super.sendMessage(), which resolves verbosity via the
base class's channel-config lookup. That lookup doesn't see the discord plugin's
settings-backed outputMode and silently fell back to 'medium'. As a result,
neither 'low' nor 'high' had any runtime effect.

Routing fix
- sendMessage now dispatches via this.resolveMode(sessionId), which reads the
  discord plugin settings (and per-session override).

Behavior at medium / high
- Usage embeds and the cross-channel Task-completed ping were firing at every
  prompt's end. Most users find that noisy at the default tier. They're now
  gated to 'high' only — opt-in via explicit verbosity for users who want
  the metrics.
- Medium continues to show thinking text, full tool cards, and per-prompt
  activity — just without the receipts.

| Mode    | Thinking text | Tool cards   | Usage embed | Task-completed |
|---------|---------------|--------------|-------------|----------------|
| low     | hidden*       | compact*     | hidden      | hidden         |
| medium  | shown         | full         | hidden (NEW)| hidden (NEW)   |
| high    | shown         | full + extra | shown       | shown          |

* Low has the pre-existing draft-finalization bug (text never finalizes
  because handleUsage isn't called when usage events are filtered by
  HIDDEN_ON_LOW). Out of scope for this PR — happy to address separately
  if anyone wants low to be a viable tier.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@kevin-david kevin-david changed the title feat: enhance message handling with verbosity-based display rules feat: respect configured output verbosity; quiet medium by default May 9, 2026
@kevin-david kevin-david marked this pull request as draft May 9, 2026 21:23
@kevin-david

Copy link
Copy Markdown
Contributor Author

There's still some weirdness here, at least with gemini - prior messages being edited. Marking as draft for now

@kevin-david

Copy link
Copy Markdown
Contributor Author

Tuns out that was a different issue and this should be fine! More PRs coming...

@kevin-david kevin-david marked this pull request as ready for review May 11, 2026 02:32
@0xmrpeter

Copy link
Copy Markdown
Contributor

Thanks for tracking this down! The routing change from getVerbosity() to resolveMode() is exactly right — the plugin's output mode settings were being completely bypassed before this fix.

A couple of minor notes for follow-up:

  • Double resolveMode call in handleUsage — the method now correctly receives verbosity as a parameter, but still calls this.resolveMode(sessionId) internally. The two values are always equal, so it's worth consolidating to use the passed-in param.
  • Inconsistency across handlershandleUsage is now the only handler that actually uses its verbosity param; the others (handleThought, handleToolCall, etc.) still use the _verbosity underscore pattern and resolve internally. Making this consistent across all handlers in a follow-up would remove the asymmetry.
  • Test coverage — a unit test covering the medium vs. high verbosity gate in handleUsage would make this much more solid, since this is a silent behavior change for existing deployments.

Overall a clean and necessary fix.

@0xmrpeter 0xmrpeter merged commit 289924c into Open-ACP:main May 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants