commandmate 0.44.2 → 0.44.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +149 -149
- package/.next/app-path-routes-manifest.json +21 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +0 -6
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +2 -2
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +2 -2
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +2 -2
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +21 -21
- package/.next/server/chunks/1191.js +2 -2
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1559.js +2 -0
- package/.next/server/chunks/1789.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -1
- package/.next/server/chunks/2980.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3718.js +1 -1
- package/.next/server/chunks/4207.js +2 -2
- package/.next/server/chunks/450.js +1 -1
- package/.next/server/chunks/4672.js +5 -0
- package/.next/server/chunks/{9353.js → 4718.js} +2 -2
- package/.next/server/chunks/4837.js +14 -0
- package/.next/server/chunks/5048.js +1 -1
- package/.next/server/chunks/5209.js +1 -0
- package/.next/server/chunks/5595.js +1 -1
- package/.next/server/chunks/5625.js +25 -0
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +3 -3
- package/.next/server/chunks/7491.js +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/850.js +1 -1
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +1 -1
- package/.next/server/chunks/8918.js +7 -7
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +6 -6
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
- package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-06d35bb1aa02de80.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
- package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
- package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-0d1750b833f5cc3e.js} +1 -1
- package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/static/css/057f64a65726c439.css +1 -0
- package/.next/trace +13 -13
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +120 -119
- package/dist/cli/commands/attach.d.ts +94 -0
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +145 -7
- package/dist/cli/commands/auto-yes.js +1 -1
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +3 -5
- package/dist/cli/commands/command-target.d.ts +23 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -0
- package/dist/cli/commands/command-target.js +25 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +41 -2
- package/dist/cli/commands/message-dispatch.d.ts +36 -0
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
- package/dist/cli/commands/message-dispatch.js +63 -0
- package/dist/cli/commands/reply.d.ts.map +1 -1
- package/dist/cli/commands/reply.js +2 -5
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +3 -6
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +149 -146
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +589 -431
- package/dist/cli/types/api-responses.d.ts +159 -27
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/api-responses.js +4 -2
- package/dist/cli/utils/api-client.d.ts +25 -5
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +87 -55
- package/dist/cli/utils/server-url.d.ts +1 -0
- package/dist/cli/utils/server-url.d.ts.map +1 -1
- package/dist/cli/utils/server-url.js +7 -0
- package/dist/config/uat-isolation.d.ts +140 -0
- package/dist/config/uat-isolation.d.ts.map +1 -0
- package/dist/config/uat-isolation.js +246 -0
- package/dist/lib/global-state.d.ts +12 -0
- package/dist/lib/global-state.d.ts.map +1 -0
- package/dist/lib/global-state.js +16 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
- package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/lib/session/prompt-view.d.ts +26 -3
- package/dist/lib/session/prompt-view.d.ts.map +1 -1
- package/dist/lib/session/prompt-view.js +26 -3
- package/dist/lib/session/status-evidence-type.d.ts +16 -0
- package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
- package/dist/lib/session/status-evidence-type.js +2 -0
- package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
- package/dist/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/locales/en/worktree.json +3 -1
- package/dist/server/locales/ja/worktree.json +3 -1
- package/dist/server/src/cli/types/api-responses.js +4 -2
- package/dist/server/src/config/cli-tool-timing-config.js +1 -6
- package/dist/server/src/config/uat-isolation.js +246 -0
- package/dist/server/src/lib/assistant-response-saver.js +62 -3
- package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
- package/dist/server/src/lib/auto-yes-poller.js +450 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
- package/dist/server/src/lib/cli-tools/base.js +151 -0
- package/dist/server/src/lib/cli-tools/codex.js +44 -80
- package/dist/server/src/lib/cli-tools/command-code.js +24 -56
- package/dist/server/src/lib/cli-tools/copilot.js +25 -67
- package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
- package/dist/server/src/lib/cli-tools/gemini.js +23 -73
- package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
- package/dist/server/src/lib/cli-tools/opencode.js +21 -85
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
- package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
- package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
- package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
- package/dist/server/src/lib/detection/prompt-detector.js +2 -35
- package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
- package/dist/server/src/lib/detection/selection-shape.js +32 -520
- package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
- package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
- package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
- package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
- package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
- package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
- package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
- package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
- package/dist/server/src/lib/detection/tools/context-above.js +20 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
- package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
- package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
- package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
- package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
- package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
- package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
- package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
- package/dist/server/src/lib/global-state.js +16 -0
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
- package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
- package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
- package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
- package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
- package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
- package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
- package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
- package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
- package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
- package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
- package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
- package/dist/server/src/lib/hooks/sources/registry.js +3 -2
- package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
- package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
- package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
- package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
- package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
- package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
- package/dist/server/src/lib/polling/response-checker.js +641 -1142
- package/dist/server/src/lib/polling/response-dedup.js +3 -4
- package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
- package/dist/server/src/lib/polling/response-poller-core.js +54 -20
- package/dist/server/src/lib/polling/startup-screen.js +142 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
- package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
- package/dist/server/src/lib/prompt-answer-sender.js +5 -4
- package/dist/server/src/lib/push/failure-episode-state.js +2 -2
- package/dist/server/src/lib/push/notification-dedup.js +3 -4
- package/dist/server/src/lib/push/prompt-card-state.js +2 -2
- package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
- package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
- package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +3 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- package/dist/server/src/lib/response-cleaner.js +24 -1
- package/dist/server/src/lib/response-extractor.js +16 -0
- package/dist/server/src/lib/schedule-manager.js +8 -10
- package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
- package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
- package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
- package/dist/server/src/lib/session/agent-event-model.js +562 -0
- package/dist/server/src/lib/session/agent-event-record.js +10 -0
- package/dist/server/src/lib/session/agent-event-state.js +106 -1854
- package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
- package/dist/server/src/lib/session/agent-event-turn.js +811 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
- package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
- package/dist/server/src/lib/session/claude-executor.js +45 -5
- package/dist/server/src/lib/session/claude-session.js +21 -65
- package/dist/server/src/lib/session/cli-session.js +17 -0
- package/dist/server/src/lib/session/current-output-builder.js +450 -1103
- package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
- package/dist/server/src/lib/session/current-output-types.js +9 -0
- package/dist/server/src/lib/session/detection-divergence.js +55 -0
- package/dist/server/src/lib/session/global-session-constants.js +2 -13
- package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
- package/dist/server/src/lib/session/layer-disagreement.js +2 -2
- package/dist/server/src/lib/session/opencode-session-store.js +2 -1
- package/dist/server/src/lib/session/prompt-view.js +26 -3
- package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
- package/dist/server/src/lib/session/provisional-turn.js +3 -1
- package/dist/server/src/lib/session/send-user-message.js +1 -1
- package/dist/server/src/lib/session/session-starting-state.js +4 -6
- package/dist/server/src/lib/session/status-evidence-type.js +2 -0
- package/dist/server/src/lib/session/status-evidence.js +2 -2
- package/dist/server/src/lib/session/structured-status-merge.js +335 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
- package/dist/server/src/lib/session-cleanup.js +1 -5
- package/dist/server/src/lib/skills/install-plan.js +2 -1
- package/dist/server/src/lib/skills/snapshot-store.js +2 -2
- package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
- package/dist/server/src/lib/timer-manager.js +6 -8
- package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
- package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/src/lib/tmux/session-hooks.js +2 -1
- package/dist/server/src/lib/tmux/session-status-options.js +3 -3
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
- package/dist/server/src/lib/tmux/tmux.js +33 -59
- package/dist/server/src/lib/tui-accumulator.js +2 -2
- package/dist/server/src/lib/version-checker.js +6 -6
- package/dist/server/src/lib/ws-server.js +47 -11
- package/docs/en/user-guide/webapp-guide.md +27 -3
- package/package.json +1 -1
- package/release-notes/0.44.3.json +82 -0
- package/scripts/hooks/cmate-agent-event.sh +18 -0
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/4372.js +0 -5
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9798.js +0 -2
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
- package/.next/static/css/38070d879efa1371.css +0 -1
- package/dist/server/src/lib/cli-tools/index.js +0 -41
- package/dist/server/src/lib/polling/global-session-poller.js +0 -140
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
exports.id=6401,exports.ids=[6401],exports.modules={3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},26838:(a,b,c)=>{"use strict";c.d(b,{E2:()=>
|
|
1
|
+
exports.id=6401,exports.ids=[6401],exports.modules={3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},26838:(a,b,c)=>{"use strict";c.d(b,{E2:()=>q,MQ:()=>m,Mj:()=>o,Sw:()=>n,lX:()=>r});var d=c(29021),e=c(33873),f=c(54325),g=c(90164),h=c(36925);let i=/^v?\d+\.\d+\.\d+$/,j=/^[a-zA-Z0-9.\-\s_v]+$/,k=[".next","required-server-files.json"],l=(0,h.v)("__versionCheckCache",()=>({result:null,fetchedAt:0,rateLimitResetAt:null}));function m(a,b){if(!i.test(a)||!i.test(b))return!1;let c=a=>a.replace(/^v/,"").split(".").map(Number),[d,e,f]=c(a),[g,h,j]=c(b);return g!==d?g>d:h!==e?h>e:j>f}function n(){return function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),"package.json"),"utf-8"),b=JSON.parse(a);if("commandmate"===b.name&&"string"==typeof b.version&&b.version.length>0)return b.version;return null}catch{return null}}()??"0.44.3"}function o(){return n()}let p=null;function q(a){let b=p??=function(){{let a=function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),...k),"utf-8"),b=JSON.parse(a),c=b.config?.env?.NEXT_PUBLIC_APP_VERSION;if("string"==typeof c&&c.length>0)return c;return null}catch{return null}}();if(a)return a}return"0.44.3"}();return(0,f.LE)(b,a)?{serverVersion:b,clientVersion:a}:null}async function r(){try{var a,b,c;if(null!==l.result&&Date.now()-l.fetchedAt<36e5||l.rateLimitResetAt&&(!(Date.now()>=l.rateLimitResetAt)||(l.rateLimitResetAt=null,0)))return l.result;let d=await fetch("https://api.github.com/repos/Kewton/CommandMate/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":`CommandMate/${o()}`},cache:"no-store",signal:AbortSignal.timeout(5e3)});if(403===d.status)return function(a){let b=a.headers.get("X-RateLimit-Reset");b?l.rateLimitResetAt=1e3*parseInt(b,10):l.rateLimitResetAt=Date.now()+36e5}(d),l.result;if(!d.ok)return l.result;let e=await d.json(),f=o(),h=e.tag_name.replace(/^v/,""),i={hasUpdate:m(f,e.tag_name),currentVersion:f,latestVersion:h,releaseUrl:(a=e.html_url).startsWith(g.Dk)?a:null,releaseName:(b=e.name,c=e.tag_name,j.test(b)&&b.length<=128?b:c),publishedAt:e.published_at};return l.result=i,l.fetchedAt=Date.now(),i}catch{return l.result}}},36925:(a,b,c)=>{"use strict";function d(a,b){return globalThis[a]??=b()}c.d(b,{v:()=>d})},48870:(a,b,c)=>{"use strict";c.d(b,{GQ:()=>j,TJ:()=>g,Tf:()=>h,WI:()=>i});var d=c(29021),e=c(33873),f=c(21820);function g(){let a=(0,e.dirname)(__dirname);return a.includes("/lib/node_modules/")||a.includes("\\node_modules\\")||a.includes("/node_modules/commandmate")}function h(){let a=(0,e.dirname)(__dirname);return a.includes("/_npx/")||a.includes("\\_npx\\")}function i(){if(g()){let a=(0,e.join)((0,f.homedir)(),".commandmate");if((0,d.existsSync)(a)){let b=(0,d.realpathSync)(a),c=(0,d.realpathSync)((0,f.homedir)());if(!b.startsWith(c))throw Error(`Security error: Config directory ${a} is outside home directory`);return b}return a}let a=process.cwd();return(0,d.realpathSync)(a)}function j(){let a=g()?(0,e.join)((0,f.homedir)(),".commandmate"):process.cwd();return(0,d.existsSync)(a)||(0,d.mkdirSync)(a,{recursive:!0,mode:448}),i()}},53515:(a,b,c)=>{"use strict";c.d(b,{n8:()=>n,KC:()=>m});var d=c(79646);function e(a){return"string"==typeof a?a.trim():""}c(29021),c(33873);var f=c(26838);let g=/^\d+\.\d+\.\d+$/,h=/^v?\d+\.\d+\.\d+$/,i=globalThis,j=i.__npmPublishCheckCache??(i.__npmPublishCheckCache={targetVersion:null,npmVersion:null,checkedAt:0,inFlight:null});async function k(){let a=await new Promise(a=>{(0,d.execFile)("npm",["view","commandmate","version"],{encoding:"utf-8",timeout:1e4},(b,c,d)=>{if(b)return"ENOENT"===b.code?void a({success:!1,error:"npm command not found. Install Node.js/npm and try again."}):void a({success:!1,error:e(d)||b.message});let f=e(c);if(!f)return void a({success:!1,error:"npm view returned no version"});a({success:!0,version:f})})});return a.success&&a.version&&g.test(a.version)?a.version:null}async function l(a,b,c){var d,e,g,h;if(j.targetVersion===a){if(null!==j.npmVersion&&(d=j.npmVersion,!(0,f.MQ)(d,a))||c()-j.checkedAt<3e5)return j.npmVersion}j.inFlight||(j.inFlight=(async()=>{try{return await b()}catch{return null}})());let i=j.inFlight,k=await i;return j.inFlight===i&&(j.inFlight=null,e=a,g=k,h=c(),j.targetVersion=e,j.npmVersion=g,j.checkedAt=h),k}async function m(a,b={}){var c;if(!a.hasUpdate)return{hasUpdate:!1,pendingVersion:null};let d=await l(a.latestVersion,b.fetchNpmLatest??k,b.now??Date.now);return null!==d&&(c=a.latestVersion,(0,f.MQ)(d,c))?{hasUpdate:!1,pendingVersion:a.latestVersion}:{hasUpdate:!0,pendingVersion:null}}async function n(a,b={}){let c;if(!h.test(a))return null;try{c=await (b.fetchNpmLatest??k)()}catch{return null}return null===c?null:(0,f.MQ)(a,c)}},54325:(a,b,c)=>{"use strict";c.d(b,{LE:()=>f,Oo:()=>e,ST:()=>d,T4:()=>k,dz:()=>j,r9:()=>h,rx:()=>i,rz:()=>g});let d="client_version",e="version_mismatch";function f(a,b){return!!a&&!!b&&"0.0.0"!==a&&"0.0.0"!==b&&a!==b}let g="chat_turn_progress",h=1e3;function i(a,b=65536){return b<=0?{body:"",truncated:a.length>0}:a.length<=b?{body:a,truncated:!1}:{body:a.slice(a.length-b),truncated:!0}}let j="messages_invalidated",k="model_changed"},78335:()=>{},90164:(a,b,c)=>{"use strict";c.d(b,{Dk:()=>e,kD:()=>f});let d="https://github.com/Kewton/CommandMate",e=`${d}/releases/`,f=`${d}/blob/main/docs/security-guide.md`},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=6781,exports.ids=[6781],exports.modules={16781:(a,b,c)=>{c.r(b),c.d(b,{AGENT_EVENT_TYPES:()=>n.b0,MAX_CWD_LENGTH:()=>p,applyAgentStopEvent:()=>u,isAgentEventType:()=>n.o0,resolveWorktreeByCwd:()=>s,validateHookCwd:()=>q});var d=c(29021),e=c(33873),f=c(56791),g=c(48524),h=c(66007),i=c(52767),j=c(52283),k=c(
|
|
1
|
+
"use strict";exports.id=6781,exports.ids=[6781],exports.modules={16781:(a,b,c)=>{c.r(b),c.d(b,{AGENT_EVENT_TYPES:()=>n.b0,MAX_CWD_LENGTH:()=>p,applyAgentStopEvent:()=>u,isAgentEventType:()=>n.o0,resolveWorktreeByCwd:()=>s,validateHookCwd:()=>q});var d=c(29021),e=c(33873),f=c(56791),g=c(48524),h=c(66007),i=c(52767),j=c(52283),k=c(33294),l=c(31517),m=c(72626),n=c(62887);let o=(0,m.h)("lib/hooks/agent-event-service"),p=4096;function q(a){if("string"!=typeof a||""===a.trim())return{ok:!1,reason:"empty"};if(a.length>p)return{ok:!1,reason:"too_long"};let b=a;try{b=decodeURIComponent(a)}catch{b=a}return a.includes("\0")||b.includes("\0")?{ok:!1,reason:"nul_byte"}:(0,e.isAbsolute)(a)?r(a)||r(b)?{ok:!1,reason:"traversal"}:{ok:!0,cwd:a}:{ok:!1,reason:"not_absolute"}}function r(a){return a.split("\\"===e.sep?/[\\/]/:"/").some(a=>".."===a)}function s(a,b){let c=t(b);if(null===c)return null;let d=null,e=-1;for(let b of(0,f.getWorktrees)(a)){let a=t(b.path);null!==a&&(0,h.Uc)(c,a)&&a.length>e&&(d=b,e=a.length)}return d}function t(a){try{return(0,d.realpathSync)(a)}catch{return null}}async function u(a,b,c,d){let e;(0,k.recordAgentStopEvent)(b.id,c,d);let{status:f}=await (0,l.DL)(b,c,d),h="captured"===f;try{e=(0,g.MH)(a,b.id,c,d)}catch(a){return o.warn("agent-stop-task-lookup-failed",{worktreeId:b.id,error:a instanceof Error?a.message:String(a)}),{taskId:null,taskEventApplied:!1,verificationRunId:null,structuredHistoryCaptured:h,structuredHistoryOutcome:f}}if(!e)return{taskId:null,taskEventApplied:!1,verificationRunId:null,structuredHistoryCaptured:h,structuredHistoryOutcome:f};let m=!1;try{let b=(0,i.g)(a,e.id,"agent_idle",{source:"hook"});m=null!==b&&null!==b.toStatus}catch(a){o.warn("agent-stop-event-failed",{taskId:e.id,error:a instanceof Error?a.message:String(a)})}if(!e.contract.success.autoVerifyOnStop)return{taskId:e.id,taskEventApplied:m,verificationRunId:null,structuredHistoryCaptured:h,structuredHistoryOutcome:f};let n=null;try{let{runId:a}=await (0,j.AT)({worktreeId:b.id,worktreePath:b.path,instanceId:d,taskId:e.id,trigger:"task"});n=a}catch(a){a instanceof j.Wb||o.error("agent-stop-auto-verify-failed",{taskId:e.id,error:a instanceof Error?a.message:String(a)})}return{taskId:e.id,taskEventApplied:m,verificationRunId:n,structuredHistoryCaptured:h,structuredHistoryOutcome:f}}},31517:(a,b,c)=>{c.d(b,{DL:()=>j,sD:()=>f});var d=c(2734);let e=(0,c(72626).h)("lib/hooks/stop-history-capture"),f=[150,500,2e3,5e3],g=new Set([d.c]);function h(a){return new Promise(b=>{setTimeout(b,a)})}async function i(a,b,c,d,f,g){let i=Date.now();try{for(let[j,k]of g.entries()){await h(k);let l={};if(await a.captureStructuredHistoryTurn(b.id,c,d,f,l))return e.info("stop-history-capture-deferred-captured",{worktreeId:b.id,cliToolId:c,instanceId:d,attempt:j+1,attempts:g.length,elapsedMs:Date.now()-i}),!0;e.debug("stop-history-capture-deferred-open",{worktreeId:b.id,cliToolId:c,instanceId:d,attempt:j+1,attempts:g.length,outcome:l.outcome??"unavailable",elapsedMs:Date.now()-i})}return e.info("stop-history-capture-deferred-exhausted",{worktreeId:b.id,cliToolId:c,instanceId:d,attempts:g.length,elapsedMs:Date.now()-i}),!1}catch(a){return e.warn("stop-history-capture-deferred-failed",{worktreeId:b.id,cliToolId:c,instanceId:d,error:a instanceof Error?a.message:String(a)}),!1}}async function j(a,b,d,k={}){try{let j=await Promise.all([c.e(1503),c.e(8791),c.e(1719),c.e(2119),c.e(2445),c.e(252),c.e(8800),c.e(7905),c.e(9731),c.e(8728),c.e(8918)]).then(c.bind(c,28918));if(!j.isPullTranscriptHistory(b))return{status:"unavailable"};let l={worktreePath:a.path,transcriptPathHint:null},m={};if(await j.captureStructuredHistoryTurn(a.id,b,d,l,m))return{status:"captured"};let n=()=>"not_yet_closed"===m.outcome?Promise.resolve(!0):j.hasStructuredHistoryTranscript(a.id,b,d,l);if(g.has(b)){let c=k.deferredDelaysMs??f;if(0===c.length||!await n())return{status:"unavailable"};let g=i(j,a,b,d,l,c);return e.info("stop-history-capture-deferred",{worktreeId:a.id,cliToolId:b,instanceId:d,delaysMs:c}),{status:"deferred",deferred:g}}let o=k.retryDelayMs??500;if(o<=0||!await n())return{status:"unavailable"};let p=Math.max(1,k.maxAttempts??3);for(let c=2;c<=p;c+=1){await h(o);let f={},g=await j.captureStructuredHistoryTurn(a.id,b,d,l,f);if(e.debug("stop-history-capture-retried",{worktreeId:a.id,cliToolId:b,instanceId:d,attempt:c,maxAttempts:p,captured:g,outcome:f.outcome??"unavailable"}),g)return{status:"captured"}}return{status:"unavailable"}}catch(c){return e.warn("stop-history-capture-failed",{worktreeId:a.id,cliToolId:b,instanceId:d,error:c instanceof Error?c.message:String(c)}),{status:"unavailable"}}}},52767:(a,b,c)=>{c.d(b,{r:()=>i,g:()=>h});var d=c(48524),e=c(87009),f=c(72626);let g=(0,f.h)("lib/tasks/task-transition-service");function h(a,b,c,f){let h=a.transaction(()=>{let g=(0,d.gg)(a,b);if(!g)return null;let h=g.status,i=function(a,b){switch(a){case"pending":switch(b){case"message_sent":return"running";case"send_failed":case"cancel":return"cancelled";default:return null}case"running":switch(b){case"prompt_detected":return"waiting_input";case"agent_idle":return"running";case"verify_started":return"verifying";case"send_failed":return"failed";case"cancel":return"cancelled";default:return null}case"waiting_input":switch(b){case"prompt_answered_auto":case"prompt_answered_human":case"agent_idle":return"running";case"verify_started":return"verifying";case"cancel":return"cancelled";default:return null}case"verifying":switch(b){case"verify_passed":return"succeeded";case"verify_failed":return"failed";case"verify_not_started":return"not_started";case"cancel":return"cancelled";default:return null}case"failed":case"not_started":switch(b){case"message_sent":return"running";case"verify_started":return"verifying";case"cancel":return"cancelled";default:return null}default:return null}}(h,c),j=Date.now(),k=(0,e.P)(a,{taskId:b,event:c,fromStatus:h,toStatus:i,payload:f,createdAt:j});return null===i?{task:g,fromStatus:h,toStatus:null,eventId:k}:{task:(0,d.xZ)(a,b,i,f?.runId===void 0?{}:{lastVerificationRunId:f.runId}),fromStatus:h,toStatus:i,eventId:k}})();return null===h?g.warn("task-event-unknown-task",{taskId:b,event:c}):null===h.toStatus&&g.warn("task-event-rejected",{taskId:b,event:c,fromStatus:h.fromStatus}),h}function i(a,b,c,e,f,i){try{let g=(0,d.MH)(a,b,c,e);if(!g)return null;return h(a,g.id,f,i)}catch(a){return g.warn("task-event-failed",{worktreeId:b,cliToolId:c,instanceId:e,event:f,error:a instanceof Error?a.message:String(a)}),null}}}};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
"use strict";exports.id=6793,exports.ids=[6793],exports.modules={15003:(a,b,c)=>{c.d(b,{QD:()=>h,Vh:()=>g,fp:()=>d,j0:()=>f,ri:()=>i});let d="CMATE.md",e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function f(a){return a.replace(RegExp(e.source,"g"),"")}let g=/^[\w\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uF900-\uFAFF\s-]{1,100}$/,h=100;function i(a){if(a.length>100)return!1;let b=a.trim().split(/\s+/);return b.length>=5&&b.length<=6}},56793:(a,b,c)=>{c.d(b,{DL:()=>
|
|
1
|
+
"use strict";exports.id=6793,exports.ids=[6793],exports.modules={15003:(a,b,c)=>{c.d(b,{QD:()=>h,Vh:()=>g,fp:()=>d,j0:()=>f,ri:()=>i});let d="CMATE.md",e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function f(a){return a.replace(RegExp(e.source,"g"),"")}let g=/^[\w\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uF900-\uFAFF\s-]{1,100}$/,h=100;function i(a){if(a.length>100)return!1;let b=a.trim().split(/\s+/);return b.length>=5&&b.length<=6}},56793:(a,b,c)=>{c.d(b,{DL:()=>H,Yg:()=>G,oX:()=>F});var d=c(73736),e=c(79748),f=c(33873),g=c.n(f),h=c(15194),i=c(80252),j=c(20137);let k=["edit_file","write_file","shell_command","monitor_command","kill_shell"];var l=c(15003),m=c(72626);let n=(0,m.h)("cmate-parser");async function o(a,b){let c=await (0,e.realpath)(a),d=await (0,e.realpath)(b);if(!c.startsWith(d+g().sep)&&c!==g().join(d,l.fp))throw Error(`Path traversal detected: ${a} is not within ${b}`);return!0}async function p(a){let b=g().join(a,l.fp);try{await o(b,a);let c=await (0,e.readFile)(b,"utf-8");return function(a){let b=new Map,c=a.split("\n"),d=null,e=!1,f=!1;for(let a of c){let c=a.trim(),g=c.match(/^##\s+(.+)$/);if(g){d=g[1].trim(),e=!1,f=!1,b.has(d)||b.set(d,[]);continue}if(!c||!c.startsWith("|")||!d)continue;if(!e){e=!0;continue}if(!f){if(c.match(/^\|[\s-:|]+\|$/)){f=!0;continue}f=!0}let h=c.split("|").slice(1,-1).map(a=>a.trim());h.length>0&&b.get(d).push(h)}return b}(c)}catch(a){if(a instanceof Error&&"code"in a&&"ENOENT"===a.code)return null;throw a}}var q=c(34207),r=c(55511),s=c(29021);let t=(0,m.h)("cron-parser");function u(){let{getDbInstance:a}=c(88807);return a()}let v=(0,m.h)("job-executor");function w(){let{getDbInstance:a}=c(88807);return a()}function x(a,b,c,d){let e=w(),f=Date.now();e.prepare(`
|
|
2
2
|
UPDATE execution_logs SET status = ?, result = ?, exit_code = ?, completed_at = ? WHERE id = ?
|
|
3
3
|
`).run(b,c,d,f,a)}async function y(a){let b;if(a.isExecuting)return void v.warn("execution:skip-concurrent",{name:a.entry.name});a.isExecuting=!0;try{b=function(a,b,c){let d=w(),e=Date.now(),f=(0,r.randomUUID)();return d.prepare(`
|
|
4
4
|
INSERT INTO execution_logs (id, schedule_id, worktree_id, message, status, started_at, created_at)
|
|
5
5
|
VALUES (?, ?, ?, ?, 'running', ?, ?)
|
|
6
|
-
`).run(f,a,b,c,e,e),f}(a.scheduleId,a.worktreeId,a.entry.message);let d=w().prepare("SELECT path, vibe_local_model FROM worktrees WHERE id = ?").get(a.worktreeId);if(!d)return void x(b,"failed","Worktree not found",null);let e=function(a,b){let c=(0,i.HA)(a);return c||("vibe-local"===a.cliToolId&&b.vibe_local_model?{model:b.vibe_local_model}:void 0)}(a.entry,d),f=await (0,q.V$)(a.entry.message,d.path,a.entry.cliToolId,a.entry.permission,e);x(b,f.status,f.output,f.exitCode);var c=a.scheduleId;let g=w(),h=Date.now();g.prepare("UPDATE scheduled_executions SET last_executed_at = ?, updated_at = ? WHERE id = ?").run(h,h,c),v.info("execution:completed",{name:a.entry.name,status:f.status})}catch(d){let c=d instanceof Error?d.message:String(d);void 0!==b&&x(b,"failed",c,null),v.error("execution:failed",{name:a.entry.name,error:c})}finally{a.isExecuting=!1}}
|
|
6
|
+
`).run(f,a,b,c,e,e),f}(a.scheduleId,a.worktreeId,a.entry.message);let d=w().prepare("SELECT path, vibe_local_model FROM worktrees WHERE id = ?").get(a.worktreeId);if(!d)return void x(b,"failed","Worktree not found",null);let e=function(a,b){let c=(0,i.HA)(a);return c||("vibe-local"===a.cliToolId&&b.vibe_local_model?{model:b.vibe_local_model}:void 0)}(a.entry,d),f=await (0,q.V$)(a.entry.message,d.path,a.entry.cliToolId,a.entry.permission,e);x(b,f.status,f.output,f.exitCode);var c=a.scheduleId;let g=w(),h=Date.now();g.prepare("UPDATE scheduled_executions SET last_executed_at = ?, updated_at = ? WHERE id = ?").run(h,h,c),v.info("execution:completed",{name:a.entry.name,status:f.status})}catch(d){let c=d instanceof Error?d.message:String(d);void 0!==b&&x(b,"failed",c,null),v.error("execution:failed",{name:a.entry.name,error:c})}finally{a.isExecuting=!1}}var z=c(36925);let A=(0,m.h)("schedule-manager");function B(a){try{if("function"==typeof a.isStopped)return!a.isStopped();if("function"==typeof a.isRunning)return a.isRunning()}catch{return!1}return!0}function C(a,b){b.schedule(()=>{y(a).catch(b=>{A.error("execution:unhandled",{name:a.entry.name,error:b instanceof Error?b.message:String(b)})})})}function D(){return(0,z.v)("__scheduleManagerStates",()=>({timerId:null,schedules:new Map,initialized:!1,isSyncing:!1,cmateFileCache:new Map}))}async function E(){let a=D();if(!a.isSyncing){a.isSyncing=!0;try{let b=function(){try{return u().prepare("SELECT id, path FROM worktrees").all()}catch(a){return t.error("worktree:fetch-failed",{error:a instanceof Error?a.message:String(a)}),[]}}(),c=new Set;for(let e of b)try{let b=function(a){let b=g().join(a,l.fp);try{return(0,s.statSync)(b).mtimeMs}catch(a){if(a instanceof Error&&"code"in a&&"ENOENT"===a.code)return null;return t.warn("file:stat-failed",{filePath:b}),null}}(e.path),f=a.cmateFileCache.get(e.path);if(null===b){void 0!==f&&a.cmateFileCache.delete(e.path);continue}let m=[],o=!1;for(let[b,c]of a.schedules)c.worktreeId===e.id&&(m.push(b),B(c.cronJob)||(o=!0));if(void 0!==f&&f===b){if(!o){for(let a of m)c.add(a);continue}A.warn("schedule:inactive-state-detected",{worktreeId:e.id})}a.cmateFileCache.set(e.path,b);let q=await p(e.path);if(!q)continue;let v=q.get("Schedules");if(!v)continue;let w=function(a){let b=[];for(let d of a){var c;let a;if(b.length>=l.QD){n.warn("maximum-schedule-entries");break}if(d.length<3){n.warn("parse:insufficient-columns",{columnCount:d.length});continue}let[e,f,g,m,o,p]=d,q=(0,l.j0)(e);if(!l.Vh.test(q)){n.warn("parse:invalid-name",{name:q});continue}if(!(0,l.ri)(f)){n.warn("parse:invalid-cron",{name:q,cron:f});continue}let r=(0,l.j0)(g);if(!r){n.warn("parse:empty-message",{name:q});continue}let s=void 0===o||""===o||"true"===o.toLowerCase(),{result:t,errors:u}=(0,i.zK)(m||"");if(u.length>0){n.warn("parse:invalid-cli-tool-column",{name:q,errors:u});continue}let v=t.cliToolId;if(!(0,h.hR)(v)){n.warn("parse:invalid-cli-tool",{name:q,cliToolId:v});continue}if(!(0,j.Cb)(v)){n.warn("parse:unsupported-cli-tool",{name:q,cliToolId:v});continue}let w=j.Hf[v]??"",x=p?.trim()||w;switch(v){case"claude":a=j.kd;break;case"codex":a=j.o1;break;case"copilot":a=j.oN;break;case"antigravity":a=j.eb;break;case"command-code":a=j.dq;break;case"opencode-v2":a=j.u7;break;default:a=[],x&&(n.warn("parse:permission-ignored",{name:q,cliToolId:v,permission:x}),x="")}a.length>0&&x&&!a.includes(x)&&(n.warn("parse:invalid-permission",{name:q,cliToolId:v,permission:x,defaultPermission:w}),x=w),s&&(c=x,"command-code"===v&&j.Tp.includes(c.trim()))&&n.warn("parse:command-code-direct-write-tools-denied",{code:"command-code-direct-write-tools-denied",name:q,cliToolId:v,permission:x,deniedTools:[...k]}),b.push({name:q,cronExpression:f.trim(),message:r,cliToolId:v,enabled:s,permission:x,model:t.model,agent:t.agent,variant:t.variant,continueSession:t.continueSession,title:t.title})}return b}(v),x=function(a,b){if(0===b.length)return[];let c=u(),d=Date.now(),e=c.prepare("SELECT id, name FROM scheduled_executions WHERE worktree_id = ?").all(a),f=new Map;for(let a of e)f.set(a.name,a.id);let g=[],h=c.prepare(`
|
|
7
7
|
UPDATE scheduled_executions
|
|
8
8
|
SET message = ?, cron_expression = ?, cli_tool_id = ?, enabled = ?, updated_at = ?
|
|
9
9
|
WHERE id = ?
|
|
10
10
|
`),i=c.prepare(`
|
|
11
11
|
INSERT INTO scheduled_executions (id, worktree_id, name, message, cron_expression, cli_tool_id, enabled, created_at, updated_at)
|
|
12
12
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
13
|
-
`);return c.transaction(()=>{for(let c of b){let b=f.get(c.name);if(b)h.run(c.message,c.cronExpression,c.cliToolId,+!!c.enabled,d,b),g.push(b);else{let b=(0,r.randomUUID)();i.run(b,a,c.name,c.message,c.cronExpression,c.cliToolId,+!!c.enabled,d,d),g.push(b)}}})(),g}(e.id,w);for(let b=0;b<w.length;b++){let f=w[b],g=x[b];if(c.add(g),!f.enabled||!f.cronExpression){let b=a.schedules.get(g);b&&(b.cronJob.stop(),a.schedules.delete(g),
|
|
13
|
+
`);return c.transaction(()=>{for(let c of b){let b=f.get(c.name);if(b)h.run(c.message,c.cronExpression,c.cliToolId,+!!c.enabled,d,b),g.push(b);else{let b=(0,r.randomUUID)();i.run(b,a,c.name,c.message,c.cronExpression,c.cliToolId,+!!c.enabled,d,d),g.push(b)}}})(),g}(e.id,w);for(let b=0;b<w.length;b++){let f=w[b],g=x[b];if(c.add(g),!f.enabled||!f.cronExpression){let b=a.schedules.get(g);b&&(b.cronJob.stop(),a.schedules.delete(g),A.info("schedule:disabled",{name:f.name}));continue}let h=a.schedules.get(g);if(h){if(!B(h.cronJob)){try{h.cronJob.stop()}catch{}try{let a=new d.l4(f.cronExpression,{paused:!1,protect:!0});C(h,a),h.cronJob=a,h.entry=f,A.warn("schedule:recreated-inactive",{name:f.name,cron:f.cronExpression})}catch(b){a.cmateFileCache.delete(e.path),A.error("schedule:update-failed",{scheduleId:g,worktreeId:e.id,previousCron:h.entry.cronExpression,cron:f.cronExpression,phase:"recover",error:b instanceof Error?b.message:String(b)})}continue}if(h.entry.cronExpression!==f.cronExpression){!function(a,b){let c=a.entry.cronExpression,e=(d,e)=>(A.error("schedule:update-failed",{scheduleId:a.scheduleId,worktreeId:a.worktreeId,previousCron:c,cron:b.cronExpression,phase:d,error:e instanceof Error?e.message:String(e)}),!1),f=null;try{f=new d.l4(b.cronExpression,{paused:!0,protect:!0}),C(a,f)}catch(a){if(f)try{f.stop()}catch{}return e("prepare",a)}try{a.cronJob.stop(),f.resume()}catch(a){try{f.stop()}catch{}return e("swap",a)}return a.cronJob=f,a.entry=b,A.info("schedule:updated",{scheduleId:a.scheduleId,worktreeId:a.worktreeId,previousCron:c,cron:b.cronExpression}),!0}(h,f)&&a.cmateFileCache.delete(e.path);continue}h.entry=f;continue}if(a.schedules.size>=100){A.warn("schedule:max-concurrent-reached",{limit:100,name:f.name});continue}try{let b=function(a,b,c){let e=new d.l4(c.cronExpression,{paused:!1,protect:!0}),f={scheduleId:b,worktreeId:a,cronJob:e,isExecuting:!1,entry:c};return C(f,e),f}(e.id,g,f);a.schedules.set(g,b),A.info("schedule:created",{name:f.name,cron:f.cronExpression})}catch(a){A.warn("schedule:invalid-cron",{name:f.name,error:a instanceof Error?a.message:String(a)})}}}catch(a){A.error("schedule:sync-failed",{worktreeId:e.id,error:a instanceof Error?a.message:String(a)})}for(let[b,d]of a.schedules)c.has(b)||(d.cronJob.stop(),a.schedules.delete(b),A.info("schedule:removed-stale",{name:d.entry.name}));let e=b.map(a=>a.id);!function(a,b){if(0!==b.length)try{let c=u(),d=Date.now(),e=b.map(()=>"?").join(","),f=c.prepare(`SELECT id FROM scheduled_executions WHERE worktree_id IN (${e}) AND enabled = 1`).all(...b),g=0,h=c.prepare("UPDATE scheduled_executions SET enabled = 0, updated_at = ? WHERE id = ?");for(let b of f)!a.has(b.id)&&(h.run(d,b.id),g++);g>0&&t.info("schedule:disabled-stale",{count:g})}catch(a){t.error("schedule:disable-stale-failed",{error:a instanceof Error?a.message:String(a)})}}(c,e)}finally{a.isSyncing=!1}}}async function F(){await E()}function G(a){let b=D();for(let[c,d]of b.schedules)if(d.worktreeId===a){try{d.cronJob.stop()}catch{}b.schedules.delete(c)}try{let d=(function(){let{getDbInstance:a}=c(88807);return a()})().prepare("SELECT path FROM worktrees WHERE id = ?").get(a);d?.path&&b.cmateFileCache.delete(d.path)}catch{A.warn("cache:cleanup-failed",{worktreeId:a})}A.info("stop:worktree",{worktreeId:a})}function H(a){let b=D(),c=[];for(let[d,e]of b.schedules){if(e.worktreeId!==a)continue;let b=null;try{let a="function"==typeof e.cronJob.nextRun?e.cronJob.nextRun():null;a instanceof Date&&(b=a.getTime())}catch{b=null}c.push({scheduleId:d,worktreeId:a,name:e.entry.name,cronExpression:e.entry.cronExpression,cliToolId:e.entry.cliToolId,enabled:e.entry.enabled,isExecuting:e.isExecuting,isCronActive:B(e.cronJob),nextRunAt:b,model:e.entry.model})}return c.sort((a,b)=>a.name.localeCompare(b.name)),c}}};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";exports.id=7491,exports.ids=[7491],exports.modules={26945:(a,b,c)=>{c.d(b,{Lv:()=>
|
|
2
|
-
`,{mode:384})}catch(a){
|
|
1
|
+
"use strict";exports.id=7491,exports.ids=[7491],exports.modules={26945:(a,b,c)=>{c.d(b,{Lv:()=>t,OZ:()=>r,bH:()=>q,j1:()=>o,ui:()=>s});var d=c(29021),e=c(33873),f=c(72626),g=c(84574),h=c(38892),i=c(36925);let j=(0,f.h)("lib/hooks/sources/opencode-v2/ports"),k={min:4300,max:4399},l=k.max-k.min+1,m=(0,i.v)("__opencodeV2PortAssignments",()=>new Map);function n(){return(0,e.join)((0,h.g2)(),"ports.json")}function o(){try{let a=JSON.parse((0,d.readFileSync)(n(),"utf8"));if("object"!=typeof a||null===a||Array.isArray(a))return{};let b={};for(let[c,d]of Object.entries(a))!("object"!=typeof d||null===d||Array.isArray(d))&&"number"==typeof d.port&&Number.isInteger(d.port)&&d.port>=k.min&&d.port<=k.max&&"string"==typeof d.worktreePath&&(b[c]={port:d.port,worktreePath:d.worktreePath,updatedAt:"number"==typeof d.updatedAt?d.updatedAt:0});return b}catch{return{}}}function p(a){let b=n();try{if(0===Object.keys(a).length)return void(0,d.rmSync)(b,{force:!0});(0,h.e5)(),(0,d.writeFileSync)(b,`${JSON.stringify(a,null,2)}
|
|
2
|
+
`,{mode:384})}catch(a){j.warn("opencode-v2-port-file-write-failed",{path:b,error:a instanceof Error?a.message:String(a)})}}function q(a){return m.get((0,h.Y_)(a))?.port??null}function r(a){var b=(0,h.Y_)(a);m.delete(b);let c=o();b in c&&(delete c[b],p(c))}async function s(a,b,c=g.Ci){let d=q(a);if(null!==d&&await c(d))return d;let e=(0,h.Y_)(a),f=o()[e]?.port,i=function(a){let b=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return k.min+b%l}((0,h.Y_)(a)),c=[];for(let a=0;a<l;a+=1)c.push(k.min+(b-k.min+a)%l);return c}(a);for(let d of void 0!==f?[f,...i.filter(a=>a!==f)]:i)if(await c(d))return!function(a,b,c,d=Date.now()){let e=(0,h.Y_)(a),f={port:b,worktreePath:c,updatedAt:d};m.set(e,f);let g=o();g[e]=f,p(g)}(a,d,b),j.info("opencode-v2-port-allocated",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:d}),d;return j.warn("opencode-v2-port-exhausted",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,range:`${k.min}-${k.max}`}),null}async function t(a,b,c){let d=q(a);if(null!==d)return d;let e=(0,h.Y_)(a),f=o()[e];return f?f.worktreePath!==b?(j.info("opencode-v2-port-recovery-path-mismatch",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId}),null):await c(f.port)?(m.set(e,f),j.info("opencode-v2-port-recovered",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:f.port}),f.port):(j.info("opencode-v2-port-recovery-unverified",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:f.port}),null):null}},34114:(a,b,c)=>{c.d(b,{$F:()=>o,CI:()=>n,IR:()=>f,LO:()=>m,MT:()=>h,Pf:()=>p,Q4:()=>e,VW:()=>j,am:()=>t,nR:()=>s,tJ:()=>g,u7:()=>r,yk:()=>q});var d=c(57510);function e(a){return`http://127.0.0.1:${a}`}function f(a){return`Basic ${Buffer.from(`opencode:${a}`).toString("base64")}`}async function g(a,b){try{let c=await fetch(`${e(a)}/openapi.json`,{headers:{Authorization:f(b)},redirect:"error",signal:AbortSignal.timeout(2e3)});return await c.body?.cancel().catch(()=>{}),200===c.status?{kind:"healthy"}:{kind:"rejected",status:c.status}}catch{return{kind:"unreachable"}}}async function h(a,b,c){let d=await fetch(`${e(a)}/api/event`,{signal:c,redirect:"error",headers:{Accept:"text/event-stream",Authorization:f(b)}});if(!d.ok||!d.body)throw await d.body?.cancel().catch(()=>{}),Error(`opencode2 /api/event responded ${d.status}`);let g=d.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase();if("text/event-stream"!==g)throw await d.body.cancel().catch(()=>{}),Error(`opencode2 /api/event answered ${g??"no content-type"}`);return i(d.body.getReader())}async function*i(a){let b=new TextDecoder,c=function(){let a="",b=[],c=0,d=!1,e=0,f=a=>{d?e+=1:b.length>0&&a.push({kind:"frame",data:b.join("\n")}),b=[],c=0,d=!1},g=(a,e)=>{if(""===a)return void f(e);if(a.startsWith(":"))return void e.push({kind:"heartbeat"});if(!a.startsWith("data:")||d)return;let g=a.slice(5).replace(/^ /,"");if((c+=g.length)>4194304){d=!0,b=[];return}b.push(g)};return{push(b){let c=[],e=(a+=b).search(/\r?\n|\r/);for(;-1!==e;){let b=a.slice(0,e),d=a.startsWith("\r\n",e)?2:1;a=a.slice(e+d),g(b,c),e=a.search(/\r?\n|\r/)}return a.length>4194304&&(a="",d=!0),c},flush(){let b=[];return""!==a&&g(a,b),a="",f(b),b},oversizedFrames:()=>e}}(),e=function*(a){for(let b of a){if("heartbeat"===b.kind){yield b;continue}let a=function(a){try{let b=JSON.parse(a);return(0,d.Qd)(b)?b:null}catch{return null}}(b.data);a&&(yield{kind:"frame",frame:a})}};try{for(;;){let{done:d,value:f}=await a.read();if(d)break;yield*e(c.push(b.decode(f,{stream:!0})))}yield*e(c.flush())}finally{await a.cancel().catch(()=>{})}}async function j(a,b,c,g){let h=new URLSearchParams({limit:String(100)});null===g?h.set("order","desc"):h.set("cursor",g);try{let g=await fetch(`${e(a)}/api/session/${encodeURIComponent(c)}/message?${h}`,{headers:{Accept:"application/json",Authorization:f(b)},redirect:"error",signal:AbortSignal.timeout(5e3)});if(200!==g.status)return await g.body?.cancel().catch(()=>{}),null;let i=await g.text();if(i.length>8388608)return null;let j=JSON.parse(i);if(!(0,d.Qd)(j)||!Array.isArray(j.data))return null;let k=(0,d.Qd)(j.cursor)&&"string"==typeof j.cursor.next?j.cursor.next:null;return{data:j.data,next:k}}catch{return null}}async function k(a,b,c,d,g){try{let h=await fetch(`${e(a)}${d}`,{method:c,headers:{Accept:"application/json",Authorization:f(b),...void 0===g?{}:{"Content-Type":"application/json"}},...void 0===g?{}:{body:JSON.stringify(g)},redirect:"error",signal:AbortSignal.timeout(5e3)}),i=await h.text();if(i.length>4194304)return null;return{status:h.status,body:""===i?null:JSON.parse(i)}}catch{return null}}function l(a){return null===a||200!==a.status?null:(0,d.Qd)(a.body)&&Array.isArray(a.body.data)?a.body.data:null}async function m(a,b){return l(await k(a,b,"GET","/api/permission/request"))}async function n(a,b){return l(await k(a,b,"GET","/api/form"))}async function o(a,b,c){return l(await k(a,b,"GET",`/api/session/${encodeURIComponent(c)}/form`))}async function p(a,b,c,d,e,f){let g=await k(a,b,"POST",`/api/session/${encodeURIComponent(c)}/permission/${encodeURIComponent(d)}/reply`,void 0===f?{decision:e}:{decision:e,message:f});return null!==g&&g.status>=200&&g.status<300}async function q(a,b,c,d,e){let f=await k(a,b,"POST",`/api/session/${encodeURIComponent(c)}/form/${encodeURIComponent(d)}/reply`,{answer:e});return null!==f&&f.status>=200&&f.status<300}async function r(a,b,c){let e=await k(a,b,"GET",`/api/session/${encodeURIComponent(c)}`);return null===e||200!==e.status?null:(0,d.Qd)(e.body)&&(0,d.Qd)(e.body.data)?e.body.data:null}async function s(a,b,c){let d=new URLSearchParams({limit:String(20),order:"desc"});return l(await k(a,b,"GET",`/api/session/${encodeURIComponent(c)}/message?${d}`))}async function t(a,b){return l(await k(a,b,"GET","/api/model"))}},38892:(a,b,c)=>{c.d(b,{Nc:()=>t,OC:()=>p,X3:()=>q,Y_:()=>m,ar:()=>o,e5:()=>l,g2:()=>k,n0:()=>r});var d=c(55511),e=c(29021),f=c(21820),g=c(33873),h=c(8004),i=c(24455);let j="CM_OPENCODE_V2_DIR";function k(){let a=(0,g.join)((0,f.homedir)(),".commandmate","opencode-v2");return(0,h.T)(process.env[j],a,j)}function l(){let a=k();return(0,e.mkdirSync)(a,{recursive:!0,mode:448}),(0,e.chmodSync)(a,448),a}function m(a){return(0,i.v7)(a.worktreeId,a.cliToolId,a.instanceId)}function n(a){return encodeURIComponent(a).replace(/%3A/gi,":").replace(/\./g,"%2E")}function o(a){return(0,g.join)(k(),`${n(m(a))}.pw`)}function p(a){l();let b=o(a);return(0,e.rmSync)(b,{force:!0}),(0,e.writeFileSync)(b,`${(0,d.randomBytes)(32).toString("base64url")}
|
|
3
3
|
`,{mode:384,flag:"wx"}),(0,e.chmodSync)(b,384),b}function q(a){return s(o(a))}function r(a){return s((0,g.join)(k(),`${n(a)}.pw`))}function s(a){try{let b=(0,e.readFileSync)(a,"utf8").split("\n")[0];return void 0!==b&&b.length>0?b:null}catch{return null}}function t(a){(0,e.rmSync)(o(a),{force:!0})}},71193:(a,b,c)=>{c.d(b,{B:()=>d,V:()=>e});let d="opencode-v2",e="opencode2"},73434:(a,b,c)=>{c.d(b,{hh:()=>f});let d=["CLAUDECODE","CM_AUTH_TOKEN","CM_AUTH_TOKEN_HASH","CM_AUTH_EXPIRE","CM_HTTPS_KEY","CM_HTTPS_CERT","CM_ALLOWED_IPS","CM_TRUST_PROXY","CM_DB_PATH","GH_DEBUG"],e=["CM_AGENT_INSTANCE_ID","CM_AGENT_TOOL","CM_AGENT_WORKTREE_ID","CM_HOOK_PORT","CM_HOOK_URL","CM_PERMISSION_HOOK_URL"];function f(){let a={...process.env};for(let b of Object.keys(a))(d.includes(b)||e.includes(b)||b.startsWith("CM_HOOK_"))&&delete a[b];return a}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=7905,exports.ids=[7905],exports.modules={1305:(a,b,c)=>{c.d(b,{Fq:()=>m,wK:()=>n});var d=c(22354),e=c(48083),f=c(88807),g=c(52660),h=c(54325),i=c(72626);let j=(0,i.h)("lib/session/session-generation-archive");var k=c(35583);let l=(0,i.h)("lib/session/agent-session-lifecycle");function m(a,b=Date.now()){(0,k._U)(a.worktreeId,a.cliToolId,a.instanceId,b);let i=(0,e.getAgentEventDropCounts)(a.worktreeId,a.cliToolId,a.instanceId).decisionEvicted;(0,e.beginAgentEventGeneration)(a.worktreeId,a.cliToolId,a.instanceId,b);let n=(0,e.getAgentEventDropCounts)(a.worktreeId,a.cliToolId,a.instanceId).decisionEvicted,o=(0,d.VM)(a.cliToolId);l.info("agent-session-generation-begun",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,transport:o.transport,decisionsEvicted:n-i});try{!function(a,b=process.env.VITEST?null:(0,f.getDbInstance)()){var d,e,i;let k=a.instanceId??a.cliToolId;if(!b)return;let l=(0,g.deleteMessagesByInstance)(b,a.worktreeId,k);0===l||((0,g.recomputeLastUserMessage)(b,a.worktreeId),j.info("session-generation-archived",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:k,archived:l}),d=a.worktreeId,e=a.cliToolId,i=k,Promise.all([c.e(1356),c.e(1503),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(8728)]).then(c.bind(c,43015)).then(({broadcastMessage:a})=>{a(h.dz,{worktreeId:d,cliToolId:e,instanceId:i,reason:"session_generation"})}).catch(a=>{j.warn("session-generation-invalidate-broadcast-failed",{worktreeId:d,instanceId:i,error:a instanceof Error?a.message:String(a)})}))}(a)}catch(b){l.warn("session-generation-archive-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}}function n(a){return(0,d.K9)((0,d.VM)(a.target.cliToolId).prepareLaunch(a))}},11472:(a,b,c)=>{c.d(b,{Bl:()=>e,GE:()=>j,Hg:()=>k,ow:()=>i,vg:()=>g,w9:()=>f});var d=c(51297);let e=["$","%","#"],f=40,g=[/^[\w.-]+@[\w.-]+[\s:].*[$%#]$/,/^\[[\w.-]+@[\w.-]+[^\]]*\][$#]$/];function h(a){return a.split("\n").filter(a=>""!==a.trim())}function i(a,b){let c=h(a.trim()).slice(-10).join("\n");for(let a of b.fatalPatterns)if(c.includes(a))return a;for(let a of b.fatalRegexPatterns)if(a.test(c))return a.source;return null}function j(a,b){let c=h(a.trim()),d=c[c.length-1]?.trim()??"";return!/\d+%$/.test(d)&&b.shellPromptPatterns.some(a=>a.test(d))?{line:d,via:"pattern"}:d.length>=b.maxShellPromptLength?null:b.shellPromptEndings.some(a=>!(!d.endsWith(a)||"%"===a&&/\d+%$/.test(d)))?{line:d,via:"ending"}:null}function k(a,b){let c=(0,d.aJ)(a).trim();if(""===c)return b.unreadableIsExited?{alive:!1,reason:"empty output"}:{alive:!0};let e=h(c),f=null===b.aliveTailLines?c:e.slice(-b.aliveTailLines).join("\n");if(b.alivePatterns.some(a=>a.test(f)))return{alive:!0};let g=i(c,b);if(null!==g)return{alive:!1,reason:`error pattern: ${g}`};let k=j(c,b);return null!==k?"pattern"===k.via?{alive:!1,reason:`shell prompt detected: ${k.line}`}:{alive:!1,reason:`shell prompt ending detected: ${k.line}`}:{alive:!0}}},20610:(a,b,c)=>{c.d(b,{CV:()=>i,D1:()=>p,Em:()=>q,Is:()=>g,KI:()=>j,Lw:()=>o,PY:()=>m,Rk:()=>l,Uc:()=>d,Zf:()=>h,kZ:()=>r,os:()=>k,pL:()=>e,x9:()=>f,yO:()=>n});let d=100,e=100,f=200,g=300,h=500,i=500,j=2e3,k=300,l=3e3,m=200,n=3e3,o=3e3,p=15e3,q=100,r=1e3},35583:(a,b,c)=>{c.d(b,{O5:()=>n,Bk:()=>p,Hb:()=>k,_U:()=>m,a3:()=>q,PS:()=>l,Gz:()=>r});var d=c(16698),e=c(24455),f=c(37717);c(15194);let g={claude:6e4},h=globalThis.__sessionStartingRecords??(globalThis.__sessionStartingRecords=new Map),i=globalThis.__sessionStartingTokenSeq??(globalThis.__sessionStartingTokenSeq={last:0}),j=globalThis.__sessionStartingTokenScope??(globalThis.__sessionStartingTokenScope=new d.AsyncLocalStorage);function k(){return i.last+=1,i.last}function l(a,b){return j.run(a,b)}function m(a,b,c,d=Date.now()){let f=j.getStore()??k(),g=(0,e.v7)(a,b,c),i=h.get(g);return void 0!==i&&i.token>f?null:(h.set(g,{cliToolId:b,token:f,since:d,promptSeenAt:null,released:!1}),f)}function n(a,b,c,d){try{let f=(0,e.v7)(a,b,c);if(void 0!==d&&h.get(f)?.token!==d)return;h.delete(f)}catch{}}function o(a,b,c){return void 0===b||b.released?null:c-b.since>(g[b.cliToolId]??3e4)+5e3?(h.delete(a),null):b.since}function p(a,b,c,d=Date.now()){let f=(0,e.v7)(a,b,c);return o(f,h.get(f),d)}function q(a,b,c,d,f=Date.now()){let g=(0,e.v7)(a,b,c),i=h.get(g),j=o(g,i,f);return null===j||void 0===i?null:d?(i.promptSeenAt??=f,f-i.promptSeenAt>=5e3)?(i.released=!0,null):j:(i.promptSeenAt=null,j)}function r(a){return{...a,status:"running",reason:f.g.STARTING,hasActivePrompt:!1,promptDetection:{...a.promptDetection,isPrompt:!1,promptData:void 0},evidence:"positive"}}},37717:(a,b,c)=>{c.d(b,{g:()=>d});let d={PROMPT_DETECTED:"prompt_detected",THINKING_INDICATOR:"thinking_indicator",OPENCODE_PROCESSING_INDICATOR:"opencode_processing_indicator",OPENCODE_SELECTION_LIST:"opencode_selection_list",OPENCODE_MODAL_OVERLAY:"opencode_modal_overlay",OPENCODE_PERMISSION_PROMPT:"opencode_permission_prompt",CLAUDE_SELECTION_LIST:"claude_selection_list",COMMAND_CODE_SELECTION_LIST:"command_code_selection_list",COMMAND_CODE_DISMISSABLE_PANEL:"command_code_dismissable_panel",COMMAND_CODE_PLAN_REVIEW:"command_code_plan_review",COPILOT_SELECTION_LIST:"copilot_selection_list",CODEX_SELECTION_LIST:"codex_selection_list",CODEX_PAGER:"codex_pager",CODEX_HOOKS_REVIEW:"codex_hooks_review",ANTIGRAVITY_SELECTION_LIST:"antigravity_selection_list",OPENCODE_RESPONSE_COMPLETE:"opencode_response_complete",INPUT_PROMPT:"input_prompt",NO_RECENT_OUTPUT:"no_recent_output",STARTING:"starting",EXITED:"exited",UNKNOWN_FRAME:"unknown_frame",DEFAULT:"default"}},40236:(a,b,c)=>{c.d(b,{FW:()=>A});var d=c(79646),e=c(79892),f=c(93997),g=c(56717),h=c(20967),i=c(20610),j=c(72626),k=c(87673);let l=(0,j.h)("cli-tools/submit-verified-sender"),m=/\[Pasted text[\s#]/,n=0,o=/^\/[A-Za-z]/,p=/^\s*(?:ctx:\d+%\s*)?[>❯›]/;function q(a,b,c){if("opencode-box"===a){let a=(0,h.mu)(b);if(null===a)return{kind:"absent"};if(a.some(a=>h.vU.test(a)))return{kind:"empty"};let c=a.map(h.pV).find(a=>a.length>0);return void 0===c?{kind:"empty"}:{kind:"text",text:c,rows:a}}if("input-line-marker"!==a)return{kind:"absent"};let d=function(a){for(let b=a.length-1;b>=0;b--)if(p.test(a[b]))return a[b];return null}(c);if(null===d)return{kind:"absent"};let e=d.replace(p,"").trim();return 0===e.length?{kind:"empty"}:{kind:"text",text:e,rows:[d]}}function r(a){let b=a.length;for(;b>0&&""===a[b-1].trim();)b--;return a.slice(0,b)}function s(a,b){let c=b.split("\n").map(a=>a.trim()).find(a=>a.length>0)??"";return 0!==c.length&&c.startsWith(a)}let t=[{pattern:/\[Pasted text(?: #\d+)?(?: \+(\d+) lines?| (\d+) chars?)?\]/g,read:a=>void 0!==a[1]?{lines:Number(a[1])}:void 0!==a[2]?{chars:Number(a[2])}:{}},{pattern:/\[Pasted Content (\d+) chars?\]/g,read:a=>({chars:Number(a[1])})},{pattern:/\[([^\]\n]*?)… \+(\d+)L\]/g,read:a=>({head:a[1],lineTotal:Number(a[2])})}];function u(a){let b=[],c=a;for(let{pattern:d,read:e}of t)for(let f of a.matchAll(d))b.push(e(f)),c=c.replace(f[0],"");return{tokens:b,rest:c.trim()}}function v(a,b){return new Promise((c,e)=>{let f=d.execFile("tmux",a,{timeout:5e3},a=>{if(a)return void e(a);c()});void 0!==b&&f.stdin?.end(b)})}async function w(a,b){let c=`cm-send-${process.pid}-${++n}`;try{await v(["load-buffer","-b",c,"-"],b),await v(["paste-buffer","-p","-r","-d","-b",c,"-t",(0,e.lA)(a)])}catch(b){await v(["delete-buffer","-b",c]).catch(()=>void 0);let a=b instanceof Error?b.message:String(b);throw Error(`Failed to paste message into tmux session: ${a}`)}}async function x(a,b,c){try{c.clearBeforeSend?await (0,k.sr)(a,b):await (0,e.Ce)(a)}catch(c){l.error("paste-withdraw-failed",{sessionName:a,cliToolId:b,error:c instanceof Error?c.message:String(c)})}}async function y(a){let{sessionName:b,message:c,cliToolId:d,composer:i,attempts:j}=a,k="unseen",m="";for(let a=0;a<Math.max(1,j)&&(await new Promise(a=>setTimeout(a,100)),"landed"!==(k=function(a,b,c,d=(0,g.gc)(b)){let e=r((0,h.aJ)(a).split("\n")),f=q(d.reader,e,e.slice(-12));if("text"!==f.kind)return"unseen";let{tokens:i,rest:j}=u(f.text);return 0===i.length?s(f.text,c)?"landed":c.includes(f.text)?"mismatch":"unseen":i.length>1||""!==j?"mismatch":function(a,b){let c,d,e=(b.match(/\n/g)??[]).length;if(void 0!==a.head){let c=a.head.replace(/\s+/g," ").trim();if(!b.replace(/\s+/g," ").startsWith(c))return"mismatch"}if(void 0!==a.chars)c=a.chars,d=[[...b].length,b.length];else if(void 0!==a.lineTotal)c=a.lineTotal,d=[e+1];else{if(void 0===a.lines)return 0===e?"landed":"pasting";c=a.lines,d=[e,e+1]}return d.includes(c)?"landed":c<Math.min(...d)?"pasting":"mismatch"}(i[0],c)}(m=await (0,e.Xg)(b,{startLine:-i.verifyCaptureLines}),d,c,i))&&"mismatch"!==k);a++);if("landed"===k)return;if("unseen"===k&&!i.clearBeforeSend)return void l.warn("paste-landed-unverified",{sessionName:b,cliToolId:d,bytes:Buffer.byteLength(c,"utf8")});let n=Buffer.byteLength(c,"utf8"),o=c.split("\n").length,p=function(a,b){let c=r((0,h.aJ)(a).split("\n")),d=q(b.reader,c,c.slice(-12));return"absent"===d.kind?"no composer on screen":"empty"===d.kind?"an empty composer":JSON.stringify(d.text.length>80?`${d.text.slice(0,80)}…`:d.text)}(m,i);await x(b,d,i),(0,f.gm)(b),l.error("paste-not-landed",{sessionName:b,cliToolId:d,state:k,bytes:n,lines:o,shown:p});let t="mismatch"===k?`the composer does not hold the message as sent (it shows ${p})`:"pasting"===k?`the paste had not finished arriving after ${100*j}ms (the composer shows ${p})`:`the message never appeared in the composer (${p})`;throw Error(`Message body did not arrive intact for session ${b}: ${t}; the message is ${n} bytes / ${o} lines. Enter was not pressed, so nothing was submitted (Issue #2464).`)}async function z(a,b,c=(0,g.gc)(b)){if(!c.clearBeforeSend)return;let d=await (0,k.sr)(a,b);if("content"===d.state)throw l.error("pre-send-composer-clear-failed",{sessionName:a,cliToolId:b,passes:d.passes,remainingLength:d.remainingText.length,remainingText:d.remainingText}),Error(`Composer for session ${a} still holds unsent text after ${d.passes} clear passes; refusing to type the message, which would be concatenated with it (Issue #1880).`);d.passes>0&&l.warn("pre-send-composer-cleared",{sessionName:a,cliToolId:b,passes:d.passes,state:d.state,discardedLength:d.discardedText.length,discardedText:d.discardedText})}async function A(a){let{sessionName:b,message:c,cliToolId:d,composer:j=(0,g.gc)(d),textInputWaitMs:k=i.pL,interEnterWaitMs:n=i.pL,verifyAttempts:p=4,verifyDelayMs:t=i.x9,pasteLandedAttempts:v=20}=a,x=a.submitEnterCount??j.submitEnterCount;if(await z(b,d,j),Buffer.byteLength(c,"utf8")>512){let a=Date.now();await w(b,c),await y({sessionName:b,message:c,cliToolId:d,composer:j,attempts:v});let e=k-(Date.now()-a);e>0&&await new Promise(a=>setTimeout(a,e))}else await (0,e.V1)(b,c,!1,{literal:!0}),await new Promise(a=>setTimeout(a,k));for(let a=0;a<Math.max(1,x);a++)await (0,e.KB)(b,["Enter"]),a<x-1&&await new Promise(a=>setTimeout(a,n));let A=Math.max(1,p);for(let a=0;a<A;a++){await new Promise(a=>setTimeout(a,t));let i=function(a,b,c,d=(0,g.gc)(b)){let e=r((0,h.aJ)(a).split("\n")),f=e.slice(-12),i=f.join("\n");if((0,h.ut)(b,i))return"submitted";let j=q(d.reader,e,f);return"text"!==j.kind?"submitted":j.rows.some(a=>m.test(a)||u(a).tokens.length>0)||s(j.text,c)?"pending":o.test(j.text)?"replaced":"submitted"}(await (0,e.Xg)(b,{startLine:-j.verifyCaptureLines}),d,c,j);if("submitted"===i)return void(0,f.gm)(b);if("replaced"===i){try{await (0,e.Ce)(b)}catch(a){l.error("submit-clear-input-failed",{sessionName:b,cliToolId:d,error:a instanceof Error?a.message:String(a)})}throw(0,f.gm)(b),l.error("submit-replaced-by-tui-completion",{sessionName:b,cliToolId:d,attempt:a}),Error(`Message was replaced by a TUI autocompletion for session ${b}; the input no longer matches the sent text. Cleared the input line without submitting to avoid executing a different command.`)}l.warn("submit-not-confirmed:resending-enter",{sessionName:b,cliToolId:d,attempt:a}),await (0,e.KB)(b,["Enter"])}throw(0,f.gm)(b),l.error("submit-verification-failed",{sessionName:b,cliToolId:d,attempts:A}),Error(`Message submit could not be confirmed for session ${b} after ${A} attempts (typed but unsent)`)}},46749:(a,b,c)=>{c.d(b,{Y:()=>d});function d(a){return`clear 2>/dev/null; printf '\\033[3J'; ${a}`}},50945:(a,b,c)=>{c.d(b,{Q:()=>g,S:()=>h});var d=c(79892),e=c(11472),f=c(91536);async function g(a,b){let c;try{c=await (0,d.Xg)(a,{startLine:-b.probeCaptureLines})}catch{c=void 0}return"string"!=typeof c?b.unreadableIsExited?{alive:!1,reason:"capture error"}:{alive:!0}:(0,e.Hg)(c,b)}async function h(a,b){return g(a,(0,f.H7)(b))}},56717:(a,b,c)=>{c.d(b,{gc:()=>g});var d=c(16983);let e={reader:"input-line-marker",verifyCaptureLines:12,clearBeforeSend:!0,submitEnterCount:1},f={claude:e,codex:e,gemini:{...e,clearBeforeSend:!1},copilot:{...e,clearBeforeSend:!1},antigravity:{...e,clearBeforeSend:!1},"command-code":{...e,clearBeforeSend:!1},"vibe-local":{...e,clearBeforeSend:!1,submitEnterCount:2},opencode:{reader:"opencode-box",verifyCaptureLines:d.xT,clearBeforeSend:!1,submitEnterCount:1},"opencode-v2":{reader:"opencode-box",verifyCaptureLines:d.xT,clearBeforeSend:!1,submitEnterCount:1}};function g(a){return f[a]??e}},57905:(a,b,c)=>{c.d(b,{c0:()=>X,zw:()=>T,Yq:()=>U,pU:()=>W,R7:()=>V,VU:()=>Y});var d=c(79892),e=c(20967),f=c(11472),g=c(91536),h=c(50945),i=c(40236),j=c(93997),k=c(77093),l=c(20610),m=c(79646),n=c(28354),o=c(72626);let p=(0,o.h)("session-key-sender"),q=(0,n.promisify)(m.exec);async function r(a,b=50){let c=await (0,d.Xg)(a,{startLine:-b});return(0,e.aJ)(c)}async function s(a){await q("tmux set-environment -g -u CLAUDECODE 2>/dev/null || true"),await (0,d.V1)(a,"unset CLAUDECODE",!0),await new Promise(a=>setTimeout(a,l.Em))}async function t(a,b){let c=Date.now();for(;Date.now()-c<b;){let b=await r(a);if(e.hx.test(b))return;await new Promise(a=>setTimeout(a,200))}throw Error(`Prompt detection timeout (${b}ms)`)}async function u(a,b,c,f){if(!await (0,d.N)(a))throw Error(`Claude session ${a} does not exist. Start the session first.`);let g=await r(a);e.hx.test(g)||await t(a,f),await new Promise(a=>setTimeout(a,c)),await (0,i.FW)({sessionName:a,message:b,cliToolId:"claude"}),(0,j.gm)(a),p.info("sent-message-to-session",{sessionName:a})}async function v(a){try{await (0,d.N)(a)&&(await (0,d.V1)(a,"",!1),await (0,d.ds)(a,"C-d"),(0,j.gm)(a),await new Promise(a=>setTimeout(a,l.Zf)));let b=await (0,d.fY)(a);return b&&p.info("stopped-session",{sessionName:a}),b}catch(a){return p.error("session:stop-failed",{error:(0,k.u1)(a)}),!1}}var w=c(79748),x=c(31347),y=c(40964),z=c(22354),A=c(43252),B=c(80252),C=c(1305),D=c(48083),E=c(2669),F=c(46749);let G=(0,o.h)("claude-session"),H=(0,n.promisify)(m.exec);async function I(a,b,c){if(null!==c.pollsSinceAnswer&&c.pollsSinceAnswer++,null!==c.pollsSinceMove&&c.pollsSinceMove++,null===b)return;c.seen||(c.seen=!0,c.shellTellsExit=await K(a));let f=(0,e.lQ)(b);if(null!==f){if(1===f.length){if(!(null===c.pollsSinceAnswer||c.pollsSinceAnswer>=10&&c.answers<3))return;try{await (0,d.V1)(a,"",!0),c.pollsSinceAnswer=0,c.answers++,G.info("trust-dialog-detected",{keys:"Enter",attempt:c.answers})}catch{}return}if(null===c.pollsSinceMove||!(c.pollsSinceMove<3)){if(c.moves>=20)throw new E.mR("Claude Code",a,'trust dialog: cursor did not reach "Yes, I trust this folder"');try{await (0,d.KB)(a,[f[0]]),c.pollsSinceMove=0,c.moves++,G.info("trust-dialog-cursor-move",{key:f[0],attempt:c.moves})}catch{}}}}async function J(a){let b=await L(a);return null!==b&&(0,e.U1)(b)}async function K(a){let b=await L(a);return null!==b&&!(0,e.U1)(b)}async function L(a){try{let b=await (0,d.Hg)(a);return"string"==typeof b?b:null}catch{return null}}let M=(0,g.H7)("claude"),N=null;async function O(){if(N)return N;let a=process.env.CLAUDE_PATH;if(a&&(/^[/a-zA-Z0-9._-]+$/.test(a)?!a.includes("..")||(G.info("claudepath-contains-path"),!1):(G.info("claudepath-contains-invalid-characters-i"),!1)))try{return await (0,w.access)(a,w.constants.X_OK),N=a}catch{G.info("claudepath-is-not-executable:envclaudepa")}try{let{stdout:a}=await H("which claude",{timeout:5e3});return N=a.trim()}catch{for(let a of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await H(`test -x "${a}"`,{timeout:1e3}),N=a}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}async function P(a,b=50){let c=await (0,d.Xg)(a,{startLine:-b});return(0,e.aJ)(c)}async function Q(a){let b=await (0,h.Q)(a,M);return b.alive?{healthy:!0}:{healthy:!1,reason:b.reason}}async function R(a){return!!(await Q(a)).healthy||(G.warn("session-sessionname-unhealthy:resultreas"),await (0,d.fY)(a),!1)}function S(a,b){return(0,y.mf)("claude",a,b)}async function T(){try{return await H("which claude",{timeout:5e3}),!0}catch{return!1}}async function U(a,b){let c=S(a,b);return!!await (0,d.N)(c)&&(!!(await Q(c)).healthy||(G.warn("session-sessionname-unhealthy:resultreas"),!1))}async function V(a){let{worktreeId:b,worktreePath:c,instanceId:g,model:h}=a;if(void 0!==h){let a=(0,B.LB)(h);if(!a.valid)throw Error(`Invalid Claude model name: ${a.reason}`)}if(!await T())throw new E.lU("Claude Code","Claude CLI is not installed or not in PATH");let i=S(b,g);if(await (0,d.N)(i)&&(await (0,x.St)(i,c),await R(i))){await (0,d.zT)(i),G.info("claude-session-sessionname");return}(0,C.Fq)({worktreeId:b,cliToolId:z.vm,instanceId:g});try{await (0,d.jw)({sessionName:i,workingDirectory:c}),await s(i);let a=await O(),k=(0,C.wK)({target:{worktreeId:b,cliToolId:z.vm,instanceId:g},executablePath:a,worktreePath:c}),l=void 0===h?k:`${k} --model ${(0,A.ZL)(h)}`;await (0,d.V1)(i,(0,F.Y)(l),!0);let m=Date.now(),n=!1,o={pollsSinceAnswer:null,pollsSinceMove:null,answers:0,moves:0,seen:!1,shellTellsExit:!1};for(;Date.now()-m<6e4;){var j;await new Promise(a=>setTimeout(a,300));let a=null;try{a=await P(i)}catch{}if(null===a)continue;let b=(0,e.lX)(a);if(await I(i,b?a:null,o),!b&&e.hx.test(a)){await new Promise(a=>setTimeout(a,500)),G.info("claude-initialized-in"),n=!0;break}if(!b&&o.shellTellsExit&&await J(i))throw new E.mR("Claude Code",i,"trust dialog: Claude Code exited to the shell");let c=(j=a,(0,f.ow)(j,M));if(null!==c)throw new E.mR("Claude Code",i,c)}if(!n)throw new E.Sr("Claude Code",i,6e4);G.info("started-claude-session:sessionname")}catch(a){if(N=null,G.error("session:start-failed",{error:a instanceof Error?a.message:String(a)}),(0,E.su)(a))throw a;throw Error("Failed to start Claude session")}}async function W(a,b,c){let d=S(a,c);await u(d,b,500,1e4)}async function X(a,b=1e3,c){let e=S(a,c);if(!await (0,d.N)(e))throw Error(`Claude session ${e} does not exist`);try{return await (0,d.Xg)(e,{startLine:-b})}catch(a){throw Error(`Failed to capture Claude output: ${a instanceof Error?a.message:String(a)}`)}}async function Y(a,b){let c=S(a,b),d=await v(c);return(0,D.discardAgentEventState)(a,"claude",b),d}},77093:(a,b,c)=>{c.d(b,{u1:()=>d});function d(a){return a instanceof Error?a.message:String(a)}},87673:(a,b,c)=>{c.d(b,{sr:()=>i});var d=c(79892),e=c(93997),f=c(94154);let g=(0,c(72626).h)("composer-clear"),h=a=>new Promise(b=>setTimeout(b,a));async function i(a,b,c={}){let j=c.capture??(a=>(0,d.Xg)(a,200)),k=c.sendClear??d.ou,l=c.delay??h,m=c.maxPasses??12,n=0,o=(0,f.ji)(await j(a),b),p="content"===o.state?o.text:"";for(;"content"===o.state&&n<m;)await k(a),n++,await l(120),o=(0,f.ji)(await j(a),b);n>0&&(0,e.gm)(a);let q="empty"===o.state||"ghost"===o.state;return q||g.warn("composer-clear:not-cleared",{sessionName:a,cliToolId:b,passes:n,state:o.state}),{cleared:q,passes:n,state:o.state,remainingText:o.text,discardedText:p}}},91536:(a,b,c)=>{c.d(b,{H7:()=>i});var d=c(20967),e=c(11472);let f={probeCaptureLines:50,shellPromptEndings:e.Bl,maxShellPromptLength:e.w9,fatalPatterns:[],fatalRegexPatterns:[]},g={aliveTailLines:12,shellPromptPatterns:e.vg,unreadableIsExited:!1},h={claude:{...f,alivePatterns:[d.hx],aliveTailLines:null,shellPromptPatterns:e.vg,unreadableIsExited:!0,fatalPatterns:d.F0,fatalRegexPatterns:d.Fw},codex:{...f,...g,alivePatterns:[d.gm,d.sB,d.Mt]},copilot:{...f,...g,alivePatterns:[d.Du,d.Ub,d.tJ,d.rb]},opencode:{...f,...g,alivePatterns:[d.vU,d.uA,d.Cc,d.LO,d.a2]},gemini:{...f,...g,alivePatterns:[d.wN,d.s0]},antigravity:{...f,...g,alivePatterns:[d.lE,d.kT,d.VF]},"command-code":{...f,...g,alivePatterns:[d.WK,d.jk,d.k0]},"opencode-v2":{...f,...g,alivePatterns:[d.wK,d.c7,d.xL]},"vibe-local":{...f,...g,alivePatterns:[d.Dj,d.b2]}};function i(a){return h[a]??h.claude}}};
|
|
1
|
+
"use strict";exports.id=7905,exports.ids=[7905],exports.modules={1305:(a,b,c)=>{c.d(b,{Fq:()=>n,wK:()=>o});var d=c(22354),e=c(33294),f=c(88807),g=c(52660),h=c(54325),i=c(72626);let j=(0,i.h)("lib/session/session-generation-archive");var k=c(35583),l=c(27675);let m=(0,i.h)("lib/session/agent-session-lifecycle");function n(a,b=Date.now()){(0,k._U)(a.worktreeId,a.cliToolId,a.instanceId,b);let i=(0,e.getAgentEventDropCounts)(a.worktreeId,a.cliToolId,a.instanceId).decisionEvicted;(0,e.beginAgentEventGeneration)(a.worktreeId,a.cliToolId,a.instanceId,b),(0,l.eZ)(a.worktreeId,a.cliToolId,a.instanceId);let o=(0,e.getAgentEventDropCounts)(a.worktreeId,a.cliToolId,a.instanceId).decisionEvicted,p=(0,d.VM)(a.cliToolId);m.info("agent-session-generation-begun",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,transport:p.transport,decisionsEvicted:o-i});try{!function(a,b=process.env.VITEST?null:(0,f.getDbInstance)()){var d,e,i;let k=a.instanceId??a.cliToolId;if(!b)return;let l=(0,g.deleteMessagesByInstance)(b,a.worktreeId,k);0===l||((0,g.recomputeLastUserMessage)(b,a.worktreeId),j.info("session-generation-archived",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:k,archived:l}),d=a.worktreeId,e=a.cliToolId,i=k,Promise.all([c.e(1356),c.e(1503),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(8728)]).then(c.bind(c,43015)).then(({broadcastMessage:a})=>{a(h.dz,{worktreeId:d,cliToolId:e,instanceId:i,reason:"session_generation"})}).catch(a=>{j.warn("session-generation-invalidate-broadcast-failed",{worktreeId:d,instanceId:i,error:a instanceof Error?a.message:String(a)})}))}(a)}catch(b){m.warn("session-generation-archive-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}}function o(a){return(0,d.K9)((0,d.VM)(a.target.cliToolId).prepareLaunch(a))}},11472:(a,b,c)=>{c.d(b,{Bl:()=>e,GE:()=>j,Hg:()=>k,ow:()=>i,vg:()=>g,w9:()=>f});var d=c(51297);let e=["$","%","#"],f=40,g=[/^[\w.-]+@[\w.-]+[\s:].*[$%#]$/,/^\[[\w.-]+@[\w.-]+[^\]]*\][$#]$/];function h(a){return a.split("\n").filter(a=>""!==a.trim())}function i(a,b){let c=h(a.trim()).slice(-10).join("\n");for(let a of b.fatalPatterns)if(c.includes(a))return a;for(let a of b.fatalRegexPatterns)if(a.test(c))return a.source;return null}function j(a,b){let c=h(a.trim()),d=c[c.length-1]?.trim()??"";return!/\d+%$/.test(d)&&b.shellPromptPatterns.some(a=>a.test(d))?{line:d,via:"pattern"}:d.length>=b.maxShellPromptLength?null:b.shellPromptEndings.some(a=>!(!d.endsWith(a)||"%"===a&&/\d+%$/.test(d)))?{line:d,via:"ending"}:null}function k(a,b){let c=(0,d.aJ)(a).trim();if(""===c)return b.unreadableIsExited?{alive:!1,reason:"empty output"}:{alive:!0};let e=h(c),f=null===b.aliveTailLines?c:e.slice(-b.aliveTailLines).join("\n");if(b.alivePatterns.some(a=>a.test(f)))return{alive:!0};let g=i(c,b);if(null!==g)return{alive:!1,reason:`error pattern: ${g}`};let k=j(c,b);return null!==k?"pattern"===k.via?{alive:!1,reason:`shell prompt detected: ${k.line}`}:{alive:!1,reason:`shell prompt ending detected: ${k.line}`}:{alive:!0}}},20610:(a,b,c)=>{c.d(b,{CV:()=>i,D1:()=>p,Em:()=>q,Is:()=>g,KI:()=>j,Lw:()=>o,PY:()=>m,Rk:()=>l,Uc:()=>d,Zf:()=>h,kZ:()=>r,os:()=>k,pL:()=>e,x9:()=>f,yO:()=>n});let d=100,e=100,f=200,g=300,h=500,i=500,j=2e3,k=300,l=3e3,m=200,n=3e3,o=3e3,p=15e3,q=100,r=1e3},35583:(a,b,c)=>{c.d(b,{O5:()=>o,Bk:()=>q,Hb:()=>l,_U:()=>n,a3:()=>r,PS:()=>m,Gz:()=>s});var d=c(16698),e=c(24455),f=c(37717);c(15194);let g={claude:6e4};var h=c(36925);let i=(0,h.v)("__sessionStartingRecords",()=>new Map),j=(0,h.v)("__sessionStartingTokenSeq",()=>({last:0})),k=(0,h.v)("__sessionStartingTokenScope",()=>new d.AsyncLocalStorage);function l(){return j.last+=1,j.last}function m(a,b){return k.run(a,b)}function n(a,b,c,d=Date.now()){let f=k.getStore()??l(),g=(0,e.v7)(a,b,c),h=i.get(g);return void 0!==h&&h.token>f?null:(i.set(g,{cliToolId:b,token:f,since:d,promptSeenAt:null,released:!1}),f)}function o(a,b,c,d){try{let f=(0,e.v7)(a,b,c);if(void 0!==d&&i.get(f)?.token!==d)return;i.delete(f)}catch{}}function p(a,b,c){return void 0===b||b.released?null:c-b.since>(g[b.cliToolId]??3e4)+5e3?(i.delete(a),null):b.since}function q(a,b,c,d=Date.now()){let f=(0,e.v7)(a,b,c);return p(f,i.get(f),d)}function r(a,b,c,d,f=Date.now()){let g=(0,e.v7)(a,b,c),h=i.get(g),j=p(g,h,f);return null===j||void 0===h?null:d?(h.promptSeenAt??=f,f-h.promptSeenAt>=5e3)?(h.released=!0,null):j:(h.promptSeenAt=null,j)}function s(a){return{...a,status:"running",reason:f.g.STARTING,hasActivePrompt:!1,promptDetection:{...a.promptDetection,isPrompt:!1,promptData:void 0},evidence:"positive"}}},37717:(a,b,c)=>{c.d(b,{g:()=>d});let d={PROMPT_DETECTED:"prompt_detected",THINKING_INDICATOR:"thinking_indicator",OPENCODE_PROCESSING_INDICATOR:"opencode_processing_indicator",OPENCODE_SELECTION_LIST:"opencode_selection_list",OPENCODE_MODAL_OVERLAY:"opencode_modal_overlay",OPENCODE_PERMISSION_PROMPT:"opencode_permission_prompt",CLAUDE_SELECTION_LIST:"claude_selection_list",COMMAND_CODE_SELECTION_LIST:"command_code_selection_list",COMMAND_CODE_DISMISSABLE_PANEL:"command_code_dismissable_panel",COMMAND_CODE_PLAN_REVIEW:"command_code_plan_review",COPILOT_SELECTION_LIST:"copilot_selection_list",CODEX_SELECTION_LIST:"codex_selection_list",CODEX_PAGER:"codex_pager",CODEX_HOOKS_REVIEW:"codex_hooks_review",ANTIGRAVITY_SELECTION_LIST:"antigravity_selection_list",OPENCODE_RESPONSE_COMPLETE:"opencode_response_complete",INPUT_PROMPT:"input_prompt",NO_RECENT_OUTPUT:"no_recent_output",STARTING:"starting",EXITED:"exited",UNKNOWN_FRAME:"unknown_frame",DEFAULT:"default"}},40236:(a,b,c)=>{c.d(b,{FW:()=>F});var d=c(79646),e=c(79892),f=c(93997),g=c(56717),h=c(61789),i=c(20610),j=c(72626),k=c(87673),l=c(94154);let m=(0,j.h)("cli-tools/submit-verified-sender"),n=/\[Pasted text[\s#]/,o=0,p=/^\/[A-Za-z]/,q=/^\s*(?:ctx:\d+%\s*)?[>❯›]/;function r(a,b,c){if("opencode-box"===a){let a=(0,h.mu)(b);if(null===a)return{kind:"absent"};if(a.some(a=>h.vU.test(a)))return{kind:"empty"};let c=a.map(h.pV).find(a=>a.length>0);return void 0===c?{kind:"empty"}:{kind:"text",text:c,rows:a}}if("input-line-marker"!==a)return{kind:"absent"};let d=function(a){for(let b=a.length-1;b>=0;b--)if(q.test(a[b]))return a[b];return null}(c);if(null===d)return{kind:"absent"};let e=d.replace(q,"").trim();return 0===e.length?{kind:"empty"}:{kind:"text",text:e,rows:[d]}}function s(a){let b=a.length;for(;b>0&&""===a[b-1].trim();)b--;return a.slice(0,b)}function t(a){return a.split("\n").map(a=>a.trim()).find(a=>a.length>0)??""}function u(a,b){let c=t(b);return 0!==c.length&&c.startsWith(a)}let v=[{pattern:/\[Pasted text(?: #\d+)?(?: \+(\d+) lines?| (\d+) chars?)?\]/g,read:a=>void 0!==a[1]?{lines:Number(a[1])}:void 0!==a[2]?{chars:Number(a[2])}:{}},{pattern:/\[Pasted Content (\d+) chars?\]/g,read:a=>({chars:Number(a[1])})},{pattern:/\[([^\]\n]*?)… \+(\d+)L\]/g,read:a=>({head:a[1],lineTotal:Number(a[2])})}];function w(a){let b=[],c=a;for(let{pattern:d,read:e}of v)for(let f of a.matchAll(d))b.push(e(f)),c=c.replace(f[0],"");return{tokens:b,rest:c.trim()}}function x(a,b){return new Promise((c,e)=>{let f=d.execFile("tmux",a,{timeout:5e3},a=>{if(a)return void e(a);c()});void 0!==b&&f.stdin?.end(b)})}async function y(a,b){let c=`cm-send-${process.pid}-${++o}`;try{await x(["load-buffer","-b",c,"-"],b),await x(["paste-buffer","-p","-r","-d","-b",c,"-t",(0,e.lA)(a)])}catch(b){await x(["delete-buffer","-b",c]).catch(()=>void 0);let a=b instanceof Error?b.message:String(b);throw Error(`Failed to paste message into tmux session: ${a}`)}}function z(a,b){let c=s((0,h.aJ)(a).split("\n")),d=r(b.reader,c,c.slice(-12));return"absent"===d.kind?"no composer on screen":"empty"===d.kind?"an empty composer":JSON.stringify(d.text.length>80?`${d.text.slice(0,80)}…`:d.text)}async function A(a,b,c){try{c.clearBeforeSend?await (0,k.sr)(a,b):await (0,e.Ce)(a)}catch(c){m.error("paste-withdraw-failed",{sessionName:a,cliToolId:b,error:c instanceof Error?c.message:String(c)})}}async function B(a){let{sessionName:b,message:c,cliToolId:d,composer:i,attempts:j}=a,k="unseen",l="";for(let a=0;a<Math.max(1,j)&&(await new Promise(a=>setTimeout(a,100)),"landed"!==(k=function(a,b,c,d=(0,g.gc)(b)){let e=s((0,h.aJ)(a).split("\n")),f=r(d.reader,e,e.slice(-12));if("text"!==f.kind)return"unseen";let{tokens:i,rest:j}=w(f.text);return 0===i.length?u(f.text,c)?"landed":c.includes(f.text)?"mismatch":"unseen":i.length>1||""!==j?"mismatch":function(a,b){let c,d,e=(b.match(/\n/g)??[]).length;if(void 0!==a.head){let c=a.head.replace(/\s+/g," ").trim();if(!b.replace(/\s+/g," ").startsWith(c))return"mismatch"}if(void 0!==a.chars)c=a.chars,d=[[...b].length,b.length];else if(void 0!==a.lineTotal)c=a.lineTotal,d=[e+1];else{if(void 0===a.lines)return 0===e?"landed":"pasting";c=a.lines,d=[e,e+1]}return d.includes(c)?"landed":c<Math.min(...d)?"pasting":"mismatch"}(i[0],c)}(l=await (0,e.Xg)(b,{startLine:-i.verifyCaptureLines}),d,c,i))&&"mismatch"!==k);a++);if("landed"===k)return;if("unseen"===k&&!i.clearBeforeSend)return void m.warn("paste-landed-unverified",{sessionName:b,cliToolId:d,bytes:Buffer.byteLength(c,"utf8")});let n=Buffer.byteLength(c,"utf8"),o=c.split("\n").length,p=z(l,i);await A(b,d,i),(0,f.gm)(b),m.error("paste-not-landed",{sessionName:b,cliToolId:d,state:k,bytes:n,lines:o,shown:p});let q="mismatch"===k?`the composer does not hold the message as sent (it shows ${p})`:"pasting"===k?`the paste had not finished arriving after ${100*j}ms (the composer shows ${p})`:`the message never appeared in the composer (${p})`;throw Error(`Message body did not arrive intact for session ${b}: ${q}; the message is ${n} bytes / ${o} lines. Enter was not pressed, so nothing was submitted (Issue #2464).`)}function C(a){return a.replace(/\s+/g,"")}async function D(a){let{sessionName:b,message:c,cliToolId:d,composer:g,attempts:h}=a,i=C(function(a){let b=a.split("\n"),c=b.findIndex(a=>""!==a.trim());if(c<0)return"";let d=b.findIndex((a,b)=>b>c&&""===a.trim());return b.slice(0,d<0?b.length:d).join("\n")}(c));if(""===i)return;let j="";for(let a=0;a<Math.max(1,h);a++){await new Promise(a=>setTimeout(a,50)),j=await (0,e.Xg)(b,{startLine:-g.verifyCaptureLines});let a=(0,l.ji)(j,d);if("content"===a.state&&C(a.text)===i)return}let k=Buffer.byteLength(c,"utf8"),n=z(j,g);throw await A(b,d,g),(0,f.gm)(b),m.error("typed-body-not-landed",{sessionName:b,cliToolId:d,bytes:k,attempts:h,shown:n}),Error(`Message body did not appear in the composer for session ${b} within ${50*h}ms (it shows ${n}); the message is ${k} bytes. Enter was not pressed, so nothing was submitted (Issue #3366).`)}async function E(a,b,c=(0,g.gc)(b)){if(!c.clearBeforeSend)return;let d=await (0,k.sr)(a,b);if("content"===d.state)throw m.error("pre-send-composer-clear-failed",{sessionName:a,cliToolId:b,passes:d.passes,remainingLength:d.remainingText.length,remainingText:d.remainingText}),Error(`Composer for session ${a} still holds unsent text after ${d.passes} clear passes; refusing to type the message, which would be concatenated with it (Issue #1880).`);d.passes>0&&m.warn("pre-send-composer-cleared",{sessionName:a,cliToolId:b,passes:d.passes,state:d.state,discardedLength:d.discardedText.length,discardedText:d.discardedText})}async function F(a){let{sessionName:b,message:c,cliToolId:d,composer:j=(0,g.gc)(d),textInputWaitMs:k=i.pL,interEnterWaitMs:o=i.pL,verifyAttempts:q=4,verifyDelayMs:v=i.x9,pasteLandedAttempts:x=20,awaitTypedBody:z=!1,typedBodyAttempts:A=100}=a,C=a.submitEnterCount??j.submitEnterCount;if(await E(b,d,j),Buffer.byteLength(c,"utf8")>512){let a=Date.now();await y(b,c),await B({sessionName:b,message:c,cliToolId:d,composer:j,attempts:x});let e=k-(Date.now()-a);e>0&&await new Promise(a=>setTimeout(a,e))}else{let a=Date.now();await (0,e.V1)(b,c,!1,{literal:!0}),z&&l.wn.has(d)&&await D({sessionName:b,message:c,cliToolId:d,composer:j,attempts:A});let f=k-(Date.now()-a);f>0&&await new Promise(a=>setTimeout(a,f))}for(let a=0;a<Math.max(1,C);a++)await (0,e.KB)(b,["Enter"]),a<C-1&&await new Promise(a=>setTimeout(a,o));let F=Math.max(1,q);for(let a=0;a<F;a++){await new Promise(a=>setTimeout(a,v));let i=function(a,b,c,d=(0,g.gc)(b)){let e=s((0,h.aJ)(a).split("\n")),f=e.slice(-12),i=f.join("\n");if((0,h.ut)(b,i))return"submitted";let j=function(a,b,c,d,e){if("codex"===b&&"input-line-marker"===c){let c=(0,l.ji)(a,b);if("content"===c.state&&c.text.includes("\n"))return{kind:"text",text:t(c.text),rows:c.text.split("\n")}}return r(c,d,e)}(a,b,d.reader,e,f);return"text"!==j.kind?"submitted":j.rows.some(a=>n.test(a)||w(a).tokens.length>0)||u(j.text,c)?"pending":p.test(j.text)?"replaced":"submitted"}(await (0,e.Xg)(b,{startLine:-j.verifyCaptureLines}),d,c,j);if("submitted"===i)return void(0,f.gm)(b);if("replaced"===i){try{await (0,e.Ce)(b)}catch(a){m.error("submit-clear-input-failed",{sessionName:b,cliToolId:d,error:a instanceof Error?a.message:String(a)})}throw(0,f.gm)(b),m.error("submit-replaced-by-tui-completion",{sessionName:b,cliToolId:d,attempt:a}),Error(`Message was replaced by a TUI autocompletion for session ${b}; the input no longer matches the sent text. Cleared the input line without submitting to avoid executing a different command.`)}m.warn("submit-not-confirmed:resending-enter",{sessionName:b,cliToolId:d,attempt:a}),await (0,e.KB)(b,["Enter"])}throw(0,f.gm)(b),m.error("submit-verification-failed",{sessionName:b,cliToolId:d,attempts:F}),Error(`Message submit could not be confirmed for session ${b} after ${F} attempts (typed but unsent)`)}},46749:(a,b,c)=>{c.d(b,{Y:()=>d});function d(a){return`clear 2>/dev/null; printf '\\033[3J'; ${a}`}},50945:(a,b,c)=>{c.d(b,{Q:()=>g,S:()=>h});var d=c(79892),e=c(11472),f=c(91536);async function g(a,b){let c;try{c=await (0,d.Xg)(a,{startLine:-b.probeCaptureLines})}catch{c=void 0}return"string"!=typeof c?b.unreadableIsExited?{alive:!1,reason:"capture error"}:{alive:!0}:(0,e.Hg)(c,b)}async function h(a,b){return g(a,(0,f.H7)(b))}},56717:(a,b,c)=>{c.d(b,{gc:()=>g});var d=c(16983);let e={reader:"input-line-marker",verifyCaptureLines:12,clearBeforeSend:!0,submitEnterCount:1},f={claude:e,codex:e,gemini:{...e,clearBeforeSend:!1},copilot:{...e,clearBeforeSend:!1},antigravity:{...e,clearBeforeSend:!1},"command-code":{...e,clearBeforeSend:!1},"vibe-local":{...e,clearBeforeSend:!1,submitEnterCount:2},opencode:{reader:"opencode-box",verifyCaptureLines:d.xT,clearBeforeSend:!1,submitEnterCount:1},"opencode-v2":{reader:"opencode-box",verifyCaptureLines:d.xT,clearBeforeSend:!1,submitEnterCount:1}};function g(a){return f[a]??e}},57905:(a,b,c)=>{c.d(b,{c0:()=>X,zw:()=>T,Yq:()=>U,pU:()=>W,R7:()=>V,VU:()=>Y});var d=c(79892),e=c(61789),f=c(11472),g=c(91536),h=c(50945),i=c(40236),j=c(93997),k=c(77093),l=c(20610),m=c(79646),n=c(28354),o=c(72626);let p=(0,o.h)("session-key-sender"),q=(0,n.promisify)(m.exec);async function r(a,b=50){let c=await (0,d.Xg)(a,{startLine:-b});return(0,e.aJ)(c)}async function s(a){await q("tmux set-environment -g -u CLAUDECODE 2>/dev/null || true"),await (0,d.V1)(a,"unset CLAUDECODE",!0),await new Promise(a=>setTimeout(a,l.Em))}async function t(a,b){let c=Date.now();for(;Date.now()-c<b;){let b=await r(a);if(e.hx.test(b))return;await new Promise(a=>setTimeout(a,200))}throw Error(`Prompt detection timeout (${b}ms)`)}async function u(a,b,c,f){if(!await (0,d.N)(a))throw Error(`Claude session ${a} does not exist. Start the session first.`);let g=await r(a);e.hx.test(g)||await t(a,f),await new Promise(a=>setTimeout(a,c)),await (0,i.FW)({sessionName:a,message:b,cliToolId:"claude"}),(0,j.gm)(a),p.info("sent-message-to-session",{sessionName:a})}async function v(a){try{await (0,d.N)(a)&&(await (0,d.V1)(a,"",!1),await (0,d.ds)(a,"C-d"),(0,j.gm)(a),await new Promise(a=>setTimeout(a,l.Zf)));let b=await (0,d.fY)(a);return b&&p.info("stopped-session",{sessionName:a}),b}catch(a){return p.error("session:stop-failed",{error:(0,k.u1)(a)}),!1}}var w=c(79748),x=c(31347),y=c(40964),z=c(22354),A=c(43252),B=c(80252),C=c(1305),D=c(33294),E=c(2669),F=c(46749);let G=(0,o.h)("claude-session"),H=(0,n.promisify)(m.exec);async function I(a,b,c){if(null!==c.pollsSinceAnswer&&c.pollsSinceAnswer++,null!==c.pollsSinceMove&&c.pollsSinceMove++,null===b)return;c.seen||(c.seen=!0,c.shellTellsExit=await K(a));let f=(0,e.lQ)(b);if(null!==f){if(1===f.length){if(!(null===c.pollsSinceAnswer||c.pollsSinceAnswer>=10&&c.answers<3))return;try{await (0,d.V1)(a,"",!0),c.pollsSinceAnswer=0,c.answers++,G.info("trust-dialog-detected",{keys:"Enter",attempt:c.answers})}catch{}return}if(null===c.pollsSinceMove||!(c.pollsSinceMove<3)){if(c.moves>=20)throw new E.mR("Claude Code",a,'trust dialog: cursor did not reach "Yes, I trust this folder"');try{await (0,d.KB)(a,[f[0]]),c.pollsSinceMove=0,c.moves++,G.info("trust-dialog-cursor-move",{key:f[0],attempt:c.moves})}catch{}}}}async function J(a){let b=await L(a);return null!==b&&(0,e.U1)(b)}async function K(a){let b=await L(a);return null!==b&&!(0,e.U1)(b)}async function L(a){try{let b=await (0,d.Hg)(a);return"string"==typeof b?b:null}catch{return null}}let M=(0,g.H7)("claude"),N=null;async function O(){if(N)return N;let a=process.env.CLAUDE_PATH;if(a&&(/^[/a-zA-Z0-9._-]+$/.test(a)?!a.includes("..")||(G.info("claudepath-contains-path"),!1):(G.info("claudepath-contains-invalid-characters-i"),!1)))try{return await (0,w.access)(a,w.constants.X_OK),N=a}catch{G.info("claude-path-env-not-executable")}try{let{stdout:a}=await H("which claude",{timeout:5e3});return N=a.trim()}catch{for(let a of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await H(`test -x "${a}"`,{timeout:1e3}),N=a}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}async function P(a,b=50){let c=await (0,d.Xg)(a,{startLine:-b});return(0,e.aJ)(c)}async function Q(a){let b=await (0,h.Q)(a,M);return b.alive?{healthy:!0}:{healthy:!1,reason:b.reason}}async function R(a){return!!(await Q(a)).healthy||(G.warn("claude-session-unhealthy"),await (0,d.fY)(a),!1)}function S(a,b){return(0,y.mf)("claude",a,b)}async function T(){try{return await H("which claude",{timeout:5e3}),!0}catch{return!1}}async function U(a,b){let c=S(a,b);return!!await (0,d.N)(c)&&(!!(await Q(c)).healthy||(G.warn("claude-session-unhealthy"),!1))}async function V(a){let{worktreeId:b,worktreePath:c,instanceId:g,model:h}=a;if(void 0!==h){let a=(0,B.LB)(h);if(!a.valid)throw Error(`Invalid Claude model name: ${a.reason}`)}if(!await T())throw new E.lU("Claude Code","Claude CLI is not installed or not in PATH");let i=S(b,g);if(await (0,d.N)(i)&&(await (0,x.St)(i,c),await R(i))){await (0,d.zT)(i),G.info("claude-session-exists");return}(0,C.Fq)({worktreeId:b,cliToolId:z.vm,instanceId:g});try{let a=await O(),k=(0,C.wK)({target:{worktreeId:b,cliToolId:z.vm,instanceId:g},executablePath:a,worktreePath:c}),l=void 0===h?k:`${k} --model ${(0,A.ZL)(h)}`;await (0,d.jw)({sessionName:i,workingDirectory:c}),await s(i),await (0,d.V1)(i,(0,F.Y)(l),!0);let m=Date.now(),n=!1,o={pollsSinceAnswer:null,pollsSinceMove:null,answers:0,moves:0,seen:!1,shellTellsExit:!1};for(;Date.now()-m<6e4;){var j;await new Promise(a=>setTimeout(a,300));let a=null;try{a=await P(i)}catch{}if(null===a)continue;let b=(0,e.lX)(a);if(await I(i,b?a:null,o),!b&&e.hx.test(a)){await new Promise(a=>setTimeout(a,500)),G.info("claude-initialized"),n=!0;break}if(!b&&o.shellTellsExit&&await J(i))throw new E.mR("Claude Code",i,"trust dialog: Claude Code exited to the shell");let c=(j=a,(0,f.ow)(j,M));if(null!==c)throw new E.mR("Claude Code",i,c)}if(!n)throw new E.Sr("Claude Code",i,6e4);G.info("started-claude-session")}catch(a){if(N=null,G.error("session:start-failed",{error:a instanceof Error?a.message:String(a)}),(0,E.su)(a))throw a;throw Error("Failed to start Claude session")}}async function W(a,b,c){let d=S(a,c);await u(d,b,500,1e4)}async function X(a,b=1e3,c){let e=S(a,c);if(!await (0,d.N)(e))throw Error(`Claude session ${e} does not exist`);try{return await (0,d.Xg)(e,{startLine:-b})}catch(a){throw Error(`Failed to capture Claude output: ${a instanceof Error?a.message:String(a)}`)}}async function Y(a,b){let c=S(a,b),d=await v(c);return(0,D.discardAgentEventState)(a,"claude",b),d}},77093:(a,b,c)=>{c.d(b,{u1:()=>d});function d(a){return a instanceof Error?a.message:String(a)}},87673:(a,b,c)=>{c.d(b,{sr:()=>i});var d=c(79892),e=c(93997),f=c(94154);let g=(0,c(72626).h)("composer-clear"),h=a=>new Promise(b=>setTimeout(b,a));async function i(a,b,c={}){let j=c.capture??(a=>(0,d.Xg)(a,200)),k=c.sendClear??d.ou,l=c.delay??h,m=c.maxPasses??12,n=0,o=(0,f.ji)(await j(a),b),p="content"===o.state?o.text:"";for(;"content"===o.state&&n<m;)await k(a),n++,await l(120),o=(0,f.ji)(await j(a),b);n>0&&(0,e.gm)(a);let q="empty"===o.state||"ghost"===o.state;return q||g.warn("composer-clear:not-cleared",{sessionName:a,cliToolId:b,passes:n,state:o.state}),{cleared:q,passes:n,state:o.state,remainingText:o.text,discardedText:p}}},91536:(a,b,c)=>{c.d(b,{H7:()=>i});var d=c(61789),e=c(11472);let f={probeCaptureLines:50,shellPromptEndings:e.Bl,maxShellPromptLength:e.w9,fatalPatterns:[],fatalRegexPatterns:[]},g={aliveTailLines:12,shellPromptPatterns:e.vg,unreadableIsExited:!1},h={claude:{...f,alivePatterns:[d.hx],aliveTailLines:null,shellPromptPatterns:e.vg,unreadableIsExited:!0,fatalPatterns:d.F0,fatalRegexPatterns:d.Fw},codex:{...f,...g,alivePatterns:[d.gm,d.sB,d.Mt]},copilot:{...f,...g,alivePatterns:[d.Du,d.Ub,d.tJ,d.rb]},opencode:{...f,...g,alivePatterns:[d.vU,d.uA,d.Cc,d.LO,d.a2]},gemini:{...f,...g,alivePatterns:[d.wN,d.s0]},antigravity:{...f,...g,alivePatterns:[d.lE,d.kT,d.VF]},"command-code":{...f,...g,alivePatterns:[d.WK,d.jk,d.k0]},"opencode-v2":{...f,...g,alivePatterns:[d.wK,d.c7,d.xL]},"vibe-local":{...f,...g,alivePatterns:[d.Dj,d.b2]}};function i(a){return h[a]??h.claude}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=850,exports.ids=[850,9130],exports.modules={2669:(a,b,c)=>{c.d(b,{JI:()=>n,M7:()=>d,Sr:()=>h,Zf:()=>f,c7:()=>e,lU:()=>k,mR:()=>j,qO:()=>i,su:()=>m,wQ:()=>l});let d="SESSION_STARTING",e="SESSION_START_FAILED",f="SESSION_START_UNAVAILABLE",g=[d,e];class h extends Error{constructor(a,b,c){super(`${a} did not reach its input prompt within ${Math.round(c/1e3)}s (initialization timeout). The tmux session '${b}' and its process are still running, so this is a slow start, not a failed one — the message was not delivered, but nothing needs repairing. Retry the send in a few seconds, or run \`commandmate capture <worktree-id>\` to see what it is waiting on.`),this.toolName=a,this.sessionName=b,this.timeoutMs=c,this.code=d,this.name="SessionStartTimeoutError"}}function i(a,b){return`${a} exited before reaching its input prompt: the tmux session '${b}' is back at a shell, so this is not a slow start and waiting will not help. The message was not delivered. Run \`commandmate capture <worktree-id>\` to see why it exited (for example a startup dialog answered with exit, or a missing login), fix that, then send again.`}class j extends Error{constructor(a,b,c){super(`${a} reported an error while starting in tmux session '${b}': "${c}". Retrying will not help until that is resolved; run \`commandmate capture <worktree-id>\` to see the session output.`),this.toolName=a,this.sessionName=b,this.detectedPattern=c,this.code=e,this.name="SessionStartFailedError"}}class k extends Error{constructor(a,b=`${a} is not installed. Please install it first.`){super(b),this.toolName=a,this.code=f,this.name="SessionStartUnavailableError"}}function l(a){return o(a)===d}function m(a){let b=o(a);return void 0!==b&&g.includes(b)}function n(a){return o(a)===f}function o(a){if("object"!=typeof a||null===a)return;let b=a.code;return"string"==typeof b?b:void 0}},22354:(a,b,c)=>{c.d(b,{F0:()=>j.F,K9:()=>e.K9,VM:()=>d.VM,_0:()=>f._0,c1:()=>k.c,o:()=>i.o,vm:()=>h.v,y_:()=>g.y_});var d=c(
|
|
1
|
+
"use strict";exports.id=850,exports.ids=[850,9130],exports.modules={2669:(a,b,c)=>{c.d(b,{JI:()=>n,M7:()=>d,Sr:()=>h,Zf:()=>f,c7:()=>e,lU:()=>k,mR:()=>j,qO:()=>i,su:()=>m,wQ:()=>l});let d="SESSION_STARTING",e="SESSION_START_FAILED",f="SESSION_START_UNAVAILABLE",g=[d,e];class h extends Error{constructor(a,b,c){super(`${a} did not reach its input prompt within ${Math.round(c/1e3)}s (initialization timeout). The tmux session '${b}' and its process are still running, so this is a slow start, not a failed one — the message was not delivered, but nothing needs repairing. Retry the send in a few seconds, or run \`commandmate capture <worktree-id>\` to see what it is waiting on.`),this.toolName=a,this.sessionName=b,this.timeoutMs=c,this.code=d,this.name="SessionStartTimeoutError"}}function i(a,b){return`${a} exited before reaching its input prompt: the tmux session '${b}' is back at a shell, so this is not a slow start and waiting will not help. The message was not delivered. Run \`commandmate capture <worktree-id>\` to see why it exited (for example a startup dialog answered with exit, or a missing login), fix that, then send again.`}class j extends Error{constructor(a,b,c){super(`${a} reported an error while starting in tmux session '${b}': "${c}". Retrying will not help until that is resolved; run \`commandmate capture <worktree-id>\` to see the session output.`),this.toolName=a,this.sessionName=b,this.detectedPattern=c,this.code=e,this.name="SessionStartFailedError"}}class k extends Error{constructor(a,b=`${a} is not installed. Please install it first.`){super(b),this.toolName=a,this.code=f,this.name="SessionStartUnavailableError"}}function l(a){return o(a)===d}function m(a){let b=o(a);return void 0!==b&&g.includes(b)}function n(a){return o(a)===f}function o(a){if("object"!=typeof a||null===a)return;let b=a.code;return"string"==typeof b?b:void 0}},22354:(a,b,c)=>{c.d(b,{F0:()=>j.F,K9:()=>e.K9,VM:()=>d.VM,_0:()=>f._0,c1:()=>k.c,o:()=>i.o,vm:()=>h.v,y_:()=>g.y_});var d=c(56365);c(66101);var e=c(45567);c(57510),c(38367);var f=c(25071),g=c(50474),h=c(70997),i=c(77904),j=c(76835),k=c(2734)},50474:(a,b,c)=>{c.d(b,{y_:()=>d});function d(a){var b=a.noDecision;switch(b.kind){case"proceeds":return{safe:!0,blocksForMs:0,summary:"the agent continues with its own approval flow"};case"blocks":return{safe:!1,blocksForMs:null,summary:"the agent waits indefinitely; nothing else will unblock it"};case"blocksUntil":return{safe:!1,blocksForMs:b.timeoutMs,summary:`the agent waits up to ${b.timeoutMs}ms before continuing`}}}},58707:(a,b,c)=>{c.d(b,{$n:()=>k,a3:()=>l,br:()=>m});var d=c(8360),e=c(31990),f=c(95595),g=c(34405),h=c(72626),i=c(30008);let j=(0,h.h)("prompt-waiting-guard"),k="PROMPT_WAITING";async function l(a,b,c,h){try{let k=d.CLIToolManager.getInstance().getTool(b);if(!await k.isRunning(a,c))return{waiting:!1};let l=await (0,e.Wh)(a,b,g._,c),m=(0,f.WC)(l,b),n=(0,i._G)({worktreeId:a,cliToolId:b,instanceId:c,scraper:{status:m.status,reason:m.reason,hasActivePrompt:m.hasActivePrompt},ignoreStructured:h?.ignoreStructured});if(!n.blocksSend)return null!==n.structuredSendBlockSuppressed&&j.info("structured-send-guard-not-applied",{worktreeId:a,cliToolId:b,instanceId:c,suppressed:n.structuredSendBlockSuppressed,promptWaitingSince:n.structured?.at??null}),{waiting:!1};return{waiting:!0,reason:n.blockReason??void 0,blockedBy:n.blockedBy??void 0}}catch(c){return j.warn("prompt-waiting-check-failed",{worktreeId:a,cliToolId:b,error:c instanceof Error?c.message:String(c)}),{waiting:!1}}}function m(a,b){let c=`${a} is waiting on a prompt. Sending now would type into the prompt's input line instead of reaching the agent, and would leave that text in place for the next answer. Answer the prompt first: \`commandmate respond ${a} <answer>\`.`;if("structured"!==b)return c;let d=Math.round(i.j0/6e4);return`${c} This dialog was reported by the agent's own hooks and is not visible to the terminal scraper, so if the pane looks idle the record has outlived its dialog: it stops blocking sends ${d} minutes after it was reported, or immediately with \`commandmate send ${a} <message> --ignore-structured-prompt\` (server-wide: ${i.F1}=off).`}}};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
exports.id=8728,exports.ids=[8728],exports.modules={3453:(a,b,c)=>{"use strict";c.d(b,{Rh:()=>r,T1:()=>o,Z2:()=>m,c$:()=>n,nu:()=>q});var d=c(72626),e=c(80438);let f=(0,d.h)("ip-restriction"),g="::ffff:",h=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,i=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,2})$/,j=process.env.CM_ALLOWED_IPS?.trim()||"",k=process.env.CM_TRUST_PROXY?.trim()||"";""!==k&&"true"!==k&&"false"!==k&&(0,e.h)(f,"trust-proxy-unexpected",{value:k});let l="true"===k;function m(a){return a?a.toLowerCase().startsWith(g)?a.substring(g.length):a:""}function n(a,b){if(0===b.length)return!1;let c=function(a){let b=a.match(h);if(!b)return null;let c=[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10),parseInt(b[4],10)];for(let a of c)if(a<0||a>255)return null;return(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0}(m(a));if(null===c)return!1;for(let a of b)if((c&a.mask)>>>0===a.network)return!0;return!1}function o(a){if(l){let b=a.get("x-forwarded-for");if(b){let a=b.split(",")[0].trim();if(a)return a}}return a.get("x-real-ip")||null}let p=j.length>0?function(a){let b=a.trim();if(0===b.length)return[];let c=b.split(",").map(a=>a.trim()).filter(a=>a.length>0);if(c.length>256)throw Error(`CM_ALLOWED_IPS: too many entries (${c.length}). Maximum is 256.`);let d=[];for(let a of c){if(a.length>18)throw Error(`CM_ALLOWED_IPS: entry "${a}" exceeds maximum length of 18 characters.`);let b=a.match(i);if(b){let c=[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10),parseInt(b[4],10)],e=parseInt(b[5],10);for(let b of c)if(b<0||b>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${a}". Octets must be 0-255.`);if(e<0||e>32)throw Error(`CM_ALLOWED_IPS: invalid prefix length in "${a}". Must be 0-32.`);let f=(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0,g=0===e?0:0xffffffff<<32-e>>>0;d.push({network:(f&g)>>>0,mask:g});continue}let c=a.match(h);if(c){let b=[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10),parseInt(c[4],10)];for(let c of b)if(c<0||c>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${a}". Octets must be 0-255.`);let e=(b[0]<<24|b[1]<<16|b[2]<<8|b[3])>>>0;d.push({network:e,mask:0xffffffff});continue}throw Error(`CM_ALLOWED_IPS: invalid entry "${a}". Expected IPv4 address or CIDR notation.`)}return d}(j):[];function q(){return p}function r(){return j.length>0}},7015:(a,b,c)=>{"use strict";c.d(b,{Ds:()=>g});var d=c(81719);class e{constructor(a,b=3e4){this.cache=new Map,this.allAppsCache=null,this.lastRefresh=0,this.db=a,this.ttl=b}getTTL(){return this.ttl}isStale(){return Date.now()-this.lastRefresh>this.ttl}async refresh(){let a=(0,d.$i)(this.db);for(let b of(this.cache.clear(),a))this.cache.set(b.pathPrefix,b);this.allAppsCache=a,this.lastRefresh=Date.now()}async getByPathPrefix(a){return this.isStale()&&await this.refresh(),this.cache.get(a)??null}async getAll(){return this.isStale()&&await this.refresh(),this.allAppsCache??[]}invalidate(){this.cache.clear(),this.allAppsCache=null,this.lastRefresh=0}invalidateByIssueNo(a){this.invalidate()}}let f=null;function g(a){if(!f){if(!a)throw Error("Database instance required to initialize cache");f=new e(a)}return f}},23854:(a,b,c)=>{"use strict";c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},26838:(a,b,c)=>{"use strict";c.d(b,{E2:()=>
|
|
1
|
+
exports.id=8728,exports.ids=[8728],exports.modules={3453:(a,b,c)=>{"use strict";c.d(b,{Rh:()=>r,T1:()=>o,Z2:()=>m,c$:()=>n,nu:()=>q});var d=c(72626),e=c(80438);let f=(0,d.h)("ip-restriction"),g="::ffff:",h=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,i=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,2})$/,j=process.env.CM_ALLOWED_IPS?.trim()||"",k=process.env.CM_TRUST_PROXY?.trim()||"";""!==k&&"true"!==k&&"false"!==k&&(0,e.h)(f,"trust-proxy-unexpected",{value:k});let l="true"===k;function m(a){return a?a.toLowerCase().startsWith(g)?a.substring(g.length):a:""}function n(a,b){if(0===b.length)return!1;let c=function(a){let b=a.match(h);if(!b)return null;let c=[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10),parseInt(b[4],10)];for(let a of c)if(a<0||a>255)return null;return(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0}(m(a));if(null===c)return!1;for(let a of b)if((c&a.mask)>>>0===a.network)return!0;return!1}function o(a){if(l){let b=a.get("x-forwarded-for");if(b){let a=b.split(",")[0].trim();if(a)return a}}return a.get("x-real-ip")||null}let p=j.length>0?function(a){let b=a.trim();if(0===b.length)return[];let c=b.split(",").map(a=>a.trim()).filter(a=>a.length>0);if(c.length>256)throw Error(`CM_ALLOWED_IPS: too many entries (${c.length}). Maximum is 256.`);let d=[];for(let a of c){if(a.length>18)throw Error(`CM_ALLOWED_IPS: entry "${a}" exceeds maximum length of 18 characters.`);let b=a.match(i);if(b){let c=[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10),parseInt(b[4],10)],e=parseInt(b[5],10);for(let b of c)if(b<0||b>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${a}". Octets must be 0-255.`);if(e<0||e>32)throw Error(`CM_ALLOWED_IPS: invalid prefix length in "${a}". Must be 0-32.`);let f=(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0,g=0===e?0:0xffffffff<<32-e>>>0;d.push({network:(f&g)>>>0,mask:g});continue}let c=a.match(h);if(c){let b=[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10),parseInt(c[4],10)];for(let c of b)if(c<0||c>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${a}". Octets must be 0-255.`);let e=(b[0]<<24|b[1]<<16|b[2]<<8|b[3])>>>0;d.push({network:e,mask:0xffffffff});continue}throw Error(`CM_ALLOWED_IPS: invalid entry "${a}". Expected IPv4 address or CIDR notation.`)}return d}(j):[];function q(){return p}function r(){return j.length>0}},7015:(a,b,c)=>{"use strict";c.d(b,{Ds:()=>g});var d=c(81719);class e{constructor(a,b=3e4){this.cache=new Map,this.allAppsCache=null,this.lastRefresh=0,this.db=a,this.ttl=b}getTTL(){return this.ttl}isStale(){return Date.now()-this.lastRefresh>this.ttl}async refresh(){let a=(0,d.$i)(this.db);for(let b of(this.cache.clear(),a))this.cache.set(b.pathPrefix,b);this.allAppsCache=a,this.lastRefresh=Date.now()}async getByPathPrefix(a){return this.isStale()&&await this.refresh(),this.cache.get(a)??null}async getAll(){return this.isStale()&&await this.refresh(),this.allAppsCache??[]}invalidate(){this.cache.clear(),this.allAppsCache=null,this.lastRefresh=0}invalidateByIssueNo(a){this.invalidate()}}let f=null;function g(a){if(!f){if(!a)throw Error("Database instance required to initialize cache");f=new e(a)}return f}},23854:(a,b,c)=>{"use strict";c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},26838:(a,b,c)=>{"use strict";c.d(b,{E2:()=>q,MQ:()=>m,Mj:()=>o,Sw:()=>n,lX:()=>r});var d=c(29021),e=c(33873),f=c(54325),g=c(90164),h=c(36925);let i=/^v?\d+\.\d+\.\d+$/,j=/^[a-zA-Z0-9.\-\s_v]+$/,k=[".next","required-server-files.json"],l=(0,h.v)("__versionCheckCache",()=>({result:null,fetchedAt:0,rateLimitResetAt:null}));function m(a,b){if(!i.test(a)||!i.test(b))return!1;let c=a=>a.replace(/^v/,"").split(".").map(Number),[d,e,f]=c(a),[g,h,j]=c(b);return g!==d?g>d:h!==e?h>e:j>f}function n(){return function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),"package.json"),"utf-8"),b=JSON.parse(a);if("commandmate"===b.name&&"string"==typeof b.version&&b.version.length>0)return b.version;return null}catch{return null}}()??"0.44.3"}function o(){return n()}let p=null;function q(a){let b=p??=function(){{let a=function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),...k),"utf-8"),b=JSON.parse(a),c=b.config?.env?.NEXT_PUBLIC_APP_VERSION;if("string"==typeof c&&c.length>0)return c;return null}catch{return null}}();if(a)return a}return"0.44.3"}();return(0,f.LE)(b,a)?{serverVersion:b,clientVersion:a}:null}async function r(){try{var a,b,c;if(null!==l.result&&Date.now()-l.fetchedAt<36e5||l.rateLimitResetAt&&(!(Date.now()>=l.rateLimitResetAt)||(l.rateLimitResetAt=null,0)))return l.result;let d=await fetch("https://api.github.com/repos/Kewton/CommandMate/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":`CommandMate/${o()}`},cache:"no-store",signal:AbortSignal.timeout(5e3)});if(403===d.status)return function(a){let b=a.headers.get("X-RateLimit-Reset");b?l.rateLimitResetAt=1e3*parseInt(b,10):l.rateLimitResetAt=Date.now()+36e5}(d),l.result;if(!d.ok)return l.result;let e=await d.json(),f=o(),h=e.tag_name.replace(/^v/,""),i={hasUpdate:m(f,e.tag_name),currentVersion:f,latestVersion:h,releaseUrl:(a=e.html_url).startsWith(g.Dk)?a:null,releaseName:(b=e.name,c=e.tag_name,j.test(b)&&b.length<=128?b:c),publishedAt:e.published_at};return l.result=i,l.fetchedAt=Date.now(),i}catch{return l.result}}},30008:(a,b,c)=>{"use strict";c.d(b,{$G:()=>g,F1:()=>j,_G:()=>l,j0:()=>i,rB:()=>k,xF:()=>m,yg:()=>h});var d=c(33294),e=c(67882),f=c(27870);function g(a,b){return null!==a&&"notification"===a.source&&"permission-id"===b&&(0,f.PP)(a.decisionId)}function h(a,b,c,e){return g((0,d.getStructuredPromptWaiting)(a,b,c),e)}let i=3e5,j="CM_STRUCTURED_SEND_GUARD";function k(a){return"notification"===a.source?e.Oh.PERMISSION_PROMPT:e.Oh.PERMISSION_REQUEST}function l({worktreeId:a,cliToolId:b,instanceId:c,scraper:e,ignoreStructured:f=!1,now:g=Date.now()}){var h,l,m;let n=(0,d.getStructuredPromptWaiting)(a,b,c,g);null!==n&&("waiting"===e.status?(0,d.corroborateStructuredPromptWaiting)(a,b,c,g):n.scraperCorroborated&&((0,d.clearStructuredPromptWaiting)(a,b,c),n=null));let o=e.hasActivePrompt||null!==n;if(e.hasActivePrompt)return{waiting:o,scraperWaiting:!0,structured:n,blocksSend:!0,blockedBy:"scraper",blockReason:e.reason,structuredSendBlockSuppressed:null};if(null===n)return{waiting:o,scraperWaiting:!1,structured:null,blocksSend:!1,blockedBy:null,blockReason:null,structuredSendBlockSuppressed:null};let p=(h=n,l=f,m=g,l?"caller_opt_out":!function(){let a=process.env[j]?.trim().toLowerCase();return"off"===a||"0"===a||"false"===a}()?m-h.at>=i?"expired":null:"disabled");return{waiting:o,scraperWaiting:!1,structured:n,blocksSend:null===p,blockedBy:null===p?"structured":null,blockReason:null===p?k(n):null,structuredSendBlockSuppressed:p}}function m({worktreeId:a,cliToolId:b,instanceId:c,scraper:e,now:f=Date.now()}){let g=(0,d.getStructuredPromptWaiting)(a,b,c,f);return{waiting:e.hasActivePrompt||null!==g,scraperWaiting:e.hasActivePrompt,structured:g}}},39727:()=>{},43015:(a,b,c)=>{"use strict";c.r(b),c.d(b,{CM_INGRESS_HEADER:()=>W,REMOTE_ONLY_AUTH_SCOPE:()=>X,WORKTREE_RENAMED_EVENT_TYPE:()=>ax,__internal:()=>aD,broadcast:()=>au,broadcastMessage:()=>aw,cleanupRooms:()=>aA,closeWebSocket:()=>aC,handleProxyUpgrade:()=>_,hasRoomSubscribers:()=>av,isIngressAuthExempt:()=>Z,migrateWorktreeRooms:()=>ay,setupWebSocket:()=>ad,stampIngress:()=>Y});var d=c(81503),e=c(91645),f=c(88081),g=c(3453),h=c(15194),i=c(40964),j=c(88807),k=c(56791);let l={capturePaneCalls:0,activeControlSessions:0,subscriberCount:0,cleanupCount:0,firstOutputLatencyCount:0,firstOutputLatencyTotalMs:0,firstOutputLatencyLastMs:null,firstOutputLatencyMinMs:null,firstOutputLatencyMaxMs:null};var m=c(79892),n=c(72626),o=c(79646);class p{push(a){if(0===a.length)return[];let b=(this.remainder+a).split("\n");this.remainder=b.pop()??"";let c=[];for(let a of b){let b=a.endsWith("\r")?a.slice(0,-1):a,d=this.parseLine(b);d&&c.push(d)}return c}flush(){if(0===this.remainder.length)return[];let a=this.parseLine(this.remainder);return this.remainder="",a?[a]:[]}parseLine(a){return 0===a.length?{type:"output",data:"\n"}:a.startsWith("%output ")?{type:"output",data:`${a.slice(8)}
|
|
2
2
|
`}:"%exit"===a||a.startsWith("%exit ")?{type:"exit",exitCode:null}:a.startsWith("%error ")?{type:"error",error:Error(a.slice(7))}:a.startsWith("%")?null:{type:"output",data:`${a}
|
|
3
3
|
`}}constructor(){this.remainder=""}}let q=(0,n.h)("tmux-control-client");class r{constructor(a={}){this.parser=new p,this.handlers=new Set,this.child=null,this.sessionName=null,this.idleTimer=null,this.started=!1,this.spawnProcess=a.spawnProcess??((a,b,c)=>(0,o.spawn)(a,b,c)),this.tmuxBinary=a.tmuxBinary??"tmux",this.idleTimeoutMs=a.idleTimeoutMs??3e4}start(a){this.started||(this.sessionName=a,this.child=this.spawnProcess(this.tmuxBinary,["-C","attach-session","-t",(0,m.lA)(a)],{stdio:"pipe"}),this.started=!0,this.child.stdout.setEncoding("utf8"),this.child.stdout.on("data",a=>{this.touch();let b="string"==typeof a?a:a.toString("utf8");for(let a of this.parser.push(b))this.emit(a)}),this.child.stderr.setEncoding("utf8"),this.child.stderr.on("data",a=>{let b="string"==typeof a?a:a.toString("utf8");this.emit({type:"error",error:Error(b.trim()||"tmux control stderr")})}),this.child.on("close",a=>{for(let a of this.parser.flush())this.emit(a);this.emit({type:"exit",exitCode:a}),this.stop()}),this.child.on("error",a=>{this.emit({type:"error",error:a}),this.stop()}),this.resetIdleTimer(),q.debug("start",{sessionName:a}))}onEvent(a){return this.handlers.add(a),()=>{this.handlers.delete(a)}}sendInput(a){if(!this.child?.stdin.writable||null===this.sessionName)throw Error("Tmux control client is not writable");this.touch();let b=Buffer.from(a,"utf8");for(let a=0;a<b.length;a+=256){let c=Array.from(b.subarray(a,a+256),a=>a.toString(16).padStart(2,"0")).join(" ");this.child.stdin.write(`send-keys -t ${(0,m.lA)(this.sessionName)} -H ${c}
|
|
4
4
|
`)}}resize(a,b){if(!this.child?.stdin.writable)throw Error("Tmux control client is not writable");this.touch(),this.child.stdin.write(`refresh-client -C ${a}x${b}
|
|
5
|
-
`)}stop(){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null),this.child&&(this.child.removeAllListeners(),this.child.stdout.removeAllListeners(),this.child.stderr.removeAllListeners(),this.child.kill(),this.child=null),this.started=!1}isStarted(){return this.started}setSessionName(a){this.sessionName=a}emit(a){for(let b of this.handlers)b(a)}touch(){this.resetIdleTimer()}resetIdleTimer(){this.idleTimeoutMs<=0||(this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{q.debug("idle-timeout",{sessionName:this.sessionName}),this.stop()},this.idleTimeoutMs))}}let s=(0,n.h)("tmux-control-registry");class t{constructor(a={}){this.entries=new Map,this.handlers=new Map,this.idleTimeoutMs=a.idleTimeoutMs??15e3,this.createClient=a.createClient??(()=>new r(a))}subscribe(a,b,c){let d=this.ensureEntry(a);d.subscribers.add(b),this.cancelIdleCleanup(d),this.updateMetrics();let e=this.handlers.get(a);return e||(e=new Set,this.handlers.set(a,e)),e.add(c),()=>{e?.delete(c),this.unsubscribe(a,b)}}sendInput(a,b){let c=this.entries.get(a);if(!c)throw Error(`No control client registered for ${a}`);c.client.sendInput(b)}resize(a,b,c){let d=this.entries.get(a);if(!d)throw Error(`No control client registered for ${a}`);d.client.resize(b,c)}hasSession(a){return this.entries.has(a)}getSubscriberCount(a){return this.entries.get(a)?.subscribers.size??0}getTotalSubscriberCount(){let a=0;for(let b of this.entries.values())a+=b.subscribers.size;return a}getSessionCount(){return this.entries.size}shutdown(){for(let[a,b]of this.entries)this.teardownEntry(a,b);this.entries.clear(),this.handlers.clear(),this.updateMetrics()}renameSession(a,b){if(a===b)return!1;let c=this.entries.get(a);if(!c)return!1;if(this.entries.has(b))return s.warn("rename:destination-occupied",{oldName:a,newName:b}),!1;this.entries.delete(a),c.sessionName=b,this.entries.set(b,c),c.client.setSessionName(b);let d=this.handlers.get(a);return d&&(this.handlers.delete(a),this.handlers.set(b,d)),s.debug("rename",{oldName:a,newName:b}),!0}ensureEntry(a){let b=this.entries.get(a);if(b)return b;let c=this.createClient(a);c.start(a);let d={client:c,subscribers:new Set,unsubscribeClientEvent:()=>{},idleTimer:null,sessionName:a};return d.unsubscribeClientEvent=c.onEvent(a=>{let b=this.handlers.get(d.sessionName);if(b)for(let c of b)c(a);("exit"===a.type||"error"===a.type)&&this.deleteEntry(d.sessionName)}),this.entries.set(a,d),this.updateMetrics(),d}unsubscribe(a,b){let c=this.entries.get(a);c&&(c.subscribers.delete(b),this.updateMetrics(),0===c.subscribers.size&&this.scheduleIdleCleanup(a,c))}scheduleIdleCleanup(a,b){if(this.idleTimeoutMs<=0)return void this.deleteEntry(a);this.cancelIdleCleanup(b),b.idleTimer=setTimeout(()=>{s.debug("idle-cleanup",{sessionName:b.sessionName}),this.deleteEntry(b.sessionName)},this.idleTimeoutMs)}cancelIdleCleanup(a){a.idleTimer&&(clearTimeout(a.idleTimer),a.idleTimer=null)}deleteEntry(a){let b=this.entries.get(a);b&&(this.teardownEntry(a,b),this.entries.delete(a),this.handlers.delete(a),this.updateMetrics())}teardownEntry(a,b){this.cancelIdleCleanup(b),b.unsubscribeClientEvent(),b.client.stop(),l.cleanupCount+=1}updateMetrics(){l.activeControlSessions=Math.max(0,this.getSessionCount()),l.subscriberCount=Math.max(0,this.getTotalSubscriberCount())}}let u=null,v={streamingOutput:!0,explicitResize:!0,snapshotFallback:!0};class w{constructor(a={}){this.registry=a.registry??(u||(u=new t),u)}async ensureSession(a,b){await (0,m.N)(a)||await (0,m.jw)(a,b)}async sessionExists(a){return(0,m.N)(a)}async sendInput(a,b){if(this.registry.hasSession(a))return void this.registry.sendInput(a,b);await (0,m.V1)(a,b)}async sendSpecialKey(a,b){if("Escape"!==b&&"C-c"!==b&&"C-d"!==b&&"C-m"!==b&&"Enter"!==b)throw Error(`Unsupported special key for ControlModeTmuxTransport: ${b}`);await (0,m.ds)(a,b)}async resize(a,b,c){this.registry.resize(a,b,c)}async captureSnapshot(a,b){return l.capturePaneCalls+=1,(0,m.Xg)(a,b)}async subscribe(a,b){let c=`sub-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,d=this.registry.subscribe(a,c,a=>{"output"===a.type?b.onOutput(a.data):"exit"===a.type?b.onExit?.({exitCode:a.exitCode}):b.onError(a.error)});return{async unsubscribe(){d()}}}getCapabilities(){return v}getSubscriberCount(a){return this.registry.getSubscriberCount(a)}renameSession(a,b){return this.registry.renameSession(a,b)}async killSession(a){return(0,m.fY)(a)}}let x=null;function y(){return x||(x=new w),x}var z=c(31347),A=c(
|
|
5
|
+
`)}stop(){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null),this.child&&(this.child.removeAllListeners(),this.child.stdout.removeAllListeners(),this.child.stderr.removeAllListeners(),this.child.kill(),this.child=null),this.started=!1}isStarted(){return this.started}setSessionName(a){this.sessionName=a}emit(a){for(let b of this.handlers)b(a)}touch(){this.resetIdleTimer()}resetIdleTimer(){this.idleTimeoutMs<=0||(this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{q.debug("idle-timeout",{sessionName:this.sessionName}),this.stop()},this.idleTimeoutMs))}}let s=(0,n.h)("tmux-control-registry");class t{constructor(a={}){this.entries=new Map,this.handlers=new Map,this.idleTimeoutMs=a.idleTimeoutMs??15e3,this.createClient=a.createClient??(()=>new r(a))}subscribe(a,b,c){let d=this.ensureEntry(a);d.subscribers.add(b),this.cancelIdleCleanup(d),this.updateMetrics();let e=this.handlers.get(a);return e||(e=new Set,this.handlers.set(a,e)),e.add(c),()=>{e?.delete(c),this.unsubscribe(a,b)}}sendInput(a,b){let c=this.entries.get(a);if(!c)throw Error(`No control client registered for ${a}`);c.client.sendInput(b)}resize(a,b,c){let d=this.entries.get(a);if(!d)throw Error(`No control client registered for ${a}`);d.client.resize(b,c)}hasSession(a){return this.entries.has(a)}getSubscriberCount(a){return this.entries.get(a)?.subscribers.size??0}getTotalSubscriberCount(){let a=0;for(let b of this.entries.values())a+=b.subscribers.size;return a}getSessionCount(){return this.entries.size}shutdown(){for(let[a,b]of this.entries)this.teardownEntry(a,b);this.entries.clear(),this.handlers.clear(),this.updateMetrics()}renameSession(a,b){if(a===b)return!1;let c=this.entries.get(a);if(!c)return!1;if(this.entries.has(b))return s.warn("rename:destination-occupied",{oldName:a,newName:b}),!1;this.entries.delete(a),c.sessionName=b,this.entries.set(b,c),c.client.setSessionName(b);let d=this.handlers.get(a);return d&&(this.handlers.delete(a),this.handlers.set(b,d)),s.debug("rename",{oldName:a,newName:b}),!0}ensureEntry(a){let b=this.entries.get(a);if(b)return b;let c=this.createClient(a);c.start(a);let d={client:c,subscribers:new Set,unsubscribeClientEvent:()=>{},idleTimer:null,sessionName:a};return d.unsubscribeClientEvent=c.onEvent(a=>{let b=this.handlers.get(d.sessionName);if(b)for(let c of b)c(a);("exit"===a.type||"error"===a.type)&&this.deleteEntry(d.sessionName)}),this.entries.set(a,d),this.updateMetrics(),d}unsubscribe(a,b){let c=this.entries.get(a);c&&(c.subscribers.delete(b),this.updateMetrics(),0===c.subscribers.size&&this.scheduleIdleCleanup(a,c))}scheduleIdleCleanup(a,b){if(this.idleTimeoutMs<=0)return void this.deleteEntry(a);this.cancelIdleCleanup(b),b.idleTimer=setTimeout(()=>{s.debug("idle-cleanup",{sessionName:b.sessionName}),this.deleteEntry(b.sessionName)},this.idleTimeoutMs)}cancelIdleCleanup(a){a.idleTimer&&(clearTimeout(a.idleTimer),a.idleTimer=null)}deleteEntry(a){let b=this.entries.get(a);b&&(this.teardownEntry(a,b),this.entries.delete(a),this.handlers.delete(a),this.updateMetrics())}teardownEntry(a,b){this.cancelIdleCleanup(b),b.unsubscribeClientEvent(),b.client.stop(),l.cleanupCount+=1}updateMetrics(){l.activeControlSessions=Math.max(0,this.getSessionCount()),l.subscriberCount=Math.max(0,this.getTotalSubscriberCount())}}let u=null,v={streamingOutput:!0,explicitResize:!0,snapshotFallback:!0};class w{constructor(a={}){this.registry=a.registry??(u||(u=new t),u)}async ensureSession(a,b){await (0,m.N)(a)||await (0,m.jw)(a,b)}async sessionExists(a){return(0,m.N)(a)}async sendInput(a,b){if(this.registry.hasSession(a))return void this.registry.sendInput(a,b);await (0,m.V1)(a,b)}async sendSpecialKey(a,b){if("Escape"!==b&&"C-c"!==b&&"C-d"!==b&&"C-m"!==b&&"Enter"!==b)throw Error(`Unsupported special key for ControlModeTmuxTransport: ${b}`);await (0,m.ds)(a,b)}async resize(a,b,c){this.registry.resize(a,b,c)}async captureSnapshot(a,b){return l.capturePaneCalls+=1,(0,m.Xg)(a,b)}async subscribe(a,b){let c=`sub-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,d=this.registry.subscribe(a,c,a=>{"output"===a.type?b.onOutput(a.data):"exit"===a.type?b.onExit?.({exitCode:a.exitCode}):b.onError(a.error)});return{async unsubscribe(){d()}}}getCapabilities(){return v}getSubscriberCount(a){return this.registry.getSubscriberCount(a)}renameSession(a,b){return this.registry.renameSession(a,b)}async killSession(a){return(0,m.fY)(a)}}let x=null;function y(){return x||(x=new w),x}var z=c(31347),A=c(56455),B=c(7015),C=c(26838),D=c(54325),E=c(52660),F=c(55233),G=c(33294);let H=(0,n.h)("model-change-broadcast");function I(){let a=globalThis.__modelChangeBroadcastUnsubscribe;a&&(a(),globalThis.__modelChangeBroadcastUnsubscribe=void 0)}var J=c(43925),K=c(57836);function L(){let a=globalThis.__waitingStatusBroadcastUnsubscribe;a&&(a(),globalThis.__waitingStatusBroadcastUnsubscribe=void 0),I(),(0,J.dz)()}var M=c(36925);let N=(0,n.h)("publisher-registry");function O(){return globalThis.__realtimeRoomPublisher?.publisher??null}let P=(0,n.h)("ws-server"),Q=null,R=new Map,S=new Map,T=null,U=null,V=new Set(["localhost","127.0.0.1"]),W="x-cm-ingress",X="remote-only";function Y(a,b){a[W]=b}function Z(a,b=process.env){return b.CM_AUTH_SCOPE===X&&"local"===a[W]}function $(a,b){try{a.write(`HTTP/1.1 ${b}\r
|
|
6
6
|
Content-Length: 0\r
|
|
7
7
|
Connection: close\r
|
|
8
8
|
\r
|
|
9
|
-
`)}catch{}a.destroy()}async function Z(a,b,c,d){let e,f=(a.url||"/").split("?")[0].split("/")[2]||"";if(!f)return void Y(b,"400 Bad Request");try{let a=d.getDb(),b=d.getCache(a);e=await b.getByPathPrefix(f)}catch(a){N.error("ws-proxy:cache-error",{pathPrefix:f,error:a instanceof Error?a.message:String(a)}),!b.destroyed&&b.writable&&Y(b,"502 Bad Gateway");return}if(b.destroyed||!b.writable)return;if(!e)return void Y(b,"404 Not Found");if(!e.enabled)return void Y(b,"503 Service Unavailable");if(!e.websocketEnabled)return void Y(b,"403 Forbidden");if(!T.has(e.targetHost)){N.warn("ws-proxy:ssrf-blocked",{pathPrefix:f}),Y(b,"403 Forbidden");return}let g=d.netConnect({host:e.targetHost,port:e.targetPort}),h=!1,i=!1,j=()=>{if(!i){i=!0;try{g.destroy()}catch{}try{b.destroy()}catch{}}};g.on("connect",()=>{h=!0;try{let b=function(a){let b=a.method||"GET",c=a.url||"/",d=a.httpVersion||"1.1",e=[`${b} ${c} HTTP/${d}`];for(let[b,c]of Object.entries(a.headers))if(void 0!==c)if(Array.isArray(c))for(let a of c)e.push(`${b}: ${a}`);else e.push(`${b}: ${c}`);return e.join("\r\n")+"\r\n\r\n"}(a);g.write(b)}catch(a){N.error("ws-proxy:upstream-write-error",{pathPrefix:f,error:a instanceof Error?a.message:String(a)}),j();return}b.pipe(g),g.pipe(b)}),g.on("error",a=>{N.error("ws-proxy:upstream-error",{pathPrefix:f,error:a.message}),h||b.destroyed||!b.writable?j():Y(b,"502 Bad Gateway")}),g.on("close",()=>{j()}),b.on("error",a=>{N.error("ws-proxy:client-error",{pathPrefix:f,error:a.message}),j()}),b.on("close",()=>{j()})}function $(){P.forEach((a,b)=>{if(!a.isAlive){N.warn("heartbeat:terminate",{rooms:a.worktreeIds.size});try{b.terminate()}catch{}af(b);return}a.isAlive=!1;try{b.ping()}catch(a){N.error("heartbeat:ping-failed",{error:a instanceof Error?a.message:String(a)})}if(b.readyState===d.kb.OPEN)try{b.send(JSON.stringify({type:"heartbeat",at:Date.now()}))}catch{}})}function _(){aa(),S=setInterval($,3e4),S.unref?.()}function aa(){null!==S&&(clearInterval(S),S=null)}function ab(a,b){O=new d.zu({noServer:!0}),R=function(a){let b=(globalThis.__realtimeRoomPublisherGeneration??0)+1;return globalThis.__realtimeRoomPublisherGeneration=b,globalThis.__realtimeRoomPublisher={generation:b,publisher:a},globalThis.__realtimeUnroutedPublish=void 0,{token:b,unregister:()=>(function(a){let b=globalThis.__realtimeRoomPublisher;return!!b&&b.generation===a&&(globalThis.__realtimeRoomPublisher=void 0,!0)})(b)}}(am),function(a){K();let b=(0,J.wN)(b=>{a(b.worktreeId,{type:"session_status_changed",worktreeId:b.worktreeId,cliTool:b.cliToolId,instance:b.instanceId??b.cliToolId,isWaitingForResponse:b.waiting,waitingKind:b.kind??null,waitingSince:b.since})});globalThis.__waitingStatusBroadcastUnsubscribe=b,function(a){H();let b=(0,F.onAgentModelChange)(b=>{G.info("model-changed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId,from:b.from,to:b.to,source:b.source});let c=function(a){try{let b=(0,j.getDbInstance)(),c=(0,E.dV)(b),d=(0,D.createModelChangeMessage)(b,{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,content:(0,E.DH)(c,a.from,a.to),at:a.at});return{type:"message",worktreeId:a.worktreeId,message:d}}catch(b){return G.warn("model-change-history-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)}),null}}(b);try{c&&a(b.worktreeId,c),a(b.worktreeId,{type:C.T4,worktreeId:b.worktreeId,cliTool:b.cliToolId,instance:b.instanceId,from:b.from,to:b.to,source:b.source,at:b.at})}catch(a){G.warn("model-change-broadcast-failed",{worktreeId:b.worktreeId,instanceId:b.instanceId,error:a instanceof Error?a.message:String(a)})}(0,E.b3)(b)});globalThis.__modelChangeBroadcastUnsubscribe=b}(a),(0,I.PJ)()}(ae),_();let c=(a,b,c)=>{let d=a.url||"/";if(d.startsWith("/_next/")){b.write("HTTP/1.1 426 Upgrade Required\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"),b.destroy();return}if((0,g.Rh)()){let c=(0,g.Z2)(a.socket.remoteAddress||"");if(!(0,g.c$)(c,(0,g.nu)())){let a=c.substring(0,45);N.warn("websocket:denied",{ip:a}),b.write("HTTP/1.1 403 Forbidden\r\n\r\n"),b.destroy();return}}if((0,f.y2)()&&!X(a.headers)){let c=a.headers.cookie||"",d=(0,f.JT)(c)[f.aq];if(!d||!(0,f.nr)(d)){b.write("HTTP/1.1 401 Unauthorized\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"),b.destroy();return}}if(d.startsWith("/proxy/"))return void(async()=>{try{await Z(a,b,c,{getDb:()=>(0,j.getDbInstance)(),getCache:a=>(0,A.Ds)(a),netConnect:a=>(0,e.connect)(a)})}catch(a){if(N.error("ws-proxy:unhandled-error",{error:a instanceof Error?a.message:String(a)}),!b.destroyed&&b.writable){try{b.write("HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\nConnection: close\r\n\r\n")}catch{}b.destroy()}}})();O.handleUpgrade(a,b,c,b=>{O.emit("connection",b,a)})};for(let d of[a,...b?.additionalServers??[]])d.on("upgrade",c);O.on("error",a=>{N.error("server:error",{error:a.message})}),O.on("connection",a=>{let b={ws:a,worktreeIds:new Set,terminalSubscription:null,isAlive:!0};P.set(a,b),a.on("pong",()=>{let b=P.get(a);b&&(b.isAlive=!0)}),a.on("message",b=>{try{let c=JSON.parse(b.toString());ac(a,c)}catch(a){N.error("message:parse-failed",{error:a instanceof Error?a.message:String(a)})}}),a.on("close",()=>{af(a)}),a.on("error",b=>{"WS_ERR_INVALID_CLOSE_CODE"===b.code||b.message?.includes("Invalid WebSocket frame")||b.message?.includes("write after end")||b.message?.includes("ECONNRESET")||b.message?.includes("EPIPE")||N.error("websocket:error",{error:b.message});try{a.terminate()}catch{}af(a)})})}function ac(a,b){switch(b.type){case"subscribe":if(!b.worktreeId)return;var c=a,d=b.worktreeId;let e=P.get(c);e&&(e.worktreeIds.add(d),Q.has(d)||Q.set(d,new Set),Q.get(d).add(c));break;case"unsubscribe":if(!b.worktreeId)return;!function(a,b){let c=P.get(a);if(!c)return;c.worktreeIds.delete(b);let d=Q.get(b);d&&(d.delete(a),0===d.size&&Q.delete(b))}(a,b.worktreeId);break;case"broadcast":if(!b.worktreeId)return;ae(b.worktreeId,b.data);break;case C.ST:ad(a,b);break;case"terminal_subscribe":ah(a,b);break;case"terminal_input":ai(a,b);break;case"terminal_resize":aj(a,b);break;case"terminal_unsubscribe":ak(a);break;default:N.warn("message:unknown-type")}}function ad(a,b){let c="string"==typeof b.version?b.version:"";if(!c)return;let e=(0,B.E2)(c);if(e&&a.readyState===d.kb.OPEN)try{a.send(JSON.stringify({type:C.Oo,serverVersion:e.serverVersion,clientVersion:e.clientVersion}))}catch(a){N.error("version:notify-failed",{error:a instanceof Error?a.message:String(a)})}}function ae(a,b){let c=Q.get(a);if(c&&0!==c.size)try{let e=JSON.stringify({type:"broadcast",worktreeId:a,data:b});c.forEach(a=>{if(a.readyState===d.kb.OPEN)try{a.send(e)}catch(a){N.error("broadcast:send-failed",{error:a instanceof Error?a.message:String(a)})}})}catch(b){N.error("broadcast:failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)});try{let b=JSON.stringify({type:"broadcast",worktreeId:a,data:{error:"Message encoding error"}});c.forEach(a=>{if(a.readyState===d.kb.OPEN)try{a.send(b)}catch{}})}catch(a){N.error("fallback:send-failed",{error:a instanceof Error?a.message:String(a)})}}}function af(a){let b=P.get(a);b&&(b.worktreeIds.forEach(b=>{let c=Q.get(b);c&&(c.delete(a),0===c.size&&Q.delete(b))}),b.terminalSubscription&&(b.terminalSubscription.unsubscribe(),b.terminalSubscription=null),P.delete(a))}function ag(a,b){a.readyState===d.kb.OPEN&&a.send(JSON.stringify(b))}async function ah(a,b){let c=P.get(a);if(!c)return void ag(a,{type:"terminal_error",error:"Unauthorized WebSocket client"});if("true"!==process.env.TMUX_CONTROL_MODE_ENABLED)return void ag(a,{type:"terminal_error",error:"Tmux control mode is disabled"});let{worktreeId:d,cliToolId:e}=b;if(!d||!e||!(0,h.hR)(e))return void ag(a,{type:"terminal_error",error:"Invalid terminal subscription parameters"});let f=(0,j.getDbInstance)(),g=(0,k.getWorktreeById)(f,d);if(!g)return void ag(a,{type:"terminal_error",error:"Worktree not found"});c.terminalSubscription&&(await c.terminalSubscription.unsubscribe(),c.terminalSubscription=null);let m=(0,i.mf)(e,d);if("foreign"===(await (0,z.s_)(m,g.path)).verdict)return void ag(a,{type:"terminal_error",error:"Session belongs to another CommandMate server"});let n=y();if(n.getSubscriberCount(m)>=4)return void ag(a,{type:"terminal_error",error:"Terminal subscriber limit reached"});let o=!1,p=Date.now(),q=await n.subscribe(m,{onOutput:b=>{if(!o){o=!0;let a=Math.max(0,Math.round(Date.now()-p));l.firstOutputLatencyCount+=1,l.firstOutputLatencyTotalMs+=a,l.firstOutputLatencyLastMs=a,l.firstOutputLatencyMinMs=null===l.firstOutputLatencyMinMs?a:Math.min(l.firstOutputLatencyMinMs,a),l.firstOutputLatencyMaxMs=null===l.firstOutputLatencyMaxMs?a:Math.max(l.firstOutputLatencyMaxMs,a)}ag(a,{type:"terminal_output",data:b})},onExit:({exitCode:b})=>{ag(a,{type:"terminal_exit",exitCode:b})},onError:b=>{(async()=>{try{let b=await n.captureSnapshot(m,{startLine:-200});b.length>0&&ag(a,{type:"terminal_output",data:b,fallback:!0})}catch{}ag(a,{type:"terminal_error",error:b.message,fallback:!0})})()}});c.terminalSubscription={worktreeId:d,cliToolId:e,sessionName:m,startedAt:p,unsubscribe:q.unsubscribe},ag(a,{type:"terminal_status",connected:!0,worktreeId:d,cliToolId:e})}async function ai(a,b){let c=P.get(a),d=c?.terminalSubscription;if(!d)return void ag(a,{type:"terminal_error",error:"No active terminal subscription"});let e="string"==typeof b.data?b.data:"";if(0===e.length||e.length>4096)return void ag(a,{type:"terminal_error",error:"Invalid terminal input"});try{await y().sendInput(d.sessionName,e)}catch(b){ag(a,{type:"terminal_error",error:b instanceof Error?b.message:"Failed to send terminal input"})}}async function aj(a,b){let c=P.get(a),d=c?.terminalSubscription;if(d){if("number"!=typeof b.cols||!Number.isInteger(b.cols)||b.cols<20||b.cols>500||"number"!=typeof b.rows||!Number.isInteger(b.rows)||b.rows<5||b.rows>200)return void ag(a,{type:"terminal_error",error:"Invalid terminal resize payload"});try{await y().resize(d.sessionName,b.cols,b.rows)}catch(b){ag(a,{type:"terminal_error",error:b instanceof Error?b.message:"Failed to resize terminal"})}}}async function ak(a){let b=P.get(a);if(b?.terminalSubscription){try{await b.terminalSubscription.unsubscribe()}catch{}b.terminalSubscription=null,ag(a,{type:"terminal_status",connected:!1})}}function al(a){let b=Q.get(a);return!!b&&b.size>0}let am={publish:ae,hasSubscribers:al,cleanupRooms:aw,migrateRooms:au};function an(){let a=M();return a&&a!==am?a:null}function ao(a,b){null===M()&&0===Q.size&&function(a,b,c=Date.now()){let d=globalThis.__realtimeUnroutedPublish??={total:0,suppressed:0,lastWarnedAt:null,operations:{}};if(d.total+=1,d.operations[a]=(d.operations[a]??0)+1,null!==d.lastWarnedAt&&c-d.lastWarnedAt<6e4){d.suppressed+=1;return}let e=d.suppressed;d.suppressed=0,d.lastWarnedAt=c,L.warn("realtime:no-room-publisher",{operation:a,worktreeId:b,total:d.total,suppressedSinceLastWarning:e,operations:{...d.operations}})}(a,b)}function ap(a,b){let c=an();if(c)return void c.publish(a,b);ao("broadcast",a),ae(a,b)}function aq(a){let b=an();return b?b.hasSubscribers(a):(ao("hasRoomSubscribers",a),al(a))}function ar(a,b){b.worktreeId?ap(b.worktreeId,{type:a,...b}):N.warn("broadcast:missing-worktree-id")}let as="worktree_renamed";function at(a){let b=an();return b?b.migrateRooms(a):au(a)}function au(a){let b=new Map;for(let{oldId:c,newId:d}of a)c&&d&&c!==d&&b.set(c,d);if(0===b.size)return[];let c=[];for(let[a,d]of b){let b=Q.get(a);b&&0!==b.size&&(Q.delete(a),c.push({oldId:a,newId:d,sockets:b}))}let d=[];for(let{oldId:a,newId:b,sockets:e}of c){let c=Q.get(b)??new Set;for(let d of e){c.add(d);let e=P.get(d);e&&(e.worktreeIds.delete(a),e.worktreeIds.add(b)),ag(d,{type:as,worktreeId:b,previousWorktreeId:a})}Q.set(b,c),d.push({oldId:a,newId:b,subscribers:e.size})}for(let a of P.values()){let c=a.terminalSubscription;if(!c)continue;let d=b.get(c.worktreeId);if(d)try{if(!(0,h.hR)(c.cliToolId))continue;c.sessionName=(0,i.mf)(c.cliToolId,d),c.worktreeId=d}catch(a){N.warn("terminal:rename-failed",{worktreeId:c.worktreeId,newId:d,error:a instanceof Error?a.message:String(a)})}}return d.length>0&&N.info("rooms:migrated",{count:d.length}),d}function av(a){let b=an();if(b)return void b.cleanupRooms(a);aw(a)}function aw(a){for(let b of a){let a=Q.get(b);a&&(a.forEach(a=>{let c=P.get(a);c&&c.worktreeIds.delete(b)}),Q.delete(b))}}function ax(){let a=null!==R&&R.unregister();R=null,(a||null===M())&&K(),aa(),O&&(P.forEach(a=>{a.ws.close()}),P.clear(),Q.clear(),O.close(),O=null)}let ay={handleMessage:ac,runHeartbeatSweep:$,startHeartbeat:_,stopHeartbeat:aa,handleClientVersion:ad,handleProxyUpgrade:Z,handleTerminalSubscribe:ah,handleTerminalInput:ai,handleTerminalResize:aj,handleTerminalUnsubscribe:ak,handleDisconnect:af,registerClientForTest(a,b=!0){P.set(a,{ws:a,worktreeIds:new Set,terminalSubscription:null,isAlive:b})},getClientInfoForTest:a=>P.get(a),listClientsForTest:()=>Array.from(P.values()),resetStateForTest(){aa(),P.clear(),Q.clear()}}},43925:(a,b,c)=>{"use strict";c.d(b,{PJ:()=>l,dz:()=>m,vQ:()=>j});var d=c(57836),e=c(23854),f=c(72626),g=c(30008),h=c(129);let i=(0,f.h)("relay-triggers");function j(a,b,d,e){let f={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1634),c.e(3480),c.e(252),c.e(8800),c.e(7905),c.e(9731),c.e(8918),c.e(5595),c.e(611),c.e(9882),c.e(3077),c.e(850),c.e(1210)]).then(c.bind(c,71210));await a(f,{settled:e})}catch(c){i.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:f.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function k(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1634),c.e(3480),c.e(252),c.e(8800),c.e(7905),c.e(9731),c.e(8918),c.e(5595),c.e(611),c.e(9882),c.e(3077),c.e(850),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){i.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function l(){m(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&((0,g.yg)(a.worktreeId,a.cliToolId,a.instanceId,(0,h.VM)(a.cliToolId).capabilities.eventIdentity)||function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1634),c.e(3480),c.e(252),c.e(8800),c.e(7905),c.e(9731),c.e(8918),c.e(5595),c.e(611),c.e(9882),c.e(3077),c.e(850),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){i.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId))});let a=setInterval(()=>void k(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function m(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},47990:()=>{},54036:(a,b,c)=>{"use strict";c.d(b,{aq:()=>d,gu:()=>f,kr:()=>h});let d="cm_auth_token",e=/^[0-9a-f]{64}$/;function f(a){return!!a&&e.test(a)}let g=2592e6;function h(){let a=process.env.CM_AUTH_EXPIRE,b=Date.now();if(a)try{return b+function(a){let b=a.match(/^(\d+)([hdm])$/);if(!b)throw Error(`Invalid duration format: "${a}". Use Nh, Nd, or Nm (e.g., "24h", "7d", "90m")`);let c=parseInt(b[1],10),d=b[2],e={h:36e5,d:864e5,m:6e4}[d];if(void 0===e)throw Error(`Invalid duration unit: "${d}"`);let f=c*e;if(f<36e5)throw Error(`Duration too short: minimum is 1h (60m). Got: "${a}"`);if(f>g)throw Error(`Duration too long: maximum is 30d (720h). Got: "${a}"`);return f}(a)}catch{return b+864e5}return process.env.CM_AUTH_TOKEN_HASH?b+864e5:null}},55233:(a,b,c)=>{"use strict";c.d(b,{DH:()=>o,b3:()=>q,dV:()=>p});var d=c(25754),e=c(88807),f=c(43167),g=c(73753),h=c(72626),i=c(72119),j=c(52445),k=c(61191),l=c(27519);let m=(0,h.h)("push/model-change-notifier"),n={en:i.agentModel.changed,ja:j.agentModel.changed};function o(a,b,c){return n[(0,k.resolvePushLocale)(a)].replace("{from}",b).replace("{to}",c)}function p(a){try{let b=(0,f.Se)(a),c=null;for(let a of b){let b=a.updatedAt.getTime();(null===c||b>c.updatedAt)&&(c={updatedAt:b,locale:a.locale})}return(0,k.resolvePushLocale)(c?.locale??d.Xn)}catch{return d.Xn}}async function q(a){if(!(0,l.lU)())return m.debug("model-change-push-suppressed",{worktreeId:a.worktreeId,instanceId:a.instanceId,reason:"unconfigured"}),"unconfigured";try{await (0,k.notifyPushSubscribers)({worktreeId:a.worktreeId,worktreeName:function(a){try{return(0,g.getWorktreeById)((0,e.getDbInstance)(),a)?.name??a}catch{return a}}(a.worktreeId),kind:"failure",agentName:a.instanceId,instanceId:a.instanceId,modelChange:{from:a.from,to:a.to,body:function(a,b){let c={};for(let e of d.dI)c[e]=o(e,a,b);return c}(a.from,a.to)}},a.at),m.info("model-change-push-raised",{worktreeId:a.worktreeId,instanceId:a.instanceId,from:a.from,to:a.to,source:a.source})}catch(b){m.warn("model-change-push-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}return null}},57836:(a,b,c)=>{"use strict";c.d(b,{Jp:()=>k,Te:()=>l,hd:()=>j,wN:()=>h});var d=c(24455);let e=(0,c(72626).h)("waiting-episode-state"),f=globalThis.__sessionWaitingEpisodes??(globalThis.__sessionWaitingEpisodes=new Map),g=globalThis.__sessionWaitingTransitionListeners??(globalThis.__sessionWaitingTransitionListeners=new Set);function h(a){return g.add(a),()=>{g.delete(a)}}function i(a){for(let b of g)try{b(a)}catch(b){e.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function j({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:g=null,structuredSince:h=null,now:j=Date.now()}){let k=(0,d.v7)(a,b,c),l=f.get(k);if(!e)return void 0===l||(f.delete(k),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:j})),null;if(void 0!==l)return l.kind=g,l.since;let m=h??j;return f.set(k,{since:m,kind:g}),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:g,at:j}),m}function k(a,b,c){return f.get((0,d.v7)(a,b,c))??null}function l(a){let b=`${a}${d.CS}`;for(let a of f.keys())if(a.startsWith(b))return!0;return!1}},88081:(a,b,c)=>{"use strict";c.d(b,{JT:()=>m,QK:()=>k,aq:()=>f.aq,nr:()=>l,r0:()=>p,sO:()=>h,x:()=>q,y2:()=>n,zr:()=>o});var d=c(55511),e=c.n(d),f=c(54036);let g={maxAttempts:5,lockoutDuration:9e5,cleanupInterval:36e5},h=86400,i=(()=>{let a=process.env.CM_AUTH_TOKEN_HASH||void 0;return a?(0,f.gu)(a)?a:void console.error("[auth] CM_AUTH_TOKEN_HASH is not a valid SHA-256 hash"):void 0})(),j=(0,f.kr)();function k(a){return e().createHash("sha256").update(a).digest("hex")}function l(a){if(!i||!a||"string"!=typeof a||null!==j&&Date.now()>j)return!1;let b=k(a),c=Buffer.from(b,"hex"),d=Buffer.from(i,"hex");return c.length===d.length&&e().timingSafeEqual(c,d)}function m(a){let b={};if(!a)return b;for(let c of a.split(";")){let a=c.indexOf("=");if(-1===a)continue;let d=c.substring(0,a).trim(),e=c.substring(a+1).trim();d&&(b[d]=e)}return b}function n(){return!!i}function o(){if(null===j)return 0;let a=j-Date.now();return a<=0?0:Math.floor(a/1e3)}function p(a){return{httpOnly:!0,sameSite:"strict",secure:!!process.env.CM_HTTPS_CERT,maxAge:a,path:"/"}}function q(){let a=new Map,b=setInterval(()=>{let b=Date.now();for(let[c,d]of a){let e=null===d.lockedUntil||b>d.lockedUntil,f=b-d.lastAttempt>g.lockoutDuration;e&&f&&a.delete(c)}},g.cleanupInterval);return b.unref&&b.unref(),{checkLimit(b){let c=a.get(b);if(!c)return{allowed:!0};if(null!==c.lockedUntil){let a=Date.now();if(a<c.lockedUntil)return{allowed:!1,retryAfter:Math.ceil((c.lockedUntil-a)/1e3)};c.attempts=0,c.lockedUntil=null}return{allowed:!0}},recordFailure(b){let c=Date.now(),d=a.get(b)||{attempts:0,lockedUntil:null,lastAttempt:c};d.attempts++,d.lastAttempt=c,d.attempts>=g.maxAttempts&&(d.lockedUntil=c+g.lockoutDuration),a.set(b,d)},recordSuccess(b){a.delete(b)},destroy(){clearInterval(b),a.clear()}}}},90164:(a,b,c)=>{"use strict";c.d(b,{Dk:()=>e,kD:()=>f});let d="https://github.com/Kewton/CommandMate",e=`${d}/releases/`,f=`${d}/blob/main/docs/security-guide.md`}};
|
|
9
|
+
`)}catch{}a.destroy()}async function _(a,b,c,d){let e,f=(a.url||"/").split("?")[0].split("/")[2]||"";if(!f)return void $(b,"400 Bad Request");try{let a=d.getDb(),b=d.getCache(a);e=await b.getByPathPrefix(f)}catch(a){P.error("ws-proxy:cache-error",{pathPrefix:f,error:a instanceof Error?a.message:String(a)}),!b.destroyed&&b.writable&&$(b,"502 Bad Gateway");return}if(b.destroyed||!b.writable)return;if(!e)return void $(b,"404 Not Found");if(!e.enabled)return void $(b,"503 Service Unavailable");if(!e.websocketEnabled)return void $(b,"403 Forbidden");if(!V.has(e.targetHost)){P.warn("ws-proxy:ssrf-blocked",{pathPrefix:f}),$(b,"403 Forbidden");return}let g=d.netConnect({host:e.targetHost,port:e.targetPort}),h=!1,i=!1,j=()=>{if(!i){i=!0;try{g.destroy()}catch{}try{b.destroy()}catch{}}};g.on("connect",()=>{h=!0;try{let b=function(a){let b=a.method||"GET",c=a.url||"/",d=a.httpVersion||"1.1",e=[`${b} ${c} HTTP/${d}`];for(let[b,c]of Object.entries(a.headers))if(void 0!==c)if(Array.isArray(c))for(let a of c)e.push(`${b}: ${a}`);else e.push(`${b}: ${c}`);return e.join("\r\n")+"\r\n\r\n"}(a);g.write(b)}catch(a){P.error("ws-proxy:upstream-write-error",{pathPrefix:f,error:a instanceof Error?a.message:String(a)}),j();return}b.pipe(g),g.pipe(b)}),g.on("error",a=>{P.error("ws-proxy:upstream-error",{pathPrefix:f,error:a.message}),h||b.destroyed||!b.writable?j():$(b,"502 Bad Gateway")}),g.on("close",()=>{j()}),b.on("error",a=>{P.error("ws-proxy:client-error",{pathPrefix:f,error:a.message}),j()}),b.on("close",()=>{j()})}function aa(){R.forEach((a,b)=>{if(!a.isAlive){P.warn("heartbeat:terminate",{rooms:a.worktreeIds.size});try{b.terminate()}catch{}ah(b);return}a.isAlive=!1;try{b.ping()}catch(a){P.error("heartbeat:ping-failed",{error:a instanceof Error?a.message:String(a)})}if(b.readyState===d.kb.OPEN)try{b.send(JSON.stringify({type:"heartbeat",at:Date.now()}))}catch{}})}function ab(){ac(),U=setInterval(aa,3e4),U.unref?.()}function ac(){null!==U&&(clearInterval(U),U=null)}function ad(a,b){Q=new d.zu({noServer:!0}),T=function(a){let b=(globalThis.__realtimeRoomPublisherGeneration??0)+1;return globalThis.__realtimeRoomPublisherGeneration=b,globalThis.__realtimeRoomPublisher={generation:b,publisher:a},globalThis.__realtimeUnroutedPublish=void 0,{token:b,unregister:()=>(function(a){let b=globalThis.__realtimeRoomPublisher;return!!b&&b.generation===a&&(globalThis.__realtimeRoomPublisher=void 0,!0)})(b)}}(ar),function(a){L();let b=(0,K.wN)(b=>{a(b.worktreeId,{type:"session_status_changed",worktreeId:b.worktreeId,cliTool:b.cliToolId,instance:b.instanceId??b.cliToolId,isWaitingForResponse:b.waiting,waitingKind:b.kind??null,waitingSince:b.since})});globalThis.__waitingStatusBroadcastUnsubscribe=b,function(a){I();let b=(0,G.onAgentModelChange)(b=>{H.info("model-changed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId,from:b.from,to:b.to,source:b.source});let c=function(a){try{let b=(0,j.getDbInstance)(),c=(0,F.dV)(b),d=(0,E.createModelChangeMessage)(b,{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,content:(0,F.DH)(c,a.from,a.to),at:a.at});return{type:"message",worktreeId:a.worktreeId,message:d}}catch(b){return H.warn("model-change-history-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)}),null}}(b);try{c&&a(b.worktreeId,c),a(b.worktreeId,{type:D.T4,worktreeId:b.worktreeId,cliTool:b.cliToolId,instance:b.instanceId,from:b.from,to:b.to,source:b.source,at:b.at})}catch(a){H.warn("model-change-broadcast-failed",{worktreeId:b.worktreeId,instanceId:b.instanceId,error:a instanceof Error?a.message:String(a)})}(0,F.b3)(b)});globalThis.__modelChangeBroadcastUnsubscribe=b}(a),(0,J.PJ)()}(ag),ab();let c=(a,b,c)=>{let d=a.url||"/";if(d.startsWith("/_next/")){b.write("HTTP/1.1 426 Upgrade Required\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"),b.destroy();return}if((0,g.Rh)()){let c=(0,g.Z2)(a.socket.remoteAddress||"");if(!(0,g.c$)(c,(0,g.nu)())){let a=c.substring(0,45);P.warn("websocket:denied",{ip:a}),b.write("HTTP/1.1 403 Forbidden\r\n\r\n"),b.destroy();return}}if((0,f.y2)()&&!Z(a.headers)){let c=a.headers.cookie||"",d=(0,f.JT)(c)[f.aq];if(!d||!(0,f.nr)(d)){b.write("HTTP/1.1 401 Unauthorized\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"),b.destroy();return}}if(d.startsWith("/proxy/"))return void(async()=>{try{await _(a,b,c,{getDb:()=>(0,j.getDbInstance)(),getCache:a=>(0,B.Ds)(a),netConnect:a=>(0,e.connect)(a)})}catch(a){if(P.error("ws-proxy:unhandled-error",{error:a instanceof Error?a.message:String(a)}),!b.destroyed&&b.writable){try{b.write("HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\nConnection: close\r\n\r\n")}catch{}b.destroy()}}})();Q.handleUpgrade(a,b,c,b=>{Q.emit("connection",b,a)})};for(let d of[a,...b?.additionalServers??[]])d.on("upgrade",c);Q.on("error",a=>{P.error("server:error",{error:a.message})}),Q.on("connection",a=>{let b={ws:a,worktreeIds:new Set,terminalSubscription:null,isAlive:!0};R.set(a,b),a.on("pong",()=>{let b=R.get(a);b&&(b.isAlive=!0)}),a.on("message",b=>{try{let c=JSON.parse(b.toString());ae(a,c)}catch(a){P.error("message:parse-failed",{error:a instanceof Error?a.message:String(a)})}}),a.on("close",()=>{ah(a)}),a.on("error",b=>{"WS_ERR_INVALID_CLOSE_CODE"===b.code||b.message?.includes("Invalid WebSocket frame")||b.message?.includes("write after end")||b.message?.includes("ECONNRESET")||b.message?.includes("EPIPE")||P.error("websocket:error",{error:b.message});try{a.terminate()}catch{}ah(a)})})}function ae(a,b){switch(b.type){case"subscribe":if(!b.worktreeId)return;var c=a,d=b.worktreeId;let e=R.get(c);e&&(e.worktreeIds.add(d),S.has(d)||S.set(d,new Set),S.get(d).add(c));break;case"unsubscribe":if(!b.worktreeId)return;!function(a,b){let c=R.get(a);if(!c)return;c.worktreeIds.delete(b);let d=S.get(b);d&&(d.delete(a),0===d.size&&S.delete(b))}(a,b.worktreeId);break;case"broadcast":if(!b.worktreeId)return;ag(b.worktreeId,b.data);break;case D.ST:af(a,b);break;case"terminal_subscribe":aj(a,b);break;case"terminal_input":al(a,b);break;case"terminal_resize":am(a,b);break;case"terminal_unsubscribe":ap(a);break;default:P.warn("message:unknown-type")}}function af(a,b){let c="string"==typeof b.version?b.version:"";if(!c)return;let e=(0,C.E2)(c);if(e&&a.readyState===d.kb.OPEN)try{a.send(JSON.stringify({type:D.Oo,serverVersion:e.serverVersion,clientVersion:e.clientVersion}))}catch(a){P.error("version:notify-failed",{error:a instanceof Error?a.message:String(a)})}}function ag(a,b){let c=S.get(a);if(c&&0!==c.size)try{let e=JSON.stringify({type:"broadcast",worktreeId:a,data:b});c.forEach(a=>{if(a.readyState===d.kb.OPEN)try{a.send(e)}catch(a){P.error("broadcast:send-failed",{error:a instanceof Error?a.message:String(a)})}})}catch(b){P.error("broadcast:failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)});try{let b=JSON.stringify({type:"broadcast",worktreeId:a,data:{error:"Message encoding error"}});c.forEach(a=>{if(a.readyState===d.kb.OPEN)try{a.send(b)}catch{}})}catch(a){P.error("fallback:send-failed",{error:a instanceof Error?a.message:String(a)})}}}function ah(a){let b=R.get(a);b&&(b.worktreeIds.forEach(b=>{let c=S.get(b);c&&(c.delete(a),0===c.size&&S.delete(b))}),b.terminalSubscription&&(b.terminalSubscription.unsubscribe(),b.terminalSubscription=null),R.delete(a))}function ai(a,b){a.readyState===d.kb.OPEN&&a.send(JSON.stringify(b))}async function aj(a,b){let c=R.get(a);if(!c)return void ai(a,{type:"terminal_error",error:"Unauthorized WebSocket client"});if("true"!==process.env.TMUX_CONTROL_MODE_ENABLED)return void ai(a,{type:"terminal_error",error:"Tmux control mode is disabled"});let{worktreeId:d,cliToolId:e}=b;if(!d||!e||!(0,h.hR)(e))return void ai(a,{type:"terminal_error",error:"Invalid terminal subscription parameters"});let f=(0,j.getDbInstance)(),g=(0,k.getWorktreeById)(f,d);if(!g)return void ai(a,{type:"terminal_error",error:"Worktree not found"});c.terminalSubscription&&(await c.terminalSubscription.unsubscribe(),c.terminalSubscription=null);let m=(0,i.mf)(e,d);if("foreign"===(await (0,z.s_)(m,g.path)).verdict)return void ai(a,{type:"terminal_error",error:A.u});let n=y();if(n.getSubscriberCount(m)>=4)return void ai(a,{type:"terminal_error",error:"Terminal subscriber limit reached"});let o=!1,p=Date.now(),q=await n.subscribe(m,{onOutput:b=>{if(!o){o=!0;let a=Math.max(0,Math.round(Date.now()-p));l.firstOutputLatencyCount+=1,l.firstOutputLatencyTotalMs+=a,l.firstOutputLatencyLastMs=a,l.firstOutputLatencyMinMs=null===l.firstOutputLatencyMinMs?a:Math.min(l.firstOutputLatencyMinMs,a),l.firstOutputLatencyMaxMs=null===l.firstOutputLatencyMaxMs?a:Math.max(l.firstOutputLatencyMaxMs,a)}ai(a,{type:"terminal_output",data:b})},onExit:({exitCode:b})=>{ai(a,{type:"terminal_exit",exitCode:b})},onError:b=>{(async()=>{try{if(await (0,A.y)(d,m)===null){let b=await n.captureSnapshot(m,{startLine:-200});b.length>0&&ai(a,{type:"terminal_output",data:b,fallback:!0})}}catch{}ai(a,{type:"terminal_error",error:b.message,fallback:!0})})()}});c.terminalSubscription={worktreeId:d,cliToolId:e,sessionName:m,startedAt:p,unsubscribe:q.unsubscribe},ai(a,{type:"terminal_status",connected:!0,worktreeId:d,cliToolId:e})}function ak(a,b){let c=R.get(a);if(!c)return b();let d=(c.terminalWriteQueue??Promise.resolve()).then(b,b);return c.terminalWriteQueue=d.catch(()=>void 0),d}function al(a,b){return ak(a,()=>an(a,b))}function am(a,b){return ak(a,()=>ao(a,b))}async function an(a,b){let c=R.get(a),d=c?.terminalSubscription;if(!d)return void ai(a,{type:"terminal_error",error:"No active terminal subscription"});let e="string"==typeof b.data?b.data:"";if(0===e.length||e.length>4096)return void ai(a,{type:"terminal_error",error:"Invalid terminal input"});try{let b=await (0,A.y)(d.worktreeId,d.sessionName);if(null!==b)return void ai(a,{type:"terminal_error",error:b});await y().sendInput(d.sessionName,e)}catch(b){ai(a,{type:"terminal_error",error:b instanceof Error?b.message:"Failed to send terminal input"})}}async function ao(a,b){let c=R.get(a),d=c?.terminalSubscription;if(d){if("number"!=typeof b.cols||!Number.isInteger(b.cols)||b.cols<20||b.cols>500||"number"!=typeof b.rows||!Number.isInteger(b.rows)||b.rows<5||b.rows>200)return void ai(a,{type:"terminal_error",error:"Invalid terminal resize payload"});try{let c=await (0,A.y)(d.worktreeId,d.sessionName);if(null!==c)return void ai(a,{type:"terminal_error",error:c});await y().resize(d.sessionName,b.cols,b.rows)}catch(b){ai(a,{type:"terminal_error",error:b instanceof Error?b.message:"Failed to resize terminal"})}}}async function ap(a){let b=R.get(a);if(b?.terminalSubscription){try{await b.terminalSubscription.unsubscribe()}catch{}b.terminalSubscription=null,ai(a,{type:"terminal_status",connected:!1})}}function aq(a){let b=S.get(a);return!!b&&b.size>0}let ar={publish:ag,hasSubscribers:aq,cleanupRooms:aB,migrateRooms:az};function as(){let a=O();return a&&a!==ar?a:null}function at(a,b){null===O()&&0===S.size&&function(a,b,c=Date.now()){let d=(0,M.v)("__realtimeUnroutedPublish",()=>({total:0,suppressed:0,lastWarnedAt:null,operations:{}}));if(d.total+=1,d.operations[a]=(d.operations[a]??0)+1,null!==d.lastWarnedAt&&c-d.lastWarnedAt<6e4){d.suppressed+=1;return}let e=d.suppressed;d.suppressed=0,d.lastWarnedAt=c,N.warn("realtime:no-room-publisher",{operation:a,worktreeId:b,total:d.total,suppressedSinceLastWarning:e,operations:{...d.operations}})}(a,b)}function au(a,b){let c=as();if(c)return void c.publish(a,b);at("broadcast",a),ag(a,b)}function av(a){let b=as();return b?b.hasSubscribers(a):(at("hasRoomSubscribers",a),aq(a))}function aw(a,b){b.worktreeId?au(b.worktreeId,{type:a,...b}):P.warn("broadcast:missing-worktree-id")}let ax="worktree_renamed";function ay(a){let b=as();return b?b.migrateRooms(a):az(a)}function az(a){let b=new Map;for(let{oldId:c,newId:d}of a)c&&d&&c!==d&&b.set(c,d);if(0===b.size)return[];let c=[];for(let[a,d]of b){let b=S.get(a);b&&0!==b.size&&(S.delete(a),c.push({oldId:a,newId:d,sockets:b}))}let d=[];for(let{oldId:a,newId:b,sockets:e}of c){let c=S.get(b)??new Set;for(let d of e){c.add(d);let e=R.get(d);e&&(e.worktreeIds.delete(a),e.worktreeIds.add(b)),ai(d,{type:ax,worktreeId:b,previousWorktreeId:a})}S.set(b,c),d.push({oldId:a,newId:b,subscribers:e.size})}for(let a of R.values()){let c=a.terminalSubscription;if(!c)continue;let d=b.get(c.worktreeId);if(d)try{if(!(0,h.hR)(c.cliToolId))continue;c.sessionName=(0,i.mf)(c.cliToolId,d),c.worktreeId=d}catch(a){P.warn("terminal:rename-failed",{worktreeId:c.worktreeId,newId:d,error:a instanceof Error?a.message:String(a)})}}return d.length>0&&P.info("rooms:migrated",{count:d.length}),d}function aA(a){let b=as();if(b)return void b.cleanupRooms(a);aB(a)}function aB(a){for(let b of a){let a=S.get(b);a&&(a.forEach(a=>{let c=R.get(a);c&&c.worktreeIds.delete(b)}),S.delete(b))}}function aC(){let a=null!==T&&T.unregister();T=null,(a||null===O())&&L(),ac(),Q&&(R.forEach(a=>{a.ws.close()}),R.clear(),S.clear(),Q.close(),Q=null)}let aD={handleMessage:ae,runHeartbeatSweep:aa,startHeartbeat:ab,stopHeartbeat:ac,handleClientVersion:af,handleProxyUpgrade:_,handleTerminalSubscribe:aj,handleTerminalInput:al,handleTerminalResize:am,handleTerminalUnsubscribe:ap,handleDisconnect:ah,registerClientForTest(a,b=!0){R.set(a,{ws:a,worktreeIds:new Set,terminalSubscription:null,isAlive:b})},getClientInfoForTest:a=>R.get(a),listClientsForTest:()=>Array.from(R.values()),resetStateForTest(){ac(),R.clear(),S.clear()}}},43925:(a,b,c)=>{"use strict";c.d(b,{PJ:()=>l,dz:()=>m,vQ:()=>j});var d=c(57836),e=c(23854),f=c(72626),g=c(30008),h=c(56365);let i=(0,f.h)("relay-triggers");function j(a,b,d,e){let f={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1634),c.e(3480),c.e(252),c.e(8800),c.e(7905),c.e(9731),c.e(8918),c.e(5595),c.e(611),c.e(5625),c.e(3077),c.e(850),c.e(1210)]).then(c.bind(c,71210));await a(f,{settled:e})}catch(c){i.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:f.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function k(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1634),c.e(3480),c.e(252),c.e(8800),c.e(7905),c.e(9731),c.e(8918),c.e(5595),c.e(611),c.e(5625),c.e(3077),c.e(850),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){i.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function l(){m(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&((0,g.yg)(a.worktreeId,a.cliToolId,a.instanceId,(0,h.VM)(a.cliToolId).capabilities.eventIdentity)||function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1634),c.e(3480),c.e(252),c.e(8800),c.e(7905),c.e(9731),c.e(8918),c.e(5595),c.e(611),c.e(5625),c.e(3077),c.e(850),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){i.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId))});let a=setInterval(()=>void k(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function m(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},47990:()=>{},54036:(a,b,c)=>{"use strict";c.d(b,{aq:()=>d,gu:()=>f,kr:()=>h});let d="cm_auth_token",e=/^[0-9a-f]{64}$/;function f(a){return!!a&&e.test(a)}let g=2592e6;function h(){let a=process.env.CM_AUTH_EXPIRE,b=Date.now();if(a)try{return b+function(a){let b=a.match(/^(\d+)([hdm])$/);if(!b)throw Error(`Invalid duration format: "${a}". Use Nh, Nd, or Nm (e.g., "24h", "7d", "90m")`);let c=parseInt(b[1],10),d=b[2],e={h:36e5,d:864e5,m:6e4}[d];if(void 0===e)throw Error(`Invalid duration unit: "${d}"`);let f=c*e;if(f<36e5)throw Error(`Duration too short: minimum is 1h (60m). Got: "${a}"`);if(f>g)throw Error(`Duration too long: maximum is 30d (720h). Got: "${a}"`);return f}(a)}catch{return b+864e5}return process.env.CM_AUTH_TOKEN_HASH?b+864e5:null}},55233:(a,b,c)=>{"use strict";c.d(b,{DH:()=>o,b3:()=>q,dV:()=>p});var d=c(25754),e=c(88807),f=c(43167),g=c(73753),h=c(72626),i=c(72119),j=c(52445),k=c(61191),l=c(27519);let m=(0,h.h)("push/model-change-notifier"),n={en:i.agentModel.changed,ja:j.agentModel.changed};function o(a,b,c){return n[(0,k.resolvePushLocale)(a)].replace("{from}",b).replace("{to}",c)}function p(a){try{let b=(0,f.Se)(a),c=null;for(let a of b){let b=a.updatedAt.getTime();(null===c||b>c.updatedAt)&&(c={updatedAt:b,locale:a.locale})}return(0,k.resolvePushLocale)(c?.locale??d.Xn)}catch{return d.Xn}}async function q(a){if(!(0,l.lU)())return m.debug("model-change-push-suppressed",{worktreeId:a.worktreeId,instanceId:a.instanceId,reason:"unconfigured"}),"unconfigured";try{await (0,k.notifyPushSubscribers)({worktreeId:a.worktreeId,worktreeName:function(a){try{return(0,g.getWorktreeById)((0,e.getDbInstance)(),a)?.name??a}catch{return a}}(a.worktreeId),kind:"failure",agentName:a.instanceId,instanceId:a.instanceId,modelChange:{from:a.from,to:a.to,body:function(a,b){let c={};for(let e of d.dI)c[e]=o(e,a,b);return c}(a.from,a.to)}},a.at),m.info("model-change-push-raised",{worktreeId:a.worktreeId,instanceId:a.instanceId,from:a.from,to:a.to,source:a.source})}catch(b){m.warn("model-change-push-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}return null}},56455:(a,b,c)=>{"use strict";c.d(b,{u:()=>g,y:()=>h});var d=c(88807),e=c(56791),f=c(31347);let g="Session belongs to another CommandMate server";async function h(a,b){let c=(0,e.getWorktreeById)((0,d.getDbInstance)(),a);return c?"foreign"===(await (0,f.s_)(b,c.path)).verdict?g:null:"Worktree not found"}},57836:(a,b,c)=>{"use strict";c.d(b,{Jp:()=>m,Te:()=>n,hd:()=>l,wN:()=>j});var d=c(24455),e=c(72626),f=c(36925);let g=(0,e.h)("waiting-episode-state"),h=(0,f.v)("__sessionWaitingEpisodes",()=>new Map),i=(0,f.v)("__sessionWaitingTransitionListeners",()=>new Set);function j(a){return i.add(a),()=>{i.delete(a)}}function k(a){for(let b of i)try{b(a)}catch(b){g.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function l({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:f=null,structuredSince:g=null,now:i=Date.now()}){let j=(0,d.v7)(a,b,c),l=h.get(j);if(!e)return void 0===l||(h.delete(j),k({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:i})),null;if(void 0!==l)return l.kind=f,l.since;let m=g??i;return h.set(j,{since:m,kind:f}),k({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:f,at:i}),m}function m(a,b,c){return h.get((0,d.v7)(a,b,c))??null}function n(a){let b=`${a}${d.CS}`;for(let a of h.keys())if(a.startsWith(b))return!0;return!1}},88081:(a,b,c)=>{"use strict";c.d(b,{JT:()=>m,QK:()=>k,aq:()=>f.aq,nr:()=>l,r0:()=>p,sO:()=>h,x:()=>q,y2:()=>n,zr:()=>o});var d=c(55511),e=c.n(d),f=c(54036);let g={maxAttempts:5,lockoutDuration:9e5,cleanupInterval:36e5},h=86400,i=(()=>{let a=process.env.CM_AUTH_TOKEN_HASH||void 0;return a?(0,f.gu)(a)?a:void console.error("[auth] CM_AUTH_TOKEN_HASH is not a valid SHA-256 hash"):void 0})(),j=(0,f.kr)();function k(a){return e().createHash("sha256").update(a).digest("hex")}function l(a){if(!i||!a||"string"!=typeof a||null!==j&&Date.now()>j)return!1;let b=k(a),c=Buffer.from(b,"hex"),d=Buffer.from(i,"hex");return c.length===d.length&&e().timingSafeEqual(c,d)}function m(a){let b={};if(!a)return b;for(let c of a.split(";")){let a=c.indexOf("=");if(-1===a)continue;let d=c.substring(0,a).trim(),e=c.substring(a+1).trim();d&&(b[d]=e)}return b}function n(){return!!i}function o(){if(null===j)return 0;let a=j-Date.now();return a<=0?0:Math.floor(a/1e3)}function p(a){return{httpOnly:!0,sameSite:"strict",secure:!!process.env.CM_HTTPS_CERT,maxAge:a,path:"/"}}function q(){let a=new Map,b=setInterval(()=>{let b=Date.now();for(let[c,d]of a){let e=null===d.lockedUntil||b>d.lockedUntil,f=b-d.lastAttempt>g.lockoutDuration;e&&f&&a.delete(c)}},g.cleanupInterval);return b.unref&&b.unref(),{checkLimit(b){let c=a.get(b);if(!c)return{allowed:!0};if(null!==c.lockedUntil){let a=Date.now();if(a<c.lockedUntil)return{allowed:!1,retryAfter:Math.ceil((c.lockedUntil-a)/1e3)};c.attempts=0,c.lockedUntil=null}return{allowed:!0}},recordFailure(b){let c=Date.now(),d=a.get(b)||{attempts:0,lockedUntil:null,lastAttempt:c};d.attempts++,d.lastAttempt=c,d.attempts>=g.maxAttempts&&(d.lockedUntil=c+g.lockoutDuration),a.set(b,d)},recordSuccess(b){a.delete(b)},destroy(){clearInterval(b),a.clear()}}}},90164:(a,b,c)=>{"use strict";c.d(b,{Dk:()=>e,kD:()=>f});let d="https://github.com/Kewton/CommandMate",e=`${d}/releases/`,f=`${d}/blob/main/docs/security-guide.md`}};
|