commandmate 0.44.2 → 0.44.3
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 +149 -149
- package/.next/app-path-routes-manifest.json +21 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +0 -6
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +2 -2
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.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 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +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.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.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_client-reference-manifest.js +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 +2 -2
- 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 +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.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.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.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +2 -2
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- package/.next/server/app/api/templates/route_client-reference-manifest.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_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 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- 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 +3 -3
- 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 +1 -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]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.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 +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.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.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.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.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.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_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.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.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_client-reference-manifest.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/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_client-reference-manifest.js +1 -1
- 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 +2 -2
- 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 +2 -2
- 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 +3 -3
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -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 +2 -2
- 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.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.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_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_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]/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 +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/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/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_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +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 +11 -11
- 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 +21 -21
- package/.next/server/chunks/1191.js +2 -2
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1559.js +2 -0
- package/.next/server/chunks/1789.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -1
- package/.next/server/chunks/2980.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3718.js +1 -1
- package/.next/server/chunks/4207.js +2 -2
- package/.next/server/chunks/450.js +1 -1
- package/.next/server/chunks/4672.js +5 -0
- package/.next/server/chunks/{9353.js → 4718.js} +2 -2
- package/.next/server/chunks/4837.js +14 -0
- package/.next/server/chunks/5048.js +1 -1
- package/.next/server/chunks/5209.js +1 -0
- package/.next/server/chunks/5595.js +1 -1
- package/.next/server/chunks/5625.js +25 -0
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +3 -3
- package/.next/server/chunks/7491.js +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/850.js +1 -1
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +1 -1
- package/.next/server/chunks/8918.js +7 -7
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +6 -6
- package/.next/server/chunks/9731.js +3 -3
- 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/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
- package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-06d35bb1aa02de80.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
- package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
- package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-0d1750b833f5cc3e.js} +1 -1
- package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/static/css/057f64a65726c439.css +1 -0
- package/.next/trace +13 -13
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +120 -119
- package/dist/cli/commands/attach.d.ts +94 -0
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +145 -7
- package/dist/cli/commands/auto-yes.js +1 -1
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +3 -5
- package/dist/cli/commands/command-target.d.ts +23 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -0
- package/dist/cli/commands/command-target.js +25 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +41 -2
- package/dist/cli/commands/message-dispatch.d.ts +36 -0
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
- package/dist/cli/commands/message-dispatch.js +63 -0
- package/dist/cli/commands/reply.d.ts.map +1 -1
- package/dist/cli/commands/reply.js +2 -5
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +3 -6
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +149 -146
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +589 -431
- package/dist/cli/types/api-responses.d.ts +159 -27
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/api-responses.js +4 -2
- package/dist/cli/utils/api-client.d.ts +25 -5
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +87 -55
- package/dist/cli/utils/server-url.d.ts +1 -0
- package/dist/cli/utils/server-url.d.ts.map +1 -1
- package/dist/cli/utils/server-url.js +7 -0
- package/dist/config/uat-isolation.d.ts +140 -0
- package/dist/config/uat-isolation.d.ts.map +1 -0
- package/dist/config/uat-isolation.js +246 -0
- package/dist/lib/global-state.d.ts +12 -0
- package/dist/lib/global-state.d.ts.map +1 -0
- package/dist/lib/global-state.js +16 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
- package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/lib/session/prompt-view.d.ts +26 -3
- package/dist/lib/session/prompt-view.d.ts.map +1 -1
- package/dist/lib/session/prompt-view.js +26 -3
- package/dist/lib/session/status-evidence-type.d.ts +16 -0
- package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
- package/dist/lib/session/status-evidence-type.js +2 -0
- package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
- package/dist/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/locales/en/worktree.json +3 -1
- package/dist/server/locales/ja/worktree.json +3 -1
- package/dist/server/src/cli/types/api-responses.js +4 -2
- package/dist/server/src/config/cli-tool-timing-config.js +1 -6
- package/dist/server/src/config/uat-isolation.js +246 -0
- package/dist/server/src/lib/assistant-response-saver.js +62 -3
- package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
- package/dist/server/src/lib/auto-yes-poller.js +450 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
- package/dist/server/src/lib/cli-tools/base.js +151 -0
- package/dist/server/src/lib/cli-tools/codex.js +44 -80
- package/dist/server/src/lib/cli-tools/command-code.js +24 -56
- package/dist/server/src/lib/cli-tools/copilot.js +25 -67
- package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
- package/dist/server/src/lib/cli-tools/gemini.js +23 -73
- package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
- package/dist/server/src/lib/cli-tools/opencode.js +21 -85
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
- package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
- package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
- package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
- package/dist/server/src/lib/detection/prompt-detector.js +2 -35
- package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
- package/dist/server/src/lib/detection/selection-shape.js +32 -520
- package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
- package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
- package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
- package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
- package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
- package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
- package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
- package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
- package/dist/server/src/lib/detection/tools/context-above.js +20 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
- package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
- package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
- package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
- package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
- package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
- package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
- package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
- package/dist/server/src/lib/global-state.js +16 -0
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
- package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
- package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
- package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
- package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
- package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
- package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
- package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
- package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
- package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
- package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
- package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
- package/dist/server/src/lib/hooks/sources/registry.js +3 -2
- package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
- package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
- package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
- package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
- package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
- package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
- package/dist/server/src/lib/polling/response-checker.js +641 -1142
- package/dist/server/src/lib/polling/response-dedup.js +3 -4
- package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
- package/dist/server/src/lib/polling/response-poller-core.js +54 -20
- package/dist/server/src/lib/polling/startup-screen.js +142 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
- package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
- package/dist/server/src/lib/prompt-answer-sender.js +5 -4
- package/dist/server/src/lib/push/failure-episode-state.js +2 -2
- package/dist/server/src/lib/push/notification-dedup.js +3 -4
- package/dist/server/src/lib/push/prompt-card-state.js +2 -2
- package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
- package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
- package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +3 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- package/dist/server/src/lib/response-cleaner.js +24 -1
- package/dist/server/src/lib/response-extractor.js +16 -0
- package/dist/server/src/lib/schedule-manager.js +8 -10
- package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
- package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
- package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
- package/dist/server/src/lib/session/agent-event-model.js +562 -0
- package/dist/server/src/lib/session/agent-event-record.js +10 -0
- package/dist/server/src/lib/session/agent-event-state.js +106 -1854
- package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
- package/dist/server/src/lib/session/agent-event-turn.js +811 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
- package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
- package/dist/server/src/lib/session/claude-executor.js +45 -5
- package/dist/server/src/lib/session/claude-session.js +21 -65
- package/dist/server/src/lib/session/cli-session.js +17 -0
- package/dist/server/src/lib/session/current-output-builder.js +450 -1103
- package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
- package/dist/server/src/lib/session/current-output-types.js +9 -0
- package/dist/server/src/lib/session/detection-divergence.js +55 -0
- package/dist/server/src/lib/session/global-session-constants.js +2 -13
- package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
- package/dist/server/src/lib/session/layer-disagreement.js +2 -2
- package/dist/server/src/lib/session/opencode-session-store.js +2 -1
- package/dist/server/src/lib/session/prompt-view.js +26 -3
- package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
- package/dist/server/src/lib/session/provisional-turn.js +3 -1
- package/dist/server/src/lib/session/send-user-message.js +1 -1
- package/dist/server/src/lib/session/session-starting-state.js +4 -6
- package/dist/server/src/lib/session/status-evidence-type.js +2 -0
- package/dist/server/src/lib/session/status-evidence.js +2 -2
- package/dist/server/src/lib/session/structured-status-merge.js +335 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
- package/dist/server/src/lib/session-cleanup.js +1 -5
- package/dist/server/src/lib/skills/install-plan.js +2 -1
- package/dist/server/src/lib/skills/snapshot-store.js +2 -2
- package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
- package/dist/server/src/lib/timer-manager.js +6 -8
- package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
- package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/src/lib/tmux/session-hooks.js +2 -1
- package/dist/server/src/lib/tmux/session-status-options.js +3 -3
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
- package/dist/server/src/lib/tmux/tmux.js +33 -59
- package/dist/server/src/lib/tui-accumulator.js +2 -2
- package/dist/server/src/lib/version-checker.js +6 -6
- package/dist/server/src/lib/ws-server.js +47 -11
- package/docs/en/user-guide/webapp-guide.md +27 -3
- package/package.json +1 -1
- package/release-notes/0.44.3.json +82 -0
- package/scripts/hooks/cmate-agent-event.sh +18 -0
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/4372.js +0 -5
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9798.js +0 -2
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
- package/.next/static/css/38070d879efa1371.css +0 -1
- package/dist/server/src/lib/cli-tools/index.js +0 -41
- package/dist/server/src/lib/polling/global-session-poller.js +0 -140
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The two-layer status merge: the screen scrape set against the agent's own
|
|
4
|
+
* account of its turn (Issue #3215).
|
|
5
|
+
*
|
|
6
|
+
* Moved verbatim out of `current-output-builder`, which re-exports
|
|
7
|
+
* `mergeStructuredStatus`, `ScraperVerdict` and `MergedStatusVerdict` under the
|
|
8
|
+
* same names, so an import from either module reads the same declaration. The
|
|
9
|
+
* comments came along unedited: where one says "this module", it was written
|
|
10
|
+
* about `current-output-builder`.
|
|
11
|
+
*
|
|
12
|
+
* `summarizeAskUserQuestion`, `staleReadyCandidate` and `readNewestPromptAt`
|
|
13
|
+
* are exported for `buildPayload` and for nothing else; they are not part of
|
|
14
|
+
* what `current-output-builder` re-exports.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.summarizeAskUserQuestion = summarizeAskUserQuestion;
|
|
18
|
+
exports.mergeStructuredStatus = mergeStructuredStatus;
|
|
19
|
+
exports.staleReadyCandidate = staleReadyCandidate;
|
|
20
|
+
exports.readNewestPromptAt = readNewestPromptAt;
|
|
21
|
+
// Issue #2429: the send ledger, read directly from `chat-db` rather than from
|
|
22
|
+
// the `@/lib/db` barrel because that barrel does not re-export it. It is the
|
|
23
|
+
// SAME row `commandmate wait` asks for over
|
|
24
|
+
// `GET /api/worktrees/:id/messages?limit=1&unit=pairs` (see `readNewestPromptAt`
|
|
25
|
+
// in `cli/commands/wait.ts`), so the server and the CLI cannot disagree about
|
|
26
|
+
// when this instance was last handed a prompt.
|
|
27
|
+
const chat_db_1 = require("../../lib/db/chat-db");
|
|
28
|
+
const logger_1 = require("../../lib/logger");
|
|
29
|
+
const prompt_waiting_composition_1 = require("../../lib/session/prompt-waiting-composition");
|
|
30
|
+
// Issue #3215: the name is the one this line has always been logged under. It
|
|
31
|
+
// is what an operator greps for, so it did not move with the code.
|
|
32
|
+
const logger = (0, logger_1.createLogger)('current-output-builder');
|
|
33
|
+
/**
|
|
34
|
+
* The `AskUserQuestion` call as the degraded prompt can describe it
|
|
35
|
+
* (Issue #1726).
|
|
36
|
+
*
|
|
37
|
+
* Only the first question, and no option numbers — see
|
|
38
|
+
* {@link StructuredAskUserQuestionSummary} for why a layer that cannot see the
|
|
39
|
+
* screen must not publish numbers for it.
|
|
40
|
+
*/
|
|
41
|
+
function summarizeAskUserQuestion(episode) {
|
|
42
|
+
const first = episode?.spec.questions[0];
|
|
43
|
+
if (!first)
|
|
44
|
+
return null;
|
|
45
|
+
return {
|
|
46
|
+
question: first.question,
|
|
47
|
+
labels: first.choices.map((choice) => choice.label),
|
|
48
|
+
questionCount: episode.spec.questions.length,
|
|
49
|
+
// Issue #2951: a question that takes a typed answer, so the panel and the
|
|
50
|
+
// phone sheet can offer an input for it.
|
|
51
|
+
...(first.custom ? { custom: true } : {}),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Prefer the agent's own account of what it is doing over the screen scrape
|
|
56
|
+
* (Issue #1723).
|
|
57
|
+
*
|
|
58
|
+
* Pure, and exported so the whole precedence table can be tested without a tmux
|
|
59
|
+
* session behind it.
|
|
60
|
+
*
|
|
61
|
+
* ## Why the scraper still wins in two cases
|
|
62
|
+
*
|
|
63
|
+
* **`waiting` on the scraper's side always wins.** A frame the detector reads
|
|
64
|
+
* as a prompt, a selection list or a pager is a frame a human has to act on,
|
|
65
|
+
* and this Issue deliberately does not touch `isPromptWaiting` / `promptData` /
|
|
66
|
+
* `isSelectionListActive` (they are #1725's). Letting a structured `running`
|
|
67
|
+
* overwrite `sessionStatus` while those three still said "answer me" would
|
|
68
|
+
* publish a self-contradicting payload. It is also the empirically necessary
|
|
69
|
+
* rule: the live capture found that Claude emits **no event at all** while an
|
|
70
|
+
* `AskUserQuestion` selection or "Ready to submit your answers?" screen is up
|
|
71
|
+
* (`agent-hooks-live-verification.md` §5.6), so the newest structured fact
|
|
72
|
+
* there is the `user_prompt_submit` that opened the turn — `running` — while
|
|
73
|
+
* the truth on screen is "waiting for a human". That is precisely the #1708
|
|
74
|
+
* stall, and the scraper is the only layer that can see it.
|
|
75
|
+
*
|
|
76
|
+
* **A structured `waiting` is applied only through the prompt-waiting state**
|
|
77
|
+
* (Issue #1725). #1723 recorded `Notification(permission_prompt)` and stopped
|
|
78
|
+
* there, for a reason that had to be answered before it could be promoted:
|
|
79
|
+
* nothing marks a permission prompt as *answered*, so a verdict read off the
|
|
80
|
+
* last event alone would stick until the next `Stop` and describe a session
|
|
81
|
+
* that went back to work minutes ago. `getStructuredPromptWaiting` is that
|
|
82
|
+
* answer — it is released by `Stop` / `user_prompt_submit` / a generation
|
|
83
|
+
* change, by the scraper reporting the frame it corroborated has cleared, and
|
|
84
|
+
* by expiry. So the `waiting` promoted here is the one that survives all of
|
|
85
|
+
* those, passed in explicitly; the raw `structured.status === 'waiting'` still
|
|
86
|
+
* decides nothing on its own.
|
|
87
|
+
*
|
|
88
|
+
* ## `isUnclassifiedActive` is not this function's to move (Issue #2011)
|
|
89
|
+
*
|
|
90
|
+
* The flag is carried through from the scraper on every path. It answers "could
|
|
91
|
+
* the detection layer read this frame?", and no amount of knowledge about the
|
|
92
|
+
* TURN changes the answer for the FRAME:
|
|
93
|
+
*
|
|
94
|
+
* - a static overlay left on screen after a turn (`/help`, #1497) reads as
|
|
95
|
+
* `running`/`no_recent_output` while the structured layer says `ready` — the
|
|
96
|
+
* structured layer adds nothing about the screen, and clearing the flag would
|
|
97
|
+
* take away the navigation hatch the user needs to escape;
|
|
98
|
+
* - a frame nobody can classify while the structured layer says `running` is
|
|
99
|
+
* still a frame nobody can classify. `wait`'s unclassified dwell (exit 10)
|
|
100
|
+
* is the last hatch for a screen that produces no events at all, and #1708
|
|
101
|
+
* exists because it was missing. A structured `running` does not prove a
|
|
102
|
+
* human is not needed — see the AskUserQuestion case above.
|
|
103
|
+
*
|
|
104
|
+
* `#1723`'s reported case — `Stop` arrives while the spinner is still painted —
|
|
105
|
+
* needs no help from here: that frame reads `running`/`thinking_indicator`, which
|
|
106
|
+
* is classified, so the flag was already down and `wait` completes on the
|
|
107
|
+
* structured `ready` alone.
|
|
108
|
+
*
|
|
109
|
+
* What this function DOES move is `evidence`, and only upwards: see
|
|
110
|
+
* {@link hookClosedTurn}.
|
|
111
|
+
*
|
|
112
|
+
* @param turn - The published turn record for this instance, or null. Read only
|
|
113
|
+
* for {@link hookClosedTurn}; `structured` remains the status authority.
|
|
114
|
+
*/
|
|
115
|
+
function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null, lastPromptAt = null) {
|
|
116
|
+
if (scraper.status === 'waiting') {
|
|
117
|
+
return { ...scraper, structuredApplied: false };
|
|
118
|
+
}
|
|
119
|
+
// Issue #1725, the OR rule at the status level: the scraper reads this frame
|
|
120
|
+
// as running or ready, and the agent has told us a dialog is in front of it.
|
|
121
|
+
// Publishing `running` next to `isPromptWaiting: true` would be a payload
|
|
122
|
+
// that contradicts itself, and every consumer of `sessionStatus` — the
|
|
123
|
+
// sidebar dot, `deriveSessionStatus`, the worktrees API — would show a worker
|
|
124
|
+
// that needs a human as one that is busy.
|
|
125
|
+
if (promptWaiting !== null) {
|
|
126
|
+
return {
|
|
127
|
+
status: 'waiting',
|
|
128
|
+
reason: (0, prompt_waiting_composition_1.structuredWaitingReason)(promptWaiting),
|
|
129
|
+
thinking: false,
|
|
130
|
+
// Untouched: what the scraper could read about this frame does not change
|
|
131
|
+
// because the agent told us a dialog is open (Issue #1924).
|
|
132
|
+
evidence: scraper.evidence,
|
|
133
|
+
isUnclassifiedActive: scraper.isUnclassifiedActive,
|
|
134
|
+
structuredApplied: true,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (structured === null || structured.status === 'waiting') {
|
|
138
|
+
return { ...scraper, structuredApplied: false };
|
|
139
|
+
}
|
|
140
|
+
// Issue #2429: the structured `ready` is about a turn older than the prompt
|
|
141
|
+
// this instance is currently answering, and the screen says so. See
|
|
142
|
+
// {@link structuredReadyPredatesPrompt} for why that combination is the only
|
|
143
|
+
// one in which the scraper wins a `running`.
|
|
144
|
+
if (structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt)) {
|
|
145
|
+
return { ...scraper, structuredApplied: false };
|
|
146
|
+
}
|
|
147
|
+
const thinking = structured.status === 'running';
|
|
148
|
+
// Issue #2011 (対応 2): the agent's own turn close IS positive evidence.
|
|
149
|
+
//
|
|
150
|
+
// #1927 (DR2-003) guarded this override with `scraper.evidence === 'positive'`
|
|
151
|
+
// to stop a structured `ready` clearing `isUnclassifiedActive` on a frame
|
|
152
|
+
// nobody could read. It over-corrected twice over. First, the conjunct made
|
|
153
|
+
// the whole expression a no-op: `evidence = cond ? 'positive' : scraper.evidence`
|
|
154
|
+
// where `cond` requires `scraper.evidence === 'positive'` returns
|
|
155
|
+
// `scraper.evidence` on both arms, so the branch could not change a value in
|
|
156
|
+
// any direction. Second, the fix it was reaching for belonged one field over —
|
|
157
|
+
// the hatch is held open by {@link ScraperVerdict.isUnclassifiedActive}, which
|
|
158
|
+
// is carried through below rather than re-derived, so the evidence no longer
|
|
159
|
+
// has to be understated to protect it.
|
|
160
|
+
//
|
|
161
|
+
// What that leaves is a payload that stopped contradicting itself. A pane
|
|
162
|
+
// whose `reason` reads `hook_stop` while `statusEvidence` reads `'none'` is
|
|
163
|
+
// denying, in one field, the strongest positive signal this server can get: a
|
|
164
|
+
// `Stop` from the agent, for a turn this server watched open. `closedAt >
|
|
165
|
+
// openedAt` is what narrows it to that case — a `Stop` that arrived with no
|
|
166
|
+
// turn open publishes `openedAt: null` (see `recordAgentEvent`), and a close
|
|
167
|
+
// the SCREEN inferred carries one of the other {@link TurnCloseReason} values.
|
|
168
|
+
// Freshness needs no bound of its own: `getStructuredSessionState` answered
|
|
169
|
+
// null above once the display event passed STRUCTURED_STATE_MAX_AGE_MS.
|
|
170
|
+
//
|
|
171
|
+
// `scraper.status === 'running'` is deliberately NOT required. The session this
|
|
172
|
+
// Issue was reported from sat at `ready`/`input_prompt` with `closedBy: 'stop'`
|
|
173
|
+
// — the agent had said it was done and the frame agreed — and the old conjunct
|
|
174
|
+
// is what kept publishing `'none'` for it.
|
|
175
|
+
const evidence = structured.status === 'ready' && hookClosedTurn(turn) ? 'positive' : scraper.evidence;
|
|
176
|
+
return {
|
|
177
|
+
status: structured.status,
|
|
178
|
+
reason: structured.reason,
|
|
179
|
+
thinking,
|
|
180
|
+
evidence,
|
|
181
|
+
// Issue #2011: what the structured layer knows about the TURN says nothing
|
|
182
|
+
// about whether this FRAME could be read. #1708's dwell and the nav hatch
|
|
183
|
+
// are the last way out of a pane nothing can drive, and a `Stop` does not
|
|
184
|
+
// make an unreadable pane readable — see the `/help` overlay fixture in
|
|
185
|
+
// `tests/unit/lib/detection/fixtures/claude-live-2011/`.
|
|
186
|
+
isUnclassifiedActive: scraper.isUnclassifiedActive,
|
|
187
|
+
structuredApplied: true,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Whether the agent's own `Stop` closed a turn this server watched open
|
|
192
|
+
* (Issue #2011, 対応 2).
|
|
193
|
+
*
|
|
194
|
+
* Both halves are required. `closedBy: 'stop'` rules out the five close reasons
|
|
195
|
+
* that are the server's inference rather than the agent's word (`stale`,
|
|
196
|
+
* `generation`, `session_end`, `scraper_evidence`, `resync_idle`), and
|
|
197
|
+
* `closedAt > openedAt` rules out a `Stop` whose turn was never observed
|
|
198
|
+
* opening — `recordAgentEvent` publishes `openedAt: null` for that, and a close
|
|
199
|
+
* with nothing behind it is not a completion anybody watched.
|
|
200
|
+
*/
|
|
201
|
+
function hookClosedTurn(turn) {
|
|
202
|
+
if (turn === null)
|
|
203
|
+
return false;
|
|
204
|
+
const { closedBy, closedAt, openedAt } = turn;
|
|
205
|
+
return closedBy === 'stop' && closedAt !== null && openedAt !== null && closedAt > openedAt;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Whether a structured `ready` could be about a turn that ended before the
|
|
209
|
+
* prompt now on screen (Issue #2429).
|
|
210
|
+
*
|
|
211
|
+
* The cheap half of {@link structuredReadyPredatesPrompt}, split out because
|
|
212
|
+
* `buildPayload` asks it FIRST: it is the gate on the one database read this
|
|
213
|
+
* rule needs, and a session that is not in this state must not pay for the send
|
|
214
|
+
* ledger on every poll. One expression, two callers — the alternative is the
|
|
215
|
+
* "two expressions for one fact" the merge's own docblock says is how this
|
|
216
|
+
* layer drifts.
|
|
217
|
+
*
|
|
218
|
+
* Three conjuncts, and all three are about the same instant:
|
|
219
|
+
*
|
|
220
|
+
* - **the screen is positively generating.** `ScraperVerdict.thinking` is
|
|
221
|
+
* `isGeneratingStatus`, i.e. `running` with `thinking_indicator` /
|
|
222
|
+
* `opencode_processing_indicator` behind it — a spinner, `✻ Thinking…` or
|
|
223
|
+
* `esc to interrupt` that a tool's own pattern matched. It is deliberately
|
|
224
|
+
* NOT `scraper.status === 'running'`: the `no_recent_output` and
|
|
225
|
+
* `unknown_frame` floors are also `running`, and neither is evidence of
|
|
226
|
+
* anything. A frame that merely stopped changing must never retire a `Stop`
|
|
227
|
+
* the agent actually sent.
|
|
228
|
+
* - **the structured layer says `ready`.** `running` and `waiting` already win
|
|
229
|
+
* on their own paths and are not in question here.
|
|
230
|
+
* - **that `ready` came from the agent's own `Stop`.**
|
|
231
|
+
* `getStructuredSessionState` publishes `ready / hook_stop` exactly when the
|
|
232
|
+
* turn record carries `closedBy: 'stop'` with a `closedAt`, so the record is
|
|
233
|
+
* read rather than the folded reason.
|
|
234
|
+
*
|
|
235
|
+
* `openedAt` is deliberately not required, which is what separates this from
|
|
236
|
+
* {@link hookClosedTurn}. A `Stop` that arrived with no turn open publishes
|
|
237
|
+
* `openedAt: null`, and for the tool this Issue was reported from that is the
|
|
238
|
+
* ORDINARY shape: Command Code cannot emit `UserPromptSubmit` (its loader
|
|
239
|
+
* validates the event name against a closed list) and emits no
|
|
240
|
+
* `PreToolUse` / `PostToolUse` on a turn that calls no tool, so nothing ever
|
|
241
|
+
* opens the turn. Requiring an `openedAt` here would exclude precisely the case
|
|
242
|
+
* this rule exists for.
|
|
243
|
+
*/
|
|
244
|
+
function staleReadyCandidate(scraper, structured, turn) {
|
|
245
|
+
if (!scraper.thinking)
|
|
246
|
+
return false;
|
|
247
|
+
if (structured === null || structured.status !== 'ready')
|
|
248
|
+
return false;
|
|
249
|
+
if (turn === null)
|
|
250
|
+
return false;
|
|
251
|
+
return turn.closedBy === 'stop' && turn.closedAt !== null;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Whether the structured layer's `ready` has been outlived by the newest prompt
|
|
255
|
+
* this instance was handed (Issue #2429).
|
|
256
|
+
*
|
|
257
|
+
* ## The defect this closes
|
|
258
|
+
*
|
|
259
|
+
* The merge above prefers the agent's own account to the screen, and until this
|
|
260
|
+
* Issue the only exception was a scraper `waiting` (#1708). That is correct for
|
|
261
|
+
* every tool that can say when a turn BEGINS — claude, codex, copilot, gemini
|
|
262
|
+
* and antigravity all post a turn-opening event, so a live turn replaces the
|
|
263
|
+
* previous turn's `stop` before the first generating frame is ever read.
|
|
264
|
+
*
|
|
265
|
+
* Command Code can post neither: no `UserPromptSubmit`, and no `PreToolUse` /
|
|
266
|
+
* `PostToolUse` on a turn that calls no tool. The previous turn's `ready /
|
|
267
|
+
* hook_stop` therefore stays the newest structured fact for the whole of the
|
|
268
|
+
* next turn, and the merge published it over a pane that was visibly generating.
|
|
269
|
+
* Measured 2026-09-08 on a 19 s turn: `sessionStatus` read `ready / hook_stop`
|
|
270
|
+
* from 4 s to 18 s while the status row said `esc to interrupt`. `commandmate
|
|
271
|
+
* wait` reads that field — not the frame — for "is at its composer", so #1975's
|
|
272
|
+
* 60 s unanswered-prompt hold was the only thing standing between a long turn
|
|
273
|
+
* and a `basis=scraper_ready` completion reported before the reply existed.
|
|
274
|
+
*
|
|
275
|
+
* ## Why a comparison rather than a timer
|
|
276
|
+
*
|
|
277
|
+
* The same comparison `wait` already makes (`outstandingPrompt`), against the
|
|
278
|
+
* same two server-stamped facts: the turn's `closedAt`, and the timestamp of
|
|
279
|
+
* the newest user row in the chat ledger. A `Stop` that POSTDATES the newest
|
|
280
|
+
* prompt is this turn's own — the agent finished, the spinner on the frame is a
|
|
281
|
+
* repaint that has not settled, and the structured `ready` keeps winning. A
|
|
282
|
+
* `Stop` that predates it has reported neither the start nor the end of the
|
|
283
|
+
* work now on screen, and about that work it says nothing at all.
|
|
284
|
+
*
|
|
285
|
+
* Shortening #1975's hold would have been the other repair, and the Issue rules
|
|
286
|
+
* it out for a reason worth restating here: the hold is what stops a false
|
|
287
|
+
* completion during a turn nobody has reported yet, so a shorter one moves the
|
|
288
|
+
* false completion earlier rather than removing it.
|
|
289
|
+
*
|
|
290
|
+
* @param lastPromptAt - Epoch ms of the newest prompt handed to this instance,
|
|
291
|
+
* or null when the ledger was not read or holds none. Null decides nothing:
|
|
292
|
+
* an unreadable ledger is not evidence that nothing was sent, so the
|
|
293
|
+
* structured verdict stands exactly as it did before this Issue.
|
|
294
|
+
*/
|
|
295
|
+
function structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt) {
|
|
296
|
+
if (lastPromptAt === null)
|
|
297
|
+
return false;
|
|
298
|
+
if (!staleReadyCandidate(scraper, structured, turn))
|
|
299
|
+
return false;
|
|
300
|
+
const closedAt = turn?.closedAt ?? null;
|
|
301
|
+
return closedAt !== null && closedAt < lastPromptAt;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* When this instance was last handed a prompt, or null (Issue #2429).
|
|
305
|
+
*
|
|
306
|
+
* The server's half of the comparison `commandmate wait` makes over HTTP. Both
|
|
307
|
+
* sides read the same row — the newest `role: 'user'` message scoped to this
|
|
308
|
+
* (worktree, tool, instance) — so the field this function feeds and the notice
|
|
309
|
+
* `wait` prints cannot describe different sends.
|
|
310
|
+
*
|
|
311
|
+
* Best effort, like {@link recordUnclassifiedFrame} and
|
|
312
|
+
* {@link recordStructuredPrompt}: the caller is building a payload, and a
|
|
313
|
+
* ledger that cannot be read must cost this one comparison and nothing else.
|
|
314
|
+
* Null is reported rather than a guess, and null leaves the pre-#2429
|
|
315
|
+
* precedence in place — an unreadable ledger is not evidence that nothing was
|
|
316
|
+
* sent, which is the position `wait` takes on the same read.
|
|
317
|
+
*/
|
|
318
|
+
function readNewestPromptAt(db, worktreeId, cliToolId, instanceId) {
|
|
319
|
+
try {
|
|
320
|
+
const row = (0, chat_db_1.getLastUserMessageForInstance)(db, worktreeId, cliToolId, instanceId);
|
|
321
|
+
if (!row)
|
|
322
|
+
return null;
|
|
323
|
+
const at = row.timestamp instanceof Date ? row.timestamp.getTime() : NaN;
|
|
324
|
+
return Number.isFinite(at) ? at : null;
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
logger.debug('newest-prompt-read-failed', {
|
|
328
|
+
worktreeId,
|
|
329
|
+
cliToolId,
|
|
330
|
+
instanceId,
|
|
331
|
+
error: error instanceof Error ? error.message : String(error),
|
|
332
|
+
});
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
@@ -47,13 +47,12 @@ exports.clearWaitingEpisodes = clearWaitingEpisodes;
|
|
|
47
47
|
exports.clearWaitingTransitionListeners = clearWaitingTransitionListeners;
|
|
48
48
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
49
49
|
const logger_1 = require("../../lib/logger");
|
|
50
|
+
const global_state_1 = require("../global-state");
|
|
50
51
|
const logger = (0, logger_1.createLogger)('waiting-episode-state');
|
|
51
52
|
/** compositeKey -> the wait currently in progress for that instance. */
|
|
52
|
-
const episodes =
|
|
53
|
-
(globalThis.__sessionWaitingEpisodes = new Map());
|
|
53
|
+
const episodes = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodes', () => new Map());
|
|
54
54
|
/** Subscribers to the edge. See the module docblock. */
|
|
55
|
-
const listeners =
|
|
56
|
-
(globalThis.__sessionWaitingTransitionListeners = new Set());
|
|
55
|
+
const listeners = (0, global_state_1.getOrInitGlobal)('__sessionWaitingTransitionListeners', () => new Set());
|
|
57
56
|
/**
|
|
58
57
|
* Subscribe to waiting edges.
|
|
59
58
|
*
|
|
@@ -19,7 +19,6 @@ const response_poller_1 = require("./polling/response-poller");
|
|
|
19
19
|
const auto_yes_lifecycle_1 = require("./auto-yes-lifecycle");
|
|
20
20
|
const schedule_manager_1 = require("./schedule-manager");
|
|
21
21
|
const timer_manager_1 = require("./timer-manager");
|
|
22
|
-
const global_session_poller_1 = require("./polling/global-session-poller");
|
|
23
22
|
const tmux_capture_cache_1 = require("./tmux/tmux-capture-cache");
|
|
24
23
|
const types_1 = require("./cli-tools/types");
|
|
25
24
|
const global_session_constants_1 = require("./session/global-session-constants");
|
|
@@ -215,8 +214,7 @@ function createOwnedSessionKiller(pathById) {
|
|
|
215
214
|
}
|
|
216
215
|
/**
|
|
217
216
|
* Clean up all global assistant sessions.
|
|
218
|
-
* Issue #649: Kill any orphaned mcbd-{cli_tool_id}-__global__ tmux sessions
|
|
219
|
-
* and stop all global session pollers.
|
|
217
|
+
* Issue #649: Kill any orphaned mcbd-{cli_tool_id}-__global__ tmux sessions.
|
|
220
218
|
*
|
|
221
219
|
* Called during server shutdown and syncWorktreesAndCleanup.
|
|
222
220
|
* Errors are logged but do not propagate (cleanup is best-effort).
|
|
@@ -224,8 +222,6 @@ function createOwnedSessionKiller(pathById) {
|
|
|
224
222
|
* @returns Number of sessions killed
|
|
225
223
|
*/
|
|
226
224
|
async function cleanupGlobalSessions() {
|
|
227
|
-
// Stop all global pollers first
|
|
228
|
-
(0, global_session_poller_1.stopAllGlobalSessionPolling)();
|
|
229
225
|
let sessionsKilled = 0;
|
|
230
226
|
const manager = manager_1.CLIToolManager.getInstance();
|
|
231
227
|
for (const cliToolId of types_1.CLI_TOOL_IDS) {
|
|
@@ -41,6 +41,7 @@ const schema_1 = require("../../lib/skills/schema");
|
|
|
41
41
|
const constants_1 = require("../../lib/skills/constants");
|
|
42
42
|
const snapshot_store_1 = require("../../lib/skills/snapshot-store");
|
|
43
43
|
const preview_diff_1 = require("../../lib/skills/preview-diff");
|
|
44
|
+
const global_state_1 = require("../global-state");
|
|
44
45
|
// =============================================================================
|
|
45
46
|
// Layout and limits
|
|
46
47
|
// =============================================================================
|
|
@@ -206,7 +207,7 @@ function parseInstalledReceipt(bytes) {
|
|
|
206
207
|
return null;
|
|
207
208
|
}
|
|
208
209
|
}
|
|
209
|
-
const cache =
|
|
210
|
+
const cache = (0, global_state_1.getOrInitGlobal)('__skillInstallPlans', () => ({ records: new Map() }));
|
|
210
211
|
function dropRecord(record) {
|
|
211
212
|
cache.records.delete(record.token);
|
|
212
213
|
// The snapshot reference was taken for this plan; an unconsumed plan must not
|
|
@@ -38,8 +38,8 @@ const skill_security_config_1 = require("../../config/skill-security-config");
|
|
|
38
38
|
const system_directories_1 = require("../../config/system-directories");
|
|
39
39
|
const skills_1 = require("../../lib/skills");
|
|
40
40
|
const integrity_1 = require("../../lib/skills/integrity");
|
|
41
|
-
const
|
|
42
|
-
|
|
41
|
+
const global_state_1 = require("../global-state");
|
|
42
|
+
const state = (0, global_state_1.getOrInitGlobal)('__skillSnapshotStore', () => ({ rootDir: null, records: new Map(), totalBytes: 0 }));
|
|
43
43
|
const SNAPSHOT_FILE_SUFFIX = '.artifact';
|
|
44
44
|
// =============================================================================
|
|
45
45
|
// Initialization
|
|
@@ -42,6 +42,7 @@ const integrity_1 = require("../../lib/skills/integrity");
|
|
|
42
42
|
const install_plan_1 = require("../../lib/skills/install-plan");
|
|
43
43
|
const constants_2 = require("../../lib/skills/constants");
|
|
44
44
|
const preview_diff_1 = require("../../lib/skills/preview-diff");
|
|
45
|
+
const global_state_1 = require("../global-state");
|
|
45
46
|
/** Stable machine reasons, one per disposition plus the plan-level failures. */
|
|
46
47
|
exports.SkillUninstallReason = {
|
|
47
48
|
/** Recorded, unchanged, and therefore deletable. */
|
|
@@ -256,8 +257,7 @@ function canonicalJson(value) {
|
|
|
256
257
|
function computeSkillUninstallBindingHash(binding) {
|
|
257
258
|
return (0, crypto_1.createHash)('sha256').update(canonicalJson(binding)).digest('hex');
|
|
258
259
|
}
|
|
259
|
-
const cache =
|
|
260
|
-
(globalThis.__skillUninstallPlans = { records: new Map() });
|
|
260
|
+
const cache = (0, global_state_1.getOrInitGlobal)('__skillUninstallPlans', () => ({ records: new Map() }));
|
|
261
261
|
/** Token grammar. Anything else is rejected before the store is consulted. */
|
|
262
262
|
exports.SKILL_UNINSTALL_PLAN_TOKEN_PATTERN = /^[0-9a-f]{48}$/;
|
|
263
263
|
const SKILL_UNINSTALL_PLAN_TOKEN_BYTES = 24;
|
|
@@ -21,16 +21,14 @@ const db_instance_1 = require("../lib/db/db-instance");
|
|
|
21
21
|
const logger_1 = require("../lib/logger");
|
|
22
22
|
const timer_constants_1 = require("../config/timer-constants");
|
|
23
23
|
const send_user_message_1 = require("../lib/session/send-user-message");
|
|
24
|
+
const global_state_1 = require("./global-state");
|
|
24
25
|
const logger = (0, logger_1.createLogger)('timer-manager');
|
|
25
26
|
function getState() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return globalThis.__timerManagerState;
|
|
27
|
+
return (0, global_state_1.getOrInitGlobal)('__timerManagerState', () => ({
|
|
28
|
+
timers: new Map(),
|
|
29
|
+
timerWorktrees: new Map(),
|
|
30
|
+
initialized: false,
|
|
31
|
+
}));
|
|
34
32
|
}
|
|
35
33
|
// =============================================================================
|
|
36
34
|
// Timer Execution [DP-004/CON-MF-001]
|
|
@@ -45,6 +45,7 @@ exports.resetGeometryDelegationState = resetGeometryDelegationState;
|
|
|
45
45
|
const child_process_1 = require("child_process");
|
|
46
46
|
const util_1 = require("util");
|
|
47
47
|
const tmux_session_surface_1 = require("../session/tmux-session-surface");
|
|
48
|
+
const global_state_1 = require("../global-state");
|
|
48
49
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
49
50
|
/** tmux calls here are interactive-latency, not long-running. */
|
|
50
51
|
const TMUX_TIMEOUT = 5000;
|
|
@@ -56,10 +57,8 @@ const TMUX_TIMEOUT = 5000;
|
|
|
56
57
|
* (the status helper, the response checker) share a single tmux round-trip.
|
|
57
58
|
*/
|
|
58
59
|
exports.DELEGATION_TTL_MS = 1000;
|
|
59
|
-
const cache =
|
|
60
|
-
|
|
61
|
-
const lastObserved = globalThis.__cmGeometryDelegationEdge ??
|
|
62
|
-
(globalThis.__cmGeometryDelegationEdge = new Map());
|
|
60
|
+
const cache = (0, global_state_1.getOrInitGlobal)('__cmGeometryDelegationCache', () => new Map());
|
|
61
|
+
const lastObserved = (0, global_state_1.getOrInitGlobal)('__cmGeometryDelegationEdge', () => new Map());
|
|
63
62
|
/**
|
|
64
63
|
* Whether `@cm_delegated` is set to `1` on a session.
|
|
65
64
|
*
|
|
@@ -27,8 +27,9 @@ exports.registerLegacyAlias = registerLegacyAlias;
|
|
|
27
27
|
exports.lookupLegacyAlias = lookupLegacyAlias;
|
|
28
28
|
exports.dropLegacyAliasByLegacyName = dropLegacyAliasByLegacyName;
|
|
29
29
|
exports.clearLegacyAliasesForTests = clearLegacyAliasesForTests;
|
|
30
|
+
const global_state_1 = require("../global-state");
|
|
30
31
|
function aliases() {
|
|
31
|
-
return (
|
|
32
|
+
return (0, global_state_1.getOrInitGlobal)('__cmLegacySessionAliases', () => new Map());
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
35
|
* Serve the new-format session name `newName` with the existing legacy session
|
|
@@ -28,11 +28,12 @@ const tmux_session_surface_1 = require("../session/tmux-session-surface");
|
|
|
28
28
|
const session_hook_scripts_1 = require("./session-hook-scripts");
|
|
29
29
|
const geometry_delegation_1 = require("./geometry-delegation");
|
|
30
30
|
const logger_1 = require("../logger");
|
|
31
|
+
const global_state_1 = require("../global-state");
|
|
31
32
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
32
33
|
const logger = (0, logger_1.createLogger)('tmux-session-hooks');
|
|
33
34
|
/** tmux calls here are interactive-latency, not long-running. */
|
|
34
35
|
const TMUX_TIMEOUT = 5000;
|
|
35
|
-
const ensured =
|
|
36
|
+
const ensured = (0, global_state_1.getOrInitGlobal)('__cmEnsuredSessionHooks', () => new Set());
|
|
36
37
|
/**
|
|
37
38
|
* Reconcile a session's opt-in `client-attached` hooks with the environment.
|
|
38
39
|
*
|
|
@@ -58,14 +58,14 @@ const child_process_1 = require("child_process");
|
|
|
58
58
|
const util_1 = require("util");
|
|
59
59
|
const tmux_session_surface_1 = require("../session/tmux-session-surface");
|
|
60
60
|
const logger_1 = require("../logger");
|
|
61
|
+
const global_state_1 = require("../global-state");
|
|
61
62
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
62
63
|
const logger = (0, logger_1.createLogger)('tmux-session-status');
|
|
63
64
|
/** tmux calls here are interactive-latency, not long-running. */
|
|
64
65
|
const TMUX_TIMEOUT = 5000;
|
|
65
|
-
const published =
|
|
66
|
-
(globalThis.__cmPublishedTmuxStatus = new Map());
|
|
66
|
+
const published = (0, global_state_1.getOrInitGlobal)('__cmPublishedTmuxStatus', () => new Map());
|
|
67
67
|
/** Sessions this process has already uninstalled the surface from. */
|
|
68
|
-
const cleared =
|
|
68
|
+
const cleared = (0, global_state_1.getOrInitGlobal)('__cmClearedTmuxStatus', () => new Set());
|
|
69
69
|
/**
|
|
70
70
|
* Write one session's state onto its tmux session, if it changed.
|
|
71
71
|
*
|
|
@@ -30,6 +30,7 @@ exports.resetCacheForTesting = resetCacheForTesting;
|
|
|
30
30
|
exports.getOrFetchCapture = getOrFetchCapture;
|
|
31
31
|
/** Cache entry structure */
|
|
32
32
|
const logger_1 = require("../../lib/logger");
|
|
33
|
+
const global_state_1 = require("../global-state");
|
|
33
34
|
const logger = (0, logger_1.createLogger)('tmux-capture-cache');
|
|
34
35
|
// =========================================================================
|
|
35
36
|
// Constants
|
|
@@ -79,10 +80,10 @@ function isCaptureWindowSaturated(capturedLineCount, windowLines = exports.CACHE
|
|
|
79
80
|
return windowLines > 0 && capturedLineCount >= windowLines;
|
|
80
81
|
}
|
|
81
82
|
function getCache() {
|
|
82
|
-
return (
|
|
83
|
+
return (0, global_state_1.getOrInitGlobal)('__tmuxCaptureCache', () => new Map());
|
|
83
84
|
}
|
|
84
85
|
function getInflight() {
|
|
85
|
-
return (
|
|
86
|
+
return (0, global_state_1.getOrInitGlobal)('__tmuxCaptureCacheInflight', () => new Map());
|
|
86
87
|
}
|
|
87
88
|
// =========================================================================
|
|
88
89
|
// sliceOutput()
|