mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-13 11:13:43 +08:00
Previously WebChatController.chatStream silently dropped every agent
lifecycle event except _usage_final (and content_delta / thinking_delta
derived from delta.payload). Visitors sat with nothing between the
meta event and the first content chunk — typically 3–10s when the
agent plans / recalls memory / runs tools, longer when the agent
chained multiple tool calls. The JWT chat path (ChatController) had
this wiring; webchat did not.
Curated 4-event subset (per design review):
- phase — high-level phase transition (planning / generating /
summarizing / ...). SDK shows a "AI is thinking..."
typing indicator before the first token.
- tool_start — agent invoked a tool. SDK shows a localized badge
("Searching...", "Reading file.pdf", ...).
- tool_end — tool completed. SDK clears the badge.
- plan — Plan-Execute agents expose their step list. SDK can
render a checklist.
Deliberately NOT forwarded (internal noise / leak risk):
- _usage_final, _routing_decision — consumed internally
- finish_reason — implicit in `done`
- feedback_event — visitor can't retry/regenerate anyway
- perf_summary, iteration_* — internal metrics
- plan_step_started/completed — too granular; the plan event covers
the visitor's needs
Critical safety constraint: tool_start / tool_end carry ONLY the tool
name. Tool arguments and results are dropped — agent tool calls can
contain PII (file paths, user queries, credentials), and relaying
those to a 3rd-party website frontend is a data leak. The SDK maps
tool name → localized label via its own lookup.
Backward compat: existing clients ignore unknown event types per the
SSE spec, so adding these is non-breaking.
Tests: 5 new cases in WebChatStreamE2ETest covering each event type
+ a regression case asserting internal events are silently dropped.
85/85 webchat tests green.
Docs: docs/zh/webchat.md gains a "实时进度事件" subsection.
Stack: feat/webchat-attachment-e2e → feat/webchat-stream-phase-events
Follow-up to epic #355.
|
||
|---|---|---|
| .. | ||
| cards | ||
| controller | ||
| dingtalk | ||
| discord | ||
| event | ||
| feishu | ||
| health | ||
| leader | ||
| media | ||
| model | ||
| notification | ||
| qrcode | ||
| repository | ||
| service | ||
| slack | ||
| telegram | ||
| tool | ||
| verifier | ||
| web | ||
| webchat | ||
| wecom | ||
| weixin | ||
| AbstractChannelAdapter.java | ||
| AsyncTaskMediaDispatcher.java | ||
| ChannelAdapter.java | ||
| ChannelChatOriginFactory.java | ||
| ChannelErrorClassifier.java | ||
| ChannelHealthMonitor.java | ||
| ChannelManager.java | ||
| ChannelMessage.java | ||
| ChannelMessageRenderer.java | ||
| ChannelMessageRouter.java | ||
| ChannelSessionStore.java | ||
| DeliveryOptions.java | ||
| ExponentialBackoff.java | ||
| MediaPathGuard.java | ||
| SendContext.java | ||
| StreamingChannelAdapter.java | ||