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
|
@@ -4,6 +4,30 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Command } from 'commander';
|
|
6
6
|
import type { AutoYesContractPolicy } from '../types/api-responses';
|
|
7
|
+
/** Issue #3863: `--answer-mode`'s help, shared with `send --auto-yes-answer-mode`. */
|
|
8
|
+
export declare const ANSWER_MODE_OPTION_DESCRIPTION: string;
|
|
9
|
+
/**
|
|
10
|
+
* Issue #3863: the stderr line naming the answer mode Auto-Yes is on with, or
|
|
11
|
+
* null when there is nothing to say. Read off the response — an omitted mode
|
|
12
|
+
* is resolved by the server (a grant that is on keeps its mode), so the CLI
|
|
13
|
+
* cannot know it otherwise.
|
|
14
|
+
*
|
|
15
|
+
* Said when the mode was asked for, or when it is not the default
|
|
16
|
+
* (`recommended`) — a re-enable that kept `careful`, say. An enable that asked
|
|
17
|
+
* for nothing and got the default prints what it printed before the modes
|
|
18
|
+
* (the output scripts already read); `capture --json`, `instances --json` and
|
|
19
|
+
* the response's `answerMode` carry the mode in every case.
|
|
20
|
+
*
|
|
21
|
+
* @param answerMode - `answerMode` of the auto-yes POST (absent from older servers)
|
|
22
|
+
* @param requested - Whether the command named a mode
|
|
23
|
+
*/
|
|
24
|
+
export declare function describeAnswerMode(answerMode: string | undefined, requested: boolean): string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Issue #3863: validate an answer-mode option value, exiting 2 on a bad one.
|
|
27
|
+
*
|
|
28
|
+
* @param flag - The option's spelling, for the message
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateAnswerModeOption(value: string | undefined, flag: string): void;
|
|
7
31
|
/**
|
|
8
32
|
* The stderr line(s) describing what the contract on the armed instance lets
|
|
9
33
|
* Auto-Yes answer (Issue #3723), or an empty list when there is nothing to say.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-yes.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auto-yes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,qBAAqB,EAAoB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-yes.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auto-yes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,qBAAqB,EAAoB,MAAM,wBAAwB,CAAC;AAatF,sFAAsF;AACtF,eAAO,MAAM,8BAA8B,QAGoF,CAAC;AAEhI;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWpG;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAKtF;AAuDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CA2BjG;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAoH9C"}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Issue #518: [DR1-08] Factory pattern
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ANSWER_MODE_OPTION_DESCRIPTION = void 0;
|
|
8
|
+
exports.describeAnswerMode = describeAnswerMode;
|
|
9
|
+
exports.validateAnswerModeOption = validateAnswerModeOption;
|
|
7
10
|
exports.describeContractPolicy = describeContractPolicy;
|
|
8
11
|
exports.createAutoYesCommand = createAutoYesCommand;
|
|
9
12
|
const commander_1 = require("commander");
|
|
@@ -14,6 +17,51 @@ const duration_constants_1 = require("../config/duration-constants");
|
|
|
14
17
|
const cli_tool_ids_1 = require("../config/cli-tool-ids");
|
|
15
18
|
const agent_target_options_1 = require("../config/agent-target-options");
|
|
16
19
|
const instances_1 = require("./instances");
|
|
20
|
+
const auto_yes_answer_mode_1 = require("../../types/auto-yes-answer-mode");
|
|
21
|
+
/** Issue #3863: `--answer-mode`'s help, shared with `send --auto-yes-answer-mode`. */
|
|
22
|
+
exports.ANSWER_MODE_OPTION_DESCRIPTION = `How Auto-Yes answers a question the agent asks (${auto_yes_answer_mode_1.AUTO_YES_ANSWER_MODES.join(', ')}). ` +
|
|
23
|
+
'recommended: the option marked (Recommended) / (推奨), else the default; careful: questions are left to you. ' +
|
|
24
|
+
'Permissions are answered alike (allow this call once). Omitted: a grant that is on keeps its mode, a new one is recommended';
|
|
25
|
+
/**
|
|
26
|
+
* Issue #3863: the stderr line naming the answer mode Auto-Yes is on with, or
|
|
27
|
+
* null when there is nothing to say. Read off the response — an omitted mode
|
|
28
|
+
* is resolved by the server (a grant that is on keeps its mode), so the CLI
|
|
29
|
+
* cannot know it otherwise.
|
|
30
|
+
*
|
|
31
|
+
* Said when the mode was asked for, or when it is not the default
|
|
32
|
+
* (`recommended`) — a re-enable that kept `careful`, say. An enable that asked
|
|
33
|
+
* for nothing and got the default prints what it printed before the modes
|
|
34
|
+
* (the output scripts already read); `capture --json`, `instances --json` and
|
|
35
|
+
* the response's `answerMode` carry the mode in every case.
|
|
36
|
+
*
|
|
37
|
+
* @param answerMode - `answerMode` of the auto-yes POST (absent from older servers)
|
|
38
|
+
* @param requested - Whether the command named a mode
|
|
39
|
+
*/
|
|
40
|
+
function describeAnswerMode(answerMode, requested) {
|
|
41
|
+
if (answerMode === undefined)
|
|
42
|
+
return null;
|
|
43
|
+
if (answerMode === auto_yes_answer_mode_1.DEFAULT_AUTO_YES_ANSWER_MODE && !requested)
|
|
44
|
+
return null;
|
|
45
|
+
if (answerMode === 'recommended') {
|
|
46
|
+
return 'Answer mode: recommended (questions are answered with the recommended option, else the default).';
|
|
47
|
+
}
|
|
48
|
+
if (answerMode === 'careful') {
|
|
49
|
+
return 'Answer mode: careful (questions are left to you; permissions are still answered).';
|
|
50
|
+
}
|
|
51
|
+
// A mode this build does not know (a newer server): name it, judge nothing.
|
|
52
|
+
return `Answer mode: ${answerMode}.`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Issue #3863: validate an answer-mode option value, exiting 2 on a bad one.
|
|
56
|
+
*
|
|
57
|
+
* @param flag - The option's spelling, for the message
|
|
58
|
+
*/
|
|
59
|
+
function validateAnswerModeOption(value, flag) {
|
|
60
|
+
if (value !== undefined && !(0, auto_yes_answer_mode_1.isAutoYesAnswerMode)(value)) {
|
|
61
|
+
console.error(`Error: Invalid ${flag}. Must be one of: ${auto_yes_answer_mode_1.AUTO_YES_ANSWER_MODES.join(', ')}`);
|
|
62
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
17
65
|
/**
|
|
18
66
|
* Report what arming Auto-Yes actually did: which agent (Issue #1909) and what
|
|
19
67
|
* it answered on the way in (Issue #1898-2).
|
|
@@ -28,8 +76,9 @@ const instances_1 = require("./instances");
|
|
|
28
76
|
*
|
|
29
77
|
* @param worktreeId - Worktree the command targeted
|
|
30
78
|
* @param result - Body of the auto-yes POST, or undefined from an old daemon
|
|
79
|
+
* @param answerModeRequested - Issue #3863: whether `--answer-mode` was given
|
|
31
80
|
*/
|
|
32
|
-
function reportEnabled(worktreeId, result) {
|
|
81
|
+
function reportEnabled(worktreeId, result, answerModeRequested = false) {
|
|
33
82
|
const agent = result?.cliToolId;
|
|
34
83
|
const instanceId = result?.instanceId;
|
|
35
84
|
// `instanceId === cliToolId` is how the primary instance is spelled (#868);
|
|
@@ -40,6 +89,10 @@ function reportEnabled(worktreeId, result) {
|
|
|
40
89
|
console.error(label
|
|
41
90
|
? `Auto-yes enabled for ${worktreeId} (${label}).`
|
|
42
91
|
: `Auto-yes enabled for ${worktreeId}.`);
|
|
92
|
+
// Issue #3863: the mode the server put it on with.
|
|
93
|
+
const modeLine = describeAnswerMode(result?.answerMode, answerModeRequested);
|
|
94
|
+
if (modeLine !== null)
|
|
95
|
+
console.error(modeLine);
|
|
43
96
|
// Issue #1898-2: enabling Auto-Yes under a dialog that was already up used to
|
|
44
97
|
// do nothing at all, silently. If it answered something on the way in, say so
|
|
45
98
|
// — that is the difference between "armed for next time" and "the worker you
|
|
@@ -87,7 +140,13 @@ function describeContractPolicy(policy) {
|
|
|
87
140
|
];
|
|
88
141
|
}
|
|
89
142
|
if (policy.mode === 'safe') {
|
|
90
|
-
|
|
143
|
+
// Issue #3822: on a tool whose dialog gate is `enforce`, a `yes_no` the
|
|
144
|
+
// tool's own dialog detector does not vouch for is left to a human too.
|
|
145
|
+
return [
|
|
146
|
+
`Note: ${task} sets autoYes.mode: safe; Auto-Yes answers yes_no prompts only ` +
|
|
147
|
+
'(on claude, codex, copilot, opencode and opencode-v2, only those the tool itself shows as a confirmation, not a generic (y/n)).' +
|
|
148
|
+
deny,
|
|
149
|
+
];
|
|
91
150
|
}
|
|
92
151
|
if (policy.mode === 'allow-listed') {
|
|
93
152
|
const types = policy.allowPromptTypes.length > 0 ? policy.allowPromptTypes.join(', ') : 'none';
|
|
@@ -105,6 +164,7 @@ function createAutoYesCommand() {
|
|
|
105
164
|
.option('--disable', 'Disable auto-yes')
|
|
106
165
|
.option('--duration <duration>', `Duration (${duration_constants_1.ALLOWED_DURATIONS.join(', ')})`)
|
|
107
166
|
.option('--stop-pattern <pattern>', 'Stop pattern (regex, max 500 chars). Matched against terminal output; cannot block commands (build logs mentioning the pattern also trigger it). To suppress auto-responses per command, use the task contract\'s autoYes.denyPatterns')
|
|
167
|
+
.option('--answer-mode <mode>', exports.ANSWER_MODE_OPTION_DESCRIPTION)
|
|
108
168
|
.option('--instance <id>', agent_target_options_1.INSTANCE_OPTION_DESCRIPTION)
|
|
109
169
|
.option('--agent <agent>', agent_target_options_1.AGENT_OPTION_DESCRIPTION)
|
|
110
170
|
.option('--token <token>', command_helpers_1.TOKEN_WARNING)
|
|
@@ -124,6 +184,12 @@ function createAutoYesCommand() {
|
|
|
124
184
|
console.error('Error: Cannot specify both --enable and --disable.');
|
|
125
185
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
126
186
|
}
|
|
187
|
+
// Issue #3863
|
|
188
|
+
validateAnswerModeOption(options.answerMode, '--answer-mode');
|
|
189
|
+
if (options.answerMode !== undefined && options.disable) {
|
|
190
|
+
console.error('Error: --answer-mode applies to --enable only.');
|
|
191
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
192
|
+
}
|
|
127
193
|
if (options.agent && !(0, cli_tool_ids_1.isCliToolId)(options.agent)) {
|
|
128
194
|
console.error(`Error: Invalid agent. Must be one of: ${cli_tool_ids_1.CLI_TOOL_IDS.join(', ')}`);
|
|
129
195
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
@@ -155,6 +221,10 @@ function createAutoYesCommand() {
|
|
|
155
221
|
if (options.stopPattern) {
|
|
156
222
|
body.stopPattern = options.stopPattern;
|
|
157
223
|
}
|
|
224
|
+
// Issue #3863: sent only when given, so the server keeps a live grant's mode.
|
|
225
|
+
if (options.answerMode !== undefined) {
|
|
226
|
+
body.answerMode = options.answerMode;
|
|
227
|
+
}
|
|
158
228
|
}
|
|
159
229
|
// Issue #1629: the auto-yes poller keys on (worktree, cliTool, instance)
|
|
160
230
|
// and watches the session cliTool names, so the instance must be paired
|
|
@@ -171,7 +241,7 @@ function createAutoYesCommand() {
|
|
|
171
241
|
}
|
|
172
242
|
const result = await client.post(`/api/worktrees/${worktreeId}/auto-yes`, body);
|
|
173
243
|
if (options.enable) {
|
|
174
|
-
reportEnabled(worktreeId, result);
|
|
244
|
+
reportEnabled(worktreeId, result, options.answerMode !== undefined);
|
|
175
245
|
}
|
|
176
246
|
else {
|
|
177
247
|
console.error(`Auto-yes disabled for ${worktreeId}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instances.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAkD,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instances.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAkD,MAAM,qBAAqB,CAAC;AAsKhG;;;;;;;;;;GAUG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,GAAE,oBAA+B,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAE6D,CAAC;AAErG,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,QAE0B,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;;;;;OAYG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,GAAE,oBAA+B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAmCjC;AAqUD,wBAAgB,sBAAsB,IAAI,OAAO,CAgFhD"}
|
|
@@ -255,6 +255,7 @@ async function fetchArmedAutoYes(client, worktreeId) {
|
|
|
255
255
|
const states = response?.instances;
|
|
256
256
|
if (!states || typeof states !== 'object')
|
|
257
257
|
return null;
|
|
258
|
+
const modes = response?.answerModeByInstance;
|
|
258
259
|
return new Map(Object.entries(states).map(([instanceId, state]) => {
|
|
259
260
|
const enabled = state?.enabled === true;
|
|
260
261
|
return [instanceId, {
|
|
@@ -262,6 +263,8 @@ async function fetchArmedAutoYes(client, worktreeId) {
|
|
|
262
263
|
blockedByContract: enabled && state?.blockedByContract === true,
|
|
263
264
|
// Issue #3730: a server older than the field sends none — plain `no`.
|
|
264
265
|
releasedByRestart: !enabled && state?.stopReason === 'server-restart',
|
|
266
|
+
// Issue #3863: an older server sends none — the row then carries none.
|
|
267
|
+
...(enabled && typeof modes?.[instanceId] === 'string' ? { answerMode: modes[instanceId] } : {}),
|
|
265
268
|
}];
|
|
266
269
|
}));
|
|
267
270
|
}
|
|
@@ -294,6 +297,10 @@ async function listInstances(client, worktreeId, options) {
|
|
|
294
297
|
// is not running. Replaced below when the server names the armed
|
|
295
298
|
// instances itself (Issue #3300).
|
|
296
299
|
autoYes: output.autoYes?.enabled ?? false,
|
|
300
|
+
// Issue #3863: the session's own reading of the mode, replaced below too.
|
|
301
|
+
...(output.autoYes?.enabled === true && typeof output.autoYesAnswerMode === 'string'
|
|
302
|
+
? { autoYesAnswerMode: output.autoYesAnswerMode }
|
|
303
|
+
: {}),
|
|
297
304
|
// Issue #1785: pass-through. `?? null` collapses "this daemon predates
|
|
298
305
|
// the field" into the same null the server sends for "nothing knows" —
|
|
299
306
|
// the CLI has no way to tell those apart and no reason to.
|
|
@@ -318,11 +325,13 @@ async function listInstances(client, worktreeId, options) {
|
|
|
318
325
|
const armed = instances.length > 0 ? await fetchArmedAutoYes(client, worktreeId) : null;
|
|
319
326
|
const rows = armed === null
|
|
320
327
|
? sessionRows
|
|
321
|
-
: sessionRows.map(row => {
|
|
328
|
+
: sessionRows.map(({ autoYesAnswerMode: _sessionMode, ...row }) => {
|
|
322
329
|
const entry = armed.get(row.instanceId);
|
|
323
330
|
return {
|
|
324
331
|
...row,
|
|
325
332
|
autoYes: entry?.enabled ?? false,
|
|
333
|
+
// Issue #3863: the state store's mode, beside the arming it belongs to.
|
|
334
|
+
...(entry?.answerMode !== undefined ? { autoYesAnswerMode: entry.answerMode } : {}),
|
|
326
335
|
// Issue #3723: only the state store says this, so only this path sets it.
|
|
327
336
|
...(entry?.blockedByContract ? { autoYesBlockedByContract: true } : {}),
|
|
328
337
|
// Issue #3730: likewise only the state store knows the restart took it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAgB5E;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAW9E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAU/G;
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAgB5E;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAW9E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAU/G;AA0ED,kDAAkD;AAClD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAkBxG;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CA8E7C"}
|
|
@@ -74,18 +74,9 @@ function formatLastSend(lastSend, now = Date.now()) {
|
|
|
74
74
|
: '';
|
|
75
75
|
return ` last send: ${lastSend.state} (${lastSend.reason}, ${ago})${advice}`;
|
|
76
76
|
}
|
|
77
|
-
/** The
|
|
78
|
-
function
|
|
79
|
-
const { target, screen, autoYes } = observation;
|
|
77
|
+
/** The `kind:` line and what the screen asks: question, target, options, answer route and token. */
|
|
78
|
+
function formatScreenLines(observation, screen, now) {
|
|
80
79
|
const lines = [];
|
|
81
|
-
lines.push(`Instance ${target.instanceId} (${target.cliToolId}) on ${target.worktreeId}, pane ${target.sessionName}`);
|
|
82
|
-
const lastSendLine = formatLastSend(observation.lastSend, now);
|
|
83
|
-
if (observation.status === 'unavailable' || screen === null) {
|
|
84
|
-
lines.push(' No running session: there is no screen to read.');
|
|
85
|
-
if (lastSendLine !== null)
|
|
86
|
-
lines.push(lastSendLine);
|
|
87
|
-
return lines.join('\n');
|
|
88
|
-
}
|
|
89
80
|
const kindNote = screen.kind === 'none'
|
|
90
81
|
? ' (nothing on screen asks for a decision)'
|
|
91
82
|
: screen.kind === 'composer'
|
|
@@ -119,6 +110,11 @@ function formatPromptObservation(observation, now = Date.now()) {
|
|
|
119
110
|
// An older server sends no `tokenWithheld`; `no-decision` needs no line.
|
|
120
111
|
lines.push(` token: none (${screen.tokenWithheld})`);
|
|
121
112
|
}
|
|
113
|
+
return lines;
|
|
114
|
+
}
|
|
115
|
+
/** The Auto-Yes lines: switch and poller, the poller's last record, and the contract re-evaluated now. */
|
|
116
|
+
function formatAutoYesLines(autoYes) {
|
|
117
|
+
const lines = [];
|
|
122
118
|
const enabled = autoYes.enabled === null ? 'unknown' : autoYes.enabled ? 'on' : 'off';
|
|
123
119
|
const poller = autoYes.pollerActive === null ? 'unknown' : autoYes.pollerActive ? 'running' : 'stopped';
|
|
124
120
|
lines.push(` auto-yes: ${enabled}, poller ${poller}${autoYes.stopReason ? `, stopReason=${autoYes.stopReason}` : ''}`);
|
|
@@ -130,11 +126,29 @@ function formatPromptObservation(observation, now = Date.now()) {
|
|
|
130
126
|
const evaluation = autoYes.contractEvaluation;
|
|
131
127
|
const evaluationDetail = evaluation.state === 'policy-withholds'
|
|
132
128
|
? `policy-withholds reason=${evaluation.reason}${evaluation.pattern !== undefined ? ` pattern=${JSON.stringify(evaluation.pattern)}` : ''}`
|
|
133
|
-
: evaluation.state === '
|
|
134
|
-
? `
|
|
135
|
-
: evaluation.state
|
|
129
|
+
: evaluation.state === 'base-withholds'
|
|
130
|
+
? `base-withholds reason=${evaluation.reason}`
|
|
131
|
+
: evaluation.state === 'not-evaluated'
|
|
132
|
+
? `not-evaluated (${evaluation.because})`
|
|
133
|
+
: evaluation.state;
|
|
136
134
|
lines.push(` contract re-evaluation: ${evaluationDetail}` +
|
|
137
135
|
(evaluation.contract ? ` (task ${evaluation.contract.taskId ?? 'unknown'}, mode=${evaluation.contract.mode ?? 'none'})` : ' (no contract)'));
|
|
136
|
+
return lines;
|
|
137
|
+
}
|
|
138
|
+
/** The observation in the words a human reads. */
|
|
139
|
+
function formatPromptObservation(observation, now = Date.now()) {
|
|
140
|
+
const { target, screen, autoYes } = observation;
|
|
141
|
+
const lines = [];
|
|
142
|
+
lines.push(`Instance ${target.instanceId} (${target.cliToolId}) on ${target.worktreeId}, pane ${target.sessionName}`);
|
|
143
|
+
const lastSendLine = formatLastSend(observation.lastSend, now);
|
|
144
|
+
if (observation.status === 'unavailable' || screen === null) {
|
|
145
|
+
lines.push(' No running session: there is no screen to read.');
|
|
146
|
+
if (lastSendLine !== null)
|
|
147
|
+
lines.push(lastSendLine);
|
|
148
|
+
return lines.join('\n');
|
|
149
|
+
}
|
|
150
|
+
lines.push(...formatScreenLines(observation, screen, now));
|
|
151
|
+
lines.push(...formatAutoYesLines(autoYes));
|
|
138
152
|
if (lastSendLine !== null)
|
|
139
153
|
lines.push(lastSendLine);
|
|
140
154
|
return lines.join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4XpC,wBAAgB,iBAAiB,IAAI,OAAO,CA+J3C"}
|
|
@@ -83,11 +83,19 @@ async function enableAutoYes(client, worktreeId, options, durationMs, agent, ins
|
|
|
83
83
|
if (options.stopPattern) {
|
|
84
84
|
autoYesBody.stopPattern = options.stopPattern;
|
|
85
85
|
}
|
|
86
|
+
// Issue #3863: sent only when given, so the server keeps a live grant's mode.
|
|
87
|
+
if (options.autoYesAnswerMode !== undefined) {
|
|
88
|
+
autoYesBody.answerMode = options.autoYesAnswerMode;
|
|
89
|
+
}
|
|
86
90
|
// Issue #3723: the response is read now. It names what the contract on the
|
|
87
91
|
// instance lets Auto-Yes answer; with `autoYes.mode: off` the poller this
|
|
88
92
|
// armed answers nothing, and "Auto-yes enabled." alone said otherwise.
|
|
89
93
|
const result = await client.post(`/api/worktrees/${worktreeId}/auto-yes`, autoYesBody);
|
|
90
94
|
console.error('Auto-yes enabled.');
|
|
95
|
+
// Issue #3863: the mode the server put it on with.
|
|
96
|
+
const modeLine = (0, auto_yes_1.describeAnswerMode)(result?.answerMode, options.autoYesAnswerMode !== undefined);
|
|
97
|
+
if (modeLine !== null)
|
|
98
|
+
console.error(modeLine);
|
|
91
99
|
// The server's reading wins when it has one. It has none for a `--contract`
|
|
92
100
|
// send armed before the message goes out: the task is still `pending`, which
|
|
93
101
|
// the server does not count as governing the instance (ACTIVE_TASK_STATUSES).
|
|
@@ -210,6 +218,12 @@ function validateSendArgs(worktreeId, message, options) {
|
|
|
210
218
|
console.error(instances_1.INSTANCE_SELECTOR_ERROR);
|
|
211
219
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
212
220
|
}
|
|
221
|
+
// Issue #3863: a value the server would refuse, and a mode with nothing to arm.
|
|
222
|
+
(0, auto_yes_1.validateAnswerModeOption)(options.autoYesAnswerMode, '--auto-yes-answer-mode');
|
|
223
|
+
if (options.autoYesAnswerMode !== undefined && !options.autoYes) {
|
|
224
|
+
console.error('Error: --auto-yes-answer-mode requires --auto-yes.');
|
|
225
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
226
|
+
}
|
|
213
227
|
// Issue #1000: --register requires --instance, and requires --agent
|
|
214
228
|
// unless the instance id is itself a primary CLI tool id (e.g. claude).
|
|
215
229
|
if (options.register) {
|
|
@@ -302,6 +316,7 @@ function createSendCommand() {
|
|
|
302
316
|
.option('--model <model>', 'Specify AI model for a Copilot, Antigravity or Claude agent. For Antigravity and Claude it is a launch'
|
|
303
317
|
+ ' flag: it applies only when this send starts the session, and a running session answers 400')
|
|
304
318
|
.option('--auto-yes', 'Enable auto-yes before sending (session-wide, no policy guard; for unattended runs prefer --contract with an autoYes policy)')
|
|
319
|
+
.option('--auto-yes-answer-mode <mode>', `With --auto-yes: ${auto_yes_1.ANSWER_MODE_OPTION_DESCRIPTION}`)
|
|
305
320
|
.option('--duration <duration>', `Auto-yes duration (${duration_constants_1.ALLOWED_DURATIONS.join(', ')})`)
|
|
306
321
|
.option('--stop-pattern <pattern>', 'Auto-yes stop pattern (regex). Matched against terminal output; cannot block commands (use the task contract\'s autoYes.denyPatterns for that)')
|
|
307
322
|
.option('--contract <path>', 'Execution contract path relative to the worktree root (e.g. .commandmate/tasks/my-task.yaml). Records a task and sends the contract preamble plus its goal.')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAGV,qBAAqB,EAKrB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAA+B,MAAM,qBAAqB,CAAC;AA8E7E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAIvD,CAAC;
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAGV,qBAAqB,EAKrB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAA+B,MAAM,qBAAqB,CAAC;AA8E7E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAIvD,CAAC;AA+RH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,qBAAqB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAMf;AAsND;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,wBAAwB,CAAC;AAEhE;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,mBAAmB,QAAiB,CAAC;AA2JlD;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA42BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,6EAA6E;IAC7E,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD,CAAC,CAyID;AAwKD,wBAAgB,iBAAiB,IAAI,OAAO,CAgN3C"}
|
|
@@ -216,9 +216,25 @@ function describePaneObstruction(data) {
|
|
|
216
216
|
* error runs towards reporting — a withheld answer to an earlier prompt, under a
|
|
217
217
|
* minute old, still ends the hold, which is the pre-#2463 exit rather than a
|
|
218
218
|
* new failure.
|
|
219
|
+
*
|
|
220
|
+
* Issue #3798: a server that names the waiting episodes does what the push gate
|
|
221
|
+
* does — the record's `episodeId` against the payload's
|
|
222
|
+
* `autoYes.waitingEpisodeId`, which decide when both are present: another id
|
|
223
|
+
* (or no wait open) is a record of an earlier wait, however recent; the same
|
|
224
|
+
* id is this wait's. Either one missing (an older server, a record written
|
|
225
|
+
* before any wait was open), this window decides as before. Whichever
|
|
226
|
+
* decides, a record the server marks `lastSuppressionAnswered` — Auto-Yes
|
|
227
|
+
* answered the open wait after it was written — is history, not this wait's
|
|
228
|
+
* reason, as the push gate reads it: the hold goes on.
|
|
219
229
|
*/
|
|
220
230
|
const SUPPRESSION_FRESH_MS = 60_000;
|
|
221
|
-
/**
|
|
231
|
+
/**
|
|
232
|
+
* The suppression currently blocking this session, or null.
|
|
233
|
+
*
|
|
234
|
+
* Issue #3863: with the Auto-Yes answer mode in effect (`autoYesAnswerMode`)
|
|
235
|
+
* when the server publishes one — what `question-left-to-human` and
|
|
236
|
+
* `recommended-option-unidentified` depend on.
|
|
237
|
+
*/
|
|
222
238
|
function activeSuppression(data, now) {
|
|
223
239
|
// No `autoYes` at all (a session that is not running, Issue #3300) reads as
|
|
224
240
|
// "nothing was withheld", the same as a null record.
|
|
@@ -226,10 +242,23 @@ function activeSuppression(data, now) {
|
|
|
226
242
|
if (!suppression)
|
|
227
243
|
return null;
|
|
228
244
|
const ageMs = now - suppression.at;
|
|
229
|
-
|
|
230
|
-
if (
|
|
245
|
+
const waitId = data.autoYes?.waitingEpisodeId;
|
|
246
|
+
if (suppression.episodeId !== undefined && waitId !== undefined) {
|
|
247
|
+
if (suppression.episodeId !== waitId)
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
else if (ageMs > SUPPRESSION_FRESH_MS) {
|
|
251
|
+
// A negative age is clock skew between the CLI and the server, not staleness.
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
if (data.autoYes?.lastSuppressionAnswered === true)
|
|
231
255
|
return null;
|
|
232
|
-
|
|
256
|
+
const answerMode = data.autoYesAnswerMode;
|
|
257
|
+
return {
|
|
258
|
+
suppression,
|
|
259
|
+
ageSeconds: Math.max(0, Math.round(ageMs / 1000)),
|
|
260
|
+
...(answerMode !== undefined ? { answerMode } : {}),
|
|
261
|
+
};
|
|
233
262
|
}
|
|
234
263
|
/** The wording for the four reasons a contract's `autoYes` block really authors. */
|
|
235
264
|
const CONTRACT_POLICY_CAUSE = 'by contract policy';
|
|
@@ -254,13 +283,23 @@ const CONTRACT_POLICY_CAUSE = 'by contract policy';
|
|
|
254
283
|
* the poller's stopped-answer branch (`partial-answer`, Issue #3706 / #3713),
|
|
255
284
|
* and the poller's agy trust-screen branch (`startup-trust-unhandled`, Issue #3757),
|
|
256
285
|
* and the poller's question confirm-page branch (`question-confirm-page`, Issue #3748),
|
|
257
|
-
* and the poller's
|
|
286
|
+
* and the poller's question branch (`question-left-to-human`, Issue #3822),
|
|
287
|
+
* and the resolver's permission-row reading (`allow-once-unidentified`, Issue #3822),
|
|
288
|
+
* and the resolver's choice of a question's recommended option
|
|
289
|
+
* (`recommended-option-unidentified`, Issue #3863),
|
|
290
|
+
* and the poller's agy receipt-gate branch (`no-hook-receipt`, Issue #3767),
|
|
291
|
+
* and a contract lookup that failed on either of the policy paths
|
|
292
|
+
* (`policy-lookup-failed`, Issue #3822).
|
|
258
293
|
*/
|
|
259
294
|
const SUPPRESSION_CAUSE = {
|
|
260
295
|
'mode-off': CONTRACT_POLICY_CAUSE,
|
|
261
296
|
'deny-pattern': CONTRACT_POLICY_CAUSE,
|
|
262
297
|
'deny-pattern-unusable': CONTRACT_POLICY_CAUSE,
|
|
263
298
|
'type-not-allowed': CONTRACT_POLICY_CAUSE,
|
|
299
|
+
// Issue #3822. Not "by contract policy": the contract could not be read at
|
|
300
|
+
// all, so nothing it says was applied. Withheld rather than answered, since
|
|
301
|
+
// the contract may state `off`; it clears once the server reads it again.
|
|
302
|
+
'policy-lookup-failed': 'because the server could not read the execution contract (the database lookup failed), so Auto-Yes does not answer until it can; check the server log for policy-lookup-failed',
|
|
264
303
|
// Issue #3790: after the launch window the poller still leaves copilot's and
|
|
265
304
|
// gemini's trust dialogs alone when the cursor is not on the safe row, and
|
|
266
305
|
// nobody else answers them then.
|
|
@@ -273,7 +312,10 @@ const SUPPRESSION_CAUSE = {
|
|
|
273
312
|
// Issue #3713 (#3706's reason). Not "by contract policy" either: an earlier
|
|
274
313
|
// Auto-Yes answer was stopped with some of its keys already in the input, and
|
|
275
314
|
// typing it again would append to them, so the prompt waits for a human.
|
|
276
|
-
|
|
315
|
+
// Issue #3880: or a send of it (Auto-Yes's, or a person's that failed) ended
|
|
316
|
+
// without tmux confirming it, and no key may be known to be there. The #3713
|
|
317
|
+
// sentence is kept as it was and the other case follows it.
|
|
318
|
+
'partial-answer': "because an earlier answer left partial input; Auto-Yes is waiting for a human (or that answer's send could not be confirmed, so the input may hold it: check the pane, then answer; an answer that goes through releases the hold)",
|
|
277
319
|
// Issue #3757. agy's startup folder-trust screen: the launch's to confirm, not
|
|
278
320
|
// Auto-Yes's, and agy drew it after the launch window had ended.
|
|
279
321
|
'startup-trust-unhandled': "because agy's startup folder-trust confirmation is the launch's to answer, not Auto-Yes's; the next send confirms it once, or answer it at the pane",
|
|
@@ -282,6 +324,19 @@ const SUPPRESSION_CAUSE = {
|
|
|
282
324
|
// answers, so it waits for a human. Was recorded as `unclassified-frame`,
|
|
283
325
|
// whose wording above says the opposite (nothing recognised the frame).
|
|
284
326
|
'question-confirm-page': "because the question's Submit/Cancel confirmation commits the answers as they stand, so Auto-Yes leaves it to a human",
|
|
327
|
+
// Issue #3822. A question the agent asks the operator (an AskUserQuestion
|
|
328
|
+
// picker, OpenCode V2's question form): Auto-Yes answers permissions only,
|
|
329
|
+
// and no contract setting delegates the question. Issue #3863: since the
|
|
330
|
+
// answer modes, that is the `careful` mode's rule (and OpenCode V2's form
|
|
331
|
+
// under either mode); `answerMode=` on the line says which mode was on.
|
|
332
|
+
'question-left-to-human': 'because the agent is asking a question, and Auto-Yes answers permissions only (the careful answer mode, or a question form no mode answers); answer it at the pane (prompt --json, respond), or turn Auto-Yes on with --answer-mode recommended to have it pick the recommended option',
|
|
333
|
+
// Issue #3822. A permission dialog none of whose rows allows this call only
|
|
334
|
+
// (each saves a rule, changes the mode or denies), or two of which read so.
|
|
335
|
+
// Auto-Yes never picks a row that outlives this call, so it waits for a human.
|
|
336
|
+
'allow-once-unidentified': 'because no single option of the permission dialog allows this call only (the others save a rule, change the permission mode, or deny); Auto-Yes does not pick those, so answer it at the pane (prompt --json, respond)',
|
|
337
|
+
// Issue #3863. The recommended answer mode answers a question with its one
|
|
338
|
+
// recommended option (else its default), and could not tell which that is.
|
|
339
|
+
'recommended-option-unidentified': "because the question's recommended option could not be told (two or more marked recommended, a title it could not tell from its description, a typed-text or multi-select answer); answer it at the pane (prompt --json, respond)",
|
|
285
340
|
// Issue #3767. agy's approval dialog has no matching hook question (none, too
|
|
286
341
|
// late, already on screen, or the hook stopped arriving). Not a contract verdict.
|
|
287
342
|
// Issue #3789: nor one left unused — the last was spent on keys Auto-Yes sent,
|
|
@@ -314,7 +369,7 @@ function suppressionCause(reason) {
|
|
|
314
369
|
* in the payload either way, so the prefix is the only part that can lie — and it
|
|
315
370
|
* did, for every non-contract suppression.
|
|
316
371
|
*/
|
|
317
|
-
function formatSuppressionNotice(suppression, ageSeconds) {
|
|
372
|
+
function formatSuppressionNotice(suppression, ageSeconds, answerMode) {
|
|
318
373
|
const parts = [
|
|
319
374
|
`reason=${suppression.reason}`,
|
|
320
375
|
`mode=${suppression.mode ?? 'none'}`,
|
|
@@ -323,6 +378,10 @@ function formatSuppressionNotice(suppression, ageSeconds) {
|
|
|
323
378
|
if (suppression.pattern !== undefined) {
|
|
324
379
|
parts.push(`pattern=${JSON.stringify(suppression.pattern)}`);
|
|
325
380
|
}
|
|
381
|
+
// Issue #3863: the Auto-Yes answer mode in effect, when the server says.
|
|
382
|
+
if (answerMode !== undefined) {
|
|
383
|
+
parts.push(`answerMode=${answerMode}`);
|
|
384
|
+
}
|
|
326
385
|
const cause = suppressionCause(suppression.reason);
|
|
327
386
|
return ` auto-yes suppressed this prompt ${cause}: ${parts.join(' ')} (${ageSeconds}s ago)`;
|
|
328
387
|
}
|
|
@@ -380,6 +439,19 @@ function formatEnterFallbackNotice(data, now) {
|
|
|
380
439
|
}
|
|
381
440
|
return ` auto-yes Enter record for this prompt: outcome=${record.outcome} ${detail} ${ago}`;
|
|
382
441
|
}
|
|
442
|
+
/**
|
|
443
|
+
* Issue #3821: the server's own word that Auto-Yes left this prompt to a human
|
|
444
|
+
* (`autoYesDecision.state === 'withheld'`) — `server-poller-inactive` when no
|
|
445
|
+
* poller runs for the instance, or a stop the suppression record does not
|
|
446
|
+
* carry. Read only when the server publishes the field; an older one leaves
|
|
447
|
+
* `wait` holding as before.
|
|
448
|
+
*/
|
|
449
|
+
function decisionWithheldReason(data) {
|
|
450
|
+
const decision = data.autoYesDecision;
|
|
451
|
+
if (decision?.state !== 'withheld')
|
|
452
|
+
return null;
|
|
453
|
+
return decision.reason ?? 'unknown';
|
|
454
|
+
}
|
|
383
455
|
/**
|
|
384
456
|
* Whether this server publishes a real turn record (Issue #1930).
|
|
385
457
|
*
|
|
@@ -802,6 +874,13 @@ function buildPromptOutput(worktreeId, data, promptData, suppressed) {
|
|
|
802
874
|
...(promptData.approvalTarget !== undefined && {
|
|
803
875
|
approvalTarget: promptData.approvalTarget,
|
|
804
876
|
}),
|
|
877
|
+
// Issue #3881: whether that target is the whole request (a `deny-pattern-
|
|
878
|
+
// unusable` verdict below is read against it), and what the screen was
|
|
879
|
+
// read as, when the server sent them.
|
|
880
|
+
...(promptData.approvalTargetCompleteness !== undefined && {
|
|
881
|
+
approvalTargetCompleteness: promptData.approvalTargetCompleteness,
|
|
882
|
+
}),
|
|
883
|
+
...(promptData.reading !== undefined && { reading: promptData.reading }),
|
|
805
884
|
...(suppressed && {
|
|
806
885
|
autoYesSuppression: {
|
|
807
886
|
reason: suppressed.suppression.reason,
|
|
@@ -811,6 +890,8 @@ function buildPromptOutput(worktreeId, data, promptData, suppressed) {
|
|
|
811
890
|
pattern: suppressed.suppression.pattern,
|
|
812
891
|
}),
|
|
813
892
|
ageSeconds: suppressed.ageSeconds,
|
|
893
|
+
// Issue #3863: the answer mode in effect, when the server publishes it.
|
|
894
|
+
...(suppressed.answerMode !== undefined && { answerMode: suppressed.answerMode }),
|
|
814
895
|
},
|
|
815
896
|
}),
|
|
816
897
|
};
|
|
@@ -924,13 +1005,20 @@ function promptStage(poll, state, data) {
|
|
|
924
1005
|
// keeps polling and would otherwise say nothing about why nobody
|
|
925
1006
|
// answered, and the agent one is read by pipelines that never see stderr.
|
|
926
1007
|
const suppressed = activeSuppression(data, Date.now());
|
|
1008
|
+
// Issue #3821: withheld by the server's decision, with no suppression to say so.
|
|
1009
|
+
const decisionWithheld = suppressed ? null : decisionWithheldReason(data);
|
|
1010
|
+
const decisionNotice = decisionWithheld === null
|
|
1011
|
+
? null
|
|
1012
|
+
: ` auto-yes is not answering this prompt (reason=${decisionWithheld}); it is a human's to answer.`;
|
|
927
1013
|
// [DR1-03] Prompt detection exit code
|
|
928
1014
|
if (options.onPrompt === 'human') {
|
|
929
1015
|
// Block and continue polling - user handles prompt manually
|
|
930
1016
|
console.error(`Prompt detected on ${worktreeId}. Waiting for human response...`);
|
|
931
1017
|
if (suppressed) {
|
|
932
|
-
console.error(formatSuppressionNotice(suppressed.suppression, suppressed.ageSeconds));
|
|
1018
|
+
console.error(formatSuppressionNotice(suppressed.suppression, suppressed.ageSeconds, suppressed.answerMode));
|
|
933
1019
|
}
|
|
1020
|
+
if (decisionNotice)
|
|
1021
|
+
console.error(decisionNotice);
|
|
934
1022
|
// Issue #3397: and whether Auto-Yes already pressed Enter on it.
|
|
935
1023
|
const enterNotice = formatEnterFallbackNotice(data, Date.now());
|
|
936
1024
|
if (enterNotice)
|
|
@@ -948,7 +1036,8 @@ function promptStage(poll, state, data) {
|
|
|
948
1036
|
// poll that shows no prompt ends the hold below and completion is judged
|
|
949
1037
|
// as usual. A withheld answer (`suppressed`) and Auto-Yes being off are
|
|
950
1038
|
// the gate's other two branches and still exit 10 at once.
|
|
951
|
-
|
|
1039
|
+
// Issue #3821: nor does a prompt the server says Auto-Yes left to a human.
|
|
1040
|
+
if (!suppressed && decisionWithheld === null && data.autoYes?.enabled === true && autoYesGraceMs > 0) {
|
|
952
1041
|
const now = Date.now();
|
|
953
1042
|
if (state.autoYesAnsweringSince === null) {
|
|
954
1043
|
state.autoYesAnsweringSince = now;
|
|
@@ -967,14 +1056,16 @@ function promptStage(poll, state, data) {
|
|
|
967
1056
|
: `Note: the target's Auto-Yes did not answer the prompt on ${worktreeId} within ` +
|
|
968
1057
|
`${autoYesGraceSeconds}s; reporting it.`);
|
|
969
1058
|
}
|
|
970
|
-
else if (state.autoYesAnsweringSince !== null && !suppressed) {
|
|
1059
|
+
else if (state.autoYesAnsweringSince !== null && !suppressed && decisionWithheld === null) {
|
|
971
1060
|
console.error(`Note: Auto-Yes is no longer enabled on ${worktreeId}; reporting the prompt.`);
|
|
972
1061
|
}
|
|
973
1062
|
// Default (agent mode): output prompt info and exit 10
|
|
974
1063
|
const promptOutput = buildPromptOutput(worktreeId, data, data.promptData, suppressed);
|
|
975
1064
|
if (suppressed) {
|
|
976
|
-
console.error(formatSuppressionNotice(suppressed.suppression, suppressed.ageSeconds));
|
|
1065
|
+
console.error(formatSuppressionNotice(suppressed.suppression, suppressed.ageSeconds, suppressed.answerMode));
|
|
977
1066
|
}
|
|
1067
|
+
if (decisionNotice)
|
|
1068
|
+
console.error(decisionNotice);
|
|
978
1069
|
// Issue #3397: stderr only, like the notice above; the exit-10 payload is unchanged.
|
|
979
1070
|
const enterNotice = formatEnterFallbackNotice(data, Date.now());
|
|
980
1071
|
if (enterNotice)
|
|
@@ -1002,7 +1093,7 @@ function selectionListStage(poll, data) {
|
|
|
1002
1093
|
// selection lists, so a policy can be the reason this one is stuck too.
|
|
1003
1094
|
const suppressed = activeSuppression(data, Date.now());
|
|
1004
1095
|
if (suppressed) {
|
|
1005
|
-
console.error(formatSuppressionNotice(suppressed.suppression, suppressed.ageSeconds));
|
|
1096
|
+
console.error(formatSuppressionNotice(suppressed.suppression, suppressed.ageSeconds, suppressed.answerMode));
|
|
1006
1097
|
}
|
|
1007
1098
|
// Issue #3730
|
|
1008
1099
|
const restartNotice = formatRestartReleaseNotice(worktreeId, data, poll.options.instance);
|
|
@@ -1740,8 +1831,11 @@ The observation on exit 10 (Issue #3755):
|
|
|
1740
1831
|
\`commandmate prompt <id> --json\` prints, read off the capture the exit was
|
|
1741
1832
|
decided on — the screen's kind, an observation token, and Auto-Yes as two
|
|
1742
1833
|
separate items (the poller's record, the contract re-evaluated now). It
|
|
1743
|
-
changes no exit code, hold or grace. autoYesSuppression keeps its meaning
|
|
1744
|
-
record
|
|
1834
|
+
changes no exit code, hold or grace. autoYesSuppression keeps its meaning
|
|
1835
|
+
(the record of this wait: the same waiting-episode id when the record and
|
|
1836
|
+
the server both name one, else a record under a minute old; either way not
|
|
1837
|
+
one written before Auto-Yes answered this wait, as the push gate reads it);
|
|
1838
|
+
a missing record does not mean Auto-Yes can answer.
|
|
1745
1839
|
`)
|
|
1746
1840
|
.action(async (worktreeIds, options) => {
|
|
1747
1841
|
try {
|