commandmate 0.26.1 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +430 -402
- package/.next/app-path-routes-manifest.json +32 -28
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -2
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -0
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +19 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -5
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -7
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +32 -28
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +3 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1538.js +7 -0
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +3 -2
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/2689.js +13 -0
- package/.next/server/chunks/2759.js +8 -0
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3292.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -17
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4423.js +1 -0
- package/.next/server/chunks/4444.js +22 -8
- package/.next/server/chunks/4565.js +3 -0
- package/.next/server/chunks/467.js +1 -0
- package/.next/server/chunks/4905.js +5 -0
- package/.next/server/chunks/5017.js +1 -0
- package/.next/server/chunks/5089.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -0
- package/.next/server/chunks/5354.js +1 -0
- package/.next/server/chunks/552.js +19 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5998.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -11
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/7472.js +1 -0
- package/.next/server/chunks/7506.js +1 -0
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +5 -5
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9284.js +1 -0
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -0
- package/.next/server/chunks/9938.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/9IXgWfBUtnEnRqnbmErTp/_buildManifest.js +1 -0
- package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
- package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
- package/.next/static/chunks/{6381-0e097c0286155883.js → 6381-8cfe50a5ca5425b1.js} +1 -1
- package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
- package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
- package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
- package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
- package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +1 -0
- package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
- package/.next/static/css/928e5a8830fbf997.css +1 -0
- package/.next/trace +13 -12
- package/.next/types/app/api/capabilities/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +40 -2
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +28 -13
- package/dist/cli/commands/instances.d.ts +30 -18
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +32 -36
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +73 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +18 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +21 -15
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/wait.d.ts +26 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +390 -43
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +16 -0
- package/dist/cli/config/cli-tool-ids.d.ts +11 -0
- package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
- package/dist/cli/config/cli-tool-ids.js +12 -1
- package/dist/cli/types/api-responses.d.ts +443 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +18 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +22 -0
- package/dist/cli/utils/server-capabilities.d.ts +56 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
- package/dist/cli/utils/server-capabilities.js +166 -0
- package/dist/cli/utils/session-target.d.ts +70 -0
- package/dist/cli/utils/session-target.d.ts.map +1 -0
- package/dist/cli/utils/session-target.js +118 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/lib/cli-tools/types.d.ts +61 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +41 -0
- package/dist/lib/detection/ansi.d.ts +2 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +3 -2
- package/dist/lib/detection/tools/verified-against.d.ts +84 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
- package/dist/lib/detection/tools/verified-against.js +88 -0
- package/dist/lib/detection/version-probes.d.ts +207 -0
- package/dist/lib/detection/version-probes.d.ts.map +1 -0
- package/dist/lib/detection/version-probes.js +290 -0
- package/dist/lib/security/env-sanitizer.d.ts +198 -0
- package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
- package/dist/lib/security/env-sanitizer.js +232 -0
- package/dist/server/locales/en/notifications.json +17 -6
- package/dist/server/locales/ja/notifications.json +17 -6
- package/dist/server/src/config/activity-bar-config.js +4 -0
- package/dist/server/src/config/cli-tool-timing-config.js +59 -2
- package/dist/server/src/config/copilot-constants.js +11 -1
- package/dist/server/src/config/detection-evidence-config.js +129 -0
- package/dist/server/src/config/schedule-config.js +56 -7
- package/dist/server/src/config/tmux-pane-config.js +18 -1
- package/dist/server/src/lib/auto-yes-poller.js +36 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
- package/dist/server/src/lib/cli-tools/base.js +131 -10
- package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
- package/dist/server/src/lib/cli-tools/claude.js +1 -1
- package/dist/server/src/lib/cli-tools/codex.js +6 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/server/src/lib/cli-tools/copilot.js +307 -81
- package/dist/server/src/lib/cli-tools/gemini.js +8 -6
- package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
- package/dist/server/src/lib/cli-tools/index.js +11 -1
- package/dist/server/src/lib/cli-tools/manager.js +56 -4
- package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
- package/dist/server/src/lib/cli-tools/opencode.js +233 -30
- package/dist/server/src/lib/cli-tools/session-name.js +57 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
- package/dist/server/src/lib/cli-tools/types.js +41 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
- package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
- package/dist/server/src/lib/cmate-parser.js +12 -4
- package/dist/server/src/lib/db/db.js +5 -1
- package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
- package/dist/server/src/lib/detection/ansi.js +3 -2
- package/dist/server/src/lib/detection/cli-patterns.js +901 -67
- package/dist/server/src/lib/detection/composer-text.js +455 -0
- package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
- package/dist/server/src/lib/detection/status-detector.js +76 -675
- package/dist/server/src/lib/detection/status-reason.js +57 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
- package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
- package/dist/server/src/lib/detection/tools/frame.js +47 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
- package/dist/server/src/lib/detection/tools/registry.js +58 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
- package/dist/server/src/lib/detection/tools/types.js +34 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
- package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
- package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
- package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
- package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
- package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
- package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
- package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
- package/dist/server/src/lib/job-executor.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
- package/dist/server/src/lib/polling/response-checker.js +243 -26
- package/dist/server/src/lib/push/failure-episode-state.js +127 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
- package/dist/server/src/lib/push/index.js +35 -1
- package/dist/server/src/lib/push/prompt-card-state.js +93 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
- package/dist/server/src/lib/push/push-sender.js +82 -7
- package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
- package/dist/server/src/lib/response-cleaner.js +93 -20
- package/dist/server/src/lib/response-extractor.js +98 -5
- package/dist/server/src/lib/security/env-sanitizer.js +179 -5
- package/dist/server/src/lib/session/agent-event-state.js +1038 -189
- package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
- package/dist/server/src/lib/session/claude-executor.js +23 -3
- package/dist/server/src/lib/session/claude-session.js +11 -1
- package/dist/server/src/lib/session/composer-clear.js +95 -0
- package/dist/server/src/lib/session/current-output-builder.js +267 -25
- package/dist/server/src/lib/session/provisional-turn.js +310 -0
- package/dist/server/src/lib/session/resolve-session-target.js +156 -0
- package/dist/server/src/lib/session/send-user-message.js +14 -18
- package/dist/server/src/lib/session/session-start-error.js +53 -1
- package/dist/server/src/lib/session/status-evidence.js +217 -0
- package/dist/server/src/lib/session/structured-prompt.js +46 -4
- package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
- package/dist/server/src/lib/tmux/key-sequence.js +120 -0
- package/dist/server/src/lib/tmux/tmux.js +91 -19
- package/dist/server/src/lib/tui-accumulator.js +68 -1
- package/dist/server/src/lib/verification/gate-runner.js +84 -1
- package/dist/server/src/lib/ws-server.js +8 -5
- package/dist/server/src/types/cli-tool-contracts.js +75 -0
- package/dist/server/src/types/terminal-keys.js +37 -0
- package/dist/types/cli-tool-contracts.d.ts +235 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -0
- package/dist/types/cli-tool-contracts.js +75 -0
- package/package.json +3 -2
- package/public/sw.js +65 -2
- package/.next/server/chunks/1841.js +0 -1
- package/.next/server/chunks/233.js +0 -1
- package/.next/server/chunks/3022.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/4455.js +0 -1
- package/.next/server/chunks/5959.js +0 -27
- package/.next/server/chunks/7458.js +0 -6
- package/.next/server/chunks/8730.js +0 -1
- package/.next/server/chunks/9058.js +0 -1
- package/.next/server/chunks/9687.js +0 -3
- package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fdfca039b7f5837e.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
- /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → 9IXgWfBUtnEnRqnbmErTp}/_ssgManifest.js +0 -0
|
@@ -54,13 +54,21 @@ const logger = (0, logger_1.createLogger)('lib/session/agent-session-lifecycle')
|
|
|
54
54
|
* @param at - Epoch ms; defaults to now
|
|
55
55
|
*/
|
|
56
56
|
function beginAgentSession(target, at = Date.now()) {
|
|
57
|
+
const before = (0, agent_event_state_1.getAgentEventDropCounts)(target.worktreeId, target.cliToolId, target.instanceId).decisionEvicted;
|
|
57
58
|
(0, agent_event_state_1.beginAgentEventGeneration)(target.worktreeId, target.cliToolId, target.instanceId, at);
|
|
59
|
+
const after = (0, agent_event_state_1.getAgentEventDropCounts)(target.worktreeId, target.cliToolId, target.instanceId).decisionEvicted;
|
|
58
60
|
const source = (0, sources_1.getAgentEventSource)(target.cliToolId);
|
|
59
61
|
logger.info('agent-session-generation-begun', {
|
|
60
62
|
worktreeId: target.worktreeId,
|
|
61
63
|
cliToolId: target.cliToolId,
|
|
62
64
|
instanceId: target.instanceId ?? target.cliToolId,
|
|
63
65
|
transport: source.transport,
|
|
66
|
+
// Issue #1930: approvals the replaced process was holding, discarded with
|
|
67
|
+
// it. Usually zero. A non-zero count on a *routine* restart is the
|
|
68
|
+
// interesting case — it says a session was recreated while somebody was
|
|
69
|
+
// blocked on a dialog, which is a thing an operator would otherwise only
|
|
70
|
+
// learn by noticing their `respond` no longer has anything to answer.
|
|
71
|
+
decisionsEvicted: after - before,
|
|
64
72
|
});
|
|
65
73
|
}
|
|
66
74
|
/**
|
|
@@ -91,7 +91,7 @@ function truncateOutput(output) {
|
|
|
91
91
|
* - codex: exec <message> --sandbox <permission>
|
|
92
92
|
* - gemini: -p <message>
|
|
93
93
|
* - vibe-local: [-p <message> -y] or [--model <model> -p <message> -y]
|
|
94
|
-
* - opencode: [run <message>] or [run -m
|
|
94
|
+
* - opencode: [run <message>] or [run -m <provider/model> <message>]
|
|
95
95
|
* - antigravity: -p <message> --dangerously-skip-permissions
|
|
96
96
|
* - others: -p <message> (fallback)
|
|
97
97
|
*
|
|
@@ -113,9 +113,29 @@ function buildCliArgs(message, cliToolId, permission, options) {
|
|
|
113
113
|
}
|
|
114
114
|
return ['-p', message, '-y'];
|
|
115
115
|
case 'opencode':
|
|
116
|
-
// [D2-007] When model is not specified, OpenCode uses opencode.json default model
|
|
116
|
+
// [D2-007] When model is not specified, OpenCode uses opencode.json default model.
|
|
117
|
+
//
|
|
118
|
+
// Issue #1914: the model is passed through **verbatim**. It used to be
|
|
119
|
+
// written as `ollama/${model}`, which had two problems and one excuse:
|
|
120
|
+
//
|
|
121
|
+
// - `opencode run --help` documents `-m, --model` as taking a value "in
|
|
122
|
+
// the format of provider/model" (measured on 1.18.21), so the prefix
|
|
123
|
+
// made every non-Ollama provider unreachable and mangled any value that
|
|
124
|
+
// already named one into `ollama/anthropic/…`.
|
|
125
|
+
// - The prefix was a silent transform: nothing downstream could tell the
|
|
126
|
+
// difference between "the user asked for Ollama" and "the code assumed
|
|
127
|
+
// it".
|
|
128
|
+
//
|
|
129
|
+
// The excuse is that it never ran. `resolveModelOption()` answered
|
|
130
|
+
// `undefined` for opencode, and the only other caller
|
|
131
|
+
// (`daily-summary-generator`) is gated by `SUMMARY_ALLOWED_TOOLS`, which
|
|
132
|
+
// does not list opencode either — so there is no stored CMATE.md value
|
|
133
|
+
// that the removed prefix was keeping correct. The branch is kept rather
|
|
134
|
+
// than deleted because this Issue makes it reachable; deleting it would
|
|
135
|
+
// mean `opencode --model x` in CMATE.md parses, validates, and is then
|
|
136
|
+
// silently ignored, which is the same class of bug one layer down.
|
|
117
137
|
if (options?.model) {
|
|
118
|
-
return ['run', '-m',
|
|
138
|
+
return ['run', '-m', options.model, message];
|
|
119
139
|
}
|
|
120
140
|
return ['run', message];
|
|
121
141
|
case 'antigravity':
|
|
@@ -538,7 +538,7 @@ async function startClaudeSession(options) {
|
|
|
538
538
|
// Check if Claude is installed
|
|
539
539
|
const claudeAvailable = await isClaudeInstalled();
|
|
540
540
|
if (!claudeAvailable) {
|
|
541
|
-
throw new
|
|
541
|
+
throw new session_start_error_1.SessionStartUnavailableError('Claude Code', 'Claude CLI is not installed or not in PATH');
|
|
542
542
|
}
|
|
543
543
|
const sessionName = getSessionName(worktreeId, instanceId);
|
|
544
544
|
// Check if session already exists
|
|
@@ -658,6 +658,16 @@ async function startClaudeSession(options) {
|
|
|
658
658
|
// dialog so a dialog still on screen is answered first.
|
|
659
659
|
const errorPattern = findSessionErrorPattern(cleanOutput);
|
|
660
660
|
if (errorPattern !== null) {
|
|
661
|
+
// Issue #2000 raised the push notification on this line. Issue #2009
|
|
662
|
+
// moved it up to `BaseCLITool.startSession`, which is the one method
|
|
663
|
+
// every tool inherits: six of the seven had no such line at all, and a
|
|
664
|
+
// seventh copy is how "only claude rings" happened in the first place.
|
|
665
|
+
// Nothing about what the reader receives changed — the error carries the
|
|
666
|
+
// tool name and the detected pattern, which is everything the
|
|
667
|
+
// notification was ever built from — and the sibling
|
|
668
|
+
// `SessionStartTimeoutError` below still deliberately does NOT notify
|
|
669
|
+
// (#1637: the session and its process are alive and the documented
|
|
670
|
+
// advice is to retry in a few seconds).
|
|
661
671
|
throw new session_start_error_1.SessionStartFailedError('Claude Code', sessionName, errorPattern);
|
|
662
672
|
}
|
|
663
673
|
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Clear the CLI composer, and prove it (Issue #1879).
|
|
4
|
+
*
|
|
5
|
+
* The UI's [Clear] button promises one thing — "the input box is now empty" — so
|
|
6
|
+
* this is a verified operation, not a fire-and-forget key send. #1878 §5-1
|
|
7
|
+
* measured the two ways a single `C-u` silently fails:
|
|
8
|
+
*
|
|
9
|
+
* 1. **Cursor at column 0.** `C-u` kills the text *before* the cursor, so a
|
|
10
|
+
* composer whose owner pressed Home before walking away survives it intact.
|
|
11
|
+
* {@link clearComposerLine} fixes that by sending `C-e` first.
|
|
12
|
+
* 2. **Multi-row composer.** `C-u` clears the current row only. A two-row
|
|
13
|
+
* residual needed three `C-e`+`C-u` passes before the box was actually
|
|
14
|
+
* empty (`2N-1` for N rows).
|
|
15
|
+
*
|
|
16
|
+
* So the loop here is: read the frame → decide whether real text is still there
|
|
17
|
+
* → send one pass → read again. It stops the moment
|
|
18
|
+
* {@link extractComposerText} stops reporting `content`, which is also what
|
|
19
|
+
* makes it correct in the presence of a CLI's dim placeholder text: `C-u` cannot
|
|
20
|
+
* remove a suggestion that was never in the buffer, and a loop that compared
|
|
21
|
+
* ANSI-stripped strings instead would spin until its cap on every idle session
|
|
22
|
+
* with a hint on screen — claude's rotating suggestion, or codex's
|
|
23
|
+
* `Ask Codex to do anything` (Issue #1890).
|
|
24
|
+
*
|
|
25
|
+
* The capture is taken with {@link capturePane} directly rather than through
|
|
26
|
+
* `captureSessionOutput`, because that path is served by a 5-second TTL cache
|
|
27
|
+
* (`tmux-capture-cache`): read-back verification against a cached frame would be
|
|
28
|
+
* reading the composer as it looked before the key was sent. The cache is
|
|
29
|
+
* invalidated on the way out so the next poll/push does not serve the pre-clear
|
|
30
|
+
* frame back to the browser.
|
|
31
|
+
*/
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.COMPOSER_CLEAR_REDRAW_DELAY_MS = exports.MAX_COMPOSER_CLEAR_PASSES = void 0;
|
|
34
|
+
exports.clearComposer = clearComposer;
|
|
35
|
+
const tmux_1 = require("../../lib/tmux/tmux");
|
|
36
|
+
const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
|
|
37
|
+
const composer_text_1 = require("../../lib/detection/composer-text");
|
|
38
|
+
const logger_1 = require("../../lib/logger");
|
|
39
|
+
const logger = (0, logger_1.createLogger)('composer-clear');
|
|
40
|
+
/**
|
|
41
|
+
* Upper bound on `C-e`+`C-u` passes.
|
|
42
|
+
*
|
|
43
|
+
* #1878 measured `2N-1` passes for an N-row composer, so this covers a composer
|
|
44
|
+
* of ~6 rows. The cap exists because the loop's exit condition depends on the
|
|
45
|
+
* TUI redrawing: a CLI that ignores the keys entirely must fail fast and report
|
|
46
|
+
* `cleared: false` rather than hold the request open.
|
|
47
|
+
*/
|
|
48
|
+
exports.MAX_COMPOSER_CLEAR_PASSES = 12;
|
|
49
|
+
/** Rows of pane to capture for read-back. The composer is pinned to the bottom. */
|
|
50
|
+
const CLEAR_READBACK_CAPTURE_LINES = 200;
|
|
51
|
+
/** Grace given to the TUI to repaint after a pass, before reading the frame back. */
|
|
52
|
+
exports.COMPOSER_CLEAR_REDRAW_DELAY_MS = 120;
|
|
53
|
+
const defaultDelay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
54
|
+
/**
|
|
55
|
+
* Empty the composer of a running session and verify the result.
|
|
56
|
+
*
|
|
57
|
+
* @param sessionName - tmux session to act on (must already exist; the caller checks)
|
|
58
|
+
* @param cliToolId - CLI whose composer layout to read. `claude` and `codex` can
|
|
59
|
+
* be verified today (see {@link extractComposerText}); for anything else the
|
|
60
|
+
* extractor reports `unsupported_tool`, no pass is sent, and `cleared` is
|
|
61
|
+
* false — a truthful "this endpoint cannot do that yet" rather than blind keys
|
|
62
|
+
* into an input line nobody has measured.
|
|
63
|
+
*/
|
|
64
|
+
async function clearComposer(sessionName, cliToolId, options = {}) {
|
|
65
|
+
const capture = options.capture ?? ((name) => (0, tmux_1.capturePane)(name, CLEAR_READBACK_CAPTURE_LINES));
|
|
66
|
+
const sendClear = options.sendClear ?? tmux_1.clearComposerLine;
|
|
67
|
+
const delay = options.delay ?? defaultDelay;
|
|
68
|
+
const maxPasses = options.maxPasses ?? exports.MAX_COMPOSER_CLEAR_PASSES;
|
|
69
|
+
let passes = 0;
|
|
70
|
+
let result = (0, composer_text_1.extractComposerText)(await capture(sessionName), cliToolId);
|
|
71
|
+
// Snapshot before the first pass: every later read shows less of it (a pass
|
|
72
|
+
// eats one row), so this is the only moment the full text exists.
|
|
73
|
+
const discardedText = result.state === 'content' ? result.text : '';
|
|
74
|
+
while (result.state === 'content' && passes < maxPasses) {
|
|
75
|
+
await sendClear(sessionName);
|
|
76
|
+
passes++;
|
|
77
|
+
await delay(exports.COMPOSER_CLEAR_REDRAW_DELAY_MS);
|
|
78
|
+
result = (0, composer_text_1.extractComposerText)(await capture(sessionName), cliToolId);
|
|
79
|
+
}
|
|
80
|
+
// Whatever happened above, the cached frame is now stale: the poller and the
|
|
81
|
+
// WebSocket push both read through `captureSessionOutput`, and serving the
|
|
82
|
+
// pre-clear frame would leave the bar on screen after the text is gone.
|
|
83
|
+
if (passes > 0)
|
|
84
|
+
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
85
|
+
// Positive confirmation only. `unsupported_tool` (nothing here can read that
|
|
86
|
+
// CLI's box) and `no_composer` (the box is not on screen, so the buffer behind
|
|
87
|
+
// whatever overlay is up was never inspected) are both "not verified", and
|
|
88
|
+
// reporting them as success would let the UI claim it emptied something it
|
|
89
|
+
// never looked at. Callers get `state` to tell the two apart.
|
|
90
|
+
const cleared = result.state === 'empty' || result.state === 'ghost';
|
|
91
|
+
if (!cleared) {
|
|
92
|
+
logger.warn('composer-clear:not-cleared', { sessionName, cliToolId, passes, state: result.state });
|
|
93
|
+
}
|
|
94
|
+
return { cleared, passes, state: result.state, remainingText: result.text, discardedText };
|
|
95
|
+
}
|
|
@@ -12,10 +12,15 @@ exports.mergeStructuredStatus = mergeStructuredStatus;
|
|
|
12
12
|
exports.buildCurrentOutput = buildCurrentOutput;
|
|
13
13
|
const db_1 = require("../../lib/db");
|
|
14
14
|
const unclassified_frame_tracker_1 = require("../../lib/detection/unclassified-frame-tracker");
|
|
15
|
+
const composer_text_1 = require("../../lib/detection/composer-text");
|
|
15
16
|
const upstream_faults_1 = require("../../lib/detection/upstream-faults");
|
|
16
17
|
const models_1 = require("../../types/models");
|
|
17
18
|
const logger_1 = require("../../lib/logger");
|
|
18
19
|
const manager_1 = require("../../lib/cli-tools/manager");
|
|
20
|
+
const types_1 = require("../../lib/cli-tools/types");
|
|
21
|
+
const registry_1 = require("../../lib/hooks/sources/registry");
|
|
22
|
+
const permission_decision_state_1 = require("../../lib/hooks/permission-decision-state");
|
|
23
|
+
const tool_input_normalization_state_1 = require("../../lib/hooks/tool-input-normalization-state");
|
|
19
24
|
const cli_session_1 = require("../../lib/session/cli-session");
|
|
20
25
|
const status_detector_1 = require("../../lib/detection/status-detector");
|
|
21
26
|
const auto_yes_manager_1 = require("../../lib/polling/auto-yes-manager");
|
|
@@ -25,6 +30,8 @@ const status_capture_config_1 = require("../../config/status-capture-config");
|
|
|
25
30
|
const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
|
|
26
31
|
const agent_event_state_1 = require("../../lib/session/agent-event-state");
|
|
27
32
|
const prompt_waiting_composition_1 = require("../../lib/session/prompt-waiting-composition");
|
|
33
|
+
const provisional_turn_1 = require("../../lib/session/provisional-turn");
|
|
34
|
+
const status_evidence_1 = require("../../lib/session/status-evidence");
|
|
28
35
|
const ask_user_question_prompt_1 = require("../../lib/session/ask-user-question-prompt");
|
|
29
36
|
const structured_prompt_1 = require("../../lib/session/structured-prompt");
|
|
30
37
|
const logger = (0, logger_1.createLogger)('current-output-builder');
|
|
@@ -208,28 +215,34 @@ function summarizeAskUserQuestion(episode) {
|
|
|
208
215
|
* those, passed in explicitly; the raw `structured.status === 'waiting'` still
|
|
209
216
|
* decides nothing on its own.
|
|
210
217
|
*
|
|
211
|
-
* ##
|
|
218
|
+
* ## `isUnclassifiedActive` is not this function's to move (Issue #2011)
|
|
212
219
|
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
* check is `sessionStatus === 'ready' && isUnclassifiedActive !== true` — leave
|
|
217
|
-
* the flag up and the structured `ready` buys nothing.
|
|
218
|
-
*
|
|
219
|
-
* Everywhere else the flag is left exactly as the scraper set it, which is not
|
|
220
|
-
* timidity but two specific behaviours that must survive:
|
|
220
|
+
* The flag is carried through from the scraper on every path. It answers "could
|
|
221
|
+
* the detection layer read this frame?", and no amount of knowledge about the
|
|
222
|
+
* TURN changes the answer for the FRAME:
|
|
221
223
|
*
|
|
222
224
|
* - a static overlay left on screen after a turn (`/help`, #1497) reads as
|
|
223
|
-
* `
|
|
224
|
-
*
|
|
225
|
-
*
|
|
225
|
+
* `running`/`no_recent_output` while the structured layer says `ready` — the
|
|
226
|
+
* structured layer adds nothing about the screen, and clearing the flag would
|
|
227
|
+
* take away the navigation hatch the user needs to escape;
|
|
226
228
|
* - a frame nobody can classify while the structured layer says `running` is
|
|
227
229
|
* still a frame nobody can classify. `wait`'s unclassified dwell (exit 10)
|
|
228
230
|
* is the last hatch for a screen that produces no events at all, and #1708
|
|
229
231
|
* exists because it was missing. A structured `running` does not prove a
|
|
230
232
|
* human is not needed — see the AskUserQuestion case above.
|
|
233
|
+
*
|
|
234
|
+
* `#1723`'s reported case — `Stop` arrives while the spinner is still painted —
|
|
235
|
+
* needs no help from here: that frame reads `running`/`thinking_indicator`, which
|
|
236
|
+
* is classified, so the flag was already down and `wait` completes on the
|
|
237
|
+
* structured `ready` alone.
|
|
238
|
+
*
|
|
239
|
+
* What this function DOES move is `evidence`, and only upwards: see
|
|
240
|
+
* {@link hookClosedTurn}.
|
|
241
|
+
*
|
|
242
|
+
* @param turn - The published turn record for this instance, or null. Read only
|
|
243
|
+
* for {@link hookClosedTurn}; `structured` remains the status authority.
|
|
231
244
|
*/
|
|
232
|
-
function mergeStructuredStatus(scraper, structured, promptWaiting = null) {
|
|
245
|
+
function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null) {
|
|
233
246
|
if (scraper.status === 'waiting') {
|
|
234
247
|
return { ...scraper, structuredApplied: false };
|
|
235
248
|
}
|
|
@@ -244,6 +257,9 @@ function mergeStructuredStatus(scraper, structured, promptWaiting = null) {
|
|
|
244
257
|
status: 'waiting',
|
|
245
258
|
reason: (0, prompt_waiting_composition_1.structuredWaitingReason)(promptWaiting),
|
|
246
259
|
thinking: false,
|
|
260
|
+
// Untouched: what the scraper could read about this frame does not change
|
|
261
|
+
// because the agent told us a dialog is open (Issue #1924).
|
|
262
|
+
evidence: scraper.evidence,
|
|
247
263
|
isUnclassifiedActive: scraper.isUnclassifiedActive,
|
|
248
264
|
structuredApplied: true,
|
|
249
265
|
};
|
|
@@ -252,39 +268,149 @@ function mergeStructuredStatus(scraper, structured, promptWaiting = null) {
|
|
|
252
268
|
return { ...scraper, structuredApplied: false };
|
|
253
269
|
}
|
|
254
270
|
const thinking = structured.status === 'running';
|
|
271
|
+
// Issue #2011 (対応 2): the agent's own turn close IS positive evidence.
|
|
272
|
+
//
|
|
273
|
+
// #1927 (DR2-003) guarded this override with `scraper.evidence === 'positive'`
|
|
274
|
+
// to stop a structured `ready` clearing `isUnclassifiedActive` on a frame
|
|
275
|
+
// nobody could read. It over-corrected twice over. First, the conjunct made
|
|
276
|
+
// the whole expression a no-op: `evidence = cond ? 'positive' : scraper.evidence`
|
|
277
|
+
// where `cond` requires `scraper.evidence === 'positive'` returns
|
|
278
|
+
// `scraper.evidence` on both arms, so the branch could not change a value in
|
|
279
|
+
// any direction. Second, the fix it was reaching for belonged one field over —
|
|
280
|
+
// the hatch is held open by {@link ScraperVerdict.isUnclassifiedActive}, which
|
|
281
|
+
// is carried through below rather than re-derived, so the evidence no longer
|
|
282
|
+
// has to be understated to protect it.
|
|
283
|
+
//
|
|
284
|
+
// What that leaves is a payload that stopped contradicting itself. A pane
|
|
285
|
+
// whose `reason` reads `hook_stop` while `statusEvidence` reads `'none'` is
|
|
286
|
+
// denying, in one field, the strongest positive signal this server can get: a
|
|
287
|
+
// `Stop` from the agent, for a turn this server watched open. `closedAt >
|
|
288
|
+
// openedAt` is what narrows it to that case — a `Stop` that arrived with no
|
|
289
|
+
// turn open publishes `openedAt: null` (see `recordAgentEvent`), and a close
|
|
290
|
+
// the SCREEN inferred carries one of the other {@link TurnCloseReason} values.
|
|
291
|
+
// Freshness needs no bound of its own: `getStructuredSessionState` answered
|
|
292
|
+
// null above once the display event passed STRUCTURED_STATE_MAX_AGE_MS.
|
|
293
|
+
//
|
|
294
|
+
// `scraper.status === 'running'` is deliberately NOT required. The session this
|
|
295
|
+
// Issue was reported from sat at `ready`/`input_prompt` with `closedBy: 'stop'`
|
|
296
|
+
// — the agent had said it was done and the frame agreed — and the old conjunct
|
|
297
|
+
// is what kept publishing `'none'` for it.
|
|
298
|
+
const evidence = structured.status === 'ready' && hookClosedTurn(turn) ? 'positive' : scraper.evidence;
|
|
255
299
|
return {
|
|
256
300
|
status: structured.status,
|
|
257
301
|
reason: structured.reason,
|
|
258
302
|
thinking,
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
303
|
+
evidence,
|
|
304
|
+
// Issue #2011: what the structured layer knows about the TURN says nothing
|
|
305
|
+
// about whether this FRAME could be read. #1708's dwell and the nav hatch
|
|
306
|
+
// are the last way out of a pane nothing can drive, and a `Stop` does not
|
|
307
|
+
// make an unreadable pane readable — see the `/help` overlay fixture in
|
|
308
|
+
// `tests/unit/lib/detection/fixtures/claude-live-2011/`.
|
|
309
|
+
isUnclassifiedActive: scraper.isUnclassifiedActive,
|
|
262
310
|
structuredApplied: true,
|
|
263
311
|
};
|
|
264
312
|
}
|
|
313
|
+
/**
|
|
314
|
+
* Whether the agent's own `Stop` closed a turn this server watched open
|
|
315
|
+
* (Issue #2011, 対応 2).
|
|
316
|
+
*
|
|
317
|
+
* Both halves are required. `closedBy: 'stop'` rules out the five close reasons
|
|
318
|
+
* that are the server's inference rather than the agent's word (`stale`,
|
|
319
|
+
* `generation`, `session_end`, `scraper_evidence`, `resync_idle`), and
|
|
320
|
+
* `closedAt > openedAt` rules out a `Stop` whose turn was never observed
|
|
321
|
+
* opening — `recordAgentEvent` publishes `openedAt: null` for that, and a close
|
|
322
|
+
* with nothing behind it is not a completion anybody watched.
|
|
323
|
+
*/
|
|
324
|
+
function hookClosedTurn(turn) {
|
|
325
|
+
if (turn === null)
|
|
326
|
+
return false;
|
|
327
|
+
const { closedBy, closedAt, openedAt } = turn;
|
|
328
|
+
return closedBy === 'stop' && closedAt !== null && openedAt !== null && closedAt > openedAt;
|
|
329
|
+
}
|
|
265
330
|
/**
|
|
266
331
|
* Build the current-output payload for a worktree session.
|
|
267
332
|
*
|
|
268
333
|
* @param db - Database instance
|
|
269
334
|
* @param worktreeId - Worktree ID (assumed already validated by the caller)
|
|
270
|
-
* @param cliToolId - CLI tool ID
|
|
335
|
+
* @param cliToolId - CLI tool ID, ALREADY resolved by the caller
|
|
271
336
|
* @param instanceId - Optional agent instance ID (defaults to the primary instance)
|
|
337
|
+
* @param resolution - How the caller resolved that pair, when it resolved one
|
|
338
|
+
* (Issue #1884). Appended to the payload; nothing here reads it.
|
|
272
339
|
*/
|
|
273
|
-
async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
340
|
+
async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId, resolution) {
|
|
341
|
+
const payload = await buildPayload(db, worktreeId, cliToolId, instanceId);
|
|
342
|
+
if (!resolution)
|
|
343
|
+
return payload;
|
|
344
|
+
return {
|
|
345
|
+
...payload,
|
|
346
|
+
resolvedBy: resolution.resolvedBy,
|
|
347
|
+
// Explicit null rather than an absent key: `capture --json | jq '.conflict'`
|
|
348
|
+
// must answer "no contradiction" rather than nothing at all, exactly as
|
|
349
|
+
// `model` does.
|
|
350
|
+
conflict: resolution.conflict ?? null,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* The payload itself, with no knowledge of how its (tool, instance) pair was
|
|
355
|
+
* chosen. Split from {@link buildCurrentOutput} so the resolution fields are
|
|
356
|
+
* appended in one place instead of at both of the two return sites below.
|
|
357
|
+
*/
|
|
358
|
+
async function buildPayload(db, worktreeId, cliToolId, instanceId) {
|
|
274
359
|
const resolvedInstanceId = instanceId ?? cliToolId;
|
|
275
360
|
const manager = manager_1.CLIToolManager.getInstance();
|
|
276
361
|
const cliTool = manager.getTool(cliToolId);
|
|
277
362
|
const stopEventAt = (0, agent_event_state_1.getLastStopEventAt)(worktreeId, cliToolId, instanceId);
|
|
278
363
|
const lastEvent = (0, agent_event_state_1.getLastAgentEvent)(worktreeId, cliToolId, instanceId);
|
|
364
|
+
// Issue #1924: the registry answers for every tool — a real implementation
|
|
365
|
+
// when there is one, the compatibility source otherwise — so this needs no
|
|
366
|
+
// null branch and never names a tool.
|
|
367
|
+
const eventSource = (0, registry_1.getAgentEventSource)(cliToolId);
|
|
368
|
+
const now = Date.now();
|
|
369
|
+
const pendingDecisions = (0, agent_event_state_1.getPendingDecisions)(worktreeId, cliToolId, instanceId, now);
|
|
279
370
|
const structuredEvents = {
|
|
280
371
|
lastEventType: lastEvent?.event ?? null,
|
|
281
372
|
lastEventAt: lastEvent?.at ?? null,
|
|
282
373
|
lastEventDetail: lastEvent?.detail ?? null,
|
|
374
|
+
// Issue #1926 published these; Issue #1930 made them a real record. Read
|
|
375
|
+
// before the `isRunning` branch so both return paths carry the turn fields.
|
|
376
|
+
...(0, agent_event_state_1.getPublishedAgentTurn)(worktreeId, cliToolId, instanceId, now),
|
|
377
|
+
// Issue #1930. `deliveryExpired` is computed HERE and only here, because
|
|
378
|
+
// this is the layer that holds both halves: the record's age, and the
|
|
379
|
+
// source's declared `decisionTimeoutSeconds`. `agent-event-state` cannot
|
|
380
|
+
// reach the registry — its module graph pulls in `better-sqlite3` — which
|
|
381
|
+
// is why every capability arrives there as a value a caller hands over.
|
|
382
|
+
pendingDecisions: pendingDecisions.map((decision) => ({
|
|
383
|
+
id: decision.decisionId,
|
|
384
|
+
at: decision.at,
|
|
385
|
+
source: decision.source,
|
|
386
|
+
toolName: decision.toolName,
|
|
387
|
+
confirmedAt: decision.confirmedAt,
|
|
388
|
+
scraperCorroborated: decision.scraperCorroborated,
|
|
389
|
+
deliveryExpired: (0, provisional_turn_1.isDeliveryExpired)(decision, eventSource.capabilities.decisionTimeoutSeconds, now),
|
|
390
|
+
})),
|
|
391
|
+
dedupDropped: (0, agent_event_state_1.getAgentEventDropCounts)(worktreeId, cliToolId, instanceId),
|
|
392
|
+
dialogPendingMaxMs: { ...provisional_turn_1.DIALOG_PENDING_MAX_MS },
|
|
283
393
|
promptWaitingSince: null,
|
|
284
394
|
promptWaitingSource: null,
|
|
395
|
+
// Issue #1902. Read here, before the `isRunning` branch, so both return
|
|
396
|
+
// paths carry it.
|
|
397
|
+
toolInputNormalization: (0, tool_input_normalization_state_1.getLastToolInputNormalization)(worktreeId, cliToolId, instanceId),
|
|
398
|
+
// Issue #1898, the same shape and for the same reason: an automatic verdict
|
|
399
|
+
// this server delivered on the agent's behalf is invisible to the operator
|
|
400
|
+
// otherwise. Exposure only — the dialog state is `promptWaitingSince` /
|
|
401
|
+
// `isPromptWaiting`, and nothing reads this back to decide anything.
|
|
402
|
+
permissionDecision: (0, permission_decision_state_1.getLastPermissionDecision)(worktreeId, cliToolId, instanceId),
|
|
403
|
+
source: {
|
|
404
|
+
cliToolId: eventSource.cliToolId,
|
|
405
|
+
capabilities: eventSource.capabilities,
|
|
406
|
+
},
|
|
285
407
|
};
|
|
286
408
|
const running = await cliTool.isRunning(worktreeId, instanceId);
|
|
287
409
|
if (!running) {
|
|
410
|
+
// Issue #1926: the latch describes a process, and this one is gone. Dropped
|
|
411
|
+
// rather than aged out so the next session on this key starts with no
|
|
412
|
+
// history instead of inheriting the last one's verdict.
|
|
413
|
+
(0, status_evidence_1.forgetLastKnownStatus)((0, auto_yes_manager_1.buildCompositeKey)(worktreeId, cliToolId, instanceId));
|
|
288
414
|
return {
|
|
289
415
|
isRunning: false,
|
|
290
416
|
content: '',
|
|
@@ -292,6 +418,13 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
292
418
|
cliToolId,
|
|
293
419
|
sessionStatus: 'idle',
|
|
294
420
|
sessionStatusReason: 'session_not_running',
|
|
421
|
+
// Issue #1926: `'positive'` is not a formality here. tmux was asked and
|
|
422
|
+
// answered — the absence of the session is a fact this layer observed,
|
|
423
|
+
// not a pattern that failed to match, which is the whole distinction §4 D1
|
|
424
|
+
// is drawing.
|
|
425
|
+
statusEvidence: 'positive',
|
|
426
|
+
lastKnownStatus: null,
|
|
427
|
+
lastKnownStatusAt: null,
|
|
295
428
|
lastStopEventAt: stopEventAt,
|
|
296
429
|
structuredEvents,
|
|
297
430
|
// Issue #1785: null on a dead session, not the last model it ran. The
|
|
@@ -314,6 +447,11 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
314
447
|
// is a claim about what is on screen right now, and a dead session has no
|
|
315
448
|
// screen.
|
|
316
449
|
upstreamFault: null,
|
|
450
|
+
// Issue #1879: same reasoning as `upstreamFault` — there is no input box
|
|
451
|
+
// on a session that is not running, so there is nothing to report and
|
|
452
|
+
// nothing the UI could act on.
|
|
453
|
+
composerText: null,
|
|
454
|
+
composerState: 'no_composer',
|
|
317
455
|
};
|
|
318
456
|
}
|
|
319
457
|
const sessionState = (0, db_1.getSessionState)(db, worktreeId, resolvedInstanceId);
|
|
@@ -333,30 +471,75 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
333
471
|
// capture layer will ever fetch — captureSessionOutput() reads at most
|
|
334
472
|
// CACHE_MAX_CAPTURE_LINES regardless of the request.
|
|
335
473
|
const captureWindowSaturated = (0, tmux_capture_cache_1.isCaptureWindowSaturated)(totalLines, Math.min(status_capture_config_1.STATUS_CAPTURE_LINES, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES));
|
|
336
|
-
|
|
474
|
+
// Issue #1910: saturation of the capture WINDOW is only one of the two ways
|
|
475
|
+
// the cursor dies, and it is the one that never fires for the alternate-screen
|
|
476
|
+
// tools — their pane is 1000 rows (claude / copilot) or 200 (opencode), so a
|
|
477
|
+
// 10000-line window is never reached and the branch above stayed false
|
|
478
|
+
// forever. Meanwhile the poller stores `lastCapturedLine` for them too
|
|
479
|
+
// (`updateSessionState` is called unconditionally; only the DEDUP comparison
|
|
480
|
+
// is gated on the tool, response-checker.ts), so after one turn the stored
|
|
481
|
+
// value is the pane height, `slice()` starts past the last row, and `content`
|
|
482
|
+
// — the field `commandmate capture <id>` prints — was an empty string.
|
|
483
|
+
// `capturedLineCountIsCursor` states both conditions in one place.
|
|
484
|
+
const lineCountIsCursor = (0, types_1.capturedLineCountIsCursor)(cliToolId, captureWindowSaturated);
|
|
485
|
+
const newLines = lineCountIsCursor ? lines.slice(Math.max(0, lastCapturedLine)) : lines;
|
|
337
486
|
const newContent = newLines.join('\n');
|
|
338
487
|
const compositeKey = (0, auto_yes_manager_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
|
|
339
488
|
const lastServerResponseTimestamp = (0, auto_yes_manager_1.getLastServerResponseTimestamp)(compositeKey);
|
|
340
489
|
const lastOutputTimestamp = lastServerResponseTimestamp ? new Date(lastServerResponseTimestamp) : undefined;
|
|
341
490
|
const statusResult = (0, status_detector_1.detectSessionStatus)(output, cliToolId, lastOutputTimestamp);
|
|
342
|
-
|
|
491
|
+
// Issue #1912: every `running` reason that means "the agent is producing
|
|
492
|
+
// output", not just `thinking_indicator`. opencode answers
|
|
493
|
+
// `opencode_processing_indicator` for its `esc interrupt` footer, which is
|
|
494
|
+
// the only signal it gives between the submitted prompt and the first
|
|
495
|
+
// transcript row — on a scraper-only session that stretch showed no
|
|
496
|
+
// thinking indicator at all.
|
|
497
|
+
const thinking = (0, status_detector_1.isGeneratingStatus)(statusResult);
|
|
343
498
|
const scraperPromptWaiting = statusResult.hasActivePrompt;
|
|
344
499
|
const isSelectionListActive = statusResult.status === 'waiting' && status_detector_1.SELECTION_LIST_REASONS.has(statusResult.reason);
|
|
345
500
|
const isPagerActive = statusResult.reason === status_detector_1.STATUS_REASON.CODEX_PAGER;
|
|
346
501
|
// Issue #1497: the detection-independent nav hatch (#1017/#1494) is gated on
|
|
347
502
|
// isUnclassifiedActive. A static, unrecognized TUI overlay (e.g. Claude `/help`)
|
|
348
|
-
// whose frame stops changing degrades from `running`/`default` to
|
|
503
|
+
// whose frame stops changing degrades from `running`/`default` to
|
|
349
504
|
// `no_recent_output` once the Auto-Yes poller has stamped lastOutputTimestamp
|
|
350
505
|
// (its sole writer, auto-yes-poller.ts). That is still an interactive-but-
|
|
351
506
|
// unclassified frame — a real idle prompt (`❯`) is classified earlier as
|
|
352
507
|
// `input_prompt`, never as `no_recent_output` — so treat the timed-out fallback
|
|
353
508
|
// as unclassified too and keep the hatch open instead of stranding the user.
|
|
354
|
-
|
|
355
|
-
|
|
509
|
+
// Issue #1924, §4 D1 decision 2: stated as evidence. Issue #1927 moved that
|
|
510
|
+
// PRODUCER into the detector, because only the detector knows which rule
|
|
511
|
+
// answered — `input_prompt` is positive for a tool whose idle rule vouched for
|
|
512
|
+
// the frame and `'none'` for one whose rule declined, with the same status and
|
|
513
|
+
// the same reason on the wire.
|
|
514
|
+
const evidence = statusResult.evidence;
|
|
515
|
+
// Issue #2011: the flag is NOT that fact, and deriving it from `evidence` is
|
|
516
|
+
// the regression this Issue fixes. `'none'` is "I could not prove this pane is
|
|
517
|
+
// idle" — an ordinary Claude composer with no completion marker above it
|
|
518
|
+
// qualifies, and 7 of 8 live idle panes did on 2026-08-24. The flag's three
|
|
519
|
+
// consumers all ask the older, narrower question instead: `TerminalEscapeHatch`
|
|
520
|
+
// opens on a frame a human has to drive by hand, `wait` suppresses its
|
|
521
|
+
// completion check and eventually exits 10 on one, and `unclassified_frames`
|
|
522
|
+
// records it as a detection failure worth capturing as a fixture. That is
|
|
523
|
+
// `isUnclassifiedFrame` — the reason vocabulary, not the strength of the
|
|
524
|
+
// evidence behind a readable verdict.
|
|
525
|
+
const isUnclassifiedActive = (0, status_evidence_1.isUnclassifiedFrame)(statusResult.status, statusResult.reason);
|
|
356
526
|
// Issue #1723: the two-layer merge. Everything above this line is the string
|
|
357
527
|
// analysis, unchanged and still the only source on a machine where no hook
|
|
358
528
|
// ever fires — `getStructuredSessionState` answers null there, and
|
|
359
529
|
// `mergeStructuredStatus` then returns the scraper's verdict untouched.
|
|
530
|
+
// Issue #1930: the screen's own half of "is this turn over". Fed BEFORE the
|
|
531
|
+
// structured state is read so a poll that closes the turn is the poll that
|
|
532
|
+
// reports it, and fed with the SCRAPER's verdict rather than the merged one —
|
|
533
|
+
// reading the merge back would be circular, since the merge is where this
|
|
534
|
+
// layer's `running` overrides the frame.
|
|
535
|
+
//
|
|
536
|
+
// What this buys is a bound on a lost `Stop` far shorter than the 30-minute
|
|
537
|
+
// staleness rule: three consecutive frames that positively read as a finished
|
|
538
|
+
// composer retire the structured `running`, and the pane goes back to being
|
|
539
|
+
// the scraper's to describe. What it deliberately does NOT do is complete a
|
|
540
|
+
// `commandmate wait` — see SCRAPER_COMPLETION_POLLS, and #1839's measurement
|
|
541
|
+
// of a 529 storm returning Claude to exactly this frame having run nothing.
|
|
542
|
+
(0, agent_event_state_1.observeScraperCompletionEvidence)(worktreeId, cliToolId, instanceId, statusResult.status === 'ready' && evidence === 'positive');
|
|
360
543
|
const structured = (0, agent_event_state_1.getStructuredSessionState)(worktreeId, cliToolId, instanceId);
|
|
361
544
|
// Issue #1725: the open-dialog half of the same merge, resolved before the
|
|
362
545
|
// status merge because it decides one of its inputs. The rule itself — the
|
|
@@ -378,7 +561,19 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
378
561
|
structuredEvents.promptWaitingSince = promptWaiting.at;
|
|
379
562
|
structuredEvents.promptWaitingSource = promptWaiting.source;
|
|
380
563
|
}
|
|
381
|
-
const merged = mergeStructuredStatus({
|
|
564
|
+
const merged = mergeStructuredStatus({
|
|
565
|
+
status: statusResult.status,
|
|
566
|
+
reason: statusResult.reason,
|
|
567
|
+
thinking,
|
|
568
|
+
evidence,
|
|
569
|
+
isUnclassifiedActive,
|
|
570
|
+
}, structured, promptWaiting,
|
|
571
|
+
// Issue #2011: the same record `structuredEvents` publishes, read once. The
|
|
572
|
+
// merge needs `closedBy` / `closedAt` / `openedAt`, which
|
|
573
|
+
// `StructuredSessionState` folds away into `hook_stop` — and the folded form
|
|
574
|
+
// cannot tell a `Stop` that closed a watched turn from one that arrived with
|
|
575
|
+
// no turn open.
|
|
576
|
+
structuredEvents);
|
|
382
577
|
// The OR rule, computed once for the whole server (Issue #1737): this is the
|
|
383
578
|
// same `resolvePromptWaiting` call the `send` guard makes, so the payload and
|
|
384
579
|
// the guard cannot disagree about whether a prompt is open. What they are
|
|
@@ -399,9 +594,27 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
399
594
|
// The degraded form, for a dialog only the structured layer can see. Enriched
|
|
400
595
|
// with the question text when one is in flight — that turns "a dialog is open
|
|
401
596
|
// and nobody could read it" into "a dialog is open and here is what it asks".
|
|
597
|
+
//
|
|
598
|
+
// Issue #1898 adds the replies the dialog accepts, for the sources that can be
|
|
599
|
+
// answered without touching the pane. The gate is `eventIdentity`: a source
|
|
600
|
+
// that publishes a per-decision id is a source whose approval can be answered
|
|
601
|
+
// by that id, which is what makes an option NUMBER here mean something other
|
|
602
|
+
// than a line on a screen nobody parsed. `source === 'notification'` narrows
|
|
603
|
+
// it to a dialog the agent actually reported — a `permission-request` record
|
|
604
|
+
// is a prediction, and a question is answered with a choice rather than with
|
|
605
|
+
// one of these three verdicts.
|
|
606
|
+
const decisionOptions = promptWaiting !== null &&
|
|
607
|
+
promptWaiting.source === 'notification' &&
|
|
608
|
+
eventSource.capabilities.eventIdentity === 'permission-id'
|
|
609
|
+
? structured_prompt_1.STRUCTURED_DECISION_OPTIONS
|
|
610
|
+
: null;
|
|
402
611
|
const structuredFacts = promptWaiting === null
|
|
403
612
|
? null
|
|
404
|
-
: {
|
|
613
|
+
: {
|
|
614
|
+
...promptWaiting,
|
|
615
|
+
askUserQuestion: summarizeAskUserQuestion(askUserQuestion),
|
|
616
|
+
decisionOptions,
|
|
617
|
+
};
|
|
405
618
|
const promptData = scraperPromptWaiting
|
|
406
619
|
? correctedPromptData ??
|
|
407
620
|
scraperPromptData ??
|
|
@@ -468,6 +681,10 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
468
681
|
facts: structuredFacts,
|
|
469
682
|
});
|
|
470
683
|
}
|
|
684
|
+
// Issue #1879: structural, and computed here next to the other frame readers
|
|
685
|
+
// rather than inside a status branch — the bar it feeds must appear on the
|
|
686
|
+
// strength of what is in the box, never on the strength of a status verdict.
|
|
687
|
+
const composer = (0, composer_text_1.extractComposerText)(output, cliToolId);
|
|
471
688
|
const realtimeSnippet = lines.slice(-100).join('\n');
|
|
472
689
|
// Issue #1839: judged on exactly what is published as `realtimeSnippet`, not
|
|
473
690
|
// on `output`. The wider capture keeps a banner from an hour ago in scope, and
|
|
@@ -486,6 +703,18 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
486
703
|
// in antigravity's rule that the effort comes from the model id, which a bare
|
|
487
704
|
// read of the scraped half would drop.
|
|
488
705
|
const { model, effort } = (0, agent_event_state_1.getResolvedAgentModelInfo)(worktreeId, cliToolId, instanceId);
|
|
706
|
+
// Issue #1926, §7: fed the MERGED verdict, for the reason the unclassified
|
|
707
|
+
// tracker above is — this is the verdict that gets published, so latching the
|
|
708
|
+
// scraper's raw reading would make `lastKnownStatus` disagree with the
|
|
709
|
+
// `sessionStatus` it sat next to one poll earlier. Observed before it is read
|
|
710
|
+
// so a positive poll reports itself, which is what keeps the field from
|
|
711
|
+
// looking stale on a healthy session.
|
|
712
|
+
(0, status_evidence_1.observeStatusEvidence)(compositeKey, {
|
|
713
|
+
status: merged.status,
|
|
714
|
+
reason: merged.reason,
|
|
715
|
+
evidence: merged.evidence,
|
|
716
|
+
});
|
|
717
|
+
const lastKnown = (0, status_evidence_1.getLastKnownStatus)(compositeKey);
|
|
489
718
|
return {
|
|
490
719
|
isRunning: true,
|
|
491
720
|
cliToolId,
|
|
@@ -514,6 +743,12 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
514
743
|
isSelectionListActive,
|
|
515
744
|
isPagerActive,
|
|
516
745
|
isUnclassifiedActive: merged.isUnclassifiedActive,
|
|
746
|
+
// Issue #1926: the same fact `isUnclassifiedActive` carries, named the way
|
|
747
|
+
// §4 D1 names it. Published from the merged verdict so the two cannot
|
|
748
|
+
// disagree on the wire.
|
|
749
|
+
statusEvidence: merged.evidence,
|
|
750
|
+
lastKnownStatus: lastKnown?.status ?? null,
|
|
751
|
+
lastKnownStatusAt: lastKnown?.at ?? null,
|
|
517
752
|
lastServerResponseTimestamp,
|
|
518
753
|
serverPollerActive: (0, auto_yes_manager_1.isPollerActive)(compositeKey),
|
|
519
754
|
lastStopEventAt: stopEventAt,
|
|
@@ -535,5 +770,12 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
535
770
|
at: Date.now(),
|
|
536
771
|
}
|
|
537
772
|
: null,
|
|
773
|
+
// Issue #1879: read from `output` — the RAW capture, still carrying the SGR
|
|
774
|
+
// attributes `capture-pane -e` fetched. Everything else in this function
|
|
775
|
+
// works on stripped text; this one deliberately does not, because dim is the
|
|
776
|
+
// only thing that separates Claude's ghost suggestion from text a human
|
|
777
|
+
// typed. Do not "tidy" this to read a stripped variable.
|
|
778
|
+
composerText: composer.state === 'content' ? composer.text : null,
|
|
779
|
+
composerState: composer.state,
|
|
538
780
|
};
|
|
539
781
|
}
|