commandmate 0.39.1 → 0.40.0
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 +250 -243
- package/.next/app-path-routes-manifest.json +31 -30
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +15 -15
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_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.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 +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.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.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_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_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
- 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 -0
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -0
- 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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_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_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_client-reference-manifest.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_client-reference-manifest.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_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_client-reference-manifest.js +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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_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 +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_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_client-reference-manifest.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_client-reference-manifest.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_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.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 +10 -10
- 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 +31 -30
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/252.js +1 -0
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3323.js +1 -1
- package/.next/server/chunks/4443.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/650.js +1 -1
- package/.next/server/chunks/6661.js +1 -1
- package/.next/server/chunks/6793.js +1 -1
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +29 -29
- package/.next/server/chunks/8673.js +14 -0
- package/.next/server/chunks/8728.js +4 -3
- package/.next/server/chunks/8800.js +1 -1
- package/.next/server/chunks/9080.js +1 -1
- package/.next/server/chunks/9731.js +2 -2
- package/.next/server/chunks/9882.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- 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-9ac8b6188ddbb119.js → 2407-e259744922e0834c.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/4768-979c8a03bed218e7.js +1 -0
- package/.next/static/chunks/7705-25076b57224da370.js +1 -0
- package/.next/static/chunks/{8165-d3b7c8a7aa776bc7.js → 8165-8944f74c53f3021f.js} +1 -1
- package/.next/static/chunks/8606-9a381b996f9b6834.js +1 -0
- package/.next/static/chunks/9619-22adf5367c4b7080.js +1 -0
- package/.next/static/chunks/app/api/agents/update/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/agents/versions/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/app/release-notes/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/auth/login/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/relays/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/templates/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/layout-b90cce6a51c91f4c.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/review/page-30616daa1dc595c2.js +1 -0
- package/.next/static/chunks/app/sessions/page-1a8ba152bbcb9efb.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e9ebdcd317b62e4a.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/static/css/974314e796232f53.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/worktrees/[id]/direct-input/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +9 -0
- package/dist/cli/commands/peers.d.ts.map +1 -1
- package/dist/cli/commands/peers.js +4 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +20 -6
- package/dist/cli/config/model-validation.d.ts +22 -0
- package/dist/cli/config/model-validation.d.ts.map +1 -1
- package/dist/cli/config/model-validation.js +35 -1
- package/dist/cli/types/api-responses.d.ts +11 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.d.ts +13 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +13 -0
- package/dist/lib/detection/tools/verified-against.d.ts +74 -5
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +74 -5
- package/dist/server/locales/en/worktree.json +58 -0
- package/dist/server/locales/ja/worktree.json +58 -0
- package/dist/server/src/config/claude-constants.js +27 -0
- package/dist/server/src/lib/cli-tools/base.js +2 -1
- package/dist/server/src/lib/cli-tools/claude.js +5 -1
- package/dist/server/src/lib/cli-tools/command-code.js +5 -1
- package/dist/server/src/lib/cli-tools/direct-input.js +22 -0
- package/dist/server/src/lib/cmate-cli-tool-parser.js +31 -0
- package/dist/server/src/lib/detection/cli-patterns.js +44 -5
- package/dist/server/src/lib/detection/selection-shape.js +274 -19
- package/dist/server/src/lib/detection/status-detector.js +2 -0
- package/dist/server/src/lib/detection/status-reason.js +13 -0
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +67 -27
- package/dist/server/src/lib/detection/tools/codex/detect.js +18 -3
- package/dist/server/src/lib/detection/tools/command-code/detect.js +46 -0
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +116 -25
- package/dist/server/src/lib/detection/tools/verified-against.js +74 -5
- package/dist/server/src/lib/detection/tui-detection-frame.js +18 -3
- package/dist/server/src/lib/polling/auto-yes-resolver.js +8 -0
- package/dist/server/src/lib/prompt-answer-sender.js +255 -1
- package/dist/server/src/lib/realtime-snippet.js +53 -0
- package/dist/server/src/lib/session/claude-session.js +19 -2
- package/dist/server/src/lib/session/current-output-builder.js +4 -1
- package/dist/server/src/lib/session/status-mapping.js +58 -8
- package/dist/server/src/lib/tmux/key-sequence.js +27 -1
- package/dist/server/src/lib/tmux/tmux-control-client.js +26 -3
- package/dist/server/src/lib/tmux/tmux.js +64 -3
- package/dist/server/src/types/direct-input.js +113 -0
- package/dist/server/src/types/sidebar.js +67 -7
- package/dist/server/src/types/terminal-keys.js +33 -1
- package/dist/types/terminal-keys.d.ts +28 -1
- package/dist/types/terminal-keys.d.ts.map +1 -1
- package/dist/types/terminal-keys.js +33 -1
- package/package.json +1 -1
- package/release-notes/0.40.0.json +69 -0
- package/.next/server/chunks/6092.js +0 -14
- package/.next/static/chunks/4768-0ad5eb716bed5de9.js +0 -1
- package/.next/static/chunks/8606-e893c1dab6fb81bc.js +0 -1
- package/.next/static/chunks/9619-7bc0e9524f0773b5.js +0 -1
- package/.next/static/chunks/982-edf98d9d54c5ce9b.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/relays/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/templates/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/layout-542d075e9d7cc541.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/review/page-8ed49e2edcc7667b.js +0 -1
- package/.next/static/chunks/app/sessions/page-56f6a2466dd0479d.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-760408096ad697b4.js +0 -1
- package/.next/static/css/b4aaf81d10efdd00.css +0 -1
- /package/.next/static/{7Ge9-hsqlip_Z6bhEnVkd → o3mZdwNhCks6IlcAOPinc}/_buildManifest.js +0 -0
- /package/.next/static/{7Ge9-hsqlip_Z6bhEnVkd → o3mZdwNhCks6IlcAOPinc}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides functions to manage tmux sessions for Claude CLI integration
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.REPAINT_INVALIDATE_DELAY_MS = exports.NAVIGATION_KEY_VALUES = exports.SPECIAL_KEY_VALUES = void 0;
|
|
7
|
+
exports.DIRECT_INPUT_TEXT_CHUNK_BYTES = exports.REPAINT_INVALIDATE_DELAY_MS = exports.NAVIGATION_KEY_VALUES = exports.SPECIAL_KEY_VALUES = void 0;
|
|
8
8
|
exports.exactTarget = exactTarget;
|
|
9
9
|
exports.reconcileSessionGeometry = reconcileSessionGeometry;
|
|
10
10
|
exports.isTmuxAvailable = isTmuxAvailable;
|
|
@@ -25,6 +25,7 @@ exports.clearInputLine = clearInputLine;
|
|
|
25
25
|
exports.clearComposerLine = clearComposerLine;
|
|
26
26
|
exports.isAllowedSpecialKey = isAllowedSpecialKey;
|
|
27
27
|
exports.sendSpecialKeysAndInvalidate = sendSpecialKeysAndInvalidate;
|
|
28
|
+
exports.sendDirectInputAndInvalidate = sendDirectInputAndInvalidate;
|
|
28
29
|
const child_process_1 = require("child_process");
|
|
29
30
|
const util_1 = require("util");
|
|
30
31
|
const tmux_capture_cache_1 = require("./tmux-capture-cache");
|
|
@@ -34,6 +35,7 @@ const tmux_pane_config_1 = require("../../config/tmux-pane-config");
|
|
|
34
35
|
const logger_1 = require("../../lib/logger");
|
|
35
36
|
const terminal_keys_1 = require("../../types/terminal-keys");
|
|
36
37
|
Object.defineProperty(exports, "NAVIGATION_KEY_VALUES", { enumerable: true, get: function () { return terminal_keys_1.NAVIGATION_KEY_VALUES; } });
|
|
38
|
+
const direct_input_1 = require("../../types/direct-input");
|
|
37
39
|
const key_sequence_1 = require("./key-sequence");
|
|
38
40
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
39
41
|
const logger = (0, logger_1.createLogger)('tmux');
|
|
@@ -381,11 +383,17 @@ async function sendKeys(sessionName, keys, sendEnter = true, options) {
|
|
|
381
383
|
}
|
|
382
384
|
// execFile() passes arguments directly without shell interpretation,
|
|
383
385
|
// so no shell-level escaping is needed
|
|
386
|
+
//
|
|
387
|
+
// Issue #2769: tmux is NOT a shell, but it does read each argument, and a `;`
|
|
388
|
+
// at the end of one is its command separator. Unescaped, `go;` + `C-m` makes
|
|
389
|
+
// tmux run `send-keys go` and then a command called `C-m` — which fails, so
|
|
390
|
+
// the whole call throws and nothing reaches the pane.
|
|
391
|
+
const legacyKeys = (0, key_sequence_1.escapeTrailingSemicolon)(keys);
|
|
384
392
|
const args = options?.literal
|
|
385
393
|
? (0, key_sequence_1.keySequenceArgs)(exactTarget(sessionName), { kind: 'literal', text: keys })
|
|
386
394
|
: sendEnter
|
|
387
|
-
? ['send-keys', '-t', exactTarget(sessionName),
|
|
388
|
-
: ['send-keys', '-t', exactTarget(sessionName),
|
|
395
|
+
? ['send-keys', '-t', exactTarget(sessionName), legacyKeys, 'C-m']
|
|
396
|
+
: ['send-keys', '-t', exactTarget(sessionName), legacyKeys];
|
|
389
397
|
try {
|
|
390
398
|
await execFileAsync('tmux', args, { timeout: DEFAULT_TIMEOUT });
|
|
391
399
|
}
|
|
@@ -494,6 +502,11 @@ const ALLOWED_SPECIAL_KEYS = new Set([
|
|
|
494
502
|
// from user-controlled text.
|
|
495
503
|
'C-x', 'C-p', 'C-t',
|
|
496
504
|
'a', 'l', 'n', 't', 'm', 'g', 'u', 'r', 'c',
|
|
505
|
+
// Issue #2760: Command Code's plan review is approved with ctrl+a and with
|
|
506
|
+
// nothing else. Deliverable for every session, declared by Command Code alone
|
|
507
|
+
// (`COMMAND_CODE_NAVIGATION_KEY_VALUES`), so the route answers 400 for every
|
|
508
|
+
// other tool — the same arrangement as `s` above.
|
|
509
|
+
'C-a',
|
|
497
510
|
]);
|
|
498
511
|
/**
|
|
499
512
|
* Type guard for "sendSpecialKeys() will actually deliver this key" (Issue #2032).
|
|
@@ -890,3 +903,51 @@ async function sendSpecialKeysAndInvalidate(sessionName, keys) {
|
|
|
890
903
|
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
891
904
|
scheduleRepaintInvalidation(sessionName);
|
|
892
905
|
}
|
|
906
|
+
/**
|
|
907
|
+
* Bytes of `text` per `send-keys -H` invocation (Issue #2765).
|
|
908
|
+
*
|
|
909
|
+
* `-H` takes one argv entry per byte, so a 4096-character paste sent as one
|
|
910
|
+
* command would be thousands of arguments. 256 keeps every invocation small and
|
|
911
|
+
* the number of invocations for the longest accepted paste in the dozens.
|
|
912
|
+
*/
|
|
913
|
+
exports.DIRECT_INPUT_TEXT_CHUNK_BYTES = 256;
|
|
914
|
+
/**
|
|
915
|
+
* Deliver direct-input events to a pane, in order (Issue #2765).
|
|
916
|
+
*
|
|
917
|
+
* - a `key` event is a tmux key NAME from `DIRECT_INPUT_KEY_VALUES`, sent as
|
|
918
|
+
* `send-keys -t <target> -- <name>` so tmux translates it for the pane's
|
|
919
|
+
* current keypad / cursor mode;
|
|
920
|
+
* - a `text` event is sent as `send-keys -t <target> -H <hex bytes>`, NOT as
|
|
921
|
+
* `-l`: measured on tmux 3.5a, `send-keys -l -- 'a;'` delivers `a` and drops
|
|
922
|
+
* the trailing `;` (tmux takes it for a command separator), and `-l -- ';'`
|
|
923
|
+
* delivers nothing at all. `-H` has no such rule and carries UTF-8 unchanged.
|
|
924
|
+
*
|
|
925
|
+
* Every event is re-validated here, so nothing unvalidated reaches `execFile`
|
|
926
|
+
* even if a caller forgot to: a key outside the vocabulary throws before any
|
|
927
|
+
* tmux process is started.
|
|
928
|
+
*/
|
|
929
|
+
async function sendDirectInputAndInvalidate(sessionName, events) {
|
|
930
|
+
for (const event of events) {
|
|
931
|
+
if (!(0, direct_input_1.isDirectInputEvent)(event)) {
|
|
932
|
+
throw new Error('Invalid direct input event');
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
const target = exactTarget(sessionName);
|
|
936
|
+
for (const event of events) {
|
|
937
|
+
if (event.type === 'key') {
|
|
938
|
+
await execFileAsync('tmux', ['send-keys', '-t', target, '--', event.key], {
|
|
939
|
+
timeout: DEFAULT_TIMEOUT,
|
|
940
|
+
});
|
|
941
|
+
continue;
|
|
942
|
+
}
|
|
943
|
+
const bytes = Buffer.from(event.text, 'utf8');
|
|
944
|
+
for (let offset = 0; offset < bytes.length; offset += exports.DIRECT_INPUT_TEXT_CHUNK_BYTES) {
|
|
945
|
+
const hex = Array.from(bytes.subarray(offset, offset + exports.DIRECT_INPUT_TEXT_CHUNK_BYTES), (byte) => byte.toString(16).padStart(2, '0'));
|
|
946
|
+
await execFileAsync('tmux', ['send-keys', '-t', target, '-H', ...hex], {
|
|
947
|
+
timeout: DEFAULT_TIMEOUT,
|
|
948
|
+
});
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
952
|
+
scheduleRepaintInvalidation(sessionName);
|
|
953
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Direct terminal input vocabulary (Issue #2764).
|
|
4
|
+
*
|
|
5
|
+
* The "direct input" mode sends what the user types straight to an agent's tmux
|
|
6
|
+
* pane, without asking the detection layer what is on screen. It exists for the
|
|
7
|
+
* frames detection cannot read: an overlay that needs a key no button offers
|
|
8
|
+
* (Command Code's plan review wants `ctrl+a`) used to leave the session with no
|
|
9
|
+
* way forward from the browser.
|
|
10
|
+
*
|
|
11
|
+
* Values and pure functions only — no tmux, no DOM — so this module is safe to
|
|
12
|
+
* import from the server, the CLI and the browser bundle alike, the same
|
|
13
|
+
* property `terminal-keys.ts` keeps.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.MAX_DIRECT_INPUT_TEXT_LENGTH = exports.MAX_DIRECT_INPUT_EVENTS = exports.DIRECT_INPUT_KEY_VALUES = exports.DIRECT_INPUT_CTRL_KEY_VALUES = exports.DIRECT_INPUT_NAMED_KEY_VALUES = void 0;
|
|
17
|
+
exports.isDirectInputKey = isDirectInputKey;
|
|
18
|
+
exports.isDirectInputEvent = isDirectInputEvent;
|
|
19
|
+
exports.encodeKeyEvent = encodeKeyEvent;
|
|
20
|
+
/** tmux key names direct input may send. Each one was measured on tmux 3.5a. */
|
|
21
|
+
exports.DIRECT_INPUT_NAMED_KEY_VALUES = [
|
|
22
|
+
'Enter', 'Escape', 'Tab', 'BTab', 'BSpace', 'DC',
|
|
23
|
+
'Up', 'Down', 'Left', 'Right',
|
|
24
|
+
'Home', 'End', 'PageUp', 'PageDown',
|
|
25
|
+
];
|
|
26
|
+
/** `C-a` … `C-z`. tmux 3.5a delivers these as 0x01 … 0x1a. */
|
|
27
|
+
exports.DIRECT_INPUT_CTRL_KEY_VALUES = [
|
|
28
|
+
'C-a', 'C-b', 'C-c', 'C-d', 'C-e', 'C-f', 'C-g', 'C-h', 'C-i', 'C-j', 'C-k', 'C-l', 'C-m',
|
|
29
|
+
'C-n', 'C-o', 'C-p', 'C-q', 'C-r', 'C-s', 'C-t', 'C-u', 'C-v', 'C-w', 'C-x', 'C-y', 'C-z',
|
|
30
|
+
];
|
|
31
|
+
exports.DIRECT_INPUT_KEY_VALUES = [
|
|
32
|
+
...exports.DIRECT_INPUT_NAMED_KEY_VALUES,
|
|
33
|
+
...exports.DIRECT_INPUT_CTRL_KEY_VALUES,
|
|
34
|
+
];
|
|
35
|
+
/** Most events one request may carry. */
|
|
36
|
+
exports.MAX_DIRECT_INPUT_EVENTS = 32;
|
|
37
|
+
/** Longest `text` one event may carry, in UTF-16 code units (a paste). */
|
|
38
|
+
exports.MAX_DIRECT_INPUT_TEXT_LENGTH = 4096;
|
|
39
|
+
function isDirectInputKey(value) {
|
|
40
|
+
return typeof value === 'string' && exports.DIRECT_INPUT_KEY_VALUES.includes(value);
|
|
41
|
+
}
|
|
42
|
+
function isDirectInputEvent(value) {
|
|
43
|
+
if (typeof value !== 'object' || value === null)
|
|
44
|
+
return false;
|
|
45
|
+
const event = value;
|
|
46
|
+
if (event.type === 'key')
|
|
47
|
+
return isDirectInputKey(event.key);
|
|
48
|
+
if (event.type === 'text') {
|
|
49
|
+
return (typeof event.text === 'string' &&
|
|
50
|
+
event.text.length > 0 &&
|
|
51
|
+
event.text.length <= exports.MAX_DIRECT_INPUT_TEXT_LENGTH);
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The `keyCode` every browser gives a keydown the IME is handling. No physical
|
|
57
|
+
* key maps to it, so treating it as "not ours" costs ordinary typing nothing.
|
|
58
|
+
*/
|
|
59
|
+
const IME_PROCESS_KEY_CODE = 229;
|
|
60
|
+
const NAMED_KEY_BY_DOM_KEY = {
|
|
61
|
+
Enter: 'Enter',
|
|
62
|
+
Escape: 'Escape',
|
|
63
|
+
Backspace: 'BSpace',
|
|
64
|
+
Delete: 'DC',
|
|
65
|
+
ArrowUp: 'Up',
|
|
66
|
+
ArrowDown: 'Down',
|
|
67
|
+
ArrowLeft: 'Left',
|
|
68
|
+
ArrowRight: 'Right',
|
|
69
|
+
Home: 'Home',
|
|
70
|
+
End: 'End',
|
|
71
|
+
PageUp: 'PageUp',
|
|
72
|
+
PageDown: 'PageDown',
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Turn one keydown into the event to send, or `null` to leave it to the browser.
|
|
76
|
+
*
|
|
77
|
+
* `null` is an answer, not a failure: the caller must NOT `preventDefault()` on
|
|
78
|
+
* it, so Cmd+C / Cmd+V / Cmd+R, IME composition and function keys keep working.
|
|
79
|
+
*
|
|
80
|
+
* IME is checked twice because `isComposing` alone misses the key that matters
|
|
81
|
+
* most (Issue #2801). Safari before WebKit 310826@main fires the Enter that
|
|
82
|
+
* commits a composition AFTER `compositionend`, with `isComposing: false` — so
|
|
83
|
+
* the committed text would reach the pane followed by an Enter the user meant
|
|
84
|
+
* for the IME, submitting the composer or confirming a dialog's highlighted
|
|
85
|
+
* option. That keydown still carries `keyCode` 229, the same test
|
|
86
|
+
* `MessageInput` uses.
|
|
87
|
+
*/
|
|
88
|
+
function encodeKeyEvent(event) {
|
|
89
|
+
if (event.isComposing === true || event.keyCode === IME_PROCESS_KEY_CODE)
|
|
90
|
+
return null;
|
|
91
|
+
if (event.metaKey || event.altKey)
|
|
92
|
+
return null;
|
|
93
|
+
if (event.key === 'Tab') {
|
|
94
|
+
if (event.ctrlKey)
|
|
95
|
+
return null;
|
|
96
|
+
return { type: 'key', key: event.shiftKey ? 'BTab' : 'Tab' };
|
|
97
|
+
}
|
|
98
|
+
if (event.ctrlKey) {
|
|
99
|
+
if (event.key.length !== 1)
|
|
100
|
+
return null;
|
|
101
|
+
const candidate = `C-${event.key.toLowerCase()}`;
|
|
102
|
+
return isDirectInputKey(candidate) ? { type: 'key', key: candidate } : null;
|
|
103
|
+
}
|
|
104
|
+
const named = NAMED_KEY_BY_DOM_KEY[event.key];
|
|
105
|
+
if (named !== undefined)
|
|
106
|
+
return { type: 'key', key: named };
|
|
107
|
+
// A printable key: `KeyboardEvent.key` is the character itself, which is one
|
|
108
|
+
// code point (one or two UTF-16 units). `Dead`, `Shift`, `F5`, `Process`,
|
|
109
|
+
// `Unidentified` … are all longer than one code point and fall through.
|
|
110
|
+
if ([...event.key].length === 1)
|
|
111
|
+
return { type: 'text', text: event.key };
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* Types for sidebar components and branch status display
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.EXITED_STATUS_REASON = exports.deriveCliStatus = void 0;
|
|
8
|
+
exports.UNCLASSIFIED_STATUS_WORD = exports.EXITED_STATUS_REASON = exports.isUnclassifiedCliStatus = exports.deriveCliStatus = void 0;
|
|
9
9
|
exports.aggregateCliStatus = aggregateCliStatus;
|
|
10
10
|
exports.formatCliStatusBreakdown = formatCliStatusBreakdown;
|
|
11
|
+
exports.isBranchUnclassified = isBranchUnclassified;
|
|
11
12
|
exports.deriveWorktreeWaitingDetail = deriveWorktreeWaitingDetail;
|
|
12
13
|
exports.calculateHasUnread = calculateHasUnread;
|
|
13
14
|
exports.toBranchItem = toBranchItem;
|
|
@@ -15,6 +16,7 @@ const types_1 = require("../lib/cli-tools/types");
|
|
|
15
16
|
const default_agents_1 = require("../config/default-agents");
|
|
16
17
|
const status_mapping_1 = require("../lib/session/status-mapping");
|
|
17
18
|
Object.defineProperty(exports, "deriveCliStatus", { enumerable: true, get: function () { return status_mapping_1.deriveCliStatus; } });
|
|
19
|
+
Object.defineProperty(exports, "isUnclassifiedCliStatus", { enumerable: true, get: function () { return status_mapping_1.isUnclassifiedCliStatus; } });
|
|
18
20
|
const next_action_helper_1 = require("../lib/session/next-action-helper");
|
|
19
21
|
/**
|
|
20
22
|
* The `sessionStatusReason` token that means "the pane is there, the agent is
|
|
@@ -28,6 +30,18 @@ const next_action_helper_1 = require("../lib/session/next-action-helper");
|
|
|
28
30
|
* restatement cannot drift.
|
|
29
31
|
*/
|
|
30
32
|
exports.EXITED_STATUS_REASON = 'exited';
|
|
33
|
+
/**
|
|
34
|
+
* The status word the breakdown tooltip prints for an instance whose frame no
|
|
35
|
+
* rule could classify (Issue #2775), in place of the `ready` its triple derives.
|
|
36
|
+
*
|
|
37
|
+
* Not a `BranchStatus` member, and deliberately so: a sixth value would ripple
|
|
38
|
+
* into the colours, the sort order (`STATUS_PRIORITY`) and the emphasis tiers,
|
|
39
|
+
* which is the cost #2070 declined for `exited` too. The instance keeps its
|
|
40
|
+
* `ready` in `cliStatus`; `unclassifiedInstanceIds` says which `ready` is a
|
|
41
|
+
* fallback. Raw English like the other words in the breakdown, which prints
|
|
42
|
+
* `BranchStatus` tokens verbatim.
|
|
43
|
+
*/
|
|
44
|
+
exports.UNCLASSIFIED_STATUS_WORD = 'unknown';
|
|
31
45
|
/**
|
|
32
46
|
* `BranchStatus` → `SessionStatus`, so the sidebar can reuse `getNextAction`
|
|
33
47
|
* (Issue #1787) instead of growing a second next-action table.
|
|
@@ -93,19 +107,48 @@ function aggregateCliStatus(cliStatus) {
|
|
|
93
107
|
* because the word is user-facing and therefore localized, and this module
|
|
94
108
|
* runs on the server where `t()` cannot be called (the same rule
|
|
95
109
|
* `NEXT_ACTION_KEYS` follows).
|
|
110
|
+
* @param unclassifiedInstanceIds - Instances whose `ready` is a fallback for a
|
|
111
|
+
* frame nothing could read (Issue #2775). Their status word becomes
|
|
112
|
+
* {@link UNCLASSIFIED_STATUS_WORD} — `Codex: unknown` — because the `ready`
|
|
113
|
+
* the entry carries is exactly what is not known. Only a `ready` entry is
|
|
114
|
+
* rewritten, so a caller cannot relabel a real reading with it.
|
|
96
115
|
* @returns Comma-separated "Label: status" string ('' when empty/absent)
|
|
97
116
|
*/
|
|
98
|
-
function formatCliStatusBreakdown(cliStatus, labels, exitedSuffix) {
|
|
117
|
+
function formatCliStatusBreakdown(cliStatus, labels, exitedSuffix, unclassifiedInstanceIds) {
|
|
99
118
|
if (!cliStatus)
|
|
100
119
|
return '';
|
|
101
120
|
return Object.entries(cliStatus)
|
|
102
121
|
.map(([instanceId, status]) => {
|
|
103
122
|
const label = labels?.[instanceId] ?? (0, types_1.getCliToolDisplayNameSafe)(instanceId, instanceId);
|
|
104
123
|
const suffix = exitedSuffix?.(instanceId);
|
|
105
|
-
|
|
124
|
+
const word = status === 'ready' && unclassifiedInstanceIds?.has(instanceId)
|
|
125
|
+
? exports.UNCLASSIFIED_STATUS_WORD
|
|
126
|
+
: (status ?? 'idle');
|
|
127
|
+
return `${label}: ${word}${suffix ? ` (${suffix})` : ''}`;
|
|
106
128
|
})
|
|
107
129
|
.join(', ');
|
|
108
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Whether the sidebar's ONE aggregated dot should read "cannot tell"
|
|
133
|
+
* (Issue #2775).
|
|
134
|
+
*
|
|
135
|
+
* True when the aggregate is `ready` and at least one of the instances that
|
|
136
|
+
* made it `ready` is only `ready` because its frame could not be read. The
|
|
137
|
+
* precedence this gives is waiting > running/generating > cannot-tell > ready
|
|
138
|
+
* > idle: a reading of work in progress outranks a blind spot, but a blind spot
|
|
139
|
+
* outranks a sibling that is merely idle — the unreadable pane is the one a
|
|
140
|
+
* human should look at, and it may well be hiding a dialog.
|
|
141
|
+
*
|
|
142
|
+
* @param cliStatus - Per-instance status map (`SidebarBranchItem.cliStatus`)
|
|
143
|
+
* @param unclassifiedInstanceIds - `SidebarBranchItem.unclassifiedInstanceIds`
|
|
144
|
+
*/
|
|
145
|
+
function isBranchUnclassified(cliStatus, unclassifiedInstanceIds) {
|
|
146
|
+
if (!cliStatus || !unclassifiedInstanceIds || unclassifiedInstanceIds.length === 0)
|
|
147
|
+
return false;
|
|
148
|
+
if (aggregateCliStatus(cliStatus) !== 'ready')
|
|
149
|
+
return false;
|
|
150
|
+
return unclassifiedInstanceIds.some((id) => cliStatus[id] === 'ready');
|
|
151
|
+
}
|
|
109
152
|
/** Precedence for folding per-instance kinds: answerable-now wins (Issue #1786). */
|
|
110
153
|
const WAITING_KIND_PRECEDENCE = [
|
|
111
154
|
'prompt',
|
|
@@ -200,6 +243,7 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
200
243
|
const cliStatus = {};
|
|
201
244
|
const cliStatusLabels = {};
|
|
202
245
|
const exitedInstanceIds = [];
|
|
246
|
+
const unclassifiedInstanceIds = [];
|
|
203
247
|
const byInstance = worktree.sessionStatusByInstance;
|
|
204
248
|
// Legacy fallback: no per-instance data → key by selectedAgents / CLI tool.
|
|
205
249
|
if (!byInstance) {
|
|
@@ -210,8 +254,11 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
210
254
|
if (worktree.sessionStatusByCli?.[agent]?.sessionStatusReason === exports.EXITED_STATUS_REASON) {
|
|
211
255
|
exitedInstanceIds.push(agent);
|
|
212
256
|
}
|
|
257
|
+
if ((0, status_mapping_1.isUnclassifiedCliStatus)(worktree.sessionStatusByCli?.[agent])) {
|
|
258
|
+
unclassifiedInstanceIds.push(agent);
|
|
259
|
+
}
|
|
213
260
|
}
|
|
214
|
-
return { cliStatus, cliStatusLabels, exitedInstanceIds };
|
|
261
|
+
return { cliStatus, cliStatusLabels, exitedInstanceIds, unclassifiedInstanceIds };
|
|
215
262
|
}
|
|
216
263
|
// Configured roster: explicit agentInstances, else primaries per selectedAgents.
|
|
217
264
|
const roster = worktree.agentInstances && worktree.agentInstances.length > 0
|
|
@@ -225,6 +272,9 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
225
272
|
if (byInstance[instance.id]?.sessionStatusReason === exports.EXITED_STATUS_REASON) {
|
|
226
273
|
exitedInstanceIds.push(instance.id);
|
|
227
274
|
}
|
|
275
|
+
if ((0, status_mapping_1.isUnclassifiedCliStatus)(byInstance[instance.id])) {
|
|
276
|
+
unclassifiedInstanceIds.push(instance.id);
|
|
277
|
+
}
|
|
228
278
|
}
|
|
229
279
|
// Surface any RUNNING instance missing from the roster (e.g. a `claude`
|
|
230
280
|
// session started even though claude is not in selectedAgents) so the
|
|
@@ -237,8 +287,11 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
237
287
|
continue;
|
|
238
288
|
cliStatus[instanceId] = derived;
|
|
239
289
|
cliStatusLabels[instanceId] = labelForUnknownInstance(instanceId);
|
|
290
|
+
if ((0, status_mapping_1.isUnclassifiedCliStatus)(status)) {
|
|
291
|
+
unclassifiedInstanceIds.push(instanceId);
|
|
292
|
+
}
|
|
240
293
|
}
|
|
241
|
-
return { cliStatus, cliStatusLabels, exitedInstanceIds };
|
|
294
|
+
return { cliStatus, cliStatusLabels, exitedInstanceIds, unclassifiedInstanceIds };
|
|
242
295
|
}
|
|
243
296
|
/**
|
|
244
297
|
* Convert Worktree to SidebarBranchItem for display
|
|
@@ -261,11 +314,15 @@ function toBranchItem(worktree) {
|
|
|
261
314
|
// agentInstances) so instances outside selectedAgents and alias instances are
|
|
262
315
|
// reflected. Falls back to the legacy selectedAgents path when no per-instance
|
|
263
316
|
// data is present.
|
|
264
|
-
const { cliStatus, cliStatusLabels, exitedInstanceIds } = deriveSidebarCliStatus(worktree);
|
|
317
|
+
const { cliStatus, cliStatusLabels, exitedInstanceIds, unclassifiedInstanceIds } = deriveSidebarCliStatus(worktree);
|
|
265
318
|
// Issue #1787: the row's emphasis and its "what do I do next" label both come
|
|
266
319
|
// from the AGGREGATED status, matching the single dot the row renders.
|
|
267
320
|
const aggregated = aggregateCliStatus(cliStatus);
|
|
268
321
|
const { waitingKind, awaitingInstruction } = deriveWorktreeWaitingDetail(worktree);
|
|
322
|
+
// Issue #2775: when that dot reads "cannot tell", so does the next action.
|
|
323
|
+
// `getNextAction` would answer "Send message" for the `ready` underneath,
|
|
324
|
+
// which is advice about a state nobody observed.
|
|
325
|
+
const unclassified = isBranchUnclassified(cliStatus, unclassifiedInstanceIds);
|
|
269
326
|
return {
|
|
270
327
|
id: worktree.id,
|
|
271
328
|
name: worktree.name,
|
|
@@ -277,6 +334,7 @@ function toBranchItem(worktree) {
|
|
|
277
334
|
cliStatus,
|
|
278
335
|
cliStatusLabels,
|
|
279
336
|
exitedInstanceIds,
|
|
337
|
+
unclassifiedInstanceIds,
|
|
280
338
|
worktreePath: worktree.path,
|
|
281
339
|
waitingKind,
|
|
282
340
|
awaitingInstruction,
|
|
@@ -287,6 +345,8 @@ function toBranchItem(worktree) {
|
|
|
287
345
|
// would be a bug the user cannot explain. `isStalled` is server-only
|
|
288
346
|
// (`isWorktreeStalled` needs the detector's timers), so the sidebar never
|
|
289
347
|
// claims "Check stalled".
|
|
290
|
-
nextActionKey:
|
|
348
|
+
nextActionKey: unclassified
|
|
349
|
+
? undefined
|
|
350
|
+
: (0, next_action_helper_1.getNextAction)(BRANCH_STATUS_TO_SESSION_STATUS[aggregated], aggregated === 'waiting' ? 'approval' : null, false),
|
|
291
351
|
};
|
|
292
352
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* Values only — no tmux process access — so this module is safe from any layer.
|
|
20
20
|
*/
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.TERMINAL_KEY_VALUES = exports.OPENCODE_NAVIGATION_KEY_VALUES = exports.OPENCODE_DIRECT_KEY_VALUES = exports.OPENCODE_LEADER_CHORD_VALUES = exports.OPENCODE_LEADER_KEY = exports.SESSION_SCOPE_KEY_TOOL_IDS = exports.CLAUDE_NAVIGATION_KEY_VALUES = exports.NAVIGATION_KEY_VALUES = exports.SESSION_SCOPE_KEY = exports.ANSWER_KEY_VALUES = void 0;
|
|
22
|
+
exports.TERMINAL_KEY_VALUES = exports.OPENCODE_NAVIGATION_KEY_VALUES = exports.OPENCODE_DIRECT_KEY_VALUES = exports.OPENCODE_LEADER_CHORD_VALUES = exports.OPENCODE_LEADER_KEY = exports.PLAN_APPROVE_KEY_TOOL_IDS = exports.COMMAND_CODE_NAVIGATION_KEY_VALUES = exports.PLAN_APPROVE_KEY = exports.SESSION_SCOPE_KEY_TOOL_IDS = exports.CLAUDE_NAVIGATION_KEY_VALUES = exports.NAVIGATION_KEY_VALUES = exports.SESSION_SCOPE_KEY = exports.ANSWER_KEY_VALUES = void 0;
|
|
23
23
|
/**
|
|
24
24
|
* The characters a dialog is answered WITH rather than navigated by (Issue #2254).
|
|
25
25
|
*
|
|
@@ -141,6 +141,36 @@ exports.CLAUDE_NAVIGATION_KEY_VALUES = [
|
|
|
141
141
|
* the "values only, safe from any layer" property its header depends on.
|
|
142
142
|
*/
|
|
143
143
|
exports.SESSION_SCOPE_KEY_TOOL_IDS = ['claude', 'command-code'];
|
|
144
|
+
/**
|
|
145
|
+
* The key that approves Command Code's plan review (Issue #2760).
|
|
146
|
+
*
|
|
147
|
+
* That overlay ends in `Approve ctrl+a executes the plan` / `Cancel esc`, and
|
|
148
|
+
* ctrl+a is the ONLY way to approve it (measured on 1.58.0 at 200x1000). A tmux
|
|
149
|
+
* key name, delivered as 0x01.
|
|
150
|
+
*
|
|
151
|
+
* In neither the shared pad nor the claude-family pad: on claude's composer
|
|
152
|
+
* ctrl+a is "move to the start of the line", so there is no screen of claude's
|
|
153
|
+
* that a button for it could serve.
|
|
154
|
+
*/
|
|
155
|
+
exports.PLAN_APPROVE_KEY = 'C-a';
|
|
156
|
+
/**
|
|
157
|
+
* What a Command Code pane may be sent: the claude-family pad plus
|
|
158
|
+
* {@link PLAN_APPROVE_KEY}.
|
|
159
|
+
*
|
|
160
|
+
* Returned by `CommandCodeTool.navigationKeys()`. `CLAUDE_NAVIGATION_KEY_VALUES`
|
|
161
|
+
* itself is untouched, so claude's vocabulary does not widen by a single key.
|
|
162
|
+
*/
|
|
163
|
+
exports.COMMAND_CODE_NAVIGATION_KEY_VALUES = [
|
|
164
|
+
...exports.CLAUDE_NAVIGATION_KEY_VALUES,
|
|
165
|
+
exports.PLAN_APPROVE_KEY,
|
|
166
|
+
];
|
|
167
|
+
/**
|
|
168
|
+
* The tool ids whose `navigationKeys()` carry {@link PLAN_APPROVE_KEY}.
|
|
169
|
+
*
|
|
170
|
+
* Read by the chat surface, which cannot call `navigationKeys()` — the same
|
|
171
|
+
* reason and the same shape as {@link SESSION_SCOPE_KEY_TOOL_IDS}.
|
|
172
|
+
*/
|
|
173
|
+
exports.PLAN_APPROVE_KEY_TOOL_IDS = ['command-code'];
|
|
144
174
|
// ---------------------------------------------------------------------------
|
|
145
175
|
// Per-tool vocabularies (Issue #2046)
|
|
146
176
|
// ---------------------------------------------------------------------------
|
|
@@ -226,6 +256,8 @@ exports.TERMINAL_KEY_VALUES = [
|
|
|
226
256
|
...exports.NAVIGATION_KEY_VALUES,
|
|
227
257
|
// Issue #2297: claude / Command Code declare it; nothing else does.
|
|
228
258
|
exports.SESSION_SCOPE_KEY,
|
|
259
|
+
// Issue #2760: Command Code alone declares it.
|
|
260
|
+
exports.PLAN_APPROVE_KEY,
|
|
229
261
|
exports.OPENCODE_LEADER_KEY,
|
|
230
262
|
...exports.OPENCODE_DIRECT_KEY_VALUES,
|
|
231
263
|
// Issue #2254: `n` is in the base pad now — see OPENCODE_CHORD_ONLY_VALUES.
|
|
@@ -128,6 +128,33 @@ export declare const CLAUDE_NAVIGATION_KEY_VALUES: readonly ["Up", "Down", "Left
|
|
|
128
128
|
* the "values only, safe from any layer" property its header depends on.
|
|
129
129
|
*/
|
|
130
130
|
export declare const SESSION_SCOPE_KEY_TOOL_IDS: readonly ["claude", "command-code"];
|
|
131
|
+
/**
|
|
132
|
+
* The key that approves Command Code's plan review (Issue #2760).
|
|
133
|
+
*
|
|
134
|
+
* That overlay ends in `Approve ctrl+a executes the plan` / `Cancel esc`, and
|
|
135
|
+
* ctrl+a is the ONLY way to approve it (measured on 1.58.0 at 200x1000). A tmux
|
|
136
|
+
* key name, delivered as 0x01.
|
|
137
|
+
*
|
|
138
|
+
* In neither the shared pad nor the claude-family pad: on claude's composer
|
|
139
|
+
* ctrl+a is "move to the start of the line", so there is no screen of claude's
|
|
140
|
+
* that a button for it could serve.
|
|
141
|
+
*/
|
|
142
|
+
export declare const PLAN_APPROVE_KEY = "C-a";
|
|
143
|
+
/**
|
|
144
|
+
* What a Command Code pane may be sent: the claude-family pad plus
|
|
145
|
+
* {@link PLAN_APPROVE_KEY}.
|
|
146
|
+
*
|
|
147
|
+
* Returned by `CommandCodeTool.navigationKeys()`. `CLAUDE_NAVIGATION_KEY_VALUES`
|
|
148
|
+
* itself is untouched, so claude's vocabulary does not widen by a single key.
|
|
149
|
+
*/
|
|
150
|
+
export declare const COMMAND_CODE_NAVIGATION_KEY_VALUES: readonly ["Up", "Down", "Left", "Right", "Enter", "Escape", "Tab", "BTab", "PageUp", "PageDown", "Home", "End", "q", "1", "2", "3", "4", "5", "6", "7", "8", "9", "y", "n", "s", "C-a"];
|
|
151
|
+
/**
|
|
152
|
+
* The tool ids whose `navigationKeys()` carry {@link PLAN_APPROVE_KEY}.
|
|
153
|
+
*
|
|
154
|
+
* Read by the chat surface, which cannot call `navigationKeys()` — the same
|
|
155
|
+
* reason and the same shape as {@link SESSION_SCOPE_KEY_TOOL_IDS}.
|
|
156
|
+
*/
|
|
157
|
+
export declare const PLAN_APPROVE_KEY_TOOL_IDS: readonly ["command-code"];
|
|
131
158
|
/**
|
|
132
159
|
* opencode's leader prefix — the first half of a two-step chord.
|
|
133
160
|
*
|
|
@@ -180,7 +207,7 @@ export declare const OPENCODE_NAVIGATION_KEY_VALUES: readonly ["Up", "Down", "Le
|
|
|
180
207
|
* `tests/unit/cli-tools/navigation-keys-declaration-2046.test.ts` pin both
|
|
181
208
|
* halves.
|
|
182
209
|
*/
|
|
183
|
-
export declare const TERMINAL_KEY_VALUES: readonly ["Up", "Down", "Left", "Right", "Enter", "Escape", "Tab", "BTab", "PageUp", "PageDown", "Home", "End", "q", "1", "2", "3", "4", "5", "6", "7", "8", "9", "y", "n", "s", "C-x", "C-p", "C-t", "a", "l", "t", "m", "g", "u", "r", "c"];
|
|
210
|
+
export declare const TERMINAL_KEY_VALUES: readonly ["Up", "Down", "Left", "Right", "Enter", "Escape", "Tab", "BTab", "PageUp", "PageDown", "Home", "End", "q", "1", "2", "3", "4", "5", "6", "7", "8", "9", "y", "n", "s", "C-a", "C-x", "C-p", "C-t", "a", "l", "t", "m", "g", "u", "r", "c"];
|
|
184
211
|
/** Any key name a tool may declare in its {@link NavigationKeySpec}. */
|
|
185
212
|
export type TerminalKey = typeof TERMINAL_KEY_VALUES[number];
|
|
186
213
|
//# sourceMappingURL=terminal-keys.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-keys.d.ts","sourceRoot":"","sources":["../../src/types/terminal-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,iBAAiB,kEAGpB,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,6KAQxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,4BAA4B,kLAG/B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,qCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal-keys.d.ts","sourceRoot":"","sources":["../../src/types/terminal-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,iBAAiB,kEAGpB,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,6KAQxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,4BAA4B,kLAG/B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,qCAAsC,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,yLAGrC,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,2BAA4B,CAAC;AAMnE;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,4BAA4B,wDAE/B,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,yBAA0B,CAAC;AAsBlE;;;GAGG;AACH,eAAO,MAAM,8BAA8B,0OAKjC,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,sPAUtB,CAAC;AAEX,wEAAwE;AACxE,MAAM,MAAM,WAAW,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* Values only — no tmux process access — so this module is safe from any layer.
|
|
20
20
|
*/
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.TERMINAL_KEY_VALUES = exports.OPENCODE_NAVIGATION_KEY_VALUES = exports.OPENCODE_DIRECT_KEY_VALUES = exports.OPENCODE_LEADER_CHORD_VALUES = exports.OPENCODE_LEADER_KEY = exports.SESSION_SCOPE_KEY_TOOL_IDS = exports.CLAUDE_NAVIGATION_KEY_VALUES = exports.NAVIGATION_KEY_VALUES = exports.SESSION_SCOPE_KEY = exports.ANSWER_KEY_VALUES = void 0;
|
|
22
|
+
exports.TERMINAL_KEY_VALUES = exports.OPENCODE_NAVIGATION_KEY_VALUES = exports.OPENCODE_DIRECT_KEY_VALUES = exports.OPENCODE_LEADER_CHORD_VALUES = exports.OPENCODE_LEADER_KEY = exports.PLAN_APPROVE_KEY_TOOL_IDS = exports.COMMAND_CODE_NAVIGATION_KEY_VALUES = exports.PLAN_APPROVE_KEY = exports.SESSION_SCOPE_KEY_TOOL_IDS = exports.CLAUDE_NAVIGATION_KEY_VALUES = exports.NAVIGATION_KEY_VALUES = exports.SESSION_SCOPE_KEY = exports.ANSWER_KEY_VALUES = void 0;
|
|
23
23
|
/**
|
|
24
24
|
* The characters a dialog is answered WITH rather than navigated by (Issue #2254).
|
|
25
25
|
*
|
|
@@ -141,6 +141,36 @@ exports.CLAUDE_NAVIGATION_KEY_VALUES = [
|
|
|
141
141
|
* the "values only, safe from any layer" property its header depends on.
|
|
142
142
|
*/
|
|
143
143
|
exports.SESSION_SCOPE_KEY_TOOL_IDS = ['claude', 'command-code'];
|
|
144
|
+
/**
|
|
145
|
+
* The key that approves Command Code's plan review (Issue #2760).
|
|
146
|
+
*
|
|
147
|
+
* That overlay ends in `Approve ctrl+a executes the plan` / `Cancel esc`, and
|
|
148
|
+
* ctrl+a is the ONLY way to approve it (measured on 1.58.0 at 200x1000). A tmux
|
|
149
|
+
* key name, delivered as 0x01.
|
|
150
|
+
*
|
|
151
|
+
* In neither the shared pad nor the claude-family pad: on claude's composer
|
|
152
|
+
* ctrl+a is "move to the start of the line", so there is no screen of claude's
|
|
153
|
+
* that a button for it could serve.
|
|
154
|
+
*/
|
|
155
|
+
exports.PLAN_APPROVE_KEY = 'C-a';
|
|
156
|
+
/**
|
|
157
|
+
* What a Command Code pane may be sent: the claude-family pad plus
|
|
158
|
+
* {@link PLAN_APPROVE_KEY}.
|
|
159
|
+
*
|
|
160
|
+
* Returned by `CommandCodeTool.navigationKeys()`. `CLAUDE_NAVIGATION_KEY_VALUES`
|
|
161
|
+
* itself is untouched, so claude's vocabulary does not widen by a single key.
|
|
162
|
+
*/
|
|
163
|
+
exports.COMMAND_CODE_NAVIGATION_KEY_VALUES = [
|
|
164
|
+
...exports.CLAUDE_NAVIGATION_KEY_VALUES,
|
|
165
|
+
exports.PLAN_APPROVE_KEY,
|
|
166
|
+
];
|
|
167
|
+
/**
|
|
168
|
+
* The tool ids whose `navigationKeys()` carry {@link PLAN_APPROVE_KEY}.
|
|
169
|
+
*
|
|
170
|
+
* Read by the chat surface, which cannot call `navigationKeys()` — the same
|
|
171
|
+
* reason and the same shape as {@link SESSION_SCOPE_KEY_TOOL_IDS}.
|
|
172
|
+
*/
|
|
173
|
+
exports.PLAN_APPROVE_KEY_TOOL_IDS = ['command-code'];
|
|
144
174
|
// ---------------------------------------------------------------------------
|
|
145
175
|
// Per-tool vocabularies (Issue #2046)
|
|
146
176
|
// ---------------------------------------------------------------------------
|
|
@@ -226,6 +256,8 @@ exports.TERMINAL_KEY_VALUES = [
|
|
|
226
256
|
...exports.NAVIGATION_KEY_VALUES,
|
|
227
257
|
// Issue #2297: claude / Command Code declare it; nothing else does.
|
|
228
258
|
exports.SESSION_SCOPE_KEY,
|
|
259
|
+
// Issue #2760: Command Code alone declares it.
|
|
260
|
+
exports.PLAN_APPROVE_KEY,
|
|
229
261
|
exports.OPENCODE_LEADER_KEY,
|
|
230
262
|
...exports.OPENCODE_DIRECT_KEY_VALUES,
|
|
231
263
|
// Issue #2254: `n` is in the base pad now — see OPENCODE_CHORD_ONLY_VALUES.
|
package/package.json
CHANGED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.40.0",
|
|
3
|
+
"date": "2026-09-21",
|
|
4
|
+
"highlight": {
|
|
5
|
+
"ja": "エージェントの画面を読み取れないときでも、キー入力をそのまま届けられる「直接入力」をパソコンとスマートフォンに追加しました。状態を判別できないエージェントは「不明」と表示されます。",
|
|
6
|
+
"en": "Added Direct input on computers and phones, which sends your keys straight to the agent even when its screen cannot be read. Agents whose state cannot be determined are now shown as Unknown."
|
|
7
|
+
},
|
|
8
|
+
"added": [
|
|
9
|
+
{
|
|
10
|
+
"ja": "パソコンの分割ペインに、キー入力をそのままエージェントへ届ける「直接入力」モードを追加しました。",
|
|
11
|
+
"en": "Added a Direct input mode to split panes on a computer that sends your keystrokes straight to the agent."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"ja": "スマートフォンのターミナルで、画面内キーボードを使った「直接入力」ができるようになりました。",
|
|
15
|
+
"en": "On phones, you can now use Direct input in the terminal with an on-screen keyboard."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"ja": "スマートフォンのチャット画面で、ツール表示の切り替えボタンが画面切り替えボタンの隣に出るようになりました。",
|
|
19
|
+
"en": "On phones, the tool activity toggle in chat now appears next to the view switcher."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"ja": "Command Code のプラン確認画面に、プランを承認するボタンを追加しました。",
|
|
23
|
+
"en": "Added a button to approve the plan on the Command Code plan review screen."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"ja": "Command Code の複数選択の質問に、画面から回答できるようになりました。",
|
|
27
|
+
"en": "You can now answer Command Code multiple-choice questions from the screen."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"ja": "CLI の send コマンドで、Claude のモデルを指定できるようになりました。",
|
|
31
|
+
"en": "The CLI send command can now choose the model for Claude."
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"improved": [],
|
|
35
|
+
"fixed": [
|
|
36
|
+
{
|
|
37
|
+
"ja": "状態を判別できないエージェントが「処理中」や「準備完了」と表示される問題を直し、「不明」と表示するようにしました。",
|
|
38
|
+
"en": "Agents whose state cannot be determined are no longer shown as busy or ready; they are now shown as Unknown."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"ja": "チャット画面でツール表示をオンにすると、最新の返答が画面の外に押し出される問題を直しました。",
|
|
42
|
+
"en": "Fixed the latest reply being pushed off screen in chat when tool activity is shown."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"ja": "スマートフォンのチャット画面で検索ができない問題を直しました。",
|
|
46
|
+
"en": "Fixed search not working in the chat view on phones."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"ja": "Codex の作業が終わった後も、処理中や選択待ちのまま表示される問題を直しました。",
|
|
50
|
+
"en": "Fixed Codex still appearing busy or waiting for a choice after it had finished."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"ja": "Command Code のプラン確認画面が処理中や完了と誤って表示される問題を直し、誤ってプランを実行しうる Enter ボタンを出さないようにしました。",
|
|
54
|
+
"en": "Fixed the Command Code plan review screen being shown as busy or finished, and removed the Enter button that could run the plan by mistake."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"ja": "Command Code で回答済みのタブがあると、質問が正しく読み取れない問題を直しました。",
|
|
58
|
+
"en": "Fixed Command Code questions being misread when some tabs were already answered."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"ja": "会話の中にツールの操作案内の文言が含まれていると、エージェントが処理中のまま表示される問題を直しました。",
|
|
62
|
+
"en": "Fixed an agent staying busy when the conversation quoted text from the tool's on-screen hints."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"ja": "末尾がセミコロンのメッセージを送ると、セミコロンが消えたり送信に失敗したりする問題を直しました。",
|
|
66
|
+
"en": "Fixed messages ending with a semicolon losing it or failing to send."
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|