commandmate 0.49.0 → 0.49.2
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 +251 -248
- package/.next/app-path-routes-manifest.json +22 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- 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_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 +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_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/[relayId]/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -0
- 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_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.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.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -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.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 +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.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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_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.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.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.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.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.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.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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/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 +2 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.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 +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.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 +144 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_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 +103 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/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 +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 +22 -21
- package/.next/server/chunks/1062.js +1 -0
- package/.next/server/chunks/{936.js → 110.js} +1 -1
- package/.next/server/chunks/1501.js +5 -4
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -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/2897.js +1 -0
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3505.js +1 -1
- package/.next/server/chunks/{4280.js → 3756.js} +1 -1
- package/.next/server/chunks/3801.js +31 -0
- package/.next/server/chunks/4911.js +1 -0
- package/.next/server/chunks/4936.js +1 -0
- package/.next/server/chunks/5209.js +2 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/{9130.js → 5630.js} +1 -1
- package/.next/server/chunks/610.js +1 -0
- package/.next/server/chunks/6119.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6808.js +4 -0
- package/.next/server/chunks/7023.js +14 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +8 -8
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +63 -53
- package/.next/server/chunks/8918.js +103 -1
- package/.next/server/chunks/9198.js +144 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +1 -1
- package/.next/server/chunks/9731.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/{2407-ab92ae9837c39dce.js → 2407-07a237575e1ceb9e.js} +1 -1
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +1 -0
- package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
- package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
- package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
- package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
- package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
- package/.next/static/chunks/app/sessions/page-c6eb7c02db2f4c80.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +1 -0
- package/.next/static/css/c1e307d05daf93b6.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +233 -17
- package/dist/cli/commands/attach.d.ts +4 -1
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +19 -7
- package/dist/cli/commands/command-target.d.ts +7 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -1
- package/dist/cli/commands/command-target.js +10 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +38 -2
- package/dist/cli/commands/message-dispatch.d.ts +39 -5
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +100 -8
- package/dist/cli/commands/relays.d.ts +26 -2
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +70 -5
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +22 -5
- package/dist/cli/commands/respond.d.ts +12 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +83 -18
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +14 -8
- package/dist/cli/commands/wait-hook-stop-settle.d.ts +66 -0
- package/dist/cli/commands/wait-hook-stop-settle.d.ts.map +1 -0
- package/dist/cli/commands/wait-hook-stop-settle.js +150 -0
- package/dist/cli/commands/wait-instance.d.ts +29 -0
- package/dist/cli/commands/wait-instance.d.ts.map +1 -0
- package/dist/cli/commands/wait-instance.js +56 -0
- package/dist/cli/commands/wait-notices.d.ts +87 -0
- package/dist/cli/commands/wait-notices.d.ts.map +1 -0
- package/dist/cli/commands/wait-notices.js +301 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts +15 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-bookkeeping.js +57 -0
- package/dist/cli/commands/wait-poll-state.d.ts +136 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-state.js +6 -0
- package/dist/cli/commands/wait-timing.d.ts +46 -0
- package/dist/cli/commands/wait-timing.d.ts.map +1 -0
- package/dist/cli/commands/wait-timing.js +99 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts +284 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts.map +1 -0
- package/dist/cli/commands/wait-turn-boundary.js +427 -0
- package/dist/cli/commands/wait-verify.d.ts +51 -0
- package/dist/cli/commands/wait-verify.d.ts.map +1 -0
- package/dist/cli/commands/wait-verify.js +128 -0
- package/dist/cli/commands/wait.d.ts +6 -105
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +240 -968
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +3 -1
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +24 -1
- package/dist/cli/types/api-responses.d.ts +49 -3
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +69 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +226 -18
- package/dist/cli/utils/follow-up-command.d.ts +38 -0
- package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
- package/dist/cli/utils/follow-up-command.js +57 -0
- package/dist/cli/utils/reply-ledger.d.ts +80 -1
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +147 -2
- package/dist/cli/utils/server-capabilities.d.ts +18 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
- package/dist/cli/utils/server-capabilities.js +36 -3
- package/dist/cli/utils/session-target.d.ts +1 -1
- package/dist/cli/utils/session-target.d.ts.map +1 -1
- package/dist/cli/utils/session-target.js +3 -0
- package/dist/cli/utils/verify-runner.d.ts +7 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +51 -15
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
- package/dist/lib/cli-tools/session-name.js +11 -3
- package/dist/lib/session/send-attempt-types.d.ts +48 -1
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +18 -1
- package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
- package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
- package/dist/lib/verification/session-kill-ledger.js +174 -0
- package/dist/server/locales/en/worktree.json +20 -3
- package/dist/server/locales/ja/worktree.json +20 -3
- package/dist/server/src/config/cli-tool-timing-config.js +1 -7
- package/dist/server/src/lib/auto-yes-poller.js +54 -11
- package/dist/server/src/lib/cli-tools/antigravity.js +45 -9
- package/dist/server/src/lib/cli-tools/base.js +39 -0
- package/dist/server/src/lib/cli-tools/codex.js +67 -15
- package/dist/server/src/lib/cli-tools/command-code-plan-review.js +24 -2
- package/dist/server/src/lib/cli-tools/command-code.js +7 -3
- package/dist/server/src/lib/cli-tools/copilot.js +125 -33
- package/dist/server/src/lib/cli-tools/gemini.js +37 -10
- package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
- package/dist/server/src/lib/cli-tools/opencode.js +60 -15
- package/dist/server/src/lib/cli-tools/session-name.js +11 -3
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +590 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +512 -620
- package/dist/server/src/lib/cli-tools/vibe-local.js +4 -2
- package/dist/server/src/lib/db/db-migration-path.js +63 -2
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/pre-migration-backup.js +266 -0
- package/dist/server/src/lib/db/migrations/runner.js +37 -4
- package/dist/server/src/lib/db/migrations/v62-session-relays-bind.js +102 -0
- package/dist/server/src/lib/db/relay-bind-db.js +437 -0
- package/dist/server/src/lib/db/relay-db.js +59 -96
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
- package/dist/server/src/lib/detection/upstream-faults.js +40 -6
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
- package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
- package/dist/server/src/lib/polling/response-checker.js +7 -5
- package/dist/server/src/lib/prompt-answer-errors.js +362 -0
- package/dist/server/src/lib/prompt-answer-sender.js +264 -288
- package/dist/server/src/lib/push/failure-episode-state.js +4 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +1 -4
- package/dist/server/src/lib/realtime-snippet.js +54 -0
- package/dist/server/src/lib/relay/relay-bind.js +294 -0
- package/dist/server/src/lib/relay/relay-boot.js +51 -0
- package/dist/server/src/lib/relay/relay-bound-reply.js +519 -0
- package/dist/server/src/lib/relay/relay-delivery.js +134 -220
- package/dist/server/src/lib/relay/relay-messages.js +39 -4
- package/dist/server/src/lib/relay/relay-overlap.js +92 -0
- package/dist/server/src/lib/relay/relay-system-line.js +3 -2
- package/dist/server/src/lib/relay/types.js +12 -1
- package/dist/server/src/lib/session/agent-event-state.js +4 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +23 -0
- package/dist/server/src/lib/session/claude-session.js +59 -8
- package/dist/server/src/lib/session/composer-clear.js +54 -1
- package/dist/server/src/lib/session/current-output-builder.js +26 -8
- package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
- package/dist/server/src/lib/session/instance-input-lock.js +664 -0
- package/dist/server/src/lib/session/prompt-submit-receipt.js +155 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +10 -3
- package/dist/server/src/lib/session/send-attempt-state.js +65 -0
- package/dist/server/src/lib/session/send-attempt-types.js +18 -1
- package/dist/server/src/lib/session/send-user-message.js +84 -14
- package/dist/server/src/lib/session/session-launch-flight.js +243 -0
- package/dist/server/src/lib/session/session-starting-state.js +40 -4
- package/dist/server/src/lib/session/structured-prompt.js +12 -9
- package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
- package/dist/server/src/lib/session-cleanup.js +32 -0
- package/dist/server/src/lib/session-key-sender.js +0 -27
- package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
- package/dist/server/src/lib/verification/env-snapshot.js +11 -2
- package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
- package/package.json +5 -1
- package/release-notes/0.49.1.json +66 -0
- package/release-notes/0.49.2.json +49 -0
- package/.next/server/chunks/1210.js +0 -1
- package/.next/server/chunks/1945.js +0 -14
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/4194.js +0 -67
- package/.next/server/chunks/5845.js +0 -1
- package/.next/server/chunks/720.js +0 -103
- package/.next/server/chunks/7604.js +0 -2
- package/.next/server/chunks/9540.js +0 -1
- package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
- package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
- package/.next/static/chunks/8606-cf6bdbff44a764cf.js +0 -1
- package/.next/static/chunks/9079-987939d231704218.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/layout-aa8e66164a4367af.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
- package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
- package/.next/static/chunks/app/sessions/page-cfd645305e25fd33.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-a8d7886703ffc7b4.js +0 -1
- package/.next/static/css/db8959555c3d9c96.css +0 -1
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → yGatWDsS532awSs51kXyd}/_buildManifest.js +0 -0
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → yGatWDsS532awSs51kXyd}/_ssgManifest.js +0 -0
|
@@ -66,6 +66,7 @@ const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
|
66
66
|
const types_1 = require("../../lib/cli-tools/types");
|
|
67
67
|
const env_snapshot_1 = require("./env-snapshot");
|
|
68
68
|
const verify_config_1 = require("./verify-config");
|
|
69
|
+
const session_kill_ledger_1 = require("./session-kill-ledger");
|
|
69
70
|
// =============================================================================
|
|
70
71
|
// Opt-in resolution
|
|
71
72
|
// =============================================================================
|
|
@@ -538,6 +539,71 @@ function readDeadDemoVitestEntries(baseline) {
|
|
|
538
539
|
return new Set();
|
|
539
540
|
return new Set(recorded.filter((name) => typeof name === 'string' && demoVitestPid(name) !== null));
|
|
540
541
|
}
|
|
542
|
+
// =============================================================================
|
|
543
|
+
// Sibling sessions stopped by someone else (Issue #3993)
|
|
544
|
+
// =============================================================================
|
|
545
|
+
/**
|
|
546
|
+
* Whether a CLI kill was asked for by someone known not to be this task's worker.
|
|
547
|
+
*
|
|
548
|
+
* Known means one of two facts the record carries:
|
|
549
|
+
* - the caller's cwd is a sibling directory of the task's worktree — the
|
|
550
|
+
* primary checkout the orchestrator runs from, or another worktree;
|
|
551
|
+
* - the caller ran inside the tmux session of another worktree.
|
|
552
|
+
* Either is enough unless the other says "this task": a cwd inside the task's
|
|
553
|
+
* worktree, or the task's own session (or one of its worktree's), is the worker
|
|
554
|
+
* whatever else was recorded. A cwd that is nowhere in particular (`/tmp`,
|
|
555
|
+
* `$HOME`, `/`) with no session says nothing and is the worker — the strict
|
|
556
|
+
* answer, because only a kill *not* the worker's excuses.
|
|
557
|
+
*
|
|
558
|
+
* Only `cli` lines name a caller. The route's `browser` (judged from
|
|
559
|
+
* `Sec-Fetch-Site` alone, which a UI-driving worker sends and a header can
|
|
560
|
+
* forge) and `http` lines and the server's `server` cleanup (run after a
|
|
561
|
+
* `commandmate sync` a worker can issue) never excuse.
|
|
562
|
+
*/
|
|
563
|
+
function isKillByAnotherWorker(record, context, taskSession) {
|
|
564
|
+
if (record.origin !== 'cli')
|
|
565
|
+
return false;
|
|
566
|
+
const sessionOwner = record.callerSession === null
|
|
567
|
+
? 'unattributed'
|
|
568
|
+
: taskSession && record.callerSession === taskSession
|
|
569
|
+
? 'self'
|
|
570
|
+
: attributeSessionName(record.callerSession, context.worktreeId);
|
|
571
|
+
const cwdOwner = attributeAnchor(record.callerCwd, context.worktreePath);
|
|
572
|
+
if (sessionOwner === 'self' || cwdOwner === 'self')
|
|
573
|
+
return false;
|
|
574
|
+
return sessionOwner === 'other' || cwdOwner === 'other';
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* The recorded kill that explains a vanished `other` session, or undefined.
|
|
578
|
+
*
|
|
579
|
+
* Why this is the third line removals are excused on — the design note for
|
|
580
|
+
* #3993, which keeps #1624's rule rather than loosening it:
|
|
581
|
+
*
|
|
582
|
+
* - #1624 is a worker killing a sibling's session. The two snapshots cannot
|
|
583
|
+
* say who removed a session, so every same-repository removal was counted —
|
|
584
|
+
* including the orchestrator's own cleanup (`instances <wt> kill`, the
|
|
585
|
+
* first step of removing a worktree), which failed every parallel
|
|
586
|
+
* verification on 2026-10-29.
|
|
587
|
+
* - The session-kill ledger records each kill with the tmux sessions it
|
|
588
|
+
* stopped and who asked. A removal is `external` only when a line inside
|
|
589
|
+
* the task window names exactly that session and {@link isKillByAnotherWorker}
|
|
590
|
+
* holds for it.
|
|
591
|
+
* - Matched by the exact session name, never by worktree id: a worktree-wide
|
|
592
|
+
* match let one cleanup line excuse a worker's unrecorded kill of another
|
|
593
|
+
* instance of the same worktree hours earlier, and an id prefix
|
|
594
|
+
* (`commandmate-skills` / `commandmate-skills-3944`) reached into another
|
|
595
|
+
* worktree.
|
|
596
|
+
* - Everything else stays a violation: a worker's own kill, a caller that is
|
|
597
|
+
* nowhere in particular, the UI's and the server's kills, and any kill that
|
|
598
|
+
* went around CommandMate (`tmux kill-session`), which records nothing.
|
|
599
|
+
*/
|
|
600
|
+
function findExternalKill(sessionName, kills, context, taskSession) {
|
|
601
|
+
return kills.find((record) => record.sessionNames.includes(sessionName) && isKillByAnotherWorker(record, context, taskSession));
|
|
602
|
+
}
|
|
603
|
+
/** A recorded kill of exactly this session that does not excuse it, for the report. */
|
|
604
|
+
function findRecordedKill(sessionName, kills) {
|
|
605
|
+
return kills.find((record) => record.sessionNames.includes(sessionName));
|
|
606
|
+
}
|
|
541
607
|
function toChange(entry, owner) {
|
|
542
608
|
return { key: entry.key, detail: entry.detail, owner };
|
|
543
609
|
}
|
|
@@ -556,6 +622,7 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
556
622
|
const deadDemoVitestEntries = readDeadDemoVitestEntries(baseline);
|
|
557
623
|
const ignoredHomeEntries = new Set(options.ignoreHomeEntries ?? []);
|
|
558
624
|
const resolvePidCwd = options.resolvePidCwd ?? exports.readLivePidCwd;
|
|
625
|
+
const sessionKills = (options.sessionKills ?? []).filter((record) => record.at >= baseline.capturedAt && record.at <= final.capturedAt);
|
|
559
626
|
const probes = env_snapshot_1.ENV_PROBE_IDS.map((probeId) => {
|
|
560
627
|
const before = baseline.probes[probeId];
|
|
561
628
|
const after = final.probes[probeId];
|
|
@@ -570,6 +637,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
570
637
|
removed: [],
|
|
571
638
|
removedByOtherServer: [],
|
|
572
639
|
removedByOtherRepository: [],
|
|
640
|
+
removedExternal: [],
|
|
641
|
+
removedKillNotExcused: [],
|
|
573
642
|
removedStaleDemoVitest: [],
|
|
574
643
|
ignoredByConfig: [],
|
|
575
644
|
ignoredBuiltIn: [],
|
|
@@ -586,6 +655,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
586
655
|
removed: [],
|
|
587
656
|
removedByOtherServer: [],
|
|
588
657
|
removedByOtherRepository: [],
|
|
658
|
+
removedExternal: [],
|
|
659
|
+
removedKillNotExcused: [],
|
|
589
660
|
removedStaleDemoVitest: [],
|
|
590
661
|
ignoredByConfig: [],
|
|
591
662
|
ignoredBuiltIn: [],
|
|
@@ -631,6 +702,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
631
702
|
const removed = [];
|
|
632
703
|
const removedByOtherServer = [];
|
|
633
704
|
const removedByOtherRepository = [];
|
|
705
|
+
const removedExternal = [];
|
|
706
|
+
const removedKillNotExcused = [];
|
|
634
707
|
const removedStaleDemoVitest = [];
|
|
635
708
|
for (const entry of before.entries) {
|
|
636
709
|
if (afterKeys.has(entry.key))
|
|
@@ -652,6 +725,18 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
652
725
|
otherRepositorySessions.has(entry.key)) {
|
|
653
726
|
removedByOtherRepository.push(change);
|
|
654
727
|
}
|
|
728
|
+
else if (probeId === 'tmux-sessions' && tmuxServerSurvived && change.owner === 'other') {
|
|
729
|
+
const killedBy = findExternalKill(entry.key, sessionKills, context, taskSession);
|
|
730
|
+
if (killedBy) {
|
|
731
|
+
removedExternal.push({ ...change, killedBy });
|
|
732
|
+
}
|
|
733
|
+
else {
|
|
734
|
+
removed.push(change);
|
|
735
|
+
const recorded = findRecordedKill(entry.key, sessionKills);
|
|
736
|
+
if (recorded)
|
|
737
|
+
removedKillNotExcused.push({ ...change, killedBy: recorded });
|
|
738
|
+
}
|
|
739
|
+
}
|
|
655
740
|
else if (probeId === 'home-entries' && deadDemoVitestEntries.has(entry.key)) {
|
|
656
741
|
removedStaleDemoVitest.push(change);
|
|
657
742
|
}
|
|
@@ -669,6 +754,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
669
754
|
removed,
|
|
670
755
|
removedByOtherServer,
|
|
671
756
|
removedByOtherRepository,
|
|
757
|
+
removedExternal,
|
|
758
|
+
removedKillNotExcused,
|
|
672
759
|
removedStaleDemoVitest,
|
|
673
760
|
ignoredByConfig,
|
|
674
761
|
ignoredBuiltIn,
|
|
@@ -736,6 +823,35 @@ function formatRemovedByOtherServer(changes) {
|
|
|
736
823
|
function formatRemovedByOtherRepository(changes) {
|
|
737
824
|
return changes.map((change) => ` · - ${change.key} (ignored: a worktree of another repository on this server, recorded at task start)`);
|
|
738
825
|
}
|
|
826
|
+
/** Sibling sessions stopped by someone else's recorded kill (#3993), one line each. */
|
|
827
|
+
function formatRemovedExternal(changes) {
|
|
828
|
+
return changes.map(({ key, killedBy }) => ` · - ${key} [external] (not counted: ${describeKill(killedBy)}, not this task)`);
|
|
829
|
+
}
|
|
830
|
+
/** `<api> for <worktree>[ instance <id>] at <ISO> from <caller>` of one recorded kill. */
|
|
831
|
+
function describeKill(killedBy) {
|
|
832
|
+
const target = killedBy.instanceId
|
|
833
|
+
? `${killedBy.worktreeId} instance ${killedBy.instanceId}`
|
|
834
|
+
: killedBy.worktreeId;
|
|
835
|
+
const caller = killedBy.origin === 'browser'
|
|
836
|
+
? 'the UI'
|
|
837
|
+
: killedBy.origin === 'server'
|
|
838
|
+
? 'the server'
|
|
839
|
+
: killedBy.origin === 'http'
|
|
840
|
+
? 'an HTTP request with no caller'
|
|
841
|
+
: killedBy.callerSession
|
|
842
|
+
? `${killedBy.callerCwd ?? 'an unknown cwd'} in ${killedBy.callerSession}`
|
|
843
|
+
: (killedBy.callerCwd ?? 'an unknown cwd');
|
|
844
|
+
return `${killedBy.api} for ${target} at ${new Date(killedBy.at).toISOString()} from ${caller}`;
|
|
845
|
+
}
|
|
846
|
+
/** Counted removals whose kill was recorded but does not excuse them (#3993), one line each. */
|
|
847
|
+
function formatRemovedKillNotExcused(changes) {
|
|
848
|
+
return changes.map(({ key, killedBy }) => {
|
|
849
|
+
const why = killedBy.origin === 'browser' || killedBy.origin === 'server'
|
|
850
|
+
? `a ${killedBy.origin} kill a worker can also cause`
|
|
851
|
+
: 'the caller is not known to be someone else';
|
|
852
|
+
return ` · ${key}: kill recorded but counted (${describeKill(killedBy)}; not excused: ${why})`;
|
|
853
|
+
});
|
|
854
|
+
}
|
|
739
855
|
/** Removals excused as leftover demo-vitest directories (#3043), one line each. */
|
|
740
856
|
function formatRemovedStaleDemoVitest(changes) {
|
|
741
857
|
return changes.map((change) => ` · - ${change.key} (ignored: its pid was already dead at task start — a leftover swept by the demo-video tests)`);
|
|
@@ -788,6 +904,7 @@ function formatEnvCleanReport(diff) {
|
|
|
788
904
|
lines.push(...formatTaskSessionChanges(probe.taskSessionAdded));
|
|
789
905
|
lines.push(...formatRemovedByOtherServer(probe.removedByOtherServer));
|
|
790
906
|
lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
|
|
907
|
+
lines.push(...formatRemovedExternal(probe.removedExternal));
|
|
791
908
|
lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
|
|
792
909
|
lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
|
|
793
910
|
lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
|
|
@@ -797,9 +914,11 @@ function formatEnvCleanReport(diff) {
|
|
|
797
914
|
lines.push(` ${probe.probeId} VIOLATED (${label}): +${probe.added.length} -${probe.removed.length}`);
|
|
798
915
|
lines.push(...formatChanges('+', probe.added));
|
|
799
916
|
lines.push(...formatChanges('-', probe.removed));
|
|
917
|
+
lines.push(...formatRemovedKillNotExcused(probe.removedKillNotExcused));
|
|
800
918
|
lines.push(...formatTaskSessionChanges(probe.taskSessionAdded));
|
|
801
919
|
lines.push(...formatRemovedByOtherServer(probe.removedByOtherServer));
|
|
802
920
|
lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
|
|
921
|
+
lines.push(...formatRemovedExternal(probe.removedExternal));
|
|
803
922
|
lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
|
|
804
923
|
lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
|
|
805
924
|
lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
|
|
@@ -862,9 +981,19 @@ async function evaluateEnvClean(input) {
|
|
|
862
981
|
return done('error', `${verify_config_1.ENV_CLEAN_GATE_ID}: UNKNOWN — the current snapshot could not be taken: ` +
|
|
863
982
|
`${error instanceof Error ? error.message : String(error)}`, null);
|
|
864
983
|
}
|
|
984
|
+
const readSessionKills = input.readSessionKills ?? ((since, until) => (0, session_kill_ledger_1.readSessionKillRecords)(since, until));
|
|
985
|
+
let sessionKills;
|
|
986
|
+
try {
|
|
987
|
+
sessionKills = readSessionKills(input.baseline.capturedAt, final.capturedAt);
|
|
988
|
+
}
|
|
989
|
+
catch {
|
|
990
|
+
// An unreadable ledger excuses nothing; it is not a reason to withhold a verdict.
|
|
991
|
+
sessionKills = [];
|
|
992
|
+
}
|
|
865
993
|
const diff = diffEnvSnapshots(input.baseline, final, input, {
|
|
866
994
|
ignoreHomeEntries: input.ignoreHomeEntries,
|
|
867
995
|
resolvePidCwd: input.resolvePidCwd,
|
|
996
|
+
sessionKills,
|
|
868
997
|
});
|
|
869
998
|
const header = `${verify_config_1.ENV_CLEAN_GATE_ID}: baseline=${new Date(input.baseline.capturedAt).toISOString()} ` +
|
|
870
999
|
`status=${diff.status} task-session=${describeTaskSession(diff.taskSession)}`;
|
|
@@ -40,6 +40,7 @@ const path_1 = require("path");
|
|
|
40
40
|
const env_1 = require("../../lib/env");
|
|
41
41
|
const logger_1 = require("../../lib/logger");
|
|
42
42
|
const machine_lock_1 = require("./machine-lock");
|
|
43
|
+
const session_kill_ledger_1 = require("./session-kill-ledger");
|
|
43
44
|
const worktree_index_1 = require("./worktree-index");
|
|
44
45
|
const logger = (0, logger_1.createLogger)('lib/verification/env-snapshot');
|
|
45
46
|
/** Bumped only when a stored snapshot stops being readable by this module. */
|
|
@@ -329,6 +330,8 @@ exports.MCBD_SESSION_PREFIX = 'mcbd-';
|
|
|
329
330
|
* is none of a delegation's business, so watching them would only manufacture
|
|
330
331
|
* violations. Sessions of *other* worktrees stay in the set on purpose — killing
|
|
331
332
|
* a sibling worker's session is the #1624 failure this probe is here to catch.
|
|
333
|
+
* A sibling session stopped by someone else through `instances <wt> kill` is set
|
|
334
|
+
* apart at diff time from the session-kill ledger (Issue #3993), not here.
|
|
332
335
|
*
|
|
333
336
|
* "No server running" is an answer (zero sessions), which is why it is not
|
|
334
337
|
* treated as a probe failure. `tmux` being absent, or hanging, is not.
|
|
@@ -370,14 +373,20 @@ exports.ENV_SNAPSHOT_DIR_NAME = 'env-snapshots';
|
|
|
370
373
|
* `~/.commandmate` (Issue #1771): the gate mutex locks and the worktree index
|
|
371
374
|
* registry. Neither is a side effect of the delegation — the first mutexed gate
|
|
372
375
|
* on a machine creates them — so counting them would report the runner's own
|
|
373
|
-
* bookkeeping as pollution the agent left behind.
|
|
376
|
+
* bookkeeping as pollution the agent left behind. The session-kill ledger
|
|
377
|
+
* (Issue #3993) is the same kind of bookkeeping: the first recorded
|
|
378
|
+
* `instances <wt> kill` on a machine creates it.
|
|
374
379
|
*
|
|
375
380
|
* Scoped to the `~/.commandmate` probe rather than added to
|
|
376
381
|
* {@link isIgnoredEntry}: a `~/locks` directory in `$HOME` is not ours, and
|
|
377
382
|
* blanket-ignoring the name would put a hole in the probe that exists to catch
|
|
378
383
|
* exactly that.
|
|
379
384
|
*/
|
|
380
|
-
const COMMANDMATE_RUNTIME_ENTRY_NAMES = [
|
|
385
|
+
const COMMANDMATE_RUNTIME_ENTRY_NAMES = [
|
|
386
|
+
machine_lock_1.MACHINE_LOCK_DIR_NAME,
|
|
387
|
+
worktree_index_1.WORKTREE_INDEX_DIR_NAME,
|
|
388
|
+
session_kill_ledger_1.SESSION_KILL_LEDGER_DIR_NAME,
|
|
389
|
+
];
|
|
381
390
|
function isIgnoredEntry(name) {
|
|
382
391
|
if (name === exports.ENV_SNAPSHOT_DIR_NAME)
|
|
383
392
|
return true;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Record of `mcbd-*` sessions stopped through CommandMate's kill (Issue #3993).
|
|
4
|
+
*
|
|
5
|
+
* The `env-clean` gate counts every vanished session of a sibling worktree as a
|
|
6
|
+
* violation, because a worker killing its neighbour is the #1624 failure. The
|
|
7
|
+
* orchestrator stops sibling sessions too — `commandmate instances <wt> kill`
|
|
8
|
+
* when it cleans a worktree up (worktree-cleanup Phase 3), the UI's kill
|
|
9
|
+
* button, the server's cleanup after sync or a repository removal — and the two
|
|
10
|
+
* snapshots cannot tell that apart from a worker's kill: on 2026-10-29 four
|
|
11
|
+
* verification runs of #3957 failed on `- mcbd-…-<another worktree> [other]`
|
|
12
|
+
* for a cleanup nobody in the worker's transcript had run.
|
|
13
|
+
*
|
|
14
|
+
* This ledger is the missing fact: one line per kill, naming the API, the
|
|
15
|
+
* tmux sessions it actually stopped, the worktree it was for and who asked
|
|
16
|
+
* (the caller's working directory and tmux session). The gate excuses as little
|
|
17
|
+
* as it can prove is not the worker's (`env-clean-gate.ts`, `findExternalKill`):
|
|
18
|
+
* a vanished sibling session is `external` only when a line inside the task's
|
|
19
|
+
* window names that exact session, was written by the CLI, and its caller is
|
|
20
|
+
* known to be someone else — a cwd in a sibling directory of the task's
|
|
21
|
+
* worktree (the primary checkout, another worktree) or a tmux session of
|
|
22
|
+
* another worktree. Everything else stays a violation, exactly as before:
|
|
23
|
+
* a worker's own kill, a caller that is nowhere in particular (`/tmp`, `$HOME`),
|
|
24
|
+
* the route's and the server's lines (a worker can reach the UI and trigger
|
|
25
|
+
* sync too), and any kill that bypassed CommandMate (`tmux kill-session`), which
|
|
26
|
+
* records nothing. Those lines are still shown next to the violation.
|
|
27
|
+
*
|
|
28
|
+
* Written by the CLI (with its caller), by the kill-session route and by
|
|
29
|
+
* `session-cleanup.ts`. A CLI kill is therefore recorded twice — the CLI's line
|
|
30
|
+
* and the route's `http` line — which changes no verdict: only the CLI's line
|
|
31
|
+
* can excuse anything.
|
|
32
|
+
*
|
|
33
|
+
* Machine-wide, like the gate mutex (`machine-lock.ts`): the CLI and the server
|
|
34
|
+
* write it and the server's gate reads it, so the path is derived from `$HOME` alone —
|
|
35
|
+
* `~/.commandmate/session-kills/<UTC date>.jsonl` — with an override for tests.
|
|
36
|
+
* The `commandmate-entries` probe ignores the directory, like `locks`.
|
|
37
|
+
*
|
|
38
|
+
* Node built-ins only: the CLI imports this module.
|
|
39
|
+
*
|
|
40
|
+
* @module lib/verification/session-kill-ledger
|
|
41
|
+
*/
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.SESSION_KILL_LEDGER_RETENTION_MS = exports.SESSION_KILL_LEDGER_VERSION = exports.SESSION_KILL_LEDGER_ROOT_ENV = exports.SESSION_KILL_LEDGER_DIR_NAME = void 0;
|
|
44
|
+
exports.defaultSessionKillLedgerRoot = defaultSessionKillLedgerRoot;
|
|
45
|
+
exports.resolveSessionKillLedgerRoot = resolveSessionKillLedgerRoot;
|
|
46
|
+
exports.appendSessionKillRecord = appendSessionKillRecord;
|
|
47
|
+
exports.isSessionKillRecord = isSessionKillRecord;
|
|
48
|
+
exports.readSessionKillRecords = readSessionKillRecords;
|
|
49
|
+
const fs_1 = require("fs");
|
|
50
|
+
const os_1 = require("os");
|
|
51
|
+
const path_1 = require("path");
|
|
52
|
+
/** Directory under `~/.commandmate`; exported for the `commandmate-entries` probe. */
|
|
53
|
+
exports.SESSION_KILL_LEDGER_DIR_NAME = 'session-kills';
|
|
54
|
+
/** Overrides the ledger directory (tests, isolated environments). */
|
|
55
|
+
exports.SESSION_KILL_LEDGER_ROOT_ENV = 'CM_SESSION_KILL_LEDGER_ROOT';
|
|
56
|
+
/** Bumped only when a line stops being readable by this module. */
|
|
57
|
+
exports.SESSION_KILL_LEDGER_VERSION = 1;
|
|
58
|
+
/** Day files older than this are removed when a new line is written (same as env snapshots). */
|
|
59
|
+
exports.SESSION_KILL_LEDGER_RETENTION_MS = 30 * 24 * 60 * 60 * 1000;
|
|
60
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
61
|
+
const DAY_FILE_PATTERN = /^(\d{4}-\d{2}-\d{2})\.jsonl$/;
|
|
62
|
+
const SESSION_KILL_APIS = ['kill-session', 'session-cleanup'];
|
|
63
|
+
const SESSION_KILL_ORIGINS = ['cli', 'browser', 'http', 'server'];
|
|
64
|
+
function defaultSessionKillLedgerRoot() {
|
|
65
|
+
return (0, path_1.join)((0, os_1.homedir)(), '.commandmate', exports.SESSION_KILL_LEDGER_DIR_NAME);
|
|
66
|
+
}
|
|
67
|
+
function resolveSessionKillLedgerRoot(env = process.env) {
|
|
68
|
+
const override = env[exports.SESSION_KILL_LEDGER_ROOT_ENV];
|
|
69
|
+
return override && override.trim() !== '' ? override : defaultSessionKillLedgerRoot();
|
|
70
|
+
}
|
|
71
|
+
function dayOf(epochMs) {
|
|
72
|
+
return new Date(epochMs).toISOString().slice(0, 10);
|
|
73
|
+
}
|
|
74
|
+
function pruneOldDays(root, now) {
|
|
75
|
+
const oldest = dayOf(now - exports.SESSION_KILL_LEDGER_RETENTION_MS);
|
|
76
|
+
let names;
|
|
77
|
+
try {
|
|
78
|
+
names = (0, fs_1.readdirSync)(root);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
for (const name of names) {
|
|
84
|
+
const day = DAY_FILE_PATTERN.exec(name)?.[1];
|
|
85
|
+
if (day === undefined || day >= oldest)
|
|
86
|
+
continue;
|
|
87
|
+
try {
|
|
88
|
+
(0, fs_1.rmSync)((0, path_1.join)(root, name), { force: true });
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// A day file that cannot be removed is disk use, not a reason to fail a kill.
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Append one kill. Never throws: the kill already happened, and failing the
|
|
97
|
+
* command over its bookkeeping would only hide that.
|
|
98
|
+
*
|
|
99
|
+
* @returns true when the line was written
|
|
100
|
+
*/
|
|
101
|
+
function appendSessionKillRecord(record, root = resolveSessionKillLedgerRoot()) {
|
|
102
|
+
try {
|
|
103
|
+
(0, fs_1.mkdirSync)(root, { recursive: true, mode: 0o700 });
|
|
104
|
+
// One short line per append; O_APPEND keeps concurrent writers' lines whole.
|
|
105
|
+
(0, fs_1.appendFileSync)((0, path_1.join)(root, `${dayOf(record.at)}.jsonl`), `${JSON.stringify(record)}\n`, {
|
|
106
|
+
encoding: 'utf8',
|
|
107
|
+
mode: 0o600,
|
|
108
|
+
});
|
|
109
|
+
pruneOldDays(root, record.at);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function isNullableString(value) {
|
|
117
|
+
return value === null || typeof value === 'string';
|
|
118
|
+
}
|
|
119
|
+
/** Whether a parsed line is a record this module can use; anything else is skipped. */
|
|
120
|
+
function isSessionKillRecord(value) {
|
|
121
|
+
if (typeof value !== 'object' || value === null)
|
|
122
|
+
return false;
|
|
123
|
+
const record = value;
|
|
124
|
+
return (record.version === exports.SESSION_KILL_LEDGER_VERSION &&
|
|
125
|
+
typeof record.at === 'number' &&
|
|
126
|
+
typeof record.api === 'string' &&
|
|
127
|
+
SESSION_KILL_APIS.includes(record.api) &&
|
|
128
|
+
typeof record.origin === 'string' &&
|
|
129
|
+
SESSION_KILL_ORIGINS.includes(record.origin) &&
|
|
130
|
+
typeof record.worktreeId === 'string' &&
|
|
131
|
+
record.worktreeId !== '' &&
|
|
132
|
+
isNullableString(record.instanceId) &&
|
|
133
|
+
Array.isArray(record.sessionNames) &&
|
|
134
|
+
record.sessionNames.every((name) => typeof name === 'string') &&
|
|
135
|
+
isNullableString(record.callerCwd) &&
|
|
136
|
+
isNullableString(record.callerSession));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The kills recorded in `[since, until]` (epoch ms, inclusive).
|
|
140
|
+
*
|
|
141
|
+
* A missing directory, an unreadable day file and a malformed line all read as
|
|
142
|
+
* "no record", which only ever excuses less.
|
|
143
|
+
*/
|
|
144
|
+
function readSessionKillRecords(since, until, root = resolveSessionKillLedgerRoot()) {
|
|
145
|
+
if (!(since <= until))
|
|
146
|
+
return [];
|
|
147
|
+
// Nothing older than the retention survives, so a stale baseline costs no extra reads.
|
|
148
|
+
since = Math.max(since, until - exports.SESSION_KILL_LEDGER_RETENTION_MS - DAY_MS);
|
|
149
|
+
const records = [];
|
|
150
|
+
for (let day = Date.parse(`${dayOf(since)}T00:00:00.000Z`); day <= until; day += DAY_MS) {
|
|
151
|
+
let text;
|
|
152
|
+
try {
|
|
153
|
+
text = (0, fs_1.readFileSync)((0, path_1.join)(root, `${dayOf(day)}.jsonl`), 'utf8');
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
for (const line of text.split('\n')) {
|
|
159
|
+
if (line.trim() === '')
|
|
160
|
+
continue;
|
|
161
|
+
let parsed;
|
|
162
|
+
try {
|
|
163
|
+
parsed = JSON.parse(line);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (isSessionKillRecord(parsed) && parsed.at >= since && parsed.at <= until) {
|
|
169
|
+
records.push(parsed);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return records;
|
|
174
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "commandmate",
|
|
3
|
-
"version": "0.49.
|
|
3
|
+
"version": "0.49.2",
|
|
4
4
|
"description": "No long blocks of time? Run an AI team from your phone. Git worktree sessions, task contracts and verification gates for Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity and Command Code.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -113,8 +113,10 @@
|
|
|
113
113
|
"rehype-sanitize": "^6.0.0",
|
|
114
114
|
"rehype-slug": "^6.0.0",
|
|
115
115
|
"remark-gfm": "^4.0.1",
|
|
116
|
+
"remark-parse": "^11.0.0",
|
|
116
117
|
"safe-regex2": "^5.0.0",
|
|
117
118
|
"tailwind-merge": "^3.6.0",
|
|
119
|
+
"unified": "^11.0.5",
|
|
118
120
|
"uuid": "^13.0.0",
|
|
119
121
|
"web-push": "^3.6.7",
|
|
120
122
|
"ws": "^8.18.3",
|
|
@@ -131,7 +133,9 @@
|
|
|
131
133
|
"@testing-library/react": "^16.3.2",
|
|
132
134
|
"@types/better-sqlite3": "^7.6.13",
|
|
133
135
|
"@types/eslint": "^8.56.12",
|
|
136
|
+
"@types/hast": "^3.0.4",
|
|
134
137
|
"@types/http-proxy": "^1.17.17",
|
|
138
|
+
"@types/mdast": "^4.0.4",
|
|
135
139
|
"@types/node": "20.19.35",
|
|
136
140
|
"@types/react": "^19.2.17",
|
|
137
141
|
"@types/react-dom": "^19.2.3",
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.49.1",
|
|
3
|
+
"date": "2026-10-30",
|
|
4
|
+
"highlight": {
|
|
5
|
+
"ja": "同じエージェントへの送信を 1 本ずつに調停し、別の依頼の返答が届く取り違えを防ぐようにしました。Command Code の計画レビューもスマホやターミナル表示から承認できます。",
|
|
6
|
+
"en": "Messages to the same agent are now sent one at a time, so a reply meant for another request is no longer delivered by mistake. Command Code plan reviews can now be approved from the phone and terminal views."
|
|
7
|
+
},
|
|
8
|
+
"added": [
|
|
9
|
+
{
|
|
10
|
+
"ja": "サイドバーの「Needs attention」やブランチ行から開くと、応答を待っているエージェントが選ばれた状態で開くようになりました。",
|
|
11
|
+
"en": "Opening a worktree from Needs attention or a branch row in the sidebar now selects the agent that is waiting for you."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"ja": "データベースの更新が必要なときは、更新の前にデータベースの複製を自動で保存するようになりました。",
|
|
15
|
+
"en": "Before the database is upgraded, a copy of it is now saved automatically."
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"improved": [
|
|
19
|
+
{
|
|
20
|
+
"ja": "Claude の /restart をスラッシュコマンドの一覧に追加しました。",
|
|
21
|
+
"en": "Added Claude's /restart to the slash command list."
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"fixed": [
|
|
25
|
+
{
|
|
26
|
+
"ja": "Command Code の計画レビューで、承認・取り消し・コメントのボタンが画面外に隠れて押せない問題を直しました。",
|
|
27
|
+
"en": "Fixed the approve, cancel and comment buttons of a Command Code plan review being cut off and unreachable."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"ja": "Command Code のターミナル表示が真っ黒に見えることがある問題を直しました。",
|
|
31
|
+
"en": "Fixed the Command Code terminal view sometimes appearing completely blank."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"ja": "同じエージェントへ続けて送った依頼で、別の依頼の返答が届くことがある問題を直しました。",
|
|
35
|
+
"en": "Fixed a reply to a different request sometimes being delivered when several requests were sent to the same agent."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"ja": "同じエージェントへの送信が重なったとき、入力欄に文字が残ったり混ざったりする問題を直しました。",
|
|
39
|
+
"en": "Fixed leftover or mixed-up text in the input box when several messages to the same agent overlapped."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"ja": "返信を待つ送信(--reply-to など)に失敗したとき、もう一度送ってよいか、先に画面を確かめるべきかを CLI が案内するようになりました。",
|
|
43
|
+
"en": "When a send that waits for a reply (such as --reply-to) fails, the CLI now tells you whether it is safe to send again or whether to check the screen first."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"ja": "wait が指定した時間を過ぎても終わらないことがある問題を直しました。",
|
|
47
|
+
"en": "Fixed wait sometimes running past its timeout."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"ja": "前の作業の完了を、今回の送信の完了と取り違えることがある問題を直しました。",
|
|
51
|
+
"en": "Fixed the end of an earlier turn sometimes being mistaken for the end of the current one."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"ja": "返答の中で引用したエラーの文字を、本物の障害と誤って判定する問題を直しました。",
|
|
55
|
+
"en": "Fixed quoted error text in a reply being mistaken for a real upstream error."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"ja": "入力欄のクリアに失敗したとき、その理由が画面に表示されるようになりました。",
|
|
59
|
+
"en": "When clearing the input box fails, the reason is now shown on screen."
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"ja": "respond で、回答が届かなかったのか途中で止まったのかを分けて表示するようになりました。",
|
|
63
|
+
"en": "respond now tells apart an answer that never arrived from one that stopped partway."
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.49.2",
|
|
3
|
+
"date": "2026-10-31",
|
|
4
|
+
"highlight": {
|
|
5
|
+
"ja": "起動したばかりの Claude への最初のメッセージが、届いていないのに「送信済み」と表示される問題を直しました。送信や回答が失敗したときも、キーが届いたか・送り直してよいかを正しく伝えるようにしました。",
|
|
6
|
+
"en": "Fixed the first message to a just-started Claude being reported as sent when it never arrived. When a send or an answer fails, you are now told whether the keys reached the agent and whether it is safe to send again."
|
|
7
|
+
},
|
|
8
|
+
"added": [],
|
|
9
|
+
"improved": [
|
|
10
|
+
{
|
|
11
|
+
"ja": "Review の承認一覧やリポジトリの帯・パンくずから開いたときも、応答を待っているエージェントが選ばれた状態で開くようになりました。",
|
|
12
|
+
"en": "Opening a worktree from the Review approval list, the repository strip or the breadcrumb now also selects the agent that is waiting for you."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"ja": "CLI の wait・ask・verify の --timeout が、サーバーが応答しないときも含めてコマンド全体の期限として効くようになりました。",
|
|
16
|
+
"en": "The --timeout of wait, ask and verify in the CLI now limits the whole command, including when the server does not respond."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"ja": "CLI の respond などが出す次の操作の案内に、対象のエージェントの指定が含まれるようになりました。",
|
|
20
|
+
"en": "The follow-up hints printed by respond and other CLI commands now include the agent they refer to."
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"fixed": [
|
|
24
|
+
{
|
|
25
|
+
"ja": "起動したばかりの Claude への最初のメッセージが届かず、次の送信が失敗することがある問題を直しました。",
|
|
26
|
+
"en": "Fixed the first message to a just-started Claude sometimes not arriving and making the next send fail."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"ja": "同じエージェントを同時に起動しようとしたとき、起動が重なって入力が混ざることがある問題を直しました。",
|
|
30
|
+
"en": "Fixed overlapping launches of the same agent sometimes mixing up typed input."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"ja": "回答の途中で止まったとき、一部のキーが届いた可能性があることを知らせるようにしました(スマホと PC の両方)。",
|
|
34
|
+
"en": "When an answer stops partway, you are now told that some keys may have reached the agent, on both phone and desktop."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"ja": "スマホで開き直すと、選んでいたエージェントが先頭のエージェントに戻ってしまう問題を直しました。",
|
|
38
|
+
"en": "Fixed the selected agent switching back to the first one when a worktree was reopened on the phone."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"ja": "送信が失敗したとき、送り直してよいかが CLI に伝わらないことがある問題を直しました。",
|
|
42
|
+
"en": "Fixed the CLI sometimes not being told whether a failed send is safe to retry."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"ja": "古い場所のデータベースを移すとき、書き込み途中の更新が失われることがある問題を直しました。",
|
|
46
|
+
"en": "Fixed recent changes sometimes being lost when a database was moved from its old location."
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=1210,exports.ids=[1210],exports.modules={71210:(a,b,c)=>{c.d(b,{notifyRelayPromptWaiting:()=>L,notifyRelayTurnCompleted:()=>K,runRelayMaintenanceTick:()=>O});var d=c(88807),e=c(64049),f=c(52660),g=c(81254),h=c(55233),i=c(39687),j=c(640),k=c(23854),l=c(8360),m=c(40964),n=c(34331),o=c(31990),p=c(95595),q=c(64501),r=c(34405),s=c(72626);let t=(0,s.h)("relay-readiness");async function u(a,b,c,d){try{let e=(0,m.mf)(b,a,c),f=await (0,n.L)(a,e,d);if(null===f||"foreign"===f.verdict)return"foreign_session";if("absent"===f.verdict)return"session_stopped";let g=l.CLIToolManager.getInstance().getTool(b);if(!await g.isRunning(a,c))return"session_stopped";let h=await (0,o.Wh)(a,b,r._,c);if((0,q.NV)(a,b,c,h))return"generating";let i=(0,p.WC)(h,b);return"running"===i.status?"generating":null}catch(d){return t.warn("relay-readiness-check-failed",{worktreeId:a,cliToolId:b,instanceId:c,error:d instanceof Error?d.message:String(d)}),null}}var v=c(49798),w=c(67164),x=c(85016),y=c(25539),z=c(36925);let A=(0,s.h)("relay-delivery"),B=/-turn:/,C=[f.RELAY_SYSTEM_REQUEST_ID_PREFIX,f.MODEL_CHANGE_REQUEST_ID_PREFIX],D={claude:!0,codex:!0,antigravity:!0,"command-code":!0,opencode:!0,copilot:!1,gemini:!1,"vibe-local":!1,"opencode-v2":!0},E=(0,z.v)("__relayDeliveryInFlight",()=>new Set);function F(a,b){let c=(0,v.S)(a,b.to);return{alias:c.alias,worktreeId:c.worktreeId}}function G(a,b,c){let d=(0,f.getMessages)(a,b.worktreeId,{limit:40,cliToolId:b.cliToolId,instanceId:b.instanceId,matchResolvedInstance:!0}),e=!0===D[b.cliToolId];for(let a of d){var g;if(!("assistant"!==a.role||"prompt"===a.messageType||function(a){return"string"==typeof a&&C.some(b=>a.startsWith(b))}(a.requestId))){if((!e||"string"==typeof(g=a.requestId)&&B.test(g))&&""!==a.content.trim())return a.timestamp.getTime()<c?null:a}}return null}function H(a,b,c){let d=(0,e.ix)(a,{worktreeId:b.worktreeId,instanceId:b.instanceId});if(0===d.length)return 0;let f=0;for(let g of d){let d=G(a,b,g.createdAt);if(!d)continue;let h=(0,j.z0)(F(a,g),d.content);(0,e.be)(a,g.id,"reply",h,c)&&(f+=1)}return f}function I(a){return new Promise(b=>{setTimeout(b,a)})}async function J(a,b){let c=Date.now()+15e3;for(;;){if(H(a,b,Date.now())>0)return void N();if(Date.now()>=c)break;await I(1e3)}A.info("relay-scrape-row-not-transcript-backed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId,graceMs:15e3})}async function K(a,b){try{var c;let f=(0,d.getDbInstance)(),g=(0,e.ix)(f,{worktreeId:a.worktreeId,instanceId:a.instanceId});if(0===g.length)return;if(b.settled){H(f,a,Date.now())>0&&N();return}if(c=a.cliToolId,!0===D[c])return void await J(f,a);let h=null;for(let b=0;b<3;b+=1){let b=G(f,a,0);h=b?.id??null,await I(k.DZ);let c=G(f,a,0);if((c?.id??null)===h){H(f,a,Date.now())>0&&N();return}}A.info("relay-scrape-never-settled",{worktreeId:a.worktreeId,instanceId:a.instanceId,attempts:3})}catch(b){A.warn("relay-turn-completed-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}}function L(a){try{let b=(0,d.getDbInstance)(),c=(0,e.ix)(b,{worktreeId:a.worktreeId,instanceId:a.instanceId});if(0===c.length)return;let i=(0,f.getLatestOpenPromptMessage)(b,a.worktreeId,a.cliToolId,a.instanceId);if(!i)return;let k=(0,h.dV)(b),l=function(a){let b=a.promptData;return(0,g.XF)(b)?"yes_no"===b.type?b.options.map(a=>({key:a,label:a})):b.options.map(a=>({key:String(a.number),label:a.label})):[]}(i),m=(0,g.XF)(i.promptData)?i.promptData.question:i.promptData?.question??i.content,n=0;for(let a of c){if((0,e.GC)(b,a.id)===i.id)continue;let c=(0,j.Hr)(k,F(b,a),{question:m,options:l});(0,e.be)(b,a.id,"prompt",c)&&((0,e.UC)(b,a.id,i.id),n+=1)}n>0&&N()}catch(b){A.warn("relay-prompt-notify-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}}async function M(a,b,c,d){var g,h;let j=(0,e.Ip)(a,b);if(!j)return"skipped";let k=(0,v.S)(a,j.from),l=await u(k.worktreeId,k.cliToolId,k.instanceId,a);if(l)return A.debug("relay-delivery-held",{relayId:b,kind:c,reason:l}),"held";let m=(g=a,h=b,(0,e.uG)(g).find(a=>a.relay.id===h)??null);if(!m||m.kind!==c||m.body!==d)return A.info("relay-delivery-superseded",{relayId:b,kind:c}),"skipped";if("expired"!==c&&!(0,y.Lo)(m.relay.state))return A.info("relay-delivery-closed",{relayId:b,kind:c,state:m.relay.state}),"skipped";let n=m.relay,o=(0,v.S)(a,n.from);(0,x.o5)(b);try{let g=await (0,i.d)(a,{worktreeId:o.worktreeId,content:d,cliToolId:o.cliToolId,instanceId:o.instanceId,messageType:"relay",requestId:"reply"===c?(0,f.relayRequestId)(n.id):void 0});if(!g.ok)return A.info("relay-delivery-refused",{relayId:b,kind:c,stage:g.stage}),"prompt_waiting"===g.stage?"held":"failed";let h=Date.now();return"reply"===c?((0,e.Bf)(a,n.id,(0,f.relayRequestId)(n.id),h)||A.info("relay-already-closed-on-deliver",{relayId:b}),(0,w._)(a,n.id,"replied",o,(0,v.S)(a,n.to),h)):"prompt"===c&&(0,w._)(a,n.id,"waiting",o,(0,v.S)(a,n.to),h),(0,e.uJ)(a,n.id,h),A.info("relay-delivered",{relayId:b,kind:c,to:`${o.worktreeId}/${o.instanceId}`}),"delivered"}finally{(0,x.dJ)(b)}}async function N(){if(!globalThis.__relayPumpRunning){globalThis.__relayPumpRunning=!0;try{let a=(0,d.getDbInstance)();for(let b of(0,e.uG)(a))if(!E.has(b.relay.id)){E.add(b.relay.id);try{await M(a,b.relay.id,b.kind,b.body)}catch(a){A.warn("relay-delivery-failed",{relayId:b.relay.id,error:a instanceof Error?a.message:String(a)})}finally{E.delete(b.relay.id)}}}catch(a){A.warn("relay-pump-failed",{error:a instanceof Error?a.message:String(a)})}finally{globalThis.__relayPumpRunning=!1}}}async function O(){try{!function(a,b=Date.now()){for(let c of(0,e.s7)(a,b))if(!(0,x.p5)(c.id))try{let d=(0,h.dV)(a);(0,e.uJ)(a,c.id,b);let f=(0,j.KA)(d,F(a,c),c.expiresAt-c.createdAt),g=(0,e.be)(a,c.id,"expired",f,b);if(!(0,e.Cz)(a,c.id,b)){g&&(0,e.uJ)(a,c.id,b);continue}(0,w._)(a,c.id,"expired",(0,v.S)(a,c.from),(0,v.S)(a,c.to),b)}catch(a){A.warn("relay-expire-failed",{relayId:c.id,error:a instanceof Error?a.message:String(a)})}}((0,d.getDbInstance)())}catch(a){A.warn("relay-sweep-failed",{error:a instanceof Error?a.message:String(a)})}await N()}}};
|