commandmate 0.47.0 → 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 +501 -501
- package/.next/app-path-routes-manifest.json +34 -34
- package/.next/build-manifest.json +8 -8
- package/.next/diagnostics/framework.json +1 -1
- package/.next/next-minimal-server.js.nft.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js +2 -2
- package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route.js +1 -1
- package/.next/server/app/api/agents/versions/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route.js +1 -1
- package/.next/server/app/api/app/release-notes/route.js.nft.json +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 +5 -5
- package/.next/server/app/api/app/update/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route.js +1 -1
- package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +1 -1
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +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.js +2 -2
- package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route.js +1 -1
- package/.next/server/app/api/ollama/models/route.js.nft.json +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route.js +2 -2
- package/.next/server/app/api/remote/pair/route.js.nft.json +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +2 -2
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +1 -1
- package/.next/server/app/api/templates/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +7 -7
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -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 +5 -5
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/apple-icon.png/route.js +1 -1
- package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
- package/.next/server/app/apple-icon.png.meta +1 -1
- package/.next/server/app/icon.png/route.js +1 -1
- package/.next/server/app/icon.png/route.js.nft.json +1 -1
- package/.next/server/app/icon.png.meta +1 -1
- package/.next/server/app/icon1.png/route.js +1 -1
- package/.next/server/app/icon1.png/route.js.nft.json +1 -1
- package/.next/server/app/icon1.png.meta +1 -1
- package/.next/server/app/icon2.png/route.js +1 -1
- package/.next/server/app/icon2.png/route.js.nft.json +1 -1
- package/.next/server/app/icon2.png.meta +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest.meta +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page.js +2 -2
- package/.next/server/app/offline/page.js.nft.json +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +2 -2
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +2 -2
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +12 -12
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +34 -34
- package/.next/server/chunks/{5048.js → 1185.js} +1 -1
- 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 +19 -0
- 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 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3505.js +7 -0
- package/.next/server/chunks/3897.js +22 -0
- package/.next/server/chunks/4072.js +5 -5
- package/.next/server/chunks/4248.js +1 -1
- package/.next/server/chunks/4280.js +1 -0
- package/.next/server/chunks/463.js +1 -0
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5611.js +1 -1
- package/.next/server/chunks/6119.js +1 -0
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6345.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/6784.js +1 -0
- 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/9130.js +1 -1
- 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 +4 -4
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/_document.js.nft.json +1 -1
- package/.next/server/pages/_error.js +3 -3
- package/.next/server/pages/_error.js.nft.json +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/{1111.5ab4f0ffb0d944e5.js → 1111.1b653d4a9816a0a7.js} +8 -8
- package/.next/static/chunks/{1255-7e5873f06b25e129.js → 1255-a85690d352f4f8fd.js} +1 -1
- package/.next/static/chunks/2099-c3e0ab70a1b95dd3.js +1 -0
- package/.next/static/chunks/{2407-b2f524f99f7fc353.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/9465-b59bb255b376c813.js +1 -0
- package/.next/static/chunks/app/{layout-419eaf7de340f4ab.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/static/chunks/main-37ca13e38030fe8b.js +1 -0
- package/.next/static/chunks/{webpack-468b7b33030234b3.js → webpack-838df0273b03af19.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 +28 -14
- 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 +108 -14
- 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 +131 -4
- 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 +65 -2
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +36 -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 +468 -792
- 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 -268
- 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-adjudication.js +26 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +49 -4
- package/dist/server/src/lib/hooks/permission-request-payload.js +20 -0
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +21 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +3 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/command-code/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +2 -0
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +6 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +6 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +14 -2
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +14 -3
- package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +21 -1
- 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 +117 -0
- package/dist/server/src/lib/polling/auto-yes-confirmation-ledger.js +1091 -0
- 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-ledger-records.js +143 -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 +46 -11
- package/dist/server/src/lib/polling/auto-yes-poller-capture.js +63 -0
- package/dist/server/src/lib/polling/auto-yes-poller-enter-fallback.js +37 -0
- package/dist/server/src/lib/polling/auto-yes-poller-generation.js +192 -0
- package/dist/server/src/lib/polling/auto-yes-poller-receipt-log.js +324 -0
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +193 -26
- package/dist/server/src/lib/polling/auto-yes-poller-steps.js +279 -0
- package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +13 -2
- package/dist/server/src/lib/polling/auto-yes-question-choice.js +57 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +117 -22
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +36 -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-blank-response.js +30 -0
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +39 -0
- package/dist/server/src/lib/polling/response-checker.js +138 -53
- package/dist/server/src/lib/prompt-answer-sender.js +104 -10
- package/dist/server/src/lib/prompt-observation/appearance.js +165 -0
- 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 +2 -2
- package/public/sw.js +76 -4
- package/release-notes/0.47.1.json +20 -0
- package/release-notes/0.47.2.json +20 -0
- package/release-notes/0.48.0.json +57 -0
- package/scripts/hooks/cmate-agent-event.sh +22 -0
- package/.next/server/chunks/1331.js +0 -22
- package/.next/server/chunks/1559.js +0 -2
- package/.next/server/chunks/1836.js +0 -1
- package/.next/server/chunks/1944.js +0 -1
- package/.next/server/chunks/2328.js +0 -1
- package/.next/server/chunks/2460.js +0 -1
- package/.next/server/chunks/5292.js +0 -7
- package/.next/server/chunks/5595.js +0 -1
- package/.next/server/chunks/7166.js +0 -19
- package/.next/server/chunks/9051.js +0 -1
- package/.next/server/chunks/9199.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/9465-e5a351baa941f31b.js +0 -1
- package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +0 -1
- package/.next/static/chunks/main-ac91ed6e71380841.js +0 -1
- /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → PTlAswXLq8PAe2vUJ8dVP}/_buildManifest.js +0 -0
- /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → PTlAswXLq8PAe2vUJ8dVP}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A person's answer through `/prompt-response`, as Auto-Yes's poller sees it
|
|
4
|
+
* (Issue #3821, review 2).
|
|
5
|
+
*
|
|
6
|
+
* Dropping the published decision is not enough to keep the poller's keys off
|
|
7
|
+
* a confirmation a person is answering: a tick already past its checks — the
|
|
8
|
+
* ownership check, a wait inside the send — acts for its generation (#3706),
|
|
9
|
+
* which a manual answer did not touch. So the start of a manual answer
|
|
10
|
+
*
|
|
11
|
+
* - moves the instance's manual-answer sequence on; a tick whose generation
|
|
12
|
+
* was taken under an earlier one is no longer current (`isTickCurrent`) and
|
|
13
|
+
* sends no further key;
|
|
14
|
+
* - holds the instance for {@link MANUAL_ANSWER_HOLD_MS}: a tick that reads a
|
|
15
|
+
* confirmation meanwhile leaves it to the person (`answered-by-human`)
|
|
16
|
+
* instead of answering what they may be answering right now;
|
|
17
|
+
* - drops the published decision.
|
|
18
|
+
*
|
|
19
|
+
* How the answer ENDED decides what happens to an answer the poller holds at
|
|
20
|
+
* that confirmation (Issue #3880, {@link settleManualAnswer}).
|
|
21
|
+
*
|
|
22
|
+
* Auto-Yes itself stays on: past the hold the poller answers again.
|
|
23
|
+
*
|
|
24
|
+
* In-memory and on `globalThis` (the route and the poller are bundled apart
|
|
25
|
+
* under `next dev`).
|
|
26
|
+
*
|
|
27
|
+
* @module lib/polling/auto-yes-manual-answer
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.ANSWERED_BY_HUMAN_DECISION_REASON = exports.MANUAL_ANSWER_HOLD_MS = void 0;
|
|
31
|
+
exports.noteManualAnswerStarted = noteManualAnswerStarted;
|
|
32
|
+
exports.noteManualSendStarting = noteManualSendStarting;
|
|
33
|
+
exports.settleManualAnswer = settleManualAnswer;
|
|
34
|
+
exports.abandonManualSend = abandonManualSend;
|
|
35
|
+
exports.getManualAnswerSeq = getManualAnswerSeq;
|
|
36
|
+
exports.isManualAnswerHolding = isManualAnswerHolding;
|
|
37
|
+
exports.clearManualAnswers = clearManualAnswers;
|
|
38
|
+
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
39
|
+
const global_state_1 = require("../global-state");
|
|
40
|
+
const auto_yes_decision_state_1 = require("./auto-yes-decision-state");
|
|
41
|
+
const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
|
|
42
|
+
/** How long a manual answer keeps the poller off the instance's confirmations. */
|
|
43
|
+
exports.MANUAL_ANSWER_HOLD_MS = auto_yes_state_1.DUPLICATE_RETRY_EXPIRY_MS;
|
|
44
|
+
/** The decision reason a tick withholds under while the hold lasts. */
|
|
45
|
+
exports.ANSWERED_BY_HUMAN_DECISION_REASON = 'answered-by-human';
|
|
46
|
+
const marks = (0, global_state_1.getOrInitGlobal)('__autoYesManualAnswers', () => new Map());
|
|
47
|
+
/** A person began answering on this instance (called before the first key or API call). */
|
|
48
|
+
function noteManualAnswerStarted(compositeKey, at = Date.now()) {
|
|
49
|
+
marks.set(compositeKey, { seq: (marks.get(compositeKey)?.seq ?? 0) + 1, at });
|
|
50
|
+
(0, auto_yes_decision_state_1.forgetAutoYesDecision)(compositeKey);
|
|
51
|
+
return { compositeKey, order: (0, auto_yes_poller_state_1.nextSendOrder)(), attempt: null };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The person's keys are about to go out (Issue #3880), at the confirmation
|
|
55
|
+
* `promptData` is — or, when no prompt could be read off the screen (the
|
|
56
|
+
* capture before the send failed), at an unidentified one. Registered as a
|
|
57
|
+
* send in flight, so a screen seen gone, a relaunch, or a worktree going away
|
|
58
|
+
* before it ends keeps its end from recording a hold.
|
|
59
|
+
*/
|
|
60
|
+
function noteManualSendStarting(ticket, promptData) {
|
|
61
|
+
if (ticket.attempt !== null)
|
|
62
|
+
return;
|
|
63
|
+
const screenKey = promptData ? (0, auto_yes_poller_state_1.partialAnswerScreenKey)(promptData) : auto_yes_poller_state_1.UNIDENTIFIED_SCREEN_KEY;
|
|
64
|
+
ticket.attempt = (0, auto_yes_poller_state_1.beginManualSendAttempt)(ticket.compositeKey, screenKey);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A person's answer ended (Issue #3880). Starting one does not touch what
|
|
68
|
+
* Auto-Yes holds — the start only stops the tick under way and holds the
|
|
69
|
+
* poller off for {@link MANUAL_ANSWER_HOLD_MS} — so a manual send that fails
|
|
70
|
+
* cannot leave the confirmation free for Auto-Yes to type at again once that
|
|
71
|
+
* hold passes. Everything is matched to THIS answer (`ticket`), not to the
|
|
72
|
+
* instance's key alone:
|
|
73
|
+
*
|
|
74
|
+
* - `answered` / `not-sent`: the hold recorded before this answer began is
|
|
75
|
+
* released (the person answered, or saw the screen and nothing of theirs is
|
|
76
|
+
* on it). One recorded since — by another person's send that may be on the
|
|
77
|
+
* pane, or a tick's — stays.
|
|
78
|
+
* - `may-be-on-pane`: the send records a hold at its screen (unidentified
|
|
79
|
+
* when none was read), as Auto-Yes's own does: only for the session epoch it
|
|
80
|
+
* went to, never over a hold of a send registered after it, and not at all when
|
|
81
|
+
* the screen it typed at was seen gone since. And every tick under way stops
|
|
82
|
+
* (the manual-answer sequence moves on): one that read no hold before its
|
|
83
|
+
* last wait does not type over this one.
|
|
84
|
+
*
|
|
85
|
+
* An end nobody reports (the agent's API answered it, the route threw) leaves
|
|
86
|
+
* the hold as it was.
|
|
87
|
+
*/
|
|
88
|
+
function settleManualAnswer(ticket, outcome, at = Date.now()) {
|
|
89
|
+
const { compositeKey, attempt } = ticket;
|
|
90
|
+
if (outcome !== 'may-be-on-pane') {
|
|
91
|
+
if (attempt !== null)
|
|
92
|
+
(0, auto_yes_poller_state_1.settleSendAttempt)(attempt, false, at);
|
|
93
|
+
(0, auto_yes_poller_state_1.releasePartialAnswerToHuman)(compositeKey, ticket.order);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (attempt !== null)
|
|
97
|
+
(0, auto_yes_poller_state_1.settleSendAttempt)(attempt, true, at);
|
|
98
|
+
const mark = marks.get(compositeKey);
|
|
99
|
+
if (mark !== undefined)
|
|
100
|
+
marks.set(compositeKey, { ...mark, seq: mark.seq + 1 });
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A person's send ended in a way that says nothing of its keys (Issue #3880):
|
|
104
|
+
* it is no longer in flight, and the hold is left as it was.
|
|
105
|
+
*/
|
|
106
|
+
function abandonManualSend(ticket) {
|
|
107
|
+
if (ticket.attempt !== null)
|
|
108
|
+
(0, auto_yes_poller_state_1.settleSendAttempt)(ticket.attempt, false);
|
|
109
|
+
}
|
|
110
|
+
/** The instance's manual-answer sequence (0 until a person answers there). */
|
|
111
|
+
function getManualAnswerSeq(compositeKey) {
|
|
112
|
+
return marks.get(compositeKey)?.seq ?? 0;
|
|
113
|
+
}
|
|
114
|
+
/** Whether a manual answer began on this instance less than {@link MANUAL_ANSWER_HOLD_MS} ago. */
|
|
115
|
+
function isManualAnswerHolding(compositeKey, now = Date.now()) {
|
|
116
|
+
const mark = marks.get(compositeKey);
|
|
117
|
+
return mark !== undefined && now - mark.at < exports.MANUAL_ANSWER_HOLD_MS;
|
|
118
|
+
}
|
|
119
|
+
/** Drop every mark: a test seam. The sequences only ever move forward otherwise. */
|
|
120
|
+
function clearManualAnswers() {
|
|
121
|
+
marks.clear();
|
|
122
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Yes option effects - what picking one row of a permission dialog does
|
|
4
|
+
* (Issue #3822).
|
|
5
|
+
*
|
|
6
|
+
* Until #3822 the resolver picked the default row, or row 1, of any numbered
|
|
7
|
+
* dialog. On every tool measured here the rows of a permission dialog do not
|
|
8
|
+
* mean the same thing: one allows this call only, the others save a rule
|
|
9
|
+
* (`don't ask again`, `always allow`, `Persist to settings.json`), switch the
|
|
10
|
+
* permission mode for the session (`allow all edits`, `Full Access`), or deny.
|
|
11
|
+
* Where the cursor rests is the tool's choice, not a promise that the row is
|
|
12
|
+
* the narrow one — agy keeps the `>` where the operator left it — so Auto-Yes
|
|
13
|
+
* answers only the row that reads as "allow this call once", by its number,
|
|
14
|
+
* and nothing when no single row reads that way.
|
|
15
|
+
*
|
|
16
|
+
* ## Where the wording comes from
|
|
17
|
+
*
|
|
18
|
+
* Every rule below is a row read off a live capture in the repository, named
|
|
19
|
+
* next to it. Nothing is inferred from another tool's wording. A tool without
|
|
20
|
+
* a table (gemini, vibe-local, opencode, opencode-v2) keeps the pre-#3822
|
|
21
|
+
* reading: opencode's and OpenCode V2's permission strips are unnumbered and
|
|
22
|
+
* never reach the resolver as a prompt (they are answered through the hook,
|
|
23
|
+
* whose `allow` is `allowOnce`), and gemini / vibe-local have no captured
|
|
24
|
+
* permission dialog to read.
|
|
25
|
+
*
|
|
26
|
+
* ## When a dialog counts as a permission dialog
|
|
27
|
+
*
|
|
28
|
+
* When at least one of its rows reads as an allow — this call once, a saved
|
|
29
|
+
* rule, or a mode change. A `No` row alone does not make one: a launch dialog
|
|
30
|
+
* (`Yes, continue` / `No, quit`, `Yes, I trust this folder` / `No, exit`) is
|
|
31
|
+
* judged where it always was (the launch-dialog branch, the contract's deny
|
|
32
|
+
* patterns). A numbered list none of whose rows the tool's table recognises (a
|
|
33
|
+
* question's options, a dialog whose wording was never captured) keeps the
|
|
34
|
+
* pre-#3822 default-row reading — this module only narrows what a recognised
|
|
35
|
+
* permission dialog may be answered with, it does not decide which screens are
|
|
36
|
+
* dialogs.
|
|
37
|
+
*
|
|
38
|
+
* Client-safe: no server-only imports (the resolver is bundled into
|
|
39
|
+
* `hooks/useAutoYes.ts`).
|
|
40
|
+
*/
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.OPTION_EFFECT_TOOLS = void 0;
|
|
43
|
+
exports.readOptionEffect = readOptionEffect;
|
|
44
|
+
exports.selectAllowOnceOption = selectAllowOnceOption;
|
|
45
|
+
/** `don't` with a straight or a typographic apostrophe. */
|
|
46
|
+
const DONT = "don['’]t";
|
|
47
|
+
/** `No`, alone or followed by its explanation (`No, cancel`, `No, and tell … differently`). */
|
|
48
|
+
const DENY_NO = ['deny', /^No(?:,|$)/];
|
|
49
|
+
/**
|
|
50
|
+
* Each tool's rows, first match wins. A rule is anchored at the start of the
|
|
51
|
+
* label and reads only the words that say what the row does, so the command or
|
|
52
|
+
* path a row quotes after them does not matter.
|
|
53
|
+
*/
|
|
54
|
+
const OPTION_EFFECT_RULES = {
|
|
55
|
+
// tests/fixtures/canary/permission-dialog.raw.txt, permission-hook-no-decision.raw.txt,
|
|
56
|
+
// tests/unit/lib/detection/fixtures/claude-live-1708/bash-approval-taskpanel.txt,
|
|
57
|
+
// tests/fixtures/tui-frame-footer-2776/claude-2.1.278-bash-approval-task-panel.txt
|
|
58
|
+
claude: [
|
|
59
|
+
['allow-once', /^Yes$/],
|
|
60
|
+
['allow-persistent', /^Yes, and always allow\b/],
|
|
61
|
+
['mode-change', /^Yes, allow all edits\b/],
|
|
62
|
+
['mode-change', /^Yes, and switch to\b/],
|
|
63
|
+
DENY_NO,
|
|
64
|
+
],
|
|
65
|
+
// tests/unit/lib/detection/fixtures/codex-live-1628/approval-{run-command,apply-patch}.txt,
|
|
66
|
+
// tests/fixtures/codex-dialogs-0157/approval.txt, codex-hooks-review-0148.ts,
|
|
67
|
+
// tests/fixtures/codex-browser-use-2609/approval-form-browser-use.txt (`Allow` /
|
|
68
|
+
// `Always allow` / `Cancel`, each followed by its description), and
|
|
69
|
+
// tests/fixtures/codex-live-2310/dialog-permissions-picker.txt (the approval modes)
|
|
70
|
+
codex: [
|
|
71
|
+
['allow-once', /^Yes$/],
|
|
72
|
+
['allow-once', /^Yes, proceed\b/],
|
|
73
|
+
['allow-once', /^Allow(?:\s{2,}|$)/],
|
|
74
|
+
['allow-persistent', new RegExp(`^Yes, and ${DONT} ask again\\b`)],
|
|
75
|
+
['allow-persistent', /^Always allow\b/],
|
|
76
|
+
['mode-change', /^Ask for approval\b/],
|
|
77
|
+
['mode-change', /^Approve for me\b/],
|
|
78
|
+
['mode-change', /^Full Access\b/],
|
|
79
|
+
['deny', /^Cancel\b/],
|
|
80
|
+
DENY_NO,
|
|
81
|
+
],
|
|
82
|
+
// tests/fixtures/antigravity-live-2364/dialog-bash-*.txt, dialog-create-file.txt,
|
|
83
|
+
// tests/fixtures/strict-respond-3812/permission-run-command.txt. `always allow in
|
|
84
|
+
// this conversation` is as much a saved rule as `(Persist to settings.json)`:
|
|
85
|
+
// neither is this call only.
|
|
86
|
+
antigravity: [
|
|
87
|
+
['allow-once', /^Yes$/],
|
|
88
|
+
['allow-once', /^Yes, run command$/],
|
|
89
|
+
['allow-once', /^Yes, allow creation$/],
|
|
90
|
+
['allow-persistent', /^Yes, and always allow\b/],
|
|
91
|
+
DENY_NO,
|
|
92
|
+
],
|
|
93
|
+
// tests/fixtures/command-code-live-2250/dialog-shell-command.txt, dialog-create-file.txt,
|
|
94
|
+
// dialog-kill-task-1490.txt, tests/fixtures/command-code-plan-review-2763/after-approve.txt
|
|
95
|
+
'command-code': [
|
|
96
|
+
['allow-once', /^Yes$/],
|
|
97
|
+
['allow-persistent', new RegExp(`^Yes, ${DONT} ask again\\b`)],
|
|
98
|
+
['mode-change', /^Yes, allow all edits\b/],
|
|
99
|
+
DENY_NO,
|
|
100
|
+
],
|
|
101
|
+
// tests/unit/lib/detection/fixtures/copilot-live-1885/permission-dialog.txt and
|
|
102
|
+
// copilot-picker-1895/picker-permissions.txt (`Manual ✓` / `Allow all`, the modes)
|
|
103
|
+
copilot: [
|
|
104
|
+
['allow-once', /^Yes$/],
|
|
105
|
+
['allow-persistent', new RegExp(`^Yes, and ${DONT} ask again\\b`)],
|
|
106
|
+
['mode-change', /^Manual\b/],
|
|
107
|
+
['mode-change', /^Allow all\b/],
|
|
108
|
+
DENY_NO,
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
/** Every table, for a caller that does not say which tool drew the dialog. */
|
|
112
|
+
const ANY_TOOL_RULES = Object.values(OPTION_EFFECT_RULES).flat();
|
|
113
|
+
/** The tools whose permission rows are read (the others keep the pre-#3822 reading). */
|
|
114
|
+
exports.OPTION_EFFECT_TOOLS = Object.keys(OPTION_EFFECT_RULES);
|
|
115
|
+
function rulesFor(cliToolId) {
|
|
116
|
+
if (cliToolId === undefined)
|
|
117
|
+
return ANY_TOOL_RULES;
|
|
118
|
+
return OPTION_EFFECT_RULES[cliToolId] ?? null;
|
|
119
|
+
}
|
|
120
|
+
function readWith(rules, label) {
|
|
121
|
+
const text = label.trim();
|
|
122
|
+
for (const [effect, pattern] of rules) {
|
|
123
|
+
if (pattern.test(text))
|
|
124
|
+
return effect;
|
|
125
|
+
}
|
|
126
|
+
return 'unknown';
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* What choosing the row labelled `label` does on `cliToolId`'s dialog.
|
|
130
|
+
*
|
|
131
|
+
* @param cliToolId - The tool that drew the dialog. Omitted, every tool's
|
|
132
|
+
* table is read (the first rule that matches decides); a tool with no table
|
|
133
|
+
* reads every row as `unknown`.
|
|
134
|
+
*/
|
|
135
|
+
function readOptionEffect(label, cliToolId) {
|
|
136
|
+
const rules = rulesFor(cliToolId);
|
|
137
|
+
return rules === null ? 'unknown' : readWith(rules, label);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Pick the one "allow this call once" row of a permission dialog.
|
|
141
|
+
*
|
|
142
|
+
* @param options - The dialog's rows, as parsed
|
|
143
|
+
* @param cliToolId - The tool that drew it; see {@link readOptionEffect}
|
|
144
|
+
*/
|
|
145
|
+
function selectAllowOnceOption(options, cliToolId) {
|
|
146
|
+
const rules = rulesFor(cliToolId);
|
|
147
|
+
if (rules === null)
|
|
148
|
+
return { kind: 'not-a-permission-dialog' };
|
|
149
|
+
const effects = options.map((option) => readWith(rules, option.label));
|
|
150
|
+
if (!effects.some((effect) => effect === 'allow-once' || effect === 'allow-persistent' || effect === 'mode-change')) {
|
|
151
|
+
return { kind: 'not-a-permission-dialog' };
|
|
152
|
+
}
|
|
153
|
+
const once = options.filter((_option, index) => effects[index] === 'allow-once');
|
|
154
|
+
if (once.length === 1)
|
|
155
|
+
return { kind: 'allow-once', option: once[0] };
|
|
156
|
+
return { kind: 'unidentified', allowOnceCount: once.length };
|
|
157
|
+
}
|
|
@@ -14,12 +14,17 @@
|
|
|
14
14
|
* indefinitely. The TTL is what bounds staleness — a task that starts or ends is
|
|
15
15
|
* picked up within it, without this module having to observe task transitions.
|
|
16
16
|
*
|
|
17
|
+
* Issue #3822: a failed lookup is not cached. It is "contract unknown", which
|
|
18
|
+
* the answering paths read as withholding, and holding it for the TTL would
|
|
19
|
+
* keep withholding after the database recovered; the next poll reads again.
|
|
20
|
+
*
|
|
17
21
|
* @module lib/polling/auto-yes-policy
|
|
18
22
|
*/
|
|
19
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
24
|
exports.AUTO_YES_POLICY_CACHE_TTL_MS = void 0;
|
|
21
25
|
exports.getSessionAutoYesPolicy = getSessionAutoYesPolicy;
|
|
22
26
|
exports.getSessionAutoYesPolicyEntry = getSessionAutoYesPolicyEntry;
|
|
27
|
+
exports.getSessionAutoYesPolicyLookupEntry = getSessionAutoYesPolicyLookupEntry;
|
|
23
28
|
exports.isAutoYesBlockedByPolicy = isAutoYesBlockedByPolicy;
|
|
24
29
|
exports.isSessionAutoYesBlockedByContract = isSessionAutoYesBlockedByContract;
|
|
25
30
|
exports.getSessionContractPolicySummary = getSessionContractPolicySummary;
|
|
@@ -29,6 +34,7 @@ const db_1 = require("../../lib/db");
|
|
|
29
34
|
const db_instance_1 = require("../../lib/db/db-instance");
|
|
30
35
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
31
36
|
const logger_1 = require("../../lib/logger");
|
|
37
|
+
const auto_yes_resolver_1 = require("./auto-yes-resolver");
|
|
32
38
|
const logger = (0, logger_1.createLogger)('auto-yes-policy');
|
|
33
39
|
/** How long a resolved policy is reused before the task is looked up again. */
|
|
34
40
|
exports.AUTO_YES_POLICY_CACHE_TTL_MS = 5000;
|
|
@@ -54,11 +60,11 @@ function purgeExpired(now) {
|
|
|
54
60
|
* Read the policy from the active task, or null when no contract governs this
|
|
55
61
|
* instance.
|
|
56
62
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
63
|
+
* Issue #3822: a database failure yields {@link AUTO_YES_POLICY_UNKNOWN}, not
|
|
64
|
+
* null. It used to yield null — the unconstrained behaviour — so a contract
|
|
65
|
+
* stating `off` or a deny pattern was answered past whenever one read failed.
|
|
66
|
+
* Users without a contract are still untouched: a lookup that succeeds and
|
|
67
|
+
* finds no task is null, as before, and only a lookup that fails withholds.
|
|
62
68
|
*/
|
|
63
69
|
function readPolicy(worktreeId, cliToolId, instanceId) {
|
|
64
70
|
try {
|
|
@@ -76,7 +82,7 @@ function readPolicy(worktreeId, cliToolId, instanceId) {
|
|
|
76
82
|
instanceId,
|
|
77
83
|
error: error instanceof Error ? error.message : String(error),
|
|
78
84
|
});
|
|
79
|
-
return { policy:
|
|
85
|
+
return { policy: auto_yes_resolver_1.AUTO_YES_POLICY_UNKNOWN, taskId: null };
|
|
80
86
|
}
|
|
81
87
|
}
|
|
82
88
|
/**
|
|
@@ -85,19 +91,41 @@ function readPolicy(worktreeId, cliToolId, instanceId) {
|
|
|
85
91
|
*
|
|
86
92
|
* @param worktreeId - Worktree identifier
|
|
87
93
|
* @param cliToolId - CLI tool being polled
|
|
94
|
+
* For the paths that answer (the poller and the `PermissionRequest` hook):
|
|
95
|
+
* the resolver reads {@link AUTO_YES_POLICY_UNKNOWN} as withholding (Issue #3822).
|
|
96
|
+
*
|
|
88
97
|
* @param instanceId - Agent instance id (defaults to the primary, i.e. cliToolId)
|
|
89
|
-
* @
|
|
98
|
+
* @param options - `fresh: true` reads the task past the cache (and refreshes
|
|
99
|
+
* it): the poller's last look before a key (Issue #3822), where a contract
|
|
100
|
+
* switched or a deny pattern added within the TTL must already count
|
|
101
|
+
* @returns The contract's autoYes block, null when no contract governs this
|
|
102
|
+
* instance, or {@link AUTO_YES_POLICY_UNKNOWN} when the lookup failed
|
|
90
103
|
*/
|
|
91
|
-
function getSessionAutoYesPolicy(worktreeId, cliToolId, instanceId) {
|
|
92
|
-
return lookupEntry(worktreeId, cliToolId, instanceId).policy;
|
|
104
|
+
function getSessionAutoYesPolicy(worktreeId, cliToolId, instanceId, options) {
|
|
105
|
+
return lookupEntry(worktreeId, cliToolId, instanceId, options?.fresh === true).policy;
|
|
93
106
|
}
|
|
94
107
|
/**
|
|
95
108
|
* The policy and the id of the task it came from, read in ONE lookup (Issue
|
|
96
109
|
* #3724), so a log line naming both cannot pair one task's verdict with another
|
|
97
110
|
* task's id when the cache expires between two reads. `taskId` is null when no
|
|
98
111
|
* contract governs the instance.
|
|
112
|
+
*
|
|
113
|
+
* For display only (Issue #3822): a failed lookup reads as no contract here
|
|
114
|
+
* (`policy` and `taskId` null), never as a contract this lookup did not see.
|
|
99
115
|
*/
|
|
100
116
|
function getSessionAutoYesPolicyEntry(worktreeId, cliToolId, instanceId) {
|
|
117
|
+
const { policy, taskId } = lookupEntry(worktreeId, cliToolId, instanceId);
|
|
118
|
+
if ((0, auto_yes_resolver_1.isAutoYesPolicyUnknown)(policy))
|
|
119
|
+
return { policy: null, taskId: null };
|
|
120
|
+
return { policy, taskId };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* {@link getSessionAutoYesPolicyEntry} for a path that judges the prompt again
|
|
124
|
+
* (Issue #3822): a failed lookup stays {@link AUTO_YES_POLICY_UNKNOWN} instead of
|
|
125
|
+
* reading as no contract, so the resolver withholds on it as the tick did.
|
|
126
|
+
* `taskId` is null when no contract governs the instance or the lookup failed.
|
|
127
|
+
*/
|
|
128
|
+
function getSessionAutoYesPolicyLookupEntry(worktreeId, cliToolId, instanceId) {
|
|
101
129
|
const { policy, taskId } = lookupEntry(worktreeId, cliToolId, instanceId);
|
|
102
130
|
return { policy, taskId };
|
|
103
131
|
}
|
|
@@ -137,15 +165,22 @@ function getSessionContractPolicySummary(worktreeId, cliToolId, instanceId) {
|
|
|
137
165
|
denyPatternCount: policy.denyPatterns.length,
|
|
138
166
|
};
|
|
139
167
|
}
|
|
140
|
-
function lookupEntry(worktreeId, cliToolId, instanceId) {
|
|
168
|
+
function lookupEntry(worktreeId, cliToolId, instanceId, fresh = false) {
|
|
141
169
|
const resolvedInstanceId = instanceId ?? cliToolId;
|
|
142
170
|
const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, resolvedInstanceId);
|
|
143
171
|
const now = Date.now();
|
|
144
172
|
const cached = policyCache.get(key);
|
|
145
|
-
if (cached && cached.expiresAt > now) {
|
|
173
|
+
if (!fresh && cached && cached.expiresAt > now) {
|
|
146
174
|
return cached;
|
|
147
175
|
}
|
|
148
176
|
const { policy, taskId } = readPolicy(worktreeId, cliToolId, resolvedInstanceId);
|
|
177
|
+
if ((0, auto_yes_resolver_1.isAutoYesPolicyUnknown)(policy)) {
|
|
178
|
+
// Issue #3822: not cached, so the next lookup reads again. A fresh read
|
|
179
|
+
// that failed also drops what was cached: it is no longer known to hold.
|
|
180
|
+
if (fresh)
|
|
181
|
+
policyCache.delete(key);
|
|
182
|
+
return { policy, taskId, expiresAt: now };
|
|
183
|
+
}
|
|
149
184
|
if (policyCache.size >= MAX_CACHE_ENTRIES) {
|
|
150
185
|
purgeExpired(now);
|
|
151
186
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Yes poller: one tick's capture (Issue #2522) (Issue #3783: split out of
|
|
4
|
+
* `auto-yes-poller.ts`, which re-exports the public names).
|
|
5
|
+
*
|
|
6
|
+
* Does not statically import `auto-yes-poller.ts` (no cycle outside the
|
|
7
|
+
* baseline in `import-cycles-baseline-3482`). Via `cli-session`, opencode's
|
|
8
|
+
* history feed reaches it back through a dynamic `import()`; that path predates
|
|
9
|
+
* the split (the poller imported `cli-session` itself) and is no static cycle.
|
|
10
|
+
*
|
|
11
|
+
* @module lib/polling/auto-yes-poller-capture
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.capturePollerFrame = capturePollerFrame;
|
|
15
|
+
exports.captureAndCleanOutput = captureAndCleanOutput;
|
|
16
|
+
const async_hooks_1 = require("async_hooks");
|
|
17
|
+
const cli_session_1 = require("../session/cli-session");
|
|
18
|
+
const global_state_1 = require("../global-state");
|
|
19
|
+
const cli_patterns_1 = require("../detection/cli-patterns");
|
|
20
|
+
const auto_yes_config_1 = require("../../config/auto-yes-config");
|
|
21
|
+
/** Where `cli-session` reports whether the capture it runs inside cut the pane's top (Issue #3881 N4). */
|
|
22
|
+
function headCutSink() {
|
|
23
|
+
return (0, global_state_1.getOrInitGlobal)('__captureHeadCutSink', () => new async_hooks_1.AsyncLocalStorage());
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Capture tmux session output once, keeping both spellings (Issue #2522).
|
|
27
|
+
*
|
|
28
|
+
* @internal Exported for testing purposes only.
|
|
29
|
+
* @param worktreeId - Worktree identifier
|
|
30
|
+
* @param cliToolId - CLI tool type being polled
|
|
31
|
+
* @param captureLines - Optional number of lines to capture
|
|
32
|
+
* @param instanceId - Optional agent instance ID (Issue #896; defaults to primary session)
|
|
33
|
+
* @returns The tick's raw capture and its cleaned form
|
|
34
|
+
*/
|
|
35
|
+
async function capturePollerFrame(worktreeId, cliToolId, captureLines, instanceId) {
|
|
36
|
+
const lines = captureLines ?? auto_yes_config_1.FULL_CAPTURE_LINES;
|
|
37
|
+
const reported = {};
|
|
38
|
+
const output = await headCutSink().run((headCut) => {
|
|
39
|
+
reported.headCut = headCut;
|
|
40
|
+
}, () => (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, lines, instanceId));
|
|
41
|
+
return {
|
|
42
|
+
raw: output,
|
|
43
|
+
clean: (0, cli_patterns_1.stripBoxDrawing)((0, cli_patterns_1.stripAnsi)(output)),
|
|
44
|
+
...(reported.headCut !== undefined ? { headCut: reported.headCut } : {}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Capture tmux session output and strip ANSI escape codes.
|
|
49
|
+
*
|
|
50
|
+
* Kept as the cleaned half of {@link capturePollerFrame} so the many callers and
|
|
51
|
+
* tests that only ever wanted that string are untouched; `pollAutoYes` takes the
|
|
52
|
+
* pair. `stripBoxDrawing` still runs exactly once per capture either way.
|
|
53
|
+
*
|
|
54
|
+
* @internal Exported for testing purposes only.
|
|
55
|
+
* @param worktreeId - Worktree identifier
|
|
56
|
+
* @param cliToolId - CLI tool type being polled
|
|
57
|
+
* @param captureLines - Optional number of lines to capture
|
|
58
|
+
* @param instanceId - Optional agent instance ID (Issue #896; defaults to primary session)
|
|
59
|
+
* @returns Cleaned output string (ANSI stripped)
|
|
60
|
+
*/
|
|
61
|
+
async function captureAndCleanOutput(worktreeId, cliToolId, captureLines, instanceId) {
|
|
62
|
+
return (await capturePollerFrame(worktreeId, cliToolId, captureLines, instanceId)).clean;
|
|
63
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Yes poller: the Enter fallback's audit answer and per-session epoch
|
|
4
|
+
* (Issue #3397) (Issue #3783: split out of `auto-yes-poller.ts`, which
|
|
5
|
+
* re-exports the public names; the Enter itself — `tryEnterFallback` — and its
|
|
6
|
+
* fresh-frame check stay there).
|
|
7
|
+
*
|
|
8
|
+
* Does not statically import `auto-yes-poller.ts` (no cycle outside the
|
|
9
|
+
* baseline in `import-cycles-baseline-3482`, which does not count dynamic
|
|
10
|
+
* `import()`).
|
|
11
|
+
*
|
|
12
|
+
* @module lib/polling/auto-yes-poller-enter-fallback
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AUTO_YES_ENTER_FALLBACK_ANSWER = void 0;
|
|
16
|
+
exports.syncEnterFallbackEpoch = syncEnterFallbackEpoch;
|
|
17
|
+
const auto_yes_enter_fallback_1 = require("./auto-yes-enter-fallback");
|
|
18
|
+
/**
|
|
19
|
+
* The audit row's `answer` for the Enter (Issue #3397): not a digit, so the
|
|
20
|
+
* History reads as "Auto-Yes pressed Enter" rather than as a chosen option.
|
|
21
|
+
*/
|
|
22
|
+
exports.AUTO_YES_ENTER_FALLBACK_ANSWER = '[Enter]';
|
|
23
|
+
/**
|
|
24
|
+
* Issue #3397: a session begun since the last tick (a relaunch the poller
|
|
25
|
+
* outlived) starts with no screen that had its Enter.
|
|
26
|
+
*
|
|
27
|
+
* @returns The session epoch the tick reads under
|
|
28
|
+
*/
|
|
29
|
+
function syncEnterFallbackEpoch(compositeKey, pollerState) {
|
|
30
|
+
const epoch = (0, auto_yes_enter_fallback_1.getEnterFallbackSessionEpoch)(compositeKey);
|
|
31
|
+
if ((pollerState.enterFallbackEpoch ?? 0) !== epoch) {
|
|
32
|
+
pollerState.enterFallbackSentKey = null;
|
|
33
|
+
pollerState.enterFallbackCandidateKey = null;
|
|
34
|
+
pollerState.enterFallbackEpoch = epoch;
|
|
35
|
+
}
|
|
36
|
+
return epoch;
|
|
37
|
+
}
|