commandmate 0.42.2 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +176 -176
- package/.next/app-path-routes-manifest.json +34 -34
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +15 -15
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +2 -2
- package/.next/server/app/api/app/update/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js.nft.json +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.js.nft.json +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 +103 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +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.js.nft.json +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.nft.json +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 +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +2 -2
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +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.js.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -1
- 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.nft.json +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.js.nft.json +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 +3 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +7 -7
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +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.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +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 -103
- 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 +3 -1
- 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 +3 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -1
- 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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +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 -103
- 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 +103 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +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.nft.json +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.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js.nft.json +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.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +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 +9 -9
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +34 -34
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1501.js +3 -3
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/22.js +1 -1
- package/.next/server/chunks/2283.js +15 -0
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2404.js +4 -3
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/252.js +1 -1
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3730.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4207.js +3 -3
- package/.next/server/chunks/4802.js +1 -1
- package/.next/server/chunks/488.js +1 -0
- package/.next/server/chunks/5064.js +1 -1
- package/.next/server/chunks/5326.js +1 -1
- package/.next/server/chunks/5456.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5775.js +1 -1
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6474.js +14 -0
- package/.next/server/chunks/650.js +1 -1
- package/.next/server/chunks/6661.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +1 -1
- package/.next/server/chunks/6927.js +1 -0
- package/.next/server/chunks/7491.js +3 -0
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8543.js +1 -1
- package/.next/server/chunks/8581.js +2 -2
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -0
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +4 -3
- package/.next/server/chunks/8918.js +108 -6
- package/.next/server/chunks/9130.js +3 -3
- package/.next/server/chunks/{8052.js → 9353.js} +4 -2
- package/.next/server/chunks/9390.js +3 -0
- package/.next/server/chunks/9627.js +3 -3
- package/.next/server/chunks/967.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/chunks/9882.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages-manifest.json +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js +2 -2
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/2053-85a974ddfe7498fe.js +1 -0
- package/.next/static/chunks/{2407-6b9e12c099fa598c.js → 2407-340774f1a24f2b45.js} +1 -1
- package/.next/static/chunks/5449-6cb80bab2bd06b79.js +1 -0
- package/.next/static/chunks/5521-c358c31f60e5e689.js +1 -0
- package/.next/static/chunks/591-0a45801e83f26f24.js +1 -0
- package/.next/static/chunks/8165-3853772f6ae1299b.js +1 -0
- package/.next/static/chunks/{8566-a6a7c70558927410.js → 8566-aeda747542072ace.js} +1 -1
- package/.next/static/chunks/8811-29eaa24237f48558.js +1 -0
- package/.next/static/chunks/{9619-22adf5367c4b7080.js → 9619-84aced0846cbe3ac.js} +1 -1
- package/.next/static/chunks/app/{layout-5b95e1236dcd9ef6.js → layout-0fc249fb7de75a27.js} +1 -1
- package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +1 -0
- package/.next/static/chunks/app/sessions/page-55297155e7bf01b9.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-9ee7a381636e60cb.js +1 -0
- package/.next/static/chunks/app/skills/page-182e16168b2fc098.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-d2103e0c25be83c8.js +1 -0
- package/.next/static/css/38070d879efa1371.css +1 -0
- package/.next/trace +13 -13
- package/README.md +58 -620
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +23 -149
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +11 -1
- package/dist/cli/commands/docs.d.ts.map +1 -1
- package/dist/cli/commands/docs.js +5 -0
- package/dist/cli/commands/remote.d.ts +24 -1
- package/dist/cli/commands/remote.d.ts.map +1 -1
- package/dist/cli/commands/remote.js +155 -6
- package/dist/cli/commands/reply.d.ts +40 -0
- package/dist/cli/commands/reply.d.ts.map +1 -0
- package/dist/cli/commands/reply.js +133 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +255 -112
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +53 -1
- package/dist/cli/commands/sync.js +3 -3
- package/dist/cli/commands/wait.d.ts +5 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +10 -1
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +13 -0
- package/dist/cli/docs/setup-guide.d.ts +14 -0
- package/dist/cli/docs/setup-guide.d.ts.map +1 -0
- package/dist/cli/docs/setup-guide.js +366 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +4 -0
- package/dist/cli/types/api-responses.d.ts +11 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +2 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/daemon.d.ts +42 -2
- package/dist/cli/utils/daemon.d.ts.map +1 -1
- package/dist/cli/utils/daemon.js +222 -40
- package/dist/cli/utils/docs-reader.d.ts +6 -0
- package/dist/cli/utils/docs-reader.d.ts.map +1 -1
- package/dist/cli/utils/docs-reader.js +14 -13
- package/dist/cli/utils/npm-runner.d.ts +12 -0
- package/dist/cli/utils/npm-runner.d.ts.map +1 -1
- package/dist/cli/utils/npm-runner.js +36 -0
- package/dist/cli/utils/process-inspect.d.ts +55 -0
- package/dist/cli/utils/process-inspect.d.ts.map +1 -0
- package/dist/cli/utils/process-inspect.js +214 -0
- package/dist/cli/utils/remote-pairing.d.ts +68 -0
- package/dist/cli/utils/remote-pairing.d.ts.map +1 -0
- package/dist/cli/utils/remote-pairing.js +117 -0
- package/dist/cli/utils/reply-ledger.d.ts +95 -0
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -0
- package/dist/cli/utils/reply-ledger.js +187 -0
- package/dist/cli/utils/server-identity.d.ts +50 -0
- package/dist/cli/utils/server-identity.d.ts.map +1 -0
- package/dist/cli/utils/server-identity.js +118 -0
- package/dist/cli/utils/server-ready.d.ts +13 -0
- package/dist/cli/utils/server-ready.d.ts.map +1 -1
- package/dist/cli/utils/server-ready.js +16 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +9 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -1
- package/dist/lib/cli-tools/copilot-executable.js +21 -5
- package/dist/lib/cli-tools/opencode-executable.d.ts +103 -0
- package/dist/lib/cli-tools/opencode-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/opencode-executable.js +179 -0
- package/dist/lib/cli-tools/types.d.ts +1 -1
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +5 -1
- package/dist/lib/detection/tools/verified-against.d.ts +15 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +17 -1
- package/dist/lib/detection/version-probes.d.ts.map +1 -1
- package/dist/lib/detection/version-probes.js +14 -1
- package/dist/lib/security/pairing-code.d.ts +2 -1
- package/dist/lib/security/pairing-code.d.ts.map +1 -1
- package/dist/lib/session/tmux-session-surface.d.ts.map +1 -1
- package/dist/lib/session/tmux-session-surface.js +1 -1
- package/dist/server/locales/en/worktree.json +72 -20
- package/dist/server/locales/ja/worktree.json +72 -20
- package/dist/server/server.js +23 -0
- package/dist/server/src/config/cli-tool-timing-config.js +19 -1
- package/dist/server/src/config/detection-evidence-config.js +3 -0
- package/dist/server/src/config/image-extensions.js +1 -0
- package/dist/server/src/config/schedule-config.js +55 -1
- package/dist/server/src/lib/auto-yes-poller.js +69 -4
- package/dist/server/src/lib/cli-tools/agent-mode-spec.js +54 -2
- package/dist/server/src/lib/cli-tools/base.js +6 -2
- package/dist/server/src/lib/cli-tools/command-code-plan-review.js +175 -0
- package/dist/server/src/lib/cli-tools/command-code.js +81 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +10 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +21 -5
- package/dist/server/src/lib/cli-tools/graceful-exit.js +15 -1
- package/dist/server/src/lib/cli-tools/index.js +3 -1
- package/dist/server/src/lib/cli-tools/install-hints.js +9 -3
- package/dist/server/src/lib/cli-tools/liveness-spec.js +19 -0
- package/dist/server/src/lib/cli-tools/manager.js +2 -0
- package/dist/server/src/lib/cli-tools/opencode-executable.js +179 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +369 -0
- package/dist/server/src/lib/cli-tools/opencode.js +29 -5
- package/dist/server/src/lib/cli-tools/types.js +5 -1
- package/dist/server/src/lib/cmate-cli-tool-parser.js +65 -7
- package/dist/server/src/lib/cmate-parser.js +12 -0
- package/dist/server/src/lib/cmate-validator.js +13 -1
- package/dist/server/src/lib/detection/cli-patterns.js +172 -3
- package/dist/server/src/lib/detection/model-info-extractor.js +79 -7
- package/dist/server/src/lib/detection/status-detector.js +10 -1
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +2 -1
- package/dist/server/src/lib/detection/tools/codex/detect.js +26 -0
- package/dist/server/src/lib/detection/tools/command-code/plan-review-state.js +75 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +253 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/dialog-title.js +48 -0
- package/dist/server/src/lib/detection/tools/registry.js +2 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +9 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +17 -1
- package/dist/server/src/lib/detection/upstream-faults.js +8 -0
- package/dist/server/src/lib/detection/version-probes.js +14 -1
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +36 -1
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +33 -1
- package/dist/server/src/lib/hooks/sources/opencode/log-diagnosis.js +105 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +7 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +422 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/decision-labels.js +24 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +421 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +271 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +165 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/payloads.js +351 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +230 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/reattach.js +149 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/runtime.js +180 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +182 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +295 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +455 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/tool-id.js +18 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +214 -0
- package/dist/server/src/lib/hooks/sources/registry.js +2 -0
- package/dist/server/src/lib/hooks/structured-decision-response.js +14 -5
- package/dist/server/src/lib/job-executor.js +2 -1
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +15 -1
- package/dist/server/src/lib/polling/structured-history-gate.js +19 -5
- package/dist/server/src/lib/relay/relay-delivery.js +4 -1
- package/dist/server/src/lib/session/agent-event-state.js +24 -0
- package/dist/server/src/lib/session/claude-executor.js +186 -12
- package/dist/server/src/lib/session/claude-session.js +131 -15
- package/dist/server/src/lib/session/current-output-builder.js +27 -3
- package/dist/server/src/lib/session/send-user-message.js +4 -0
- package/dist/server/src/lib/session/session-start-error.js +20 -0
- package/dist/server/src/lib/session/structured-prompt.js +54 -0
- package/dist/server/src/lib/session/tmux-session-surface.js +1 -1
- package/dist/server/src/lib/skills/agent-state-paths.js +39 -0
- package/dist/server/src/lib/skills/compatibility-matrix.js +65 -0
- package/dist/server/src/lib/skills/receipt-owned-paths.js +118 -0
- package/dist/server/src/lib/tmux/tmux.js +73 -2
- package/dist/server/src/lib/verification/env-clean-gate.js +281 -10
- package/dist/server/src/lib/verification/gate-runner.js +29 -2
- package/dist/server/src/lib/verification/scope-gate.js +58 -4
- package/dist/server/src/types/cli-tool-contracts.js +10 -2
- package/dist/types/cli-tool-contracts.d.ts +16 -5
- package/dist/types/cli-tool-contracts.d.ts.map +1 -1
- package/dist/types/cli-tool-contracts.js +10 -2
- package/docs/en/architecture.md +722 -0
- package/docs/en/user-guide/agents-guide.md +306 -0
- package/docs/en/user-guide/cli-setup-guide.md +676 -0
- package/docs/en/user-guide/cmate-schedules-guide.md +388 -0
- package/docs/en/user-guide/commands-guide.md +467 -0
- package/docs/en/user-guide/quick-start.md +231 -0
- package/docs/en/user-guide/webapp-guide.md +1020 -0
- package/docs/en/user-guide/workflow-examples.md +463 -0
- package/package.json +19 -7
- package/release-notes/0.43.0.json +130 -0
- package/release-notes/0.44.0.json +82 -0
- package/scripts/hooks/cmate-agent-event.sh +14 -0
- package/scripts/opencode-v2/launch.sh +226 -0
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/3707.js +0 -15
- package/.next/server/chunks/4443.js +0 -3
- package/.next/server/chunks/5164.js +0 -1
- package/.next/server/chunks/5742.js +0 -1
- package/.next/server/chunks/7004.js +0 -1
- package/.next/server/chunks/8673.js +0 -14
- package/.next/static/chunks/2039-117a361f795ddc4b.js +0 -1
- package/.next/static/chunks/2053-611dd27d42721b79.js +0 -1
- package/.next/static/chunks/3778-56f41fc2cecb8c43.js +0 -1
- package/.next/static/chunks/5449-550bd273dccc3ae4.js +0 -1
- package/.next/static/chunks/7705-2a2936551b0cf9a3.js +0 -1
- package/.next/static/chunks/8165-934ee7ff3b4ddfd4.js +0 -1
- package/.next/static/chunks/app/review/page-30616daa1dc595c2.js +0 -1
- package/.next/static/chunks/app/sessions/page-1a8ba152bbcb9efb.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-ab7e432b69fccb3b.js +0 -1
- package/.next/static/chunks/app/skills/page-56b4fa11223e0cbd.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-59f5337e031518c6.js +0 -1
- package/.next/static/css/b3f433d52b8ed5c8.css +0 -1
- /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → wu7SUiHTirFcrpo5teyZ3}/_buildManifest.js +0 -0
- /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → wu7SUiHTirFcrpo5teyZ3}/_ssgManifest.js +0 -0
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"/api/daily-summary/route": "app/api/daily-summary/route.js",
|
|
6
6
|
"/api/hooks/agent-event/route": "app/api/hooks/agent-event/route.js",
|
|
7
7
|
"/api/hooks/claude-done/route": "app/api/hooks/claude-done/route.js",
|
|
8
|
-
"/api/metrics/vibe/route": "app/api/metrics/vibe/route.js",
|
|
9
8
|
"/api/hooks/permission-request/route": "app/api/hooks/permission-request/route.js",
|
|
9
|
+
"/api/metrics/vibe/route": "app/api/metrics/vibe/route.js",
|
|
10
10
|
"/api/ollama/models/route": "app/api/ollama/models/route.js",
|
|
11
11
|
"/api/relays/[relayId]/cancel/route": "app/api/relays/[relayId]/cancel/route.js",
|
|
12
12
|
"/api/relays/route": "app/api/relays/route.js",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"/api/tasks/[taskId]/cancel/route": "app/api/tasks/[taskId]/cancel/route.js",
|
|
23
23
|
"/api/tasks/[taskId]/route": "app/api/tasks/[taskId]/route.js",
|
|
24
24
|
"/api/templates/[id]/route": "app/api/templates/[id]/route.js",
|
|
25
|
-
"/api/templates/route": "app/api/templates/route.js",
|
|
26
25
|
"/api/verification/runs/[runId]/route": "app/api/verification/runs/[runId]/route.js",
|
|
26
|
+
"/api/templates/route": "app/api/templates/route.js",
|
|
27
27
|
"/api/verification/runs/route": "app/api/verification/runs/route.js",
|
|
28
28
|
"/api/worktrees/[id]/capture/route": "app/api/worktrees/[id]/capture/route.js",
|
|
29
29
|
"/api/worktrees/[id]/auto-yes/route": "app/api/worktrees/[id]/auto-yes/route.js",
|
|
@@ -31,32 +31,32 @@
|
|
|
31
31
|
"/api/worktrees/[id]/cli-reference/route": "app/api/worktrees/[id]/cli-reference/route.js",
|
|
32
32
|
"/api/worktrees/[id]/cli-tool/route": "app/api/worktrees/[id]/cli-tool/route.js",
|
|
33
33
|
"/api/worktrees/[id]/cmate/schedules/route": "app/api/worktrees/[id]/cmate/schedules/route.js",
|
|
34
|
-
"/api/worktrees/[id]/current-output/route": "app/api/worktrees/[id]/current-output/route.js",
|
|
35
34
|
"/api/worktrees/[id]/direct-input/route": "app/api/worktrees/[id]/direct-input/route.js",
|
|
36
|
-
"/api/worktrees/[id]/
|
|
35
|
+
"/api/worktrees/[id]/current-output/route": "app/api/worktrees/[id]/current-output/route.js",
|
|
37
36
|
"/api/worktrees/[id]/env/route": "app/api/worktrees/[id]/env/route.js",
|
|
37
|
+
"/api/worktrees/[id]/execution-logs/[logId]/route": "app/api/worktrees/[id]/execution-logs/[logId]/route.js",
|
|
38
38
|
"/api/worktrees/[id]/execution-logs/route": "app/api/worktrees/[id]/execution-logs/route.js",
|
|
39
39
|
"/api/worktrees/[id]/files/[...path]/route": "app/api/worktrees/[id]/files/[...path]/route.js",
|
|
40
40
|
"/api/worktrees/[id]/git/branch/create/route": "app/api/worktrees/[id]/git/branch/create/route.js",
|
|
41
41
|
"/api/worktrees/[id]/git/branch/delete/route": "app/api/worktrees/[id]/git/branch/delete/route.js",
|
|
42
42
|
"/api/worktrees/[id]/git/branches/route": "app/api/worktrees/[id]/git/branches/route.js",
|
|
43
43
|
"/api/worktrees/[id]/git/checkout/route": "app/api/worktrees/[id]/git/checkout/route.js",
|
|
44
|
-
"/api/worktrees/[id]/git/commit/route": "app/api/worktrees/[id]/git/commit/route.js",
|
|
45
44
|
"/api/worktrees/[id]/git/diff/route": "app/api/worktrees/[id]/git/diff/route.js",
|
|
45
|
+
"/api/worktrees/[id]/git/commit/route": "app/api/worktrees/[id]/git/commit/route.js",
|
|
46
46
|
"/api/worktrees/[id]/git/fetch/route": "app/api/worktrees/[id]/git/fetch/route.js",
|
|
47
|
-
"/api/worktrees/[id]/git/pull/route": "app/api/worktrees/[id]/git/pull/route.js",
|
|
48
47
|
"/api/worktrees/[id]/git/log/route": "app/api/worktrees/[id]/git/log/route.js",
|
|
48
|
+
"/api/worktrees/[id]/git/pull/route": "app/api/worktrees/[id]/git/pull/route.js",
|
|
49
49
|
"/api/worktrees/[id]/git/push/route": "app/api/worktrees/[id]/git/push/route.js",
|
|
50
50
|
"/api/worktrees/[id]/git/reset/route": "app/api/worktrees/[id]/git/reset/route.js",
|
|
51
51
|
"/api/worktrees/[id]/git/revert/route": "app/api/worktrees/[id]/git/revert/route.js",
|
|
52
52
|
"/api/worktrees/[id]/git/show/[commitHash]/route": "app/api/worktrees/[id]/git/show/[commitHash]/route.js",
|
|
53
|
-
"/api/worktrees/[id]/git/stage/route": "app/api/worktrees/[id]/git/stage/route.js",
|
|
54
53
|
"/api/worktrees/[id]/git/staged/route": "app/api/worktrees/[id]/git/staged/route.js",
|
|
54
|
+
"/api/worktrees/[id]/git/stage/route": "app/api/worktrees/[id]/git/stage/route.js",
|
|
55
55
|
"/api/worktrees/[id]/git/stash/[index]/route": "app/api/worktrees/[id]/git/stash/[index]/route.js",
|
|
56
56
|
"/api/worktrees/[id]/git/stash/apply/route": "app/api/worktrees/[id]/git/stash/apply/route.js",
|
|
57
|
-
"/api/worktrees/[id]/git/stash/pop/route": "app/api/worktrees/[id]/git/stash/pop/route.js",
|
|
58
57
|
"/api/worktrees/[id]/git/stash/push/route": "app/api/worktrees/[id]/git/stash/push/route.js",
|
|
59
58
|
"/api/worktrees/[id]/git/stash/route": "app/api/worktrees/[id]/git/stash/route.js",
|
|
59
|
+
"/api/worktrees/[id]/git/stash/pop/route": "app/api/worktrees/[id]/git/stash/pop/route.js",
|
|
60
60
|
"/api/worktrees/[id]/git/status/route": "app/api/worktrees/[id]/git/status/route.js",
|
|
61
61
|
"/api/worktrees/[id]/git/unstage/route": "app/api/worktrees/[id]/git/unstage/route.js",
|
|
62
62
|
"/api/worktrees/[id]/git/working-diff/route": "app/api/worktrees/[id]/git/working-diff/route.js",
|
|
@@ -64,29 +64,29 @@
|
|
|
64
64
|
"/api/worktrees/[id]/instances/opencode/route": "app/api/worktrees/[id]/instances/opencode/route.js",
|
|
65
65
|
"/api/worktrees/[id]/interrupt/route": "app/api/worktrees/[id]/interrupt/route.js",
|
|
66
66
|
"/api/worktrees/[id]/kill-session/route": "app/api/worktrees/[id]/kill-session/route.js",
|
|
67
|
-
"/api/worktrees/[id]/marp-render/route": "app/api/worktrees/[id]/marp-render/route.js",
|
|
68
67
|
"/api/worktrees/[id]/memos/[memoId]/route": "app/api/worktrees/[id]/memos/[memoId]/route.js",
|
|
69
|
-
"/api/worktrees/[id]/
|
|
68
|
+
"/api/worktrees/[id]/marp-render/route": "app/api/worktrees/[id]/marp-render/route.js",
|
|
70
69
|
"/api/worktrees/[id]/messages/route": "app/api/worktrees/[id]/messages/route.js",
|
|
70
|
+
"/api/worktrees/[id]/memos/route": "app/api/worktrees/[id]/memos/route.js",
|
|
71
71
|
"/api/worktrees/[id]/opencode/diff/route": "app/api/worktrees/[id]/opencode/diff/route.js",
|
|
72
72
|
"/api/worktrees/[id]/opencode/session/route": "app/api/worktrees/[id]/opencode/session/route.js",
|
|
73
|
-
"/api/worktrees/[id]/opencode/share/route": "app/api/worktrees/[id]/opencode/share/route.js",
|
|
74
|
-
"/api/worktrees/[id]/prompt-response/route": "app/api/worktrees/[id]/prompt-response/route.js",
|
|
75
73
|
"/api/worktrees/[id]/respond/route": "app/api/worktrees/[id]/respond/route.js",
|
|
76
|
-
"/api/worktrees/[id]/route": "app/api/worktrees/[id]/route.js",
|
|
74
|
+
"/api/worktrees/[id]/prompt-response/route": "app/api/worktrees/[id]/prompt-response/route.js",
|
|
75
|
+
"/api/worktrees/[id]/opencode/share/route": "app/api/worktrees/[id]/opencode/share/route.js",
|
|
77
76
|
"/api/worktrees/[id]/schedules/[scheduleId]/route": "app/api/worktrees/[id]/schedules/[scheduleId]/route.js",
|
|
77
|
+
"/api/worktrees/[id]/route": "app/api/worktrees/[id]/route.js",
|
|
78
78
|
"/api/worktrees/[id]/schedules/active/route": "app/api/worktrees/[id]/schedules/active/route.js",
|
|
79
79
|
"/api/worktrees/[id]/schedules/route": "app/api/worktrees/[id]/schedules/route.js",
|
|
80
|
-
"/api/worktrees/[id]/search/route": "app/api/worktrees/[id]/search/route.js",
|
|
81
80
|
"/api/worktrees/[id]/send/route": "app/api/worktrees/[id]/send/route.js",
|
|
81
|
+
"/api/worktrees/[id]/search/route": "app/api/worktrees/[id]/search/route.js",
|
|
82
82
|
"/api/worktrees/[id]/slash-commands/route": "app/api/worktrees/[id]/slash-commands/route.js",
|
|
83
83
|
"/api/worktrees/[id]/special-keys/route": "app/api/worktrees/[id]/special-keys/route.js",
|
|
84
84
|
"/api/worktrees/[id]/tasks/route": "app/api/worktrees/[id]/tasks/route.js",
|
|
85
85
|
"/api/worktrees/[id]/terminal/route": "app/api/worktrees/[id]/terminal/route.js",
|
|
86
86
|
"/api/worktrees/[id]/timers/history/route": "app/api/worktrees/[id]/timers/history/route.js",
|
|
87
|
-
"/api/worktrees/[id]/timers/route": "app/api/worktrees/[id]/timers/route.js",
|
|
88
87
|
"/api/worktrees/[id]/todos/[todoId]/route": "app/api/worktrees/[id]/todos/[todoId]/route.js",
|
|
89
88
|
"/api/worktrees/[id]/todos/route": "app/api/worktrees/[id]/todos/route.js",
|
|
89
|
+
"/api/worktrees/[id]/timers/route": "app/api/worktrees/[id]/timers/route.js",
|
|
90
90
|
"/api/worktrees/[id]/tree/[...path]/route": "app/api/worktrees/[id]/tree/[...path]/route.js",
|
|
91
91
|
"/api/worktrees/[id]/tree/route": "app/api/worktrees/[id]/tree/route.js",
|
|
92
92
|
"/api/worktrees/[id]/upload/[...path]/route": "app/api/worktrees/[id]/upload/[...path]/route.js",
|
|
@@ -94,61 +94,61 @@
|
|
|
94
94
|
"/api/worktrees/[id]/verify/route": "app/api/worktrees/[id]/verify/route.js",
|
|
95
95
|
"/api/worktrees/[id]/verify/runs/[runId]/cancel/route": "app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js",
|
|
96
96
|
"/api/worktrees/[id]/verify/runs/[runId]/route": "app/api/worktrees/[id]/verify/runs/[runId]/route.js",
|
|
97
|
-
"/api/worktrees/[id]/verify/runs/route": "app/api/worktrees/[id]/verify/runs/route.js",
|
|
98
97
|
"/api/worktrees/[id]/viewed/route": "app/api/worktrees/[id]/viewed/route.js",
|
|
98
|
+
"/api/worktrees/[id]/verify/runs/route": "app/api/worktrees/[id]/verify/runs/route.js",
|
|
99
99
|
"/apple-icon.png/route": "app/apple-icon.png/route.js",
|
|
100
|
-
"/icon.png/route": "app/icon.png/route.js",
|
|
101
100
|
"/icon1.png/route": "app/icon1.png/route.js",
|
|
102
|
-
"/
|
|
101
|
+
"/icon.png/route": "app/icon.png/route.js",
|
|
103
102
|
"/manifest.webmanifest/route": "app/manifest.webmanifest/route.js",
|
|
103
|
+
"/icon2.png/route": "app/icon2.png/route.js",
|
|
104
|
+
"/api/agents/versions/route": "app/api/agents/versions/route.js",
|
|
104
105
|
"/api/app/release-notes/route": "app/api/app/release-notes/route.js",
|
|
105
|
-
"/api/agents/update/route": "app/api/agents/update/route.js",
|
|
106
|
-
"/api/auth/status/route": "app/api/auth/status/route.js",
|
|
107
|
-
"/api/capabilities/route": "app/api/capabilities/route.js",
|
|
108
|
-
"/api/daily-summary/status/route": "app/api/daily-summary/status/route.js",
|
|
109
106
|
"/api/app/update-check/route": "app/api/app/update-check/route.js",
|
|
107
|
+
"/api/auth/status/route": "app/api/auth/status/route.js",
|
|
110
108
|
"/api/app/update/route": "app/api/app/update/route.js",
|
|
109
|
+
"/api/capabilities/route": "app/api/capabilities/route.js",
|
|
110
|
+
"/api/agents/update/route": "app/api/agents/update/route.js",
|
|
111
111
|
"/api/external-apps/[id]/health/route": "app/api/external-apps/[id]/health/route.js",
|
|
112
|
+
"/api/daily-summary/status/route": "app/api/daily-summary/status/route.js",
|
|
112
113
|
"/api/external-apps/route": "app/api/external-apps/route.js",
|
|
113
114
|
"/api/fs/recent-paths/route": "app/api/fs/recent-paths/route.js",
|
|
114
|
-
"/api/
|
|
115
|
+
"/api/external-apps/[id]/route": "app/api/external-apps/[id]/route.js",
|
|
115
116
|
"/api/fs/browse/route": "app/api/fs/browse/route.js",
|
|
116
117
|
"/api/push/escalation/route": "app/api/push/escalation/route.js",
|
|
117
|
-
"/api/external-apps/[id]/route": "app/api/external-apps/[id]/route.js",
|
|
118
118
|
"/api/push/vapid/route": "app/api/push/vapid/route.js",
|
|
119
|
-
"/api/remote/pair/route": "app/api/remote/pair/route.js",
|
|
120
119
|
"/api/push/subscriptions/route": "app/api/push/subscriptions/route.js",
|
|
121
|
-
"/api/
|
|
122
|
-
"/api/sidebar/group-order/route": "app/api/sidebar/group-order/route.js",
|
|
120
|
+
"/api/remote/pair/route": "app/api/remote/pair/route.js",
|
|
123
121
|
"/api/settings/default-surface-mode/route": "app/api/settings/default-surface-mode/route.js",
|
|
122
|
+
"/api/repositories/validate-path/route": "app/api/repositories/validate-path/route.js",
|
|
124
123
|
"/api/settings/default-agents/route": "app/api/settings/default-agents/route.js",
|
|
125
124
|
"/api/skills/[id]/route": "app/api/skills/[id]/route.js",
|
|
125
|
+
"/api/sidebar/group-order/route": "app/api/sidebar/group-order/route.js",
|
|
126
126
|
"/api/skills/reindex/route": "app/api/skills/reindex/route.js",
|
|
127
127
|
"/api/skills/installations/route": "app/api/skills/installations/route.js",
|
|
128
128
|
"/api/skills/route": "app/api/skills/route.js",
|
|
129
129
|
"/api/skills/operations/route": "app/api/skills/operations/route.js",
|
|
130
|
-
"/api/worktrees/[id]/logs/route": "app/api/worktrees/[id]/logs/route.js",
|
|
131
130
|
"/api/worktrees/[id]/logs/[filename]/route": "app/api/worktrees/[id]/logs/[filename]/route.js",
|
|
131
|
+
"/api/worktrees/[id]/logs/route": "app/api/worktrees/[id]/logs/route.js",
|
|
132
132
|
"/api/worktrees/[id]/resolve-target/route": "app/api/worktrees/[id]/resolve-target/route.js",
|
|
133
133
|
"/api/worktrees/[id]/skills/[skillId]/git-workflow/route": "app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js",
|
|
134
134
|
"/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route": "app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js",
|
|
135
135
|
"/api/worktrees/[id]/skills/[skillId]/plan/route": "app/api/worktrees/[id]/skills/[skillId]/plan/route.js",
|
|
136
|
-
"/api/worktrees/[id]/skills/[skillId]/update-plan/route": "app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js",
|
|
137
136
|
"/api/worktrees/[id]/skills/route": "app/api/worktrees/[id]/skills/route.js",
|
|
137
|
+
"/api/worktrees/[id]/skills/[skillId]/install/route": "app/api/worktrees/[id]/skills/[skillId]/install/route.js",
|
|
138
|
+
"/api/worktrees/[id]/skills/[skillId]/update-plan/route": "app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js",
|
|
139
|
+
"/api/worktrees/apply-default-agents/route": "app/api/worktrees/apply-default-agents/route.js",
|
|
138
140
|
"/api/worktrees/[id]/skills/[skillId]/uninstall/route": "app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js",
|
|
139
|
-
"/api/worktrees/[id]/skills/[skillId]/update/route": "app/api/worktrees/[id]/skills/[skillId]/update/route.js",
|
|
140
141
|
"/api/worktrees/route": "app/api/worktrees/route.js",
|
|
141
|
-
"/api/worktrees/[id]/skills/[skillId]/
|
|
142
|
+
"/api/worktrees/[id]/skills/[skillId]/update/route": "app/api/worktrees/[id]/skills/[skillId]/update/route.js",
|
|
142
143
|
"/proxy/[...path]/route": "app/proxy/[...path]/route.js",
|
|
143
|
-
"/api/worktrees/apply-default-agents/route": "app/api/worktrees/apply-default-agents/route.js",
|
|
144
144
|
"/login/page": "app/login/page.js",
|
|
145
145
|
"/more/page": "app/more/page.js",
|
|
146
146
|
"/offline/page": "app/offline/page.js",
|
|
147
147
|
"/page": "app/page.js",
|
|
148
|
-
"/
|
|
148
|
+
"/sessions/page": "app/sessions/page.js",
|
|
149
149
|
"/review/page": "app/review/page.js",
|
|
150
|
+
"/repositories/page": "app/repositories/page.js",
|
|
150
151
|
"/skills/[skillId]/page": "app/skills/[skillId]/page.js",
|
|
151
|
-
"/sessions/page": "app/sessions/page.js",
|
|
152
152
|
"/skills/installed/page": "app/skills/installed/page.js",
|
|
153
153
|
"/skills/page": "app/skills/page.js",
|
|
154
154
|
"/worktrees/[id]/page": "app/worktrees/[id]/page.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=1068,exports.ids=[1068],exports.modules={23197:(a,b,c)=>{c.d(b,{H1:()=>d});let d="__global__"},61068:(a,b,c)=>{c.d(b,{Nz:()=>w,vr:()=>y,l7:()=>A});var d=c(95220),e=c(5363),f=c(56793),g=c(85775),h=c(72626),i=c(
|
|
1
|
+
"use strict";exports.id=1068,exports.ids=[1068],exports.modules={23197:(a,b,c)=>{c.d(b,{H1:()=>d});let d="__global__"},61068:(a,b,c)=>{c.d(b,{Nz:()=>w,vr:()=>y,l7:()=>A});var d=c(95220),e=c(5363),f=c(56793),g=c(85775),h=c(72626),i=c(8360),j=c(79892);let k=(0,h.h)("global-session-poller"),l=new Map,m=new Map;var n=c(93997),o=c(15194),p=c(23197),q=c(77093),r=c(82325),s=c(73753),t=c(31347);let u=(0,h.h)("session-cleanup");async function v(a,b){let c={worktreeId:a,sessionsKilled:[],sessionErrors:[],pollersStopped:[],pollerErrors:[]};for(let e of((0,n.pc)(),o.XH)){try{await b(a,e)&&(c.sessionsKilled.push(e),u.info("session:killed",{worktreeId:a,cliToolId:e}))}catch(d){let b=`${e}: ${(0,q.u1)(d)}`;c.sessionErrors.push(b),u.warn("session:kill-failed",{worktreeId:a,cliToolId:e,error:d instanceof Error?d.message:String(d)})}try{(0,d.stopPolling)(a,e),c.pollersStopped.push(`response-poller:${e}`)}catch(d){let b=`response-poller:${e}: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),u.warn("response-poller:stop-failed",{worktreeId:a,cliToolId:e,error:d instanceof Error?d.message:String(d)})}}try{(0,e._C)(a),c.pollersStopped.push("auto-yes-poller")}catch(d){let b=`auto-yes-poller: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),u.warn("auto-yes-poller:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,e.LP)(a),c.pollersStopped.push("auto-yes-state")}catch(d){let b=`auto-yes-state: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),u.warn("auto-yes-state:delete-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,f.Yg)(a),c.pollersStopped.push("schedule-manager")}catch(d){let b=`schedule-manager: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),u.warn("schedule-manager:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,g.Tm)(a),c.pollersStopped.push("timer-manager")}catch(d){let b=`timer-manager: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),u.warn("timer-manager:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}return c}async function w(a,b){let c=await Promise.allSettled(a.map(a=>v(a,b))),d=[],e=[];for(let b=0;b<c.length;b++){let f=c[b],g=a[b];if("fulfilled"===f.status){let a=f.value;for(let b of(d.push(a),a.sessionErrors))e.push(`Session kill error (${g}): ${b}`);for(let b of a.pollerErrors)e.push(`Poller stop error (${g}): ${b}`)}else e.push(`Cleanup failed (${g}): ${(0,q.u1)(f.reason)}`)}return{results:d,warnings:e}}async function x(a,b,c){try{let e=i.CLIToolManager.getInstance().getTool(b);if(!await e.isRunning(a))return!1;let f=e.getSessionName(a),g=await (0,t.s_)(f,c);if("owned"!==g.verdict)return!1;let h=`${a}:${b}`;return(0,d.clearPromptHashCache)(h),(0,j.fY)(f)}catch{return!1}}function y(a){return async(b,c)=>{let d=a.get(b);return void 0!==d&&x(b,c,d)}}async function z(){for(let a of l.keys()){let b=l.get(a);b&&clearTimeout(b)}l.clear(),m.clear(),k.info("poll:all-stopped");let a=0,b=i.CLIToolManager.getInstance();for(let c of o.XH)try{let d=b.getTool(c).getSessionName(p.H1);await (0,j.N)(d)&&await (0,j.fY)(d)&&(a++,u.info("global-session:killed",{cliToolId:c,sessionName:d}))}catch(a){u.warn("global-session:kill-failed",{cliToolId:c,error:(0,q.u1)(a)})}return a}async function A(a,b){let c=new Map((0,s.Sj)(a).map(a=>[a.id,a.path])),d=(0,r.L0)(a,b);try{await z()}catch(a){u.warn("sync:global-cleanup-failed",{error:(0,q.u1)(a)})}let e=[];if(d.deletedIds.length>0)try{let a=await w(d.deletedIds,y(c));a.warnings.length>0&&(u.warn("sync:cleanup-warnings",{warnings:a.warnings}),e=[`${a.warnings.length} session cleanup warning(s) occurred`])}catch(a){u.error("sync:cleanup-failed",{error:(0,q.u1)(a)}),e=["Session cleanup encountered an error"]}return{syncResult:d,cleanupWarnings:e}}},82325:(a,b,c)=>{c.d(b,{Hz:()=>o,L0:()=>r,Mg:()=>s,YM:()=>p,Yp:()=>q});var d=c(79646),e=c(28354),f=c(29021),g=c.n(f),h=c(33873),i=c.n(h),j=c(23718),k=c(56791),l=c(72626),m=c(64185);let n=(0,l.h)("worktrees");function o(){let a=process.env.WORKTREE_REPOS;return a&&a.trim()?a.split(",").map(a=>a.trim()).filter(a=>a.length>0):[]}async function p(a){let b=(0,e.promisify)(d.exec);if(function(a){if(!a)return!1;try{return g().lstatSync(a),!1}catch(b){let a=b.code;return"ENOENT"===a||"ENOTDIR"===a}}(a))return n.warn("repository:scan-skipped-missing-dir",{repoPath:a}),[];try{let{stdout:c}=await b("git worktree list",{cwd:a}),d=function(a){if(!a||""===a.trim())return[];let b=a.trim().split("\n"),c=[];for(let a of b){let b=a.trim();if(!b)continue;let d=b.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(d){let[,a,b,e]=d;c.push({path:a.trim(),branch:e||`detached-${b}`,commit:b})}}return c}(c),e=i().resolve(a),f=i().basename(e);return(0,m.oZ)(e),d.map(a=>{let b=i().resolve(a.path);return{id:(0,j.ko)(b),name:a.branch,branch:a.branch,path:b,repositoryPath:e,repositoryName:f}}).filter(a=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(b=>a.path.startsWith(b))?(n.warn("worktree:unsafe-path-skipped",{path:a.path}),!1):!(a.path.includes("\0")||a.path.includes(".."))||(n.warn("worktree:malicious-path-skipped",{path:a.path}),!1))}catch(c){let a=c instanceof Error?c.message:String(c),b=c.code;if(a?.includes("not a git repository")||128===b)return[];throw c}}async function q(a){let b=await Promise.allSettled(a.map(async a=>{n.info("repository:scan-start",{repoPath:a});let b=await p(a);return n.info("repository:scan-complete",{repoPath:a,worktreeCount:b.length}),b})),c=[];for(let d=0;d<b.length;d++){let e=b[d];"fulfilled"===e.status?c.push(...e.value):n.error("repository:scan-failed",{repoPath:a[d],error:e.reason instanceof Error?e.reason.message:String(e.reason)})}return c}function r(a,b){if(0===b.length)return{deletedIds:[],upsertedCount:0};let c=[],d=0,e=new Map;for(let a of b){let b=a.repositoryPath||"";e.has(b)||e.set(b,[]),e.get(b).push(a)}let f=new Set([...(0,k.getAllWorktreeIds)(a),...(0,k.getAliasedWorktreeIds)(a)]),g=new Map((0,k.getAllWorktreePathIds)(a).map(a=>[i().resolve(a.path),a.id])),h=new Map,l=new Map;for(let[a,b]of g)h.set(a,new Set([b])),l.set(b,a);for(let b of(0,k.getAllWorktreeAliases)(a)){let a=l.get(b.worktreeId);a&&h.get(a)?.add(b.oldId)}let m=new Set(b.map(a=>i().resolve(a.path)));for(let[b,o]of e){if(!b)continue;let e=(0,k.getWorktreesByRepository)(a,b).filter(a=>!m.has(i().resolve(a.path))).map(a=>a.id);if(e.length>0){let b=(0,k.deleteWorktreesByIds)(a,e);for(let a of(c.push(...e),e)){f.delete(a);let b=l.get(a);void 0!==b&&(g.delete(b),h.delete(b))}n.info("worktree:cleanup",{deletedCount:b.deletedCount})}for(let b of o){let c=i().resolve(b.path),e=g.get(c),m=b.id,n=e??(m&&!f.has(m)?m:function(a,b,c){if(!c||0===c.size)return(0,j.ko)(a,b);let d=new Set(b);for(let a of c)d.delete(a);return(0,j.ko)(a,d)}(c,f,h.get(c)));f.add(n),g.set(c,n),l.set(n,c),(0,k.upsertWorktree)(a,{...b,id:n,name:b.branch??b.name}),d++}}return{deletedIds:c,upsertedCount:d}}function s(a,b){let c=new Set(b.map(a=>a.repositoryPath).filter(a=>!!a)),d=[];for(let b of(0,k.getRepositories)(a)){let e=b.path;if(!e||c.has(e)||function(a){if(!a)return!1;try{return g().existsSync(a)&&g().existsSync(i().join(a,".git"))}catch{return!0}}(e))continue;let f=(0,k.getWorktreesByRepository)(a,e).map(a=>a.id);if(0===f.length)continue;let h=(0,k.deleteWorktreesByIds)(a,f);d.push(...f),n.info("worktree:stale-repo-pruned",{repoPath:e,deletedCount:h.deletedCount})}return d}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=1210,exports.ids=[1210,2839,5220],exports.modules={39687:(a,b,c)=>{c.d(b,{d:()=>s});var d=c(56791),e=c(43234),f=c(15194),g=c(95220),h=c(12462),i=c(43015),j=c(54325),k=c(72626),l=c(34331),m=c(40964),n=c(58707),o=c(41466);let p=(0,k.h)("session/send-user-message");function q(a){return a instanceof Error?a.message:String(a)}async function r(a,b){let c=`${a}:${b}`,d=Date.now()+5e3;for(;(0,g.getActivePollers)().includes(c);){if(Date.now()>=d)return!1;await new Promise(a=>setTimeout(a,100))}return!0}async function s(a,b){let{worktreeId:c,content:k,cliToolId:s,instanceId:t,absoluteImagePath:u,copilotModel:v}=b,w=b.messageType??"normal",x=t??s,y=e.CLIToolManager.getInstance().getTool(s),z=(0,m.mf)(s,c,t),A=await (0,l.L)(c,z,a);if(null===A||"foreign"===A.verdict)return p.warn("send-refused-foreign-session",{worktreeId:c,cliToolId:s,instanceId:x,sessionName:z,sessionPath:A?.sessionPath??null,reason:A?"foreign":"worktree_not_found"}),{ok:!1,stage:"foreign_session",error:A?`tmux session "${z}" belongs to another CommandMate server`:`Worktree '${c}' not found; cannot confirm tmux session "${z}" is this server's`};let B=await (0,n.a3)(c,s,t,{ignoreStructured:b.ignoreStructuredPromptGuard});if(B.waiting)return p.info("send-refused-prompt-waiting",{worktreeId:c,cliToolId:s,reason:B.reason,blockedBy:B.blockedBy}),{ok:!1,stage:"prompt_waiting",error:(0,n.br)(c,B.blockedBy)};if(v&&"copilot"===s){try{await y.sendModelCommand(c,v,t),p.info("copilot-model-command-sent",{model:v})}catch(a){return p.error("failed-to-send-model-command:",{error:q(a)}),{ok:!1,stage:"model",error:q(a)}}await r(c,x)||p.warn("previous-turn-poller-still-running",{worktreeId:c,instanceId:x,waitedMs:5e3})}let C=new Date;try{await (0,h.o4)(a,c,s,C,t)}catch(a){p.error("failed-to-save-pending-assistant-response:",{error:q(a)})}let D=null;try{let b=(0,d.getMessages)(a,c,{limit:1,cliToolId:s,instanceId:x,matchResolvedInstance:!0});b.length>0&&"user"===b[0].role&&b[0].content===k&&(D=b[0].id)}catch(a){p.error("failed-to-detect-orphaned-messages:",{error:q(a)})}try{u?(0,f._J)(y)?await y.sendMessageWithImage(c,k,u,t):await y.sendMessage(c,(0,o.TZ)(k,u),t):await y.sendMessage(c,k,t)}catch(a){return p.error("failed-to-send-message-to:",{error:q(a)}),{ok:!1,stage:"send",error:q(a)}}let E=(0,d.createMessage)(a,{worktreeId:c,role:"user",content:k,messageType:w,timestamp:C,cliToolId:s,instanceId:t,requestId:b.requestId});try{(0,i.broadcastMessage)("message",{worktreeId:c,message:{...E,cliToolId:s,instanceId:x}})}catch(a){p.warn("user-message-broadcast-failed",{error:q(a)})}if(D)try{if((0,d.deleteMessageById)(a,D)){p.info("cleaned-up-orphaned-user");try{(0,i.broadcastMessage)(j.dz,{worktreeId:c,cliToolId:s,instanceId:x,reason:"orphan_cleanup"})}catch(a){p.warn("orphan-cleanup-broadcast-failed",{error:q(a)})}}}catch(a){p.error("failed-to-clean-up-orphaned-message:",{error:q(a)})}return(0,d.updateLastUserMessage)(a,c,k,C),(0,d.clearInProgressMessageId)(a,c,s,t),p.info("cleared-in-progress-message-for"),(0,g.startPolling)(c,s,t),{ok:!0,message:E}}},58707:(a,b,c)=>{c.d(b,{$n:()=>k,a3:()=>l,br:()=>m});var d=c(43234),e=c(31990),f=c(95595),g=c(34405),h=c(72626),i=c(30008);let j=(0,h.h)("prompt-waiting-guard"),k="PROMPT_WAITING";async function l(a,b,c,h){try{let k=d.CLIToolManager.getInstance().getTool(b);if(!await k.isRunning(a,c))return{waiting:!1};let l=await (0,e.Wh)(a,b,g._,c),m=(0,f.WC)(l,b),n=(0,i._G)({worktreeId:a,cliToolId:b,instanceId:c,scraper:{status:m.status,reason:m.reason,hasActivePrompt:m.hasActivePrompt},ignoreStructured:h?.ignoreStructured});if(!n.blocksSend)return null!==n.structuredSendBlockSuppressed&&j.info("structured-send-guard-not-applied",{worktreeId:a,cliToolId:b,instanceId:c,suppressed:n.structuredSendBlockSuppressed,promptWaitingSince:n.structured?.at??null}),{waiting:!1};return{waiting:!0,reason:n.blockReason??void 0,blockedBy:n.blockedBy??void 0}}catch(c){return j.warn("prompt-waiting-check-failed",{worktreeId:a,cliToolId:b,error:c instanceof Error?c.message:String(c)}),{waiting:!1}}}function m(a,b){let c=`${a} is waiting on a prompt. Sending now would type into the prompt's input line instead of reaching the agent, and would leave that text in place for the next answer. Answer the prompt first: \`commandmate respond ${a} <answer>\`.`;if("structured"!==b)return c;let d=Math.round(i.j0/6e4);return`${c} This dialog was reported by the agent's own hooks and is not visible to the terminal scraper, so if the pane looks idle the record has outlived its dialog: it stops blocking sends ${d} minutes after it was reported, or immediately with \`commandmate send ${a} <message> --ignore-structured-prompt\` (server-wide: ${i.F1}=off).`}},71210:(a,b,c)=>{c.d(b,{notifyRelayPromptWaiting:()=>F,notifyRelayTurnCompleted:()=>E,runRelayMaintenanceTick:()=>I});var d=c(88807),e=c(90787),f=c(52660),g=c(81254),h=c(55233),i=c(39687),j=c(640),k=c(23854),l=c(43234),m=c(31990),n=c(95595),o=c(34405),p=c(72626);let q=(0,p.h)("relay-readiness");async function r(a,b,c){try{let d=l.CLIToolManager.getInstance().getTool(b);if(!await d.isRunning(a,c))return"session_stopped";let e=await (0,m.Wh)(a,b,o._,c),f=(0,n.WC)(e,b);return"running"===f.status?"generating":null}catch(d){return q.warn("relay-readiness-check-failed",{worktreeId:a,cliToolId:b,instanceId:c,error:d instanceof Error?d.message:String(d)}),null}}var s=c(49798),t=c(67164);let u=(0,p.h)("relay-delivery"),v=/-turn:/,w=[f.RELAY_SYSTEM_REQUEST_ID_PREFIX,f.MODEL_CHANGE_REQUEST_ID_PREFIX],x={claude:!0,codex:!0,antigravity:!0,"command-code":!0,opencode:!0,copilot:!1,gemini:!1,"vibe-local":!1},y=globalThis.__relayDeliveryInFlight??=new Set;function z(a,b){let c=(0,s.S)(a,b.to);return{alias:c.alias,worktreeId:c.worktreeId}}function A(a,b,c){let d=(0,f.getMessages)(a,b.worktreeId,{limit:40,cliToolId:b.cliToolId,instanceId:b.instanceId,matchResolvedInstance:!0}),e=!0===x[b.cliToolId];for(let a of d){var g;if(!("assistant"!==a.role||"prompt"===a.messageType||function(a){return"string"==typeof a&&w.some(b=>a.startsWith(b))}(a.requestId))){if((!e||"string"==typeof(g=a.requestId)&&v.test(g))&&""!==a.content.trim())return a.timestamp.getTime()<c?null:a}}return null}function B(a,b,c){let d=(0,e.ix)(a,{worktreeId:b.worktreeId,instanceId:b.instanceId});if(0===d.length)return 0;let f=0;for(let g of d){let d=A(a,b,g.createdAt);if(!d)continue;let h=(0,j.z0)(z(a,g),d.content);(0,e.be)(a,g.id,"reply",h,c)&&(f+=1)}return f}function C(a){return new Promise(b=>{setTimeout(b,a)})}async function D(a,b){let c=Date.now()+15e3;for(;;){if(B(a,b,Date.now())>0)return void H();if(Date.now()>=c)break;await C(1e3)}u.info("relay-scrape-row-not-transcript-backed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId,graceMs:15e3})}async function E(a,b){try{var c;let f=(0,d.getDbInstance)(),g=(0,e.ix)(f,{worktreeId:a.worktreeId,instanceId:a.instanceId});if(0===g.length)return;if(b.settled){B(f,a,Date.now())>0&&H();return}if(c=a.cliToolId,!0===x[c])return void await D(f,a);let h=null;for(let b=0;b<3;b+=1){let b=A(f,a,0);h=b?.id??null,await C(k.DZ);let c=A(f,a,0);if((c?.id??null)===h){B(f,a,Date.now())>0&&H();return}}u.info("relay-scrape-never-settled",{worktreeId:a.worktreeId,instanceId:a.instanceId,attempts:3})}catch(b){u.warn("relay-turn-completed-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}}function F(a){try{let b=(0,d.getDbInstance)(),c=(0,e.ix)(b,{worktreeId:a.worktreeId,instanceId:a.instanceId});if(0===c.length)return;let i=(0,f.getLatestOpenPromptMessage)(b,a.worktreeId,a.cliToolId,a.instanceId);if(!i)return;let k=(0,h.dV)(b),l=function(a){let b=a.promptData;return(0,g.XF)(b)?"yes_no"===b.type?b.options.map(a=>({key:a,label:a})):b.options.map(a=>({key:String(a.number),label:a.label})):[]}(i),m=(0,g.XF)(i.promptData)?i.promptData.question:i.promptData?.question??i.content,n=0;for(let a of c){if((0,e.GC)(b,a.id)===i.id)continue;let c=(0,j.Hr)(k,z(b,a),{question:m,options:l});(0,e.be)(b,a.id,"prompt",c)&&((0,e.UC)(b,a.id,i.id),n+=1)}n>0&&H()}catch(b){u.warn("relay-prompt-notify-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}}async function G(a,b,c,d){let g=(0,e.Ip)(a,b);if(!g)return"skipped";let h=(0,s.S)(a,g.from),j=await r(h.worktreeId,h.cliToolId,h.instanceId);if(j)return u.debug("relay-delivery-held",{relayId:b,kind:c,reason:j}),"held";let k=await (0,i.d)(a,{worktreeId:h.worktreeId,content:d,cliToolId:h.cliToolId,instanceId:h.instanceId,messageType:"relay",requestId:"reply"===c?(0,f.relayRequestId)(g.id):void 0});if(!k.ok)return u.info("relay-delivery-refused",{relayId:b,kind:c,stage:k.stage}),"prompt_waiting"===k.stage?"held":"failed";let l=Date.now();return"reply"===c?((0,e.Bf)(a,g.id,(0,f.relayRequestId)(g.id),l)||u.info("relay-already-closed-on-deliver",{relayId:b}),(0,t._)(a,g.id,"replied",h,(0,s.S)(a,g.to),l)):"prompt"===c&&(0,t._)(a,g.id,"waiting",h,(0,s.S)(a,g.to),l),(0,e.uJ)(a,g.id,l),u.info("relay-delivered",{relayId:b,kind:c,to:`${h.worktreeId}/${h.instanceId}`}),"delivered"}async function H(){if(!globalThis.__relayPumpRunning){globalThis.__relayPumpRunning=!0;try{let a=(0,d.getDbInstance)();for(let b of(0,e.uG)(a))if(!y.has(b.relay.id)){y.add(b.relay.id);try{await G(a,b.relay.id,b.kind,b.body)}catch(a){u.warn("relay-delivery-failed",{relayId:b.relay.id,error:a instanceof Error?a.message:String(a)})}finally{y.delete(b.relay.id)}}}catch(a){u.warn("relay-pump-failed",{error:a instanceof Error?a.message:String(a)})}finally{globalThis.__relayPumpRunning=!1}}}async function I(){try{!function(a,b=Date.now()){for(let c of(0,e.s7)(a,b))try{let d=(0,h.dV)(a);(0,e.uJ)(a,c.id,b);let f=(0,j.KA)(d,z(a,c),c.expiresAt-c.createdAt),g=(0,e.be)(a,c.id,"expired",f,b);if(!(0,e.Cz)(a,c.id,b)){g&&(0,e.uJ)(a,c.id,b);continue}(0,t._)(a,c.id,"expired",(0,s.S)(a,c.from),(0,s.S)(a,c.to),b)}catch(a){u.warn("relay-expire-failed",{relayId:c.id,error:a instanceof Error?a.message:String(a)})}}((0,d.getDbInstance)())}catch(a){u.warn("relay-sweep-failed",{error:a instanceof Error?a.message:String(a)})}await H()}},95220:(a,b,c)=>{c.r(b),c.d(b,{accumulateTuiContent:()=>g.IZ,cleanClaudeResponse:()=>f.NN,cleanCopilotResponse:()=>f.LH,cleanGeminiResponse:()=>f.IS,cleanOpenCodeResponse:()=>f.aW,clearPromptHashCache:()=>h.iX,clearTuiAccumulator:()=>g.q1,extractCopilotContentLines:()=>g.o0,extractTuiContentLines:()=>g.K0,findOverlapIndex:()=>g.vQ,getAccumulatedContent:()=>g.Uz,getActivePollers:()=>d.KQ,initTuiAccumulator:()=>g.tb,isDuplicatePrompt:()=>h.gv,isOpenCodeComplete:()=>e.bE,migrateResponsePollerWorktreeIds:()=>d.sR,normalizeCopilotLine:()=>g.IW,normalizePromptForDedup:()=>h.zm,renamePromptHashCacheKey:()=>h.i2,resolveExtractionStartIndex:()=>e.QM,startPolling:()=>d.g8,stopAllPolling:()=>d.fq,stopPolling:()=>d.Et,truncateMessage:()=>f.Sj});var d=c(45146),e=c(60),f=c(82450),g=c(13033),h=c(72457)}};
|
|
1
|
+
"use strict";exports.id=1210,exports.ids=[1210,2839,5220],exports.modules={39687:(a,b,c)=>{c.d(b,{d:()=>t});var d=c(56791),e=c(8360),f=c(15194),g=c(95220),h=c(12462),i=c(43015),j=c(54325),k=c(72626),l=c(34331),m=c(40964),n=c(58707),o=c(2669),p=c(49319);let q=(0,k.h)("session/send-user-message");function r(a){return a instanceof Error?a.message:String(a)}async function s(a,b){let c=`${a}:${b}`,d=Date.now()+5e3;for(;(0,g.getActivePollers)().includes(c);){if(Date.now()>=d)return!1;await new Promise(a=>setTimeout(a,100))}return!0}async function t(a,b){let{worktreeId:c,content:k,cliToolId:t,instanceId:u,absoluteImagePath:v,copilotModel:w}=b,x=b.messageType??"normal",y=u??t,z=e.CLIToolManager.getInstance().getTool(t),A=(0,m.mf)(t,c,u),B=await (0,l.L)(c,A,a);if(null===B||"foreign"===B.verdict)return q.warn("send-refused-foreign-session",{worktreeId:c,cliToolId:t,instanceId:y,sessionName:A,sessionPath:B?.sessionPath??null,reason:B?"foreign":"worktree_not_found"}),{ok:!1,stage:"foreign_session",error:B?`tmux session "${A}" belongs to another CommandMate server`:`Worktree '${c}' not found; cannot confirm tmux session "${A}" is this server's`};let C=await (0,n.a3)(c,t,u,{ignoreStructured:b.ignoreStructuredPromptGuard});if(C.waiting)return q.info("send-refused-prompt-waiting",{worktreeId:c,cliToolId:t,reason:C.reason,blockedBy:C.blockedBy}),{ok:!1,stage:"prompt_waiting",error:(0,n.br)(c,C.blockedBy)};if(w&&"copilot"===t){try{await z.sendModelCommand(c,w,u),q.info("copilot-model-command-sent",{model:w})}catch(a){return q.error("failed-to-send-model-command:",{error:r(a)}),{ok:!1,stage:"model",error:r(a)}}await s(c,y)||q.warn("previous-turn-poller-still-running",{worktreeId:c,instanceId:y,waitedMs:5e3})}let D=new Date;try{await (0,h.o4)(a,c,t,D,u)}catch(a){q.error("failed-to-save-pending-assistant-response:",{error:r(a)})}let E=null;try{let b=(0,d.getMessages)(a,c,{limit:1,cliToolId:t,instanceId:y,matchResolvedInstance:!0});b.length>0&&"user"===b[0].role&&b[0].content===k&&(E=b[0].id)}catch(a){q.error("failed-to-detect-orphaned-messages:",{error:r(a)})}try{v?(0,f._J)(z)?await z.sendMessageWithImage(c,k,v,u):await z.sendMessage(c,(0,p.TZ)(k,v),u):await z.sendMessage(c,k,u)}catch(a){if(q.error("failed-to-send-message-to:",{error:r(a)}),(0,o.wQ)(a))return{ok:!1,stage:"send",error:a.message,code:o.M7};return{ok:!1,stage:"send",error:r(a)}}let F=(0,d.createMessage)(a,{worktreeId:c,role:"user",content:k,messageType:x,timestamp:D,cliToolId:t,instanceId:u,requestId:b.requestId});try{(0,i.broadcastMessage)("message",{worktreeId:c,message:{...F,cliToolId:t,instanceId:y}})}catch(a){q.warn("user-message-broadcast-failed",{error:r(a)})}if(E)try{if((0,d.deleteMessageById)(a,E)){q.info("cleaned-up-orphaned-user");try{(0,i.broadcastMessage)(j.dz,{worktreeId:c,cliToolId:t,instanceId:y,reason:"orphan_cleanup"})}catch(a){q.warn("orphan-cleanup-broadcast-failed",{error:r(a)})}}}catch(a){q.error("failed-to-clean-up-orphaned-message:",{error:r(a)})}return(0,d.updateLastUserMessage)(a,c,k,D),(0,d.clearInProgressMessageId)(a,c,t,u),q.info("cleared-in-progress-message-for"),(0,g.startPolling)(c,t,u),{ok:!0,message:F}}},58707:(a,b,c)=>{c.d(b,{$n:()=>k,a3:()=>l,br:()=>m});var d=c(8360),e=c(31990),f=c(95595),g=c(34405),h=c(72626),i=c(30008);let j=(0,h.h)("prompt-waiting-guard"),k="PROMPT_WAITING";async function l(a,b,c,h){try{let k=d.CLIToolManager.getInstance().getTool(b);if(!await k.isRunning(a,c))return{waiting:!1};let l=await (0,e.Wh)(a,b,g._,c),m=(0,f.WC)(l,b),n=(0,i._G)({worktreeId:a,cliToolId:b,instanceId:c,scraper:{status:m.status,reason:m.reason,hasActivePrompt:m.hasActivePrompt},ignoreStructured:h?.ignoreStructured});if(!n.blocksSend)return null!==n.structuredSendBlockSuppressed&&j.info("structured-send-guard-not-applied",{worktreeId:a,cliToolId:b,instanceId:c,suppressed:n.structuredSendBlockSuppressed,promptWaitingSince:n.structured?.at??null}),{waiting:!1};return{waiting:!0,reason:n.blockReason??void 0,blockedBy:n.blockedBy??void 0}}catch(c){return j.warn("prompt-waiting-check-failed",{worktreeId:a,cliToolId:b,error:c instanceof Error?c.message:String(c)}),{waiting:!1}}}function m(a,b){let c=`${a} is waiting on a prompt. Sending now would type into the prompt's input line instead of reaching the agent, and would leave that text in place for the next answer. Answer the prompt first: \`commandmate respond ${a} <answer>\`.`;if("structured"!==b)return c;let d=Math.round(i.j0/6e4);return`${c} This dialog was reported by the agent's own hooks and is not visible to the terminal scraper, so if the pane looks idle the record has outlived its dialog: it stops blocking sends ${d} minutes after it was reported, or immediately with \`commandmate send ${a} <message> --ignore-structured-prompt\` (server-wide: ${i.F1}=off).`}},71210:(a,b,c)=>{c.d(b,{notifyRelayPromptWaiting:()=>F,notifyRelayTurnCompleted:()=>E,runRelayMaintenanceTick:()=>I});var d=c(88807),e=c(90787),f=c(52660),g=c(81254),h=c(55233),i=c(39687),j=c(640),k=c(23854),l=c(8360),m=c(31990),n=c(95595),o=c(34405),p=c(72626);let q=(0,p.h)("relay-readiness");async function r(a,b,c){try{let d=l.CLIToolManager.getInstance().getTool(b);if(!await d.isRunning(a,c))return"session_stopped";let e=await (0,m.Wh)(a,b,o._,c),f=(0,n.WC)(e,b);return"running"===f.status?"generating":null}catch(d){return q.warn("relay-readiness-check-failed",{worktreeId:a,cliToolId:b,instanceId:c,error:d instanceof Error?d.message:String(d)}),null}}var s=c(49798),t=c(67164);let u=(0,p.h)("relay-delivery"),v=/-turn:/,w=[f.RELAY_SYSTEM_REQUEST_ID_PREFIX,f.MODEL_CHANGE_REQUEST_ID_PREFIX],x={claude:!0,codex:!0,antigravity:!0,"command-code":!0,opencode:!0,copilot:!1,gemini:!1,"vibe-local":!1,"opencode-v2":!0},y=globalThis.__relayDeliveryInFlight??=new Set;function z(a,b){let c=(0,s.S)(a,b.to);return{alias:c.alias,worktreeId:c.worktreeId}}function A(a,b,c){let d=(0,f.getMessages)(a,b.worktreeId,{limit:40,cliToolId:b.cliToolId,instanceId:b.instanceId,matchResolvedInstance:!0}),e=!0===x[b.cliToolId];for(let a of d){var g;if(!("assistant"!==a.role||"prompt"===a.messageType||function(a){return"string"==typeof a&&w.some(b=>a.startsWith(b))}(a.requestId))){if((!e||"string"==typeof(g=a.requestId)&&v.test(g))&&""!==a.content.trim())return a.timestamp.getTime()<c?null:a}}return null}function B(a,b,c){let d=(0,e.ix)(a,{worktreeId:b.worktreeId,instanceId:b.instanceId});if(0===d.length)return 0;let f=0;for(let g of d){let d=A(a,b,g.createdAt);if(!d)continue;let h=(0,j.z0)(z(a,g),d.content);(0,e.be)(a,g.id,"reply",h,c)&&(f+=1)}return f}function C(a){return new Promise(b=>{setTimeout(b,a)})}async function D(a,b){let c=Date.now()+15e3;for(;;){if(B(a,b,Date.now())>0)return void H();if(Date.now()>=c)break;await C(1e3)}u.info("relay-scrape-row-not-transcript-backed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId,graceMs:15e3})}async function E(a,b){try{var c;let f=(0,d.getDbInstance)(),g=(0,e.ix)(f,{worktreeId:a.worktreeId,instanceId:a.instanceId});if(0===g.length)return;if(b.settled){B(f,a,Date.now())>0&&H();return}if(c=a.cliToolId,!0===x[c])return void await D(f,a);let h=null;for(let b=0;b<3;b+=1){let b=A(f,a,0);h=b?.id??null,await C(k.DZ);let c=A(f,a,0);if((c?.id??null)===h){B(f,a,Date.now())>0&&H();return}}u.info("relay-scrape-never-settled",{worktreeId:a.worktreeId,instanceId:a.instanceId,attempts:3})}catch(b){u.warn("relay-turn-completed-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}}function F(a){try{let b=(0,d.getDbInstance)(),c=(0,e.ix)(b,{worktreeId:a.worktreeId,instanceId:a.instanceId});if(0===c.length)return;let i=(0,f.getLatestOpenPromptMessage)(b,a.worktreeId,a.cliToolId,a.instanceId);if(!i)return;let k=(0,h.dV)(b),l=function(a){let b=a.promptData;return(0,g.XF)(b)?"yes_no"===b.type?b.options.map(a=>({key:a,label:a})):b.options.map(a=>({key:String(a.number),label:a.label})):[]}(i),m=(0,g.XF)(i.promptData)?i.promptData.question:i.promptData?.question??i.content,n=0;for(let a of c){if((0,e.GC)(b,a.id)===i.id)continue;let c=(0,j.Hr)(k,z(b,a),{question:m,options:l});(0,e.be)(b,a.id,"prompt",c)&&((0,e.UC)(b,a.id,i.id),n+=1)}n>0&&H()}catch(b){u.warn("relay-prompt-notify-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}}async function G(a,b,c,d){let g=(0,e.Ip)(a,b);if(!g)return"skipped";let h=(0,s.S)(a,g.from),j=await r(h.worktreeId,h.cliToolId,h.instanceId);if(j)return u.debug("relay-delivery-held",{relayId:b,kind:c,reason:j}),"held";let k=await (0,i.d)(a,{worktreeId:h.worktreeId,content:d,cliToolId:h.cliToolId,instanceId:h.instanceId,messageType:"relay",requestId:"reply"===c?(0,f.relayRequestId)(g.id):void 0});if(!k.ok)return u.info("relay-delivery-refused",{relayId:b,kind:c,stage:k.stage}),"prompt_waiting"===k.stage?"held":"failed";let l=Date.now();return"reply"===c?((0,e.Bf)(a,g.id,(0,f.relayRequestId)(g.id),l)||u.info("relay-already-closed-on-deliver",{relayId:b}),(0,t._)(a,g.id,"replied",h,(0,s.S)(a,g.to),l)):"prompt"===c&&(0,t._)(a,g.id,"waiting",h,(0,s.S)(a,g.to),l),(0,e.uJ)(a,g.id,l),u.info("relay-delivered",{relayId:b,kind:c,to:`${h.worktreeId}/${h.instanceId}`}),"delivered"}async function H(){if(!globalThis.__relayPumpRunning){globalThis.__relayPumpRunning=!0;try{let a=(0,d.getDbInstance)();for(let b of(0,e.uG)(a))if(!y.has(b.relay.id)){y.add(b.relay.id);try{await G(a,b.relay.id,b.kind,b.body)}catch(a){u.warn("relay-delivery-failed",{relayId:b.relay.id,error:a instanceof Error?a.message:String(a)})}finally{y.delete(b.relay.id)}}}catch(a){u.warn("relay-pump-failed",{error:a instanceof Error?a.message:String(a)})}finally{globalThis.__relayPumpRunning=!1}}}async function I(){try{!function(a,b=Date.now()){for(let c of(0,e.s7)(a,b))try{let d=(0,h.dV)(a);(0,e.uJ)(a,c.id,b);let f=(0,j.KA)(d,z(a,c),c.expiresAt-c.createdAt),g=(0,e.be)(a,c.id,"expired",f,b);if(!(0,e.Cz)(a,c.id,b)){g&&(0,e.uJ)(a,c.id,b);continue}(0,t._)(a,c.id,"expired",(0,s.S)(a,c.from),(0,s.S)(a,c.to),b)}catch(a){u.warn("relay-expire-failed",{relayId:c.id,error:a instanceof Error?a.message:String(a)})}}((0,d.getDbInstance)())}catch(a){u.warn("relay-sweep-failed",{error:a instanceof Error?a.message:String(a)})}await H()}},95220:(a,b,c)=>{c.r(b),c.d(b,{accumulateTuiContent:()=>g.IZ,cleanClaudeResponse:()=>f.NN,cleanCopilotResponse:()=>f.LH,cleanGeminiResponse:()=>f.IS,cleanOpenCodeResponse:()=>f.aW,clearPromptHashCache:()=>h.iX,clearTuiAccumulator:()=>g.q1,extractCopilotContentLines:()=>g.o0,extractTuiContentLines:()=>g.K0,findOverlapIndex:()=>g.vQ,getAccumulatedContent:()=>g.Uz,getActivePollers:()=>d.KQ,initTuiAccumulator:()=>g.tb,isDuplicatePrompt:()=>h.gv,isOpenCodeComplete:()=>e.bE,migrateResponsePollerWorktreeIds:()=>d.sR,normalizeCopilotLine:()=>g.IW,normalizePromptForDedup:()=>h.zm,renamePromptHashCacheKey:()=>h.i2,resolveExtractionStartIndex:()=>e.QM,startPolling:()=>d.g8,stopAllPolling:()=>d.fq,stopPolling:()=>d.Et,truncateMessage:()=>f.Sj});var d=c(45146),e=c(60),f=c(82450),g=c(13033),h=c(72457)}};
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## タスク
|
|
4
4
|
${a.goal}`}},49987:(a,b,c)=>{c.d(b,{H:()=>l,Iq:()=>i,M:()=>k,xL:()=>o});var d=c(29021),e=c(21820),f=c(33873),g=c(55511);let h=(0,c(72626).h)("lib/verification/machine-lock"),i="locks",j="owner";function k(a,b){return(0,f.join)(b,`${a}.lock`)}function l(a=process.env){let b=a.CM_VERIFY_LOCK_ROOT;return b&&""!==b.trim()?b:(0,f.join)((0,e.homedir)(),".commandmate",i)}function m(a){try{let b=JSON.parse((0,d.readFileSync)((0,f.join)(a,j),"utf8"));if("number"!=typeof b.pid||"string"!=typeof b.token)return null;return{pid:b.pid,host:"string"==typeof b.host?b.host:"",token:b.token,acquiredAt:"number"==typeof b.acquiredAt?b.acquiredAt:0}}catch{return null}}function n(a){return a?`pid ${a.pid} on ${a.host||"unknown host"}`:null}async function o(a,b){let c=b.root??l(),i=b.pollIntervalMs??250,o=k(a,c),p=Date.now(),q=p+Math.max(0,b.timeoutMs),r=(0,g.randomUUID)();(0,d.mkdirSync)(c,{recursive:!0});let s=new Set;for(;;){if(b.shouldAbandon?.())return{acquired:!1,waitedMs:Date.now()-p,heldBy:n(m(o)),abandoned:!0};if(function(a,b){try{(0,d.mkdirSync)(a)}catch(a){if("EEXIST"===a.code)return!1;throw a}return(0,d.writeFileSync)((0,f.join)(a,j),JSON.stringify(b),{encoding:"utf8"}),!0}(o,{pid:process.pid,host:(0,e.hostname)(),token:r,acquiredAt:Date.now()}))return{acquired:!0,waitedMs:Date.now()-p,handle:{name:a,path:o,release:()=>{let a=m(o);if(!a||a.token===r)try{(0,d.rmSync)(o,{recursive:!0,force:!0})}catch(a){h.warn("machine-lock-release-failed",{lockPath:o,error:a instanceof Error?a.message:String(a)})}}}};let c=m(o);if(c&&!s.has(c.token)&&function(a){if(a.host!==(0,e.hostname)())return!1;try{return process.kill(a.pid,0),!1}catch(a){return"ESRCH"===a.code}}(c)){s.add(c.token);let a=m(o);if(a&&a.token===c.token)try{(0,d.rmSync)(o,{recursive:!0,force:!0}),h.warn("machine-lock-broken-stale",{lockPath:o,pid:c.pid})}catch{}continue}let g=Date.now();if(g>=q)return{acquired:!1,waitedMs:g-p,heldBy:n(c)};await function(a){return new Promise(b=>setTimeout(b,a))}(Math.min(i,q-g))}}},53604:(a,b,c)=>{c.d(b,{Cr:()=>k,L8:()=>i});var d=c(55511),e=c(29021),f=c(21820),g=c(33873);let h=(0,c(72626).h)("lib/verification/worktree-index"),i="worktree-index";function j(a,b){try{return(0,e.readFileSync)((0,g.join)(a,b),"utf8").trim()}catch{return null}}function k(a,b={}){let c=b.root??function(a=process.env){let b=a.CM_VERIFY_WORKTREE_INDEX_ROOT;return b&&""!==b.trim()?b:(0,g.join)((0,f.homedir)(),".commandmate",i)}();try{(0,e.mkdirSync)(c,{recursive:!0});let b=new Set;for(let d of(0,e.readdirSync)(c))if(/^\d+$/.test(d)){if(j(c,d)===a)return Number(d);b.add(Number(d))}for(let d=0;d<1024;d++)if(!b.has(d)&&function(a,b,c){try{return(0,e.writeFileSync)((0,g.join)(a,String(b)),`${c}
|
|
5
|
-
`,{encoding:"utf8",flag:"wx"}),!0}catch(d){if("EEXIST"!==d.code)throw d;return j(a,String(b))===c}}(c,d,a))return d;h.warn("worktree-index-exhausted",{worktreeId:a,root:c})}catch(b){h.warn("worktree-index-unavailable",{worktreeId:a,root:c,error:b instanceof Error?b.message:String(b)})}return Number.parseInt((0,d.createHash)("sha256").update(a).digest("hex").slice(0,8),16)%1024}},74985:(a,b,c)=>{c.d(b,{Uq:()=>
|
|
6
|
-
${function(a){let b=[];for(let c of a.probes){let a=
|
|
7
|
-
UNKNOWN is not a pass: at least one probe could not be compared, so the environment was not measured.`,null):e("failed",`${
|
|
5
|
+
`,{encoding:"utf8",flag:"wx"}),!0}catch(d){if("EEXIST"!==d.code)throw d;return j(a,String(b))===c}}(c,d,a))return d;h.warn("worktree-index-exhausted",{worktreeId:a,root:c})}catch(b){h.warn("worktree-index-unavailable",{worktreeId:a,root:c,error:b instanceof Error?b.message:String(b)})}return Number.parseInt((0,d.createHash)("sha256").update(a).digest("hex").slice(0,8),16)%1024}},74985:(a,b,c)=>{c.d(b,{Uq:()=>n,uT:()=>E,vQ:()=>v});var d=c(79646),e=c(29021),f=c(33873),g=c(88807),h=c(73753),i=c(40964),j=c(15194),k=c(77142),l=c(90384);let m=`options.requireEnvClean (${l.aT})`;function n(a,b){let c=[];return b?.options.requireEnvClean&&c.push(m),a&&!0===a.success.requireEnvClean&&c.push("success.requireEnvClean (task contract)"),{required:c.length>0,sources:c}}function o(a,b){let c=(0,i.NN)(a);if(!c)return"unattributed";let d=c.rest;return d===b||d.startsWith(`${b}-`)?"self":"other"}function p(a,b){if(!a)return"unattributed";let c=(0,f.resolve)(b),d=(0,f.resolve)(a);if(d===c||d.startsWith(c+f.sep))return"self";let e=(0,f.dirname)(c);return d!==e&&d.startsWith(e+f.sep)?"other":"unattributed"}let q=a=>{try{process.kill(a,0)}catch(a){if("EPERM"!==a.code)return null}if("linux"===process.platform)try{return(0,e.readlinkSync)(`/proc/${a}/cwd`)}catch{return null}try{let b=(0,d.execFileSync)("lsof",["-a","-d","cwd","-p",String(a),"-F","n"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).split("\n").find(a=>a.startsWith("n"));return b?b.slice(1):null}catch{return null}},r=/^\.commandmate-demo-vitest-([1-9]\d*)$/,s=a=>{try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}};function t(a){let b=r.exec(a);if(!b)return null;let c=Number(b[1]);return Number.isSafeInteger(c)?c:null}function u(a,b,c,d){switch(a){case"tmux-sessions":return o(b.key,c.worktreeId);case"listeners":return p(b.anchor,c.worktreePath);case"home-entries":return function(a,b,c=q){let d=t(a);return null===d?"unattributed":"other"===p(c(d),b)?"other":"unattributed"}(b.key,c.worktreePath,d);default:return"unattributed"}}function v(a,b,c={namespace:(0,i.s4)(),legacyAliasOf:a=>{let b=(0,i.NN)(a);if(b)try{let c=(0,i.mf)(b.cliToolId,b.rest);return c!==a?c:void 0}catch{return}},repositoryOf:a=>{try{return(0,h.getWorktreeById)((0,g.getDbInstance)(),a)?.repositoryPath||null}catch{return null}}},d=s){return{...a,taskSession:function(a){if(!(0,j.hR)(a.cliToolId))return null;try{return(0,i.mf)(a.cliToolId,a.worktreeId,a.instanceId??void 0)}catch{return null}}(b),otherServerSessions:function(a,b){if(null===b.namespace)return null;let c=a.probes["tmux-sessions"];return c&&"ok"===c.status?c.entries.map(a=>a.key).filter(a=>w(a,b)):[]}(a,c),otherRepositorySessions:function(a,b,c){if(null===c.namespace||!c.repositoryOf)return null;let d=c.repositoryOf(b);if(!d)return null;let e=a.probes["tmux-sessions"];return e&&"ok"===e.status?e.entries.map(a=>a.key).filter(a=>{if("other"!==o(a,b)||w(a,c))return!1;let e=(0,i.NN)(a);if(!e)return!1;let f=function(a,b){let c=b.repositoryOf;if(!c)return null;let d=new Set,e=a.indexOf("-");for(;;){let b=c(-1===e?a:a.slice(0,e));if(b&&d.add(b),-1===e)break;e=a.indexOf("-",e+1)}return 1===d.size?[...d][0]:null}(e.rest,c);return null!==f&&f!==d}):[]}(a,b.worktreeId,c),deadDemoVitestEntries:function(a,b=s){let c=a.probes["home-entries"];return c&&"ok"===c.status?c.entries.map(a=>a.key).filter(a=>{let c=t(a);return null!==c&&!b(c)}):[]}(a,d)}}function w(a,b){let c;if(null===b.namespace)return!1;let d=(0,i.NN)(a);if(!d)return!1;if(null!==d.namespace)return d.namespace!==b.namespace;try{c=(0,i.Ze)(b.namespace,d.cliToolId,d.rest)}catch{return!0}return b.legacyAliasOf(c)!==a}function x(a,b){return{key:a.key,detail:a.detail,owner:b}}function y(a,b){let c=b.slice(0,25),d=b.length-c.length,e=c.map(b=>{let c=b.detail?` ${b.detail}`:"";return` ${a} ${b.key}${c} [${b.owner}]`});return d>0&&e.push(` ... and ${d} more`),e}function z(a){return a.map(a=>{let b=a.detail?` ${a.detail}`:"";return` + ${a.key}${b} [task session, excused]`})}function A(a){return a.map(a=>` \xb7 - ${a.key} (ignored: another CommandMate server's session, recorded at task start)`)}function B(a){return a.map(a=>` \xb7 - ${a.key} (ignored: a worktree of another repository on this server, recorded at task start)`)}function C(a){return a.map(a=>` \xb7 - ${a.key} (ignored: its pid was already dead at task start — a leftover swept by the demo-video tests)`)}function D(a){if(0===a.length)return[];let b=a.map(a=>a.key).join(", ");return[` ignored (options.envCleanIgnoreHomeEntries): ${b}`]}async function E(a){var b;let c,d=Date.now(),e=(a,b,c)=>({status:a,exitCode:c,startedAt:d,durationMs:Date.now()-d,logTail:b});if(!a.baseline)return e("error",function(a,b){let c=a?`task ${a}`:"this run",d=b.length>0?b.join(" and "):"nothing";return`${l.Q5}: UNKNOWN — no baseline snapshot exists for ${c}, so nothing can be compared. This is NOT "the environment is unchanged": no measurement was taken. A baseline is recorded when the task is created (\`send --contract\`) and only while the gate is switched on (currently: ${d}). Switch it on, then re-send the task.`+(a?"":" To re-verify this worktree's contract task (this run is not attached to a task), run `commandmate verify <worktree> --task <id>`.")}(a.taskId,a.sources),null);let f=a.capture??(()=>(0,k._8)({worktreeId:a.worktreeId}));try{c=await f()}catch(a){return e("error",`${l.Q5}: UNKNOWN — the current snapshot could not be taken: ${a instanceof Error?a.message:String(a)}`,null)}let g=function(a,b,c,d={}){let e=function(a){if(!("taskSession"in a))return;let b=a.taskSession;return"string"==typeof b&&""!==b?b:null}(a),f=function(a){let b=a.otherServerSessions;return Array.isArray(b)?new Set(b.filter(a=>"string"==typeof a)):new Set}(a),g=function(a){let b=a.otherRepositorySessions;return Array.isArray(b)?new Set(b.filter(a=>"string"==typeof a)):new Set}(a),h=function(a){let b=a.deadDemoVitestEntries;return Array.isArray(b)?new Set(b.filter(a=>"string"==typeof a&&null!==t(a))):new Set}(a),i=new Set(d.ignoreHomeEntries??[]),j=d.resolvePidCwd??q,l=k.I1.map(d=>{let k=a.probes[d],l=b.probes[d];if(!k||"ok"!==k.status)return{probeId:d,status:"unknown",reason:`baseline probe unavailable: ${k?.reason??"not recorded"}`,added:[],ignoredAdded:[],taskSessionAdded:[],removed:[],removedByOtherServer:[],removedByOtherRepository:[],removedStaleDemoVitest:[],ignoredByConfig:[]};if(!l||"ok"!==l.status)return{probeId:d,status:"unknown",reason:`current probe unavailable: ${l?.reason??"not recorded"}`,added:[],ignoredAdded:[],taskSessionAdded:[],removed:[],removedByOtherServer:[],removedByOtherRepository:[],removedStaleDemoVitest:[],ignoredByConfig:[]};let m=new Set(k.entries.map(a=>a.key)),n=new Set(l.entries.map(a=>a.key)),o=a=>"home-entries"===d&&i.has(a.key),p=[],q=[],r=[],s=[];for(let a of l.entries){if(m.has(a.key))continue;let b=u(d,a,c,j);if(o(a)){s.push(x(a,b));continue}if("tmux-sessions"===d&&e&&a.key===e){r.push(x(a,b));continue}("other"===b?q:p).push(x(a,b))}let t="tmux-sessions"===d&&l.entries.some(a=>m.has(a.key)||null!==e&&a.key===e),v=[],w=[],y=[],z=[];for(let a of k.entries){if(n.has(a.key))continue;let b=x(a,u(d,a,c,j));o(a)?s.push(b):t&&"self"!==b.owner&&f.has(a.key)?w.push(b):t&&"other"===b.owner&&g.has(a.key)?y.push(b):"home-entries"===d&&h.has(a.key)?z.push(b):v.push(b)}return{probeId:d,status:p.length+v.length>0?"violated":"clean",reason:null,added:p,ignoredAdded:q,taskSessionAdded:r,removed:v,removedByOtherServer:w,removedByOtherRepository:y,removedStaleDemoVitest:z,ignoredByConfig:s}});return{status:l.some(a=>"violated"===a.status)?"violated":l.some(a=>"unknown"===a.status)?"unknown":"clean",taskSession:e,probes:l}}(a.baseline,c,a,{ignoreHomeEntries:a.ignoreHomeEntries,resolvePidCwd:a.resolvePidCwd}),h=`${l.Q5}: baseline=${new Date(a.baseline.capturedAt).toISOString()} status=${g.status} task-session=${void 0===(b=g.taskSession)?"unrecorded (baseline predates #2472; nothing excused)":null===b?"unresolved (nothing excused)":b}`,i=`${h}
|
|
6
|
+
${function(a){let b=[];for(let c of a.probes){let a=k.J6[c.probeId];if("unknown"===c.status){b.push(` ${c.probeId} UNKNOWN (${a}): ${c.reason??"no reason recorded"}`);continue}if("clean"===c.status){let d=c.ignoredAdded.length>0?` (${c.ignoredAdded.length} addition(s) attributed to another worktree)`:"";b.push(` ${c.probeId} clean (${a})${d}`),b.push(...z(c.taskSessionAdded)),b.push(...A(c.removedByOtherServer)),b.push(...B(c.removedByOtherRepository)),b.push(...C(c.removedStaleDemoVitest)),b.push(...D(c.ignoredByConfig));continue}for(let d of(b.push(` ${c.probeId} VIOLATED (${a}): +${c.added.length} -${c.removed.length}`),b.push(...y("+",c.added)),b.push(...y("-",c.removed)),b.push(...z(c.taskSessionAdded)),b.push(...A(c.removedByOtherServer)),b.push(...B(c.removedByOtherRepository)),b.push(...C(c.removedStaleDemoVitest)),b.push(...D(c.ignoredByConfig)),c.ignoredAdded))b.push(` \xb7 ${d.key} (ignored: belongs to another worktree)`)}return b.join("\n")}(g)}`;return"clean"===g.status?e("passed",i,0):"unknown"===g.status?e("error",`${i}
|
|
7
|
+
UNKNOWN is not a pass: at least one probe could not be compared, so the environment was not measured.`,null):e("failed",`${i}
|
|
8
8
|
Anything listed under "+" was started or created during this task and left behind — stop it by PID and remove it. The one exception is a "+" line marked "task session, excused": that is the agent session this delegation itself started, it is not counted, and it must be left running. Anything under "-" existed when the task started and is now gone — it was killed or deleted; restart or restore it. Never stop a process by pattern (\`pkill -f\`): it takes every process whose command line matches, which is how the production server was stopped in #1739.`,1)}},77142:(a,b,c)=>{c.d(b,{I1:()=>m,J6:()=>n,_8:()=>B,dV:()=>F,g9:()=>G});var d=c(79646),e=c(29021),f=c(21820),g=c(33873),h=c(87447),i=c(72626),j=c(49987),k=c(53604);let l=(0,i.h)("lib/verification/env-snapshot"),m=["listeners","tmux-sessions","home-entries","commandmate-entries"],n={listeners:"CommandMate TCP listeners","tmux-sessions":"mcbd-* tmux sessions","home-entries":"$HOME entries","commandmate-entries":"~/.commandmate entries"},o={run:function(a,b){return new Promise(c=>{(0,d.execFile)(a,b,{timeout:5e3,maxBuffer:4194304,encoding:"utf8"},(b,d,e)=>b?"number"!=typeof b.code||b.killed?void c({code:null,stdout:d,stderr:e,failure:b.killed?`${a} exceeded 5000ms and was terminated`:`${a} could not be run: ${b.message}`}):void c({code:b.code,stdout:d,stderr:e,failure:null}):void c({code:0,stdout:d,stderr:e,failure:null}))})},readDir:a=>(0,e.readdirSync)(a),homeDir:()=>(0,f.homedir)()},p=/commandmate|dist\/server\/server\.js|next-server|next (dev|start)|server\.ts/i,q=new Set(["node","nodejs","bun","tsx","ts-node","npx","next"]),r=/^(commandmate(\.js)?|next-server)$/i;function s(a){let b=[],c=null;for(let d of a.split("\n")){if(""===d)continue;let a=d[0],e=d.slice(1);if("p"===a){let a=Number(e);if(!Number.isInteger(a)){c=null;continue}c={pid:a,fields:new Map},b.push(c);continue}if(!c)continue;let f=c.fields.get(a);f?f.push(e):c.fields.set(a,[e])}return b}function t(a){return{status:"unavailable",entries:[],reason:a}}function u(a){let b=new Map;for(let c of a)b.has(c.key)||b.set(c.key,c);return{status:"ok",entries:[...b.values()].sort((a,b)=>a.key<b.key?-1:+(a.key>b.key)),reason:null}}async function v(a){let b=await a.run("lsof",["-nP","-iTCP","-sTCP:LISTEN","-F","pcn"]);if(null!==b.failure)return t(b.failure);if(0!==b.code&&1!==b.code)return t(`lsof exited ${b.code}: ${b.stderr.trim()||"no diagnostic output"}`);let c=s(b.stdout);if(0===c.length)return u([]);let d=await a.run("ps",["-A","-o","pid=,command="]);if(null!==d.failure||0!==d.code)return t(d.failure??`ps exited ${d.code}: ${d.stderr.trim()||"no diagnostic output"}`);let e=function(a){let b=new Map;for(let c of a.split("\n")){let a=/^\s*(\d+)\s+(.*)$/.exec(c);a&&b.set(Number(a[1]),a[2].trim())}return b}(d.stdout),f=c.filter(a=>{let b=e.get(a.pid);return void 0!==b&&function(a){if(!p.test(a))return!1;let[b,...c]=a.trim().split(/\s+/);if(!b)return!1;let d=(0,g.basename)(b);if(r.test(d))return!0;if(!q.has(d.toLowerCase()))return!1;let e=[d,...c.filter(a=>!a.startsWith("-"))];return e.some((a,b)=>!!(b>0&&function(a){let b=(0,g.basename)(a);return/(^|\/)dist\/server\/server\.js$/.test(a)||"server.ts"===b||/^commandmate(\.js)?$/i.test(b)}(a))||"next"===(0,g.basename)(a)&&/^(dev|start)$/.test(e[b+1]??""))}(b)});if(0===f.length)return u([]);let h=new Map,i=f.map(a=>String(a.pid)),j=await a.run("lsof",["-a","-d","cwd","-p",i.join(","),"-F","pn"]);if(null===j.failure&&(0===j.code||1===j.code))for(let a of s(j.stdout)){let[b]=a.fields.get("n")??[];b&&h.set(a.pid,b)}let k=[];for(let a of f){let b=a.fields.get("c")?.[0]??"unknown";for(let c of a.fields.get("n")??[]){let d=function(a){let b=a.lastIndexOf(":");if(b<0)return null;let c=a.slice(b+1);return/^\d+$/.test(c)?c:null}(c);d&&k.push({key:`tcp/${d}`,detail:`${b} pid=${a.pid}`,anchor:h.get(a.pid)??null})}}return u(k)}async function w(a){let b=await a.run("tmux",["list-sessions","-F","#{session_name}"]);return null!==b.failure?t(b.failure):0!==b.code?/no server running|error connecting to|no sessions/i.test(b.stderr)?u([]):t(`tmux list-sessions exited ${b.code}: ${b.stderr.trim()||"no diagnostic output"}`):u(b.stdout.split("\n").map(a=>a.trim()).filter(a=>a.startsWith("mcbd-")).map(a=>({key:a,detail:null,anchor:null})))}let x=[/-wal$/,/-shm$/,/-journal$/,/^\.DS_Store$/],y="env-snapshots",z=[j.Iq,k.L8];function A(a,b,{missingIsEmpty:c,alsoIgnored:d=[]}){let e;try{e=a.readDir(b)}catch(d){let a=d.code;if(c&&"ENOENT"===a)return u([]);return t(`could not list ${b}: ${d.message}`)}return u(e.filter(a=>!(a===y||x.some(b=>b.test(a)))&&!d.includes(a)).map(a=>({key:a,detail:null,anchor:null})))}async function B(a){let b=a.deps??o,[c,d]=await Promise.all([v(b).catch(a=>t(`listeners probe threw: ${a.message}`)),w(b).catch(a=>t(`tmux probe threw: ${a.message}`))]);return{version:1,capturedAt:a.now??Date.now(),worktreeId:a.worktreeId,probes:{listeners:c,"tmux-sessions":d,"home-entries":A(b,b.homeDir(),{missingIsEmpty:!1}),"commandmate-entries":A(b,(0,g.join)(b.homeDir(),".commandmate"),{missingIsEmpty:!0,alsoIgnored:z})}}}function C(){return(0,g.join)((0,g.dirname)((0,h._$)().CM_DB_PATH),y)}let D=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function E(a,b){return D.test(b)?(0,g.join)(a,`${b}.json`):null}function F(a,b,c=C()){let d=E(c,a);if(!d)return l.warn("env-snapshot-rejected-task-id",{taskId:a}),!1;try{return(0,e.mkdirSync)(c,{recursive:!0,mode:448}),(0,e.writeFileSync)(d,JSON.stringify(b),{encoding:"utf8",mode:384}),!function(a,b){let c;try{c=(0,e.readdirSync)(a)}catch{return}for(let d of c){if(!d.endsWith(".json"))continue;let c=(0,g.join)(a,d);try{b-(0,e.statSync)(c).mtimeMs>2592e6&&(0,e.rmSync)(c,{force:!0})}catch{}}}(c,b.capturedAt),!0}catch(b){return l.warn("env-snapshot-write-failed",{taskId:a,error:b instanceof Error?b.message:String(b)}),!1}}function G(a,b=C()){let c=E(b,a);if(!c)return null;try{let a=JSON.parse((0,e.readFileSync)(c,"utf8"));if(!function(a){if("object"!=typeof a||null===a||1!==a.version||"number"!=typeof a.capturedAt)return!1;let b=a.probes;return"object"==typeof b&&null!==b&&m.every(a=>{var c;return"object"==typeof(c=b[a])&&null!==c&&("ok"===c.status||"unavailable"===c.status)&&Array.isArray(c.entries)})}(a))return null;return a}catch{return null}}},90384:(a,b,c)=>{c.d(b,{D:()=>n,Q5:()=>i,Tc:()=>l,UL:()=>y,Yp:()=>s,aT:()=>k,iE:()=>j,le:()=>h,sN:()=>m,uz:()=>g,yR:()=>z});var d=c(29021),e=c(33873),f=c(4689);let g="work-evidence",h="scope",i="env-clean",j=[g,h,i],k=".commandmate/verify.yaml";function l(a,b=[]){return[g,h,...a.options.requireEnvClean?[i]:[],...a.gates.map(a=>a.id),...b.map(a=>a.id)]}let m=600,n=/^[a-z0-9][a-z0-9-]{0,31}$/,o=/^[A-Za-z0-9_.-]+$/,p=["version","gates","options"],q=["id","command","timeoutSec","mutex","retryOnFail","flakyIsPass"],r=["baseRef","skipInPrimaryCheckout","maxLogTailBytes","requireCommit","requireEnvClean","envCleanIgnoreHomeEntries"];class s extends Error{constructor(a){super(`invalid verify config:
|
|
9
9
|
${a.map(a=>` - ${a}`).join("\n")}`),this.name="VerifyConfigError",this.issues=a}}function t(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function u(a){return"number"==typeof a?Number.isInteger(a)?a:null:"string"==typeof a&&/^-?\d+$/.test(a)?Number(a):null}function v(a){return"boolean"==typeof a?a:"true"===a||"false"!==a&&null}function w(a){return void 0===a?"nothing":null===a?"null":"string"==typeof a?JSON.stringify(a):Array.isArray(a)?"a list":"object"==typeof a?"a mapping":String(a)}function x(a,b,c,d){for(let e of Object.keys(a))b.includes(e)||d.push(`${c}: unknown key "${e}" (v1 is a closed set)`)}function y(a,b,c){if(!Array.isArray(a))return c.push(`${b}: must be a list (got ${w(a)})`),[];let d=[],e=new Set;return a.forEach((a,f)=>{!function(a,b,c,d,e){let f,g,h,i=e.length;if(!t(a))return e.push(`${b}: must be a mapping (got ${w(a)})`);x(a,q,b,e),"string"!=typeof a.id||""===a.id?e.push(`${b}.id: required, must be a non-empty string (got ${w(a.id)})`):n.test(a.id)?j.includes(a.id)?e.push(`${b}.id: "${a.id}" is reserved for a built-in gate`):c.has(a.id)?e.push(`${b}.id: duplicate gate id "${a.id}"`):c.add(a.id):e.push(`${b}.id: "${a.id}" must match ${n.source}`),("string"!=typeof a.command||""===a.command.trim())&&e.push(`${b}.command: required, must be a non-empty string (got ${w(a.command)})`);let k=m;if(void 0!==a.timeoutSec){let c=u(a.timeoutSec);null===c?e.push(`${b}.timeoutSec: must be an integer (got ${w(a.timeoutSec)})`):c<1||c>7200?e.push(`${b}.timeoutSec: must be 1..7200 (got ${c})`):k=c}if(void 0!==a.mutex&&("string"!=typeof a.mutex||""===a.mutex?e.push(`${b}.mutex: must be a non-empty string (got ${w(a.mutex)})`):a.mutex.length>64?e.push(`${b}.mutex: must be at most 64 characters (got ${a.mutex.length})`):o.test(a.mutex)?f=a.mutex:e.push(`${b}.mutex: "${a.mutex}" must match ${o.source}`)),void 0!==a.retryOnFail){let c=u(a.retryOnFail);null===c?e.push(`${b}.retryOnFail: must be an integer (got ${w(a.retryOnFail)})`):c<0||c>1?e.push(`${b}.retryOnFail: must be 0 or 1 (got ${c})`):g=c}if(void 0!==a.flakyIsPass){let c=v(a.flakyIsPass);null===c?e.push(`${b}.flakyIsPass: must be true or false (got ${w(a.flakyIsPass)})`):c&&1!==g?e.push(`${b}.flakyIsPass: true requires retryOnFail: 1 (without a retry a gate can never be FLAKY)`):h=c}if(e.length===i){let b={id:a.id,command:a.command,timeoutSec:k};void 0!==f&&(b.mutex=f),void 0!==g&&(b.retryOnFail=g),void 0!==h&&(b.flakyIsPass=h),d.push(b)}}(a,`${b}[${f}]`,e,d,c)}),d}function z(a){let b,c=(0,e.join)(a,k);try{b=(0,d.readFileSync)(c,"utf8")}catch(a){if("ENOENT"===a.code)return null;throw new s([`${c}: ${a.message}`])}return function(a,b){var c;let d;try{d=(0,f.qg)(a)}catch(a){throw new s([`${b}: YAML parse error: ${a.message}`])}if(!t(d))throw new s([`${b}: expected a YAML mapping at the top level (got ${w(d)})`]);let e=[];x(d,p,"top level",e),"version"in d?1!==u(d.version)&&e.push(`version: must be 1 (got ${w(d.version)})`):e.push('version: required, v1 configs must declare "version: 1"');let g=(c=d.gates,null==c?(e.push("gates: required, at least one gate must be defined"),[]):Array.isArray(c)&&0===c.length?(e.push("gates: at least one gate must be defined"),[]):y(c,"gates",e)),h=function(a,b){let c={baseRef:null,skipInPrimaryCheckout:!0,maxLogTailBytes:8192,requireCommit:!1,requireEnvClean:!1,envCleanIgnoreHomeEntries:[]};if(null==a)return c;if(!t(a))return b.push(`options: must be a mapping (got ${w(a)})`),c;if(x(a,r,"options",b),void 0!==a.baseRef&&("string"!=typeof a.baseRef||""===a.baseRef.trim()?b.push(`options.baseRef: must be a non-empty string (got ${w(a.baseRef)})`):c.baseRef=a.baseRef),void 0!==a.skipInPrimaryCheckout){let d=v(a.skipInPrimaryCheckout);null===d?b.push(`options.skipInPrimaryCheckout: must be true or false (got ${w(a.skipInPrimaryCheckout)})`):c.skipInPrimaryCheckout=d}if(void 0!==a.requireCommit){let d=v(a.requireCommit);null===d?b.push(`options.requireCommit: must be true or false (got ${w(a.requireCommit)})`):c.requireCommit=d}if(void 0!==a.requireEnvClean){let d=v(a.requireEnvClean);null===d?b.push(`options.requireEnvClean: must be true or false (got ${w(a.requireEnvClean)})`):c.requireEnvClean=d}if(void 0!==a.envCleanIgnoreHomeEntries){let d=function(a,b){let c="options.envCleanIgnoreHomeEntries";if(!Array.isArray(a))return b.push(`${c}: must be a list of $HOME entry names (got ${w(a)})`),null;let d=b.length;a.length>32&&b.push(`${c}: at most 32 entries (got ${a.length})`);let e=[];return a.forEach((a,d)=>{let f=`${c}[${d}]`;"string"!=typeof a?b.push(`${f}: must be a string (got ${w(a)})`):""===a?b.push(`${f}: must not be empty`):"."===a||".."===a?b.push(`${f}: must be an entry name, not ${JSON.stringify(a)}`):a.includes("/")||a.includes("\0")?b.push(`${f}: must be a single $HOME entry name without "/" or NUL (got ${w(a)})`):e.push(a)}),b.length===d?e:null}(a.envCleanIgnoreHomeEntries,b);d&&(c.envCleanIgnoreHomeEntries=d)}if(void 0!==a.maxLogTailBytes){let d=u(a.maxLogTailBytes);null===d?b.push(`options.maxLogTailBytes: must be an integer (got ${w(a.maxLogTailBytes)})`):d<0||d>1048576?b.push(`options.maxLogTailBytes: must be 0..1048576 (got ${d})`):c.maxLogTailBytes=d}return c}(d.options,e);if(e.length>0)throw new s(e);return{version:1,gates:g,options:h}}(b,c)}}};
|