commandmate 0.49.2 → 0.49.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 +241 -234
- package/.next/app-path-routes-manifest.json +19 -18
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +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 +4 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +4 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -2
- 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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +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 +2 -2
- 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 -144
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +10 -10
- package/.next/server/app/worktrees/[id]/page_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 +19 -18
- package/.next/server/chunks/1308.js +1 -0
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2897.js +1 -1
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3801.js +7 -7
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4490.js +1 -0
- package/.next/server/chunks/4911.js +1 -1
- package/.next/server/chunks/4936.js +1 -1
- package/.next/server/chunks/5209.js +2 -2
- package/.next/server/chunks/5350.js +212 -0
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/7926.js +1 -0
- package/.next/server/chunks/8581.js +1 -1
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +89 -88
- package/.next/server/chunks/8918.js +3 -3
- package/.next/server/chunks/9169.js +1 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +5 -5
- package/.next/server/chunks/9702.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-07a237575e1ceb9e.js → 2407-87ec01332344ec2b.js} +1 -1
- package/.next/static/chunks/3931-3ef48b8d97357282.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/{layout-4f64316957b0a8e5.js → layout-b9d8aef70e4f17b2.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +2 -1
- package/dist/cli/commands/relays.d.ts +2 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +142 -5
- package/dist/cli/commands/report.d.ts +7 -2
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +19 -6
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +9 -2
- package/dist/cli/commands/task.d.ts +22 -0
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +26 -18
- package/dist/cli/types/api-responses.d.ts +52 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client-deadline.d.ts +28 -0
- package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
- package/dist/cli/utils/api-client-deadline.js +46 -0
- package/dist/cli/utils/api-client-errors.d.ts +118 -0
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
- package/dist/cli/utils/api-client-errors.js +210 -0
- package/dist/cli/utils/api-client.d.ts +3 -133
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +30 -257
- package/dist/lib/cli-tools/types.d.ts +6 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/server/locales/en/worktree.json +7 -0
- package/dist/server/locales/ja/worktree.json +7 -0
- package/dist/server/src/lib/cli-tools/claude.js +8 -2
- package/dist/server/src/lib/cli-tools/command-code.js +7 -15
- package/dist/server/src/lib/cli-tools/copilot.js +154 -25
- package/dist/server/src/lib/cli-tools/opencode.js +157 -6
- package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +41 -8
- package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +94 -295
- package/dist/server/src/lib/cli-tools/vibe-local.js +87 -0
- package/dist/server/src/lib/db/chat-db.js +14 -1
- package/dist/server/src/lib/db/db-instance.js +114 -2
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
- package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
- package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
- package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
- package/dist/server/src/lib/db/relay-bind-db.js +88 -167
- package/dist/server/src/lib/db/relay-db-base.js +20 -0
- package/dist/server/src/lib/db/relay-db-count.js +49 -0
- package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
- package/dist/server/src/lib/db/relay-db-hold.js +250 -0
- package/dist/server/src/lib/db/relay-db.js +33 -92
- package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +62 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +70 -0
- package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
- package/dist/server/src/lib/relay/relay-delivery.js +359 -79
- package/dist/server/src/lib/relay/relay-messages.js +13 -0
- package/dist/server/src/lib/relay/relay-system-line.js +28 -15
- package/dist/server/src/lib/relay/types.js +14 -2
- package/dist/server/src/lib/session/claude-session.js +4 -1
- package/dist/server/src/lib/session/current-output-builder.js +7 -5
- package/dist/server/src/lib/session/instance-input-lock.js +47 -2
- package/dist/server/src/lib/session/prompt-submit-receipt.js +87 -18
- package/dist/server/src/lib/session/prompt-waiting-guard.js +8 -2
- package/dist/server/src/lib/session/respond-target.js +82 -0
- package/dist/server/src/lib/session/send-attempt-state.js +130 -3
- package/dist/server/src/lib/session/send-user-message.js +78 -7
- package/dist/server/src/lib/session/structured-prompt.js +12 -7
- package/dist/server/src/lib/session/worktree-session-reconcile.js +10 -0
- package/dist/server/src/lib/session-key-sender.js +6 -1
- package/package.json +1 -1
- package/release-notes/0.49.3.json +52 -0
- package/.next/server/chunks/1062.js +0 -1
- package/.next/server/chunks/110.js +0 -1
- package/.next/server/chunks/2422.js +0 -1
- package/.next/server/chunks/3756.js +0 -1
- package/.next/server/chunks/5630.js +0 -1
- package/.next/server/chunks/6808.js +0 -4
- package/.next/server/chunks/9198.js +0 -144
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +0 -1
- /package/.next/static/{yGatWDsS532awSs51kXyd → LNfVZiq6FZwKsV7L9Mi6M}/_buildManifest.js +0 -0
- /package/.next/static/{yGatWDsS532awSs51kXyd → LNfVZiq6FZwKsV7L9Mi6M}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
exports.id=8581,exports.ids=[8581],exports.modules={762:(a,b,c)=>{Promise.resolve().then(c.bind(c,96908))},1102:(a,b,c)=>{"use strict";c.d(b,{m_:()=>n});var d=c(21124),e=c(38301),f=c(23312);function g(a,b,c){return Math.min(Math.max(a,4),Math.max(4,c-b-4))}function h(a,b,c,d){switch(a){case"top":return b.top-c.height-8<4;case"bottom":return b.top+b.height+8+c.height>d.height-4;case"left":return b.left-c.width-8<4;default:return b.left+b.width+8+c.width>d.width-4}}function i(a,b,c){switch(a){case"top":return Math.max(0,b.top-8-4);case"bottom":return Math.max(0,c.height-4-(b.top+b.height+8));case"left":return Math.max(0,b.left-8-4);default:return Math.max(0,c.width-4-(b.left+b.width+8))}}function j(a){return{maxWidth:`${a}px`,whiteSpace:"normal",overflowWrap:"anywhere"}}c(72957);let k={maxWidth:"max-width",whiteSpace:"white-space",overflowWrap:"overflow-wrap"};function l(a,b){let c=null===b?null:j(b);for(let[b,d]of Object.entries(k))null===c?a.style.removeProperty(d):a.style.setProperty(d,c[b])}let m={top:-9999,left:-9999};function n({content:a,placement:b="right",delay:c=100,children:k,className:n,zIndex:o,fallbackPlacement:p}){let[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(null),[w,x]=(0,e.useState)(null),y=(0,e.useRef)(null),z=(0,e.useRef)(null),A=(0,e.useRef)(null),B=(0,e.useCallback)(()=>{null!==A.current&&(clearTimeout(A.current),A.current=null)},[]),C=(0,e.useCallback)(()=>{B(),A.current=setTimeout(()=>{r(!0),A.current=null},c)},[c,B]),D=(0,e.useCallback)(()=>{B(),r(!1)},[B]),E=(0,e.useCallback)(()=>{t(!0)},[]),F=(0,e.useCallback)(()=>{t(!1)},[]);return(0,e.useCallback)(()=>{B(),r(!1),t(!1)},[B]),(0,e.useCallback)(()=>{let a=y.current,c=z.current;if(!a||!c)return;let d=a.getBoundingClientRect(),e={top:d.top,left:d.left,width:d.width,height:d.height},f={width:window.innerWidth,height:window.innerHeight};l(c,null);let j=c.getBoundingClientRect(),k=function(a,b,c,d,e){let f=a=>"left"===a||"right"===a;if(void 0===e||e===a||!f(a)||!f(e)||!h(a,b,c,d)||!h(e,b,c,d))return null;let g=i(a,b,d),j=i(e,b,d),k=j>g?e:a,l=Math.floor(Math.max(g,j));return l>=80?{placement:k,maxWidth:l}:null}(b,e,{width:j.width,height:j.height},f,p);k&&(l(c,k.maxWidth),j=c.getBoundingClientRect()),x(k?k.maxWidth:null),v(function a(b,c,d,e,f){let i,j;if(void 0!==f&&f!==b&&h(b,c,d,e)&&!h(f,c,d,e))return a(f,c,d,e);let k=c.left+c.width/2-d.width/2,l=c.top+c.height/2-d.height/2;switch(b){case"top":i=c.top-d.height-8,j=k;break;case"bottom":i=c.top+c.height+8,j=k;break;case"left":i=l,j=c.left-d.width-8;break;default:i=l,j=c.left+c.width+8}return{top:g(i,d.height,e.height),left:g(j,d.width,e.width)}}(k?k.placement:b,e,{width:j.width,height:j.height},f,k?void 0:p))},[b,p]),(0,d.jsxs)("span",{ref:y,"data-testid":"tooltip-wrapper",className:n?`relative inline-flex ${n}`:"relative inline-flex",tabIndex:-1,onMouseEnter:C,onMouseLeave:D,onFocus:E,onBlur:F,children:[k,(q||s)&&"undefined"!=typeof document&&(0,f.createPortal)((0,d.jsx)("span",{ref:z,role:"tooltip","aria-hidden":"true","data-placement":b,className:"fixed z-40 whitespace-nowrap px-2 py-1 text-xs font-medium rounded bg-foreground text-background shadow-lg pointer-events-none",style:{...u??m,...void 0===o?{}:{zIndex:o},...null===w?{}:j(w)},children:a}),document.body)]})}},1483:(a,b,c)=>{var d={"./en/keyboardShortcuts.json":[53722,1341],"./ja/keyboardShortcuts.json":[88356,8356]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=1483,a.exports=e},1637:(a,b,c)=>{"use strict";c.d(b,{Ej:()=>k,Jd:()=>h,Mq:()=>j,rH:()=>i});var d=c(21124),e=c(38301),f=c(20481),g=c(22317);let h="bg-transparent border-2 border-muted-foreground",i="status.unknown";function j(a,b){return!0===b&&"ready"===a}let k=(0,e.memo)(function({status:a,label:b,waitingKind:c,unclassified:e}){let k=(0,f.c)("common"),l=j(a,e);return(0,d.jsx)(g.m,{"data-testid":"status-indicator",status:a,label:l?b??k(i):b,waitingKind:c,size:"sm",className:l?h:void 0,"data-unclassified":l?"true":void 0})})},3839:(a,b,c)=>{"use strict";c.d(b,{K:()=>o,m:()=>p});var d=c(21124),e=c(38301),f=c(20481),g=c(38882),h=c(59405),i=c(12927),j=c(10290),k=c(63474),l=c(63156),m=c(11010),n=c(20316);let o="data-branch-row-actions",p=(0,e.memo)(function({branch:a,isSelected:b,onOpenChange:c,worktreeStatus:p=null,onWorktreeStatusChange:q}){let r=(0,f.c)("common"),s=(0,f.c)("worktree"),{showToast:t}=(0,k.dj)(),u=(0,e.useCallback)(async a=>{try{await (0,l.l)(a),t(r("branchItem.copied"),"success")}catch{t(r("branchItem.copyFailed"),"error")}},[t,r]);return(0,d.jsxs)(j.rI,{onOpenChange:c,children:[(0,d.jsx)(j.ty,{asChild:!0,children:(0,d.jsx)("button",{type:"button","data-testid":"branch-row-actions","aria-label":r("branchItem.actions",{name:a.name}),title:r("branchItem.actions",{name:a.name}),className:`absolute right-3 top-[5px] flex h-6 w-6 items-center justify-center rounded-md
|
|
2
2
|
text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground
|
|
3
3
|
focus:outline-none focus-visible:ring-2 focus-visible:ring-ring
|
|
4
|
-
data-[state=open]:text-sidebar-foreground ${b?"":"[@media(hover:none)]:hidden"}`,children:(0,d.jsx)(g.A,{className:"h-4 w-4","aria-hidden":"true"})})}),(0,d.jsxs)(j.SQ,{align:"end",[o]:"",onEscapeKeyDown:a=>a.stopPropagation(),children:[(0,d.jsx)(j._2,{asChild:!0,children:(0,d.jsx)("a",{href:`/worktrees/${a.id}`,target:"_blank",rel:"noopener noreferrer",children:r("branchItem.openInNewTab")})}),(0,d.jsx)(j._2,{onSelect:()=>void u(a.name),children:r("branchItem.copyBranchName")}),a.worktreePath&&(0,d.jsx)(j._2,{onSelect:()=>void u(a.worktreePath??""),children:r("branchItem.copyPath")}),q&&(0,d.jsxs)(i.Pb,{children:[(0,d.jsxs)(i.ZP,{"data-testid":"branch-row-status",className:"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-muted data-[state=open]:bg-muted",children:[(0,d.jsx)("span",{className:"flex-1",children:r("branchItem.status")}),(0,d.jsx)("span",{"data-testid":"branch-row-status-current",className:"text-xs text-muted-foreground",children:s((0,n.Zh)(p))}),(0,d.jsx)(h.A,{className:"h-3.5 w-3.5 text-muted-foreground","aria-hidden":"true"})]}),(0,d.jsx)(i.ZL,{children:(0,d.jsx)(i.G5,{[o]:"",sideOffset:4,collisionPadding:8,style:{zIndex:m.M.POPOVER},className:"min-w-[9rem] overflow-hidden rounded-md border border-border bg-surface p-1 text-surface-foreground shadow-lg",onEscapeKeyDown:a=>a.stopPropagation(),children:(0,d.jsx)(j.Hr,{value:p??"",onValueChange:a=>{let b=""===a?null:a;b!==p&&q(b)},children:n.m9.map(a=>(0,d.jsx)(j.Ht,{value:a.value??"",children:s(a.labelKey)},a.labelKey))})})})]})]})]})})},3890:(a,b,c)=>{"use strict";c.d(b,{AppProviders:()=>E});var d=c(21124),e=c(42378);let f=["/login","/api/auth/login","/api/auth/logout","/api/auth/status","/api/remote/pair","/manifest.webmanifest","/sw.js","/offline"];var g=c(37397),h=c(45523),i=c(81092),j=c(84342),k=c(5772),l=c(64632),m=c(89184),n=c(63157),o=c(52761),p=c(74930),q=c(79782),r=c(23910),s=c(62197),t=c(73060),u=c(63474),v=c(74132),w=c(67693),x=c(90102),y=c(38301),z=c(20481),A=c(25345),B=c(11010),C=c(18608);function D(){let a=(0,z.c)("pwa"),[b,c]=(0,y.useState)(null);(0,y.useRef)(!1);let e=(0,C.W)();return!b||e?null:(0,d.jsx)("div",{"data-testid":"pwa-update-toast",role:"status","aria-live":"polite",className:"pointer-events-none fixed bottom-0 right-0 flex max-w-full justify-end px-4 pb-safe",style:{zIndex:B.M.TOAST},children:(0,d.jsxs)("div",{"data-testid":"pwa-update-toast-card",className:"pointer-events-auto mb-4 flex items-center gap-3 rounded-lg border border-border bg-surface px-4 py-3 shadow-lg",children:[(0,d.jsx)("span",{className:"text-sm font-medium text-foreground",children:a("update.available")}),(0,d.jsxs)("button",{type:"button",onClick:()=>{b.postMessage({type:"SKIP_WAITING"})},className:"inline-flex items-center gap-1.5 rounded-md bg-accent-600 px-3 py-1.5 text-sm font-medium text-white transition-colors hover:bg-accent-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ring-offset-background dark:bg-accent-500 dark:hover:bg-accent-600",children:[(0,d.jsx)(A.A,{className:"h-4 w-4"}),a("update.reload")]})]})})}function E({children:a,locale:b,messages:c,timeZone:y,authEnabled:z=!1}){var A;let B=(A=(0,e.usePathname)(),!z||!f.includes(A??""));return(0,d.jsx)(g.default,{locale:b,messages:c,timeZone:y,children:(0,d.jsx)(u.tE,{children:(0,d.jsx)(h.N,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:(0,d.jsx)(j.O,{authEnabled:z,children:(0,d.jsx)(k.W5,{children:(0,d.jsx)(i.GB,{children:(0,d.jsx)(p.tS,{enabled:B,children:(0,d.jsxs)(n.g7,{enabled:B,children:[(0,d.jsx)(v.rM,{}),(0,d.jsx)(x.o,{}),(0,d.jsx)(w.H,{}),(0,d.jsx)(l.E,{children:(0,d.jsx)(m.S,{children:(0,d.jsx)(q.aF,{children:(0,d.jsx)(r.y2,{enabled:B,children:(0,d.jsxs)(s.NS,{children:[(0,d.jsx)(o.Bo,{children:a}),(0,d.jsx)(D,{}),(0,d.jsx)(t.gZ,{})]})})})})})]})})})})})})})})}},4267:(a,b,c)=>{"use strict";c.d(b,{Lt:()=>h,Wj:()=>f,eu:()=>e,fJ:()=>g});var d=c(17252);let e=2,f=6,g=["claude","codex","antigravity"];function h(a){return a.length<e||a.length>f?{valid:!1,error:`Must be ${e}-${f} elements`}:a.every(a=>"string"==typeof a&&d.XH.includes(a))?new Set(a).size!==a.length?{valid:!1,error:"Duplicate tool IDs not allowed"}:{valid:!0,value:a}:{valid:!1,error:"Invalid CLI tool ID"}}},4558:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(43692),e=c(86802),f=c(25754);let g=(0,d.A)(async({requestLocale:a})=>{let b=await a;if(!(0,f.d9)(b)){let a=await (0,e.UL)(),c=await (0,e.b3)();b=(0,f.rv)(a.get(f.gB)?.value,c.get("accept-language"))}let[d,g,h,i,j,k,l,m,n,o,p,q,r,s,t]=await Promise.all([c(61118)(`./${b}/common.json`),c(90338)(`./${b}/worktree.json`),c(62081)(`./${b}/autoYes.json`),c(66125)(`./${b}/error.json`),c(72637)(`./${b}/prompt.json`),c(51877)(`./${b}/auth.json`),c(38898)(`./${b}/schedule.json`),c(80407)(`./${b}/commandPalette.json`),c(70288)(`./${b}/home.json`),c(60887)(`./${b}/review.json`),c(75567)(`./${b}/pwa.json`),c(99127)(`./${b}/notifications.json`),c(1483)(`./${b}/keyboardShortcuts.json`),c(80812)(`./${b}/externalApps.json`),c(18913)(`./${b}/skills.json`)]);return{locale:b,timeZone:"UTC",messages:{common:d.default,worktree:g.default,autoYes:h.default,error:i.default,prompt:j.default,auth:k.default,schedule:l.default,commandPalette:m.default,home:n.default,review:o.default,pwa:p.default,notifications:q.default,keyboardShortcuts:r.default,externalApps:s.default,skills:t.default}}})},5682:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/CommandMate/CommandMate/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/CommandMate/CommandMate/src/app/error.tsx","default")},5772:(a,b,c)=>{"use strict";c.d(b,{Ps:()=>k,W5:()=>j});var d=c(21124),e=c(38301),f=c(90076),g=c(12480);let h={size:g.r5,setSize:()=>{},isMobile:!1,factor:g.d8[g.r5].factor,isAvailable:!1},i=(0,e.createContext)(h);function j({children:a}){let{size:b,setSize:c,isAvailable:h}=(0,g.of)(),j=(0,f.a)(),k=(0,e.useMemo)(()=>({size:b,setSize:c,isMobile:j,factor:g.d8[b].factor,isAvailable:h}),[b,c,j,h]);return(0,d.jsx)(i.Provider,{value:k,children:a})}function k(){return(0,e.useContext)(i)}},6074:(a,b,c)=>{"use strict";c.d(b,{O:()=>e});var d=c(38301);function e(a,b){let[c,e]=(0,d.useState)(a?"open":"closed");return a&&"open"!==c?e("open"):a||"open"!==c||e("exiting"),{shouldRender:a||"closed"!==c,isExiting:!a&&"exiting"===c}}},9042:(a,b,c)=>{"use strict";c.d(b,{AppShellGate:()=>bH});var d=c(21124),e=c(42378),f=c(38301),g=c.n(f),h=c(81092),i=c(90076);let j={showSidebar:!0,showGlobalNav:!0,showLocalNav:!1,autoCollapseSidebar:!1},k=[{prefix:"/worktrees/",config:{showGlobalNav:!1,showLocalNav:!0}},{prefix:"/sessions",config:{autoCollapseSidebar:!0}}];var l=c(5772),m=c(3991),n=c.n(m),o=c(52761);let p=(0,f.forwardRef)(function({href:a,onClick:b,target:c,...f},g){let h=(0,e.usePathname)(),i=(0,o.Hq)();return(0,d.jsx)(n(),{ref:g,href:a,target:c,onClick:d=>{var e;b?.(d),d.defaultPrevented||0!==(e=d).button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||void 0!==c&&"_self"!==c||/^([a-z][a-z0-9+.-]*:)?\/\//i.test(a)||/^(mailto:|tel:)/i.test(a)||(d.preventDefault(),a!==h&&i.push(a))},...f})});var q=c(20481),r=c(75903),s=c(65828),t=c(59268),u=c(94684),v=c(10366),w=c(99615),x=c(22023),y=c(47817),z=c(38812),A=c(1637),B=c(72380),C=c(77560),D=c(89877);let E=(0,f.memo)(function({worktrees:a,visibleWorktreeIds:b,selectedWorktreeId:c,onSelect:e,onNavigate:f}){let g=(0,q.c)("common"),h=a.length;if(0===h)return null;let i=a.slice(0,3),j=h-i.length;return(0,d.jsxs)("section",{"data-testid":"sidebar-needs-attention","aria-label":g("sidebar.needsAttention"),className:"flex-shrink-0 px-2 pt-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 pb-1 text-xs text-sidebar-muted",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:g("sidebar.needsAttention")}),(0,d.jsx)("span",{"data-testid":"sidebar-needs-attention-count","aria-label":g("attention.badgeLabel",{count:h}),className:"flex-shrink-0 rounded-full bg-warning-subtle px-1.5 font-semibold leading-5 tabular-nums text-warning-foreground",children:h>99?"99+":h})]}),(0,d.jsx)("ul",{className:"space-y-0.5",children:i.map(a=>{let f=(0,D.XK)(a),h=!b.has(a.id),i=a.id===c;return(0,d.jsx)("li",{children:(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-attention-item","data-hidden-repository":h?"true":void 0,onClick:()=>e(a.id),"aria-current":i?"true":void 0,title:`${f.name} \xb7 ${f.repositoryName}`,className:`flex h-[34px] w-full min-w-0 items-center gap-2 rounded-md px-2 text-left transition-colors hover:bg-sidebar-hover focus:outline-none focus-visible:ring-2 focus-visible:ring-ring ${i?"bg-sidebar-hover":""}`,children:[(0,d.jsx)("span",{className:"flex w-4 flex-shrink-0 items-center justify-center",children:(0,d.jsx)(A.Ej,{status:"waiting",waitingKind:f.waitingKind})}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm text-sidebar-foreground",children:f.name}),(0,d.jsx)("span",{className:"min-w-0 max-w-[40%] flex-shrink truncate text-xs text-sidebar-muted",children:f.repositoryName}),h&&(0,d.jsx)(B.A,{"data-testid":"sidebar-attention-hidden-repository",className:"h-3.5 w-3.5 flex-shrink-0 text-sidebar-muted","aria-label":g("sidebar.hiddenRepository"),role:"img"})]})},a.id)})}),(0,d.jsx)(p,{href:C.ks,"data-testid":"sidebar-needs-attention-review-link",onClick:f,className:"mt-0.5 flex min-w-0 items-center rounded-md px-2 py-1 text-xs text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:(0,d.jsx)("span",{className:"min-w-0 truncate",children:j>0?g("sidebar.attentionMoreInReview",{count:j}):g("sidebar.openInReview")})})]})}),F=(0,f.memo)(function({branches:a,selectedWorktreeId:b,onBranchClick:c,forceExpanded:e}){let g=(0,q.c)("common"),[h,i]=(0,f.useState)(!1),j=e||h;return(0,d.jsxs)("div",{"data-testid":"branch-group-other",children:[(0,d.jsx)("div",{className:z.R8,children:(0,d.jsxs)("button",{type:"button","data-testid":"branch-group-other-toggle","aria-expanded":j,disabled:e,onClick:()=>i(a=>!a),className:"flex h-[30px] w-full min-w-0 items-center gap-2 rounded-[10px] px-3 text-left text-xs text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:cursor-default disabled:hover:bg-transparent",children:[(0,d.jsx)("svg",{className:`h-3 w-3 flex-shrink-0 transition-transform ${j?"rotate-90":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"})}),(0,d.jsx)("span",{className:"min-w-0 truncate",children:g("sidebar.otherBranches",{count:a.length})})]})}),j&&a.map(a=>(0,d.jsx)(z.yP,{branch:a,isSelected:a.id===b,onClick:()=>c(a.id),showRepositoryName:!1},a.id))]})});var G=c(85866),H=c(64936),I=c(10290),J=c(32482),K=c(35595);let L=[{mode:"grouped",labelKey:"sidebar.viewMode.grouped"},{mode:"flat",labelKey:"sidebar.viewMode.flat"},{mode:"sessions",labelKey:"sidebar.viewMode.sessions"}],M=[{key:"updatedAt",labelKey:"sort.updatedAt"},{key:"repositoryName",labelKey:"sort.repositoryName"},{key:"branchName",labelKey:"sort.branchName"},{key:"status",labelKey:"sort.status"}],N={updatedAt:"desc"},O={updatedAt:{asc:"sort.direction.oldestFirst",desc:"sort.direction.newestFirst"},repositoryName:{asc:"sort.direction.aToZ",desc:"sort.direction.zToA"},branchName:{asc:"sort.direction.aToZ",desc:"sort.direction.zToA"},status:{asc:"sort.direction.attentionFirst",desc:"sort.direction.attentionLast"}},P={asc:"sort.ascending",desc:"sort.descending"};function Q(a){a.preventDefault()}let R=(0,f.memo)(function({viewMode:a,onViewModeChange:b}){let c=(0,q.c)("common"),{sortKey:e,sortDirection:g,setSortKey:i,setSortDirection:j}=(0,h.VF)(),k=(0,f.useId)(),l=(0,f.useId)(),m=(0,f.useMemo)(()=>{let a=O[e]??P;return b=>c(a[b])},[e,c]),n=c(L.find(b=>b.mode===a)?.labelKey??"sidebar.viewMode.grouped"),o=c(M.find(a=>a.key===e)?.labelKey??`sort.${e}`),p=c("sidebar.listOptionsSummary",{view:n,sort:o,direction:m(g)}),r=a===h.e8&&e===h.P0&&g===h.RA,s=N[e]??"asc";return(0,d.jsxs)(I.rI,{children:[(0,d.jsx)(I.ty,{asChild:!0,children:(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-list-options","data-view-mode":a,"data-sort-key":e,"data-sort-direction":g,"aria-label":c("sidebar.listOptionsLabel",{summary:p}),title:p,className:"relative flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-sidebar-hover data-[state=open]:text-sidebar-foreground",children:[(0,d.jsx)(H.A,{className:"h-4 w-4","aria-hidden":"true"}),!r&&(0,d.jsx)("span",{"data-testid":"sidebar-list-options-indicator","aria-hidden":"true",className:"absolute right-1 top-1 h-1.5 w-1.5 rounded-full bg-accent-500"})]})}),(0,d.jsxs)(I.SQ,{"data-testid":"sidebar-list-options-menu",align:"end",collisionPadding:8,className:(0,K.cn)("w-52 max-w-[calc(100vw-16px)]","max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto"),children:[(0,d.jsx)(I.lp,{id:k,children:c("sidebar.viewLabel")}),(0,d.jsx)(I.Hr,{"data-testid":"view-mode-options","aria-labelledby":k,value:a,onValueChange:c=>{(0,J.$m)(c)&&c!==a&&b(c)},children:L.map(({mode:a,labelKey:b})=>(0,d.jsx)(I.Ht,{value:a,onSelect:Q,children:c(b)},a))}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.lp,{id:l,children:c("sort.label")}),(0,d.jsx)(I.Hr,{"data-testid":"sort-key-options","aria-labelledby":l,value:e,onValueChange:a=>{let b=M.find(b=>b.key===a);b&&b.key!==e&&(i(b.key),j(N[b.key]??"asc"))},children:M.map(({key:a,labelKey:b})=>(0,d.jsx)(I.Ht,{value:a,onSelect:Q,children:c(b)},a))}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.Hr,{"data-testid":"sort-direction-options","aria-label":c("sort.directionLabel"),value:g,onValueChange:a=>{("asc"===a||"desc"===a)&&j(a)},children:("asc"===s?["asc","desc"]:["desc","asc"]).map(a=>(0,d.jsx)(I.Ht,{value:a,onSelect:Q,children:m(a)},a))})]})]})}),S=(0,f.memo)(function({searchQuery:a,onSearchChange:b,viewMode:c,onViewModeChange:e}){let f=(0,q.c)("common");return(0,d.jsxs)("div",{"data-testid":"sidebar-list-toolbar",className:"flex flex-shrink-0 items-center gap-1 px-3 pt-2 pb-1.5",children:[(0,d.jsx)(G.pd,{type:"text",inputSize:"sm",placeholder:f("sidebar.searchBranches"),"aria-label":f("sidebar.searchBranches"),value:a,onChange:a=>b(a.target.value),className:"min-w-0 flex-1 border-sidebar-border bg-background shadow-none"}),(0,d.jsx)(R,{viewMode:c,onViewModeChange:e})]})});var T=c(1102),U=c(81497),V=c(45523),W=c(84342),X=c(85744),Y=c(62197),Z=c(12480),$=c(68232);async function _(){try{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"}catch{window.location.href="/login"}}let aa=I.ty;function ab(){let a=(0,q.c)("common"),{size:b,setSize:c}=(0,l.Ps)(),e=(0,h.pT)();return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.lp,{children:a("displaySize.ariaLabel")}),(0,d.jsx)(I.Hr,{value:b,onValueChange:a=>{(0,Z.fM)(a)&&c(a)},children:Z.Uf.map(b=>(0,d.jsx)(I.Ht,{value:b,children:a(`displaySize.${b}`)},b))}),e&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(I.lp,{children:a("repoTabBar.settingLabel")}),(0,d.jsx)(I.Hr,{value:e.repoTabBarMode,onValueChange:a=>{(0,J.m3)(a)&&e.setRepoTabBarMode(a)},children:J.EN.map(b=>(0,d.jsx)(I.Ht,{value:b,children:a(`repoTabBar.mode.${b}`)},b))})]})]})}function ac({children:a,testIdPrefix:b,side:c="top",align:e="end",showDisplayPreferences:g=!1,onNavigate:h}){let j=(0,q.c)("worktree"),k=(0,o.Hq)(),{theme:l,setTheme:m}=(0,V.D)(),{currentLocale:n,switchLocale:p}=(0,X.g)(),r=(0,W.H)(),s=(0,i.a)(),{open:t}=(0,Y.V0)(),u=(0,f.useRef)(!1),v=(0,f.useRef)(null),w="0.49.2",x=a=>{h?.(),k.push(a)};return(0,d.jsxs)(I.rI,{children:[a,(0,d.jsxs)(I.SQ,{side:c,align:e,collisionPadding:8,className:"w-56 max-w-[calc(100vw-16px)] max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto",onCloseAutoFocus:()=>{u.current&&(u.current=!1,queueMicrotask(t))},children:[(0,d.jsx)(I.lp,{"data-testid":`${b}-version`,children:j("activityBar.settingsMenu.version",{version:w?`v${w}`:"-"})}),(0,d.jsx)(I._2,{asChild:!0,onSelect:()=>{let a=v.current;if(v.current=null,!(a&&(0!==a.button||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey))){if(a?.preventDefault(),s)return void x("/more");u.current=!0}},children:(0,d.jsx)("a",{href:"/more","data-testid":`${b}-settings`,onClick:a=>{v.current=a},children:j("activityBar.settingsMenu.settings")})}),(0,d.jsx)(I._2,{onSelect:()=>x("/skills"),children:j("activityBar.settingsMenu.skills")}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.lp,{children:j("activityBar.settingsMenu.theme")}),(0,d.jsxs)(I.Hr,{value:l??"system",onValueChange:a=>m(a),children:[(0,d.jsx)(I.Ht,{value:"light",children:j("activityBar.settingsMenu.themeLight")}),(0,d.jsx)(I.Ht,{value:"dark",children:j("activityBar.settingsMenu.themeDark")}),(0,d.jsx)(I.Ht,{value:"system",children:j("activityBar.settingsMenu.themeSystem")})]}),(0,d.jsx)(I.lp,{children:j("activityBar.settingsMenu.language")}),(0,d.jsx)(I.Hr,{value:n,onValueChange:a=>p(a),children:$.dI.map(a=>(0,d.jsx)(I.Ht,{value:a,children:$.vK[a]},a))}),g&&!s&&(0,d.jsx)(ab,{}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I._2,{asChild:!0,children:(0,d.jsx)("a",{href:"https://github.com/kewton/MyCodeBranchDesk",target:"_blank",rel:"noopener noreferrer",children:j("activityBar.settingsMenu.github")})}),r&&(0,d.jsx)(I._2,{onSelect:()=>{_()},children:j("activityBar.settingsMenu.logout")})]})]})}var ad=c(15917),ae=c(76180),af=c(88285),ag=c(85647),ah=c(64632),ai=c(21787);let aj=["global","terminal","composer","editor"],ak=[{id:"commandPalette",keys:["MOD","K"],scope:"global"},{id:"toggleSidebar",keys:["MOD","B"],scope:"global"},{id:"keyboardHelp",keys:["?"],scope:"global"},{id:"closeOverlay",keys:["Esc"],scope:"global"},{id:"navigateList",keys:["↑","↓"],scope:"global"},{id:"terminalSearch",keys:["MOD","F"],scope:"terminal"},{id:"toggleSurfaceMode",keys:["MOD","Shift","M"],scope:"terminal"},{id:"sendMessage",keys:["↵"],scope:"composer"},{id:"composerNewline",keys:["Shift","↵"],scope:"composer"},{id:"editorIndent",keys:["Tab"],scope:"editor"},{id:"editorOutdent",keys:["Shift","Tab"],scope:"editor"},{id:"editorTabFocus",keys:["Ctrl","M"],scope:"editor"},{id:"editorSave",keys:["MOD","S"],scope:"editor"},{id:"editorFullscreen",keys:["MOD","Shift","F"],scope:"editor"}];function al(a,b){return"MOD"===a?b?"⌘":"Ctrl":a}var am=c(77028),an=c(14346),ao=c(47089);let ap="flex items-center justify-center rounded-md text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",aq={width:`${J.KI}px`,height:`${J.KI}px`};function ar({testId:a,onClose:b}){let c=(0,q.c)("common"),{isOpen:e,toggle:f}=(0,h.VF)(),g=c(e?"sidebar.close":"sidebar.open"),i=e?am.A:an.A;return(0,d.jsx)("div",{"data-sidebar-toggle-cell":"",className:"flex flex-shrink-0",style:{padding:`${J.df}px`},children:b?(0,d.jsx)("button",{type:"button","data-testid":a,onClick:b,"aria-label":c("sidebar.close"),style:aq,className:ap,children:(0,d.jsx)(ao.A,{size:20,"aria-hidden":"true"})}):(0,d.jsx)(T.m_,{content:g,placement:e?"bottom":"right",children:(0,d.jsx)("button",{type:"button","data-testid":a,onClick:f,"aria-label":g,"aria-expanded":e,style:aq,className:ap,children:(0,d.jsx)(i,{size:20,"aria-hidden":"true"})})})})}let as="flex w-full min-w-0 items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring";function at({drawer:a=!1}){let b=(0,q.c)("common"),c=(0,q.c)("commandPalette"),{setOpen:e}=(0,ah.C)(),{openNewTask:f}=(0,ai.hX)(),{closeMobileDrawer:i}=(0,h.VF)(),j=function(){let[a,b]=g().useState(null);return a}(),k=a?i:void 0;return(0,d.jsxs)("div",{"data-testid":a?"sidebar-drawer-top-controls":"sidebar-top-controls",className:"flex-shrink-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center",children:[a?(0,d.jsx)(ar,{testId:"sidebar-drawer-close",onClose:i}):(0,d.jsx)(ar,{testId:"sidebar-panel-toggle"}),(0,d.jsxs)(p,{href:"/",onClick:k,"data-testid":"sidebar-logo",className:"flex min-w-0 items-center gap-2 rounded-md px-1 py-1 transition-opacity hover:opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,d.jsx)("span",{className:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-md bg-accent-600",children:(0,d.jsx)(ad.A,{size:14,strokeWidth:2,className:"text-white","aria-hidden":"true"})}),(0,d.jsx)("span",{className:"truncate text-sm font-bold text-sidebar-foreground",children:"CommandMate"})]})]}),(0,d.jsxs)("div",{className:"space-y-0.5 px-2",children:[(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-new-task",onClick:()=>{k?.(),f()},"aria-haspopup":"dialog",className:as,children:[(0,d.jsx)(ae.A,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:b("newTask.title")})]}),(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-search",onClick:()=>{k?.(),e(!0)},"aria-label":c("mobileTrigger"),className:as,children:[(0,d.jsx)(af.A,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:c("searchAction")}),!a&&null!==j&&(0,d.jsxs)("span",{className:"flex flex-shrink-0 items-center gap-0.5","aria-hidden":"true",children:[(0,d.jsx)(ag.u,{children:j}),(0,d.jsx)(ag.u,{children:"K"})]})]})]})]})}var au=c(63474),av=c(19463),aw=c(78352),ax=c(87743),ay=c(95239);let az=0,aA=(0,f.memo)(function(){let a=(0,o.Hq)(),{worktrees:b,repositories:c,selectedWorktreeId:j,selectWorktree:k,refreshWorktrees:l,isLoading:m,error:n}=(0,y.$f)(),{closeMobileDrawer:p,sortKey:u,sortDirection:x,viewMode:A,setViewMode:B,repositoryOrder:F,setRepositoryOrder:H}=(0,h.VF)(),I=(0,q.c)("common"),K=(0,e.usePathname)()??"",L=(0,J.jn)(K,j),M=(0,i.a)(),{count:N}=(0,av.Lv)(),[O,P]=(0,f.useState)(""),Q=(0,f.useRef)(null),[R,T]=(0,f.useState)(()=>({})),U=(0,f.useRef)(!1);(0,f.useEffect)(()=>{U.current||(U.current=!0,fetch("/api/sidebar/group-order").then(a=>a.json()).then(a=>{a.success&&Array.isArray(a.order)&&H(a.order)}).catch(()=>{}))},[H]);let V=(0,f.useMemo)(()=>(0,J.UZ)(c),[c]),W=(0,f.useMemo)(()=>(0,J.s6)(b,V),[b,V]),X=(0,f.useMemo)(()=>(0,av.Rc)(b),[b]),Y=(0,f.useMemo)(()=>new Set(W.map(a=>a.id)),[W]),Z=(0,f.useMemo)(()=>W.map(D.XK),[W]),$=(0,f.useMemo)(()=>new Map(Z.map(a=>[a.id,a])),[Z]),_=(0,f.useDeferredValue)(Z),aa=(0,f.useRef)(null),ab=(0,f.useRef)(null),ac=(0,f.useRef)(null),ad=(0,f.useRef)(new Set),[ae,af]=(0,f.useState)(0);(0,f.useEffect)(()=>()=>{null!==ab.current&&clearTimeout(ab.current)},[]);let ag=(0,f.useCallback)(()=>{null!==ab.current&&(clearTimeout(ab.current),ab.current=null),aa.current=null,ac.current=null},[]),ah=(0,f.useMemo)(()=>{let a=aa.current;return!a||0===a.items.length||Date.now()>=a.expiresAt?_:a.items},[_,ae]),ai=(0,f.useRef)(ah),aj=ac.current,ak=new Set(ah.filter(a=>aj?.has(a.id)===!0||(0,J.rL)(a,L,$)).map(a=>a.id));(0,f.useLayoutEffect)(()=>{if(ai.current=ah,ad.current=ak,ac.current)for(let a of ak)ac.current.add(a);let a=aa.current;a&&0===a.items.length&&_.length>0&&ag()});let al=(0,f.useCallback)(()=>{if(0===ai.current.length)return;null!==ab.current&&(clearTimeout(ab.current),ab.current=null);let a=aa.current;if(a&&Date.now()<a.expiresAt){aa.current={...a,expiresAt:1/0};return}aa.current={items:ai.current,expiresAt:1/0},ac.current=new Set(ad.current)},[]),am=(0,f.useCallback)(()=>{aa.current&&(aa.current={...aa.current,expiresAt:Date.now()+1e3},null!==ab.current&&clearTimeout(ab.current),ab.current=setTimeout(()=>{ag(),af(a=>a+1)},1e3))},[ag]),{sortedItems:an,groupedItems:ao}=(0,ay.D)({items:ah,sortKey:u,sortDirection:x,viewMode:A,filterText:O}),ap=(0,f.useMemo)(()=>"grouped"===A&&ao?O.trim()?ao:(0,J.Ew)(ao,F):null,[A,ao,F,O]),aq="grouped"===A?ap:null,ar=(0,f.useMemo)(()=>"sessions"===A?(0,J.EY)((0,J.UB)(an),u,x):[],[A,an,u,x]);(0,f.useEffect)(()=>{},[R]);let as=(0,f.useCallback)(a=>{T(b=>({...b,[a]:!b[a]}))},[]),au=(0,f.useCallback)(()=>{var a;az=Number.isFinite(a=Q.current?.scrollTop??0)&&a>0?a:0},[]),aw=an.length>0||(aq?.length??0)>0||ar.length>0;(0,f.useEffect)(()=>{let a=Q.current;if(!a)return;let b=window.requestAnimationFrame(()=>{a.scrollTop=az});return()=>{window.cancelAnimationFrame(b)}},[aw,A]);let aA=(0,f.useRef)(b);(0,f.useEffect)(()=>{aA.current=b},[b]);let aD=(0,f.useCallback)(b=>{au(),k(b);let c=aA.current.find(a=>a.id===b);a.push(c?(0,ax.f)(c):`/worktrees/${b}`),p()},[au,k,a,p]),aG=(0,f.useCallback)(b=>{au(),k(b.worktreeId),a.push((0,J.Ii)(b)),p()},[au,k,a,p]),aH=(0,v.FR)((0,v.MS)(v.AN,{activationConstraint:{distance:8}})),aI=(0,f.useCallback)(a=>{let{active:b,over:c}=a;if(!c||b.id===c.id||!aq)return;let d=aq.map(a=>a.repositoryName),e=d.indexOf(String(b.id)),f=d.indexOf(String(c.id));if(-1===e||-1===f)return;let g=(0,w.be)(d,e,f);H(g),fetch("/api/sidebar/group-order",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order:g})}).catch(()=>{H(d)})},[aq,H]),aL="grouped"===A?(aq?.length??0)===0:"sessions"===A?0===ar.length:0===an.length,aM=m&&0===b.length,aN=!aM&&!!n&&0===b.length,aO=(0,f.useCallback)(()=>{l()},[l]),aP={sessions:(0,d.jsx)("li",{className:"flex min-w-0",children:(0,d.jsx)(aE,{href:"/sessions",icon:r.A,label:I("nav.sessions"),testId:"sidebar-nav-sessions",isActive:K.startsWith("/sessions"),onNavigate:p})}),repositories:(0,d.jsxs)("li",{className:"flex min-w-0 items-center gap-1",children:[(0,d.jsx)(aE,{href:"/repositories",icon:s.A,label:I("nav.repositories"),testId:"sidebar-nav-repositories",isActive:K.startsWith("/repositories"),onNavigate:p}),(0,d.jsx)(aJ,{refreshWorktrees:l})]}),review:(0,d.jsx)("li",{className:"flex min-w-0",children:(0,d.jsx)(aE,{href:N>0?C.ks:"/review",icon:t.A,label:I("nav.review"),testId:"sidebar-nav-review",isActive:K.startsWith("/review"),onNavigate:p,trailing:N>0?(0,d.jsx)("span",{"data-testid":"sidebar-nav-review-count",role:"status","aria-label":I("attention.badgeLabel",{count:N}),className:"flex-shrink-0 rounded-full bg-warning-subtle px-1.5 text-xs font-semibold leading-5 tabular-nums text-warning-foreground",children:N>99?"99+":N}):null})})};return(0,d.jsx)(z.Fy.Provider,{value:!M,children:(0,d.jsxs)("nav",{"data-testid":"sidebar","aria-label":I("sidebar.branchNavigation"),className:"h-full flex flex-col bg-sidebar text-sidebar-foreground",role:"navigation",children:[(0,d.jsx)(at,{drawer:M}),(0,d.jsx)("div",{"data-testid":"sidebar-header",className:"flex-shrink-0 space-y-2 border-b border-sidebar-border px-2 py-2",children:(0,d.jsx)("ul",{"data-testid":"sidebar-nav",className:"space-y-0.5",children:J.go.map(a=>(0,d.jsx)(g().Fragment,{children:aP[a]},a))})}),(0,d.jsx)(E,{worktrees:X,visibleWorktreeIds:Y,selectedWorktreeId:L,onSelect:aD,onNavigate:p}),(0,d.jsx)(S,{searchQuery:O,onSearchChange:P,viewMode:A,onViewModeChange:B}),(0,d.jsx)("div",{ref:Q,"data-testid":"branch-list",onScroll:au,onMouseEnter:al,onMouseLeave:am,className:"flex-1 overflow-y-auto overflow-x-hidden",children:aM?(0,d.jsx)(aB,{label:I("sidebar.loadingBranches")}):aN?(0,d.jsxs)("div",{"data-testid":"branch-list-error",role:"alert",className:"px-4 py-8 text-center text-sidebar-muted",children:[(0,d.jsx)("p",{className:"text-sm",children:I("sidebar.branchesLoadFailed")}),(0,d.jsx)(G.$n,{type:"button",variant:"secondary",size:"sm",className:"mt-3","data-testid":"branch-list-retry",onClick:aO,children:I("sidebar.retryLoadBranches")})]}):aL?(0,d.jsx)("div",{className:"px-4 py-8 text-center text-sidebar-muted",children:I(O?"sidebar.noBranchesFound":"sidebar.noBranchesAvailable")}):"sessions"===A?ar.map(a=>(0,d.jsx)(aF,{row:a,isSelected:a.worktreeId===L,onClick:aG},a.key)):"grouped"===A&&aq?(0,d.jsx)(v.Mp,{sensors:aH,collisionDetection:v.fp,onDragEnd:aI,children:(0,d.jsx)(w.gB,{items:aq.map(a=>a.repositoryName),strategy:w._G,children:aq.map(a=>{let b=!R[a.repositoryName]||!!O.trim();return(0,d.jsx)(aC,{group:a,isExpanded:b,selectedWorktreeId:L,onToggle:()=>as(a.repositoryName),onBranchClick:aD,isDragDisabled:!!O.trim(),isFiltering:!!O.trim(),liveBranchById:$,stickyShownIds:aj},a.repositoryName)})})}):an.map(a=>(0,d.jsx)(z.yP,{branch:a,isSelected:a.id===L,onClick:()=>aD(a.id)},a.id))}),(0,d.jsx)("div",{"data-testid":"sidebar-footer",className:"flex-shrink-0 px-4 py-3 border-t border-sidebar-border",children:(0,d.jsx)(aK,{onNavigate:p})})]})})}),aB=(0,f.memo)(function({label:a}){return(0,d.jsxs)("div",{"data-testid":"branch-list-skeleton",role:"status","aria-live":"polite",className:"px-4 py-3 space-y-3",children:[(0,d.jsx)("span",{className:"sr-only",children:a}),[0,1,2,3,4].map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(G.EA,{className:"h-2 w-2 rounded-full"}),(0,d.jsx)(G.EA,{className:"h-3 flex-1"})]},a))]})});function aC({group:a,isExpanded:b,selectedWorktreeId:c,onToggle:e,onBranchClick:f,isDragDisabled:g,isFiltering:h,liveBranchById:i,stickyShownIds:j}){let{attributes:k,listeners:l,setNodeRef:m,setActivatorNodeRef:n,transform:o,transition:p,isDragging:q}=(0,w.gl)({id:a.repositoryName,disabled:g}),r={transform:x.Ks.Transform.toString(o),transition:p,opacity:q?.5:1},{shown:s,other:t}=(0,J.FS)(a.branches,c,i,j??void 0);return(0,d.jsxs)("div",{ref:m,style:r,className:"w-full min-w-0 pt-2",children:[(0,d.jsx)(aD,{repositoryName:a.repositoryName,branchCount:a.branches.length,isExpanded:b,onClick:e,dragHandleRef:n,dragHandleListeners:g?void 0:l,dragHandleAttributes:g?void 0:k}),b&&s.map(a=>(0,d.jsx)(z.yP,{branch:a,isSelected:a.id===c,onClick:()=>f(a.id),showRepositoryName:!1},a.id)),b&&t.length>0&&(0,d.jsx)(F,{branches:t,selectedWorktreeId:c,onBranchClick:f,forceExpanded:h})]})}function aD({repositoryName:a,branchCount:b,isExpanded:c,onClick:e,dragHandleRef:f,dragHandleListeners:g,dragHandleAttributes:h}){let i=(0,q.c)("common");return(0,d.jsxs)("div",{className:"group/header flex items-center w-full",children:[g&&(0,d.jsx)("div",{ref:f,...g,...h,"data-testid":"group-drag-handle","aria-label":i("sidebar.dragToReorderGroup"),className:" flex-shrink-0 flex items-center justify-center w-6 h-full pl-2 cursor-grab active:cursor-grabbing text-sidebar-muted hover:text-sidebar-foreground transition-[color,opacity] opacity-0 group-hover/header:opacity-100 group-focus-within/header:opacity-100 [@media(hover:none)]:opacity-100 rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-ring ",children:(0,d.jsx)(aH,{})}),(0,d.jsxs)("button",{"data-testid":"group-header",type:"button",onClick:e,"aria-expanded":c,className:" flex-1 min-w-0 flex items-center gap-2 px-2 py-1 text-xs font-normal text-sidebar-muted focus:outline-none focus:ring-2 focus:ring-inset focus:ring-ring transition-colors ",children:[(0,d.jsx)(aG,{isExpanded:c}),(0,d.jsx)(G.nF,{color:(0,J.LV)(a)}),(0,d.jsx)(U.nR,{content:a,className:"flex-1 min-w-0 text-left truncate",children:a}),(0,d.jsx)("span",{className:"text-sidebar-muted font-normal tabular-nums pr-2",children:b})]})]})}function aE({href:a,icon:b,label:c,testId:e,isActive:f,onNavigate:g,trailing:h}){return(0,d.jsxs)(p,{href:a,"data-testid":e,"aria-current":f?"page":void 0,onClick:g,className:`flex min-w-0 flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring ${f?"bg-sidebar-hover font-medium text-sidebar-foreground":"text-sidebar-muted"}`,children:[(0,d.jsx)(b,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:c}),h]})}let aF=(0,f.memo)(function({row:a,isSelected:b,onClick:c}){let e=(0,q.c)("common"),f=(0,A.Mq)(a.status,a.unclassified),g=e(f?A.rH:`status.${a.status}`);return(0,d.jsx)("div",{className:`w-full min-w-0 ${z.R8}`,children:(0,d.jsxs)("button",{type:"button","data-testid":"session-list-item","data-session-key":a.key,onClick:()=>c(a),"aria-current":b?"true":void 0,className:`w-full min-w-0 min-h-[34px] px-3 py-1.5 flex items-center gap-2 text-left ${(0,z.Xd)(b)}`,children:[(0,d.jsx)(G.md,{status:a.status,size:"sm",label:a.exited?`${g} (${e("branchItem.agentExited")})`:g,className:f?A.Jd:void 0}),(0,d.jsx)("span",{className:"flex-shrink-0 max-w-[45%] truncate text-sm font-semibold text-sidebar-foreground",children:a.label}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 truncate text-xs text-sidebar-muted",children:[a.branchName," \xb7 ",a.repositoryName]})]})})});function aG({isExpanded:a}){return(0,d.jsx)("svg",{className:`w-3 h-3 flex-shrink-0 transition-transform ${a?"rotate-90":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"})})}function aH(){return(0,d.jsxs)("svg",{className:"w-3 h-3",fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"9",cy:"5",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"5",r:"1.5"}),(0,d.jsx)("circle",{cx:"9",cy:"12",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"12",r:"1.5"}),(0,d.jsx)("circle",{cx:"9",cy:"19",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"19",r:"1.5"})]})}function aI({className:a=""}){return(0,d.jsx)("svg",{className:`w-4 h-4 ${a}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h5M20 20v-5h-5M20.49 9A9 9 0 005.64 5.64L4 4m16 16l-1.64-1.64A9 9 0 014.51 15"})})}let aJ=(0,f.memo)(function({refreshWorktrees:a}){let[b,c]=(0,f.useState)(!1),e=(0,f.useRef)(!1),{showToast:g}=(0,au.dj)(),h=(0,q.c)("common"),i=(0,f.useCallback)(async()=>{if(!e.current){e.current=!0,c(!0);try{let b=await aw.Rx.sync();await a(),g(h("syncSuccess",{count:b.worktreeCount}),"success",3e3)}catch(a){a instanceof aw.hD&&401===a.status?g(h("syncAuthError"),"error",5e3):g(h("syncError"),"error",5e3)}finally{e.current=!1,c(!1)}}},[a,g,h]);return(0,d.jsx)(d.Fragment,{children:(0,d.jsx)(T.m_,{content:h("tooltips.sync"),placement:"bottom",children:(0,d.jsx)("button",{type:"button",onClick:i,disabled:b,"aria-label":h("syncButtonLabel"),className:"p-1 rounded-md text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:(0,d.jsx)(aI,{className:b?"animate-spin":""})})})})});function aK({onNavigate:a}){let b=(0,q.c)("common")("settings.title");return(0,d.jsx)(ac,{testIdPrefix:"sidebar-settings-menu",side:"top",align:"start",showDisplayPreferences:!0,onNavigate:a,children:(0,d.jsx)(aa,{asChild:!0,children:(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-settings-menu",className:"flex w-full items-center gap-2 px-2 py-1.5 rounded-md text-sm text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring transition-colors",children:[(0,d.jsx)(u.A,{size:20,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:b})]})})})}var aL=c(38557);function aM(){let{shouldSurface:a,isReconnecting:b}=(0,aL.Fx)(),c=(0,q.c)("common");if(!a)return null;let e=c(b?"connection.reconnecting":"connection.offline");return(0,d.jsxs)("span",{"data-testid":"connection-status-indicator","data-connection-state":b?"reconnecting":"offline",role:"status","aria-live":"polite",title:c(b?"connection.reconnectingTooltip":"connection.offlineTooltip"),className:"hidden sm:inline-flex items-center gap-1.5 rounded-full border border-border bg-surface px-2 py-0.5 text-xs text-muted-foreground",children:[(0,d.jsx)("span",{"aria-hidden":"true",className:["w-1.5 h-1.5 rounded-full",b?"bg-warning motion-safe:animate-pulse":"bg-muted-foreground"].join(" ")}),e]})}var aN=c(60957);let aO=[{prefix:"/sessions",labelKey:"nav.sessions"},{prefix:"/repositories",labelKey:"nav.repositories"},{prefix:"/review",labelKey:"nav.review"},{prefix:"/skills",labelKey:"nav.skills"},{prefix:"/more",labelKey:"nav.more"}];function aP({title:a="CommandMate"}){var b;let c=null!==(b=(0,e.usePathname)()??"",aO.find(a=>b.startsWith(a.prefix))?.labelKey??null);return(0,d.jsxs)("header",{"data-testid":"screen-status-row",className:"flex flex-shrink-0 items-center justify-end gap-4 px-4 py-1.5 border-b border-border bg-background supports-[backdrop-filter]:bg-background/80 backdrop-blur-md empty:hidden",children:[!c&&(0,d.jsx)("h1",{"data-testid":"header-screen-title",className:"mr-auto min-w-0 truncate text-lg font-bold text-foreground",children:a}),(0,d.jsx)(aM,{}),(0,d.jsx)(aN.H,{})]})}function aQ({count:a}){let b=(0,q.c)("common");return 0===a?null:(0,d.jsx)("span",{"data-testid":"attention-badge-bubble",role:"status","aria-label":b("attention.badgeLabel",{count:a}),className:"absolute -top-1.5 -right-2.5 min-w-[1.05rem] rounded-full bg-warning-foreground px-1 text-[0.625rem] font-bold leading-[1.05rem] text-warning-subtle tabular-nums text-center",children:a>99?"99+":a})}let aR="relative flex h-10 w-10 items-center justify-center rounded-md transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",aS="text-sidebar-muted hover:bg-sidebar-hover hover:text-sidebar-foreground";function aT({href:a,icon:b,label:c,testId:e,isActive:f,badge:g}){return(0,d.jsx)(T.m_,{content:c,placement:"right",children:(0,d.jsx)(p,{href:a,"data-testid":e,"aria-label":c,"aria-current":f?"page":void 0,className:`${aR} ${f?"bg-sidebar-hover text-sidebar-foreground":aS}`,children:(0,d.jsxs)("span",{className:"relative flex",children:[(0,d.jsx)(b,{size:20,"aria-hidden":"true"}),g]})})})}function aU({icon:a,label:b,testId:c,onClick:e,hasPopup:f}){return(0,d.jsx)(T.m_,{content:b,placement:"right",children:(0,d.jsx)("button",{type:"button","data-testid":c,"aria-label":b,"aria-haspopup":f,onClick:e,className:`${aR} ${aS}`,children:(0,d.jsx)(a,{size:20,"aria-hidden":"true"})})})}function aV(){let a=(0,q.c)("common"),b=(0,q.c)("commandPalette"),c=(0,e.usePathname)()??"",{setOpen:f}=(0,ah.C)(),{openNewTask:h}=(0,ai.hX)(),{count:i}=(0,av.Lv)(),j=a("settings.title"),k={sessions:(0,d.jsx)(aT,{href:"/sessions",icon:r.A,label:a("nav.sessions"),testId:"sidebar-rail-sessions",isActive:c.startsWith("/sessions")}),repositories:(0,d.jsx)(aT,{href:"/repositories",icon:s.A,label:a("nav.repositories"),testId:"sidebar-rail-repositories",isActive:c.startsWith("/repositories")}),review:(0,d.jsx)(aT,{href:i>0?C.ks:"/review",icon:t.A,label:a("nav.review"),testId:"sidebar-rail-review",isActive:c.startsWith("/review"),badge:(0,d.jsx)(aQ,{count:i})})};return(0,d.jsxs)("nav",{"data-testid":"sidebar-rail","aria-label":a("sidebar.railLabel"),className:"flex h-full flex-col items-center gap-1 bg-sidebar pb-2 text-sidebar-foreground",style:{width:`${J.BN}px`},children:[(0,d.jsx)(ar,{testId:"sidebar-rail-toggle"}),(0,d.jsx)(aU,{icon:ae.A,label:a("newTask.title"),testId:"sidebar-rail-new-task",onClick:()=>h(),hasPopup:"dialog"}),(0,d.jsx)(aU,{icon:af.A,label:b("mobileTrigger"),testId:"sidebar-rail-search",onClick:()=>f(!0)}),(0,d.jsx)("div",{className:"my-1 w-8 border-b border-sidebar-border","aria-hidden":"true"}),J.go.map(a=>(0,d.jsx)(g().Fragment,{children:k[a]},a)),(0,d.jsx)("div",{className:"mt-auto",children:(0,d.jsx)(ac,{testIdPrefix:"sidebar-rail-settings",side:"right",align:"end",showDisplayPreferences:!0,children:(0,d.jsx)(T.m_,{content:j,placement:"right",children:(0,d.jsx)(aa,{asChild:!0,children:(0,d.jsx)("button",{type:"button","data-testid":"sidebar-rail-settings","aria-label":j,className:`${aR} ${aS}`,children:(0,d.jsx)(u.A,{size:20,"aria-hidden":"true"})})})})})})]})}c(68643);var aW=c(47684),aX=c(38882),aY=c(6130),aZ=c(13860);let a$=[{labelKey:"nav.sessions",href:"/sessions",isActive:a=>a.startsWith("/sessions"),icon:(0,d.jsx)(r.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.review",href:"/review",isActive:a=>a.startsWith("/review"),icon:(0,d.jsx)(t.A,{size:20,"aria-hidden":"true"}),showsAttentionBadge:!0},{labelKey:"nav.more",href:"/more",isActive:a=>a.startsWith("/more"),icon:(0,d.jsx)(aX.A,{size:20,"aria-hidden":"true"})}];function a_(){let a=(0,e.usePathname)(),{setOpen:b}=(0,ah.C)(),c=(0,q.c)("commandPalette"),f=(0,q.c)("common"),{count:g}=(0,av.Lv)(),i=(0,h.pT)();return i?.isMobileDrawerOpen?null:(0,d.jsx)("nav",{"data-testid":"global-mobile-nav",className:"fixed bottom-0 left-0 right-0 z-50 border-t border-border bg-background supports-[backdrop-filter]:bg-background/80 backdrop-blur-md pb-safe",children:(0,d.jsxs)("div",{className:"flex items-center justify-around h-14",children:[i&&(0,d.jsxs)("button",{type:"button","data-testid":"mobile-nav-open-sidebar",...aZ.cv,onClick:i.openMobileDrawer,className:"flex flex-col items-center justify-center flex-1 h-full text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,d.jsx)(aY.A,{size:20,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:f("sidebar.branches")})]}),a$.map(b=>{let c=b.isActive(a),e=!0===b.showsAttentionBadge&&g>0;return(0,d.jsxs)(p,{href:e?C.ks:b.href,className:`flex flex-col items-center justify-center flex-1 h-full text-xs transition-colors ${c?"text-accent-600 dark:text-accent-400":"text-muted-foreground hover:text-foreground"}`,children:[(0,d.jsxs)("span",{className:"relative inline-flex",children:[b.icon,!0===b.showsAttentionBadge&&(0,d.jsx)(aQ,{count:g})]}),(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:f(b.labelKey)})]},b.href)}),(0,d.jsxs)("button",{type:"button","data-testid":"mobile-command-palette-trigger",onClick:()=>b(!0),"aria-label":c("mobileTrigger"),className:"flex flex-col items-center justify-center flex-1 h-full text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,d.jsx)(af.A,{size:20,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:c("mobileLabel")})]})]})})}function a0(){let{shouldSurface:a,isReconnecting:b}=(0,aL.Fx)(),c=(0,q.c)("common");if(!a)return null;let e=c(b?"connection.reconnecting":"connection.offline"),f=c(b?"connection.reconnectingTooltip":"connection.offlineTooltip");return(0,d.jsx)("div",{"data-testid":"mobile-connection-banner","data-connection-state":b?"reconnecting":"offline",role:"status","aria-live":"polite",title:f,className:`shrink-0 pt-safe border-b ${b?"bg-warning-subtle border-warning-border text-warning-foreground":"bg-danger-subtle border-danger-border text-danger-foreground"}`,children:(0,d.jsxs)("div",{className:"flex items-center justify-center gap-1.5 px-3 py-1 text-xs",children:[(0,d.jsx)("span",{"aria-hidden":"true",className:`w-1.5 h-1.5 rounded-full ${b?"bg-warning motion-safe:animate-pulse":"bg-danger"}`}),e]})})}var a1=c(76047),a2=c(98033),a3=c(89184);let a4=[...ak,{id:"newTask",keys:["MOD","Shift","O"],scope:"global"},{id:"newTaskSend",keys:["MOD","↵"],scope:"global"}];function a5(){let{open:a,setOpen:b}=(0,a3.K)(),{open:c}=(0,ah.C)(),{isOpen:e}=(0,ai.hX)(),g=(0,q.c)("keyboardShortcuts"),[h,i]=(0,f.useState)(!1);(0,f.useRef)(a),(0,f.useRef)(c),(0,f.useRef)(e);let j=function(a=ak){return aj.map(b=>({scope:b,shortcuts:a.filter(a=>a.scope===b)})).filter(a=>a.shortcuts.length>0)}(a4);return(0,d.jsx)(a2.a,{isOpen:a,onClose:()=>b(!1),title:g("title"),size:"md",children:(0,d.jsx)("div",{"data-testid":"keyboard-shortcuts-overlay",className:"space-y-6",children:j.map(({scope:a,shortcuts:b})=>(0,d.jsxs)("section",{"data-testid":`keyboard-shortcuts-scope-${a}`,children:[(0,d.jsx)("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:g(`scopes.${a}`)}),(0,d.jsx)("ul",{className:"divide-y divide-border",children:b.map(a=>(0,d.jsxs)("li",{"data-testid":`keyboard-shortcut-${a.id}`,className:"flex items-center justify-between gap-4 py-2",children:[(0,d.jsx)("span",{className:"text-sm text-foreground",children:g(`shortcuts.${a.id}`)}),(0,d.jsx)("span",{className:"flex flex-shrink-0 items-center gap-1",children:a.keys.map((a,b)=>(0,d.jsx)(ag.u,{children:al(a,h)},b))})]},a.id))})]},a))})})}var a6=c(18608),a7=c(55992),a8=c(94260);let a9=[{key:"added",labelKey:"whatsNew.added"},{key:"improved",labelKey:"whatsNew.improved"},{key:"fixed",labelKey:"whatsNew.fixed"}];function ba(){let a=(0,q.c)("common"),b=(0,a7.Ym)(),[c,e]=(0,f.useState)(null),[g,h]=(0,f.useState)(!1),i=(0,f.useCallback)(()=>{c&&function(a){try{window.localStorage.setItem("commandmate.lastSeenAppVersion",a)}catch{}}(c.to),h(!1)},[c]);if(!c)return null;let j="ja"===b?"ja":"en";return(0,d.jsx)(a2.a,{isOpen:g,onClose:i,title:a("whatsNew.title",{from:c.from,to:c.to}),size:"md",children:(0,d.jsxs)("div",{className:"space-y-4","data-testid":"whats-new-dialog",children:[0===c.notes.length?(0,d.jsx)("p",{className:"text-sm text-foreground","data-testid":"whats-new-empty",children:a("whatsNew.empty")}):c.notes.map(b=>(0,d.jsxs)("section",{className:"space-y-3","data-testid":`whats-new-version-${b.version}`,children:[(0,d.jsxs)("h4",{className:"text-sm font-semibold text-foreground",children:["v",b.version,(0,d.jsx)("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:b.date})]}),b.highlight&&(0,d.jsxs)("div",{"data-testid":"whats-new-highlight",children:[(0,d.jsx)("h5",{className:"text-xs font-medium text-muted-foreground",children:a("whatsNew.highlight")}),(0,d.jsx)("p",{className:"mt-1 text-sm text-foreground",children:b.highlight[j]})]}),a9.map(({key:c,labelKey:e})=>b[c].length>0?(0,d.jsxs)("div",{"data-testid":`whats-new-${c}`,children:[(0,d.jsx)("h5",{className:"text-xs font-medium text-muted-foreground",children:a(e)}),(0,d.jsx)("ul",{className:"mt-1 list-disc space-y-1 pl-5 text-sm text-foreground",children:b[c].map((a,b)=>(0,d.jsx)("li",{children:a[j]},b))})]},c):null)]},b.version)),(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 border-t border-border pt-3",children:[(0,d.jsx)("a",{href:`https://github.com/Kewton/CommandMate/releases/tag/v${c.to}`,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-accent-600 dark:text-accent-400 hover:underline","data-testid":"whats-new-release-link",children:a("whatsNew.releaseLink")}),(0,d.jsx)(a8.$,{type:"button",variant:"primary",size:"sm",onClick:i,"data-testid":"whats-new-close",children:a("whatsNew.close")})]})]})})}var bb=c(63643);function bc(a,b){return a.worktreeId===b.worktreeId&&a.instanceId===b.instanceId}var bd=c(17252);function be(a){return a.agentInstances&&a.agentInstances.length>0?a.agentInstances.slice().sort((a,b)=>a.order-b.order):a.selectedAgents&&a.selectedAgents.length>0?(0,bd.lu)(a.selectedAgents):a.cliToolId?(0,bd.lu)([a.cliToolId]):[]}function bf(a,b){let c=a.sessionStatusByInstance?.[b.id]??(b.id===b.cliTool?a.sessionStatusByCli?.[b.cliTool]:void 0),d=c?.startingSince,e=a.autoYesByInstance?.[b.id];return{instance:b,label:(0,bd.sw)(b),running:c?.isRunning===!0,starting:"number"==typeof d,autoYes:e?.enabled&&"number"==typeof e.expiresAt?e:null}}var bg=c(16730),bh=c(21768);let bi={promptWaiting:"PROMPT_WAITING",sessionStarting:"SESSION_STARTING",instanceToolConflict:"instance_tool_conflict"};async function bj(a){try{let b=await a.json(),c=b&&"object"==typeof b?b.expiresAt:null;if("number"==typeof c)return{enabled:!0,expiresAt:c}}catch{}return null}async function bk(a){try{let b=await a.json();if(b&&"object"==typeof b){let{error:a,code:c}=b;return{error:"string"==typeof a&&""!==a?a:null,code:"string"==typeof c?c:null}}}catch{}return{error:null,code:null}}async function bl(a,{modelRequested:b}){if(a.ok&&!a.redirected)return{ok:!0};let{status:c}=a,{error:d,code:e}=await bk(a);return{ok:!1,kind:409===c?e===bi.promptWaiting?"prompt_waiting":"conflict":503===c?e===bi.sessionStarting?"starting":"start_failed":400===c?b&&e!==bi.instanceToolConflict?"model_rejected":"invalid":"failed",status:a.ok?0:c,detail:d}}function bm(a){return{ok:!1,kind:"failed",status:0,detail:a instanceof aw.hD||a instanceof Error?a.message:null}}function bn(a,b){return new Promise((c,d)=>{let e=setTimeout(()=>{d(new aw.hD(`Request timed out after ${b}ms`,0,void 0,"timeout"))},b);a().then(a=>{clearTimeout(e),c(a)},a=>{clearTimeout(e),d(a)})})}async function bo(a,b=aw.E){let c,{target:d,cliToolId:e}=a,f=`/api/worktrees/${encodeURIComponent(d.worktreeId)}`,g={"Content-Type":"application/json"},h=!1,i=a.autoYesDuration;if(null!==i){let j,k=!1;try{j=await bn(async()=>{let j=await b(`${f}/auto-yes`,{method:"POST",headers:g,body:JSON.stringify({enabled:!0,cliToolId:e,instanceId:d.instanceId,duration:i,answerMode:a.autoYesAnswerMode??bh.Rb})});if(!j.ok){let{error:a}=await bk(j);return{ok:!1,kind:"auto_yes_failed",status:j.status,detail:a}}return k=!0,c=await bj(j)??void 0,h=void 0===c,null},(0,bg.Z3)("POST"))}catch(a){if(!k){let b=bm(a);return b.ok?b:{...b,kind:"auto_yes_failed"}}return{...bm(a),autoYesStateUnknown:!0}}if(j)return j}let j=a=>c?{...a,armedAutoYes:c}:h?{...a,autoYesStateUnknown:!0}:a,k=a.model?.trim()||void 0,l=(0,bg.SE)();try{return j(await bn(async()=>{let c=await b(`${f}/send`,{method:"POST",headers:g,body:JSON.stringify({content:a.content,cliToolId:e,instanceId:d.instanceId,...k?{model:k}:{}}),timeoutMs:l});return bl(c,{modelRequested:void 0!==k})},l))}catch(a){return j(bm(a))}}var bp=c(37382);let bq="w-full px-3 py-2 border border-input rounded-lg bg-surface text-foreground text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent disabled:opacity-60",br="block text-xs font-medium text-muted-foreground mb-1";function bs({status:a,isEmpty:b,onRetry:c}){let e=(0,q.c)("common");return(0,d.jsxs)(d.Fragment,{children:["loading"===a&&(0,d.jsx)("p",{className:"text-sm text-muted-foreground","data-testid":"new-task-loading",children:e("newTask.loading")}),"error"===a&&(0,d.jsxs)("div",{className:"space-y-2",role:"alert","data-testid":"new-task-load-error",children:[(0,d.jsx)("p",{className:"text-sm text-danger",children:e("newTask.loadError")}),(0,d.jsx)("button",{type:"button",onClick:c,className:"px-3 py-1.5 text-sm font-medium text-foreground bg-muted hover:bg-muted/80 rounded-lg",children:e("retry")})]}),"ready"===a&&b&&(0,d.jsx)("p",{className:"text-sm text-muted-foreground","data-testid":"new-task-empty",children:e("newTask.noTargets")})]})}function bt({recentOptions:a,targetState:b,worktreeId:c,onSelect:e}){let f=(0,q.c)("common");return 0===a.length?null:(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:br,children:f("newTask.recentLabel")}),(0,d.jsx)("div",{className:"flex flex-wrap gap-2","data-testid":"new-task-recents",children:a.map(({target:a,label:f})=>{let g=!!b&&bc(a,{worktreeId:c,instanceId:b.instance.id});return(0,d.jsx)("button",{type:"button","aria-pressed":g,"data-testid":"new-task-recent",onClick:()=>e(a),className:`max-w-full truncate rounded-full border px-3 py-1 text-xs transition-colors ${g?"border-accent-500 bg-accent-500/15 text-foreground":"border-border text-muted-foreground hover:text-foreground"}`,children:f},`${a.worktreeId}:${a.instanceId}`)})})]})}function bu({repositoryOptions:a,repository:b,worktreeId:c,worktree:e,instances:f,instance:g,onRepositoryChange:h,onBranchChange:i,onAgentChange:j}){let k=(0,q.c)("common");return(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-repository",className:br,children:k("newTask.repositoryLabel")}),(0,d.jsx)("select",{id:"new-task-repository","data-testid":"new-task-repository",value:b?.path??"",onChange:a=>h(a.target.value),className:bq,children:a.map(a=>(0,d.jsx)("option",{value:a.path,children:a.name},a.path))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-branch",className:br,children:k("newTask.branchLabel")}),(0,d.jsx)("select",{id:"new-task-branch","data-testid":"new-task-branch",value:c,onChange:a=>i(a.target.value),className:bq,children:(b?.worktrees??[]).map(a=>(0,d.jsx)("option",{value:a.id,children:a.name},a.id))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-agent",className:br,children:k("newTask.agentLabel")}),(0,d.jsx)("select",{id:"new-task-agent","data-testid":"new-task-agent",value:g?.id??"",onChange:a=>j(a.target.value),className:bq,disabled:0===f.length,children:f.map(a=>{let b=e?bf(e,a):null,c=b?.starting?"starting":b?.running?"running":"stopped";return(0,d.jsx)("option",{value:a.id,children:`${b?.label??a.id} — ${k(`newTask.agentStatus.${c}`)}`},a.id)})})]})]})}function bv({statusKey:a,agentLabel:b}){let c=(0,q.c)("common");return(0,d.jsxs)(d.Fragment,{children:["stopped"===a&&(0,d.jsx)("p",{className:"text-xs text-foreground","data-testid":"new-task-will-start",children:c("newTask.willStart",{agent:b})}),"starting"===a&&(0,d.jsx)("p",{className:"text-xs text-warning-foreground","data-testid":"new-task-starting",children:c("newTask.startingNotice",{agent:b})})]})}function bw({modelAvailability:a,model:b,cliTool:c,agentLabel:e,onChange:f}){let g=(0,q.c)("common");return(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-model",className:br,children:g("newTask.modelLabel")}),(0,d.jsx)("input",{id:"new-task-model","data-testid":"new-task-model",type:"text",value:a?.selectable?b:"",onChange:a=>f(a.target.value),placeholder:g("newTask.modelPlaceholder"),disabled:!a?.selectable,className:bq}),a&&(0,d.jsx)("p",{className:"mt-1 text-xs text-muted-foreground","data-testid":"new-task-model-note",children:a.selectable?g("copilot"===c?"newTask.modelHintSwitch":"newTask.modelHintLaunch"):g(`newTask.modelUnavailable.${a.reason}`,{agent:e})})]})}function bx({armedAutoYes:a,autoYesChoice:b,autoYesUnknown:c,onChoiceChange:e,answerMode:f,onAnswerModeChange:g}){let h=(0,q.c)("common"),i=(0,q.c)("autoYes");return(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-auto-yes",className:br,children:h("newTask.autoYesLabel")}),a?(0,d.jsx)("p",{className:"text-sm text-foreground","data-testid":"new-task-auto-yes-active",children:h("newTask.autoYesActive",{remaining:(0,bb.$B)(a.expiresAt)})}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("select",{id:"new-task-auto-yes","data-testid":"new-task-auto-yes",value:b??"",onChange:a=>{let b=Number(a.target.value);e(""!==a.target.value&&(0,bb.dR)(b)?b:null)},className:bq,children:[(0,d.jsx)("option",{value:"",children:h(c?"newTask.autoYesKeepUnknown":"newTask.autoYesKeep")}),bb._q.map(a=>(0,d.jsx)("option",{value:a,children:h("newTask.autoYesEnableFor",{duration:i("durationHours",{hours:(0,bb.nG)(a)})})},a))]}),c&&(0,d.jsx)("p",{className:"mt-1 text-xs text-warning-foreground","data-testid":"new-task-auto-yes-unknown",children:h("newTask.autoYesUnknown")}),(0,d.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:h("newTask.autoYesScope")}),null!==b&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"mt-2",children:(0,d.jsx)(bp.o,{value:f,onChange:g,idPrefix:"new-task-auto-yes-answer-mode",labelClassName:br})}),(0,d.jsx)("p",{className:"mt-1 text-xs text-warning-foreground","data-testid":"new-task-auto-yes-risk",children:i("riskWarning")})]})]})]})}function by({failure:a,agentLabel:b}){let c=(0,q.c)("common");return a?(0,d.jsxs)("div",{role:"alert","data-testid":"new-task-error","data-kind":a.kind,className:"rounded-lg border border-danger-border bg-danger-subtle px-3 py-2 text-sm text-danger-foreground",children:[(0,d.jsx)("p",{children:c(`newTask.errors.${a.kind}`,{agent:b})}),a.detail&&(0,d.jsx)("p",{className:"mt-1 break-words text-xs text-muted-foreground","data-testid":"new-task-error-detail",children:a.detail})]}):null}function bz(){var a;let{requestedTarget:b,screenTarget:c,closeNewTask:g,setCloseLocked:h}=(0,ai.hX)(),i=(0,e.useRouter)(),{showToast:j}=(0,au.dj)(),k=(0,q.c)("common"),[l,m]=(0,f.useState)({status:"loading"}),[n,o]=(0,f.useState)(0),[p]=(0,f.useState)(()=>[]),[r,s]=(0,f.useState)(""),[t,u]=(0,f.useState)(""),[v,w]=(0,f.useState)(""),[x,y]=(0,f.useState)(""),[z,A]=(0,f.useState)(null),[B,C]=(0,f.useState)(bh.Rb),[D,E]=(0,f.useState)(!1),[F,G]=(0,f.useState)(null),[H,I]=(0,f.useState)(!1),K=(0,f.useRef)(null),L=(0,f.useRef)(!0),M=(0,f.useRef)(!1),[N,O]=(0,f.useState)({}),[P,Q]=(0,f.useState)({}),R=(0,f.useCallback)(()=>{M.current||g()},[g]);(0,f.useRef)([b,c,p[0]??null]),(0,f.useRef)(!1);let S=(0,f.useMemo)(()=>"ready"===l.status?l.worktrees:[],[l]),T=(0,f.useMemo)(()=>"ready"===l.status?function(a,b=[]){let c=new Map;for(let d of a){let a=c.get(d.repositoryPath);if(!a){let e=b.find(a=>a.path===d.repositoryPath);a={path:d.repositoryPath,name:e?.displayName||e?.name||d.repositoryName,worktrees:[]},c.set(d.repositoryPath,a)}a.worktrees.push(d)}let d=Array.from(c.values());for(let a of d)a.worktrees.sort((a,b)=>a.name.localeCompare(b.name));return d.sort((a,b)=>a.name.localeCompare(b.name))}(l.worktrees,l.repositories):[],[l]),U=S.find(a=>a.id===r)??null,V=(0,f.useMemo)(()=>U?be(U):[],[U]),W=V.find(a=>a.id===t)??null,X=U&&W?bf(U,W):null,Y=U?T.find(a=>a.path===U.repositoryPath)??null:null,Z=X?(a=X.instance.cliTool,"copilot"===a?{selectable:!0}:"claude"===a||"antigravity"===a?X.running||X.starting?{selectable:!1,reason:"running"}:{selectable:!0}:{selectable:!1,reason:"unsupported"}):null,$=X?P[`${r}:${X.instance.id}`]??X.autoYes:null,_=!function(a,b=Date.now()){return!!a&&a.enabled&&"number"==typeof a.expiresAt&&a.expiresAt-b>0}($)?null:$,aa=!!X&&!0===N[`${r}:${X.instance.id}`],[,ab]=(0,f.useState)(0),ac=(0,f.useMemo)(()=>p.flatMap(a=>{let b=function(a,b){let c=a.find(a=>a.id===b.worktreeId);if(!c)return null;let d=be(c).find(a=>a.id===b.instanceId);return d?{worktree:c,instance:d}:null}(S,a);if(!b)return[];let c=T.find(a=>a.path===b.worktree.repositoryPath),d=bf(b.worktree,b.instance).label;return[{target:a,label:`${c?.name??b.worktree.repositoryName} / ${b.worktree.name} / ${d}`}]}),[p,S,T]),ad=(0,f.useCallback)(a=>{s(a.worktreeId),u(a.instanceId),G(null)},[]),ae=(0,f.useCallback)(a=>{let b=T.find(b=>b.path===a),c=b?.worktrees.find(a=>be(a).length>0)??b?.worktrees[0];c&&ad({worktreeId:c.id,instanceId:be(c)[0]?.id??""})},[T,ad]),af=(0,f.useCallback)(a=>{let b=S.find(b=>b.id===a);if(!b)return;let c=be(b),d=c.find(a=>a.id===t);ad({worktreeId:b.id,instanceId:d?.id??c[0]?.id??""})},[S,t,ad]),ah=!!X&&""!==v.trim()&&!D,aj=(0,f.useCallback)(async()=>{var a;if(!ah||!U||!X)return;let b={worktreeId:U.id,instanceId:X.instance.id};M.current=!0,h(!0),E(!0),G(null);let c=await bo({target:b,cliToolId:X.instance.cliTool,content:v.trim(),model:Z?.selectable?x:void 0,autoYesDuration:_?null:z,autoYesAnswerMode:B});if(M.current=!1,h(!1),!L.current)return;let{armedAutoYes:d}=c,e=`${b.worktreeId}:${b.instanceId}`;if(c.autoYesStateUnknown&&O(a=>({...a,[e]:!0})),d&&(O(a=>{let{[e]:b,...c}=a;return c}),Q(a=>({...a,[e]:d})),A(null),C(bh.Rb)),!c.ok){G(c),E(!1);return}[{worktreeId:(a=b).worktreeId,instanceId:a.instanceId},...[].filter(b=>!bc(b,a))].slice(0,3);let f=`${window.location.pathname}${window.location.search}`,l=`${U.name} / ${X.label}`;g(),i.push((0,J.Ii)(b)),j(k("newTask.sentToast",{target:l}),"success",6e3,{onClick:()=>i.push(f)})},[ah,U,X,v,Z,x,_,z,B,g,h,i,j,k]),ak=(0,f.useCallback)(a=>{var b,c;!0!==(c=b=a.nativeEvent).isComposing&&229!==c.keyCode&&"Enter"===b.key&&!b.shiftKey&&!b.altKey&&(b.metaKey||b.ctrlKey)&&(a.preventDefault(),aj())},[aj]),am=X?.label??"",an=X?X.starting?"starting":X.running?"running":"stopped":null;return(0,d.jsx)(a2.a,{isOpen:!0,onClose:R,title:k("newTask.title"),size:"md",disableClose:D,children:(0,d.jsxs)("div",{"data-testid":"new-task-dialog",className:"space-y-4",onKeyDown:ak,children:[(0,d.jsx)(bs,{status:l.status,isEmpty:0===T.length,onRetry:()=>o(a=>a+1)}),"ready"===l.status&&T.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bt,{recentOptions:ac,targetState:X,worktreeId:r,onSelect:ad}),(0,d.jsx)(bu,{repositoryOptions:T,repository:Y,worktreeId:r,worktree:U,instances:V,instance:W,onRepositoryChange:ae,onBranchChange:af,onAgentChange:a=>ad({worktreeId:r,instanceId:a})}),(0,d.jsx)(bv,{statusKey:an,agentLabel:am}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-message",className:br,children:k("newTask.messageLabel")}),(0,d.jsx)("textarea",{ref:K,id:"new-task-message","data-testid":"new-task-message",value:v,onChange:a=>w(a.target.value),placeholder:k("newTask.messagePlaceholder"),rows:5,className:`${bq} resize-y`})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,d.jsx)(bw,{modelAvailability:Z,model:x,cliTool:X?.instance.cliTool,agentLabel:am,onChange:y}),(0,d.jsx)(bx,{armedAutoYes:_,autoYesChoice:z,autoYesUnknown:aa,onChoiceChange:A,answerMode:B,onAnswerModeChange:C})]})]}),(0,d.jsx)(by,{failure:F,agentLabel:am}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsxs)("span",{className:"mr-auto hidden items-center gap-1 text-xs text-muted-foreground sm:flex",children:[(0,d.jsx)(ag.u,{children:al("MOD",H)}),(0,d.jsx)(ag.u,{children:"↵"}),(0,d.jsx)("span",{children:k("newTask.sendHint")})]}),(0,d.jsx)("button",{type:"button","data-testid":"new-task-cancel",onClick:R,disabled:D,className:"px-4 py-2 text-sm font-medium text-foreground bg-muted hover:bg-muted/80 rounded-lg transition-colors disabled:opacity-50",children:k("cancel")}),(0,d.jsx)("button",{type:"button","data-testid":"new-task-send",onClick:()=>void aj(),disabled:!ah,className:"px-4 py-2 text-sm font-medium text-white bg-accent-600 hover:bg-accent-700 disabled:opacity-50 disabled:cursor-not-allowed rounded-lg transition-colors",children:D?k("newTask.sending"):k("newTask.send")})]})]})})}function bA(){let{isOpen:a,openNewTask:b}=(0,ai.hX)(),{open:c}=(0,ah.C)();return(0,f.useRef)(c),a?(0,d.jsx)(bz,{}):null}var bB=c(11010);let bC="transform transition-transform duration-300 ease-out",bD=(0,f.memo)(function({children:a}){let{isOpen:b,isMobileDrawerOpen:c,closeMobileDrawer:g,width:m,setWidth:n,repoTabBarMode:o,toggle:p}=(0,h.VF)(),q=(0,i.a)(),{showSidebar:r,showGlobalNav:s}=function(){var a=(0,e.usePathname)();for(let b of k)if(a.startsWith(b.prefix))return{...j,...b.config};return{...j}}(),{open:t}=(0,ah.C)();(0,f.useRef)(t),(0,f.useRef)(p);let{factor:u}=(0,l.Ps)(),v=Math.round(160*u),w=Math.round(480*u),x=Math.round(Math.min(w,Math.max(v,m*u))),y=(0,J.fs)(o??J.PB,b),z=(0,f.useRef)(null),A=(0,f.useRef)(null),B=(0,f.useRef)(null),C=(0,f.useRef)(c);(0,f.useLayoutEffect)(()=>{let a=C.current;if(C.current=c,!q||!a||c)return;let b=document.activeElement,d=b instanceof HTMLElement&&B.current?.contains(b)===!0;(d||null===b||b===document.body)&&!(0,aZ.Bl)()&&d&&b.blur()},[q,c]);let D=(0,f.useCallback)(a=>{n(Math.round(a/u))},[n,u]);return q?(0,d.jsx)(ai.Zg,{children:(0,d.jsxs)("div",{"data-testid":"app-shell",className:"h-screen flex flex-col",children:[(0,d.jsx)(a0,{}),c&&(0,d.jsx)("div",{"data-testid":"drawer-overlay",className:"fixed inset-0 bg-black/50 z-40",onClick:g,"aria-hidden":"true"}),r&&(0,d.jsx)("aside",{ref:B,"data-testid":"sidebar-container",className:`
|
|
4
|
+
data-[state=open]:text-sidebar-foreground ${b?"":"[@media(hover:none)]:hidden"}`,children:(0,d.jsx)(g.A,{className:"h-4 w-4","aria-hidden":"true"})})}),(0,d.jsxs)(j.SQ,{align:"end",[o]:"",onEscapeKeyDown:a=>a.stopPropagation(),children:[(0,d.jsx)(j._2,{asChild:!0,children:(0,d.jsx)("a",{href:`/worktrees/${a.id}`,target:"_blank",rel:"noopener noreferrer",children:r("branchItem.openInNewTab")})}),(0,d.jsx)(j._2,{onSelect:()=>void u(a.name),children:r("branchItem.copyBranchName")}),a.worktreePath&&(0,d.jsx)(j._2,{onSelect:()=>void u(a.worktreePath??""),children:r("branchItem.copyPath")}),q&&(0,d.jsxs)(i.Pb,{children:[(0,d.jsxs)(i.ZP,{"data-testid":"branch-row-status",className:"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-muted data-[state=open]:bg-muted",children:[(0,d.jsx)("span",{className:"flex-1",children:r("branchItem.status")}),(0,d.jsx)("span",{"data-testid":"branch-row-status-current",className:"text-xs text-muted-foreground",children:s((0,n.Zh)(p))}),(0,d.jsx)(h.A,{className:"h-3.5 w-3.5 text-muted-foreground","aria-hidden":"true"})]}),(0,d.jsx)(i.ZL,{children:(0,d.jsx)(i.G5,{[o]:"",sideOffset:4,collisionPadding:8,style:{zIndex:m.M.POPOVER},className:"min-w-[9rem] overflow-hidden rounded-md border border-border bg-surface p-1 text-surface-foreground shadow-lg",onEscapeKeyDown:a=>a.stopPropagation(),children:(0,d.jsx)(j.Hr,{value:p??"",onValueChange:a=>{let b=""===a?null:a;b!==p&&q(b)},children:n.m9.map(a=>(0,d.jsx)(j.Ht,{value:a.value??"",children:s(a.labelKey)},a.labelKey))})})})]})]})]})})},3890:(a,b,c)=>{"use strict";c.d(b,{AppProviders:()=>E});var d=c(21124),e=c(42378);let f=["/login","/api/auth/login","/api/auth/logout","/api/auth/status","/api/remote/pair","/manifest.webmanifest","/sw.js","/offline"];var g=c(37397),h=c(45523),i=c(81092),j=c(84342),k=c(5772),l=c(64632),m=c(89184),n=c(63157),o=c(52761),p=c(74930),q=c(79782),r=c(23910),s=c(62197),t=c(73060),u=c(63474),v=c(74132),w=c(67693),x=c(90102),y=c(38301),z=c(20481),A=c(25345),B=c(11010),C=c(18608);function D(){let a=(0,z.c)("pwa"),[b,c]=(0,y.useState)(null);(0,y.useRef)(!1);let e=(0,C.W)();return!b||e?null:(0,d.jsx)("div",{"data-testid":"pwa-update-toast",role:"status","aria-live":"polite",className:"pointer-events-none fixed bottom-0 right-0 flex max-w-full justify-end px-4 pb-safe",style:{zIndex:B.M.TOAST},children:(0,d.jsxs)("div",{"data-testid":"pwa-update-toast-card",className:"pointer-events-auto mb-4 flex items-center gap-3 rounded-lg border border-border bg-surface px-4 py-3 shadow-lg",children:[(0,d.jsx)("span",{className:"text-sm font-medium text-foreground",children:a("update.available")}),(0,d.jsxs)("button",{type:"button",onClick:()=>{b.postMessage({type:"SKIP_WAITING"})},className:"inline-flex items-center gap-1.5 rounded-md bg-accent-600 px-3 py-1.5 text-sm font-medium text-white transition-colors hover:bg-accent-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ring-offset-background dark:bg-accent-500 dark:hover:bg-accent-600",children:[(0,d.jsx)(A.A,{className:"h-4 w-4"}),a("update.reload")]})]})})}function E({children:a,locale:b,messages:c,timeZone:y,authEnabled:z=!1}){var A;let B=(A=(0,e.usePathname)(),!z||!f.includes(A??""));return(0,d.jsx)(g.default,{locale:b,messages:c,timeZone:y,children:(0,d.jsx)(u.tE,{children:(0,d.jsx)(h.N,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:(0,d.jsx)(j.O,{authEnabled:z,children:(0,d.jsx)(k.W5,{children:(0,d.jsx)(i.GB,{children:(0,d.jsx)(p.tS,{enabled:B,children:(0,d.jsxs)(n.g7,{enabled:B,children:[(0,d.jsx)(v.rM,{}),(0,d.jsx)(x.o,{}),(0,d.jsx)(w.H,{}),(0,d.jsx)(l.E,{children:(0,d.jsx)(m.S,{children:(0,d.jsx)(q.aF,{children:(0,d.jsx)(r.y2,{enabled:B,children:(0,d.jsxs)(s.NS,{children:[(0,d.jsx)(o.Bo,{children:a}),(0,d.jsx)(D,{}),(0,d.jsx)(t.gZ,{})]})})})})})]})})})})})})})})}},4267:(a,b,c)=>{"use strict";c.d(b,{Lt:()=>h,Wj:()=>f,eu:()=>e,fJ:()=>g});var d=c(17252);let e=2,f=6,g=["claude","codex","antigravity"];function h(a){return a.length<e||a.length>f?{valid:!1,error:`Must be ${e}-${f} elements`}:a.every(a=>"string"==typeof a&&d.XH.includes(a))?new Set(a).size!==a.length?{valid:!1,error:"Duplicate tool IDs not allowed"}:{valid:!0,value:a}:{valid:!1,error:"Invalid CLI tool ID"}}},4558:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(43692),e=c(86802),f=c(25754);let g=(0,d.A)(async({requestLocale:a})=>{let b=await a;if(!(0,f.d9)(b)){let a=await (0,e.UL)(),c=await (0,e.b3)();b=(0,f.rv)(a.get(f.gB)?.value,c.get("accept-language"))}let[d,g,h,i,j,k,l,m,n,o,p,q,r,s,t]=await Promise.all([c(61118)(`./${b}/common.json`),c(90338)(`./${b}/worktree.json`),c(62081)(`./${b}/autoYes.json`),c(66125)(`./${b}/error.json`),c(72637)(`./${b}/prompt.json`),c(51877)(`./${b}/auth.json`),c(38898)(`./${b}/schedule.json`),c(80407)(`./${b}/commandPalette.json`),c(70288)(`./${b}/home.json`),c(60887)(`./${b}/review.json`),c(75567)(`./${b}/pwa.json`),c(99127)(`./${b}/notifications.json`),c(1483)(`./${b}/keyboardShortcuts.json`),c(80812)(`./${b}/externalApps.json`),c(18913)(`./${b}/skills.json`)]);return{locale:b,timeZone:"UTC",messages:{common:d.default,worktree:g.default,autoYes:h.default,error:i.default,prompt:j.default,auth:k.default,schedule:l.default,commandPalette:m.default,home:n.default,review:o.default,pwa:p.default,notifications:q.default,keyboardShortcuts:r.default,externalApps:s.default,skills:t.default}}})},5682:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/CommandMate/CommandMate/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/CommandMate/CommandMate/src/app/error.tsx","default")},5772:(a,b,c)=>{"use strict";c.d(b,{Ps:()=>k,W5:()=>j});var d=c(21124),e=c(38301),f=c(90076),g=c(12480);let h={size:g.r5,setSize:()=>{},isMobile:!1,factor:g.d8[g.r5].factor,isAvailable:!1},i=(0,e.createContext)(h);function j({children:a}){let{size:b,setSize:c,isAvailable:h}=(0,g.of)(),j=(0,f.a)(),k=(0,e.useMemo)(()=>({size:b,setSize:c,isMobile:j,factor:g.d8[b].factor,isAvailable:h}),[b,c,j,h]);return(0,d.jsx)(i.Provider,{value:k,children:a})}function k(){return(0,e.useContext)(i)}},6074:(a,b,c)=>{"use strict";c.d(b,{O:()=>e});var d=c(38301);function e(a,b){let[c,e]=(0,d.useState)(a?"open":"closed");return a&&"open"!==c?e("open"):a||"open"!==c||e("exiting"),{shouldRender:a||"closed"!==c,isExiting:!a&&"exiting"===c}}},9042:(a,b,c)=>{"use strict";c.d(b,{AppShellGate:()=>bH});var d=c(21124),e=c(42378),f=c(38301),g=c.n(f),h=c(81092),i=c(90076);let j={showSidebar:!0,showGlobalNav:!0,showLocalNav:!1,autoCollapseSidebar:!1},k=[{prefix:"/worktrees/",config:{showGlobalNav:!1,showLocalNav:!0}},{prefix:"/sessions",config:{autoCollapseSidebar:!0}}];var l=c(5772),m=c(3991),n=c.n(m),o=c(52761);let p=(0,f.forwardRef)(function({href:a,onClick:b,target:c,...f},g){let h=(0,e.usePathname)(),i=(0,o.Hq)();return(0,d.jsx)(n(),{ref:g,href:a,target:c,onClick:d=>{var e;b?.(d),d.defaultPrevented||0!==(e=d).button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||void 0!==c&&"_self"!==c||/^([a-z][a-z0-9+.-]*:)?\/\//i.test(a)||/^(mailto:|tel:)/i.test(a)||(d.preventDefault(),a!==h&&i.push(a))},...f})});var q=c(20481),r=c(75903),s=c(65828),t=c(59268),u=c(94684),v=c(10366),w=c(99615),x=c(22023),y=c(47817),z=c(38812),A=c(1637),B=c(72380),C=c(77560),D=c(89877);let E=(0,f.memo)(function({worktrees:a,visibleWorktreeIds:b,selectedWorktreeId:c,onSelect:e,onNavigate:f}){let g=(0,q.c)("common"),h=a.length;if(0===h)return null;let i=a.slice(0,3),j=h-i.length;return(0,d.jsxs)("section",{"data-testid":"sidebar-needs-attention","aria-label":g("sidebar.needsAttention"),className:"flex-shrink-0 px-2 pt-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 pb-1 text-xs text-sidebar-muted",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:g("sidebar.needsAttention")}),(0,d.jsx)("span",{"data-testid":"sidebar-needs-attention-count","aria-label":g("attention.badgeLabel",{count:h}),className:"flex-shrink-0 rounded-full bg-warning-subtle px-1.5 font-semibold leading-5 tabular-nums text-warning-foreground",children:h>99?"99+":h})]}),(0,d.jsx)("ul",{className:"space-y-0.5",children:i.map(a=>{let f=(0,D.XK)(a),h=!b.has(a.id),i=a.id===c;return(0,d.jsx)("li",{children:(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-attention-item","data-hidden-repository":h?"true":void 0,onClick:()=>e(a.id),"aria-current":i?"true":void 0,title:`${f.name} \xb7 ${f.repositoryName}`,className:`flex h-[34px] w-full min-w-0 items-center gap-2 rounded-md px-2 text-left transition-colors hover:bg-sidebar-hover focus:outline-none focus-visible:ring-2 focus-visible:ring-ring ${i?"bg-sidebar-hover":""}`,children:[(0,d.jsx)("span",{className:"flex w-4 flex-shrink-0 items-center justify-center",children:(0,d.jsx)(A.Ej,{status:"waiting",waitingKind:f.waitingKind})}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm text-sidebar-foreground",children:f.name}),(0,d.jsx)("span",{className:"min-w-0 max-w-[40%] flex-shrink truncate text-xs text-sidebar-muted",children:f.repositoryName}),h&&(0,d.jsx)(B.A,{"data-testid":"sidebar-attention-hidden-repository",className:"h-3.5 w-3.5 flex-shrink-0 text-sidebar-muted","aria-label":g("sidebar.hiddenRepository"),role:"img"})]})},a.id)})}),(0,d.jsx)(p,{href:C.ks,"data-testid":"sidebar-needs-attention-review-link",onClick:f,className:"mt-0.5 flex min-w-0 items-center rounded-md px-2 py-1 text-xs text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:(0,d.jsx)("span",{className:"min-w-0 truncate",children:j>0?g("sidebar.attentionMoreInReview",{count:j}):g("sidebar.openInReview")})})]})}),F=(0,f.memo)(function({branches:a,selectedWorktreeId:b,onBranchClick:c,forceExpanded:e}){let g=(0,q.c)("common"),[h,i]=(0,f.useState)(!1),j=e||h;return(0,d.jsxs)("div",{"data-testid":"branch-group-other",children:[(0,d.jsx)("div",{className:z.R8,children:(0,d.jsxs)("button",{type:"button","data-testid":"branch-group-other-toggle","aria-expanded":j,disabled:e,onClick:()=>i(a=>!a),className:"flex h-[30px] w-full min-w-0 items-center gap-2 rounded-[10px] px-3 text-left text-xs text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:cursor-default disabled:hover:bg-transparent",children:[(0,d.jsx)("svg",{className:`h-3 w-3 flex-shrink-0 transition-transform ${j?"rotate-90":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,"aria-hidden":"true",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"})}),(0,d.jsx)("span",{className:"min-w-0 truncate",children:g("sidebar.otherBranches",{count:a.length})})]})}),j&&a.map(a=>(0,d.jsx)(z.yP,{branch:a,isSelected:a.id===b,onClick:()=>c(a.id),showRepositoryName:!1},a.id))]})});var G=c(85866),H=c(64936),I=c(10290),J=c(32482),K=c(35595);let L=[{mode:"grouped",labelKey:"sidebar.viewMode.grouped"},{mode:"flat",labelKey:"sidebar.viewMode.flat"},{mode:"sessions",labelKey:"sidebar.viewMode.sessions"}],M=[{key:"updatedAt",labelKey:"sort.updatedAt"},{key:"repositoryName",labelKey:"sort.repositoryName"},{key:"branchName",labelKey:"sort.branchName"},{key:"status",labelKey:"sort.status"}],N={updatedAt:"desc"},O={updatedAt:{asc:"sort.direction.oldestFirst",desc:"sort.direction.newestFirst"},repositoryName:{asc:"sort.direction.aToZ",desc:"sort.direction.zToA"},branchName:{asc:"sort.direction.aToZ",desc:"sort.direction.zToA"},status:{asc:"sort.direction.attentionFirst",desc:"sort.direction.attentionLast"}},P={asc:"sort.ascending",desc:"sort.descending"};function Q(a){a.preventDefault()}let R=(0,f.memo)(function({viewMode:a,onViewModeChange:b}){let c=(0,q.c)("common"),{sortKey:e,sortDirection:g,setSortKey:i,setSortDirection:j}=(0,h.VF)(),k=(0,f.useId)(),l=(0,f.useId)(),m=(0,f.useMemo)(()=>{let a=O[e]??P;return b=>c(a[b])},[e,c]),n=c(L.find(b=>b.mode===a)?.labelKey??"sidebar.viewMode.grouped"),o=c(M.find(a=>a.key===e)?.labelKey??`sort.${e}`),p=c("sidebar.listOptionsSummary",{view:n,sort:o,direction:m(g)}),r=a===h.e8&&e===h.P0&&g===h.RA,s=N[e]??"asc";return(0,d.jsxs)(I.rI,{children:[(0,d.jsx)(I.ty,{asChild:!0,children:(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-list-options","data-view-mode":a,"data-sort-key":e,"data-sort-direction":g,"aria-label":c("sidebar.listOptionsLabel",{summary:p}),title:p,className:"relative flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-sidebar-hover data-[state=open]:text-sidebar-foreground",children:[(0,d.jsx)(H.A,{className:"h-4 w-4","aria-hidden":"true"}),!r&&(0,d.jsx)("span",{"data-testid":"sidebar-list-options-indicator","aria-hidden":"true",className:"absolute right-1 top-1 h-1.5 w-1.5 rounded-full bg-accent-500"})]})}),(0,d.jsxs)(I.SQ,{"data-testid":"sidebar-list-options-menu",align:"end",collisionPadding:8,className:(0,K.cn)("w-52 max-w-[calc(100vw-16px)]","max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto"),children:[(0,d.jsx)(I.lp,{id:k,children:c("sidebar.viewLabel")}),(0,d.jsx)(I.Hr,{"data-testid":"view-mode-options","aria-labelledby":k,value:a,onValueChange:c=>{(0,J.$m)(c)&&c!==a&&b(c)},children:L.map(({mode:a,labelKey:b})=>(0,d.jsx)(I.Ht,{value:a,onSelect:Q,children:c(b)},a))}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.lp,{id:l,children:c("sort.label")}),(0,d.jsx)(I.Hr,{"data-testid":"sort-key-options","aria-labelledby":l,value:e,onValueChange:a=>{let b=M.find(b=>b.key===a);b&&b.key!==e&&(i(b.key),j(N[b.key]??"asc"))},children:M.map(({key:a,labelKey:b})=>(0,d.jsx)(I.Ht,{value:a,onSelect:Q,children:c(b)},a))}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.Hr,{"data-testid":"sort-direction-options","aria-label":c("sort.directionLabel"),value:g,onValueChange:a=>{("asc"===a||"desc"===a)&&j(a)},children:("asc"===s?["asc","desc"]:["desc","asc"]).map(a=>(0,d.jsx)(I.Ht,{value:a,onSelect:Q,children:m(a)},a))})]})]})}),S=(0,f.memo)(function({searchQuery:a,onSearchChange:b,viewMode:c,onViewModeChange:e}){let f=(0,q.c)("common");return(0,d.jsxs)("div",{"data-testid":"sidebar-list-toolbar",className:"flex flex-shrink-0 items-center gap-1 px-3 pt-2 pb-1.5",children:[(0,d.jsx)(G.pd,{type:"text",inputSize:"sm",placeholder:f("sidebar.searchBranches"),"aria-label":f("sidebar.searchBranches"),value:a,onChange:a=>b(a.target.value),className:"min-w-0 flex-1 border-sidebar-border bg-background shadow-none"}),(0,d.jsx)(R,{viewMode:c,onViewModeChange:e})]})});var T=c(1102),U=c(81497),V=c(45523),W=c(84342),X=c(85744),Y=c(62197),Z=c(12480),$=c(68232);async function _(){try{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"}catch{window.location.href="/login"}}let aa=I.ty;function ab(){let a=(0,q.c)("common"),{size:b,setSize:c}=(0,l.Ps)(),e=(0,h.pT)();return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.lp,{children:a("displaySize.ariaLabel")}),(0,d.jsx)(I.Hr,{value:b,onValueChange:a=>{(0,Z.fM)(a)&&c(a)},children:Z.Uf.map(b=>(0,d.jsx)(I.Ht,{value:b,children:a(`displaySize.${b}`)},b))}),e&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(I.lp,{children:a("repoTabBar.settingLabel")}),(0,d.jsx)(I.Hr,{value:e.repoTabBarMode,onValueChange:a=>{(0,J.m3)(a)&&e.setRepoTabBarMode(a)},children:J.EN.map(b=>(0,d.jsx)(I.Ht,{value:b,children:a(`repoTabBar.mode.${b}`)},b))})]})]})}function ac({children:a,testIdPrefix:b,side:c="top",align:e="end",showDisplayPreferences:g=!1,onNavigate:h}){let j=(0,q.c)("worktree"),k=(0,o.Hq)(),{theme:l,setTheme:m}=(0,V.D)(),{currentLocale:n,switchLocale:p}=(0,X.g)(),r=(0,W.H)(),s=(0,i.a)(),{open:t}=(0,Y.V0)(),u=(0,f.useRef)(!1),v=(0,f.useRef)(null),w="0.49.3",x=a=>{h?.(),k.push(a)};return(0,d.jsxs)(I.rI,{children:[a,(0,d.jsxs)(I.SQ,{side:c,align:e,collisionPadding:8,className:"w-56 max-w-[calc(100vw-16px)] max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto",onCloseAutoFocus:()=>{u.current&&(u.current=!1,queueMicrotask(t))},children:[(0,d.jsx)(I.lp,{"data-testid":`${b}-version`,children:j("activityBar.settingsMenu.version",{version:w?`v${w}`:"-"})}),(0,d.jsx)(I._2,{asChild:!0,onSelect:()=>{let a=v.current;if(v.current=null,!(a&&(0!==a.button||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey))){if(a?.preventDefault(),s)return void x("/more");u.current=!0}},children:(0,d.jsx)("a",{href:"/more","data-testid":`${b}-settings`,onClick:a=>{v.current=a},children:j("activityBar.settingsMenu.settings")})}),(0,d.jsx)(I._2,{onSelect:()=>x("/skills"),children:j("activityBar.settingsMenu.skills")}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I.lp,{children:j("activityBar.settingsMenu.theme")}),(0,d.jsxs)(I.Hr,{value:l??"system",onValueChange:a=>m(a),children:[(0,d.jsx)(I.Ht,{value:"light",children:j("activityBar.settingsMenu.themeLight")}),(0,d.jsx)(I.Ht,{value:"dark",children:j("activityBar.settingsMenu.themeDark")}),(0,d.jsx)(I.Ht,{value:"system",children:j("activityBar.settingsMenu.themeSystem")})]}),(0,d.jsx)(I.lp,{children:j("activityBar.settingsMenu.language")}),(0,d.jsx)(I.Hr,{value:n,onValueChange:a=>p(a),children:$.dI.map(a=>(0,d.jsx)(I.Ht,{value:a,children:$.vK[a]},a))}),g&&!s&&(0,d.jsx)(ab,{}),(0,d.jsx)(I.mB,{}),(0,d.jsx)(I._2,{asChild:!0,children:(0,d.jsx)("a",{href:"https://github.com/kewton/MyCodeBranchDesk",target:"_blank",rel:"noopener noreferrer",children:j("activityBar.settingsMenu.github")})}),r&&(0,d.jsx)(I._2,{onSelect:()=>{_()},children:j("activityBar.settingsMenu.logout")})]})]})}var ad=c(15917),ae=c(76180),af=c(88285),ag=c(85647),ah=c(64632),ai=c(21787);let aj=["global","terminal","composer","editor"],ak=[{id:"commandPalette",keys:["MOD","K"],scope:"global"},{id:"toggleSidebar",keys:["MOD","B"],scope:"global"},{id:"keyboardHelp",keys:["?"],scope:"global"},{id:"closeOverlay",keys:["Esc"],scope:"global"},{id:"navigateList",keys:["↑","↓"],scope:"global"},{id:"terminalSearch",keys:["MOD","F"],scope:"terminal"},{id:"toggleSurfaceMode",keys:["MOD","Shift","M"],scope:"terminal"},{id:"sendMessage",keys:["↵"],scope:"composer"},{id:"composerNewline",keys:["Shift","↵"],scope:"composer"},{id:"editorIndent",keys:["Tab"],scope:"editor"},{id:"editorOutdent",keys:["Shift","Tab"],scope:"editor"},{id:"editorTabFocus",keys:["Ctrl","M"],scope:"editor"},{id:"editorSave",keys:["MOD","S"],scope:"editor"},{id:"editorFullscreen",keys:["MOD","Shift","F"],scope:"editor"}];function al(a,b){return"MOD"===a?b?"⌘":"Ctrl":a}var am=c(77028),an=c(14346),ao=c(47089);let ap="flex items-center justify-center rounded-md text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",aq={width:`${J.KI}px`,height:`${J.KI}px`};function ar({testId:a,onClose:b}){let c=(0,q.c)("common"),{isOpen:e,toggle:f}=(0,h.VF)(),g=c(e?"sidebar.close":"sidebar.open"),i=e?am.A:an.A;return(0,d.jsx)("div",{"data-sidebar-toggle-cell":"",className:"flex flex-shrink-0",style:{padding:`${J.df}px`},children:b?(0,d.jsx)("button",{type:"button","data-testid":a,onClick:b,"aria-label":c("sidebar.close"),style:aq,className:ap,children:(0,d.jsx)(ao.A,{size:20,"aria-hidden":"true"})}):(0,d.jsx)(T.m_,{content:g,placement:e?"bottom":"right",children:(0,d.jsx)("button",{type:"button","data-testid":a,onClick:f,"aria-label":g,"aria-expanded":e,style:aq,className:ap,children:(0,d.jsx)(i,{size:20,"aria-hidden":"true"})})})})}let as="flex w-full min-w-0 items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm text-sidebar-muted transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring";function at({drawer:a=!1}){let b=(0,q.c)("common"),c=(0,q.c)("commandPalette"),{setOpen:e}=(0,ah.C)(),{openNewTask:f}=(0,ai.hX)(),{closeMobileDrawer:i}=(0,h.VF)(),j=function(){let[a,b]=g().useState(null);return a}(),k=a?i:void 0;return(0,d.jsxs)("div",{"data-testid":a?"sidebar-drawer-top-controls":"sidebar-top-controls",className:"flex-shrink-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center",children:[a?(0,d.jsx)(ar,{testId:"sidebar-drawer-close",onClose:i}):(0,d.jsx)(ar,{testId:"sidebar-panel-toggle"}),(0,d.jsxs)(p,{href:"/",onClick:k,"data-testid":"sidebar-logo",className:"flex min-w-0 items-center gap-2 rounded-md px-1 py-1 transition-opacity hover:opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,d.jsx)("span",{className:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-md bg-accent-600",children:(0,d.jsx)(ad.A,{size:14,strokeWidth:2,className:"text-white","aria-hidden":"true"})}),(0,d.jsx)("span",{className:"truncate text-sm font-bold text-sidebar-foreground",children:"CommandMate"})]})]}),(0,d.jsxs)("div",{className:"space-y-0.5 px-2",children:[(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-new-task",onClick:()=>{k?.(),f()},"aria-haspopup":"dialog",className:as,children:[(0,d.jsx)(ae.A,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:b("newTask.title")})]}),(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-search",onClick:()=>{k?.(),e(!0)},"aria-label":c("mobileTrigger"),className:as,children:[(0,d.jsx)(af.A,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:c("searchAction")}),!a&&null!==j&&(0,d.jsxs)("span",{className:"flex flex-shrink-0 items-center gap-0.5","aria-hidden":"true",children:[(0,d.jsx)(ag.u,{children:j}),(0,d.jsx)(ag.u,{children:"K"})]})]})]})]})}var au=c(63474),av=c(19463),aw=c(78352),ax=c(87743),ay=c(95239);let az=0,aA=(0,f.memo)(function(){let a=(0,o.Hq)(),{worktrees:b,repositories:c,selectedWorktreeId:j,selectWorktree:k,refreshWorktrees:l,isLoading:m,error:n}=(0,y.$f)(),{closeMobileDrawer:p,sortKey:u,sortDirection:x,viewMode:A,setViewMode:B,repositoryOrder:F,setRepositoryOrder:H}=(0,h.VF)(),I=(0,q.c)("common"),K=(0,e.usePathname)()??"",L=(0,J.jn)(K,j),M=(0,i.a)(),{count:N}=(0,av.Lv)(),[O,P]=(0,f.useState)(""),Q=(0,f.useRef)(null),[R,T]=(0,f.useState)(()=>({})),U=(0,f.useRef)(!1);(0,f.useEffect)(()=>{U.current||(U.current=!0,fetch("/api/sidebar/group-order").then(a=>a.json()).then(a=>{a.success&&Array.isArray(a.order)&&H(a.order)}).catch(()=>{}))},[H]);let V=(0,f.useMemo)(()=>(0,J.UZ)(c),[c]),W=(0,f.useMemo)(()=>(0,J.s6)(b,V),[b,V]),X=(0,f.useMemo)(()=>(0,av.Rc)(b),[b]),Y=(0,f.useMemo)(()=>new Set(W.map(a=>a.id)),[W]),Z=(0,f.useMemo)(()=>W.map(D.XK),[W]),$=(0,f.useMemo)(()=>new Map(Z.map(a=>[a.id,a])),[Z]),_=(0,f.useDeferredValue)(Z),aa=(0,f.useRef)(null),ab=(0,f.useRef)(null),ac=(0,f.useRef)(null),ad=(0,f.useRef)(new Set),[ae,af]=(0,f.useState)(0);(0,f.useEffect)(()=>()=>{null!==ab.current&&clearTimeout(ab.current)},[]);let ag=(0,f.useCallback)(()=>{null!==ab.current&&(clearTimeout(ab.current),ab.current=null),aa.current=null,ac.current=null},[]),ah=(0,f.useMemo)(()=>{let a=aa.current;return!a||0===a.items.length||Date.now()>=a.expiresAt?_:a.items},[_,ae]),ai=(0,f.useRef)(ah),aj=ac.current,ak=new Set(ah.filter(a=>aj?.has(a.id)===!0||(0,J.rL)(a,L,$)).map(a=>a.id));(0,f.useLayoutEffect)(()=>{if(ai.current=ah,ad.current=ak,ac.current)for(let a of ak)ac.current.add(a);let a=aa.current;a&&0===a.items.length&&_.length>0&&ag()});let al=(0,f.useCallback)(()=>{if(0===ai.current.length)return;null!==ab.current&&(clearTimeout(ab.current),ab.current=null);let a=aa.current;if(a&&Date.now()<a.expiresAt){aa.current={...a,expiresAt:1/0};return}aa.current={items:ai.current,expiresAt:1/0},ac.current=new Set(ad.current)},[]),am=(0,f.useCallback)(()=>{aa.current&&(aa.current={...aa.current,expiresAt:Date.now()+1e3},null!==ab.current&&clearTimeout(ab.current),ab.current=setTimeout(()=>{ag(),af(a=>a+1)},1e3))},[ag]),{sortedItems:an,groupedItems:ao}=(0,ay.D)({items:ah,sortKey:u,sortDirection:x,viewMode:A,filterText:O}),ap=(0,f.useMemo)(()=>"grouped"===A&&ao?O.trim()?ao:(0,J.Ew)(ao,F):null,[A,ao,F,O]),aq="grouped"===A?ap:null,ar=(0,f.useMemo)(()=>"sessions"===A?(0,J.EY)((0,J.UB)(an),u,x):[],[A,an,u,x]);(0,f.useEffect)(()=>{},[R]);let as=(0,f.useCallback)(a=>{T(b=>({...b,[a]:!b[a]}))},[]),au=(0,f.useCallback)(()=>{var a;az=Number.isFinite(a=Q.current?.scrollTop??0)&&a>0?a:0},[]),aw=an.length>0||(aq?.length??0)>0||ar.length>0;(0,f.useEffect)(()=>{let a=Q.current;if(!a)return;let b=window.requestAnimationFrame(()=>{a.scrollTop=az});return()=>{window.cancelAnimationFrame(b)}},[aw,A]);let aA=(0,f.useRef)(b);(0,f.useEffect)(()=>{aA.current=b},[b]);let aD=(0,f.useCallback)(b=>{au(),k(b);let c=aA.current.find(a=>a.id===b);a.push(c?(0,ax.f)(c):`/worktrees/${b}`),p()},[au,k,a,p]),aG=(0,f.useCallback)(b=>{au(),k(b.worktreeId),a.push((0,J.Ii)(b)),p()},[au,k,a,p]),aH=(0,v.FR)((0,v.MS)(v.AN,{activationConstraint:{distance:8}})),aI=(0,f.useCallback)(a=>{let{active:b,over:c}=a;if(!c||b.id===c.id||!aq)return;let d=aq.map(a=>a.repositoryName),e=d.indexOf(String(b.id)),f=d.indexOf(String(c.id));if(-1===e||-1===f)return;let g=(0,w.be)(d,e,f);H(g),fetch("/api/sidebar/group-order",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order:g})}).catch(()=>{H(d)})},[aq,H]),aL="grouped"===A?(aq?.length??0)===0:"sessions"===A?0===ar.length:0===an.length,aM=m&&0===b.length,aN=!aM&&!!n&&0===b.length,aO=(0,f.useCallback)(()=>{l()},[l]),aP={sessions:(0,d.jsx)("li",{className:"flex min-w-0",children:(0,d.jsx)(aE,{href:"/sessions",icon:r.A,label:I("nav.sessions"),testId:"sidebar-nav-sessions",isActive:K.startsWith("/sessions"),onNavigate:p})}),repositories:(0,d.jsxs)("li",{className:"flex min-w-0 items-center gap-1",children:[(0,d.jsx)(aE,{href:"/repositories",icon:s.A,label:I("nav.repositories"),testId:"sidebar-nav-repositories",isActive:K.startsWith("/repositories"),onNavigate:p}),(0,d.jsx)(aJ,{refreshWorktrees:l})]}),review:(0,d.jsx)("li",{className:"flex min-w-0",children:(0,d.jsx)(aE,{href:N>0?C.ks:"/review",icon:t.A,label:I("nav.review"),testId:"sidebar-nav-review",isActive:K.startsWith("/review"),onNavigate:p,trailing:N>0?(0,d.jsx)("span",{"data-testid":"sidebar-nav-review-count",role:"status","aria-label":I("attention.badgeLabel",{count:N}),className:"flex-shrink-0 rounded-full bg-warning-subtle px-1.5 text-xs font-semibold leading-5 tabular-nums text-warning-foreground",children:N>99?"99+":N}):null})})};return(0,d.jsx)(z.Fy.Provider,{value:!M,children:(0,d.jsxs)("nav",{"data-testid":"sidebar","aria-label":I("sidebar.branchNavigation"),className:"h-full flex flex-col bg-sidebar text-sidebar-foreground",role:"navigation",children:[(0,d.jsx)(at,{drawer:M}),(0,d.jsx)("div",{"data-testid":"sidebar-header",className:"flex-shrink-0 space-y-2 border-b border-sidebar-border px-2 py-2",children:(0,d.jsx)("ul",{"data-testid":"sidebar-nav",className:"space-y-0.5",children:J.go.map(a=>(0,d.jsx)(g().Fragment,{children:aP[a]},a))})}),(0,d.jsx)(E,{worktrees:X,visibleWorktreeIds:Y,selectedWorktreeId:L,onSelect:aD,onNavigate:p}),(0,d.jsx)(S,{searchQuery:O,onSearchChange:P,viewMode:A,onViewModeChange:B}),(0,d.jsx)("div",{ref:Q,"data-testid":"branch-list",onScroll:au,onMouseEnter:al,onMouseLeave:am,className:"flex-1 overflow-y-auto overflow-x-hidden",children:aM?(0,d.jsx)(aB,{label:I("sidebar.loadingBranches")}):aN?(0,d.jsxs)("div",{"data-testid":"branch-list-error",role:"alert",className:"px-4 py-8 text-center text-sidebar-muted",children:[(0,d.jsx)("p",{className:"text-sm",children:I("sidebar.branchesLoadFailed")}),(0,d.jsx)(G.$n,{type:"button",variant:"secondary",size:"sm",className:"mt-3","data-testid":"branch-list-retry",onClick:aO,children:I("sidebar.retryLoadBranches")})]}):aL?(0,d.jsx)("div",{className:"px-4 py-8 text-center text-sidebar-muted",children:I(O?"sidebar.noBranchesFound":"sidebar.noBranchesAvailable")}):"sessions"===A?ar.map(a=>(0,d.jsx)(aF,{row:a,isSelected:a.worktreeId===L,onClick:aG},a.key)):"grouped"===A&&aq?(0,d.jsx)(v.Mp,{sensors:aH,collisionDetection:v.fp,onDragEnd:aI,children:(0,d.jsx)(w.gB,{items:aq.map(a=>a.repositoryName),strategy:w._G,children:aq.map(a=>{let b=!R[a.repositoryName]||!!O.trim();return(0,d.jsx)(aC,{group:a,isExpanded:b,selectedWorktreeId:L,onToggle:()=>as(a.repositoryName),onBranchClick:aD,isDragDisabled:!!O.trim(),isFiltering:!!O.trim(),liveBranchById:$,stickyShownIds:aj},a.repositoryName)})})}):an.map(a=>(0,d.jsx)(z.yP,{branch:a,isSelected:a.id===L,onClick:()=>aD(a.id)},a.id))}),(0,d.jsx)("div",{"data-testid":"sidebar-footer",className:"flex-shrink-0 px-4 py-3 border-t border-sidebar-border",children:(0,d.jsx)(aK,{onNavigate:p})})]})})}),aB=(0,f.memo)(function({label:a}){return(0,d.jsxs)("div",{"data-testid":"branch-list-skeleton",role:"status","aria-live":"polite",className:"px-4 py-3 space-y-3",children:[(0,d.jsx)("span",{className:"sr-only",children:a}),[0,1,2,3,4].map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(G.EA,{className:"h-2 w-2 rounded-full"}),(0,d.jsx)(G.EA,{className:"h-3 flex-1"})]},a))]})});function aC({group:a,isExpanded:b,selectedWorktreeId:c,onToggle:e,onBranchClick:f,isDragDisabled:g,isFiltering:h,liveBranchById:i,stickyShownIds:j}){let{attributes:k,listeners:l,setNodeRef:m,setActivatorNodeRef:n,transform:o,transition:p,isDragging:q}=(0,w.gl)({id:a.repositoryName,disabled:g}),r={transform:x.Ks.Transform.toString(o),transition:p,opacity:q?.5:1},{shown:s,other:t}=(0,J.FS)(a.branches,c,i,j??void 0);return(0,d.jsxs)("div",{ref:m,style:r,className:"w-full min-w-0 pt-2",children:[(0,d.jsx)(aD,{repositoryName:a.repositoryName,branchCount:a.branches.length,isExpanded:b,onClick:e,dragHandleRef:n,dragHandleListeners:g?void 0:l,dragHandleAttributes:g?void 0:k}),b&&s.map(a=>(0,d.jsx)(z.yP,{branch:a,isSelected:a.id===c,onClick:()=>f(a.id),showRepositoryName:!1},a.id)),b&&t.length>0&&(0,d.jsx)(F,{branches:t,selectedWorktreeId:c,onBranchClick:f,forceExpanded:h})]})}function aD({repositoryName:a,branchCount:b,isExpanded:c,onClick:e,dragHandleRef:f,dragHandleListeners:g,dragHandleAttributes:h}){let i=(0,q.c)("common");return(0,d.jsxs)("div",{className:"group/header flex items-center w-full",children:[g&&(0,d.jsx)("div",{ref:f,...g,...h,"data-testid":"group-drag-handle","aria-label":i("sidebar.dragToReorderGroup"),className:" flex-shrink-0 flex items-center justify-center w-6 h-full pl-2 cursor-grab active:cursor-grabbing text-sidebar-muted hover:text-sidebar-foreground transition-[color,opacity] opacity-0 group-hover/header:opacity-100 group-focus-within/header:opacity-100 [@media(hover:none)]:opacity-100 rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-ring ",children:(0,d.jsx)(aH,{})}),(0,d.jsxs)("button",{"data-testid":"group-header",type:"button",onClick:e,"aria-expanded":c,className:" flex-1 min-w-0 flex items-center gap-2 px-2 py-1 text-xs font-normal text-sidebar-muted focus:outline-none focus:ring-2 focus:ring-inset focus:ring-ring transition-colors ",children:[(0,d.jsx)(aG,{isExpanded:c}),(0,d.jsx)(G.nF,{color:(0,J.LV)(a)}),(0,d.jsx)(U.nR,{content:a,className:"flex-1 min-w-0 text-left truncate",children:a}),(0,d.jsx)("span",{className:"text-sidebar-muted font-normal tabular-nums pr-2",children:b})]})]})}function aE({href:a,icon:b,label:c,testId:e,isActive:f,onNavigate:g,trailing:h}){return(0,d.jsxs)(p,{href:a,"data-testid":e,"aria-current":f?"page":void 0,onClick:g,className:`flex min-w-0 flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-sidebar-hover hover:text-sidebar-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring ${f?"bg-sidebar-hover font-medium text-sidebar-foreground":"text-sidebar-muted"}`,children:[(0,d.jsx)(b,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:c}),h]})}let aF=(0,f.memo)(function({row:a,isSelected:b,onClick:c}){let e=(0,q.c)("common"),f=(0,A.Mq)(a.status,a.unclassified),g=e(f?A.rH:`status.${a.status}`);return(0,d.jsx)("div",{className:`w-full min-w-0 ${z.R8}`,children:(0,d.jsxs)("button",{type:"button","data-testid":"session-list-item","data-session-key":a.key,onClick:()=>c(a),"aria-current":b?"true":void 0,className:`w-full min-w-0 min-h-[34px] px-3 py-1.5 flex items-center gap-2 text-left ${(0,z.Xd)(b)}`,children:[(0,d.jsx)(G.md,{status:a.status,size:"sm",label:a.exited?`${g} (${e("branchItem.agentExited")})`:g,className:f?A.Jd:void 0}),(0,d.jsx)("span",{className:"flex-shrink-0 max-w-[45%] truncate text-sm font-semibold text-sidebar-foreground",children:a.label}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 truncate text-xs text-sidebar-muted",children:[a.branchName," \xb7 ",a.repositoryName]})]})})});function aG({isExpanded:a}){return(0,d.jsx)("svg",{className:`w-3 h-3 flex-shrink-0 transition-transform ${a?"rotate-90":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"})})}function aH(){return(0,d.jsxs)("svg",{className:"w-3 h-3",fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"9",cy:"5",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"5",r:"1.5"}),(0,d.jsx)("circle",{cx:"9",cy:"12",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"12",r:"1.5"}),(0,d.jsx)("circle",{cx:"9",cy:"19",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"19",r:"1.5"})]})}function aI({className:a=""}){return(0,d.jsx)("svg",{className:`w-4 h-4 ${a}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h5M20 20v-5h-5M20.49 9A9 9 0 005.64 5.64L4 4m16 16l-1.64-1.64A9 9 0 014.51 15"})})}let aJ=(0,f.memo)(function({refreshWorktrees:a}){let[b,c]=(0,f.useState)(!1),e=(0,f.useRef)(!1),{showToast:g}=(0,au.dj)(),h=(0,q.c)("common"),i=(0,f.useCallback)(async()=>{if(!e.current){e.current=!0,c(!0);try{let b=await aw.Rx.sync();await a(),g(h("syncSuccess",{count:b.worktreeCount}),"success",3e3)}catch(a){a instanceof aw.hD&&401===a.status?g(h("syncAuthError"),"error",5e3):g(h("syncError"),"error",5e3)}finally{e.current=!1,c(!1)}}},[a,g,h]);return(0,d.jsx)(d.Fragment,{children:(0,d.jsx)(T.m_,{content:h("tooltips.sync"),placement:"bottom",children:(0,d.jsx)("button",{type:"button",onClick:i,disabled:b,"aria-label":h("syncButtonLabel"),className:"p-1 rounded-md text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:(0,d.jsx)(aI,{className:b?"animate-spin":""})})})})});function aK({onNavigate:a}){let b=(0,q.c)("common")("settings.title");return(0,d.jsx)(ac,{testIdPrefix:"sidebar-settings-menu",side:"top",align:"start",showDisplayPreferences:!0,onNavigate:a,children:(0,d.jsx)(aa,{asChild:!0,children:(0,d.jsxs)("button",{type:"button","data-testid":"sidebar-settings-menu",className:"flex w-full items-center gap-2 px-2 py-1.5 rounded-md text-sm text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring transition-colors",children:[(0,d.jsx)(u.A,{size:20,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:b})]})})})}var aL=c(38557);function aM(){let{shouldSurface:a,isReconnecting:b}=(0,aL.Fx)(),c=(0,q.c)("common");if(!a)return null;let e=c(b?"connection.reconnecting":"connection.offline");return(0,d.jsxs)("span",{"data-testid":"connection-status-indicator","data-connection-state":b?"reconnecting":"offline",role:"status","aria-live":"polite",title:c(b?"connection.reconnectingTooltip":"connection.offlineTooltip"),className:"hidden sm:inline-flex items-center gap-1.5 rounded-full border border-border bg-surface px-2 py-0.5 text-xs text-muted-foreground",children:[(0,d.jsx)("span",{"aria-hidden":"true",className:["w-1.5 h-1.5 rounded-full",b?"bg-warning motion-safe:animate-pulse":"bg-muted-foreground"].join(" ")}),e]})}var aN=c(60957);let aO=[{prefix:"/sessions",labelKey:"nav.sessions"},{prefix:"/repositories",labelKey:"nav.repositories"},{prefix:"/review",labelKey:"nav.review"},{prefix:"/skills",labelKey:"nav.skills"},{prefix:"/more",labelKey:"nav.more"}];function aP({title:a="CommandMate"}){var b;let c=null!==(b=(0,e.usePathname)()??"",aO.find(a=>b.startsWith(a.prefix))?.labelKey??null);return(0,d.jsxs)("header",{"data-testid":"screen-status-row",className:"flex flex-shrink-0 items-center justify-end gap-4 px-4 py-1.5 border-b border-border bg-background supports-[backdrop-filter]:bg-background/80 backdrop-blur-md empty:hidden",children:[!c&&(0,d.jsx)("h1",{"data-testid":"header-screen-title",className:"mr-auto min-w-0 truncate text-lg font-bold text-foreground",children:a}),(0,d.jsx)(aM,{}),(0,d.jsx)(aN.H,{})]})}function aQ({count:a}){let b=(0,q.c)("common");return 0===a?null:(0,d.jsx)("span",{"data-testid":"attention-badge-bubble",role:"status","aria-label":b("attention.badgeLabel",{count:a}),className:"absolute -top-1.5 -right-2.5 min-w-[1.05rem] rounded-full bg-warning-foreground px-1 text-[0.625rem] font-bold leading-[1.05rem] text-warning-subtle tabular-nums text-center",children:a>99?"99+":a})}let aR="relative flex h-10 w-10 items-center justify-center rounded-md transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",aS="text-sidebar-muted hover:bg-sidebar-hover hover:text-sidebar-foreground";function aT({href:a,icon:b,label:c,testId:e,isActive:f,badge:g}){return(0,d.jsx)(T.m_,{content:c,placement:"right",children:(0,d.jsx)(p,{href:a,"data-testid":e,"aria-label":c,"aria-current":f?"page":void 0,className:`${aR} ${f?"bg-sidebar-hover text-sidebar-foreground":aS}`,children:(0,d.jsxs)("span",{className:"relative flex",children:[(0,d.jsx)(b,{size:20,"aria-hidden":"true"}),g]})})})}function aU({icon:a,label:b,testId:c,onClick:e,hasPopup:f}){return(0,d.jsx)(T.m_,{content:b,placement:"right",children:(0,d.jsx)("button",{type:"button","data-testid":c,"aria-label":b,"aria-haspopup":f,onClick:e,className:`${aR} ${aS}`,children:(0,d.jsx)(a,{size:20,"aria-hidden":"true"})})})}function aV(){let a=(0,q.c)("common"),b=(0,q.c)("commandPalette"),c=(0,e.usePathname)()??"",{setOpen:f}=(0,ah.C)(),{openNewTask:h}=(0,ai.hX)(),{count:i}=(0,av.Lv)(),j=a("settings.title"),k={sessions:(0,d.jsx)(aT,{href:"/sessions",icon:r.A,label:a("nav.sessions"),testId:"sidebar-rail-sessions",isActive:c.startsWith("/sessions")}),repositories:(0,d.jsx)(aT,{href:"/repositories",icon:s.A,label:a("nav.repositories"),testId:"sidebar-rail-repositories",isActive:c.startsWith("/repositories")}),review:(0,d.jsx)(aT,{href:i>0?C.ks:"/review",icon:t.A,label:a("nav.review"),testId:"sidebar-rail-review",isActive:c.startsWith("/review"),badge:(0,d.jsx)(aQ,{count:i})})};return(0,d.jsxs)("nav",{"data-testid":"sidebar-rail","aria-label":a("sidebar.railLabel"),className:"flex h-full flex-col items-center gap-1 bg-sidebar pb-2 text-sidebar-foreground",style:{width:`${J.BN}px`},children:[(0,d.jsx)(ar,{testId:"sidebar-rail-toggle"}),(0,d.jsx)(aU,{icon:ae.A,label:a("newTask.title"),testId:"sidebar-rail-new-task",onClick:()=>h(),hasPopup:"dialog"}),(0,d.jsx)(aU,{icon:af.A,label:b("mobileTrigger"),testId:"sidebar-rail-search",onClick:()=>f(!0)}),(0,d.jsx)("div",{className:"my-1 w-8 border-b border-sidebar-border","aria-hidden":"true"}),J.go.map(a=>(0,d.jsx)(g().Fragment,{children:k[a]},a)),(0,d.jsx)("div",{className:"mt-auto",children:(0,d.jsx)(ac,{testIdPrefix:"sidebar-rail-settings",side:"right",align:"end",showDisplayPreferences:!0,children:(0,d.jsx)(T.m_,{content:j,placement:"right",children:(0,d.jsx)(aa,{asChild:!0,children:(0,d.jsx)("button",{type:"button","data-testid":"sidebar-rail-settings","aria-label":j,className:`${aR} ${aS}`,children:(0,d.jsx)(u.A,{size:20,"aria-hidden":"true"})})})})})})]})}c(68643);var aW=c(47684),aX=c(38882),aY=c(6130),aZ=c(13860);let a$=[{labelKey:"nav.sessions",href:"/sessions",isActive:a=>a.startsWith("/sessions"),icon:(0,d.jsx)(r.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.review",href:"/review",isActive:a=>a.startsWith("/review"),icon:(0,d.jsx)(t.A,{size:20,"aria-hidden":"true"}),showsAttentionBadge:!0},{labelKey:"nav.more",href:"/more",isActive:a=>a.startsWith("/more"),icon:(0,d.jsx)(aX.A,{size:20,"aria-hidden":"true"})}];function a_(){let a=(0,e.usePathname)(),{setOpen:b}=(0,ah.C)(),c=(0,q.c)("commandPalette"),f=(0,q.c)("common"),{count:g}=(0,av.Lv)(),i=(0,h.pT)();return i?.isMobileDrawerOpen?null:(0,d.jsx)("nav",{"data-testid":"global-mobile-nav",className:"fixed bottom-0 left-0 right-0 z-50 border-t border-border bg-background supports-[backdrop-filter]:bg-background/80 backdrop-blur-md pb-safe",children:(0,d.jsxs)("div",{className:"flex items-center justify-around h-14",children:[i&&(0,d.jsxs)("button",{type:"button","data-testid":"mobile-nav-open-sidebar",...aZ.cv,onClick:i.openMobileDrawer,className:"flex flex-col items-center justify-center flex-1 h-full text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,d.jsx)(aY.A,{size:20,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:f("sidebar.branches")})]}),a$.map(b=>{let c=b.isActive(a),e=!0===b.showsAttentionBadge&&g>0;return(0,d.jsxs)(p,{href:e?C.ks:b.href,className:`flex flex-col items-center justify-center flex-1 h-full text-xs transition-colors ${c?"text-accent-600 dark:text-accent-400":"text-muted-foreground hover:text-foreground"}`,children:[(0,d.jsxs)("span",{className:"relative inline-flex",children:[b.icon,!0===b.showsAttentionBadge&&(0,d.jsx)(aQ,{count:g})]}),(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:f(b.labelKey)})]},b.href)}),(0,d.jsxs)("button",{type:"button","data-testid":"mobile-command-palette-trigger",onClick:()=>b(!0),"aria-label":c("mobileTrigger"),className:"flex flex-col items-center justify-center flex-1 h-full text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,d.jsx)(af.A,{size:20,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:c("mobileLabel")})]})]})})}function a0(){let{shouldSurface:a,isReconnecting:b}=(0,aL.Fx)(),c=(0,q.c)("common");if(!a)return null;let e=c(b?"connection.reconnecting":"connection.offline"),f=c(b?"connection.reconnectingTooltip":"connection.offlineTooltip");return(0,d.jsx)("div",{"data-testid":"mobile-connection-banner","data-connection-state":b?"reconnecting":"offline",role:"status","aria-live":"polite",title:f,className:`shrink-0 pt-safe border-b ${b?"bg-warning-subtle border-warning-border text-warning-foreground":"bg-danger-subtle border-danger-border text-danger-foreground"}`,children:(0,d.jsxs)("div",{className:"flex items-center justify-center gap-1.5 px-3 py-1 text-xs",children:[(0,d.jsx)("span",{"aria-hidden":"true",className:`w-1.5 h-1.5 rounded-full ${b?"bg-warning motion-safe:animate-pulse":"bg-danger"}`}),e]})})}var a1=c(76047),a2=c(98033),a3=c(89184);let a4=[...ak,{id:"newTask",keys:["MOD","Shift","O"],scope:"global"},{id:"newTaskSend",keys:["MOD","↵"],scope:"global"}];function a5(){let{open:a,setOpen:b}=(0,a3.K)(),{open:c}=(0,ah.C)(),{isOpen:e}=(0,ai.hX)(),g=(0,q.c)("keyboardShortcuts"),[h,i]=(0,f.useState)(!1);(0,f.useRef)(a),(0,f.useRef)(c),(0,f.useRef)(e);let j=function(a=ak){return aj.map(b=>({scope:b,shortcuts:a.filter(a=>a.scope===b)})).filter(a=>a.shortcuts.length>0)}(a4);return(0,d.jsx)(a2.a,{isOpen:a,onClose:()=>b(!1),title:g("title"),size:"md",children:(0,d.jsx)("div",{"data-testid":"keyboard-shortcuts-overlay",className:"space-y-6",children:j.map(({scope:a,shortcuts:b})=>(0,d.jsxs)("section",{"data-testid":`keyboard-shortcuts-scope-${a}`,children:[(0,d.jsx)("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:g(`scopes.${a}`)}),(0,d.jsx)("ul",{className:"divide-y divide-border",children:b.map(a=>(0,d.jsxs)("li",{"data-testid":`keyboard-shortcut-${a.id}`,className:"flex items-center justify-between gap-4 py-2",children:[(0,d.jsx)("span",{className:"text-sm text-foreground",children:g(`shortcuts.${a.id}`)}),(0,d.jsx)("span",{className:"flex flex-shrink-0 items-center gap-1",children:a.keys.map((a,b)=>(0,d.jsx)(ag.u,{children:al(a,h)},b))})]},a.id))})]},a))})})}var a6=c(18608),a7=c(55992),a8=c(94260);let a9=[{key:"added",labelKey:"whatsNew.added"},{key:"improved",labelKey:"whatsNew.improved"},{key:"fixed",labelKey:"whatsNew.fixed"}];function ba(){let a=(0,q.c)("common"),b=(0,a7.Ym)(),[c,e]=(0,f.useState)(null),[g,h]=(0,f.useState)(!1),i=(0,f.useCallback)(()=>{c&&function(a){try{window.localStorage.setItem("commandmate.lastSeenAppVersion",a)}catch{}}(c.to),h(!1)},[c]);if(!c)return null;let j="ja"===b?"ja":"en";return(0,d.jsx)(a2.a,{isOpen:g,onClose:i,title:a("whatsNew.title",{from:c.from,to:c.to}),size:"md",children:(0,d.jsxs)("div",{className:"space-y-4","data-testid":"whats-new-dialog",children:[0===c.notes.length?(0,d.jsx)("p",{className:"text-sm text-foreground","data-testid":"whats-new-empty",children:a("whatsNew.empty")}):c.notes.map(b=>(0,d.jsxs)("section",{className:"space-y-3","data-testid":`whats-new-version-${b.version}`,children:[(0,d.jsxs)("h4",{className:"text-sm font-semibold text-foreground",children:["v",b.version,(0,d.jsx)("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:b.date})]}),b.highlight&&(0,d.jsxs)("div",{"data-testid":"whats-new-highlight",children:[(0,d.jsx)("h5",{className:"text-xs font-medium text-muted-foreground",children:a("whatsNew.highlight")}),(0,d.jsx)("p",{className:"mt-1 text-sm text-foreground",children:b.highlight[j]})]}),a9.map(({key:c,labelKey:e})=>b[c].length>0?(0,d.jsxs)("div",{"data-testid":`whats-new-${c}`,children:[(0,d.jsx)("h5",{className:"text-xs font-medium text-muted-foreground",children:a(e)}),(0,d.jsx)("ul",{className:"mt-1 list-disc space-y-1 pl-5 text-sm text-foreground",children:b[c].map((a,b)=>(0,d.jsx)("li",{children:a[j]},b))})]},c):null)]},b.version)),(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 border-t border-border pt-3",children:[(0,d.jsx)("a",{href:`https://github.com/Kewton/CommandMate/releases/tag/v${c.to}`,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-accent-600 dark:text-accent-400 hover:underline","data-testid":"whats-new-release-link",children:a("whatsNew.releaseLink")}),(0,d.jsx)(a8.$,{type:"button",variant:"primary",size:"sm",onClick:i,"data-testid":"whats-new-close",children:a("whatsNew.close")})]})]})})}var bb=c(63643);function bc(a,b){return a.worktreeId===b.worktreeId&&a.instanceId===b.instanceId}var bd=c(17252);function be(a){return a.agentInstances&&a.agentInstances.length>0?a.agentInstances.slice().sort((a,b)=>a.order-b.order):a.selectedAgents&&a.selectedAgents.length>0?(0,bd.lu)(a.selectedAgents):a.cliToolId?(0,bd.lu)([a.cliToolId]):[]}function bf(a,b){let c=a.sessionStatusByInstance?.[b.id]??(b.id===b.cliTool?a.sessionStatusByCli?.[b.cliTool]:void 0),d=c?.startingSince,e=a.autoYesByInstance?.[b.id];return{instance:b,label:(0,bd.sw)(b),running:c?.isRunning===!0,starting:"number"==typeof d,autoYes:e?.enabled&&"number"==typeof e.expiresAt?e:null}}var bg=c(16730),bh=c(21768);let bi={promptWaiting:"PROMPT_WAITING",sessionStarting:"SESSION_STARTING",instanceToolConflict:"instance_tool_conflict"};async function bj(a){try{let b=await a.json(),c=b&&"object"==typeof b?b.expiresAt:null;if("number"==typeof c)return{enabled:!0,expiresAt:c}}catch{}return null}async function bk(a){try{let b=await a.json();if(b&&"object"==typeof b){let{error:a,code:c}=b;return{error:"string"==typeof a&&""!==a?a:null,code:"string"==typeof c?c:null}}}catch{}return{error:null,code:null}}async function bl(a,{modelRequested:b}){if(a.ok&&!a.redirected)return{ok:!0};let{status:c}=a,{error:d,code:e}=await bk(a);return{ok:!1,kind:409===c?e===bi.promptWaiting?"prompt_waiting":"conflict":503===c?e===bi.sessionStarting?"starting":"start_failed":400===c?b&&e!==bi.instanceToolConflict?"model_rejected":"invalid":"failed",status:a.ok?0:c,detail:d}}function bm(a){return{ok:!1,kind:"failed",status:0,detail:a instanceof aw.hD||a instanceof Error?a.message:null}}function bn(a,b){return new Promise((c,d)=>{let e=setTimeout(()=>{d(new aw.hD(`Request timed out after ${b}ms`,0,void 0,"timeout"))},b);a().then(a=>{clearTimeout(e),c(a)},a=>{clearTimeout(e),d(a)})})}async function bo(a,b=aw.E){let c,{target:d,cliToolId:e}=a,f=`/api/worktrees/${encodeURIComponent(d.worktreeId)}`,g={"Content-Type":"application/json"},h=!1,i=a.autoYesDuration;if(null!==i){let j,k=!1;try{j=await bn(async()=>{let j=await b(`${f}/auto-yes`,{method:"POST",headers:g,body:JSON.stringify({enabled:!0,cliToolId:e,instanceId:d.instanceId,duration:i,answerMode:a.autoYesAnswerMode??bh.Rb})});if(!j.ok){let{error:a}=await bk(j);return{ok:!1,kind:"auto_yes_failed",status:j.status,detail:a}}return k=!0,c=await bj(j)??void 0,h=void 0===c,null},(0,bg.Z3)("POST"))}catch(a){if(!k){let b=bm(a);return b.ok?b:{...b,kind:"auto_yes_failed"}}return{...bm(a),autoYesStateUnknown:!0}}if(j)return j}let j=a=>c?{...a,armedAutoYes:c}:h?{...a,autoYesStateUnknown:!0}:a,k=a.model?.trim()||void 0,l=(0,bg.SE)();try{return j(await bn(async()=>{let c=await b(`${f}/send`,{method:"POST",headers:g,body:JSON.stringify({content:a.content,cliToolId:e,instanceId:d.instanceId,...k?{model:k}:{}}),timeoutMs:l});return bl(c,{modelRequested:void 0!==k})},l))}catch(a){return j(bm(a))}}var bp=c(37382);let bq="w-full px-3 py-2 border border-input rounded-lg bg-surface text-foreground text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent disabled:opacity-60",br="block text-xs font-medium text-muted-foreground mb-1";function bs({status:a,isEmpty:b,onRetry:c}){let e=(0,q.c)("common");return(0,d.jsxs)(d.Fragment,{children:["loading"===a&&(0,d.jsx)("p",{className:"text-sm text-muted-foreground","data-testid":"new-task-loading",children:e("newTask.loading")}),"error"===a&&(0,d.jsxs)("div",{className:"space-y-2",role:"alert","data-testid":"new-task-load-error",children:[(0,d.jsx)("p",{className:"text-sm text-danger",children:e("newTask.loadError")}),(0,d.jsx)("button",{type:"button",onClick:c,className:"px-3 py-1.5 text-sm font-medium text-foreground bg-muted hover:bg-muted/80 rounded-lg",children:e("retry")})]}),"ready"===a&&b&&(0,d.jsx)("p",{className:"text-sm text-muted-foreground","data-testid":"new-task-empty",children:e("newTask.noTargets")})]})}function bt({recentOptions:a,targetState:b,worktreeId:c,onSelect:e}){let f=(0,q.c)("common");return 0===a.length?null:(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:br,children:f("newTask.recentLabel")}),(0,d.jsx)("div",{className:"flex flex-wrap gap-2","data-testid":"new-task-recents",children:a.map(({target:a,label:f})=>{let g=!!b&&bc(a,{worktreeId:c,instanceId:b.instance.id});return(0,d.jsx)("button",{type:"button","aria-pressed":g,"data-testid":"new-task-recent",onClick:()=>e(a),className:`max-w-full truncate rounded-full border px-3 py-1 text-xs transition-colors ${g?"border-accent-500 bg-accent-500/15 text-foreground":"border-border text-muted-foreground hover:text-foreground"}`,children:f},`${a.worktreeId}:${a.instanceId}`)})})]})}function bu({repositoryOptions:a,repository:b,worktreeId:c,worktree:e,instances:f,instance:g,onRepositoryChange:h,onBranchChange:i,onAgentChange:j}){let k=(0,q.c)("common");return(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-repository",className:br,children:k("newTask.repositoryLabel")}),(0,d.jsx)("select",{id:"new-task-repository","data-testid":"new-task-repository",value:b?.path??"",onChange:a=>h(a.target.value),className:bq,children:a.map(a=>(0,d.jsx)("option",{value:a.path,children:a.name},a.path))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-branch",className:br,children:k("newTask.branchLabel")}),(0,d.jsx)("select",{id:"new-task-branch","data-testid":"new-task-branch",value:c,onChange:a=>i(a.target.value),className:bq,children:(b?.worktrees??[]).map(a=>(0,d.jsx)("option",{value:a.id,children:a.name},a.id))})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-agent",className:br,children:k("newTask.agentLabel")}),(0,d.jsx)("select",{id:"new-task-agent","data-testid":"new-task-agent",value:g?.id??"",onChange:a=>j(a.target.value),className:bq,disabled:0===f.length,children:f.map(a=>{let b=e?bf(e,a):null,c=b?.starting?"starting":b?.running?"running":"stopped";return(0,d.jsx)("option",{value:a.id,children:`${b?.label??a.id} — ${k(`newTask.agentStatus.${c}`)}`},a.id)})})]})]})}function bv({statusKey:a,agentLabel:b}){let c=(0,q.c)("common");return(0,d.jsxs)(d.Fragment,{children:["stopped"===a&&(0,d.jsx)("p",{className:"text-xs text-foreground","data-testid":"new-task-will-start",children:c("newTask.willStart",{agent:b})}),"starting"===a&&(0,d.jsx)("p",{className:"text-xs text-warning-foreground","data-testid":"new-task-starting",children:c("newTask.startingNotice",{agent:b})})]})}function bw({modelAvailability:a,model:b,cliTool:c,agentLabel:e,onChange:f}){let g=(0,q.c)("common");return(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-model",className:br,children:g("newTask.modelLabel")}),(0,d.jsx)("input",{id:"new-task-model","data-testid":"new-task-model",type:"text",value:a?.selectable?b:"",onChange:a=>f(a.target.value),placeholder:g("newTask.modelPlaceholder"),disabled:!a?.selectable,className:bq}),a&&(0,d.jsx)("p",{className:"mt-1 text-xs text-muted-foreground","data-testid":"new-task-model-note",children:a.selectable?g("copilot"===c?"newTask.modelHintSwitch":"newTask.modelHintLaunch"):g(`newTask.modelUnavailable.${a.reason}`,{agent:e})})]})}function bx({armedAutoYes:a,autoYesChoice:b,autoYesUnknown:c,onChoiceChange:e,answerMode:f,onAnswerModeChange:g}){let h=(0,q.c)("common"),i=(0,q.c)("autoYes");return(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-auto-yes",className:br,children:h("newTask.autoYesLabel")}),a?(0,d.jsx)("p",{className:"text-sm text-foreground","data-testid":"new-task-auto-yes-active",children:h("newTask.autoYesActive",{remaining:(0,bb.$B)(a.expiresAt)})}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("select",{id:"new-task-auto-yes","data-testid":"new-task-auto-yes",value:b??"",onChange:a=>{let b=Number(a.target.value);e(""!==a.target.value&&(0,bb.dR)(b)?b:null)},className:bq,children:[(0,d.jsx)("option",{value:"",children:h(c?"newTask.autoYesKeepUnknown":"newTask.autoYesKeep")}),bb._q.map(a=>(0,d.jsx)("option",{value:a,children:h("newTask.autoYesEnableFor",{duration:i("durationHours",{hours:(0,bb.nG)(a)})})},a))]}),c&&(0,d.jsx)("p",{className:"mt-1 text-xs text-warning-foreground","data-testid":"new-task-auto-yes-unknown",children:h("newTask.autoYesUnknown")}),(0,d.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:h("newTask.autoYesScope")}),null!==b&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"mt-2",children:(0,d.jsx)(bp.o,{value:f,onChange:g,idPrefix:"new-task-auto-yes-answer-mode",labelClassName:br})}),(0,d.jsx)("p",{className:"mt-1 text-xs text-warning-foreground","data-testid":"new-task-auto-yes-risk",children:i("riskWarning")})]})]})]})}function by({failure:a,agentLabel:b}){let c=(0,q.c)("common");return a?(0,d.jsxs)("div",{role:"alert","data-testid":"new-task-error","data-kind":a.kind,className:"rounded-lg border border-danger-border bg-danger-subtle px-3 py-2 text-sm text-danger-foreground",children:[(0,d.jsx)("p",{children:c(`newTask.errors.${a.kind}`,{agent:b})}),a.detail&&(0,d.jsx)("p",{className:"mt-1 break-words text-xs text-muted-foreground","data-testid":"new-task-error-detail",children:a.detail})]}):null}function bz(){var a;let{requestedTarget:b,screenTarget:c,closeNewTask:g,setCloseLocked:h}=(0,ai.hX)(),i=(0,e.useRouter)(),{showToast:j}=(0,au.dj)(),k=(0,q.c)("common"),[l,m]=(0,f.useState)({status:"loading"}),[n,o]=(0,f.useState)(0),[p]=(0,f.useState)(()=>[]),[r,s]=(0,f.useState)(""),[t,u]=(0,f.useState)(""),[v,w]=(0,f.useState)(""),[x,y]=(0,f.useState)(""),[z,A]=(0,f.useState)(null),[B,C]=(0,f.useState)(bh.Rb),[D,E]=(0,f.useState)(!1),[F,G]=(0,f.useState)(null),[H,I]=(0,f.useState)(!1),K=(0,f.useRef)(null),L=(0,f.useRef)(!0),M=(0,f.useRef)(!1),[N,O]=(0,f.useState)({}),[P,Q]=(0,f.useState)({}),R=(0,f.useCallback)(()=>{M.current||g()},[g]);(0,f.useRef)([b,c,p[0]??null]),(0,f.useRef)(!1);let S=(0,f.useMemo)(()=>"ready"===l.status?l.worktrees:[],[l]),T=(0,f.useMemo)(()=>"ready"===l.status?function(a,b=[]){let c=new Map;for(let d of a){let a=c.get(d.repositoryPath);if(!a){let e=b.find(a=>a.path===d.repositoryPath);a={path:d.repositoryPath,name:e?.displayName||e?.name||d.repositoryName,worktrees:[]},c.set(d.repositoryPath,a)}a.worktrees.push(d)}let d=Array.from(c.values());for(let a of d)a.worktrees.sort((a,b)=>a.name.localeCompare(b.name));return d.sort((a,b)=>a.name.localeCompare(b.name))}(l.worktrees,l.repositories):[],[l]),U=S.find(a=>a.id===r)??null,V=(0,f.useMemo)(()=>U?be(U):[],[U]),W=V.find(a=>a.id===t)??null,X=U&&W?bf(U,W):null,Y=U?T.find(a=>a.path===U.repositoryPath)??null:null,Z=X?(a=X.instance.cliTool,"copilot"===a?{selectable:!0}:"claude"===a||"antigravity"===a?X.running||X.starting?{selectable:!1,reason:"running"}:{selectable:!0}:{selectable:!1,reason:"unsupported"}):null,$=X?P[`${r}:${X.instance.id}`]??X.autoYes:null,_=!function(a,b=Date.now()){return!!a&&a.enabled&&"number"==typeof a.expiresAt&&a.expiresAt-b>0}($)?null:$,aa=!!X&&!0===N[`${r}:${X.instance.id}`],[,ab]=(0,f.useState)(0),ac=(0,f.useMemo)(()=>p.flatMap(a=>{let b=function(a,b){let c=a.find(a=>a.id===b.worktreeId);if(!c)return null;let d=be(c).find(a=>a.id===b.instanceId);return d?{worktree:c,instance:d}:null}(S,a);if(!b)return[];let c=T.find(a=>a.path===b.worktree.repositoryPath),d=bf(b.worktree,b.instance).label;return[{target:a,label:`${c?.name??b.worktree.repositoryName} / ${b.worktree.name} / ${d}`}]}),[p,S,T]),ad=(0,f.useCallback)(a=>{s(a.worktreeId),u(a.instanceId),G(null)},[]),ae=(0,f.useCallback)(a=>{let b=T.find(b=>b.path===a),c=b?.worktrees.find(a=>be(a).length>0)??b?.worktrees[0];c&&ad({worktreeId:c.id,instanceId:be(c)[0]?.id??""})},[T,ad]),af=(0,f.useCallback)(a=>{let b=S.find(b=>b.id===a);if(!b)return;let c=be(b),d=c.find(a=>a.id===t);ad({worktreeId:b.id,instanceId:d?.id??c[0]?.id??""})},[S,t,ad]),ah=!!X&&""!==v.trim()&&!D,aj=(0,f.useCallback)(async()=>{var a;if(!ah||!U||!X)return;let b={worktreeId:U.id,instanceId:X.instance.id};M.current=!0,h(!0),E(!0),G(null);let c=await bo({target:b,cliToolId:X.instance.cliTool,content:v.trim(),model:Z?.selectable?x:void 0,autoYesDuration:_?null:z,autoYesAnswerMode:B});if(M.current=!1,h(!1),!L.current)return;let{armedAutoYes:d}=c,e=`${b.worktreeId}:${b.instanceId}`;if(c.autoYesStateUnknown&&O(a=>({...a,[e]:!0})),d&&(O(a=>{let{[e]:b,...c}=a;return c}),Q(a=>({...a,[e]:d})),A(null),C(bh.Rb)),!c.ok){G(c),E(!1);return}[{worktreeId:(a=b).worktreeId,instanceId:a.instanceId},...[].filter(b=>!bc(b,a))].slice(0,3);let f=`${window.location.pathname}${window.location.search}`,l=`${U.name} / ${X.label}`;g(),i.push((0,J.Ii)(b)),j(k("newTask.sentToast",{target:l}),"success",6e3,{onClick:()=>i.push(f)})},[ah,U,X,v,Z,x,_,z,B,g,h,i,j,k]),ak=(0,f.useCallback)(a=>{var b,c;!0!==(c=b=a.nativeEvent).isComposing&&229!==c.keyCode&&"Enter"===b.key&&!b.shiftKey&&!b.altKey&&(b.metaKey||b.ctrlKey)&&(a.preventDefault(),aj())},[aj]),am=X?.label??"",an=X?X.starting?"starting":X.running?"running":"stopped":null;return(0,d.jsx)(a2.a,{isOpen:!0,onClose:R,title:k("newTask.title"),size:"md",disableClose:D,children:(0,d.jsxs)("div",{"data-testid":"new-task-dialog",className:"space-y-4",onKeyDown:ak,children:[(0,d.jsx)(bs,{status:l.status,isEmpty:0===T.length,onRetry:()=>o(a=>a+1)}),"ready"===l.status&&T.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bt,{recentOptions:ac,targetState:X,worktreeId:r,onSelect:ad}),(0,d.jsx)(bu,{repositoryOptions:T,repository:Y,worktreeId:r,worktree:U,instances:V,instance:W,onRepositoryChange:ae,onBranchChange:af,onAgentChange:a=>ad({worktreeId:r,instanceId:a})}),(0,d.jsx)(bv,{statusKey:an,agentLabel:am}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{htmlFor:"new-task-message",className:br,children:k("newTask.messageLabel")}),(0,d.jsx)("textarea",{ref:K,id:"new-task-message","data-testid":"new-task-message",value:v,onChange:a=>w(a.target.value),placeholder:k("newTask.messagePlaceholder"),rows:5,className:`${bq} resize-y`})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,d.jsx)(bw,{modelAvailability:Z,model:x,cliTool:X?.instance.cliTool,agentLabel:am,onChange:y}),(0,d.jsx)(bx,{armedAutoYes:_,autoYesChoice:z,autoYesUnknown:aa,onChoiceChange:A,answerMode:B,onAnswerModeChange:C})]})]}),(0,d.jsx)(by,{failure:F,agentLabel:am}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsxs)("span",{className:"mr-auto hidden items-center gap-1 text-xs text-muted-foreground sm:flex",children:[(0,d.jsx)(ag.u,{children:al("MOD",H)}),(0,d.jsx)(ag.u,{children:"↵"}),(0,d.jsx)("span",{children:k("newTask.sendHint")})]}),(0,d.jsx)("button",{type:"button","data-testid":"new-task-cancel",onClick:R,disabled:D,className:"px-4 py-2 text-sm font-medium text-foreground bg-muted hover:bg-muted/80 rounded-lg transition-colors disabled:opacity-50",children:k("cancel")}),(0,d.jsx)("button",{type:"button","data-testid":"new-task-send",onClick:()=>void aj(),disabled:!ah,className:"px-4 py-2 text-sm font-medium text-white bg-accent-600 hover:bg-accent-700 disabled:opacity-50 disabled:cursor-not-allowed rounded-lg transition-colors",children:D?k("newTask.sending"):k("newTask.send")})]})]})})}function bA(){let{isOpen:a,openNewTask:b}=(0,ai.hX)(),{open:c}=(0,ah.C)();return(0,f.useRef)(c),a?(0,d.jsx)(bz,{}):null}var bB=c(11010);let bC="transform transition-transform duration-300 ease-out",bD=(0,f.memo)(function({children:a}){let{isOpen:b,isMobileDrawerOpen:c,closeMobileDrawer:g,width:m,setWidth:n,repoTabBarMode:o,toggle:p}=(0,h.VF)(),q=(0,i.a)(),{showSidebar:r,showGlobalNav:s}=function(){var a=(0,e.usePathname)();for(let b of k)if(a.startsWith(b.prefix))return{...j,...b.config};return{...j}}(),{open:t}=(0,ah.C)();(0,f.useRef)(t),(0,f.useRef)(p);let{factor:u}=(0,l.Ps)(),v=Math.round(160*u),w=Math.round(480*u),x=Math.round(Math.min(w,Math.max(v,m*u))),y=(0,J.fs)(o??J.PB,b),z=(0,f.useRef)(null),A=(0,f.useRef)(null),B=(0,f.useRef)(null),C=(0,f.useRef)(c);(0,f.useLayoutEffect)(()=>{let a=C.current;if(C.current=c,!q||!a||c)return;let b=document.activeElement,d=b instanceof HTMLElement&&B.current?.contains(b)===!0;(d||null===b||b===document.body)&&!(0,aZ.Bl)()&&d&&b.blur()},[q,c]);let D=(0,f.useCallback)(a=>{n(Math.round(a/u))},[n,u]);return q?(0,d.jsx)(ai.Zg,{children:(0,d.jsxs)("div",{"data-testid":"app-shell",className:"h-screen flex flex-col",children:[(0,d.jsx)(a0,{}),c&&(0,d.jsx)("div",{"data-testid":"drawer-overlay",className:"fixed inset-0 bg-black/50 z-40",onClick:g,"aria-hidden":"true"}),r&&(0,d.jsx)("aside",{ref:B,"data-testid":"sidebar-container",className:`
|
|
5
5
|
fixed left-0 top-0 h-full w-72 max-w-[85vw] z-50 bg-sidebar pt-safe pb-safe
|
|
6
6
|
${bC}
|
|
7
7
|
${c?"translate-x-0":"-translate-x-full"}
|
|
@@ -1,4 +1,4 @@
|
|
|
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.49.
|
|
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.49.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.49.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(95375),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}
|
|
@@ -6,4 +6,4 @@ exports.id=8728,exports.ids=[8728],exports.modules={3453:(a,b,c)=>{"use strict";
|
|
|
6
6
|
Content-Length: 0\r
|
|
7
7
|
Connection: close\r
|
|
8
8
|
\r
|
|
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,terminalSubscriptionSeq:0,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.terminalSubscriptionSeq+=1,b.terminalSubscription&&(b.terminalSubscription.unsubscribe().catch(()=>{}),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"});let m=++c.terminalSubscriptionSeq,n=()=>R.get(a)===c&&c.terminalSubscriptionSeq===m,o=c.terminalSubscription;if(o){c.terminalSubscription=null;try{await o.unsubscribe()}catch{}}if(!n())return;let p=(0,i.mf)(e,d),q=await (0,z.s_)(p,g.path);if(!n())return;if("foreign"===q.verdict)return void ai(a,{type:"terminal_error",error:A.u});let r=y();if(r.getSubscriberCount(p)>=4)return void ai(a,{type:"terminal_error",error:"Terminal subscriber limit reached"});let s=!1,t=Date.now(),u=await r.subscribe(p,{onOutput:b=>{if(n()){if(!s){s=!0;let a=Math.max(0,Math.round(Date.now()-t));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})=>{n()&&ai(a,{type:"terminal_exit",exitCode:b})},onError:b=>{(async()=>{try{if(await (0,A.y)(d,p)===null){let b=await r.captureSnapshot(p,{startLine:-200});b.length>0&&n()&&ai(a,{type:"terminal_output",data:b,fallback:!0})}}catch{}n()&&ai(a,{type:"terminal_error",error:b.message,fallback:!0})})()}});if(!n()){try{await u.unsubscribe()}catch{}return}c.terminalSubscription={worktreeId:d,cliToolId:e,sessionName:p,startedAt:t,unsubscribe:u.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)return;let c=++b.terminalSubscriptionSeq,d=b.terminalSubscription;if(d){b.terminalSubscription=null;try{await d.unsubscribe()}catch{}R.get(a)===b&&b.terminalSubscriptionSeq===c&&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,terminalSubscriptionSeq:0,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(36261),e=c(23854),f=c(72626),g=c(30008),h=c(70096);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(255),c.e(9731),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(4936),c.e(9198),c.e(3801)]).then(c.bind(c,53801));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(255),c.e(9731),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(4936),c.e(9198),c.e(3801)]).then(c.bind(c,53801));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(255),c.e(9731),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(4936),c.e(9198),c.e(3801)]).then(c.bind(c,53801));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"}},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,terminalSubscriptionSeq:0,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.terminalSubscriptionSeq+=1,b.terminalSubscription&&(b.terminalSubscription.unsubscribe().catch(()=>{}),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"});let m=++c.terminalSubscriptionSeq,n=()=>R.get(a)===c&&c.terminalSubscriptionSeq===m,o=c.terminalSubscription;if(o){c.terminalSubscription=null;try{await o.unsubscribe()}catch{}}if(!n())return;let p=(0,i.mf)(e,d),q=await (0,z.s_)(p,g.path);if(!n())return;if("foreign"===q.verdict)return void ai(a,{type:"terminal_error",error:A.u});let r=y();if(r.getSubscriberCount(p)>=4)return void ai(a,{type:"terminal_error",error:"Terminal subscriber limit reached"});let s=!1,t=Date.now(),u=await r.subscribe(p,{onOutput:b=>{if(n()){if(!s){s=!0;let a=Math.max(0,Math.round(Date.now()-t));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})=>{n()&&ai(a,{type:"terminal_exit",exitCode:b})},onError:b=>{(async()=>{try{if(await (0,A.y)(d,p)===null){let b=await r.captureSnapshot(p,{startLine:-200});b.length>0&&n()&&ai(a,{type:"terminal_output",data:b,fallback:!0})}}catch{}n()&&ai(a,{type:"terminal_error",error:b.message,fallback:!0})})()}});if(!n()){try{await u.unsubscribe()}catch{}return}c.terminalSubscription={worktreeId:d,cliToolId:e,sessionName:p,startedAt:t,unsubscribe:u.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)return;let c=++b.terminalSubscriptionSeq,d=b.terminalSubscription;if(d){b.terminalSubscription=null;try{await d.unsubscribe()}catch{}R.get(a)===b&&b.terminalSubscriptionSeq===c&&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,terminalSubscriptionSeq:0,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(36261),e=c(23854),f=c(72626),g=c(30008),h=c(70096);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(255),c.e(9731),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(4936),c.e(5350),c.e(3801)]).then(c.bind(c,53801));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(255),c.e(9731),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(4936),c.e(5350),c.e(3801)]).then(c.bind(c,53801));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(255),c.e(9731),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(4936),c.e(5350),c.e(3801)]).then(c.bind(c,53801));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"}},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`}};
|