mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-15 20:15:48 +00:00
feat(channels): add sidecar delivery behavior overrides
Closes #144. - Retire user-facing Tool Status Messages and deterministic tool-status channel text. - Add sidecar-generated Quick Acknowledgement and Intermediate Replies with provider/model/timeout/token/char caps. - Resolve delivery behavior as Channel > Agent > Workspace with agent overrides in other_config.delivery_behavior. - Preserve legacy block_reply defaults for Intermediate Replies.
This commit is contained in:
1 parent
23b18fa6cd
commit
fdba1c2138
46 files changed
+1960
-201
No files matched your search
@@ -73,19 +73,37 @@ Normal channel messages pass through the shared inbound debouncer before agent e
|
||||
|
||||
### Human-like Delivery
|
||||
|
||||
`gateway.chat_behavior` controls optional channel-only delivery polish:
|
||||
`gateway.chat_behavior` controls optional channel-only delivery polish. Delivery
|
||||
text is not added to session history or the main provider messages.
|
||||
|
||||
- `quick_ack.mode = "llm_generated"` uses the existing main-turn `block.reply` event as the natural progress response for non-streaming channel runs. It does not make a separate LLM call.
|
||||
- `quick_ack.templates` are fallback messages. In generated mode, the first template is sent only if no generated `block.reply` arrives before `quick_ack.min_delay_ms`.
|
||||
- `quick_ack.mode = "fixed_template"` preserves the older fixed-template acknowledgement behavior.
|
||||
- `quick_ack.mode = "off"` disables chat-behavior quick acknowledgement. When explicit `gateway.block_reply` is on, the first generic pre-tool `block.reply` is treated as the immediate acknowledgement and suppressed; model-generated tool progress still delivers before tool execution because it is part of Intermediate Replies.
|
||||
- If a model requests tools without assistant text, the pipeline does not emit a synthetic Intermediate Reply. This avoids repetitive server templates; visible progress messages come from the LLM and should match the user's language.
|
||||
- `final_split` splits long final text replies into a bounded number of paragraph messages.
|
||||
- Per-channel `chat_behavior` overrides inherit the gateway config unless a field is explicitly set.
|
||||
- `quick_ack` sends one short receipt for non-streaming channel runs.
|
||||
`mode="sidecar_generated"` uses a bounded sidecar LLM call;
|
||||
`mode="llm_generated"` is kept as a backward-compatible alias;
|
||||
`mode="fixed_template"` sends the first template; `mode="off"` disables it.
|
||||
- `quick_ack.provider/model` can choose a cheaper sidecar provider/model. If
|
||||
unset, the delivery generator falls back to the agent provider/model. Timeout,
|
||||
max token, and max char limits bound the call; templates are fallback output on
|
||||
errors, timeouts, or empty sidecar text.
|
||||
- `intermediate_replies` sends sidecar-generated progress during tool phases. It
|
||||
is independent from `quick_ack`: either feature can be enabled or disabled
|
||||
alone.
|
||||
- Sidecar progress uses bounded delivery metadata only: message preview, locale,
|
||||
channel/peer, agent label, and tool phase. It does not receive session
|
||||
history, tool arguments, tool output, tool schemas, memory, or system prompts.
|
||||
- Deterministic Tool Status Messages no longer emit channel text. Platform
|
||||
reactions and explicit Show Reasoning delivery remain separate behavior.
|
||||
- `final_split` splits long final text replies into a bounded number of
|
||||
paragraph messages.
|
||||
- Override order is Channel > Agent > Workspace. Agent overrides live in
|
||||
`agents.other_config.delivery_behavior`; channel overrides continue under
|
||||
`chat_behavior`.
|
||||
- Legacy `gateway.block_reply` and channel `block_reply` values are still read
|
||||
as inherited `intermediate_replies.enabled` defaults when the newer
|
||||
`chat_behavior.intermediate_replies.enabled` field is unset.
|
||||
|
||||
Splitting is intentionally conservative. Replies containing fenced code, tables, lists, quotes, JSON/XML-ish blocks, or URL-only paragraphs remain a single message. Media replies and streaming deliveries are not split.
|
||||
|
||||
Progress messages are not added to session history by this behavior. Existing run timeline handling for `block.reply` remains unchanged.
|
||||
Progress messages are not added to session history by this behavior. Existing run timeline handling for explicit `block.reply` remains unchanged.
|
||||
|
||||
### Reasoning Delivery
|
||||
|
||||
|
||||
@@ -4,6 +4,32 @@ Significant changes, features, and fixes in reverse chronological order.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-09
|
||||
|
||||
### Behavior UX sidecar delivery overrides (issue #144)
|
||||
|
||||
**Changes**
|
||||
|
||||
- Removed user-facing Tool Status Messages from Behavior settings and disabled
|
||||
deterministic tool-status channel text.
|
||||
- Added sidecar-generated Quick Acknowledgement and Intermediate Replies with
|
||||
optional provider/model, timeout, token, and char caps.
|
||||
- Added Channel > Agent > Workspace delivery-behavior resolution. Agent
|
||||
overrides use `other_config.delivery_behavior` without a schema migration.
|
||||
- Kept legacy `block_reply` readable as a default for Intermediate Replies while
|
||||
removing its separate Web UI controls.
|
||||
- Kept Show Reasoning as a separate debug/testing feature.
|
||||
|
||||
**Tests**
|
||||
|
||||
- Added config resolution coverage for Channel > Agent > Workspace and Quick
|
||||
Ack independent from Intermediate Replies.
|
||||
- Added channel event coverage for sidecar quick ack, sidecar tool progress, and
|
||||
retired tool-status messages.
|
||||
- Added Web UI schema coverage for sidecar delivery override fields.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-01
|
||||
|
||||
### Telegram Show Reasoning delivery modes (issues #132, #133)
|
||||
|
||||
Reference in new issue
Block a user