Route subagent planning events into spawn_agent card in the UI
Previously PlanningStatus/PlanReady had no is_subagent flag, so subagent
planning spinners and plan cards rendered as top-level Navi planning UI.

Backend:
- Add is_subagent field to PlanningStatus and PlanReady events
- _run_planning accepts is_subagent param, passes it through all yields
- run_ephemeral calls _run_planning with is_subagent=True
- websocket.py forwards is_subagent in planning_status and plan_ready messages

Frontend (chat.js):
- onPlanningStatus: if is_subagent, set planningLabel on the last spawn_agent
  card instead of msg.statusLabel
- onPlanReady: if is_subagent, push plan into spawn card steps and clear
  planningLabel; otherwise behave as before

Frontend (ToolCard.vue):
- Render subagent-planning-indicator (spinner + label) when planningLabel set
- Render plan cards inside subagent steps using the same plan-card pattern

Also includes leftover session changes: spawn_agent default 40 in description
and manual, updated manual content.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 2d2d5c4 commit 59f01b3fc6e36a8cdc7301504c35820b161bfd43
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored on 17 Apr
Showing 8 changed files
View
manuals/spawn_agent.md
View
navi/api/websocket.py
View
navi/core/agent.py
View
navi/core/events.py
View
navi/tools/spawn_agent.py
View
webclient/src/components/messages/ToolCard.vue
View
webclient/src/stores/chat.js
View
webclient/src/styles/app.scss