commandmate 0.47.0 → 0.47.2
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 +36 -36
- 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 +15 -15
- 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 +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.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 +4 -4
- 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 +36 -36
- package/.next/server/chunks/{5048.js → 1185.js} +1 -1
- package/.next/server/chunks/1656.js +19 -0
- package/.next/server/chunks/2460.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/463.js +1 -0
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5595.js +1 -1
- package/.next/server/chunks/5611.js +1 -1
- package/.next/server/chunks/610.js +1 -0
- 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/6781.js +1 -1
- package/.next/server/chunks/6784.js +1 -0
- package/.next/server/chunks/8581.js +1 -1
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8918.js +1 -1
- 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 +1 -1
- 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/{2407-b2f524f99f7fc353.js → 2407-a6533805a86d05bd.js} +1 -1
- package/.next/static/chunks/9465-b59bb255b376c813.js +1 -0
- package/.next/static/chunks/app/{layout-419eaf7de340f4ab.js → layout-538d8d2746ad1588.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-46aced20b2b1c010.js +1 -0
- 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/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +23 -11
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +7 -1
- package/dist/cli/types/api-responses.d.ts +15 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +11 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +4 -1
- package/dist/server/src/lib/auto-yes-poller.js +269 -554
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +88 -6
- package/dist/server/src/lib/detection/prompt-detector.js +1 -1
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +1 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +26 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +42 -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-confirmation-ledger-types.js +114 -0
- package/dist/server/src/lib/polling/auto-yes-confirmation-ledger.js +1060 -0
- package/dist/server/src/lib/polling/auto-yes-ledger-records.js +143 -0
- package/dist/server/src/lib/polling/auto-yes-policy.js +36 -7
- package/dist/server/src/lib/polling/auto-yes-poller-capture.js +50 -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 +151 -0
- package/dist/server/src/lib/polling/auto-yes-poller-receipt-log.js +287 -0
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +75 -6
- package/dist/server/src/lib/polling/auto-yes-poller-steps.js +109 -0
- package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +11 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +21 -1
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +4 -1
- package/dist/server/src/lib/polling/response-checker-blank-response.js +30 -0
- package/dist/server/src/lib/polling/response-checker.js +5 -10
- package/dist/server/src/lib/prompt-observation/appearance.js +165 -0
- package/package.json +2 -2
- package/release-notes/0.47.1.json +20 -0
- package/release-notes/0.47.2.json +20 -0
- package/scripts/hooks/cmate-agent-event.sh +22 -0
- package/.next/server/chunks/1331.js +0 -22
- 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/5292.js +0 -7
- 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/9465-e5a351baa941f31b.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 → etorRtpxbQqqOzdUeXdw2}/_buildManifest.js +0 -0
- /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → etorRtpxbQqqOzdUeXdw2}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Yes poller: the agy hook-receipt bookkeeping and its withheld log lines
|
|
4
|
+
* (Issue #3783: split out of `auto-yes-poller.ts`, which re-exports the public
|
|
5
|
+
* names).
|
|
6
|
+
*
|
|
7
|
+
* Does not statically import `auto-yes-poller.ts` (no cycle outside the
|
|
8
|
+
* baseline in `import-cycles-baseline-3482`, which does not count dynamic
|
|
9
|
+
* `import()`).
|
|
10
|
+
*
|
|
11
|
+
* @module lib/polling/auto-yes-poller-receipt-log
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.withheldNoReceiptLoggedAt = void 0;
|
|
15
|
+
exports.logIfWithheldForWantOfReceipt = logIfWithheldForWantOfReceipt;
|
|
16
|
+
exports.noteAnswerSent = noteAnswerSent;
|
|
17
|
+
exports.receiptEpisodeOfSend = receiptEpisodeOfSend;
|
|
18
|
+
exports.noHookReceiptHint = noHookReceiptHint;
|
|
19
|
+
const antigravity_receipt_episodes_1 = require("./antigravity-receipt-episodes");
|
|
20
|
+
const antigravity_permission_receipts_1 = require("./antigravity-permission-receipts");
|
|
21
|
+
const auto_yes_resolver_1 = require("./auto-yes-resolver");
|
|
22
|
+
const auto_yes_policy_1 = require("./auto-yes-policy");
|
|
23
|
+
const logger_1 = require("../../lib/logger");
|
|
24
|
+
const global_state_1 = require("../global-state");
|
|
25
|
+
const auto_yes_suppression_reason_1 = require("./auto-yes-suppression-reason");
|
|
26
|
+
const auto_yes_suppression_state_1 = require("./auto-yes-suppression-state");
|
|
27
|
+
const logger = (0, logger_1.createLogger)('auto-yes-poller');
|
|
28
|
+
/**
|
|
29
|
+
* When `antigravity-autoyes-withheld-no-hook-receipt` was last logged, per
|
|
30
|
+
* compositeKey (Issue #2857). The poller re-reads a static pane every 2s, so the
|
|
31
|
+
* line is limited to one per {@link WITHHELD_NO_RECEIPT_LOG_INTERVAL_MS} per
|
|
32
|
+
* instance. globalThis for the same reason as the poller states above.
|
|
33
|
+
*/
|
|
34
|
+
exports.withheldNoReceiptLoggedAt = (0, global_state_1.getOrInitGlobal)('__autoYesWithheldNoReceiptLoggedAt', () => new Map());
|
|
35
|
+
/**
|
|
36
|
+
* Least gap between two `antigravity-autoyes-withheld-no-hook-receipt` lines for
|
|
37
|
+
* one instance. `antigravity-autoyes-withheld-by-policy` (Issue #3724) shares it.
|
|
38
|
+
*/
|
|
39
|
+
const WITHHELD_NO_RECEIPT_LOG_INTERVAL_MS = 60_000;
|
|
40
|
+
/**
|
|
41
|
+
* Say, once a minute, that Auto-Yes left an agy dialog alone for want of a hook
|
|
42
|
+
* receipt (Issue #2857).
|
|
43
|
+
*
|
|
44
|
+
* `detectPromptOnCleanFrame` hands a frame the receipt gate (#2849) withholds
|
|
45
|
+
* back as an ordinary `isPrompt: false`, so the poller cannot tell "no dialog on
|
|
46
|
+
* the pane" from "a dialog agy never asked us about" by looking at the result.
|
|
47
|
+
* The gate is the ONLY thing `receiptScope` changes, so the same frame read
|
|
48
|
+
* without it answering a prompt is exactly the withheld case. That second
|
|
49
|
+
* reading is taken only after the cheap tests: no receipt for this instance in
|
|
50
|
+
* the window (with one, the gate let the frame through and a no-prompt result is
|
|
51
|
+
* a real one) and no line for it in the last minute.
|
|
52
|
+
*
|
|
53
|
+
* Why it is worth a line: a machine whose `~/.gemini/config/hooks.json` points at
|
|
54
|
+
* another server (#2622) never sends us the question, and every real dialog then
|
|
55
|
+
* waits for a human with no sign of why. The line names the file to look at.
|
|
56
|
+
*
|
|
57
|
+
* A stale receipt does not always mean that, though (Issue #3724): a dialog the
|
|
58
|
+
* contract's autoYes withheld got its receipt, the server answered `ask`, and
|
|
59
|
+
* the dialog outlived the window. When `resolveAutoAnswerWithPolicy` on the
|
|
60
|
+
* ungated reading suppresses the answer by contract (the base rules would have
|
|
61
|
+
* answered it), the line is `antigravity-autoyes-withheld-by-policy` instead,
|
|
62
|
+
* naming the reason, the mode and the task. Both share the limit.
|
|
63
|
+
* The response-checker's own `antigravity-dialog-no-recent-receipt` stays at
|
|
64
|
+
* debug — it prints on every tick the same pane is read again.
|
|
65
|
+
*
|
|
66
|
+
* Issue #3820: says what it saw, for the confirmation ledger. The gated
|
|
67
|
+
* reading's `isPrompt: false` is not "the dialog is gone": past the receipt
|
|
68
|
+
* window the dialog is still up, and the ledger keeps it as the same
|
|
69
|
+
* confirmation. Nothing here changes on that account — the return value is the
|
|
70
|
+
* ungated reading this function already took, and the reason it recorded.
|
|
71
|
+
*
|
|
72
|
+
* @param compositeKey - The instance's key, for the once-a-minute limit
|
|
73
|
+
* @param readWithoutGate - The same frame read without `receiptScope`
|
|
74
|
+
* @returns The prompt the ungated reading saw, with the reason this call
|
|
75
|
+
* recorded or kept for it (null when none: a dialog the gate accepted and is
|
|
76
|
+
* waiting to be answered); null when no dialog was read past the gate
|
|
77
|
+
*/
|
|
78
|
+
function logIfWithheldForWantOfReceipt(worktreeId, instanceId, compositeKey, readWithoutGate) {
|
|
79
|
+
// Issue #3767: the gate's own verdict for this tick's candidate. Null means it
|
|
80
|
+
// never saw one (no dialog), `ok` that it let the frame through.
|
|
81
|
+
let verdict = (0, antigravity_receipt_episodes_1.getAntigravityReceiptVerdict)(worktreeId, instanceId);
|
|
82
|
+
if (verdict?.ok)
|
|
83
|
+
return null;
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
const ungated = readWithoutGate();
|
|
86
|
+
if (!ungated.isPrompt || !ungated.promptData)
|
|
87
|
+
return null;
|
|
88
|
+
const promptData = ungated.promptData;
|
|
89
|
+
// The gate was not consulted (the gated reading declined the frame on screen
|
|
90
|
+
// grounds alone) yet the frame reads as a prompt: judge it here.
|
|
91
|
+
verdict ??= (0, antigravity_receipt_episodes_1.judgeAntigravityPermissionReceipt)(worktreeId, instanceId, now);
|
|
92
|
+
if (verdict.ok)
|
|
93
|
+
return null;
|
|
94
|
+
// Issue #3724: a contract that withholds the answer makes the server reply
|
|
95
|
+
// `ask`, so the dialog stays up past the receipt window. The cause is then the
|
|
96
|
+
// contract, not a hooks.json that points elsewhere. Judged exactly as the tick
|
|
97
|
+
// judges a prompt it can read — the base rules first, then the contract — so
|
|
98
|
+
// a prompt the base rules never answer (a checkbox, a typed option) is not
|
|
99
|
+
// blamed on the contract. Policy and task id come from one lookup.
|
|
100
|
+
// Issue #3822: a failed lookup stays unknown here, as it is for the tick, so
|
|
101
|
+
// this re-judgement withholds too instead of reading "no contract" and
|
|
102
|
+
// dropping the `policy-lookup-failed` record the tick made.
|
|
103
|
+
const { policy, taskId } = (0, auto_yes_policy_1.getSessionAutoYesPolicyLookupEntry)(worktreeId, 'antigravity', instanceId);
|
|
104
|
+
const mode = (0, auto_yes_resolver_1.policyLookupMode)(policy);
|
|
105
|
+
const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(ungated.promptData, policy);
|
|
106
|
+
// Issue #3767: `answered` is the dialog the gate already let through on this
|
|
107
|
+
// receipt, still up past the window. Unless the contract withheld it, that is
|
|
108
|
+
// not a missing receipt: neither recorded nor logged, nor counted for the limit.
|
|
109
|
+
// Issue #3789: `answered` is also a dialog accepted but never sent to (the
|
|
110
|
+
// tick recorded its own reason, if any, and that record is kept). One the
|
|
111
|
+
// poller DID send keys to and still up past the grace is `outlived`, which is
|
|
112
|
+
// recorded and logged like the others, so the stop is not a silent one.
|
|
113
|
+
// Issue #3796: the reason the poller recorded for this dialog (partial-answer,
|
|
114
|
+
// the contract, …) while it could still read it inside the window was not
|
|
115
|
+
// re-stamped once the window closed — the gated reading stopped seeing the
|
|
116
|
+
// prompt — so `cmate wait` dropped it as stale a minute later with the dialog
|
|
117
|
+
// still up. Re-stamped here on every tick the dialog stays — only while it
|
|
118
|
+
// still holds under this tick's evaluation — and kept over a `no-hook-receipt`
|
|
119
|
+
// for it: it is the more exact reason.
|
|
120
|
+
const keptPartialAnswer = refreshEpisodeSuppression(worktreeId, instanceId, verdict, resolution);
|
|
121
|
+
// Issue #3796 review D: a contract that withholds the prompt now is published
|
|
122
|
+
// whatever was recorded before — none at all (the window closed before the
|
|
123
|
+
// tick could read it, or an ended contract's record was dropped and a new one
|
|
124
|
+
// withholds it again) or another reason. Without it `cmate wait` read no
|
|
125
|
+
// reason and held the prompt as one Auto-Yes was answering. Only a partial
|
|
126
|
+
// answer still on screen comes first, as it does on the tick (step 2.5).
|
|
127
|
+
if (resolution.suppressedBy && !keptPartialAnswer) {
|
|
128
|
+
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, 'antigravity', instanceId, {
|
|
129
|
+
reason: resolution.suppressedBy,
|
|
130
|
+
mode,
|
|
131
|
+
promptType: ungated.promptData.type,
|
|
132
|
+
...(resolution.pattern !== undefined ? { pattern: resolution.pattern } : {}),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
const seen = (reason) => ({ promptData, reason });
|
|
136
|
+
// What stands recorded for the prompt after this call: a kept partial answer
|
|
137
|
+
// comes before the contract, as the record above.
|
|
138
|
+
const contractReason = keptPartialAnswer ? auto_yes_suppression_reason_1.PARTIAL_ANSWER_SUPPRESSION_REASON : resolution.suppressedBy;
|
|
139
|
+
if (!resolution.suppressedBy && (verdict.cause === 'answered' || keptPartialAnswer)) {
|
|
140
|
+
return seen(keptPartialAnswer ? auto_yes_suppression_reason_1.PARTIAL_ANSWER_SUPPRESSION_REASON : null);
|
|
141
|
+
}
|
|
142
|
+
const logDue = claimWithheldLogSlot(compositeKey, now);
|
|
143
|
+
if (resolution.suppressedBy) {
|
|
144
|
+
if (!logDue)
|
|
145
|
+
return seen(contractReason ?? null);
|
|
146
|
+
logger.info('antigravity-autoyes-withheld-by-policy', {
|
|
147
|
+
worktreeId,
|
|
148
|
+
instanceId: instanceId ?? 'antigravity',
|
|
149
|
+
reason: resolution.suppressedBy,
|
|
150
|
+
mode,
|
|
151
|
+
taskId,
|
|
152
|
+
hint: resolution.suppressedBy === auto_yes_suppression_reason_1.POLICY_LOOKUP_FAILED_SUPPRESSION_REASON
|
|
153
|
+
? '契約の照会に失敗したので答えていない。サーバーログの policy-lookup-failed を確認'
|
|
154
|
+
: '契約の autoYes が答えを止めている。契約の autoYes を確認',
|
|
155
|
+
});
|
|
156
|
+
return seen(contractReason ?? null);
|
|
157
|
+
}
|
|
158
|
+
// Issue #3767: recorded on every tick (the record's `at` follows the prompt
|
|
159
|
+
// while it stays up), logged once a minute.
|
|
160
|
+
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, 'antigravity', instanceId, {
|
|
161
|
+
reason: auto_yes_suppression_reason_1.NO_HOOK_RECEIPT_SUPPRESSION_REASON,
|
|
162
|
+
mode: null,
|
|
163
|
+
promptType: ungated.promptData.type,
|
|
164
|
+
});
|
|
165
|
+
if (!logDue)
|
|
166
|
+
return seen(auto_yes_suppression_reason_1.NO_HOOK_RECEIPT_SUPPRESSION_REASON);
|
|
167
|
+
logger.info('antigravity-autoyes-withheld-no-hook-receipt', {
|
|
168
|
+
worktreeId,
|
|
169
|
+
instanceId: instanceId ?? 'antigravity',
|
|
170
|
+
windowMs: antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS,
|
|
171
|
+
hint: noHookReceiptHint(verdict, now),
|
|
172
|
+
});
|
|
173
|
+
return seen(auto_yes_suppression_reason_1.NO_HOOK_RECEIPT_SUPPRESSION_REASON);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Whether a withheld line for `compositeKey` is due at `now` under the
|
|
177
|
+
* once-a-minute limit; when it is, entries past the interval are pruned and
|
|
178
|
+
* `now` is taken as this key's last line.
|
|
179
|
+
*/
|
|
180
|
+
function claimWithheldLogSlot(compositeKey, now) {
|
|
181
|
+
const lastLoggedAt = exports.withheldNoReceiptLoggedAt.get(compositeKey);
|
|
182
|
+
const logDue = lastLoggedAt === undefined || now - lastLoggedAt >= WITHHELD_NO_RECEIPT_LOG_INTERVAL_MS;
|
|
183
|
+
if (logDue) {
|
|
184
|
+
for (const [key, loggedAt] of exports.withheldNoReceiptLoggedAt) {
|
|
185
|
+
if (now - loggedAt >= WITHHELD_NO_RECEIPT_LOG_INTERVAL_MS)
|
|
186
|
+
exports.withheldNoReceiptLoggedAt.delete(key);
|
|
187
|
+
}
|
|
188
|
+
exports.withheldNoReceiptLoggedAt.set(compositeKey, now);
|
|
189
|
+
}
|
|
190
|
+
return logDue;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Issue #3796: keep the suppression the poller recorded during this dialog's
|
|
194
|
+
* episode current while the dialog it accepted (`answered` / `outlived`) is
|
|
195
|
+
* still up. Only a record made since the dialog was first read, and never the
|
|
196
|
+
* receipt gate's own `no-hook-receipt` (the caller records that itself). A
|
|
197
|
+
* record is kept only while its reason still holds NOW:
|
|
198
|
+
*
|
|
199
|
+
* - `partial-answer` remembers an event: it holds for as long as the dialog
|
|
200
|
+
* the keys went to stays up (this episode), and is re-stamped here;
|
|
201
|
+
* - a contract reason is the contract's verdict on the prompt, re-evaluated on
|
|
202
|
+
* every tick (`resolution`): no verdict (the contract ended, or now answers
|
|
203
|
+
* it) drops the record — the dialog is then `answered` / `outlived` like any
|
|
204
|
+
* other. A verdict is recorded by the caller (review D), whatever was here;
|
|
205
|
+
* - any other reason is left as it was recorded.
|
|
206
|
+
*
|
|
207
|
+
* @returns true when a `partial-answer` that still holds was re-stamped
|
|
208
|
+
*/
|
|
209
|
+
function refreshEpisodeSuppression(worktreeId, instanceId, verdict, resolution) {
|
|
210
|
+
if (verdict.cause !== 'answered' && verdict.cause !== 'outlived')
|
|
211
|
+
return false;
|
|
212
|
+
const own = (0, auto_yes_suppression_state_1.getLastPolicySuppression)(worktreeId, 'antigravity', instanceId);
|
|
213
|
+
if (own === null || own.reason === auto_yes_suppression_reason_1.NO_HOOK_RECEIPT_SUPPRESSION_REASON || !(own.at >= verdict.firstSeenAt)) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
if (own.reason === auto_yes_suppression_reason_1.PARTIAL_ANSWER_SUPPRESSION_REASON) {
|
|
217
|
+
// The memory is the episode's: the dialog the keys went to is still the one
|
|
218
|
+
// up (same episode, accepted on the same receipt). Not `getPartialAnswer`:
|
|
219
|
+
// the tick forgets it as soon as the gated reading stops seeing the prompt,
|
|
220
|
+
// which past the window is every tick.
|
|
221
|
+
const { at: _recordedAt, ...suppression } = own;
|
|
222
|
+
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, 'antigravity', instanceId, suppression);
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
if (auto_yes_suppression_reason_1.CONTRACT_SUPPRESSION_REASONS.has(own.reason) && !resolution.suppressedBy) {
|
|
226
|
+
(0, auto_yes_suppression_state_1.forgetPolicySuppression)(worktreeId, 'antigravity', instanceId);
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Issue #3789: keys for an agy dialog the receipt gate accepted reached tmux.
|
|
232
|
+
* Only here does the gate start the grace after which a dialog still up is
|
|
233
|
+
* reported as `outlived`; the tick's `no_answer` exits (another server's session,
|
|
234
|
+
* a partial answer, the base rules or the contract not answering) never get
|
|
235
|
+
* here, so their own records are not overwritten by `no-hook-receipt`.
|
|
236
|
+
*
|
|
237
|
+
* Issue #3796: `interrupted` — the send began and was cut short (stopped
|
|
238
|
+
* part-way, or failed). Its keys may be on the pane and the receipt is spent,
|
|
239
|
+
* so the grace starts here too; without it the dialog stayed `answered`, and
|
|
240
|
+
* silent, for as long as it stayed up.
|
|
241
|
+
*/
|
|
242
|
+
function noteAnswerSent(cliToolId, worktreeId, instanceId, interrupted = false, forReceiptAt) {
|
|
243
|
+
if (cliToolId !== 'antigravity')
|
|
244
|
+
return;
|
|
245
|
+
(0, antigravity_receipt_episodes_1.markAntigravityAnswerSent)(worktreeId, instanceId, Date.now(), {
|
|
246
|
+
interrupted,
|
|
247
|
+
...(forReceiptAt !== undefined ? { forReceiptAt } : {}),
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Issue #3796 review: the agy episode a send is about to go to, read before
|
|
252
|
+
* its first await; null for other tools. Given back to {@link noteAnswerSent}
|
|
253
|
+
* however the send came back — whole, failed or cut short (review E) — so that
|
|
254
|
+
* only that episode is marked — the same
|
|
255
|
+
* idea as the Enter record's generation check in `tryEnterFallback`.
|
|
256
|
+
*/
|
|
257
|
+
function receiptEpisodeOfSend(cliToolId, worktreeId, instanceId) {
|
|
258
|
+
return cliToolId === 'antigravity' ? (0, antigravity_receipt_episodes_1.getAntigravityAcceptedReceiptAt)(worktreeId, instanceId) : null;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* The hint for `antigravity-autoyes-withheld-no-hook-receipt` (Issue #3767):
|
|
262
|
+
* which of the withheld cases it was decides where to look.
|
|
263
|
+
*/
|
|
264
|
+
function noHookReceiptHint(verdict, now = Date.now()) {
|
|
265
|
+
const seconds = verdict.ageMs === null ? null : Math.round(verdict.ageMs / 1000);
|
|
266
|
+
// `lapsed` says how long ago, so from now: the line repeats once a minute.
|
|
267
|
+
const secondsAgo = verdict.lastReceiptAt === null ? null : Math.round((now - verdict.lastReceiptAt) / 1000);
|
|
268
|
+
switch (verdict.cause) {
|
|
269
|
+
case 'never':
|
|
270
|
+
return 'hook の受信が一度も無いため Auto-Yes は答えなかった。~/.gemini/config/hooks.json の向き先(#2622)を確認';
|
|
271
|
+
case 'late':
|
|
272
|
+
return `最後の受信から ${seconds} 秒後に確認が出た(窓 ${antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS / 1000} 秒の外)ため答えなかった。人が答える(auto-yes --disable → prompt --json → respond --expect-screen)。続くなら ~/.gemini/config/hooks.json の向き先(#2622)も確認`;
|
|
273
|
+
case 'lapsed':
|
|
274
|
+
return `最後の受信は ${secondsAgo} 秒前で途絶えている(hook が届かなくなった)。hooks.json の向き先(#2622)と agy の再起動を確認`;
|
|
275
|
+
case 'predates':
|
|
276
|
+
return '確認は最後の受信より前から画面に出ていた(引用か別の確認)ため答えなかった。人が答える';
|
|
277
|
+
case 'used':
|
|
278
|
+
return '最後の受信は直前の確認に使い済み。この確認に対する受信は無いため答えなかった。人が答える';
|
|
279
|
+
case 'outlived':
|
|
280
|
+
if (verdict.answerInterrupted === true) {
|
|
281
|
+
return `Auto-Yes が最後の受信の確認へ答えを送る途中で送信が止まり(キーの一部が入力に残っている可能性がある)、${antigravity_receipt_episodes_1.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS / 1000} 秒を過ぎても確認が画面に残っている。未使用の受信が無いため、もう一度は答えない。人が答える(auto-yes --disable → prompt --json → respond --expect-screen)`;
|
|
282
|
+
}
|
|
283
|
+
return `Auto-Yes が最後の受信の確認へキーを送ってから ${antigravity_receipt_episodes_1.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS / 1000} 秒を過ぎても、確認が画面に残っている。キーで確認が閉じなかったか、新しい受信の無い別の確認と入れ替わった(画面からは区別できない)。未使用の受信が無いため、もう一度は答えない。人が答える(auto-yes --disable → prompt --json → respond --expect-screen)`;
|
|
284
|
+
default:
|
|
285
|
+
return 'hook の受信記録が直近に無いため Auto-Yes は答えなかった。~/.gemini/config/hooks.json の向き先(#2622)を確認';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.promptFrameKey = promptFrameKey;
|
|
10
10
|
exports.warnOncePerFrame = warnOncePerFrame;
|
|
11
11
|
exports.partialAnswerScreenKey = partialAnswerScreenKey;
|
|
12
|
+
exports.ledgerScreenKey = ledgerScreenKey;
|
|
12
13
|
exports.getPartialAnswer = getPartialAnswer;
|
|
13
14
|
exports.forgetPartialAnswer = forgetPartialAnswer;
|
|
14
15
|
exports.forgetPartialAnswersByWorktree = forgetPartialAnswersByWorktree;
|
|
@@ -22,6 +23,7 @@ const logger_1 = require("../../lib/logger");
|
|
|
22
23
|
const auto_yes_state_1 = require("../auto-yes-state");
|
|
23
24
|
const global_state_1 = require("../global-state");
|
|
24
25
|
const auto_yes_enter_fallback_state_1 = require("./auto-yes-enter-fallback-state");
|
|
26
|
+
const appearance_1 = require("../prompt-observation/appearance");
|
|
25
27
|
const logger = (0, logger_1.createLogger)('auto-yes-poller');
|
|
26
28
|
/**
|
|
27
29
|
* Issue #2995: what makes two ticks "the same prompt" for `warnOncePerFrame`.
|
|
@@ -74,15 +76,77 @@ function partialAnswerScreenKey(promptData) {
|
|
|
74
76
|
const options = promptData.type === 'multiple_choice'
|
|
75
77
|
? promptData.options.map((o) => `${o.number}.${o.label}`).join('\n')
|
|
76
78
|
: promptData.options.join('\n');
|
|
77
|
-
return [(0, prompt_key_1.generatePromptKey)(promptData), options, withoutCursorMarks(promptData
|
|
79
|
+
return [(0, prompt_key_1.generatePromptKey)(promptData), options, withoutCursorMarks(promptData)].join('\u0000');
|
|
78
80
|
}
|
|
79
81
|
/**
|
|
80
82
|
* `approvalTarget` with the cursor taken out: the generic parser copies the
|
|
81
83
|
* option panel into it, `❯` row included, so a moved cursor would otherwise
|
|
82
|
-
* read as another prompt.
|
|
83
|
-
*
|
|
84
|
+
* read as another prompt.
|
|
85
|
+
*
|
|
86
|
+
* [Issue #3817] Only the rows the block reader adopted as the options are
|
|
87
|
+
* aligned (`approvalTargetWithOptionRowsAligned`, the reading #3812 gives the
|
|
88
|
+
* strict respond), so two commands whose bodies differ by an indent or a `>`
|
|
89
|
+
* are two screens. A label the block reader read may run longer than the
|
|
90
|
+
* prompt's — it folds wrapped rows and the footer in — so it only has to start
|
|
91
|
+
* with it. A yes/no prompt has no cursor and is read as it is. A list whose
|
|
92
|
+
* rows cannot be told that way keeps the old reading below: two bodies then
|
|
93
|
+
* read as one screen, which holds the prompt for a human rather than typing
|
|
94
|
+
* the answer twice.
|
|
95
|
+
*/
|
|
96
|
+
function withoutCursorMarks(promptData) {
|
|
97
|
+
const target = promptData.approvalTarget ?? '';
|
|
98
|
+
if (promptData.type !== 'multiple_choice')
|
|
99
|
+
return target;
|
|
100
|
+
const aligned = (0, appearance_1.approvalTargetWithOptionRowsAligned)(target, promptData.options.map((o) => o.label), (read, named) => read.startsWith(named));
|
|
101
|
+
return aligned ?? withoutLeadingMarks(target);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Which confirmation the ledger counts a prompt as (Issue #3820): the
|
|
105
|
+
* {@link partialAnswerScreenKey} reading where the option rows can be told,
|
|
106
|
+
* and otherwise one that still keeps the body. That key's fallback takes the
|
|
107
|
+
* marks and indent off every row — for a partial answer, two bodies reading as
|
|
108
|
+
* one screen holds the prompt for a human, the safe side — but for counting it
|
|
109
|
+
* makes two confirmations whose commands differ by a `>` or an indent one.
|
|
110
|
+
* Here only the rows that ARE the options the reader read — the row's number
|
|
111
|
+
* and label match one of `promptData.options` — lose their gutter (where the
|
|
112
|
+
* cursor sits); every other row, a numbered line of the body included, stays
|
|
113
|
+
* byte for byte. The match takes the separator as the readers do: `1.`, `1)`
|
|
114
|
+
* or a bare `1` followed by any run of spaces (`❯ 1 Yes`).
|
|
84
115
|
*/
|
|
85
|
-
function
|
|
116
|
+
function ledgerScreenKey(promptData) {
|
|
117
|
+
if (promptData.type !== 'multiple_choice')
|
|
118
|
+
return partialAnswerScreenKey(promptData);
|
|
119
|
+
const target = promptData.approvalTarget ?? '';
|
|
120
|
+
const aligned = (0, appearance_1.approvalTargetWithOptionRowsAligned)(target, promptData.options.map((o) => o.label), (read, named) => read.startsWith(named));
|
|
121
|
+
if (aligned !== null)
|
|
122
|
+
return partialAnswerScreenKey(promptData);
|
|
123
|
+
const options = promptData.options.map((o) => `${o.number}.${o.label}`).join('\n');
|
|
124
|
+
return [(0, prompt_key_1.generatePromptKey)(promptData), options, withOptionRowGuttersAligned(target, promptData.options)].join('\u0000');
|
|
125
|
+
}
|
|
126
|
+
/** A row's leading cursor marks and indentation. */
|
|
127
|
+
const LEADING_MARKS_PATTERN = /^[\s\u276F\u203A>\u25B6\u25BA\u25CF\u25CB\u25C9\u2192]+/u;
|
|
128
|
+
/** A row's option number and the text after its separator (`1.`, `1)` or `1`, then spaces). */
|
|
129
|
+
const OPTION_ROW_PATTERN = /^(\d+)(?:[.)]\s*|\s+)(.*)$/u;
|
|
130
|
+
const collapseSpaces = (text) => text.replace(/\s+/gu, ' ').trim();
|
|
131
|
+
/** Rows that match one of `options` lose their leading marks and indent; the rest stay. */
|
|
132
|
+
function withOptionRowGuttersAligned(text, options) {
|
|
133
|
+
return text
|
|
134
|
+
.split('\n')
|
|
135
|
+
.map((line) => {
|
|
136
|
+
const row = OPTION_ROW_PATTERN.exec(line.replace(LEADING_MARKS_PATTERN, ''));
|
|
137
|
+
if (row === null)
|
|
138
|
+
return line;
|
|
139
|
+
const rest = collapseSpaces(row[2]);
|
|
140
|
+
const isOption = options.some((option) => {
|
|
141
|
+
const label = collapseSpaces(option.label);
|
|
142
|
+
return option.number === Number(row[1]) && label !== '' && rest.startsWith(label);
|
|
143
|
+
});
|
|
144
|
+
return isOption ? line.replace(LEADING_MARKS_PATTERN, '') : line;
|
|
145
|
+
})
|
|
146
|
+
.join('\n');
|
|
147
|
+
}
|
|
148
|
+
/** Every row's leading marks and indentation taken out (the reading before #3817). */
|
|
149
|
+
function withoutLeadingMarks(text) {
|
|
86
150
|
return text
|
|
87
151
|
.split('\n')
|
|
88
152
|
.map((line) => line.replace(/^[\s\u276F\u203A>\u25B6\u25BA\u25CF\u25CB\u25C9\u2192]+/u, ''))
|
|
@@ -158,8 +222,12 @@ function clearPartialAnswers() {
|
|
|
158
222
|
/** The sends in flight. globalThis for hot reload (#153), like the Map above. */
|
|
159
223
|
const sendAttempts = (0, global_state_1.getOrInitGlobal)('__autoYesSendAttempts', () => new Set());
|
|
160
224
|
const sendAttemptSeq = (0, global_state_1.getOrInitGlobal)('__autoYesSendAttemptSeq', () => ({ last: 0 }));
|
|
161
|
-
/**
|
|
162
|
-
|
|
225
|
+
/**
|
|
226
|
+
* Register a send about to start (the poller, before `sendPromptAnswer`).
|
|
227
|
+
*
|
|
228
|
+
* @param ledger - Issue #3820: the ledger's handle for this send, if any
|
|
229
|
+
*/
|
|
230
|
+
function beginSendAttempt(compositeKey, screenKey, epoch, ledger = null) {
|
|
163
231
|
const attempt = {
|
|
164
232
|
seq: ++sendAttemptSeq.last,
|
|
165
233
|
screenKey,
|
|
@@ -167,6 +235,7 @@ function beginSendAttempt(compositeKey, screenKey, epoch) {
|
|
|
167
235
|
recordEpoch: epoch,
|
|
168
236
|
moved: false,
|
|
169
237
|
state: 'pending',
|
|
238
|
+
ledger,
|
|
170
239
|
};
|
|
171
240
|
sendAttempts.add(attempt);
|
|
172
241
|
return attempt;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Yes poller: synchronous steps of `detectAndRespondToPrompt` that decide
|
|
4
|
+
* whether a read prompt is left alone (Issue #3781) (Issue #3783: split out of
|
|
5
|
+
* `auto-yes-poller.ts`).
|
|
6
|
+
*
|
|
7
|
+
* Does not statically import `auto-yes-poller.ts` (no cycle outside the
|
|
8
|
+
* baseline in `import-cycles-baseline-3482`, which does not count dynamic
|
|
9
|
+
* `import()`).
|
|
10
|
+
*
|
|
11
|
+
* @module lib/polling/auto-yes-poller-steps
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.withheldForEarlierSend = withheldForEarlierSend;
|
|
15
|
+
exports.resolveAnswerUnderPolicy = resolveAnswerUnderPolicy;
|
|
16
|
+
exports.skippedForUnownedSession = skippedForUnownedSession;
|
|
17
|
+
const auto_yes_resolver_1 = require("./auto-yes-resolver");
|
|
18
|
+
const auto_yes_policy_1 = require("./auto-yes-policy");
|
|
19
|
+
const auto_yes_suppression_reason_1 = require("./auto-yes-suppression-reason");
|
|
20
|
+
const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
|
|
21
|
+
const auto_yes_prompt_suppression_1 = require("./auto-yes-prompt-suppression");
|
|
22
|
+
const auto_yes_confirmation_ledger_1 = require("./auto-yes-confirmation-ledger");
|
|
23
|
+
/**
|
|
24
|
+
* Step 2.5 of `detectAndRespondToPrompt`: whether an earlier send to this
|
|
25
|
+
* screen keeps the prompt from being answered now.
|
|
26
|
+
*
|
|
27
|
+
* @returns true when the prompt is withheld (the caller returns `no_answer`)
|
|
28
|
+
*/
|
|
29
|
+
function withheldForEarlierSend(judged, screenKey, epoch) {
|
|
30
|
+
const { worktreeId, cliToolId, instanceId, compositeKey, pollerState, promptData, frameKey } = judged;
|
|
31
|
+
const partial = (0, auto_yes_poller_state_1.getPartialAnswer)(compositeKey, epoch);
|
|
32
|
+
if (partial !== null) {
|
|
33
|
+
if (partial.screenKey === screenKey) {
|
|
34
|
+
(0, auto_yes_prompt_suppression_1.suppressAndWarnOnce)(judged, {
|
|
35
|
+
reason: auto_yes_suppression_reason_1.PARTIAL_ANSWER_SUPPRESSION_REASON,
|
|
36
|
+
mode: null,
|
|
37
|
+
promptType: promptData.type,
|
|
38
|
+
}, `${frameKey}\u0000partial-answer`, 'poller:auto-yes-skipped-partial-answer', { promptType: promptData.type, stoppedAt: partial.at });
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
// Another prompt is on screen: only the sends at the forgotten one's
|
|
42
|
+
// screen go with it (#3713) — one in flight at this screen keeps its hold.
|
|
43
|
+
(0, auto_yes_poller_state_1.forgetPartialAnswer)(compositeKey, partial.screenKey);
|
|
44
|
+
}
|
|
45
|
+
// Issue #3713: a worktree ID move carried an answer still being sent to
|
|
46
|
+
// this session's key. Its keys may already be on the pane, and how its send
|
|
47
|
+
// ends is not known yet — so this screen gets no keys until it comes back
|
|
48
|
+
// (recorded as a partial answer above, or gone).
|
|
49
|
+
if ((0, auto_yes_poller_state_1.hasMovedSendInFlight)(compositeKey, epoch, screenKey)) {
|
|
50
|
+
// Issue #3820: a stop the policy record never carries — the ledger's own reason.
|
|
51
|
+
(0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(judged, 'moved-send-in-flight');
|
|
52
|
+
(0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, `${frameKey}\u0000moved-send-in-flight`, 'poller:auto-yes-skipped-moved-send-in-flight', { worktreeId, cliToolId, instanceId, promptType: promptData.type });
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Step 4 of `detectAndRespondToPrompt`: the auto answer under the execution
|
|
59
|
+
* contract's policy, recording the suppression when the policy withholds it.
|
|
60
|
+
*
|
|
61
|
+
* @returns The answer to send, or null when there is none
|
|
62
|
+
*/
|
|
63
|
+
function resolveAnswerUnderPolicy(judged) {
|
|
64
|
+
const { worktreeId, cliToolId, instanceId, promptData, frameKey } = judged;
|
|
65
|
+
// Issue #3822: a failed lookup reaches the resolver as unknown and withholds.
|
|
66
|
+
const policy = (0, auto_yes_policy_1.getSessionAutoYesPolicy)(worktreeId, cliToolId, instanceId);
|
|
67
|
+
const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(promptData, policy);
|
|
68
|
+
if (resolution.suppressedBy) {
|
|
69
|
+
const mode = (0, auto_yes_resolver_1.policyLookupMode)(policy);
|
|
70
|
+
// Issue #1684: the log line alone leaves a CLI-driven pipeline blind to
|
|
71
|
+
// why its worker stalled. Record the suppression so buildCurrentOutput
|
|
72
|
+
// can publish it (`autoYes.lastSuppression` in capture --json).
|
|
73
|
+
(0, auto_yes_prompt_suppression_1.suppressAndWarnOnce)(judged, {
|
|
74
|
+
reason: resolution.suppressedBy,
|
|
75
|
+
mode,
|
|
76
|
+
promptType: promptData.type,
|
|
77
|
+
pattern: resolution.pattern,
|
|
78
|
+
}, `${frameKey}\u0000${resolution.suppressedBy}\u0000${mode ?? ''}\u0000${resolution.pattern ?? ''}`, 'poller:auto-yes-suppressed-by-policy', {
|
|
79
|
+
reason: resolution.suppressedBy,
|
|
80
|
+
mode,
|
|
81
|
+
pattern: resolution.pattern,
|
|
82
|
+
promptType: promptData.type,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return resolution.answer;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Issue #2865: whether the session is not this server's to type into (another
|
|
89
|
+
* server created it, or the worktree is gone), warning once per frame.
|
|
90
|
+
*
|
|
91
|
+
* @returns true when the caller returns `no_answer`
|
|
92
|
+
*/
|
|
93
|
+
function skippedForUnownedSession(judged, sessionName, ownership) {
|
|
94
|
+
const { worktreeId, cliToolId, instanceId, pollerState, frameKey } = judged;
|
|
95
|
+
if (ownership === null || ownership.verdict === 'foreign') {
|
|
96
|
+
// Issue #3820: as above, the ledger's own reason.
|
|
97
|
+
(0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(judged, 'foreign-session');
|
|
98
|
+
(0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, `${frameKey}\u0000${sessionName}\u0000${ownership ? 'foreign' : 'worktree_not_found'}`, 'poller:auto-yes-skipped-foreign-session', {
|
|
99
|
+
worktreeId,
|
|
100
|
+
cliToolId,
|
|
101
|
+
instanceId,
|
|
102
|
+
sessionName,
|
|
103
|
+
sessionPath: ownership?.sessionPath ?? null,
|
|
104
|
+
reason: ownership ? 'foreign' : 'worktree_not_found',
|
|
105
|
+
});
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
@@ -24,6 +24,7 @@ const auto_yes_confirm_page_1 = require("./auto-yes-confirm-page");
|
|
|
24
24
|
const auto_yes_suppression_state_1 = require("./auto-yes-suppression-state");
|
|
25
25
|
const auto_yes_dialog_gate_1 = require("./auto-yes-dialog-gate");
|
|
26
26
|
const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
|
|
27
|
+
const auto_yes_confirmation_ledger_1 = require("./auto-yes-confirmation-ledger");
|
|
27
28
|
/**
|
|
28
29
|
* Issue #3214: the form the four suppression exits of `detectAndRespondToPrompt`
|
|
29
30
|
* share. Records why Auto-Yes left the prompt alone (`recordPolicySuppression`,
|
|
@@ -38,6 +39,8 @@ const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
|
|
|
38
39
|
function suppressAndWarnOnce(prompt, suppression, warnFrameKey, event, detail) {
|
|
39
40
|
const { worktreeId, cliToolId, instanceId } = prompt;
|
|
40
41
|
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, cliToolId, instanceId, suppression);
|
|
42
|
+
// Issue #3820: the same stop, as an interval of the confirmation on screen.
|
|
43
|
+
(0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(prompt, suppression.reason);
|
|
41
44
|
(0, auto_yes_poller_state_1.warnOncePerFrame)(prompt.pollerState, warnFrameKey, event, {
|
|
42
45
|
worktreeId,
|
|
43
46
|
cliToolId,
|
|
@@ -280,6 +283,7 @@ function suppressIfNotOursToAnswer(prompt, frame) {
|
|
|
280
283
|
if (!dialogGate.allowed) {
|
|
281
284
|
return { kind: 'dialog-gate-refused', dialogGate };
|
|
282
285
|
}
|
|
286
|
+
prompt.dialogGate = dialogGate;
|
|
283
287
|
return { kind: 'ours' };
|
|
284
288
|
}
|
|
285
289
|
/**
|
|
@@ -296,6 +300,8 @@ function suppressUnclassifiedFrame(prompt, dialogGate) {
|
|
|
296
300
|
gateMode: dialogGate.mode,
|
|
297
301
|
});
|
|
298
302
|
}
|
|
303
|
+
/** Issue #3820: the ledger's screen key for agy's startup trust screen (not a `partialAnswerScreenKey`). */
|
|
304
|
+
const ANTIGRAVITY_TRUST_SCREEN_LEDGER_KEY = 'antigravity-startup-trust';
|
|
299
305
|
/**
|
|
300
306
|
* Issue #3757: agy's startup folder-trust screen, which the tick read as no
|
|
301
307
|
* prompt at all — it is unnumbered, so neither agy's dialog reader nor the
|
|
@@ -330,6 +336,11 @@ function suppressAntigravityTrustScreen(worktreeId, instanceId, pollerState, fra
|
|
|
330
336
|
mode: null,
|
|
331
337
|
promptType: 'multiple_choice',
|
|
332
338
|
});
|
|
339
|
+
// Issue #3820: unnumbered, so no prompt data and no screen key of its own —
|
|
340
|
+
// the screen is one confirmation for as long as it stays up.
|
|
341
|
+
const ledgerScope = { worktreeId, cliToolId: 'antigravity', instanceId };
|
|
342
|
+
(0, auto_yes_confirmation_ledger_1.observeLedgerScreen)(ledgerScope, ANTIGRAVITY_TRUST_SCREEN_LEDGER_KEY, 'multiple_choice');
|
|
343
|
+
(0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(ledgerScope, auto_yes_suppression_reason_1.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON);
|
|
333
344
|
(0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, 'antigravity-startup-trust', 'poller:auto-yes-skipped-startup-trust', {
|
|
334
345
|
worktreeId,
|
|
335
346
|
cliToolId: 'antigravity',
|
|
@@ -22,12 +22,25 @@
|
|
|
22
22
|
* (`hooks/useAutoYes.ts`) imports this module.
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.MAX_DENY_MATCH_TEXT_LENGTH = exports.MAX_DENY_PATTERN_LENGTH = void 0;
|
|
25
|
+
exports.MAX_DENY_MATCH_TEXT_LENGTH = exports.MAX_DENY_PATTERN_LENGTH = exports.AUTO_YES_POLICY_UNKNOWN = void 0;
|
|
26
|
+
exports.isAutoYesPolicyUnknown = isAutoYesPolicyUnknown;
|
|
27
|
+
exports.policyLookupMode = policyLookupMode;
|
|
26
28
|
exports.evaluatePolicyAgainstTexts = evaluatePolicyAgainstTexts;
|
|
27
29
|
exports.resolveAutoAnswerWithPolicy = resolveAutoAnswerWithPolicy;
|
|
28
30
|
exports.resolveAutoAnswer = resolveAutoAnswer;
|
|
29
31
|
const auto_yes_config_1 = require("../../config/auto-yes-config");
|
|
32
|
+
const auto_yes_suppression_reason_1 = require("./auto-yes-suppression-reason");
|
|
30
33
|
const prompt_answer_semantic_1 = require("../../lib/prompt-answer-semantic");
|
|
34
|
+
/** The one {@link AutoYesPolicyUnknown} value. */
|
|
35
|
+
exports.AUTO_YES_POLICY_UNKNOWN = Object.freeze({ lookupFailed: true });
|
|
36
|
+
/** Whether the lookup failed, i.e. the contract is not known (Issue #3822). */
|
|
37
|
+
function isAutoYesPolicyUnknown(policy) {
|
|
38
|
+
return policy !== null && policy !== undefined && 'lookupFailed' in policy && policy.lookupFailed === true;
|
|
39
|
+
}
|
|
40
|
+
/** The mode a lookup states, for records and log lines; null for no contract or unknown. */
|
|
41
|
+
function policyLookupMode(policy) {
|
|
42
|
+
return policy && !isAutoYesPolicyUnknown(policy) ? policy.mode : null;
|
|
43
|
+
}
|
|
31
44
|
/**
|
|
32
45
|
* Upper bound on a deny pattern, mirroring MAX_PATTERN_LENGTH in
|
|
33
46
|
* lib/tasks/contract-parser (asserted equal by the unit tests). Contracts are
|
|
@@ -151,11 +164,18 @@ function evaluateDenyPatterns(rawTexts, patterns) {
|
|
|
151
164
|
*
|
|
152
165
|
* @param promptType - How the prompt would be classified on screen
|
|
153
166
|
* @param denyMatchTexts - The only strings deny patterns are matched against
|
|
167
|
+
* Issue #3822: an unknown policy (the lookup failed) denies before anything
|
|
168
|
+
* else — it is not "no contract", and answering would ignore an `off` or a deny
|
|
169
|
+
* pattern the contract may state.
|
|
170
|
+
*
|
|
154
171
|
* @param policy - Contract policy; null/undefined permits everything
|
|
155
172
|
*/
|
|
156
173
|
function evaluatePolicyAgainstTexts(promptType, denyMatchTexts, policy) {
|
|
157
174
|
if (!policy)
|
|
158
175
|
return null;
|
|
176
|
+
if (isAutoYesPolicyUnknown(policy)) {
|
|
177
|
+
return { reason: auto_yes_suppression_reason_1.POLICY_LOOKUP_FAILED_SUPPRESSION_REASON };
|
|
178
|
+
}
|
|
159
179
|
if (policy.mode === 'off') {
|
|
160
180
|
return { reason: 'mode-off' };
|
|
161
181
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NO_HOOK_RECEIPT_SUPPRESSION_REASON = exports.QUESTION_CONFIRM_PAGE_SUPPRESSION_REASON = exports.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON = exports.PARTIAL_ANSWER_SUPPRESSION_REASON = exports.CONTRACT_SUPPRESSION_REASONS = void 0;
|
|
3
|
+
exports.NO_HOOK_RECEIPT_SUPPRESSION_REASON = exports.QUESTION_CONFIRM_PAGE_SUPPRESSION_REASON = exports.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON = exports.PARTIAL_ANSWER_SUPPRESSION_REASON = exports.POLICY_LOOKUP_FAILED_SUPPRESSION_REASON = exports.CONTRACT_SUPPRESSION_REASONS = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Issue #3796: the reasons `resolveAutoAnswerWithPolicy` returns — the contract's
|
|
6
6
|
* verdict on the prompt as it is NOW, which a later tick re-evaluates, as
|
|
@@ -11,7 +11,10 @@ exports.CONTRACT_SUPPRESSION_REASONS = new Set([
|
|
|
11
11
|
'deny-pattern',
|
|
12
12
|
'deny-pattern-unusable',
|
|
13
13
|
'type-not-allowed',
|
|
14
|
+
'policy-lookup-failed',
|
|
14
15
|
]);
|
|
16
|
+
/** Issue #3822: the reason recorded when the contract lookup failed. */
|
|
17
|
+
exports.POLICY_LOOKUP_FAILED_SUPPRESSION_REASON = 'policy-lookup-failed';
|
|
15
18
|
/** Issue #3706: the reason the poller records for an answer stopped part-way. */
|
|
16
19
|
exports.PARTIAL_ANSWER_SUPPRESSION_REASON = 'partial-answer';
|
|
17
20
|
/** Issue #3757: the reason the poller records over agy's unanswered trust screen. */
|