* feat(chat): add per-session reasoning effort selector
Adds a brain icon dropdown next to the paperclip in the chat input
toolbar that lets the user override agent.reasoning_effort per session
without editing config.yaml. Levels: none, minimal, low, medium, high,
xhigh. Empty selection falls back to the config default.
The override is forwarded end-to-end:
StartRunRequest.reasoning_effort -> Socket.IO 'run' event ->
handleBridgeRun -> AgentBridgeClient.chat options ->
hermes_bridge.py 'chat' action -> start_chat -> _run_chat ->
session.agent.reasoning_config (mutated in place around
run_conversation, restored in a try/finally).
Per-run by construction:
- Mutating reasoning_config inside try/finally keeps the AIAgent
instance alive (preserves prompt cache and tool registrations) and
restores the previous value after every turn, so the override never
leaks across sessions or turns.
- The selection is persisted in localStorage keyed by sessionId so it
survives reloads, and is rehydrated onto Session objects via a Pinia
watcher when the session list is refreshed from the server.
i18n: chat.reasoningEffort.{tooltip,defaultLabel,options.*} added to
all 10 locales (de, en, es, fr, ja, ko, pt, ru, zh, zh-TW).
Tests:
- tests/client/chat-store-reasoning-effort.test.ts (5 cases) covers
setSessionReasoningEffort persistence, clearing, multi-session
independence, missing-session no-op, and localStorage rehydration.
- tests/server/agent-bridge-reasoning-effort.test.ts (3 cases) covers
AgentBridgeClient.chat forwarding when set, omission when unset, and
omission when the empty string is passed.
- tests/client/chat-input-draft.test.ts updated to stub NPopselect.
Docs: docs/chat-chain-changes/2026-06-08-reasoning-effort-per-session.md
documents the chain change as required by harness:check.
* test: add NPopselect stub to voice-dialogue-controls naive-ui mock
The test file mocks naive-ui and stubs only the components that
ChatInput.vue used before this branch. The new brain icon dropdown
imports NPopselect, so the existing mock needs to expose a stub for it
or vitest throws 'No NPopselect export is defined on the naive-ui mock'
when ChatInput renders during the suite.
Mirrors the same one-line addition already applied to
chat-input-draft.test.ts in the previous commit.
* feat: add coding agent chat runner
* fix claude coding agent model identity
* Revert "fix claude coding agent model identity"
This reverts commit eff87d6e28.
* align claude coding agent settings with main
* remove claude bare mode from coding agent runner
* fix coding agent chat sessions