commandmate 0.47.2 → 0.48.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 +215 -215
- package/.next/app-path-routes-manifest.json +41 -41
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +3 -3
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +12 -12
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +41 -41
- package/.next/server/chunks/1191.js +11 -4
- package/.next/server/chunks/1501.js +1 -1
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1945.js +3 -3
- package/.next/server/chunks/1990.js +103 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2422.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2534.js +1 -1
- package/.next/server/chunks/255.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3505.js +2 -2
- package/.next/server/chunks/4248.js +1 -1
- package/.next/server/chunks/4280.js +1 -0
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/6119.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +9 -8
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/720.js +103 -0
- package/.next/server/chunks/7604.js +2 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +7 -7
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8807.js +19 -18
- package/.next/server/chunks/8918.js +2 -104
- package/.next/server/chunks/936.js +1 -1
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9540.js +1 -1
- package/.next/server/chunks/9627.js +3 -3
- package/.next/server/chunks/9731.js +2 -2
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2099-c3e0ab70a1b95dd3.js +1 -0
- package/.next/static/chunks/{2407-a6533805a86d05bd.js → 2407-26139a8a2f1adbe8.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/{2863-6a07ec82fb52f4dd.js → 2863-f0121af1cbbedb3b.js} +1 -1
- package/.next/static/chunks/{8165-263172c17ae8e8c3.js → 8165-c68b3dc844210e6a.js} +1 -1
- package/.next/static/chunks/8407-35bbfc84793d7004.js +1 -0
- package/.next/static/chunks/9079-406b84d3cc891a87.js +1 -0
- package/.next/static/chunks/app/{layout-538d8d2746ad1588.js → layout-46b4cbf07520d9b6.js} +1 -1
- package/.next/static/chunks/app/sessions/page-fb241bed579c67aa.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-cbc7749a33450cc5.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/trace +13 -13
- package/dist/cli/commands/auto-yes.d.ts +24 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +73 -3
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +10 -1
- package/dist/cli/commands/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +5 -3
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +15 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +101 -13
- 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 +27 -0
- package/dist/cli/types/api-responses.d.ts +116 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +4 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/resource-resolvers.d.ts +0 -18
- package/dist/cli/utils/resource-resolvers.d.ts.map +1 -1
- package/dist/cli/utils/resource-resolvers.js +1 -51
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +54 -2
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +33 -2
- package/dist/lib/prompt-observation/types.d.ts +13 -0
- package/dist/lib/prompt-observation/types.d.ts.map +1 -1
- package/dist/server/locales/en/worktree.json +2 -1
- package/dist/server/locales/ja/worktree.json +2 -1
- package/dist/server/src/lib/auto-yes-poller-answer-target.js +38 -0
- package/dist/server/src/lib/auto-yes-poller-keys.js +35 -0
- package/dist/server/src/lib/auto-yes-poller-session-presence.js +26 -0
- package/dist/server/src/lib/auto-yes-poller-tick.js +233 -0
- package/dist/server/src/lib/auto-yes-poller.js +337 -376
- package/dist/server/src/lib/auto-yes-state.js +50 -2
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +107 -14
- package/dist/server/src/lib/db/chat-db.js +5 -1
- package/dist/server/src/lib/db/verification-db.js +23 -2
- package/dist/server/src/lib/detection/option-recommendation.js +120 -0
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice-approval-context.js +290 -0
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +396 -350
- package/dist/server/src/lib/detection/prompt-detector.js +92 -21
- package/dist/server/src/lib/detection/prompt-screen-key.js +60 -0
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +158 -35
- package/dist/server/src/lib/detection/tools/claude/detect.js +111 -10
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +67 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +16 -0
- package/dist/server/src/lib/detection/waiting-screen-reading.js +98 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +7 -0
- package/dist/server/src/lib/polling/auto-yes-confirm-page.js +2 -2
- package/dist/server/src/lib/polling/auto-yes-confirmation-ledger-types.js +3 -0
- package/dist/server/src/lib/polling/auto-yes-confirmation-ledger.js +34 -3
- package/dist/server/src/lib/polling/auto-yes-decision-state.js +195 -0
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +139 -10
- package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +14 -0
- package/dist/server/src/lib/polling/auto-yes-manual-answer.js +122 -0
- package/dist/server/src/lib/polling/auto-yes-option-effect.js +157 -0
- package/dist/server/src/lib/polling/auto-yes-policy.js +11 -5
- package/dist/server/src/lib/polling/auto-yes-poller-capture.js +15 -2
- package/dist/server/src/lib/polling/auto-yes-poller-generation.js +42 -1
- package/dist/server/src/lib/polling/auto-yes-poller-receipt-log.js +42 -5
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +147 -49
- package/dist/server/src/lib/polling/auto-yes-poller-steps.js +172 -2
- package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +2 -2
- package/dist/server/src/lib/polling/auto-yes-question-choice.js +57 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +96 -21
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +33 -2
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +25 -1
- package/dist/server/src/lib/polling/prompt-screen-reading.js +232 -0
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +39 -0
- package/dist/server/src/lib/polling/response-checker.js +133 -43
- package/dist/server/src/lib/prompt-answer-sender.js +104 -10
- package/dist/server/src/lib/push/notification-dedup.js +15 -2
- package/dist/server/src/lib/push/prompt-card-state.js +140 -19
- package/dist/server/src/lib/push/prompt-push-gate.js +158 -12
- package/dist/server/src/lib/push/push-sender.js +23 -3
- package/dist/server/src/lib/push/resolution-push-notifier.js +14 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +139 -17
- package/dist/server/src/lib/realtime/terminal-broadcast.js +16 -0
- package/dist/server/src/lib/session/agent-event-state.js +25 -5
- package/dist/server/src/lib/session/agent-event-turn.js +140 -46
- package/dist/server/src/lib/session/cli-session.js +21 -2
- package/dist/server/src/lib/session/current-output-builder.js +64 -11
- package/dist/server/src/lib/session/send-attempt-state.js +23 -7
- package/dist/server/src/lib/session/waiting-episode-binding-observation.js +289 -0
- package/dist/server/src/lib/session/waiting-episode-binding-resolve.js +38 -0
- package/dist/server/src/lib/session/waiting-episode-binding.js +276 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +307 -17
- package/dist/server/src/lib/session/waiting-episode-verdict.js +174 -0
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +76 -11
- package/dist/server/src/lib/tmux/tmux.js +54 -9
- package/dist/server/src/lib/verification/gate-runner.js +162 -13
- package/dist/server/src/lib/verification/machine-lock.js +5 -0
- package/dist/server/src/lib/ws-server.js +18 -3
- package/dist/server/src/types/auto-yes-answer-mode.js +38 -0
- package/dist/server/src/types/auto-yes-decision.js +61 -0
- package/dist/server/src/types/auto-yes.js +6 -0
- package/dist/server/src/types/prompt-reading.js +32 -0
- package/dist/types/auto-yes-answer-mode.d.ts +35 -0
- package/dist/types/auto-yes-answer-mode.d.ts.map +1 -0
- package/dist/types/auto-yes-answer-mode.js +38 -0
- package/docs/en/user-guide/webapp-guide.md +33 -4
- package/package.json +1 -1
- package/public/sw.js +76 -4
- package/release-notes/0.48.0.json +57 -0
- package/.next/server/chunks/1559.js +0 -2
- package/.next/server/chunks/2460.js +0 -1
- package/.next/server/chunks/5595.js +0 -1
- package/.next/server/chunks/610.js +0 -1
- package/.next/static/chunks/602-1c1488959215e140.js +0 -1
- package/.next/static/chunks/8407-155f84e5ba05f1d5.js +0 -1
- package/.next/static/chunks/9079-24f9fa549ed298f1.js +0 -1
- package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-46aced20b2b1c010.js +0 -1
- /package/.next/static/{etorRtpxbQqqOzdUeXdw2 → PTlAswXLq8PAe2vUJ8dVP}/_buildManifest.js +0 -0
- /package/.next/static/{etorRtpxbQqqOzdUeXdw2 → PTlAswXLq8PAe2vUJ8dVP}/_ssgManifest.js +0 -0
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
"use strict";exports.id=1191,exports.ids=[1191,1296,9358],exports.modules={3915:(a,b,c)=>{c.d(b,{L_:()=>i,jQ:()=>g});var d=c(55511),e=c(36925);let f=(0,e.v)("__notificationDedupLastSent",()=>new Map);function g(a,b=Date.now(),c=3e4){var e;let h=`${a.worktreeId}:${a.kind}`,i=(e=a.content??"",(0,d.createHash)("sha256").update(e).digest("hex")),j=f.get(h);return(!j||j.hash!==i||!(b-j.at<c))&&(f.set(h,{hash:i,at:b}),!0)}let h=(0,e.v)("__waitingPushDedup",()=>new Map);function i(a){let b=`${a.worktreeId}::${a.instanceId}`,c=!0===a.escalated,d=h.get(b)
|
|
1
|
+
"use strict";exports.id=1191,exports.ids=[1191,1296,9358],exports.modules={3915:(a,b,c)=>{c.d(b,{L_:()=>i,jQ:()=>g});var d=c(55511),e=c(36925);let f=(0,e.v)("__notificationDedupLastSent",()=>new Map);function g(a,b=Date.now(),c=3e4){var e;let h=`${a.worktreeId}:${a.kind}`,i=(e=a.content??"",(0,d.createHash)("sha256").update(e).digest("hex")),j=f.get(h);return(!j||j.hash!==i||!(b-j.at<c))&&(f.set(h,{hash:i,at:b}),!0)}let h=(0,e.v)("__waitingPushDedup",()=>new Map);function i(a){let b=`${a.worktreeId}::${a.instanceId}`,c=!0===a.escalated,d=a.episodeId??void 0,e=h.get(b),f=void 0!==e&&(void 0!==e.episodeId&&void 0!==d?e.episodeId===d:e.since===a.since);if(e&&f&&(e.escalated||!c))return void 0===e.episodeId&&void 0!==d&&(e.episodeId=d),!1;let g=d??(f?e?.episodeId:void 0);return h.set(b,{since:a.since,...void 0!==g?{episodeId:g}:{},escalated:c}),!0}},4806:(a,b,c)=>{c.d(b,{Ii:()=>o,_P:()=>r,pI:()=>n,r0:()=>p,zP:()=>q});var d=c(88807),e=c(72626),f=c(36925);let g=(0,e.h)("push/prompt-card-state"),h=(0,f.v)("__promptPushCards",()=>new Map),i=(0,f.v)("__promptPushCardEpisodes",()=>new Map);function j(a){return`push_prompt_card:${a}`}function k(a){return`push_prompt_card_episode:${a}`}function l(a){try{let b=(0,d.getDbInstance)().prepare("SELECT key, value FROM app_settings WHERE key IN (?, ?)").all(j(a),k(a)),c=b.find(b=>b.key===j(a));if(!c)return null;let e=Number.parseInt(c.value,10);if(!Number.isFinite(e))return null;let f=b.find(b=>b.key===k(a));return{at:e,episodeId:function(a,b){if(void 0===a)return null;let c=a.indexOf(":");if(c<0||a.slice(0,c)!==String(b))return null;let d=a.slice(c+1);return""===d?null:d}(f?.value,e)}}catch(b){return g.debug("prompt-card-read-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)}),null}}function m(a){try{return(0,d.getDbInstance)().prepare("DELETE FROM app_settings WHERE key IN (?, ?)").run(j(a),k(a)).changes>0}catch(b){return g.debug("prompt-card-delete-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)}),!1}}function n(a,b=Date.now(),c=null){h.set(a,b),i.set(a,c);try{(0,d.getDbInstance)().prepare(`
|
|
2
2
|
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
3
|
-
VALUES (?, ?, ?, ?)
|
|
3
|
+
VALUES (?, ?, ?, ?), (?, ?, ?, ?)
|
|
4
4
|
ON CONFLICT(key) DO UPDATE SET
|
|
5
5
|
value = excluded.value,
|
|
6
6
|
updated_at = excluded.updated_at
|
|
7
|
-
`).run(
|
|
7
|
+
`).run(j(a),String(b),b,b,k(a),`${b}:${c??""}`,b,b)}catch(b){g.debug("prompt-card-write-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)})}}function o(a,b=Date.now()){try{let c=(0,d.getDbInstance)().prepare(`
|
|
8
|
+
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
9
|
+
VALUES (?, '1', ?, ?)
|
|
10
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
11
|
+
value = CAST(app_settings.value AS INTEGER) + 1,
|
|
12
|
+
updated_at = excluded.updated_at
|
|
13
|
+
RETURNING value
|
|
14
|
+
`).get(`push_prompt_order:${a}`,b,b),e=Number(c?.value);return Number.isSafeInteger(e)&&e>0?e:null}catch(b){return g.debug("prompt-order-advance-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)}),null}}function p(a,b=Date.now()){let c=h.get(a),d=void 0!==c?{at:c,episodeId:i.get(a)??null}:l(a);return null!==d&&(b-d.at>=864e5?(h.delete(a),i.delete(a),m(a),!1):(h.set(a,d.at),i.set(a,d.episodeId),!0))}function q(a){return h.has(a)?i.get(a)??null:l(a)?.episodeId??null}function r(a){i.delete(a);let b=h.delete(a),c=m(a);return b||c}},8532:(a,b,c)=>{c.d(b,{D$:()=>i,W5:()=>j,iS:()=>k});var d=c(55511),e=c(88807);let f=(0,c(72626).h)("push/delivery-health");function g(a){return`push_delivery_health:${(0,d.createHash)("sha256").update(a).digest("hex")}`}function h(a){try{return(0,e.getDbInstance)().prepare("DELETE FROM app_settings WHERE key = ?").run(g(a)).changes>0}catch(a){return f.debug("delivery-health-delete-failed",{error:a instanceof Error?a.message:String(a)}),!1}}function i(a,b=Date.now()){try{let c=(0,e.getDbInstance)().prepare("SELECT value FROM app_settings WHERE key = ?").get(g(a));if(!c)return null;let d=function(a){try{let b=JSON.parse(a);if("object"!=typeof b||null===b||"removed"!==b.state&&"failing"!==b.state||"number"!=typeof b.failureCount||!Number.isFinite(b.failureCount)||"number"!=typeof b.firstFailureAt||!Number.isFinite(b.firstFailureAt)||"number"!=typeof b.lastFailureAt||!Number.isFinite(b.lastFailureAt))return null;let c="number"==typeof b.statusCode&&Number.isFinite(b.statusCode)?b.statusCode:null;return{state:b.state,statusCode:c,failureCount:b.failureCount,firstFailureAt:b.firstFailureAt,lastFailureAt:b.lastFailureAt}}catch{return null}}(c.value);if(null===d)return null;if(b-d.lastFailureAt>=2592e6)return h(a),null;return d}catch(a){return f.debug("delivery-health-read-failed",{error:a instanceof Error?a.message:String(a)}),null}}function j(a,b={},c=Date.now()){let d=i(a,c),h={state:!0===b.removed||d?.state==="removed"?"removed":"failing",statusCode:b.statusCode??null,failureCount:(d?.failureCount??0)+1,firstFailureAt:d?.firstFailureAt??c,lastFailureAt:c};try{(0,e.getDbInstance)().prepare(`
|
|
8
15
|
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
9
16
|
VALUES (?, ?, ?, ?)
|
|
10
17
|
ON CONFLICT(key) DO UPDATE SET
|
|
11
18
|
value = excluded.value,
|
|
12
19
|
updated_at = excluded.updated_at
|
|
13
|
-
`).run(g(a),JSON.stringify(h),h.firstFailureAt,h.lastFailureAt)}catch(a){f.debug("delivery-health-write-failed",{error:a instanceof Error?a.message:String(a)})}return h}function k(a){return h(a)}},25754:(a,b,c)=>{c.d(b,{Xn:()=>e,d9:()=>g,dI:()=>d,gB:()=>f,rv:()=>h});let d=["en","ja"],e="en",f="locale";function g(a){return"string"==typeof a&&d.includes(a)}function h(a,b){return g(a)?a:d.find(a=>(b??"").includes(a))??e}},27519:(a,b,c)=>{c.d(b,{HR:()=>g,lU:()=>f,vB:()=>e});let d={publicKey:"CM_VAPID_PUBLIC_KEY",privateKey:"CM_VAPID_PRIVATE_KEY",subject:"CM_VAPID_SUBJECT"};function e(){let a=process.env[d.publicKey]?.trim(),b=process.env[d.privateKey]?.trim();return a&&b?{publicKey:a,privateKey:b,subject:process.env[d.subject]?.trim()||"https://github.com/Kewton/CommandMate"}:null}function f(){return null!==e()}function g(){return e()?.publicKey??null}},49358:a=>{a.exports=JSON.parse('{"title":"Notifications","description":"Get a push notification when something needs you — a prompt, a failed verification, an upstream API fault, or a session that could not start — even when the app is closed. Completions are optional.","enable":"Enable notifications","enabling":"Enabling…","enabledOnThisDevice":"Notifications are enabled on this device.","unsubscribe":"Unsubscribe this device","types":{"heading":"Notify me about","promptWaiting":"When you need to act","promptWaitingDesc":"A prompt waiting for you, a failed verification gate, an upstream API fault, or a session that could not start. Nothing moves until you do","completion":"Also tell me about completions (optional)","completionDesc":"Ordinary completions that need nothing from you. Off by default on newly registered devices (change it for this device here)"},"defaultsNotice":{"heading":"What changed in notifications","completionChanged":"Ordinary completions that need nothing from you are now off by default on newly registered devices. This device is still on, so they keep arriving.","failuresAdded":"\\"When you need to act\\" now also covers a failed verification gate, an upstream API fault, and a session that could not start. This device receives those too.","adopt":"Use the new default (turn completions off)","keep":"Keep this device as it is","adopted":"Completions turned off on this device","kept":"Left this device\'s settings unchanged"},"permission":{"denied":"Notifications are blocked in your browser settings. Allow them for this site to receive push notifications."},"delivery":{"headingFailing":"This device is not receiving notifications","headingRemoved":"This device was dropped by the push service","failing":"The push service has rejected the last {count} notification(s) for this device (HTTP {status}). Your subscription is intact — nothing was deleted.","failingUnknownStatus":"The push service has rejected the last {count} notification(s) for this device. Your subscription is intact — nothing was deleted.","removed":"The push service reported this subscription as gone (HTTP {status}), so the server stopped sending to it. Turn notifications on again below to re-subscribe.","removedUnknownStatus":"The push service reported this subscription as gone, so the server stopped sending to it. Turn notifications on again below to re-subscribe.","apnsHint":"On iPhone/iPad an HTTP 403 usually means the server\'s CM_VAPID_SUBJECT is not a contact Apple accepts. See docs/user-guide/webapp-guide.md.","since":"First failure: {timestamp}"},"unsupported":"This browser does not support push notifications.","notConfigured":"Push notifications are not configured on this server. Set the VAPID keys to enable them.","ios":{"guidance":"On iPhone/iPad, add this app to your Home Screen and open it from there to enable notifications."},"toast":{"enabled":"Notifications enabled on this device","disabled":"Notifications turned off on this device","error":"Could not enable notifications","updated":"Notification settings updated"},"push":{"promptWaitingWithExcerpt":"Waiting for reply: {excerpt}","promptWaiting":"Waiting for your reply","completionWithExcerpt":"Done: {excerpt}","completion":"Session complete","terminalAttentionWithExcerpt":"Needs attention in the terminal: {excerpt}","terminalAttention":"Needs attention in the terminal","stillWaitingPrompt":"Still waiting for your reply ({minutes} min)","stillWaitingTerminal":"Still needs attention in the terminal ({minutes} min)","failureVerificationWithExcerpt":"Verification failed: {excerpt}","failureVerification":"Verification failed","failureUpstreamWithExcerpt":"Stalled by an upstream API fault: {excerpt}","failureUpstream":"Stalled by an upstream API fault","failureSessionStartWithExcerpt":"Could not start the session: {excerpt}","failureSessionStart":"Could not start the session","failureSessionUnavailableWithExcerpt":"Could not start the session: {excerpt} is not installed","failureSessionUnavailable":"Could not start the session: the CLI tool is not installed","failureWithExcerpt":"Failed: {excerpt}","failure":"Failed","failureAgentSessionWithExcerpt":"The agent stopped with an error: {excerpt}","failureAgentSession":"The agent stopped with an error","promptResolved":"Handled — answered on another device","updateAvailable":"An update for {agent} is available: {version}"},"escalation":{"heading":"Reminder","toggle":"Remind me if still waiting","toggleDesc":"Send one more notification when an agent has been waiting this long. Applies to every device.","threshold":"Remind after","minutes":"{count} min"},"inApp":{"heading":"In-app notifications","waitingToggle":"Waiting toast","waitingToggleDesc":"Show a toast when another worktree starts waiting for you","waitingToast":"{name} is waiting for your input","soundToggle":"Waiting sound","soundToggleDesc":"Play a short chime when a worktree starts waiting for you. Takes effect after you click or press a key on the page."}}')},61191:(a,b,c)=>{c.r(b),c.d(b,{MODEL_CHANGE_TAG_SUFFIX:()=>r,buildExcerpt:()=>t,buildPushPayload:()=>v,notifyPushSubscribers:()=>x,resolvePushLocale:()=>s});var d=c(48975),e=c.n(d),f=c(88807),g=c(43167),h=c(72626),i=c(25754),j=c(49358),k=c(61296),l=c(27519),m=c(8532),n=c(3915),o=c(4806);let p=(0,h.h)("push/sender"),q={en:j.push,ja:k.push},r="model";function s(a){return(0,i.d9)(a)?a:i.Xn}function t(a,b=120){if(!a)return"";let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:c.slice(0,b-1).trimEnd()+"…"}let u={"verification-failed":{withExcerpt:"failureVerificationWithExcerpt",plain:"failureVerification"},"upstream-fault":{withExcerpt:"failureUpstreamWithExcerpt",plain:"failureUpstream"},"session-start-failed":{withExcerpt:"failureSessionStartWithExcerpt",plain:"failureSessionStart"},"session-start-unavailable":{withExcerpt:"failureSessionUnavailableWithExcerpt",plain:"failureSessionUnavailable"},"agent-session-error":{withExcerpt:"failureAgentSessionWithExcerpt",plain:"failureAgentSession"}};function v(a,b=i.Xn,c=Date.now()){let d=t(a.excerpt),e=a.agentName?` (${a.agentName})`:"",f=`${a.worktreeName}${e}`,g=s(b),h=q[g],j=a.modelChange?a.modelChange.body[g]:"prompt"===a.kind?!0===a.resolved?h.promptResolved:function(a,b,c,d){var e;let f="menu"===(e=a.waitingKind)||"unclassified"===e;if(a.escalated){let c=String(Math.max(1,Math.floor((d-(a.waitingSince??d))/6e4)));return(f?b.stillWaitingTerminal:b.stillWaitingPrompt).replace("{minutes}",c)}return f?c?b.terminalAttentionWithExcerpt.replace("{excerpt}",c):b.terminalAttention:c?b.promptWaitingWithExcerpt.replace("{excerpt}",c):b.promptWaiting}(a,h,d,c):"failure"===a.kind?function(a,b,c,d){let e=a.failure?.body?.[d];if(e)return e;let f=a.failure?.reason,g=void 0!==f?u[f]:void 0;return void 0===g?c?b.failureWithExcerpt.replace("{excerpt}",c):b.failure:c?b[g.withExcerpt].replace("{excerpt}",c):b[g.plain]}(a,h,d,g):a.updateAvailable?h.updateAvailable.replace("{agent}",a.updateAvailable.agent).replace("{version}",a.updateAvailable.version):d?h.completionWithExcerpt.replace("{excerpt}",d):h.completion;return{kind:a.kind,title:f,body:j,worktreeId:a.worktreeId,url:a.url??`/worktrees/${a.worktreeId}`,tag:a.modelChange?`${a.worktreeId}:${r}`:`${a.worktreeId}:${a.kind}`,timestamp:c,...a.waitingKind?{waitingKind:a.waitingKind}:{},...!0===a.resolved?{resolved:!0}:{}}}async function w(a,b,c=Date.now()){try{return await e().sendNotification({endpoint:a.endpoint,keys:a.keys},b),(0,m.iS)(a.endpoint)&&p.info("push-delivery-recovered"),!0}catch(e){let b=e.statusCode;if(404===b||410===b)return(0,g.th)((0,f.getDbInstance)(),a.endpoint),(0,m.W5)(a.endpoint,{statusCode:b,removed:!0},c),p.info("push-subscription-removed",{statusCode:b}),!1;let d=(0,m.W5)(a.endpoint,{statusCode:b??null},c);return p.warn("push-send-failed",{statusCode:b??"unknown",consecutiveFailures:d.failureCount}),!1}}async function x(a,b=Date.now()){try{let c=(0,l.vB)();if(!c||!(!0===a.resolved||(a.modelChange?(0,n.jQ)({worktreeId:a.worktreeId,kind:a.kind,content:`${r}:${a.instanceId??a.agentName??""}:${a.modelChange.from}>${a.modelChange.to}`}):"prompt"===a.kind&&"number"==typeof a.waitingSince?(0,n.L_)({worktreeId:a.worktreeId,instanceId:a.instanceId??a.agentName??"",since:a.waitingSince,escalated:a.escalated}):(0,n.jQ)({worktreeId:a.worktreeId,kind:a.kind,content:"failure"===a.kind?a.failure?.signature:a.excerpt}))))return;let d=(0,f.getDbInstance)(),h=(0,g.gn)(d,a.kind);if(0===h.length)return;"prompt"===a.kind&&!0!==a.resolved&&(0,o.pI)(a.worktreeId,b),e().setVapidDetails(c.subject,c.publicKey,c.privateKey);let i=new Map;for(let a of h){let b=s(a.locale),c=i.get(b);c?c.push(a):i.set(b,[a])}let j=(await Promise.all(Array.from(i,([c,d])=>{let e=JSON.stringify(v(a,c,b));return Promise.all(d.map(a=>w(a,e,b)))}))).flat(),k=j.filter(Boolean).length,m=j.length-k;p.info("push-fanout-complete",{kind:a.kind,worktreeId:a.worktreeId,instanceId:a.instanceId??a.agentName,delivered:k,failed:m})}catch(a){p.warn("push-fanout-error",{error:a instanceof Error?a.message:String(a)})}}},61296:a=>{a.exports=JSON.parse('{"title":"通知","description":"対応が必要になったとき(応答待ち・検証の不合格・上流APIの障害・セッションの起動失敗)に、アプリを開いていなくてもプッシュ通知を受け取れます。対応の要らない完了通知は任意です。","enable":"通知を有効にする","enabling":"有効化中…","enabledOnThisDevice":"この端末で通知が有効です。","unsubscribe":"この端末の通知を解除","types":{"heading":"通知する種別","promptWaiting":"対応が必要なとき","promptWaitingDesc":"応答待ち・検証ゲートの不合格・上流APIの障害・セッションの起動失敗。あなたが動かないと進みません","completion":"完了も知らせる(任意)","completionDesc":"対応の要らない正常完了。新しく登録した端末では既定でオフです(この端末の設定はここで変えられます)"},"defaultsNotice":{"heading":"通知の既定が変わりました","completionChanged":"対応の要らない正常完了は、新しく登録した端末では既定でオフになりました。この端末はオンのままなので、これまでどおり届きます。","failuresAdded":"「対応が必要なとき」に、検証ゲートの不合格・上流APIの障害・セッションの起動失敗の3種が加わりました。この端末はこれらも受け取ります。","adopt":"新しい既定にする(完了通知をオフ)","keep":"この端末の設定を保つ","adopted":"完了通知をこの端末でオフにしました","kept":"この端末の設定はそのままにしました"},"permission":{"denied":"ブラウザの設定で通知がブロックされています。このサイトの通知を許可してください。"},"delivery":{"headingFailing":"この端末には通知が届いていません","headingRemoved":"この端末の購読はプッシュサービス側で失効しました","failing":"直近 {count} 件の通知がプッシュサービスに拒否されました(HTTP {status})。購読は削除されていません。","failingUnknownStatus":"直近 {count} 件の通知がプッシュサービスに拒否されました。購読は削除されていません。","removed":"プッシュサービスがこの購読を失効と報告したため(HTTP {status})、送信を停止しました。下のボタンで通知を有効にし直すと再購読できます。","removedUnknownStatus":"プッシュサービスがこの購読を失効と報告したため、送信を停止しました。下のボタンで通知を有効にし直すと再購読できます。","apnsHint":"iPhone / iPad で HTTP 403 が出る場合、サーバーの CM_VAPID_SUBJECT が Apple の受け付けない値になっていることがほとんどです。docs/user-guide/webapp-guide.md を参照してください。","since":"最初の失敗: {timestamp}"},"unsupported":"このブラウザはプッシュ通知に対応していません。","notConfigured":"このサーバーではプッシュ通知が設定されていません。VAPID鍵を設定すると有効になります。","ios":{"guidance":"iPhone/iPadでは、このアプリをホーム画面に追加し、そこから開くと通知を有効にできます。"},"toast":{"enabled":"この端末で通知を有効にしました","disabled":"この端末の通知をオフにしました","error":"通知を有効にできませんでした","updated":"通知設定を更新しました"},"push":{"promptWaitingWithExcerpt":"応答待ち: {excerpt}","promptWaiting":"応答待ちです","completionWithExcerpt":"完了: {excerpt}","completion":"セッションが完了しました","terminalAttentionWithExcerpt":"端末の確認が必要です: {excerpt}","terminalAttention":"端末の確認が必要です","stillWaitingPrompt":"まだ応答待ちです({minutes}分経過)","stillWaitingTerminal":"まだ端末の確認が必要です({minutes}分経過)","failureVerificationWithExcerpt":"検証ゲート不合格: {excerpt}","failureVerification":"検証ゲートに不合格しました","failureUpstreamWithExcerpt":"上流APIの障害で停止しています: {excerpt}","failureUpstream":"上流APIの障害で停止しています","failureSessionStartWithExcerpt":"セッションを起動できませんでした: {excerpt}","failureSessionStart":"セッションを起動できませんでした","failureSessionUnavailableWithExcerpt":"セッションを起動できませんでした: {excerpt} がインストールされていません","failureSessionUnavailable":"セッションを起動できませんでした: CLI ツールがインストールされていません","failureWithExcerpt":"失敗しました: {excerpt}","failure":"失敗しました","failureAgentSessionWithExcerpt":"エージェントがエラーで停止しました: {excerpt}","failureAgentSession":"エージェントがエラーで停止しました","promptResolved":"対応済みです(他の端末で応答されました)","updateAvailable":"{agent} の更新が利用できます: {version}"},"escalation":{"heading":"再通知","toggle":"待ち続けていたら再通知する","toggleDesc":"エージェントが入力待ちのまま指定時間を超えたら、もう1度だけ通知します。すべての端末に適用されます。","threshold":"再通知するまでの時間","minutes":"{count}分"},"inApp":{"heading":"アプリ内通知","waitingToggle":"入力待ちトースト","waitingToggleDesc":"別のワークツリーが入力待ちになったときにトーストを表示します","waitingToast":"{name} が入力待ちです","soundToggle":"入力待ちの通知音","soundToggleDesc":"ワークツリーが入力待ちになったときに短い通知音を鳴らします。ページを一度クリックまたはキー操作すると有効になります。"}}')}};
|
|
20
|
+
`).run(g(a),JSON.stringify(h),h.firstFailureAt,h.lastFailureAt)}catch(a){f.debug("delivery-health-write-failed",{error:a instanceof Error?a.message:String(a)})}return h}function k(a){return h(a)}},25754:(a,b,c)=>{c.d(b,{Xn:()=>e,d9:()=>g,dI:()=>d,gB:()=>f,rv:()=>h});let d=["en","ja"],e="en",f="locale";function g(a){return"string"==typeof a&&d.includes(a)}function h(a,b){return g(a)?a:d.find(a=>(b??"").includes(a))??e}},27519:(a,b,c)=>{c.d(b,{HR:()=>g,lU:()=>f,vB:()=>e});let d={publicKey:"CM_VAPID_PUBLIC_KEY",privateKey:"CM_VAPID_PRIVATE_KEY",subject:"CM_VAPID_SUBJECT"};function e(){let a=process.env[d.publicKey]?.trim(),b=process.env[d.privateKey]?.trim();return a&&b?{publicKey:a,privateKey:b,subject:process.env[d.subject]?.trim()||"https://github.com/Kewton/CommandMate"}:null}function f(){return null!==e()}function g(){return e()?.publicKey??null}},49358:a=>{a.exports=JSON.parse('{"title":"Notifications","description":"Get a push notification when something needs you — a prompt, a failed verification, an upstream API fault, or a session that could not start — even when the app is closed. Completions are optional.","enable":"Enable notifications","enabling":"Enabling…","enabledOnThisDevice":"Notifications are enabled on this device.","unsubscribe":"Unsubscribe this device","types":{"heading":"Notify me about","promptWaiting":"When you need to act","promptWaitingDesc":"A prompt waiting for you, a failed verification gate, an upstream API fault, or a session that could not start. Nothing moves until you do","completion":"Also tell me about completions (optional)","completionDesc":"Ordinary completions that need nothing from you. Off by default on newly registered devices (change it for this device here)"},"defaultsNotice":{"heading":"What changed in notifications","completionChanged":"Ordinary completions that need nothing from you are now off by default on newly registered devices. This device is still on, so they keep arriving.","failuresAdded":"\\"When you need to act\\" now also covers a failed verification gate, an upstream API fault, and a session that could not start. This device receives those too.","adopt":"Use the new default (turn completions off)","keep":"Keep this device as it is","adopted":"Completions turned off on this device","kept":"Left this device\'s settings unchanged"},"permission":{"denied":"Notifications are blocked in your browser settings. Allow them for this site to receive push notifications."},"delivery":{"headingFailing":"This device is not receiving notifications","headingRemoved":"This device was dropped by the push service","failing":"The push service has rejected the last {count} notification(s) for this device (HTTP {status}). Your subscription is intact — nothing was deleted.","failingUnknownStatus":"The push service has rejected the last {count} notification(s) for this device. Your subscription is intact — nothing was deleted.","removed":"The push service reported this subscription as gone (HTTP {status}), so the server stopped sending to it. Turn notifications on again below to re-subscribe.","removedUnknownStatus":"The push service reported this subscription as gone, so the server stopped sending to it. Turn notifications on again below to re-subscribe.","apnsHint":"On iPhone/iPad an HTTP 403 usually means the server\'s CM_VAPID_SUBJECT is not a contact Apple accepts. See docs/user-guide/webapp-guide.md.","since":"First failure: {timestamp}"},"unsupported":"This browser does not support push notifications.","notConfigured":"Push notifications are not configured on this server. Set the VAPID keys to enable them.","ios":{"guidance":"On iPhone/iPad, add this app to your Home Screen and open it from there to enable notifications."},"toast":{"enabled":"Notifications enabled on this device","disabled":"Notifications turned off on this device","error":"Could not enable notifications","updated":"Notification settings updated"},"push":{"promptWaitingWithExcerpt":"Waiting for reply: {excerpt}","promptWaiting":"Waiting for your reply","completionWithExcerpt":"Done: {excerpt}","completion":"Session complete","terminalAttentionWithExcerpt":"Needs attention in the terminal: {excerpt}","terminalAttention":"Needs attention in the terminal","stillWaitingPrompt":"Still waiting for your reply ({minutes} min)","stillWaitingTerminal":"Still needs attention in the terminal ({minutes} min)","failureVerificationWithExcerpt":"Verification failed: {excerpt}","failureVerification":"Verification failed","failureUpstreamWithExcerpt":"Stalled by an upstream API fault: {excerpt}","failureUpstream":"Stalled by an upstream API fault","failureSessionStartWithExcerpt":"Could not start the session: {excerpt}","failureSessionStart":"Could not start the session","failureSessionUnavailableWithExcerpt":"Could not start the session: {excerpt} is not installed","failureSessionUnavailable":"Could not start the session: the CLI tool is not installed","failureWithExcerpt":"Failed: {excerpt}","failure":"Failed","failureAgentSessionWithExcerpt":"The agent stopped with an error: {excerpt}","failureAgentSession":"The agent stopped with an error","promptResolved":"Handled — answered on another device","updateAvailable":"An update for {agent} is available: {version}"},"escalation":{"heading":"Reminder","toggle":"Remind me if still waiting","toggleDesc":"Send one more notification when an agent has been waiting this long. Applies to every device.","threshold":"Remind after","minutes":"{count} min"},"inApp":{"heading":"In-app notifications","waitingToggle":"Waiting toast","waitingToggleDesc":"Show a toast when another worktree starts waiting for you","waitingToast":"{name} is waiting for your input","soundToggle":"Waiting sound","soundToggleDesc":"Play a short chime when a worktree starts waiting for you. Takes effect after you click or press a key on the page."}}')},61191:(a,b,c)=>{c.r(b),c.d(b,{MODEL_CHANGE_TAG_SUFFIX:()=>r,buildExcerpt:()=>t,buildPushPayload:()=>v,notifyPushSubscribers:()=>x,resolvePushLocale:()=>s});var d=c(48975),e=c.n(d),f=c(88807),g=c(43167),h=c(72626),i=c(25754),j=c(49358),k=c(61296),l=c(27519),m=c(8532),n=c(3915),o=c(4806);let p=(0,h.h)("push/sender"),q={en:j.push,ja:k.push},r="model";function s(a){return(0,i.d9)(a)?a:i.Xn}function t(a,b=120){if(!a)return"";let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:c.slice(0,b-1).trimEnd()+"…"}let u={"verification-failed":{withExcerpt:"failureVerificationWithExcerpt",plain:"failureVerification"},"upstream-fault":{withExcerpt:"failureUpstreamWithExcerpt",plain:"failureUpstream"},"session-start-failed":{withExcerpt:"failureSessionStartWithExcerpt",plain:"failureSessionStart"},"session-start-unavailable":{withExcerpt:"failureSessionUnavailableWithExcerpt",plain:"failureSessionUnavailable"},"agent-session-error":{withExcerpt:"failureAgentSessionWithExcerpt",plain:"failureAgentSession"}};function v(a,b=i.Xn,c=Date.now(),d=null){let e=t(a.excerpt),f=a.agentName?` (${a.agentName})`:"",g=`${a.worktreeName}${f}`,h=s(b),j=q[h],k=a.modelChange?a.modelChange.body[h]:"prompt"===a.kind?!0===a.resolved?j.promptResolved:function(a,b,c,d){var e;let f="menu"===(e=a.waitingKind)||"unclassified"===e;if(a.escalated){let c=String(Math.max(1,Math.floor((d-(a.waitingSince??d))/6e4)));return(f?b.stillWaitingTerminal:b.stillWaitingPrompt).replace("{minutes}",c)}return f?c?b.terminalAttentionWithExcerpt.replace("{excerpt}",c):b.terminalAttention:c?b.promptWaitingWithExcerpt.replace("{excerpt}",c):b.promptWaiting}(a,j,e,c):"failure"===a.kind?function(a,b,c,d){let e=a.failure?.body?.[d];if(e)return e;let f=a.failure?.reason,g=void 0!==f?u[f]:void 0;return void 0===g?c?b.failureWithExcerpt.replace("{excerpt}",c):b.failure:c?b[g.withExcerpt].replace("{excerpt}",c):b[g.plain]}(a,j,e,h):a.updateAvailable?j.updateAvailable.replace("{agent}",a.updateAvailable.agent).replace("{version}",a.updateAvailable.version):e?j.completionWithExcerpt.replace("{excerpt}",e):j.completion;return{kind:a.kind,title:g,body:k,worktreeId:a.worktreeId,url:a.url??`/worktrees/${a.worktreeId}`,tag:a.modelChange?`${a.worktreeId}:${r}`:`${a.worktreeId}:${a.kind}`,timestamp:c,...a.waitingKind?{waitingKind:a.waitingKind}:{},...!0===a.resolved?{resolved:!0}:{},..."prompt"===a.kind&&!0!==a.resolved&&a.waitingEpisodeId?{episodeId:a.waitingEpisodeId,..."number"==typeof d?{order:d}:{}}:{},...!0===a.resolved&&a.resolvedEpisodeId?{resolvedEpisodeId:a.resolvedEpisodeId,..."number"==typeof d?{order:d}:{}}:{}}}async function w(a,b,c=Date.now()){try{return await e().sendNotification({endpoint:a.endpoint,keys:a.keys},b),(0,m.iS)(a.endpoint)&&p.info("push-delivery-recovered"),!0}catch(e){let b=e.statusCode;if(404===b||410===b)return(0,g.th)((0,f.getDbInstance)(),a.endpoint),(0,m.W5)(a.endpoint,{statusCode:b,removed:!0},c),p.info("push-subscription-removed",{statusCode:b}),!1;let d=(0,m.W5)(a.endpoint,{statusCode:b??null},c);return p.warn("push-send-failed",{statusCode:b??"unknown",consecutiveFailures:d.failureCount}),!1}}async function x(a,b=Date.now()){try{let c=(0,l.vB)();if(!c||!(!0===a.resolved||(a.modelChange?(0,n.jQ)({worktreeId:a.worktreeId,kind:a.kind,content:`${r}:${a.instanceId??a.agentName??""}:${a.modelChange.from}>${a.modelChange.to}`}):"prompt"===a.kind&&"number"==typeof a.waitingSince?(0,n.L_)({worktreeId:a.worktreeId,instanceId:a.instanceId??a.agentName??"",since:a.waitingSince,episodeId:a.waitingEpisodeId,escalated:a.escalated}):(0,n.jQ)({worktreeId:a.worktreeId,kind:a.kind,content:"failure"===a.kind?a.failure?.signature:a.excerpt}))))return;let d=(0,f.getDbInstance)(),h=(0,g.gn)(d,a.kind);if(0===h.length)return;"prompt"===a.kind&&!0!==a.resolved&&(0,o.pI)(a.worktreeId,b,a.waitingEpisodeId??null);let i="prompt"===a.kind&&(!0===a.resolved?a.resolvedEpisodeId:a.waitingEpisodeId)?(0,o.Ii)(a.worktreeId,b):null;e().setVapidDetails(c.subject,c.publicKey,c.privateKey);let j=new Map;for(let a of h){let b=s(a.locale),c=j.get(b);c?c.push(a):j.set(b,[a])}let k=(await Promise.all(Array.from(j,([c,d])=>{let e=JSON.stringify(v(a,c,b,i));return Promise.all(d.map(a=>w(a,e,b)))}))).flat(),m=k.filter(Boolean).length,q=k.length-m;p.info("push-fanout-complete",{kind:a.kind,worktreeId:a.worktreeId,instanceId:a.instanceId??a.agentName,delivered:m,failed:q})}catch(a){p.warn("push-fanout-error",{error:a instanceof Error?a.message:String(a)})}}},61296:a=>{a.exports=JSON.parse('{"title":"通知","description":"対応が必要になったとき(応答待ち・検証の不合格・上流APIの障害・セッションの起動失敗)に、アプリを開いていなくてもプッシュ通知を受け取れます。対応の要らない完了通知は任意です。","enable":"通知を有効にする","enabling":"有効化中…","enabledOnThisDevice":"この端末で通知が有効です。","unsubscribe":"この端末の通知を解除","types":{"heading":"通知する種別","promptWaiting":"対応が必要なとき","promptWaitingDesc":"応答待ち・検証ゲートの不合格・上流APIの障害・セッションの起動失敗。あなたが動かないと進みません","completion":"完了も知らせる(任意)","completionDesc":"対応の要らない正常完了。新しく登録した端末では既定でオフです(この端末の設定はここで変えられます)"},"defaultsNotice":{"heading":"通知の既定が変わりました","completionChanged":"対応の要らない正常完了は、新しく登録した端末では既定でオフになりました。この端末はオンのままなので、これまでどおり届きます。","failuresAdded":"「対応が必要なとき」に、検証ゲートの不合格・上流APIの障害・セッションの起動失敗の3種が加わりました。この端末はこれらも受け取ります。","adopt":"新しい既定にする(完了通知をオフ)","keep":"この端末の設定を保つ","adopted":"完了通知をこの端末でオフにしました","kept":"この端末の設定はそのままにしました"},"permission":{"denied":"ブラウザの設定で通知がブロックされています。このサイトの通知を許可してください。"},"delivery":{"headingFailing":"この端末には通知が届いていません","headingRemoved":"この端末の購読はプッシュサービス側で失効しました","failing":"直近 {count} 件の通知がプッシュサービスに拒否されました(HTTP {status})。購読は削除されていません。","failingUnknownStatus":"直近 {count} 件の通知がプッシュサービスに拒否されました。購読は削除されていません。","removed":"プッシュサービスがこの購読を失効と報告したため(HTTP {status})、送信を停止しました。下のボタンで通知を有効にし直すと再購読できます。","removedUnknownStatus":"プッシュサービスがこの購読を失効と報告したため、送信を停止しました。下のボタンで通知を有効にし直すと再購読できます。","apnsHint":"iPhone / iPad で HTTP 403 が出る場合、サーバーの CM_VAPID_SUBJECT が Apple の受け付けない値になっていることがほとんどです。docs/user-guide/webapp-guide.md を参照してください。","since":"最初の失敗: {timestamp}"},"unsupported":"このブラウザはプッシュ通知に対応していません。","notConfigured":"このサーバーではプッシュ通知が設定されていません。VAPID鍵を設定すると有効になります。","ios":{"guidance":"iPhone/iPadでは、このアプリをホーム画面に追加し、そこから開くと通知を有効にできます。"},"toast":{"enabled":"この端末で通知を有効にしました","disabled":"この端末の通知をオフにしました","error":"通知を有効にできませんでした","updated":"通知設定を更新しました"},"push":{"promptWaitingWithExcerpt":"応答待ち: {excerpt}","promptWaiting":"応答待ちです","completionWithExcerpt":"完了: {excerpt}","completion":"セッションが完了しました","terminalAttentionWithExcerpt":"端末の確認が必要です: {excerpt}","terminalAttention":"端末の確認が必要です","stillWaitingPrompt":"まだ応答待ちです({minutes}分経過)","stillWaitingTerminal":"まだ端末の確認が必要です({minutes}分経過)","failureVerificationWithExcerpt":"検証ゲート不合格: {excerpt}","failureVerification":"検証ゲートに不合格しました","failureUpstreamWithExcerpt":"上流APIの障害で停止しています: {excerpt}","failureUpstream":"上流APIの障害で停止しています","failureSessionStartWithExcerpt":"セッションを起動できませんでした: {excerpt}","failureSessionStart":"セッションを起動できませんでした","failureSessionUnavailableWithExcerpt":"セッションを起動できませんでした: {excerpt} がインストールされていません","failureSessionUnavailable":"セッションを起動できませんでした: CLI ツールがインストールされていません","failureWithExcerpt":"失敗しました: {excerpt}","failure":"失敗しました","failureAgentSessionWithExcerpt":"エージェントがエラーで停止しました: {excerpt}","failureAgentSession":"エージェントがエラーで停止しました","promptResolved":"対応済みです(他の端末で応答されました)","updateAvailable":"{agent} の更新が利用できます: {version}"},"escalation":{"heading":"再通知","toggle":"待ち続けていたら再通知する","toggleDesc":"エージェントが入力待ちのまま指定時間を超えたら、もう1度だけ通知します。すべての端末に適用されます。","threshold":"再通知するまでの時間","minutes":"{count}分"},"inApp":{"heading":"アプリ内通知","waitingToggle":"入力待ちトースト","waitingToggleDesc":"別のワークツリーが入力待ちになったときにトーストを表示します","waitingToast":"{name} が入力待ちです","soundToggle":"入力待ちの通知音","soundToggleDesc":"ワークツリーが入力待ちになったときに短い通知音を鳴らします。ページを一度クリックまたはキー操作すると有効になります。"}}')}};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";exports.id=1501,exports.ids=[1501],exports.modules={11501:(a,b,c)=>{c.d(b,{Ky:()=>m,RR:()=>p,cI:()=>o,ct:()=>q,fc:()=>k,oX:()=>n});var d=c(90384),e=c(74985);let f=`${d.uz}(commit または未 commit の変更が存在すること)`,g=`${d.uz}(commit が存在すること。未 commit の変更は作業証跡として数えない)`,h=`${d.le}(変更ファイルが scope.allow の内側に収まっていること)`,i=`${d.Q5}(タスク開始時に在ったポート・tmux セッション・$HOME / ~/.commandmate 直下のエントリが、増えても減っても不合格)`,j=`options.requireCommit (${d.aT})`;function k(a,b){let c=[];return b?.options.requireCommit&&c.push(j),a?.success.requireCommit&&c.push("success.requireCommit (task contract)"),{required:c.length>0,sources:c}}let l=[d.uz,d.le,d.Q5];function m(a){let b=a.verify.gates;if(!b)return null;let c=new Map([[d.uz,a.success.requireWorkEvidence],[d.le,a.success.requireScopeClean],[d.Q5,a.success.requireEnvClean]]);return[...l.filter(a=>!0===c.get(a)||b.includes(a)),...b.filter(a=>!l.includes(a))]}function n(a,b){return!!(0,e.Uq)(a,b).required||(m(a)?.includes(d.Q5)??!1)}function o(a){return a.verify.gateDefinitions??[]}function p(a,b){let c=a.verify.gates,e=o(a),f=[];if(!b)return e.length>0&&f.push(`verify.gateDefinitions: declared ${e.map(a=>a.id).join(", ")}, but ${d.aT} is missing or unreadable in this worktree, so no verification run can execute them`),c&&f.push(`verify.gates: declared ${c.join(", ")}, but ${d.aT} is missing or unreadable in this worktree, so the gate ids cannot be resolved`),f;let g=b.gates.map(a=>a.id),h=e.map(a=>a.id).filter(a=>g.includes(a));if(h.length>0&&f.push(`verify.gateDefinitions: gate id(s) ${h.join(", ")} are already declared in ${d.aT}. A contract may add gates, never redefine the repository's own — rename the contract gate.`),c){let a=new Set([d.uz,d.le,d.Q5,...g]),b=new Set(e.map(a=>a.id)),h=c.filter(c=>!a.has(c)&&!b.has(c));if(h.length>0){let c=[`Declared in ${d.aT}: ${[...a].join(", ")}`];b.size>0&&c.push(`in verify.gateDefinitions: ${[...b].join(", ")}`),f.push(`verify.gates: unknown gate id(s) ${h.join(", ")}. ${c.join("; ")}`)}}return f}function q(a,b){let c=["## 実行契約"];c.push(a.scope.allow.length>0?`- 変更してよいのは次のパスのみ: ${a.scope.allow.join(", ")}`:"- 変更パスの制限: なし(scope.allow が未宣言)"),a.scope.deny.length>0&&c.push(`- 変更してはならないパス: ${a.scope.deny.join(", ")}`),c.push(k(a,b).required?"- 作業完了後は必ず commit すること(未 commit の作業は未完了とみなされる)":"- 作業完了後は commit すること(ただし work-evidence は未 commit の変更も作業証跡として認めるため、commit の有無そのものは検査されない)");let j=function(a,b){if(!b)return[];let c=k(a,b).required?g:f,j=new Map([[d.uz,c],[d.le,h],[d.Q5,i]]),n=[...b.gates,...o(a)],p=(0,e.Uq)(a,b).required,q=m(a);if(!q){let b=[c];return a.success.requireScopeClean&&b.push(h),p&&b.push(i),[...b,...n.map(a=>a.command)]}let r=l.filter(a=>q.includes(a)||a===d.Q5&&p),s=q.filter(a=>!l.includes(a)),t=new Map(n.map(a=>[a.id,a.command]));return[...r,...s].map(a=>j.get(a)??t.get(a))}(a,b);return c.push(j.length>0?`- 完了条件: 次の検証コマンドがすべて成功すること: ${j.join(" / ")}`:`- 完了条件: ${d.aT} に検証ゲートが宣言されていないため、検証コマンドは無い`),`${c.join("\n")}
|
|
2
2
|
|
|
3
3
|
## タスク
|
|
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}
|
|
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,t=!1;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)};t||(t=!0,b.onWait?.()),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
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:()=>G,vQ:()=>w});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=/^\.zcompdump(?:\.[A-Za-z0-9._-]+\.[1-9]\d*)?$/,t=a=>{try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}};function u(a){let b=r.exec(a);if(!b)return null;let c=Number(b[1]);return Number.isSafeInteger(c)?c:null}function v(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=u(a);return null===d?"unattributed":"other"===p(c(d),b)?"other":"unattributed"}(b.key,c.worktreePath,d);default:return"unattributed"}}function w(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=t){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=>x(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)||x(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=t){let c=a.probes["home-entries"];return c&&"ok"===c.status?c.entries.map(a=>a.key).filter(a=>{let c=u(a);return null!==c&&!b(c)}):[]}(a,d)}}function x(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 y(a,b){return{key:a.key,detail:a.detail,owner:b}}function z(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 A(a){return a.map(a=>{let b=a.detail?` ${a.detail}`:"";return` + ${a.key}${b} [task session, excused]`})}function B(a){return a.map(a=>` \xb7 - ${a.key} (ignored: another CommandMate server's session, recorded at task start)`)}function C(a){return a.map(a=>` \xb7 - ${a.key} (ignored: a worktree of another repository on this server, recorded at task start)`)}function D(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 E(a){if(0===a.length)return[];let b=a.map(a=>a.key).join(", ");return[` ignored (options.envCleanIgnoreHomeEntries): ${b}`]}function F(a){if(0===a.length)return[];let b=a.map(a=>a.key).join(", ");return[` ignored (built-in): ${b}`]}async function G(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!==u(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:[],ignoredBuiltIn:[]};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:[],ignoredBuiltIn:[]};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=a=>{var b;return"home-entries"===d&&(b=a.key,s.test(b))},q=[],r=[],t=[],u=[],w=[];for(let a of l.entries){if(m.has(a.key))continue;let b=v(d,a,c,j);if(o(a)){u.push(y(a,b));continue}if(p(a)){w.push(y(a,b));continue}if("tmux-sessions"===d&&e&&a.key===e){t.push(y(a,b));continue}("other"===b?r:q).push(y(a,b))}let x="tmux-sessions"===d&&l.entries.some(a=>m.has(a.key)||null!==e&&a.key===e),z=[],A=[],B=[],C=[];for(let a of k.entries){if(n.has(a.key))continue;let b=y(a,v(d,a,c,j));o(a)?u.push(b):p(a)?w.push(b):x&&"self"!==b.owner&&f.has(a.key)?A.push(b):x&&"other"===b.owner&&g.has(a.key)?B.push(b):"home-entries"===d&&h.has(a.key)?C.push(b):z.push(b)}return{probeId:d,status:q.length+z.length>0?"violated":"clean",reason:null,added:q,ignoredAdded:r,taskSessionAdded:t,removed:z,removedByOtherServer:A,removedByOtherRepository:B,removedStaleDemoVitest:C,ignoredByConfig:u,ignoredBuiltIn:w}});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
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(...A(c.taskSessionAdded)),b.push(...B(c.removedByOtherServer)),b.push(...C(c.removedByOtherRepository)),b.push(...D(c.removedStaleDemoVitest)),b.push(...E(c.ignoredByConfig)),b.push(...F(c.ignoredBuiltIn)),b.push(...function(a){if(0===a.length)return[];let b=a.map(a=>a.key).join(", ");return[` ignored (attributed to another worktree): ${b}`]}(c.ignoredAdded));continue}for(let d of(b.push(` ${c.probeId} VIOLATED (${a}): +${c.added.length} -${c.removed.length}`),b.push(...z("+",c.added)),b.push(...z("-",c.removed)),b.push(...A(c.taskSessionAdded)),b.push(...B(c.removedByOtherServer)),b.push(...C(c.removedByOtherRepository)),b.push(...D(c.removedStaleDemoVitest)),b.push(...E(c.ignoredByConfig)),b.push(...F(c.ignoredBuiltIn)),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
7
|
UNKNOWN is not a pass: at least one probe could not be compared, so the environment was not measured.`,null):e("failed",`${i}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";exports.id=1601,exports.ids=[1601],exports.modules={50779:(a,b,c)=>{c.d(b,{GT:()=>m});var d=c(88807),e=c(43167),f=c(73753),g=c(72626),h=c(57836),i=c(4806),j=c(61191),k=c(27519);let l=(0,g.h)("push/resolution");async function m(a){let{worktreeId:b,agentName:c,at:g=Date.now()}=a,m=function(a,b=Date.now()){let c;if(!(0,k.lU)())return{send:!1,reason:"push-unconfigured"};if(!(0,i.r0)(a,b))return{send:!1,reason:"no-card"};if((0,h.Te)(a))return{send:!1,reason:"still-waiting"};try{c=(0,e.rC)((0,d.getDbInstance)(),"prompt")}catch{return{send:!1,reason:"single-device",deviceCount:0}}return c<2?{send:!1,reason:"single-device",deviceCount:c}:{send:!0,reason:"cross-device-clear",deviceCount:c}}(b,g),n={worktreeId:b,instanceId:c,reason:m.reason,...void 0!==m.deviceCount?{deviceCount:m.deviceCount}:{}};if("still-waiting"!==m.reason&&(0,i._P)(b),!m.send)return void("single-device"===m.reason?l.info("resolution-push-skipped",n):l.debug("resolution-push-skipped",n));try{await (0,j.notifyPushSubscribers)({worktreeId:b,worktreeName:function(a){try{return(0,f.getWorktreeById)((0,d.getDbInstance)(),a)?.name??a}catch{return a}}(b),kind:"prompt",agentName:c,resolved:!0},g),l.info("resolution-push-sent",n)}catch(a){l.warn("resolution-push-failed",{...n,error:a instanceof Error?a.message:String(a)})}}},52277:(a,b,c)=>{c.d(b,{FA:()=>
|
|
1
|
+
"use strict";exports.id=1601,exports.ids=[1601],exports.modules={50779:(a,b,c)=>{c.d(b,{GT:()=>m});var d=c(88807),e=c(43167),f=c(73753),g=c(72626),h=c(57836),i=c(4806),j=c(61191),k=c(27519);let l=(0,g.h)("push/resolution");async function m(a){let{worktreeId:b,agentName:c,at:g=Date.now()}=a,m=function(a,b=Date.now()){let c;if(!(0,k.lU)())return{send:!1,reason:"push-unconfigured"};if(!(0,i.r0)(a,b))return{send:!1,reason:"no-card"};if((0,h.Te)(a))return{send:!1,reason:"still-waiting"};try{c=(0,e.rC)((0,d.getDbInstance)(),"prompt")}catch{return{send:!1,reason:"single-device",deviceCount:0}}return c<2?{send:!1,reason:"single-device",deviceCount:c}:{send:!0,reason:"cross-device-clear",deviceCount:c}}(b,g),n={worktreeId:b,instanceId:c,reason:m.reason,...void 0!==m.deviceCount?{deviceCount:m.deviceCount}:{}},o=m.send?(0,i.zP)(b):null;if("still-waiting"!==m.reason&&(0,i._P)(b),!m.send)return void("single-device"===m.reason?l.info("resolution-push-skipped",n):l.debug("resolution-push-skipped",n));try{await (0,j.notifyPushSubscribers)({worktreeId:b,worktreeName:function(a){try{return(0,f.getWorktreeById)((0,d.getDbInstance)(),a)?.name??a}catch{return a}}(b),kind:"prompt",agentName:c,resolved:!0,...null!==o?{resolvedEpisodeId:o}:{}},g),l.info("resolution-push-sent",n)}catch(a){l.warn("resolution-push-failed",{...n,error:a instanceof Error?a.message:String(a)})}}},52277:(a,b,c)=>{c.d(b,{FA:()=>k,WM:()=>j,ZS:()=>h,gb:()=>i});var d=c(24455),e=c(36925),f=c(57836);let g=(0,e.v)("__autoYesPolicySuppressions",()=>new Map);function h(a,b,c,e,i=Date.now()){let{episodeId:j,...k}=e,l=j??(0,f._v)(a,b,c)?.episodeId;g.set((0,d.v7)(a,b,c),{...k,at:i,...void 0!==l?{episodeId:l}:{}})}function i(a,b,c){return g.get((0,d.v7)(a,b,c))??null}function j(a,b,c){return null!=b&&null!==c&&c.episodeId===b&&a.at<c.at}function k(a,b,c){g.delete((0,d.v7)(a,b,c))}},73478:(a,b,c)=>{c.d(b,{I7:()=>A,Zu:()=>u});var d=c(24455),e=c(88807),f=c(73753),g=c(72626),h=c(57836),i=c(80544),j=c(92010),k=c(61191),l=c(50779),m=c(27519),n=c(36925);let o=(0,g.h)("push/waiting-notifier");function p(a){let b=(0,h._v)(a.worktreeId,a.cliToolId,a.instanceId);return null===b?null:(0,j.wy)(b,a)?b:null}let q=(0,n.v)("__waitingPushPending",()=>new Map),r=(0,n.v)("__waitingPushGraceTimers",()=>new Map),s=(0,n.v)("__waitingPushAnswerGraceTimers",()=>new Map),t=(0,n.v)("__waitingPushDeferredGates",()=>new Map);function u(a,b,c){let e=(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId),f=!t.has(e);f&&t.set(e,[]);try{let a=b();return c(a),a}finally{if(f){let a=t.get(e)??[];for(let b of(t.delete(e),a))b()}}}async function v(a,b,c){let d=a.instanceId??a.cliToolId;try{await (0,k.notifyPushSubscribers)({worktreeId:a.worktreeId,worktreeName:function(a){try{return(0,f.getWorktreeById)((0,e.getDbInstance)(),a)?.name??a}catch{return a}}(a.worktreeId),kind:"prompt",agentName:d,instanceId:d,waitingKind:a.kind,waitingSince:a.since,waitingEpisodeId:a.episodeId,escalated:b},c)}catch(c){o.warn("waiting-push-failed",{worktreeId:a.worktreeId,instanceId:d,escalated:b,error:c instanceof Error?c.message:String(c)})}}function w(a){let b=r.get(a);void 0!==b&&(clearTimeout(b),r.delete(a));let c=s.get(a);void 0!==c&&(clearTimeout(c),s.delete(a))}function x(a,b,c=!1){let d=(0,j.W3)({worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,waitingSince:a.since,waitingEpisodeId:a.episodeId,now:b},{recheck:c});if(d.suppress)return void("auto-yes-answering"===d.reason?y(a,b):"auto-yes-answered"===d.reason&&y(a,b,j.Zj));v(a,!1,b)}function y(a,b,c){let e=(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId),f=s.get(e);void 0!==f&&clearTimeout(f);let g=(0,j.D6)({worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,waitingSince:a.since,waitingEpisodeId:a.episodeId},b),h=setTimeout(()=>{s.delete(e),function(a,b){let c=q.get(a);if(void 0===c||!(0,j.wy)(c,b))return;let d=p(c);if(null===d){q.delete(a),(0,j.Vf)(a,{since:c.since,episodeId:c.episodeId}),z();return}let e={...c,kind:d.kind};q.set(a,e),x(e,Date.now(),!0)}(e,a)},c??Math.min(j.Zj,Math.max(0,g-b)));h.unref?.(),s.set(e,h)}function z(){if(q.size>0)return;let a=globalThis.__waitingPushEscalationTimer;void 0!==a&&(clearInterval(a),globalThis.__waitingPushEscalationTimer=void 0)}function A(){let a=globalThis.__waitingPushUnsubscribe;for(let b of(a&&(a(),globalThis.__waitingPushUnsubscribe=void 0),r.values()))clearTimeout(b);for(let a of(r.clear(),s.values()))clearTimeout(a);s.clear(),q.clear(),z();let b=(0,h.Bf)(a=>{!function(a){var b;if(!(0,m.lU)())return;let c=(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId),e="cause"in a?a.cause:null;if(!a.waiting||null===a.since){w(c),q.delete(c),z(),(0,l.GT)({worktreeId:a.worktreeId,agentName:a.instanceId??a.cliToolId,at:a.at});return}if("replaced"===e){let b=q.get(c);w(c),q.delete(c);let d="previousEpisodeId"in a?a.previousEpisodeId:null;(0,j.Vf)(c,{since:b?.since??a.since,episodeId:d??b?.episodeId})}let f={worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,since:a.since,episodeId:function(a){if("episodeId"in a)return a.episodeId;let b=(0,h._v)(a.worktreeId,a.cliToolId,a.instanceId);return null!==b&&b.since===a.since?b.episodeId:null}(a),kind:a.kind};if(q.set(c,f),!function(){if(void 0!==globalThis.__waitingPushEscalationTimer)return;let a=setInterval(()=>{!function(a=Date.now()){if(0===q.size)return z();let b=(0,i.rS)(),c=6e4*b.thresholdMinutes;for(let[d,e]of Array.from(q)){let f=p(e);if(null===f){q.delete(d);continue}b.enabled&&!(a-e.since<c)&&((0,j.R4)({worktreeId:e.worktreeId,cliToolId:e.cliToolId,instanceId:e.instanceId,waitingSince:e.since,waitingEpisodeId:e.episodeId,escalated:!0})||(q.delete(d),v({...e,kind:f.kind??e.kind},!0,a)))}z()}()},6e4);a.unref?.(),globalThis.__waitingPushEscalationTimer=a}(),null==(b=f.kind)||"unclassified"===b){w(c);let a=setTimeout(()=>{!function(a){r.delete(a);let b=q.get(a);if(void 0===b)return;let c=p(b);if(null===c){q.delete(a),z();return}let d={...b,kind:c.kind};q.set(a,d),x(d,Date.now())}(c)},8e3);a.unref?.(),r.set(c,a);return}let g=t.get(c);if(void 0!==g)return g.push(()=>x(f,a.at));x(f,a.at)}(a)});return globalThis.__waitingPushUnsubscribe=b,b}},80544:(a,b,c)=>{c.d(b,{Di:()=>h,O$:()=>g,d7:()=>k,rS:()=>j});var d=c(88807);let e=(0,c(72626).h)("push/escalation-settings"),f="push_escalation",g={enabled:!0,thresholdMinutes:10},h=[5,10,30,60];function i(a){if("object"!=typeof a||null===a)return{...g};let b="boolean"==typeof a.enabled?a.enabled:g.enabled,c=a.thresholdMinutes;return{enabled:b,thresholdMinutes:"number"==typeof c&&Number.isFinite(c)&&c>=1&&c<=1440?Math.round(c):g.thresholdMinutes}}function j(){try{let a=(0,d.getDbInstance)().prepare("SELECT value FROM app_settings WHERE key = ?").get(f);if(!a)return{...g};return i(JSON.parse(a.value))}catch(a){return e.warn("escalation-settings-read-failed",{error:a instanceof Error?a.message:String(a)}),{...g}}}function k(a){let b=i(a),c=Date.now();return(0,d.getDbInstance)().prepare(`
|
|
2
2
|
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
3
3
|
VALUES (?, ?, ?, ?)
|
|
4
4
|
ON CONFLICT(key) DO UPDATE SET
|
|
5
5
|
value = excluded.value,
|
|
6
6
|
updated_at = excluded.updated_at
|
|
7
|
-
`).run(f,JSON.stringify(b),c,c),b}},91601:(a,b,c)=>{c.d(b,{Di:()=>f.Di,HR:()=>d.HR,J$:()=>e.notifyPushSubscribers,O$:()=>f.O$,d7:()=>f.d7,rS:()=>f.rS});var d=c(27519);c(8532);var e=c(61191);c(3915),c(92010),c(81099),c(77703),c(73478);var f=c(80544);c(50779),c(4806),c(55233)},92010:(a,b,c)=>{c.d(b,{D6:()=>
|
|
7
|
+
`).run(f,JSON.stringify(b),c,c),b}},91601:(a,b,c)=>{c.d(b,{Di:()=>f.Di,HR:()=>d.HR,J$:()=>e.notifyPushSubscribers,O$:()=>f.O$,d7:()=>f.d7,rS:()=>f.rS});var d=c(27519);c(8532);var e=c(61191);c(3915),c(92010),c(81099),c(77703),c(73478);var f=c(80544);c(50779),c(4806),c(55233)},92010:(a,b,c)=>{c.d(b,{D6:()=>n,R4:()=>r,Vf:()=>o,W3:()=>s,Zj:()=>j,wy:()=>l});var d=c(24455),e=c(72626),f=c(52277),g=c(36925),h=c(57836);let i=(0,e.h)("push/prompt-gate"),j=Math.max(3*d.ps,d.ZO+2*d.ps),k=(0,g.v)("__promptPushAutoYesHolds",()=>new Map);function l(a,b){let c=a.episodeId??null,d=b.episodeId??null;return null!==c&&null!==d?c===d:a.since===b.since}let m=2*d.ps;function n(a,b){let c=function(a,b){let c=(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId);var e=b;for(let[a,b]of k)e-b.firstHeldAt>=36e5&&k.delete(a);let f=a.waitingEpisodeId??void 0,g=k.get(c);void 0!==g&&l(g,{since:a.waitingSince,episodeId:f})?void 0===g.episodeId&&void 0!==f&&(g.episodeId=f):(g={since:a.waitingSince,...void 0!==f?{episodeId:f}:{},firstHeldAt:b,sessionWaitTick:function(a,b){let c=globalThis.__autoYesPollerStates?.get(a),e=c?.sessionWaitTickAt;if(void 0!==c&&void 0!==e&&!(e<=b))return{at:Math.min(e,b+d.BT),poller:c,heldAt:b}}(c,b)},k.set(c,g));let h=(0,d.aq)(a.worktreeId,a.cliToolId,a.instanceId)?.enabledAt;void 0!==h&&h>g.firstHeldAt&&h<=b&&(g.firstHeldAt=h);let i=globalThis.__autoYesPollerStates?.get(c)?.lastServerResponseTimestamp??null;return null!==i?Math.max(g.firstHeldAt,i):g.firstHeldAt}(a,b),e=(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId),f=k.get(e)?.sessionWaitTick,g=Math.max(c+j,function(a,b){let c=globalThis.__autoYesPollerStates?.get(a),e=c?.duplicateRetryReservation;return void 0===c||null==e||e.observedAt<b||e.answeredAt!==c.lastAnsweredAt||e.promptKey!==c.lastAnsweredPromptKey?-1/0:e.answeredAt+d.UL+m}(e,a.waitingSince));return void 0===f||globalThis.__autoYesPollerStates?.get(e)!==f.poller?g:(f.at=function(a){let b=a.at;for(let c of[a.poller.sessionWaitTickAt,a.poller.sessionWaitTickRanAt,a.poller.sessionAppearedAt])void 0!==c&&c>=a.heldAt&&c<b&&(b=c);return b}(f),Math.max(g,f.at+m))}function o(a,b){if(void 0!==b){let c=k.get(a);if(void 0===c||!l(c,"number"==typeof b?{since:b}:b))return}k.delete(a)}function p(a){let{worktreeId:b,cliToolId:c,instanceId:e}=a,g=(0,d.aq)(b,c,e);if(null===g||!g.enabled)return{suppress:!1,reason:"auto-yes-inactive",stopReason:g?.stopReason};let i=(0,f.gb)(b,c,e);if(null!==i&&function(a,b){let c=b.waitingEpisodeId??null;return void 0!==a.episodeId&&null!==c?a.episodeId===c:a.at>=b.waitingSince}(i,a)&&!(0,f.WM)(i,a.waitingEpisodeId,q(a)))return{suppress:!1,reason:"policy-withheld",suppressedBy:i.reason};if(!0===a.escalated)return{suppress:!1,reason:"escalation-reminder"};let k=a.holdEndsAt??(void 0!==a.holdStartedAt?a.holdStartedAt+j:void 0);return void 0!==k&&(a.now??Date.now())>=k?!function(a){let b=a.waitingEpisodeId??null;if(null===b||q(a)?.episodeId!==b)return!1;let c=(0,h._v)(a.worktreeId,a.cliToolId,a.instanceId);return null!==c&&c.episodeId===b&&"screen"!==c.binding.kind}(a)?{suppress:!1,reason:"auto-yes-not-answered"}:{suppress:!0,reason:"auto-yes-answered"}:{suppress:!0,reason:"auto-yes-answering"}}function q(a){let b=(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId);return globalThis.__autoYesPollerStates?.get(b)?.lastAnswer??null}function r(a){return s(a).suppress}function s(a,b={}){let c=p(a);if("auto-yes-inactive"===c.reason&&o((0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId)),"auto-yes-answering"===c.reason&&void 0===a.holdStartedAt&&void 0===a.holdEndsAt){let b=a.now??Date.now();c=p({...a,now:b,holdEndsAt:n(a,b)})}let e={worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waitingSince:a.waitingSince,...a.waitingEpisodeId?{waitingEpisodeId:a.waitingEpisodeId}:{},escalated:!0===a.escalated,reason:c.reason,...void 0!==c.stopReason?{stopReason:c.stopReason}:{},...void 0!==c.suppressedBy?{suppressedBy:c.suppressedBy}:{}};return c.suppress&&!0===b.recheck?i.debug("prompt-push-suppressed",e):c.suppress?i.info("prompt-push-suppressed",e):"auto-yes-not-answered"===c.reason?i.info("prompt-push-allowed",e):i.debug("prompt-push-allowed",e),c}}};
|