commandmate 0.44.1 → 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 +169 -169
- package/.next/app-path-routes-manifest.json +35 -35
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- 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 -2
- 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 -2
- 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 +3 -3
- 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 +35 -35
- 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 -0
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -0
- 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 -0
- package/.next/server/chunks/5625.js +25 -0
- package/.next/server/chunks/5845.js +1 -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 -0
- package/.next/server/chunks/8543.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 -5
- package/.next/server/chunks/9390.js +2 -3
- 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-f1f258d4a1d92620.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-da66300cc20244ed.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 +10 -13
- 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 +608 -416
- package/dist/cli/types/api-responses.d.ts +174 -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 +228 -0
- package/dist/lib/session/prompt-view.d.ts.map +1 -0
- package/dist/lib/session/prompt-view.js +290 -0
- 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/server.js +5 -3
- 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 +139 -0
- package/dist/server/src/lib/auto-yes-poller.js +465 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
- 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 -3047
- 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/status-detector.js +1 -1
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
- package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
- 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/cli-patterns.js +1 -1
- package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
- package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
- 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 +19 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
- 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 +13 -35
- package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
- 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/frame.js +36 -2
- package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
- package/dist/server/src/lib/detection/tools/live-region.js +204 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
- package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
- 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-dialog-gate.js +16 -4
- 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 +666 -1162
- 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 +6 -5
- 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 -2
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +6 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- package/dist/server/src/lib/relay/relay-triggers.js +9 -0
- package/dist/server/src/lib/resource-cleanup.js +6 -4
- 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 +454 -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 +290 -0
- package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
- 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/waiting-kind.js +3 -0
- package/dist/server/src/lib/session-cleanup.js +6 -8
- 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.2.json +33 -0
- 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/434.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/650.js +0 -1
- package/.next/server/chunks/6661.js +0 -1
- package/.next/server/chunks/8583.js +0 -1
- package/.next/server/chunks/964.js +0 -1
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-308072f285c34787.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.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/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
|
@@ -50,7 +50,6 @@ const logger_1 = require("../../lib/logger");
|
|
|
50
50
|
const tool_id_1 = require("../../lib/hooks/sources/command-code/tool-id");
|
|
51
51
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
52
52
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
53
|
-
const install_hints_1 = require("./install-hints");
|
|
54
53
|
const plan_review_state_1 = require("../detection/tools/command-code/plan-review-state");
|
|
55
54
|
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
56
55
|
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
@@ -202,17 +201,6 @@ class CommandCodeTool extends base_1.BaseCLITool {
|
|
|
202
201
|
navigationKeys() {
|
|
203
202
|
return { keys: terminal_keys_1.COMMAND_CODE_NAVIGATION_KEY_VALUES, leaderKey: null };
|
|
204
203
|
}
|
|
205
|
-
/**
|
|
206
|
-
* Check if a Command Code session is running for a worktree.
|
|
207
|
-
*
|
|
208
|
-
* @param worktreeId - Worktree ID
|
|
209
|
-
* @param instanceId - Agent instance ID (defaults to the primary instance)
|
|
210
|
-
* @returns True if session is running
|
|
211
|
-
*/
|
|
212
|
-
async isRunning(worktreeId, instanceId) {
|
|
213
|
-
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
214
|
-
return await (0, tmux_1.hasSession)(sessionName);
|
|
215
|
-
}
|
|
216
204
|
/**
|
|
217
205
|
* Start a new Command Code session for a worktree.
|
|
218
206
|
*
|
|
@@ -221,23 +209,17 @@ class CommandCodeTool extends base_1.BaseCLITool {
|
|
|
221
209
|
* @param instanceId - Agent instance ID (defaults to the primary instance)
|
|
222
210
|
*/
|
|
223
211
|
async launchSession(worktreeId, worktreePath, instanceId) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
const sessionName = this.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
if (await this.isToolLive(sessionName, { confirm: true })) {
|
|
236
|
-
logger.info('command-code-session-exists');
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
logger.warn('command-code-session-relaunch', { sessionName });
|
|
240
|
-
}
|
|
212
|
+
await this.requireInstalled();
|
|
213
|
+
// Issue #2070's shape: a tmux session outlives the agent that was launched
|
|
214
|
+
// into it, and skipping the launch for a pane holding nothing but a shell
|
|
215
|
+
// prompt leaves `kill-session` by hand as the only recovery.
|
|
216
|
+
const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
|
|
217
|
+
logger,
|
|
218
|
+
liveAction: 'command-code-session-exists',
|
|
219
|
+
relaunchAction: 'command-code-session-relaunch',
|
|
220
|
+
});
|
|
221
|
+
if (live)
|
|
222
|
+
return;
|
|
241
223
|
// Issue #2251, seam S8: fence this instance's structured events off from the
|
|
242
224
|
// process that used to hold the same (worktree, tool, instance) key. On the
|
|
243
225
|
// creation path and on #2070's relaunch path — the reuse branch above has
|
|
@@ -253,11 +235,7 @@ class CommandCodeTool extends base_1.BaseCLITool {
|
|
|
253
235
|
if (!exists) {
|
|
254
236
|
// Inline-rendered, so the pane keeps scrollback; depth comes from the
|
|
255
237
|
// shared TMUX_HISTORY_LIMIT default (Issue #1624).
|
|
256
|
-
await (
|
|
257
|
-
sessionName,
|
|
258
|
-
workingDirectory: worktreePath,
|
|
259
|
-
});
|
|
260
|
-
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
238
|
+
await this.createLaunchPane(sessionName, worktreePath);
|
|
261
239
|
}
|
|
262
240
|
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(buildCommandCodeLaunchCommand({
|
|
263
241
|
target: { worktreeId, cliToolId: tool_id_1.COMMAND_CODE_CLI_TOOL_ID, instanceId },
|
|
@@ -367,13 +345,9 @@ class CommandCodeTool extends base_1.BaseCLITool {
|
|
|
367
345
|
*/
|
|
368
346
|
async sendMessage(worktreeId, message, instanceId) {
|
|
369
347
|
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
370
|
-
const exists = await (0, tmux_1.hasSession)(sessionName);
|
|
371
|
-
if (!exists) {
|
|
372
|
-
throw new Error(`Command Code session ${sessionName} does not exist. Start the session first.`);
|
|
373
|
-
}
|
|
374
348
|
// Issue #2070: the pane exists, but does the AGENT? Relaunches into the same
|
|
375
349
|
// pane when the tool is gone; costs one `capture-pane` when it is not.
|
|
376
|
-
await this.
|
|
350
|
+
await this.requireSession('Command Code', worktreeId, instanceId, { relaunch: true });
|
|
377
351
|
try {
|
|
378
352
|
await this.waitForPrompt(sessionName);
|
|
379
353
|
// Issue #1471: body/Enter separation + read-back submit verification.
|
|
@@ -407,27 +381,21 @@ class CommandCodeTool extends base_1.BaseCLITool {
|
|
|
407
381
|
* @param instanceId - Agent instance ID (defaults to the primary instance)
|
|
408
382
|
*/
|
|
409
383
|
async killSession(worktreeId, instanceId) {
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
384
|
+
await this.requestExitAndKill(worktreeId, instanceId, {
|
|
385
|
+
logger,
|
|
386
|
+
stoppedAction: 'stopped-command-code-session',
|
|
387
|
+
requestExit: async (sessionName) => {
|
|
414
388
|
await (0, tmux_1.sendKeys)(sessionName, exports.COMMAND_CODE_EXIT_COMMAND, false);
|
|
415
389
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_TEXT_INPUT_WAIT_MS));
|
|
416
390
|
await (0, tmux_1.sendSpecialKeys)(sessionName, ['Enter']);
|
|
417
391
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_EXIT_WAIT_MS));
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
catch (error) {
|
|
428
|
-
logger.error('session:stop-failed', { error: (0, errors_1.getErrorMessage)(error) });
|
|
429
|
-
throw error;
|
|
430
|
-
}
|
|
392
|
+
},
|
|
393
|
+
afterKill: (sessionName) => {
|
|
394
|
+
this.composerPendingSince.delete(sessionName);
|
|
395
|
+
// So a later session reusing the name starts clean.
|
|
396
|
+
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
397
|
+
},
|
|
398
|
+
});
|
|
431
399
|
}
|
|
432
400
|
}
|
|
433
401
|
exports.CommandCodeTool = CommandCodeTool;
|
|
@@ -278,16 +278,6 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
278
278
|
launchExecutable(resolved) {
|
|
279
279
|
return resolved.source === 'path' ? this.command : hook_settings_1.COPILOT_LAUNCH_COMMAND;
|
|
280
280
|
}
|
|
281
|
-
/**
|
|
282
|
-
* Check if Copilot session is running for a worktree
|
|
283
|
-
*
|
|
284
|
-
* @param worktreeId - Worktree ID
|
|
285
|
-
* @returns True if session is running
|
|
286
|
-
*/
|
|
287
|
-
async isRunning(worktreeId, instanceId) {
|
|
288
|
-
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
289
|
-
return await (0, tmux_1.hasSession)(sessionName);
|
|
290
|
-
}
|
|
291
281
|
/**
|
|
292
282
|
* Start a new Copilot session for a worktree
|
|
293
283
|
* Launches copilot in interactive mode within tmux
|
|
@@ -304,23 +294,13 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
304
294
|
if (!resolved) {
|
|
305
295
|
throw (0, install_hints_1.missingToolError)(this);
|
|
306
296
|
}
|
|
307
|
-
const sessionName = this.
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
// crash — and the launch was then skipped for a pane holding nothing but a
|
|
315
|
-
// shell prompt, which left `kill-session` by hand as the only recovery.
|
|
316
|
-
// When the tool is gone we fall THROUGH and re-send the launch command
|
|
317
|
-
// into the same pane.
|
|
318
|
-
if (await this.isToolLive(sessionName, { confirm: true })) {
|
|
319
|
-
logger.info('copilot-session-exists');
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
logger.warn('copilot-session-relaunch', { sessionName });
|
|
323
|
-
}
|
|
297
|
+
const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
|
|
298
|
+
logger,
|
|
299
|
+
liveAction: 'copilot-session-exists',
|
|
300
|
+
relaunchAction: 'copilot-session-relaunch',
|
|
301
|
+
});
|
|
302
|
+
if (live)
|
|
303
|
+
return;
|
|
324
304
|
// Issue #1761: fence this session off from the previous copilot process's
|
|
325
305
|
// events. The state is keyed by (worktree, tool, instance), a key the new
|
|
326
306
|
// session reuses verbatim, so without this the old process's last
|
|
@@ -338,19 +318,6 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
338
318
|
// the new one's.
|
|
339
319
|
(0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: tool_id_1.COPILOT_CLI_TOOL_ID, instanceId });
|
|
340
320
|
try {
|
|
341
|
-
// Issue #2070: creation only. On the relaunch path the pane already
|
|
342
|
-
// exists and holds the transcript of the process that died in it; the
|
|
343
|
-
// launch command is re-sent into that same pane.
|
|
344
|
-
if (!exists) {
|
|
345
|
-
// Create tmux session. Scrollback depth comes from the shared
|
|
346
|
-
// TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
|
|
347
|
-
await (0, tmux_1.createSession)({
|
|
348
|
-
sessionName,
|
|
349
|
-
workingDirectory: worktreePath,
|
|
350
|
-
});
|
|
351
|
-
// Wait a moment for the session to be created
|
|
352
|
-
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
353
|
-
}
|
|
354
321
|
// Issue #1761: hand this session its hook configuration, so structured
|
|
355
322
|
// lifecycle events and Auto-Yes adjudication exist without the operator
|
|
356
323
|
// having edited ~/.copilot/settings.json by hand.
|
|
@@ -363,12 +330,21 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
363
330
|
//
|
|
364
331
|
// Fails open in every branch: with `CM_AGENT_HOOKS_INJECT=0`, or with a
|
|
365
332
|
// settings file that cannot be read or written, this is the bare launch
|
|
366
|
-
// command and nothing else.
|
|
333
|
+
// command and nothing else. The one exception is UAT isolation (Issue
|
|
334
|
+
// #3391), where the plan throws instead — which is why it is built BEFORE
|
|
335
|
+
// the tmux session: a refused launch must not leave an empty pane that
|
|
336
|
+
// `isRunning()` reports as a started copilot.
|
|
367
337
|
const launchCommand = (0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({
|
|
368
338
|
target: { worktreeId, cliToolId: tool_id_1.COPILOT_CLI_TOOL_ID, instanceId },
|
|
369
339
|
executablePath: this.launchExecutable(resolved),
|
|
370
340
|
worktreePath,
|
|
371
341
|
});
|
|
342
|
+
// Issue #2070: creation only. On the relaunch path the pane already
|
|
343
|
+
// exists and holds the transcript of the process that died in it; the
|
|
344
|
+
// launch command is re-sent into that same pane.
|
|
345
|
+
if (!exists) {
|
|
346
|
+
await this.createLaunchPane(sessionName, worktreePath);
|
|
347
|
+
}
|
|
372
348
|
// Start Copilot CLI in interactive mode
|
|
373
349
|
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
374
350
|
// Issue #1907: no blind sleep before this. The 4-second one that used to
|
|
@@ -647,17 +623,12 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
647
623
|
*/
|
|
648
624
|
async sendMessage(worktreeId, message, instanceId) {
|
|
649
625
|
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
650
|
-
// Check if session exists
|
|
651
|
-
const exists = await (0, tmux_1.hasSession)(sessionName);
|
|
652
|
-
if (!exists) {
|
|
653
|
-
throw new Error(`Copilot session ${sessionName} does not exist. Start the session first.`);
|
|
654
|
-
}
|
|
655
626
|
// Issue #2070: the pane exists, but does the AGENT? An agent that quit,
|
|
656
627
|
// updated itself or crashed leaves its tmux session behind, and the send
|
|
657
628
|
// that followed used to sit in the readiness wait until it timed out —
|
|
658
629
|
// leaving `kill-session` by hand as the only recovery. Relaunches into the
|
|
659
630
|
// same pane when the tool is gone; costs one `capture-pane` when it is not.
|
|
660
|
-
await this.
|
|
631
|
+
await this.requireSession('Copilot', worktreeId, instanceId, { relaunch: true });
|
|
661
632
|
try {
|
|
662
633
|
// Verify Copilot is at prompt state before sending
|
|
663
634
|
await this.waitForPrompt(sessionName);
|
|
@@ -747,11 +718,7 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
747
718
|
*/
|
|
748
719
|
async sendModelCommand(worktreeId, modelName, instanceId) {
|
|
749
720
|
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
750
|
-
|
|
751
|
-
const exists = await (0, tmux_1.hasSession)(sessionName);
|
|
752
|
-
if (!exists) {
|
|
753
|
-
throw new Error(`Copilot session ${sessionName} does not exist. Start the session first.`);
|
|
754
|
-
}
|
|
721
|
+
await this.requireSession('Copilot', worktreeId, instanceId, { relaunch: false });
|
|
755
722
|
try {
|
|
756
723
|
const idle = await this.waitForPrompt(sessionName, copilot_constants_1.COPILOT_MODEL_SWITCH_TIMEOUT_MS, 'idle');
|
|
757
724
|
if (!idle.ready) {
|
|
@@ -828,10 +795,10 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
828
795
|
* @param instanceId - Optional agent instance ID (defaults to primary)
|
|
829
796
|
*/
|
|
830
797
|
async killSession(worktreeId, instanceId) {
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
798
|
+
await this.requestExitAndKill(worktreeId, instanceId, {
|
|
799
|
+
logger,
|
|
800
|
+
stoppedAction: 'stopped-copilot-session',
|
|
801
|
+
requestExit: async (sessionName) => {
|
|
835
802
|
// Send Ctrl+C to interrupt any running operation
|
|
836
803
|
await (0, tmux_1.sendSpecialKey)(sessionName, 'C-c');
|
|
837
804
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_INTERRUPT_SETTLE_MS));
|
|
@@ -840,17 +807,8 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
840
807
|
await new Promise((resolve) => setTimeout(resolve, copilot_constants_1.COPILOT_TEXT_INPUT_DELAY_MS));
|
|
841
808
|
await (0, tmux_1.sendSpecialKeys)(sessionName, ['Enter']);
|
|
842
809
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.COPILOT_EXIT_WAIT_MS));
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
const killed = await (0, tmux_1.killSession)(sessionName);
|
|
846
|
-
if (killed) {
|
|
847
|
-
logger.info('stopped-copilot-session');
|
|
848
|
-
}
|
|
849
|
-
}
|
|
850
|
-
catch (error) {
|
|
851
|
-
logger.error('session:stop-failed', { error: (0, errors_1.getErrorMessage)(error) });
|
|
852
|
-
throw error;
|
|
853
|
-
}
|
|
810
|
+
},
|
|
811
|
+
});
|
|
854
812
|
}
|
|
855
813
|
}
|
|
856
814
|
exports.CopilotTool = CopilotTool;
|
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
* grow `ICLITool` either — every hand-written `ICLITool` in the test suite would
|
|
8
8
|
* stop type-checking. So the route calls this one function, which lives inside
|
|
9
9
|
* the CLITool gateway and is therefore allowed to reach the transport.
|
|
10
|
+
*
|
|
11
|
+
* Issue #3290: this function finds the session by NAME and sends. Whether the
|
|
12
|
+
* session is this server's is not decided here — it takes no worktree path to
|
|
13
|
+
* compare `#{session_path}` with — so the caller has to have asked
|
|
14
|
+
* `checkSessionOwnership` first, as the route does. A caller that skips it types
|
|
15
|
+
* into whichever server owns the name;
|
|
16
|
+
* `tests/unit/guards/worktree-route-session-ownership-3290.test.ts` fails a
|
|
17
|
+
* worktree route that does.
|
|
10
18
|
*/
|
|
11
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
20
|
exports.sendDirectInput = sendDirectInput;
|
|
@@ -21,15 +21,9 @@ const sources_1 = require("../../lib/hooks/sources");
|
|
|
21
21
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
22
22
|
const logger_1 = require("../../lib/logger");
|
|
23
23
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
24
|
-
const install_hints_1 = require("./install-hints");
|
|
25
24
|
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
25
|
+
const errors_1 = require("../../lib/errors");
|
|
26
26
|
const logger = (0, logger_1.createLogger)('cli-tools/gemini');
|
|
27
|
-
/**
|
|
28
|
-
* Extract error message from unknown error type (DRY)
|
|
29
|
-
*/
|
|
30
|
-
function getErrorMessage(error) {
|
|
31
|
-
return error instanceof Error ? error.message : String(error);
|
|
32
|
-
}
|
|
33
27
|
/** Wait for Gemini CLI to initialize after launch (banner + auth + dialog) */
|
|
34
28
|
const GEMINI_INIT_WAIT_MS = 6000;
|
|
35
29
|
/** Interval for polling trust dialog / prompt detection */
|
|
@@ -46,16 +40,6 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
46
40
|
id = 'gemini';
|
|
47
41
|
name = 'Gemini CLI';
|
|
48
42
|
command = 'gemini';
|
|
49
|
-
/**
|
|
50
|
-
* Check if Gemini session is running for a worktree
|
|
51
|
-
*
|
|
52
|
-
* @param worktreeId - Worktree ID
|
|
53
|
-
* @returns True if session is running
|
|
54
|
-
*/
|
|
55
|
-
async isRunning(worktreeId, instanceId) {
|
|
56
|
-
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
57
|
-
return await (0, tmux_1.hasSession)(sessionName);
|
|
58
|
-
}
|
|
59
43
|
/**
|
|
60
44
|
* Start a new Gemini session for a worktree
|
|
61
45
|
* Launches `gemini` in interactive REPL mode within tmux
|
|
@@ -65,27 +49,14 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
65
49
|
*/
|
|
66
50
|
async launchSession(worktreeId, worktreePath, instanceId) {
|
|
67
51
|
// Check if Gemini is installed
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
await this.reconcileExistingSession(sessionName, worktreePath);
|
|
77
|
-
// Issue #2070: this branch used to return unconditionally. A tmux session
|
|
78
|
-
// outlives the agent that was launched into it — a quit, a self-update, a
|
|
79
|
-
// crash — and the launch was then skipped for a pane holding nothing but a
|
|
80
|
-
// shell prompt, which left `kill-session` by hand as the only recovery.
|
|
81
|
-
// When the tool is gone we fall THROUGH and re-send the launch command
|
|
82
|
-
// into the same pane.
|
|
83
|
-
if (await this.isToolLive(sessionName, { confirm: true })) {
|
|
84
|
-
logger.info('gemini-session-sessionname');
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
logger.warn('gemini-session-relaunch', { sessionName });
|
|
88
|
-
}
|
|
52
|
+
await this.requireInstalled();
|
|
53
|
+
const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
|
|
54
|
+
logger,
|
|
55
|
+
liveAction: 'gemini-session-exists',
|
|
56
|
+
relaunchAction: 'gemini-session-relaunch',
|
|
57
|
+
});
|
|
58
|
+
if (live)
|
|
59
|
+
return;
|
|
89
60
|
// Issue #1762: fence this instance's structured events off from the process
|
|
90
61
|
// that used to hold the same (worktree, tool, instance) key. On the creation
|
|
91
62
|
// path only — the reuse branch above has already returned — and before the
|
|
@@ -102,14 +73,7 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
102
73
|
// exists and holds the transcript of the process that died in it; the
|
|
103
74
|
// launch command is re-sent into that same pane.
|
|
104
75
|
if (!exists) {
|
|
105
|
-
|
|
106
|
-
// TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
|
|
107
|
-
await (0, tmux_1.createSession)({
|
|
108
|
-
sessionName,
|
|
109
|
-
workingDirectory: worktreePath,
|
|
110
|
-
});
|
|
111
|
-
// Wait a moment for the session to be created
|
|
112
|
-
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
76
|
+
await this.createLaunchPane(sessionName, worktreePath);
|
|
113
77
|
}
|
|
114
78
|
// Start Gemini CLI in interactive mode (no flags = interactive REPL).
|
|
115
79
|
//
|
|
@@ -135,10 +99,10 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
135
99
|
// Poll until Gemini interactive prompt is ready
|
|
136
100
|
// Handles trust dialog automatically if encountered
|
|
137
101
|
await this.waitForReady(sessionName);
|
|
138
|
-
logger.info('started-gemini-session
|
|
102
|
+
logger.info('started-gemini-session');
|
|
139
103
|
}
|
|
140
104
|
catch (error) {
|
|
141
|
-
const errorMessage = getErrorMessage(error);
|
|
105
|
+
const errorMessage = (0, errors_1.getErrorMessage)(error);
|
|
142
106
|
throw new Error(`Failed to start Gemini session: ${errorMessage}`);
|
|
143
107
|
}
|
|
144
108
|
}
|
|
@@ -164,7 +128,7 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
164
128
|
if (!trustDialogHandled && output.includes('Do you trust this folder?')) {
|
|
165
129
|
await (0, tmux_1.sendSpecialKey)(sessionName, 'Enter');
|
|
166
130
|
trustDialogHandled = true;
|
|
167
|
-
logger.info('auto-trusted-folder-for');
|
|
131
|
+
logger.info('auto-trusted-folder-for-gemini');
|
|
168
132
|
// Continue polling for prompt after trust dialog
|
|
169
133
|
}
|
|
170
134
|
}
|
|
@@ -195,7 +159,7 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
195
159
|
}
|
|
196
160
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
197
161
|
}
|
|
198
|
-
logger.info('gemini-prompt-not');
|
|
162
|
+
logger.info('gemini-prompt-not-detected');
|
|
199
163
|
}
|
|
200
164
|
/**
|
|
201
165
|
* Send a message to Gemini interactive session
|
|
@@ -205,17 +169,12 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
205
169
|
*/
|
|
206
170
|
async sendMessage(worktreeId, message, instanceId) {
|
|
207
171
|
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
208
|
-
// Check if session exists
|
|
209
|
-
const exists = await (0, tmux_1.hasSession)(sessionName);
|
|
210
|
-
if (!exists) {
|
|
211
|
-
throw new Error(`Gemini session ${sessionName} does not exist. Start the session first.`);
|
|
212
|
-
}
|
|
213
172
|
// Issue #2070: the pane exists, but does the AGENT? An agent that quit,
|
|
214
173
|
// updated itself or crashed leaves its tmux session behind, and the send
|
|
215
174
|
// that followed used to sit in the readiness wait until it timed out —
|
|
216
175
|
// leaving `kill-session` by hand as the only recovery. Relaunches into the
|
|
217
176
|
// same pane when the tool is gone; costs one `capture-pane` when it is not.
|
|
218
|
-
await this.
|
|
177
|
+
await this.requireSession('Gemini', worktreeId, instanceId, { relaunch: true });
|
|
219
178
|
try {
|
|
220
179
|
// Verify Gemini is at prompt state before sending
|
|
221
180
|
await this.waitForPrompt(sessionName);
|
|
@@ -229,10 +188,10 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
229
188
|
});
|
|
230
189
|
// Issue #405: Invalidate cache after sending message
|
|
231
190
|
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
232
|
-
logger.info('sent-message-to-gemini-session
|
|
191
|
+
logger.info('sent-message-to-gemini-session');
|
|
233
192
|
}
|
|
234
193
|
catch (error) {
|
|
235
|
-
const errorMessage = getErrorMessage(error);
|
|
194
|
+
const errorMessage = (0, errors_1.getErrorMessage)(error);
|
|
236
195
|
throw new Error(`Failed to send message to Gemini: ${errorMessage}`);
|
|
237
196
|
}
|
|
238
197
|
}
|
|
@@ -242,27 +201,18 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
242
201
|
* @param worktreeId - Worktree ID
|
|
243
202
|
*/
|
|
244
203
|
async killSession(worktreeId, instanceId) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
204
|
+
await this.requestExitAndKill(worktreeId, instanceId, {
|
|
205
|
+
logger,
|
|
206
|
+
stoppedAction: 'stopped-gemini-session',
|
|
207
|
+
requestExit: async (sessionName) => {
|
|
249
208
|
// Send Ctrl+C to interrupt any running operation
|
|
250
209
|
await (0, tmux_1.sendSpecialKey)(sessionName, 'C-c');
|
|
251
210
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_INTERRUPT_SETTLE_MS));
|
|
252
211
|
// Send /quit to exit Gemini gracefully
|
|
253
212
|
await (0, tmux_1.sendKeys)(sessionName, '/quit', true);
|
|
254
213
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_EXIT_WAIT_MS));
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
const killed = await (0, tmux_1.killSession)(sessionName);
|
|
258
|
-
if (killed) {
|
|
259
|
-
logger.info('stopped-gemini-session:sessionname');
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
logger.error('session:stop-failed', { error: getErrorMessage(error) });
|
|
264
|
-
throw error;
|
|
265
|
-
}
|
|
214
|
+
},
|
|
215
|
+
});
|
|
266
216
|
}
|
|
267
217
|
}
|
|
268
218
|
exports.GeminiTool = GeminiTool;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveOpencodePaneWidthChecked = resolveOpencodePaneWidthChecked;
|
|
4
|
+
const tmux_pane_config_1 = require("../../config/tmux-pane-config");
|
|
5
|
+
const logger_1 = require("../../lib/logger");
|
|
6
|
+
const logger = (0, logger_1.createLogger)('cli-tools/opencode-pane-width');
|
|
7
|
+
/**
|
|
8
|
+
* {@link resolveOpencodePaneWidth}, plus the one-line operator feedback the
|
|
9
|
+
* pure config module deliberately cannot emit (Issue #2047).
|
|
10
|
+
*
|
|
11
|
+
* `tmux-pane-config.ts` has no imports at all — that is a documented property
|
|
12
|
+
* (#1906), and pulling the logger in there would make every consumer of a
|
|
13
|
+
* constant depend on the logging stack. So the resolver stays silent and the
|
|
14
|
+
* warning lives here, at the two call sites that actually resize a pane.
|
|
15
|
+
*
|
|
16
|
+
* Two things are worth telling the operator, and neither is an error:
|
|
17
|
+
*
|
|
18
|
+
* - the value was DROPPED (not an integer, or outside the accepted bounds), so
|
|
19
|
+
* the pane they are about to look at is the 80-column default rather than
|
|
20
|
+
* what they asked for;
|
|
21
|
+
* - the value was ACCEPTED but lands at or above
|
|
22
|
+
* {@link OPENCODE_SIDEBAR_MIN_WIDTH}, where opencode 1.18.22 paints its
|
|
23
|
+
* right-hand sidebar into the same rows as the transcript. #2047 measured
|
|
24
|
+
* what that does to this repo's own readers — a saved "reply" made entirely
|
|
25
|
+
* of sidebar chrome, a status flip on an aborted turn, and a false idle
|
|
26
|
+
* composer off the session title. It is still allowed, because an operator
|
|
27
|
+
* who only ever reads the pane in the browser may want it; it is not silent.
|
|
28
|
+
*
|
|
29
|
+
* @returns Pane width in columns, ready to hand to `resize-window`.
|
|
30
|
+
*/
|
|
31
|
+
function resolveOpencodePaneWidthChecked(options) {
|
|
32
|
+
const requested = process.env[tmux_pane_config_1.OPENCODE_PANE_WIDTH_ENV];
|
|
33
|
+
const width = (0, tmux_pane_config_1.resolveOpencodePaneWidth)();
|
|
34
|
+
// "Dropped" means the resolver fell back to the default. Compare the number
|
|
35
|
+
// the operator wrote, not its text: `0120` is applied as 120 (#3338).
|
|
36
|
+
const trimmed = requested?.trim();
|
|
37
|
+
const dropped = trimmed !== undefined && (!/^\d+$/.test(trimmed) || Number.parseInt(trimmed, 10) !== width);
|
|
38
|
+
if (requested !== undefined && dropped) {
|
|
39
|
+
logger.warn('opencode-pane-width-rejected', {
|
|
40
|
+
requested,
|
|
41
|
+
applied: width,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else if (options.warnSidebar && width >= tmux_pane_config_1.OPENCODE_SIDEBAR_MIN_WIDTH) {
|
|
45
|
+
// v1 only: the width at which opencode-v2 starts painting a sidebar has not
|
|
46
|
+
// been measured, so v2 passes `warnSidebar: false` (Issue #3296).
|
|
47
|
+
logger.warn('opencode-pane-width-sidebar-visible', {
|
|
48
|
+
width,
|
|
49
|
+
sidebarMinWidth: tmux_pane_config_1.OPENCODE_SIDEBAR_MIN_WIDTH,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return width;
|
|
53
|
+
}
|
|
@@ -45,6 +45,7 @@ const cli_patterns_1 = require("../detection/cli-patterns");
|
|
|
45
45
|
const submit_verified_sender_1 = require("./submit-verified-sender");
|
|
46
46
|
const tmux_capture_cache_1 = require("../tmux/tmux-capture-cache");
|
|
47
47
|
const tmux_pane_config_1 = require("../../config/tmux-pane-config");
|
|
48
|
+
const opencode_pane_width_1 = require("./opencode-pane-width");
|
|
48
49
|
const logger_1 = require("../../lib/logger");
|
|
49
50
|
const errors_1 = require("../../lib/errors");
|
|
50
51
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
@@ -200,7 +201,9 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
|
|
|
200
201
|
}
|
|
201
202
|
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
202
203
|
const target = (0, runtime_1.opencodeV2Target)(worktreeId, instanceId);
|
|
203
|
-
|
|
204
|
+
// Issue #3296: the "sidebar visible" warn is off for v2 (see opencode-pane-width.ts).
|
|
205
|
+
const paneWidth = (0, opencode_pane_width_1.resolveOpencodePaneWidthChecked)({ warnSidebar: false });
|
|
206
|
+
const geometry = { windowWidth: paneWidth, windowHeight: tmux_pane_config_1.OPENCODE_PANE_HEIGHT };
|
|
204
207
|
const exists = await (0, tmux_1.hasSession)(sessionName);
|
|
205
208
|
if (exists) {
|
|
206
209
|
await this.reconcileExistingSession(sessionName, worktreePath, geometry);
|
|
@@ -216,8 +219,7 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
|
|
|
216
219
|
(0, agent_session_lifecycle_1.beginAgentSession)(target);
|
|
217
220
|
try {
|
|
218
221
|
if (!exists) {
|
|
219
|
-
await
|
|
220
|
-
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
222
|
+
await this.createLaunchPane(sessionName, worktreePath);
|
|
221
223
|
}
|
|
222
224
|
try {
|
|
223
225
|
await execFileAsync('tmux', [
|
|
@@ -298,10 +300,7 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
|
|
|
298
300
|
}
|
|
299
301
|
async sendMessage(worktreeId, message, instanceId) {
|
|
300
302
|
const sessionName = this.getSessionName(worktreeId, instanceId);
|
|
301
|
-
|
|
302
|
-
throw new Error(`OpenCode V2 session ${sessionName} does not exist. Start the session first.`);
|
|
303
|
-
}
|
|
304
|
-
await this.relaunchIfToolExited(worktreeId, instanceId);
|
|
303
|
+
await this.requireSession('OpenCode V2', worktreeId, instanceId, { relaunch: true });
|
|
305
304
|
try {
|
|
306
305
|
await this.waitForComposer(sessionName);
|
|
307
306
|
await (0, submit_verified_sender_1.sendMessageWithSubmitVerification)({
|
|
@@ -356,6 +355,9 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
|
|
|
356
355
|
}
|
|
357
356
|
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
358
357
|
this.resumeAttemptedAt.delete(sessionName);
|
|
358
|
+
// Logged unconditionally: after a successful `/exit` no tmux kill runs, so
|
|
359
|
+
// there is no `killed` value to test, unlike `requestExitAndKill` in
|
|
360
|
+
// base.ts (logs only when the kill returned true) (#3232).
|
|
359
361
|
logger.info('stopped-opencode-v2-session');
|
|
360
362
|
}
|
|
361
363
|
catch (error) {
|