When tool.started fires within a run, activeAssistantMessageId was
cleared, causing subsequent reasoning.delta events to create a new
separate assistant message just for the thinking block. This produced
one "思考过程" bubble per tool cycle instead of one per run.
Root cause: tool.started (line 1748) cleared activeAssistantMessageId,
and reasoning.delta required isStreaming=true to append — a state that
tool.started had turned off. Two fixes applied to both the live-stream
and history-replay handlers:
1. tool.started: stop clearing activeAssistantMessageId — keep the
pointer alive so the same assistant message is reused across cycles.
2. reasoning.delta: drop the isStreaming requirement — as long as the
tracked message exists (role === 'assistant'), resume streaming
via updateMessage before appending reasoning text.
One run now produces exactly one assistant message with all reasoning
accumulated into a single collapsible thinking block.
Verified: 152 test files / 949 tests pass, vue-tsc compiles clean,
harness:check passes, production build succeeds.
* feat: support profile-aware group chat bridge flows
* feat: route cron jobs through hermes cli
* Fix group chat routing and isolate bridge tests
* Add Grok image-to-video media skill
* Default Grok videos to media directory
* Fix bridge profile fallback and cron repeat clearing
* Refine bridge chat and gateway platform handling
* Filter bridge tool-call text deltas
* Preserve structured bridge chat history
* Prepare beta release build artifacts
* Fix Windows run profile resolution
* Fix Windows path compatibility checks
* Fix profile-scoped model page display
* Hide Windows subprocess windows for jobs and updates
* Hide Windows file backend subprocess windows
* Avoid Windows gateway restart lock conflicts
* Treat Windows gateway lock as running on startup
* Force release Windows gateway lock on restart
* Tighten Windows gateway lock cleanup
* Update chat e2e source expectation
* Bump package version to 0.5.30
---------
Co-authored-by: Codex <codex@openai.com>
* feat: add CLI chat sessions with Python agent bridge
Introduce a new CLI chat mode that connects Web UI directly to Hermes
Agent's AIAgent via a Python bridge subprocess and Socket.IO, bypassing
the API Server /v1/responses path. Supports streaming, slash commands
(/new, /undo, /retry, /branch, /compress, /save, /title), interrupt,
and steer.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* feat: update CLI chat session bridge
* fix: extend agent bridge startup timeouts
* docs: update bridge chat session design
* feat: align bridge compression and provider registry
* chore: bump version to 0.5.20
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>