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,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The history rows `buildCurrentOutput` writes on its own account: the
|
|
4
|
+
* "detection failed on this frame" row and the "a dialog is open and we could
|
|
5
|
+
* not read it" row, and the push that delivers either to the worktree room
|
|
6
|
+
* (Issue #3215).
|
|
7
|
+
*
|
|
8
|
+
* Moved verbatim out of `current-output-builder`. The comments came along
|
|
9
|
+
* unedited: where one says "this module", it was written about
|
|
10
|
+
* `current-output-builder`.
|
|
11
|
+
*
|
|
12
|
+
* `recordUnclassifiedFrame` and `recordStructuredPrompt` are exported for
|
|
13
|
+
* `buildPayload` and for nothing else; `current-output-builder` does not
|
|
14
|
+
* re-export them.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.recordUnclassifiedFrame = recordUnclassifiedFrame;
|
|
51
|
+
exports.recordStructuredPrompt = recordStructuredPrompt;
|
|
52
|
+
const db_1 = require("../../lib/db");
|
|
53
|
+
const opencode_pane_obstruction_1 = require("../../lib/detection/opencode-pane-obstruction");
|
|
54
|
+
const models_1 = require("../../types/models");
|
|
55
|
+
const logger_1 = require("../../lib/logger");
|
|
56
|
+
const structured_prompt_1 = require("../../lib/session/structured-prompt");
|
|
57
|
+
// Issue #3215: the name is the one these lines have always been logged under.
|
|
58
|
+
// It is what an operator greps for, so it did not move with the code.
|
|
59
|
+
const logger = (0, logger_1.createLogger)('current-output-builder');
|
|
60
|
+
/**
|
|
61
|
+
* Write the "detection failed on this frame" row (Issue #1708).
|
|
62
|
+
*
|
|
63
|
+
* Stored as a `prompt` message so `capture --prompts` — the audit trail that
|
|
64
|
+
* exists precisely to answer "why did this stall?" — lists it alongside the
|
|
65
|
+
* prompts that WERE detected. It must never read as one of them, so the
|
|
66
|
+
* promptData carries `type: 'unclassified'` and `status: 'unclassified'`; the
|
|
67
|
+
* latter is also what keeps it out of `markPendingPromptsAsAnswered()`, whose
|
|
68
|
+
* SQL selects `status = 'pending'`. A frame nobody could read must not end up
|
|
69
|
+
* stamped "(answered via terminal)" the moment the flag clears.
|
|
70
|
+
*
|
|
71
|
+
* Not broadcast: this is a record for after the fact, and the prompt-answering
|
|
72
|
+
* UI has nothing to render for a frame with no parsed options.
|
|
73
|
+
*
|
|
74
|
+
* REACH, stated plainly because it is a real limit: this is driven by
|
|
75
|
+
* observation, not by the server's own loops. `buildCurrentOutput` has exactly
|
|
76
|
+
* two callers — the current-output route and `broadcastTerminalSnapshot`, which
|
|
77
|
+
* returns immediately when the room has no subscribers. So a row is written
|
|
78
|
+
* while `commandmate wait` is polling (every POLL_INTERVAL_MS), while a browser
|
|
79
|
+
* has the terminal open, or on a `capture --json`. A stall that nobody is
|
|
80
|
+
* watching at all writes nothing, and `capture --prompts` afterwards will not
|
|
81
|
+
* show it. That is tolerable because the stalls this exists to explain are the
|
|
82
|
+
* ones something WAS waiting on — but it means the Auto-Yes poller running
|
|
83
|
+
* alone is not enough. Feeding the tracker from that loop would need a second
|
|
84
|
+
* producer of `isUnclassifiedActive`, i.e. either duplicating its definition or
|
|
85
|
+
* adding a detectSessionStatus pass to a hot path; deliberately not done here.
|
|
86
|
+
*
|
|
87
|
+
* Best effort — a failed insert must never break the payload the caller is
|
|
88
|
+
* waiting on. The tracker has already marked the run as recorded, so a failure
|
|
89
|
+
* costs this one row, not a retry storm.
|
|
90
|
+
*/
|
|
91
|
+
/**
|
|
92
|
+
* The sentence that turns "nothing could read this frame" into "here is what is
|
|
93
|
+
* on it, and here is the key that removes it" (Issue #2095).
|
|
94
|
+
*
|
|
95
|
+
* Empty string when there is no obstruction, so every caller can concatenate it
|
|
96
|
+
* unconditionally and the #1708 wording is byte-identical on a frame that has
|
|
97
|
+
* none.
|
|
98
|
+
*
|
|
99
|
+
* English, like the rest of {@link recordUnclassifiedFrame}'s row and unlike the
|
|
100
|
+
* UI banner this pairs with. The row is read in `capture --prompts` as often as
|
|
101
|
+
* in the history pane, and `commandmate` has no locale to read it in.
|
|
102
|
+
*/
|
|
103
|
+
function describePaneObstruction(obstruction) {
|
|
104
|
+
if (!obstruction)
|
|
105
|
+
return '';
|
|
106
|
+
return (` Cause: opencode's sidebar is sharing rows with the transcript ` +
|
|
107
|
+
`(paneObstruction=${obstruction.id}, second column reads ` +
|
|
108
|
+
`${JSON.stringify(obstruction.matchedText)}), which covers the marker that ends a ` +
|
|
109
|
+
`turn. Press \`${opencode_pane_obstruction_1.OPENCODE_SIDEBAR_RECOVERY_CHORD}\` in the pane to close it.`);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Push a history row this module just wrote to the worktree room (Issue #2214).
|
|
113
|
+
*
|
|
114
|
+
* Always `'message'`: both callers INSERT a brand-new row, so nothing has been
|
|
115
|
+
* delivered for it before and the client appends rather than replaces.
|
|
116
|
+
*
|
|
117
|
+
* Detached on purpose, and for two reasons that both matter here:
|
|
118
|
+
*
|
|
119
|
+
* - the `ws-server` import stays dynamic, which is the same bargain
|
|
120
|
+
* {@link emitChatTurnProgress} strikes — this module's *other* callers (the
|
|
121
|
+
* `/current-output` route and the terminal push) must not pull the WebSocket
|
|
122
|
+
* server into their graph just by building a payload;
|
|
123
|
+
* - the row is already committed when this runs, so a socket write can never
|
|
124
|
+
* turn a written row into a failed one. The two record functions below are
|
|
125
|
+
* best-effort by contract and their callers are waiting on a payload.
|
|
126
|
+
*
|
|
127
|
+
* #2214 recorded a limitation here — a route bundle holding its own empty copy
|
|
128
|
+
* of `ws-server`'s `rooms` under `next dev` — and added that "production runs
|
|
129
|
+
* one custom-server bundle and is unaffected". **That last clause was wrong.**
|
|
130
|
+
* `npm run dev` and `npm start` run the *same* custom server (`tsx server.ts`
|
|
131
|
+
* vs `node dist/server/server.js`); what differs is only whether Next evaluates
|
|
132
|
+
* a route handler from a dev compilation or from `.next/server`. Either way the
|
|
133
|
+
* route handler's copy of this module and of `ws-server` is not the custom
|
|
134
|
+
* server's, so this push was silent in production too. #2220 bridged it: the
|
|
135
|
+
* `broadcastMessage` below now reaches the socket owner through
|
|
136
|
+
* `lib/realtime/publisher-registry` regardless of which graph called it.
|
|
137
|
+
*/
|
|
138
|
+
function broadcastRecordedRow(worktreeId, message) {
|
|
139
|
+
void Promise.resolve().then(() => __importStar(require('../../lib/ws-server'))).then(({ broadcastMessage }) => {
|
|
140
|
+
broadcastMessage('message', { worktreeId, message });
|
|
141
|
+
})
|
|
142
|
+
.catch((error) => {
|
|
143
|
+
logger.warn('history-row-broadcast-failed', {
|
|
144
|
+
worktreeId,
|
|
145
|
+
error: error instanceof Error ? error.message : String(error),
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function recordUnclassifiedFrame(db, params) {
|
|
150
|
+
const dwellSeconds = Math.round(params.dwellMs / 1000);
|
|
151
|
+
const statusReason = `${params.sessionStatus}/${params.sessionStatusReason}`;
|
|
152
|
+
const question = `Unclassified interactive frame (${statusReason}) held for ${dwellSeconds}s. ` +
|
|
153
|
+
`The detection layer could not parse it, so no prompt was published and ` +
|
|
154
|
+
`nothing could answer it. Inspect the raw pane with ` +
|
|
155
|
+
`\`commandmate capture ${params.worktreeId} --pane\`.` +
|
|
156
|
+
// Issue #2095: appended rather than substituted. Everything above is still
|
|
157
|
+
// true — the frame really was unreadable — and a caller matching on the
|
|
158
|
+
// #1708 wording keeps matching. What follows turns "we could not read it"
|
|
159
|
+
// into "here is why, and here is the key that fixes it".
|
|
160
|
+
describePaneObstruction(params.obstruction);
|
|
161
|
+
const record = {
|
|
162
|
+
type: models_1.UNCLASSIFIED_PROMPT_TYPE,
|
|
163
|
+
status: 'unclassified',
|
|
164
|
+
question,
|
|
165
|
+
options: [],
|
|
166
|
+
dwellSeconds,
|
|
167
|
+
sessionStatusReason: statusReason,
|
|
168
|
+
};
|
|
169
|
+
try {
|
|
170
|
+
const message = (0, db_1.createMessage)(db, {
|
|
171
|
+
worktreeId: params.worktreeId,
|
|
172
|
+
role: 'assistant',
|
|
173
|
+
content: question,
|
|
174
|
+
messageType: 'prompt',
|
|
175
|
+
// Not a PromptData: nothing may answer this row, which is why the record
|
|
176
|
+
// type is kept out of that union (see UnclassifiedFrameRecord). The column
|
|
177
|
+
// is shared, so the cast is confined to this one write.
|
|
178
|
+
promptData: record,
|
|
179
|
+
timestamp: new Date(),
|
|
180
|
+
cliToolId: params.cliToolId,
|
|
181
|
+
instanceId: params.instanceId,
|
|
182
|
+
});
|
|
183
|
+
logger.info('unclassified-frame-recorded', {
|
|
184
|
+
worktreeId: params.worktreeId,
|
|
185
|
+
cliToolId: params.cliToolId,
|
|
186
|
+
dwellSeconds,
|
|
187
|
+
statusReason,
|
|
188
|
+
});
|
|
189
|
+
// `cliToolId` / `instanceId` are already the explicit values passed above —
|
|
190
|
+
// `createMessage` hands back the caller's own object — so the published row
|
|
191
|
+
// addresses the same instance the column does.
|
|
192
|
+
broadcastRecordedRow(params.worktreeId, message);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
logger.warn('unclassified-frame-record-failed', {
|
|
196
|
+
worktreeId: params.worktreeId,
|
|
197
|
+
error: error instanceof Error ? error.message : String(error),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Write the "the agent said a dialog is open and we could not read it" row
|
|
203
|
+
* (Issue #1725, continuing #1708's proposal 2).
|
|
204
|
+
*
|
|
205
|
+
* Written once per waiting episode, and ONLY while the scraper is publishing no
|
|
206
|
+
* prompt of its own. Both halves matter:
|
|
207
|
+
*
|
|
208
|
+
* - once, because `buildCurrentOutput` runs on every poll and a row per poll
|
|
209
|
+
* would turn one blocked dialog into a wall of identical history;
|
|
210
|
+
* - only when the scraper is blind, because when it is not, the existing
|
|
211
|
+
* prompt writers already record that prompt with its options and its answer.
|
|
212
|
+
* A second row would double-count the audit trail `capture --prompts` prints
|
|
213
|
+
* and put a "nobody could read this" line next to the parsed prompt that
|
|
214
|
+
* proves somebody could.
|
|
215
|
+
*
|
|
216
|
+
* So a row here means exactly one thing, which is the thing #1708 asked to be
|
|
217
|
+
* recorded: a prompt existed and the detection layer did not see it.
|
|
218
|
+
*
|
|
219
|
+
* Best effort, for the same reason as {@link recordUnclassifiedFrame}: the
|
|
220
|
+
* caller is waiting on a payload, and a failed insert must cost this row and
|
|
221
|
+
* nothing else.
|
|
222
|
+
*/
|
|
223
|
+
function recordStructuredPrompt(db, params) {
|
|
224
|
+
const record = (0, structured_prompt_1.buildStructuredPromptHistoryRecord)(params.worktreeId, params.facts);
|
|
225
|
+
try {
|
|
226
|
+
const message = (0, db_1.createMessage)(db, {
|
|
227
|
+
worktreeId: params.worktreeId,
|
|
228
|
+
role: 'assistant',
|
|
229
|
+
content: record.question,
|
|
230
|
+
summary: `structured prompt · source=${params.state.source}${params.state.toolName ? ` · tool=${params.state.toolName}` : ''}`,
|
|
231
|
+
messageType: 'prompt',
|
|
232
|
+
// Not a PromptData: it has no options and nothing may answer it by
|
|
233
|
+
// number. The column is shared, so the cast is confined to this write —
|
|
234
|
+
// the same arrangement UnclassifiedFrameRecord uses.
|
|
235
|
+
promptData: record,
|
|
236
|
+
timestamp: new Date(),
|
|
237
|
+
cliToolId: params.cliToolId,
|
|
238
|
+
instanceId: params.instanceId,
|
|
239
|
+
});
|
|
240
|
+
logger.info('structured-prompt-recorded', {
|
|
241
|
+
worktreeId: params.worktreeId,
|
|
242
|
+
cliToolId: params.cliToolId,
|
|
243
|
+
instanceId: params.instanceId,
|
|
244
|
+
source: params.state.source,
|
|
245
|
+
toolName: params.state.toolName,
|
|
246
|
+
});
|
|
247
|
+
broadcastRecordedRow(params.worktreeId, message);
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
logger.warn('structured-prompt-record-failed', {
|
|
251
|
+
worktreeId: params.worktreeId,
|
|
252
|
+
error: error instanceof Error ? error.message : String(error),
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The shapes `buildCurrentOutput` publishes (Issue #3215).
|
|
4
|
+
*
|
|
5
|
+
* Types only: no function, no constant, nothing that exists at runtime. Moved
|
|
6
|
+
* verbatim out of `current-output-builder`, which re-exports every name here,
|
|
7
|
+
* so an import from either module reads the same declaration.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* How long the screen and the agent kept disagreeing (Issue #3311).
|
|
4
|
+
*
|
|
5
|
+
* `detection-divergence` (Issue #1723 §3) is written on every poll where the
|
|
6
|
+
* scraper's status and the agent's own differ, and on no other. Joining those
|
|
7
|
+
* lines cannot say how long one disagreement lasted: nothing marks the polls in
|
|
8
|
+
* between where the two agreed again. So the server keeps, per target, when the
|
|
9
|
+
* current disagreement began, and says once — `detection-divergence-resolved`,
|
|
10
|
+
* written by the caller — when a poll finds the two agreeing again. One line
|
|
11
|
+
* per disagreement, at its end; the per-poll line is left as it was.
|
|
12
|
+
*
|
|
13
|
+
* A disagreement whose target is never polled again (the session was killed,
|
|
14
|
+
* nobody watches it) is never resolved and has no length. It stays in the map,
|
|
15
|
+
* one small entry per target, until the next poll of that target.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.trackDetectionDivergence = trackDetectionDivergence;
|
|
19
|
+
exports.resetDetectionDivergenceTracking = resetDetectionDivergenceTracking;
|
|
20
|
+
const global_state_1 = require("../global-state");
|
|
21
|
+
/**
|
|
22
|
+
* On `globalThis` because the HTTP pull and the WebSocket push both build the
|
|
23
|
+
* payload, and under `next dev` they are separate bundles: two maps would each
|
|
24
|
+
* see half the polls.
|
|
25
|
+
*/
|
|
26
|
+
const episodes = (0, global_state_1.getOrInitGlobal)('__detectionDivergenceEpisodes', () => new Map());
|
|
27
|
+
function targetKey(worktreeId, cliToolId, instanceId) {
|
|
28
|
+
return `${worktreeId}\u0000${cliToolId}\u0000${instanceId}`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Record one poll's verdict. Returns the disagreement that this poll ended, or
|
|
32
|
+
* null — for a diverging poll, and for an agreeing one with nothing to end.
|
|
33
|
+
*
|
|
34
|
+
* @param diverging - Whether this poll wrote `detection-divergence`
|
|
35
|
+
* @param now - Epoch ms; defaults to now
|
|
36
|
+
*/
|
|
37
|
+
function trackDetectionDivergence(worktreeId, cliToolId, instanceId, diverging, now = Date.now()) {
|
|
38
|
+
const key = targetKey(worktreeId, cliToolId, instanceId);
|
|
39
|
+
const episode = episodes.get(key);
|
|
40
|
+
if (diverging) {
|
|
41
|
+
if (episode)
|
|
42
|
+
episode.polls++;
|
|
43
|
+
else
|
|
44
|
+
episodes.set(key, { startedAt: now, polls: 1 });
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
if (!episode)
|
|
48
|
+
return null;
|
|
49
|
+
episodes.delete(key);
|
|
50
|
+
return { durationMs: Math.max(0, now - episode.startedAt), polls: episode.polls };
|
|
51
|
+
}
|
|
52
|
+
/** Forget every open disagreement. Test seam. */
|
|
53
|
+
function resetDetectionDivergenceTracking() {
|
|
54
|
+
episodes.clear();
|
|
55
|
+
}
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
* Global session constants for assistant chat feature
|
|
4
4
|
* Issue #649: Assistant chat with global (non-worktree) sessions
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* and polling configuration for the assistant chat panel.
|
|
6
|
+
* Defines the special worktree ID used for global assistant sessions.
|
|
8
7
|
*/
|
|
9
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
9
|
+
exports.GLOBAL_SESSION_WORKTREE_ID = void 0;
|
|
11
10
|
/**
|
|
12
11
|
* Special worktree ID for global assistant sessions.
|
|
13
12
|
* Used as the worktreeId parameter when creating tmux sessions
|
|
@@ -16,13 +15,3 @@ exports.GLOBAL_POLL_MAX_RETRIES = exports.GLOBAL_POLL_INTERVAL_MS = exports.GLOB
|
|
|
16
15
|
* This value must NOT appear as a real worktree ID in the database.
|
|
17
16
|
*/
|
|
18
17
|
exports.GLOBAL_SESSION_WORKTREE_ID = '__global__';
|
|
19
|
-
/**
|
|
20
|
-
* Polling interval for global session output capture (ms).
|
|
21
|
-
* Matches the existing POLLING_INTERVAL in response-poller-core.ts (2 seconds).
|
|
22
|
-
*/
|
|
23
|
-
exports.GLOBAL_POLL_INTERVAL_MS = 2000;
|
|
24
|
-
/**
|
|
25
|
-
* Maximum number of polling retries before giving up.
|
|
26
|
-
* 900 retries * 2s interval = 30 minutes (matches MAX_POLLING_DURATION).
|
|
27
|
-
*/
|
|
28
|
-
exports.GLOBAL_POLL_MAX_RETRIES = 900;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Whether the agent's own hooks hold a pane at `running` over what the screen
|
|
4
|
+
* reads (Issue #3337).
|
|
5
|
+
*
|
|
6
|
+
* The one statement of the rule, read by both places that ask "is this pane
|
|
7
|
+
* mid-turn": `buildCurrentOutput` (`capture --json`, the terminal stream) and
|
|
8
|
+
* the relay's readiness check, which types a reply into the pane only when it
|
|
9
|
+
* is not. Two copies of it is how a relay was free to type into a running codex
|
|
10
|
+
* turn whose `capture --json` already said `running`.
|
|
11
|
+
*
|
|
12
|
+
* The rule: when the agent's hooks speak for the pane (source kind `hooks`)
|
|
13
|
+
* and the tool is one whose hook turns the screen may not end
|
|
14
|
+
* ({@link screenMayCloseHookTurn} — codex, where a frame of a live 0.160.0 turn
|
|
15
|
+
* read `ready`, `tests/fixtures/codex-mid-turn-3337/`), a turn the hooks opened
|
|
16
|
+
* ends at the agent's own `Stop`. Only two things end it without the `Stop`,
|
|
17
|
+
* because they say the `Stop` is not coming:
|
|
18
|
+
*
|
|
19
|
+
* - `stale` — nothing heard for `TURN_STALE_AFTER_MS`, applied by the turn
|
|
20
|
+
* record itself;
|
|
21
|
+
* - a frame that shows the turn was abandoned (codex's `■ Conversation
|
|
22
|
+
* interrupted`).
|
|
23
|
+
*
|
|
24
|
+
* Every other case is not held, as before #3337: a source with no hooks
|
|
25
|
+
* (`scraper`), a pull source (`sse`), and a hooks tool with no policy (Claude
|
|
26
|
+
* and the rest), whose turns the screen still closes.
|
|
27
|
+
*
|
|
28
|
+
* @module lib/session/hook-turn-hold
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.screenMayEndTurn = screenMayEndTurn;
|
|
32
|
+
exports.agentEventSourceKind = agentEventSourceKind;
|
|
33
|
+
exports.hookTurnHoldsPane = hookTurnHoldsPane;
|
|
34
|
+
exports.structuredStateForFrame = structuredStateForFrame;
|
|
35
|
+
const turn_abandoned_1 = require("../../lib/detection/turn-abandoned");
|
|
36
|
+
const define_source_1 = require("../../lib/hooks/sources/define-source");
|
|
37
|
+
const registry_1 = require("../../lib/hooks/sources/registry");
|
|
38
|
+
const agent_event_state_1 = require("../../lib/session/agent-event-state");
|
|
39
|
+
/**
|
|
40
|
+
* Whether the screen may end a turn the agent has not ended.
|
|
41
|
+
*
|
|
42
|
+
* `buildCurrentOutput` passes this to `observeScraperCompletionEvidence` as its
|
|
43
|
+
* `mayClose`.
|
|
44
|
+
*
|
|
45
|
+
* @param sourceKind - `structuredEvents.source.kind` for the pane
|
|
46
|
+
* @param output - The pane as captured
|
|
47
|
+
*/
|
|
48
|
+
function screenMayEndTurn(sourceKind, cliToolId, output) {
|
|
49
|
+
return sourceKind !== 'hooks' || (0, turn_abandoned_1.screenMayCloseHookTurn)(cliToolId, output);
|
|
50
|
+
}
|
|
51
|
+
/** The source kind speaking for this pane now — the same fold `capture --json` publishes. */
|
|
52
|
+
function agentEventSourceKind(worktreeId, cliToolId, instanceId, now = Date.now()) {
|
|
53
|
+
const source = (0, registry_1.getAgentEventSource)(cliToolId);
|
|
54
|
+
return (0, define_source_1.describeAgentEventSource)(source, source.liveness({ worktreeId, cliToolId, instanceId: instanceId ?? cliToolId }), now).kind;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Whether the hooks hold this pane at `running`, whatever the frame reads.
|
|
58
|
+
*
|
|
59
|
+
* True when the source is `hooks`, the tool's policy keeps the screen from
|
|
60
|
+
* ending the turn on this frame ({@link screenMayEndTurn}), and its turn record
|
|
61
|
+
* publishes `running` (open, current generation, not stale, no dialog — a dialog
|
|
62
|
+
* is `waiting`, which is the send path's to judge).
|
|
63
|
+
*
|
|
64
|
+
* @param output - The pane as captured
|
|
65
|
+
*/
|
|
66
|
+
function hookTurnHoldsPane(worktreeId, cliToolId, instanceId, output, now = Date.now()) {
|
|
67
|
+
const kind = agentEventSourceKind(worktreeId, cliToolId, instanceId, now);
|
|
68
|
+
if (screenMayEndTurn(kind, cliToolId, output))
|
|
69
|
+
return false;
|
|
70
|
+
return (0, agent_event_state_1.getStructuredSessionState)(worktreeId, cliToolId, instanceId, now)?.status === 'running';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The turn record's verdict as this frame lets it be published (Issue #3377).
|
|
74
|
+
*
|
|
75
|
+
* `getStructuredSessionState`, except that a `running` is dropped (null — the
|
|
76
|
+
* frame decides) when the hooks speak for the pane and the frame shows the
|
|
77
|
+
* turn was abandoned (codex's `■ Conversation interrupted`). That is the frame
|
|
78
|
+
* this module already lets the screen end the turn on, and the one the list
|
|
79
|
+
* already reads as not processing (`hookTurnHoldsPane` does not hold it).
|
|
80
|
+
* Without this, `capture --json` kept publishing `running` until
|
|
81
|
+
* `SCRAPER_COMPLETION_POLLS` such frames had closed the record — ~3 s on
|
|
82
|
+
* 2026-10-06 while the list said not processing.
|
|
83
|
+
*
|
|
84
|
+
* Only what is PUBLISHED changes: the record still closes on the third frame,
|
|
85
|
+
* as before. Every other frame — a misread mid-turn frame included — keeps the
|
|
86
|
+
* hooks' `running` (#3337), and a tool with no policy (Claude and the rest) is
|
|
87
|
+
* untouched.
|
|
88
|
+
*
|
|
89
|
+
* Read by `buildCurrentOutput` and the list's `foldHookTurn`.
|
|
90
|
+
*
|
|
91
|
+
* @param sourceKind - `structuredEvents.source.kind` for the pane
|
|
92
|
+
* @param output - The pane as captured
|
|
93
|
+
*/
|
|
94
|
+
function structuredStateForFrame(worktreeId, cliToolId, instanceId, sourceKind, output, now = Date.now()) {
|
|
95
|
+
const state = (0, agent_event_state_1.getStructuredSessionState)(worktreeId, cliToolId, instanceId, now);
|
|
96
|
+
if (state?.status === 'running' &&
|
|
97
|
+
sourceKind === 'hooks' &&
|
|
98
|
+
(0, turn_abandoned_1.screenShowsAbandonedHookTurn)(cliToolId, output)) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return state;
|
|
102
|
+
}
|
|
@@ -47,6 +47,7 @@ const status_detector_1 = require("../../lib/detection/status-detector");
|
|
|
47
47
|
const cli_patterns_1 = require("../../lib/detection/cli-patterns");
|
|
48
48
|
const agent_event_types_1 = require("../../lib/hooks/agent-event-types");
|
|
49
49
|
const logger_1 = require("../../lib/logger");
|
|
50
|
+
const global_state_1 = require("../global-state");
|
|
50
51
|
const logger = (0, logger_1.createLogger)('layer-disagreement');
|
|
51
52
|
/**
|
|
52
53
|
* Classify one poll. Pure.
|
|
@@ -74,8 +75,7 @@ function classifyLayerDisagreement(input) {
|
|
|
74
75
|
}
|
|
75
76
|
/** How many rows of the frame's tail go into the log line. */
|
|
76
77
|
exports.DISAGREEMENT_FRAME_TAIL_ROWS = 40;
|
|
77
|
-
const reported =
|
|
78
|
-
(globalThis.__layerDisagreementReported = new Set());
|
|
78
|
+
const reported = (0, global_state_1.getOrInitGlobal)('__layerDisagreementReported', () => new Set());
|
|
79
79
|
/** Bound on {@link reported}; at the cap the set is cleared (worst case: one repeat line). */
|
|
80
80
|
const REPORTED_CAP = 512;
|
|
81
81
|
/**
|
|
@@ -74,6 +74,7 @@ const path_1 = require("path");
|
|
|
74
74
|
const safe_directory_1 = require("../../config/safe-directory");
|
|
75
75
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
76
76
|
const logger_1 = require("../../lib/logger");
|
|
77
|
+
const global_state_1 = require("../global-state");
|
|
77
78
|
const logger = (0, logger_1.createLogger)('lib/session/opencode-session-store');
|
|
78
79
|
/**
|
|
79
80
|
* What an opencode session id looks like.
|
|
@@ -94,7 +95,7 @@ function isOpencodeSessionId(value) {
|
|
|
94
95
|
}
|
|
95
96
|
/** Longest title kept. Display only; opencode's own titles are one line. */
|
|
96
97
|
exports.MAX_OPENCODE_SESSION_TITLE_LENGTH = 200;
|
|
97
|
-
const memories = (
|
|
98
|
+
const memories = (0, global_state_1.getOrInitGlobal)('__opencodeSessionMemories', () => new Map());
|
|
98
99
|
function keyOf(target) {
|
|
99
100
|
return (0, auto_yes_state_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId);
|
|
100
101
|
}
|
|
@@ -65,9 +65,32 @@ function promptHeadingMessage(heading) {
|
|
|
65
65
|
// Field readers (moved from components/worktree/prompt-decision-id, #1932/#2039/#3181)
|
|
66
66
|
// =============================================================================
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* `
|
|
68
|
+
* Labels of the rows measured to BE a text field on screen (Issue #2573).
|
|
69
|
+
*
|
|
70
|
+
* `requiresTextInput` (from {@link TEXT_INPUT_PATTERNS}) reads the WORDS of a
|
|
71
|
+
* label — "tell … what to do differently", "custom", "enter …" — and says the
|
|
72
|
+
* option is about the user's own text. It does not say where typed characters
|
|
73
|
+
* land, and for two rows it flags alike the measured answer is opposite:
|
|
74
|
+
*
|
|
75
|
+
* | row | on screen | free text + Enter |
|
|
76
|
+
* |-----|-----------|-------------------|
|
|
77
|
+
* | Command Code `AskUserQuestion` `Type something...` (#2522) | a `TextInput` | lands in the field — the answer |
|
|
78
|
+
* | Command Code permission `No, tell Command Code what to do differently` | a menu row | ignored; the Enter confirms the highlighted `1. Yes` |
|
|
79
|
+
*
|
|
80
|
+
* The second is how a "No + reason" was delivered as an approval. The same
|
|
81
|
+
* words sit on codex's and copilot's approval rows (codex's also name letter
|
|
82
|
+
* hotkeys, `(y)` / `(p)`), and the generic patterns match inside the command an
|
|
83
|
+
* approval row quotes (`… commands that start with 'npm run custom'`).
|
|
84
|
+
*
|
|
85
|
+
* So this is an allowlist of what was measured, not a denylist of what went
|
|
86
|
+
* wrong: a flagged row is a field only when its label is one of these. Anchored
|
|
87
|
+
* at the start so Command Code's folded description (`Type something... Give me
|
|
88
|
+
* a branch name …`) still matches. Command Code's reader
|
|
89
|
+
* (`tools/command-code/dialog.ts`) marks the same rows with the same expression.
|
|
90
|
+
*
|
|
91
|
+
* The one definition since Issue #3218: `isTypedTextFieldOption` in
|
|
92
|
+
* `lib/detection/prompt-detect-multiple-choice`, whose graph reaches `fs`,
|
|
93
|
+
* reads it through `optionTakesTypedText` below.
|
|
71
94
|
*/
|
|
72
95
|
exports.TYPED_TEXT_FIELD_LABEL_PATTERNS = [
|
|
73
96
|
/^[^\S\n]*type\s+something\b/i,
|
|
@@ -45,8 +45,9 @@ const structured_prompt_1 = require("../../lib/session/structured-prompt");
|
|
|
45
45
|
* Whether a structured wait is one the app answers over the agent's own API
|
|
46
46
|
* (Issue #3184, design §6-2).
|
|
47
47
|
*
|
|
48
|
-
* The
|
|
49
|
-
*
|
|
48
|
+
* The three conjuncts `composePromptData` in `current-output-builder` requires
|
|
49
|
+
* — by calling this function (Issue #3215) — before it publishes a
|
|
50
|
+
* `decisionId` on the live payload (its `addressableDecisionId`):
|
|
50
51
|
* the record came from `Notification(permission_prompt)` rather than being a
|
|
51
52
|
* `permission-request` forecast, the tool's event source names each decision
|
|
52
53
|
* by id (`eventIdentity: 'permission-id'`), and the record carries such an id.
|
|
@@ -88,7 +88,9 @@ exports.TURN_ACTIVITY_EVENTS = new Set([
|
|
|
88
88
|
* bound that stops a lost `Stop` from asserting `running` forever.
|
|
89
89
|
* - `scraper_evidence` — the terminal frame said "done" on
|
|
90
90
|
* {@link SCRAPER_COMPLETION_POLLS} consecutive polls with positive evidence.
|
|
91
|
-
* The screen, not the agent.
|
|
91
|
+
* The screen, not the agent. For a codex hooks source only when the frame
|
|
92
|
+
* shows a turn whose `Stop` is not coming — an interrupt (Issue #3337, see
|
|
93
|
+
* `lib/detection/turn-abandoned`).
|
|
92
94
|
* - `resync_idle` — a source that can be re-read (`capabilities.resync`) was
|
|
93
95
|
* asked after a dropped transport and answered "not busy".
|
|
94
96
|
* - `generation` — the process that owned the turn was replaced.
|
|
@@ -401,7 +401,7 @@ async function sendUserMessage(db, params) {
|
|
|
401
401
|
(0, db_1.updateLastUserMessage)(db, worktreeId, content, userMessageTimestamp);
|
|
402
402
|
// 8. Clear in-progress message ID (session state managed by savePendingAssistantResponse).
|
|
403
403
|
(0, db_1.clearInProgressMessageId)(db, worktreeId, cliToolId, instanceId);
|
|
404
|
-
logger.info('cleared-in-progress-message
|
|
404
|
+
logger.info('cleared-in-progress-message');
|
|
405
405
|
// 9. Start polling for the CLI tool's response.
|
|
406
406
|
(0, response_poller_1.startPolling)(worktreeId, cliToolId, instanceId);
|
|
407
407
|
return { ok: true, message };
|
|
@@ -73,13 +73,11 @@ const node_async_hooks_1 = require("node:async_hooks");
|
|
|
73
73
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
74
74
|
const status_reason_1 = require("../../lib/detection/status-reason");
|
|
75
75
|
const session_starting_config_1 = require("../../config/session-starting-config");
|
|
76
|
-
const
|
|
77
|
-
|
|
76
|
+
const global_state_1 = require("../global-state");
|
|
77
|
+
const records = (0, global_state_1.getOrInitGlobal)('__sessionStartingRecords', () => new Map());
|
|
78
78
|
/** On `globalThis` like the map, so tokens keep growing across route bundles. */
|
|
79
|
-
const tokenSeq =
|
|
80
|
-
|
|
81
|
-
const tokenScope = globalThis.__sessionStartingTokenScope ??
|
|
82
|
-
(globalThis.__sessionStartingTokenScope = new node_async_hooks_1.AsyncLocalStorage());
|
|
79
|
+
const tokenSeq = (0, global_state_1.getOrInitGlobal)('__sessionStartingTokenSeq', () => ({ last: 0 }));
|
|
80
|
+
const tokenScope = (0, global_state_1.getOrInitGlobal)('__sessionStartingTokenScope', () => new node_async_hooks_1.AsyncLocalStorage());
|
|
83
81
|
/**
|
|
84
82
|
* A token for a launch about to begin (Issue #3195). Strictly greater than
|
|
85
83
|
* every token issued before it.
|
|
@@ -55,6 +55,7 @@ exports.clearLastKnownStatuses = clearLastKnownStatuses;
|
|
|
55
55
|
// at exactly that moment (`worktree-status-helper.test.ts` does).
|
|
56
56
|
const status_reason_1 = require("../../lib/detection/status-reason");
|
|
57
57
|
const agent_event_state_1 = require("../../lib/session/agent-event-state");
|
|
58
|
+
const global_state_1 = require("../global-state");
|
|
58
59
|
/**
|
|
59
60
|
* The reasons that mean "no rule could read this frame" (Issue #2011).
|
|
60
61
|
*
|
|
@@ -110,8 +111,7 @@ function isUnclassifiedFrame(status, reason) {
|
|
|
110
111
|
* whole job is to be honest about age.
|
|
111
112
|
*/
|
|
112
113
|
exports.LAST_KNOWN_STATUS_TTL_MS = agent_event_state_1.STRUCTURED_STATE_MAX_AGE_MS;
|
|
113
|
-
const latches =
|
|
114
|
-
(globalThis.__lastKnownStatusByKey = new Map());
|
|
114
|
+
const latches = (0, global_state_1.getOrInitGlobal)('__lastKnownStatusByKey', () => new Map());
|
|
115
115
|
/**
|
|
116
116
|
* Cap on retained latches, so a long-lived server cannot grow one per worktree
|
|
117
117
|
* per tool per instance forever.
|