commandmate 0.20.0 → 0.21.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 +234 -220
- package/.next/app-path-routes-manifest.json +34 -32
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +18 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/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_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +2 -2
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/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_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_client-reference-manifest.js +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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +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]/respond/route.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_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_client-reference-manifest.js +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_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_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_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_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +5 -5
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +34 -32
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1503.js +1 -1
- package/.next/server/chunks/22.js +1 -1
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2546.js +1 -0
- package/.next/server/chunks/2710.js +2 -2
- package/.next/server/chunks/28.js +2 -2
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/365.js +1 -0
- package/.next/server/chunks/3736.js +1 -1
- package/.next/server/chunks/3753.js +14 -5
- package/.next/server/chunks/4444.js +1 -1
- package/.next/server/chunks/5064.js +1 -1
- package/.next/server/chunks/5737.js +1 -1
- package/.next/server/chunks/5959.js +10 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/848.js +1 -0
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/8584.js +1 -1
- package/.next/server/chunks/8807.js +1 -1
- package/.next/server/chunks/8856.js +1 -1
- package/.next/server/chunks/9058.js +1 -1
- package/.next/server/chunks/9360.js +2 -0
- package/.next/server/chunks/9687.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{8562-6e2ab32452f4fa5b.js → 2053-52d3c82014e1cd54.js} +1 -1
- package/.next/static/chunks/2751-9ef0f4b450bd4ef0.js +1 -0
- package/.next/static/chunks/{6488-3e7539550c3ef358.js → 6488-b5e707dfdd33d633.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/templates/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-b73ac6531829c698.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.ts +347 -0
- package/.next/types/routes.d.ts +3 -1
- package/.next/types/validator.ts +18 -0
- package/dist/cli/commands/auto-yes.js +1 -1
- package/dist/cli/commands/capture.d.ts +1 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +109 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +31 -6
- package/dist/cli/commands/send.js +2 -2
- package/dist/cli/commands/skill-format.d.ts +7 -1
- package/dist/cli/commands/skill-format.d.ts.map +1 -1
- package/dist/cli/commands/skill-format.js +67 -0
- package/dist/cli/commands/skill.d.ts +2 -0
- package/dist/cli/commands/skill.d.ts.map +1 -1
- package/dist/cli/commands/skill.js +149 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +53 -0
- package/dist/cli/commands/wait.js +1 -1
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +25 -3
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +3 -0
- package/dist/cli/types/api-responses.d.ts +174 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +31 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.d.ts +9 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +28 -2
- package/dist/config/history-display-config.d.ts +61 -0
- package/dist/config/history-display-config.d.ts.map +1 -0
- package/dist/config/history-display-config.js +62 -0
- package/dist/server/src/lib/auto-yes-poller.js +49 -0
- package/dist/server/src/lib/db/chat-db.js +75 -1
- package/dist/server/src/lib/db/db.js +4 -3
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +54 -0
- package/dist/server/src/lib/session/current-output-builder.js +2 -0
- package/dist/server/src/lib/skills/install-apply.js +63 -23
- package/dist/server/src/lib/skills/operation-audit.js +5 -6
- package/dist/server/src/lib/skills/startup-reconcile.js +26 -5
- package/dist/server/src/lib/skills/updater.js +830 -0
- package/package.json +1 -1
- package/.next/server/chunks/3042.js +0 -1
- package/.next/server/chunks/4440.js +0 -2
- package/.next/server/chunks/4548.js +0 -1
- package/.next/server/chunks/5793.js +0 -1
- package/.next/static/chunks/2751-7fabd91275b14ca3.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/skills/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/templates/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/todos/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-6008b904225ebb25.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-5bdd550ed6386f57.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-214ee8b97dca856b.js +0 -1
- /package/.next/static/{C01FQOE5FCmB3I_GhMa4_ → _AR-TSCnEog5nL9JjjCna}/_buildManifest.js +0 -0
- /package/.next/static/{C01FQOE5FCmB3I_GhMa4_ → _AR-TSCnEog5nL9JjjCna}/_ssgManifest.js +0 -0
|
@@ -16,6 +16,15 @@ import { ApiClient } from './api-client';
|
|
|
16
16
|
export declare const VERIFY_POLL_INTERVAL_MS = 5000;
|
|
17
17
|
/** Built-in gate id; mirrors WORK_EVIDENCE_GATE_ID in lib/verification/gate-runner.ts. */
|
|
18
18
|
export declare const WORK_EVIDENCE_GATE_ID = "work-evidence";
|
|
19
|
+
/**
|
|
20
|
+
* Lines of a failing gate's log echoed to stderr before the rest becomes a
|
|
21
|
+
* count (#1683).
|
|
22
|
+
*
|
|
23
|
+
* log_tail is byte-capped only when stored (options.maxLogTailBytes, default
|
|
24
|
+
* 8KB but configurable up to 1MB), so echoing it whole lets one misconfigured
|
|
25
|
+
* gate flood the terminal and scroll the GATE verdict lines out of sight.
|
|
26
|
+
*/
|
|
27
|
+
export declare const MAX_PRINTED_LOG_TAIL_LINES = 40;
|
|
19
28
|
export interface VerificationRequest {
|
|
20
29
|
worktreeId: string;
|
|
21
30
|
/** 'manual' for the verify command, 'wait' when chained after wait. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/verify-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAEV,qBAAqB,EACrB,mBAAmB,EAGpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAiC,MAAM,cAAc,CAAC;AAExE,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACnC,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,mBAAmB,CAAC;CAC3B;AAUD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAW1E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAOnF;
|
|
1
|
+
{"version":3,"file":"verify-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/verify-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAEV,qBAAqB,EACrB,mBAAmB,EAGpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAiC,MAAM,cAAc,CAAC;AAExE,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACnC,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,mBAAmB,CAAC;CAC3B;AAUD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAW1E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAOnF;AAsFD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAyD9B"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* @module cli/utils/verify-runner
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.WORK_EVIDENCE_GATE_ID = exports.VERIFY_POLL_INTERVAL_MS = void 0;
|
|
15
|
+
exports.MAX_PRINTED_LOG_TAIL_LINES = exports.WORK_EVIDENCE_GATE_ID = exports.VERIFY_POLL_INTERVAL_MS = void 0;
|
|
16
16
|
exports.exitCodeForRunStatus = exitCodeForRunStatus;
|
|
17
17
|
exports.parseGateIds = parseGateIds;
|
|
18
18
|
exports.runVerification = runVerification;
|
|
@@ -22,6 +22,15 @@ const api_client_1 = require("./api-client");
|
|
|
22
22
|
exports.VERIFY_POLL_INTERVAL_MS = 5000;
|
|
23
23
|
/** Built-in gate id; mirrors WORK_EVIDENCE_GATE_ID in lib/verification/gate-runner.ts. */
|
|
24
24
|
exports.WORK_EVIDENCE_GATE_ID = 'work-evidence';
|
|
25
|
+
/**
|
|
26
|
+
* Lines of a failing gate's log echoed to stderr before the rest becomes a
|
|
27
|
+
* count (#1683).
|
|
28
|
+
*
|
|
29
|
+
* log_tail is byte-capped only when stored (options.maxLogTailBytes, default
|
|
30
|
+
* 8KB but configurable up to 1MB), so echoing it whole lets one misconfigured
|
|
31
|
+
* gate flood the terminal and scroll the GATE verdict lines out of sight.
|
|
32
|
+
*/
|
|
33
|
+
exports.MAX_PRINTED_LOG_TAIL_LINES = 40;
|
|
25
34
|
const GATE_LABELS = {
|
|
26
35
|
passed: 'PASS',
|
|
27
36
|
failed: 'FAIL',
|
|
@@ -86,6 +95,23 @@ function formatGateLine(gate) {
|
|
|
86
95
|
const detail = formatDetail(gate);
|
|
87
96
|
return detail ? `GATE ${gate.gateId} ${label} (${detail})` : `GATE ${gate.gateId} ${label}`;
|
|
88
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Cap a failing gate's log for display, keeping the LAST lines: every producer
|
|
100
|
+
* puts its conclusion there — a failing suite ends with its summary, the scope
|
|
101
|
+
* gate ends with its violation list and guidance. The omission marker leads so
|
|
102
|
+
* the reader knows lines are missing before reading, and it names `verify show`
|
|
103
|
+
* because that is where the full stored log lives.
|
|
104
|
+
*/
|
|
105
|
+
function formatLogTailForDisplay(gate) {
|
|
106
|
+
const lines = (gate.logTail ?? '').replace(/\n+$/, '').split('\n');
|
|
107
|
+
if (lines.length <= exports.MAX_PRINTED_LOG_TAIL_LINES)
|
|
108
|
+
return lines.join('\n');
|
|
109
|
+
const omitted = lines.length - exports.MAX_PRINTED_LOG_TAIL_LINES;
|
|
110
|
+
return [
|
|
111
|
+
`... (+${omitted} more lines; run \`commandmate verify show ${gate.runId}\` for the full log)`,
|
|
112
|
+
...lines.slice(-exports.MAX_PRINTED_LOG_TAIL_LINES),
|
|
113
|
+
].join('\n');
|
|
114
|
+
}
|
|
89
115
|
/**
|
|
90
116
|
* Print each gate exactly once, when it reaches a terminal status.
|
|
91
117
|
* @param reported - Gate row ids already printed; mutated in place.
|
|
@@ -99,7 +125,7 @@ function reportGates(gates, reported) {
|
|
|
99
125
|
// A failing gate without its log forces the caller back to the API to learn
|
|
100
126
|
// anything actionable, which defeats the point of a CLI verdict.
|
|
101
127
|
if (gate.status !== 'passed' && gate.logTail) {
|
|
102
|
-
console.error(gate
|
|
128
|
+
console.error(formatLogTailForDisplay(gate));
|
|
103
129
|
}
|
|
104
130
|
}
|
|
105
131
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Display Configuration (Issue #701)
|
|
3
|
+
*
|
|
4
|
+
* Single Source of Truth for the history display limit options used by:
|
|
5
|
+
* - GET /api/worktrees/:id/messages (upper-bound validation)
|
|
6
|
+
* - HistoryPane selector UI (selectable options)
|
|
7
|
+
* - WorktreeDetailRefactored state (persisted to localStorage)
|
|
8
|
+
*
|
|
9
|
+
* Design decisions:
|
|
10
|
+
* - MAX_MESSAGES_LIMIT is derived from HISTORY_DISPLAY_LIMIT_OPTIONS (no duplication).
|
|
11
|
+
* - DEFAULT_MESSAGES_LIMIT (50) matches the historical default before this issue.
|
|
12
|
+
* - Storage key uses the `commandmate:` namespace, matching other keys
|
|
13
|
+
* (e.g. `commandmate:showArchived`).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Selectable history display limit options (ascending).
|
|
17
|
+
* The first entry is the historical default; the last entry is the maximum.
|
|
18
|
+
*
|
|
19
|
+
* Issue #1123: the 250 ceiling was a performance mitigation for the previously
|
|
20
|
+
* flat-rendered HistoryPane. Now that the list is virtualized (render cost is
|
|
21
|
+
* O(visible rows), not O(total)), the ceiling is relaxed to 1000. The API still
|
|
22
|
+
* bounds the *fetch* by the maximum option (data volume); server-side paging is
|
|
23
|
+
* tracked separately.
|
|
24
|
+
*/
|
|
25
|
+
export declare const HISTORY_DISPLAY_LIMIT_OPTIONS: readonly [50, 100, 150, 200, 250, 500, 1000];
|
|
26
|
+
/**
|
|
27
|
+
* Union type representing any selectable history display limit.
|
|
28
|
+
*/
|
|
29
|
+
export type HistoryDisplayLimit = (typeof HISTORY_DISPLAY_LIMIT_OPTIONS)[number];
|
|
30
|
+
/**
|
|
31
|
+
* Upper bound enforced by the API, derived from the maximum option.
|
|
32
|
+
*
|
|
33
|
+
* Typed as `HistoryDisplayLimit` (not a brittle `as 250` literal) so that
|
|
34
|
+
* extending `HISTORY_DISPLAY_LIMIT_OPTIONS` does not require touching this line.
|
|
35
|
+
*/
|
|
36
|
+
export declare const MAX_MESSAGES_LIMIT: HistoryDisplayLimit;
|
|
37
|
+
/**
|
|
38
|
+
* Default history display limit (used when no localStorage value is present).
|
|
39
|
+
*/
|
|
40
|
+
export declare const DEFAULT_MESSAGES_LIMIT: HistoryDisplayLimit;
|
|
41
|
+
/**
|
|
42
|
+
* localStorage key used to persist the user-selected history display limit.
|
|
43
|
+
*/
|
|
44
|
+
export declare const HISTORY_DISPLAY_LIMIT_STORAGE_KEY = "commandmate:historyDisplayLimit";
|
|
45
|
+
/**
|
|
46
|
+
* Type guard: returns true if `value` is one of the allowed limit options.
|
|
47
|
+
*
|
|
48
|
+
* Used when reading from localStorage (which may contain stale/corrupted data)
|
|
49
|
+
* to safely narrow `number` to `HistoryDisplayLimit`.
|
|
50
|
+
*/
|
|
51
|
+
export declare function isHistoryDisplayLimit(value: number): value is HistoryDisplayLimit;
|
|
52
|
+
/**
|
|
53
|
+
* localStorage key used to persist the HistoryPane "User only" filter toggle
|
|
54
|
+
* (Issue #725).
|
|
55
|
+
*
|
|
56
|
+
* Value representation: `'true'` / `'false'` (string), matching the existing
|
|
57
|
+
* `commandmate:showArchived` convention. Any other value (including legacy
|
|
58
|
+
* `'1'`/`'0'` or missing) is treated as `false` (safe-off fallback).
|
|
59
|
+
*/
|
|
60
|
+
export declare const HISTORY_USER_ONLY_STORAGE_KEY = "commandmate:historyUserOnly";
|
|
61
|
+
//# sourceMappingURL=history-display-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-display-config.d.ts","sourceRoot":"","sources":["../../src/config/history-display-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,8CAA+C,CAAC;AAE1F;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,mBAET,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,mBAAwB,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,iCAAiC,oCAAoC,CAAC;AAEnF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,mBAAmB,CAEjF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* History Display Configuration (Issue #701)
|
|
4
|
+
*
|
|
5
|
+
* Single Source of Truth for the history display limit options used by:
|
|
6
|
+
* - GET /api/worktrees/:id/messages (upper-bound validation)
|
|
7
|
+
* - HistoryPane selector UI (selectable options)
|
|
8
|
+
* - WorktreeDetailRefactored state (persisted to localStorage)
|
|
9
|
+
*
|
|
10
|
+
* Design decisions:
|
|
11
|
+
* - MAX_MESSAGES_LIMIT is derived from HISTORY_DISPLAY_LIMIT_OPTIONS (no duplication).
|
|
12
|
+
* - DEFAULT_MESSAGES_LIMIT (50) matches the historical default before this issue.
|
|
13
|
+
* - Storage key uses the `commandmate:` namespace, matching other keys
|
|
14
|
+
* (e.g. `commandmate:showArchived`).
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.HISTORY_USER_ONLY_STORAGE_KEY = exports.HISTORY_DISPLAY_LIMIT_STORAGE_KEY = exports.DEFAULT_MESSAGES_LIMIT = exports.MAX_MESSAGES_LIMIT = exports.HISTORY_DISPLAY_LIMIT_OPTIONS = void 0;
|
|
18
|
+
exports.isHistoryDisplayLimit = isHistoryDisplayLimit;
|
|
19
|
+
/**
|
|
20
|
+
* Selectable history display limit options (ascending).
|
|
21
|
+
* The first entry is the historical default; the last entry is the maximum.
|
|
22
|
+
*
|
|
23
|
+
* Issue #1123: the 250 ceiling was a performance mitigation for the previously
|
|
24
|
+
* flat-rendered HistoryPane. Now that the list is virtualized (render cost is
|
|
25
|
+
* O(visible rows), not O(total)), the ceiling is relaxed to 1000. The API still
|
|
26
|
+
* bounds the *fetch* by the maximum option (data volume); server-side paging is
|
|
27
|
+
* tracked separately.
|
|
28
|
+
*/
|
|
29
|
+
exports.HISTORY_DISPLAY_LIMIT_OPTIONS = [50, 100, 150, 200, 250, 500, 1000];
|
|
30
|
+
/**
|
|
31
|
+
* Upper bound enforced by the API, derived from the maximum option.
|
|
32
|
+
*
|
|
33
|
+
* Typed as `HistoryDisplayLimit` (not a brittle `as 250` literal) so that
|
|
34
|
+
* extending `HISTORY_DISPLAY_LIMIT_OPTIONS` does not require touching this line.
|
|
35
|
+
*/
|
|
36
|
+
exports.MAX_MESSAGES_LIMIT = Math.max(...exports.HISTORY_DISPLAY_LIMIT_OPTIONS);
|
|
37
|
+
/**
|
|
38
|
+
* Default history display limit (used when no localStorage value is present).
|
|
39
|
+
*/
|
|
40
|
+
exports.DEFAULT_MESSAGES_LIMIT = 50;
|
|
41
|
+
/**
|
|
42
|
+
* localStorage key used to persist the user-selected history display limit.
|
|
43
|
+
*/
|
|
44
|
+
exports.HISTORY_DISPLAY_LIMIT_STORAGE_KEY = 'commandmate:historyDisplayLimit';
|
|
45
|
+
/**
|
|
46
|
+
* Type guard: returns true if `value` is one of the allowed limit options.
|
|
47
|
+
*
|
|
48
|
+
* Used when reading from localStorage (which may contain stale/corrupted data)
|
|
49
|
+
* to safely narrow `number` to `HistoryDisplayLimit`.
|
|
50
|
+
*/
|
|
51
|
+
function isHistoryDisplayLimit(value) {
|
|
52
|
+
return exports.HISTORY_DISPLAY_LIMIT_OPTIONS.includes(value);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* localStorage key used to persist the HistoryPane "User only" filter toggle
|
|
56
|
+
* (Issue #725).
|
|
57
|
+
*
|
|
58
|
+
* Value representation: `'true'` / `'false'` (string), matching the existing
|
|
59
|
+
* `commandmate:showArchived` convention. Any other value (including legacy
|
|
60
|
+
* `'1'`/`'0'` or missing) is treated as `false` (safe-off fallback).
|
|
61
|
+
*/
|
|
62
|
+
exports.HISTORY_USER_ONLY_STORAGE_KEY = 'commandmate:historyUserOnly';
|
|
@@ -62,8 +62,10 @@ const cli_session_1 = require("./session/cli-session");
|
|
|
62
62
|
const prompt_detector_1 = require("./detection/prompt-detector");
|
|
63
63
|
const auto_yes_resolver_1 = require("./polling/auto-yes-resolver");
|
|
64
64
|
const auto_yes_policy_1 = require("./polling/auto-yes-policy");
|
|
65
|
+
const auto_yes_suppression_state_1 = require("./polling/auto-yes-suppression-state");
|
|
65
66
|
const task_transition_service_1 = require("./tasks/task-transition-service");
|
|
66
67
|
const db_instance_1 = require("./db/db-instance");
|
|
68
|
+
const chat_db_1 = require("./db/chat-db");
|
|
67
69
|
const prompt_answer_sender_1 = require("./prompt-answer-sender");
|
|
68
70
|
const manager_1 = require("./cli-tools/manager");
|
|
69
71
|
const cli_patterns_1 = require("./detection/cli-patterns");
|
|
@@ -303,6 +305,15 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
303
305
|
const policy = (0, auto_yes_policy_1.getSessionAutoYesPolicy)(worktreeId, cliToolId, instanceId);
|
|
304
306
|
const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(promptDetection.promptData, policy);
|
|
305
307
|
if (resolution.suppressedBy) {
|
|
308
|
+
// Issue #1684: the log line alone leaves a CLI-driven pipeline blind to
|
|
309
|
+
// why its worker stalled. Record the suppression so buildCurrentOutput
|
|
310
|
+
// can publish it (`autoYes.lastSuppression` in capture --json).
|
|
311
|
+
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, cliToolId, instanceId, {
|
|
312
|
+
reason: resolution.suppressedBy,
|
|
313
|
+
mode: policy?.mode ?? null,
|
|
314
|
+
promptType: promptDetection.promptData.type,
|
|
315
|
+
pattern: resolution.pattern,
|
|
316
|
+
});
|
|
306
317
|
logger.warn('poller:auto-yes-suppressed-by-policy', {
|
|
307
318
|
worktreeId,
|
|
308
319
|
cliToolId,
|
|
@@ -346,6 +357,44 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
346
357
|
// Undefined means the primary instance, which the task lookup identifies
|
|
347
358
|
// by the tool id itself (see getActiveTaskForInstance).
|
|
348
359
|
instanceId ?? cliToolId, 'prompt_answered_auto', { promptType: promptDetection.promptData.type });
|
|
360
|
+
// Issue #1685: persist question/options/answer to chat history so the audit
|
|
361
|
+
// trail survives even when the answer landed inside the response poller's
|
|
362
|
+
// interval and the prompt was never saved as a pending message. Must never
|
|
363
|
+
// fail the answer that already reached tmux.
|
|
364
|
+
let auditRecord = null;
|
|
365
|
+
try {
|
|
366
|
+
auditRecord = (0, chat_db_1.recordAnsweredPrompt)((0, db_instance_1.getDbInstance)(), {
|
|
367
|
+
worktreeId,
|
|
368
|
+
cliToolId,
|
|
369
|
+
instanceId: instanceId ?? cliToolId,
|
|
370
|
+
promptData: promptDetection.promptData,
|
|
371
|
+
answer,
|
|
372
|
+
answeredBy: 'auto',
|
|
373
|
+
content: promptDetection.rawContent || promptDetection.cleanContent,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
catch (recordError) {
|
|
377
|
+
logger.warn('poller:prompt-audit-record-failed', {
|
|
378
|
+
worktreeId,
|
|
379
|
+
cliToolId,
|
|
380
|
+
instanceId,
|
|
381
|
+
error: (0, errors_1.getErrorMessage)(recordError),
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
if (auditRecord) {
|
|
385
|
+
const record = auditRecord;
|
|
386
|
+
// Fire-and-forget on purpose: the WS push is advisory, and awaiting a
|
|
387
|
+
// cold ws-server module load inside the poll path would make its
|
|
388
|
+
// completion timing nondeterministic for a side effect it doesn't
|
|
389
|
+
// depend on (the audit row is already committed above).
|
|
390
|
+
void Promise.resolve().then(() => __importStar(require('../lib/ws-server'))).then(({ broadcastMessage }) => {
|
|
391
|
+
broadcastMessage(record.created ? 'message' : 'message_updated', {
|
|
392
|
+
worktreeId,
|
|
393
|
+
message: record.message,
|
|
394
|
+
});
|
|
395
|
+
})
|
|
396
|
+
.catch(() => { });
|
|
397
|
+
}
|
|
349
398
|
// Dynamic imports avoid a module cycle through terminal-broadcast ->
|
|
350
399
|
// current-output-builder -> auto-yes-manager -> this poller.
|
|
351
400
|
const [{ startPolling: startResponsePolling }, { broadcastTerminalSnapshotAfterInteraction }] = await Promise.all([
|
|
@@ -24,6 +24,7 @@ exports.getMessagesByDateRange = getMessagesByDateRange;
|
|
|
24
24
|
exports.getMessageById = getMessageById;
|
|
25
25
|
exports.updatePromptData = updatePromptData;
|
|
26
26
|
exports.markPendingPromptsAsAnswered = markPendingPromptsAsAnswered;
|
|
27
|
+
exports.recordAnsweredPrompt = recordAnsweredPrompt;
|
|
27
28
|
const crypto_1 = require("crypto");
|
|
28
29
|
const logger_1 = require("../../lib/logger");
|
|
29
30
|
const logger = (0, logger_1.createLogger)('chat-db');
|
|
@@ -123,7 +124,7 @@ function updateMessageContent(db, messageId, content, options) {
|
|
|
123
124
|
* Get messages for a worktree, optionally filtered by CLI tool
|
|
124
125
|
*/
|
|
125
126
|
function getMessages(db, worktreeId, options = {}) {
|
|
126
|
-
const { before, limit = 50, cliToolId, instanceId, includeArchived = false, limitUnit = 'messages' } = options;
|
|
127
|
+
const { before, limit = 50, cliToolId, instanceId, includeArchived = false, messageType, limitUnit = 'messages' } = options;
|
|
127
128
|
// Build the shared scope clause (worktree + before cursor + archived + instance/cli
|
|
128
129
|
// filter) and its bound params. Used for both the message-unit and pair-unit paths
|
|
129
130
|
// so their filtering stays identical.
|
|
@@ -144,6 +145,11 @@ function getMessages(db, worktreeId, options = {}) {
|
|
|
144
145
|
clause += ` AND cli_tool_id = ?`;
|
|
145
146
|
params.push(cliToolId);
|
|
146
147
|
}
|
|
148
|
+
// Issue #1685: message-type filter (prompt audit listing)
|
|
149
|
+
if (messageType) {
|
|
150
|
+
clause += ` AND message_type = ?`;
|
|
151
|
+
params.push(messageType);
|
|
152
|
+
}
|
|
147
153
|
return { clause, params };
|
|
148
154
|
};
|
|
149
155
|
const SELECT_COLS = `SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived`;
|
|
@@ -425,6 +431,10 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
|
|
|
425
431
|
promptData.status = 'answered';
|
|
426
432
|
promptData.answer = '(answered via terminal)';
|
|
427
433
|
promptData.answeredAt = new Date().toISOString();
|
|
434
|
+
// Issue #1685: attribution for the audit trail. This sweep only sees
|
|
435
|
+
// prompts nothing else claimed, so all that is known is that the agent
|
|
436
|
+
// moved on — i.e. someone acted in the terminal.
|
|
437
|
+
promptData.answeredBy = 'terminal';
|
|
428
438
|
updateStmt.run(JSON.stringify(promptData), row.id);
|
|
429
439
|
updatedCount++;
|
|
430
440
|
}
|
|
@@ -434,3 +444,67 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
|
|
|
434
444
|
}
|
|
435
445
|
return updatedCount;
|
|
436
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Persist "this prompt was just answered" to chat history (Issue #1685).
|
|
449
|
+
*
|
|
450
|
+
* The answer paths (Auto-Yes poller, /prompt-response) act on what is on
|
|
451
|
+
* screen, not on a stored message, so the prompt they resolve may or may not
|
|
452
|
+
* have been saved by the response poller yet:
|
|
453
|
+
*
|
|
454
|
+
* - If a pending prompt row exists for the instance, it is marked answered in
|
|
455
|
+
* place — preferring the row whose question matches the screen, falling back
|
|
456
|
+
* to the newest pending row (the two capture paths can clean text slightly
|
|
457
|
+
* differently).
|
|
458
|
+
* - If none exists (the answer landed inside the response poller's interval —
|
|
459
|
+
* the exact case Issue #1685 is about), a new already-answered prompt row is
|
|
460
|
+
* created so the question/options/answer survive for the audit trail.
|
|
461
|
+
*/
|
|
462
|
+
function recordAnsweredPrompt(db, params) {
|
|
463
|
+
const { worktreeId, cliToolId, promptData, answer, answeredBy } = params;
|
|
464
|
+
const resolvedInstanceId = params.instanceId ?? cliToolId;
|
|
465
|
+
const rows = db
|
|
466
|
+
.prepare(`
|
|
467
|
+
SELECT id, prompt_data
|
|
468
|
+
FROM chat_messages
|
|
469
|
+
WHERE worktree_id = ?
|
|
470
|
+
AND instance_id = ?
|
|
471
|
+
AND message_type = 'prompt'
|
|
472
|
+
AND json_extract(prompt_data, '$.status') = 'pending'
|
|
473
|
+
${exports.ACTIVE_FILTER}
|
|
474
|
+
ORDER BY timestamp DESC
|
|
475
|
+
`)
|
|
476
|
+
.all(worktreeId, resolvedInstanceId);
|
|
477
|
+
let target = null;
|
|
478
|
+
for (const row of rows) {
|
|
479
|
+
try {
|
|
480
|
+
const parsed = JSON.parse(row.prompt_data);
|
|
481
|
+
if (!target) {
|
|
482
|
+
target = { id: row.id, parsed };
|
|
483
|
+
}
|
|
484
|
+
if (parsed.question === promptData.question) {
|
|
485
|
+
target = { id: row.id, parsed };
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
catch {
|
|
490
|
+
// Skip if prompt_data is invalid JSON
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
const answeredAt = new Date().toISOString();
|
|
494
|
+
if (target) {
|
|
495
|
+
const updated = { ...target.parsed, status: 'answered', answer, answeredAt, answeredBy };
|
|
496
|
+
updatePromptData(db, target.id, updated);
|
|
497
|
+
return { message: getMessageById(db, target.id), created: false };
|
|
498
|
+
}
|
|
499
|
+
const message = createMessage(db, {
|
|
500
|
+
worktreeId,
|
|
501
|
+
role: 'assistant',
|
|
502
|
+
content: params.content || promptData.question || '[prompt]',
|
|
503
|
+
messageType: 'prompt',
|
|
504
|
+
promptData: { ...promptData, status: 'answered', answer, answeredAt, answeredBy },
|
|
505
|
+
timestamp: new Date(),
|
|
506
|
+
cliToolId,
|
|
507
|
+
instanceId: resolvedInstanceId,
|
|
508
|
+
});
|
|
509
|
+
return { message, created: true };
|
|
510
|
+
}
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* @internal functions from being unintentionally exposed.
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = void 0;
|
|
13
|
+
exports.setInProgressMessageId = exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.recordAnsweredPrompt = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.getAliasedWorktreeIds = exports.getAllWorktreeAliases = exports.getWorktreeAliases = exports.resolveWorktreeIdWithAlias = exports.recordWorktreeAlias = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getAllWorktreePathIds = exports.getAllWorktreeIds = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
|
|
14
|
+
exports.createAssistantMessage = exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = exports.clearInProgressMessageId = void 0;
|
|
15
|
+
exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = exports.updateAssistantMessageStatus = void 0;
|
|
16
16
|
// init-db
|
|
17
17
|
var init_db_1 = require("./init-db");
|
|
18
18
|
Object.defineProperty(exports, "initDatabase", { enumerable: true, get: function () { return init_db_1.initDatabase; } });
|
|
@@ -65,6 +65,7 @@ Object.defineProperty(exports, "recomputeLastUserMessage", { enumerable: true, g
|
|
|
65
65
|
Object.defineProperty(exports, "getMessageById", { enumerable: true, get: function () { return chat_db_1.getMessageById; } });
|
|
66
66
|
Object.defineProperty(exports, "updatePromptData", { enumerable: true, get: function () { return chat_db_1.updatePromptData; } });
|
|
67
67
|
Object.defineProperty(exports, "markPendingPromptsAsAnswered", { enumerable: true, get: function () { return chat_db_1.markPendingPromptsAsAnswered; } });
|
|
68
|
+
Object.defineProperty(exports, "recordAnsweredPrompt", { enumerable: true, get: function () { return chat_db_1.recordAnsweredPrompt; } });
|
|
68
69
|
Object.defineProperty(exports, "ACTIVE_FILTER", { enumerable: true, get: function () { return chat_db_1.ACTIVE_FILTER; } });
|
|
69
70
|
Object.defineProperty(exports, "getMessagesByDateRange", { enumerable: true, get: function () { return chat_db_1.getMessagesByDateRange; } });
|
|
70
71
|
// session-db
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory record of the last Auto-Yes answer withheld by a contract policy
|
|
4
|
+
* (Issue #1684).
|
|
5
|
+
*
|
|
6
|
+
* Until now a policy suppression (Issue #1547) was visible only in the server
|
|
7
|
+
* log (`poller:auto-yes-suppressed-by-policy`), so an unattended pipeline that
|
|
8
|
+
* stalled on a suppressed prompt looked identical to one that simply had no
|
|
9
|
+
* answer. This module keeps the last suppression per session so
|
|
10
|
+
* `buildCurrentOutput` can publish it and `commandmate capture --json` can show
|
|
11
|
+
* *why* the worker is waiting.
|
|
12
|
+
*
|
|
13
|
+
* Exposure only: nothing reads this to make a decision. The poller keeps
|
|
14
|
+
* re-evaluating a suppressed prompt every poll (the duplicate guard only
|
|
15
|
+
* remembers *answered* prompts), so while the prompt stays on screen the record
|
|
16
|
+
* is refreshed and `at` stays current; consumers combine it with
|
|
17
|
+
* `isPromptWaiting` to tell an active suppression from a historical one.
|
|
18
|
+
*
|
|
19
|
+
* In-memory and not in SQLite for the same reason `agent-event-state` is: the
|
|
20
|
+
* record describes a prompt on a live tmux session, and a session does not
|
|
21
|
+
* survive a server restart for the record to still be about.
|
|
22
|
+
*
|
|
23
|
+
* @module lib/polling/auto-yes-suppression-state
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.recordPolicySuppression = recordPolicySuppression;
|
|
27
|
+
exports.getLastPolicySuppression = getLastPolicySuppression;
|
|
28
|
+
exports.clearPolicySuppressions = clearPolicySuppressions;
|
|
29
|
+
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
30
|
+
/** compositeKey -> the most recent policy suppression for that session. */
|
|
31
|
+
const lastPolicySuppressions = new Map();
|
|
32
|
+
/**
|
|
33
|
+
* Record that the policy withheld an answer for `instanceId`'s current prompt.
|
|
34
|
+
*
|
|
35
|
+
* @param at - Epoch ms; defaults to now. Overridable so tests are deterministic.
|
|
36
|
+
*/
|
|
37
|
+
function recordPolicySuppression(worktreeId, cliToolId, instanceId, suppression, at = Date.now()) {
|
|
38
|
+
lastPolicySuppressions.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), {
|
|
39
|
+
...suppression,
|
|
40
|
+
at,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* @returns The last policy suppression for this session, or null when the
|
|
45
|
+
* policy has never withheld an answer — the ordinary case for a session
|
|
46
|
+
* running without a contract.
|
|
47
|
+
*/
|
|
48
|
+
function getLastPolicySuppression(worktreeId, cliToolId, instanceId) {
|
|
49
|
+
return lastPolicySuppressions.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
|
|
50
|
+
}
|
|
51
|
+
/** Drop every recorded suppression. Test seam. */
|
|
52
|
+
function clearPolicySuppressions() {
|
|
53
|
+
lastPolicySuppressions.clear();
|
|
54
|
+
}
|
|
@@ -14,6 +14,7 @@ const manager_1 = require("../../lib/cli-tools/manager");
|
|
|
14
14
|
const cli_session_1 = require("../../lib/session/cli-session");
|
|
15
15
|
const status_detector_1 = require("../../lib/detection/status-detector");
|
|
16
16
|
const auto_yes_manager_1 = require("../../lib/polling/auto-yes-manager");
|
|
17
|
+
const auto_yes_suppression_state_1 = require("../../lib/polling/auto-yes-suppression-state");
|
|
17
18
|
const status_capture_config_1 = require("../../config/status-capture-config");
|
|
18
19
|
const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
|
|
19
20
|
const agent_event_state_1 = require("../../lib/session/agent-event-state");
|
|
@@ -101,6 +102,7 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
|
|
|
101
102
|
enabled: autoYesState?.enabled ?? false,
|
|
102
103
|
expiresAt: autoYesState?.enabled ? autoYesState.expiresAt : null,
|
|
103
104
|
stopReason: autoYesState?.stopReason,
|
|
105
|
+
lastSuppression: (0, auto_yes_suppression_state_1.getLastPolicySuppression)(worktreeId, cliToolId, instanceId),
|
|
104
106
|
},
|
|
105
107
|
isSelectionListActive,
|
|
106
108
|
isPagerActive,
|
|
@@ -47,6 +47,8 @@ exports.inspectSkillDestination = inspectSkillDestination;
|
|
|
47
47
|
exports.hasCommittedSkillPayload = hasCommittedSkillPayload;
|
|
48
48
|
exports.writeSkillPayloadFile = writeSkillPayloadFile;
|
|
49
49
|
exports.applySkillInstall = applySkillInstall;
|
|
50
|
+
exports.directoriesForSkillPayload = directoriesForSkillPayload;
|
|
51
|
+
exports.stageSkillRootPayload = stageSkillRootPayload;
|
|
50
52
|
exports.completeSecondarySkillInstallRoots = completeSecondarySkillInstallRoots;
|
|
51
53
|
exports.cleanupSkillInstallStaging = cleanupSkillInstallStaging;
|
|
52
54
|
const fs_1 = require("fs");
|
|
@@ -397,7 +399,7 @@ function applySkillInstall(input) {
|
|
|
397
399
|
}
|
|
398
400
|
return { relativePath: file.path, bytes, executable: file.executable };
|
|
399
401
|
});
|
|
400
|
-
const directories =
|
|
402
|
+
const directories = directoriesForSkillPayload(input.snapshot.files.map((f) => f.path), input.snapshot.directories);
|
|
401
403
|
// Every destination is proven safe and absent *before* the primary commits, so
|
|
402
404
|
// a secondary that is already blocked cannot leave a committed primary behind.
|
|
403
405
|
for (const prefix of rootPrefixes) {
|
|
@@ -463,7 +465,7 @@ function applySkillInstall(input) {
|
|
|
463
465
|
};
|
|
464
466
|
}
|
|
465
467
|
/** Sorted set of directories a payload implies, plus any the package declared. */
|
|
466
|
-
function
|
|
468
|
+
function directoriesForSkillPayload(filePaths, declared = []) {
|
|
467
469
|
const directories = new Set(declared);
|
|
468
470
|
for (const filePath of filePaths) {
|
|
469
471
|
const parents = filePath.split('/').slice(0, -1);
|
|
@@ -476,30 +478,29 @@ function directoriesFor(filePaths, declared = []) {
|
|
|
476
478
|
return [...directories].sort();
|
|
477
479
|
}
|
|
478
480
|
/**
|
|
479
|
-
* Stage the verified payload
|
|
481
|
+
* Stage the verified payload for one root without publishing it (#1244).
|
|
480
482
|
*
|
|
481
|
-
* The
|
|
482
|
-
*
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
*
|
|
483
|
+
* The staging half of {@link stageAndCommitSkillRoot}, exported so update can
|
|
484
|
+
* reuse the exact write path — exclusive no-follow writes, tree-hash gate,
|
|
485
|
+
* same-filesystem check — and supply its own rename sequence. On any failure the
|
|
486
|
+
* staging directory is removed and {@link SkillInstallError} is thrown; the
|
|
487
|
+
* destination is never touched. The caller owns the returned directory: it must
|
|
488
|
+
* either rename it into place or remove it.
|
|
489
|
+
*
|
|
490
|
+
* @internal Shared between install and update apply; not a public API.
|
|
487
491
|
*/
|
|
488
|
-
function
|
|
492
|
+
function stageSkillRootPayload(input) {
|
|
493
|
+
if (!exports.SKILL_INSTALL_OPERATION_ID_PATTERN.test(input.stagingName)) {
|
|
494
|
+
fail(exports.SkillInstallErrorCode.STAGING_IO, { reason: 'staging-name' });
|
|
495
|
+
}
|
|
489
496
|
const installRootAbs = resolveSkillInstallTargetFor(input.worktreePath, input.rootPrefix, input.skillId);
|
|
490
497
|
assertAncestorsAreRealDirectories(input.worktreeRealPath, input.worktreePath, input.rootPrefix);
|
|
491
|
-
const destinationBefore = inspectSkillDestination(installRootAbs);
|
|
492
|
-
if (destinationBefore.present) {
|
|
493
|
-
fail(destinationBefore.managed
|
|
494
|
-
? exports.SkillInstallErrorCode.DESTINATION_EXISTS
|
|
495
|
-
: exports.SkillInstallErrorCode.DESTINATION_UNMANAGED, destinationBefore.version ? { version: destinationBefore.version } : undefined);
|
|
496
|
-
}
|
|
497
498
|
const stagingRoot = (0, operation_store_1.getSkillInstallStagingRoot)(input.worktreePath, input.rootPrefix);
|
|
498
499
|
makeDirectory(path_1.default.dirname(stagingRoot), 0o755, true);
|
|
499
500
|
makeDirectory(stagingRoot, exports.SKILL_INSTALL_DIR_MODE, true);
|
|
500
501
|
// Not recursive: a staging directory that already exists means another
|
|
501
|
-
// operation is using this
|
|
502
|
-
const stagingDir = path_1.default.join(stagingRoot, input.
|
|
502
|
+
// operation is using this name, and silently adopting it would merge two writes.
|
|
503
|
+
const stagingDir = path_1.default.join(stagingRoot, input.stagingName);
|
|
503
504
|
makeDirectory(stagingDir, exports.SKILL_INSTALL_DIR_MODE, false);
|
|
504
505
|
try {
|
|
505
506
|
for (const directory of input.directories) {
|
|
@@ -520,6 +521,45 @@ function stageAndCommitSkillRoot(input) {
|
|
|
520
521
|
fail(exports.SkillInstallErrorCode.PAYLOAD_MISMATCH, { reason: 'tree-hash' });
|
|
521
522
|
}
|
|
522
523
|
assertSameFilesystem(stagingDir, path_1.default.dirname(installRootAbs));
|
|
524
|
+
}
|
|
525
|
+
catch (error) {
|
|
526
|
+
(0, fs_1.rmSync)(stagingDir, { recursive: true, force: true });
|
|
527
|
+
pruneStagingRoot(stagingRoot);
|
|
528
|
+
throw error;
|
|
529
|
+
}
|
|
530
|
+
return { stagingDir, stagingRoot, installRootAbs };
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Stage the verified payload into one root and atomically publish it (#1460).
|
|
534
|
+
*
|
|
535
|
+
* The single-root commit #1235 built, lifted to take the root prefix as a
|
|
536
|
+
* parameter: staging lives under *that* root's reserved namespace so the rename
|
|
537
|
+
* stays on one filesystem, and every check — ancestor lstat walk, exclusive
|
|
538
|
+
* no-follow writes, tree-hash gate, destination-absent, same-filesystem — is
|
|
539
|
+
* applied per root. Throws {@link SkillInstallError} on any failure, having
|
|
540
|
+
* removed its own staging; the destination is untouched unless the rename ran.
|
|
541
|
+
*/
|
|
542
|
+
function stageAndCommitSkillRoot(input) {
|
|
543
|
+
const installRootAbs = resolveSkillInstallTargetFor(input.worktreePath, input.rootPrefix, input.skillId);
|
|
544
|
+
assertAncestorsAreRealDirectories(input.worktreeRealPath, input.worktreePath, input.rootPrefix);
|
|
545
|
+
const destinationBefore = inspectSkillDestination(installRootAbs);
|
|
546
|
+
if (destinationBefore.present) {
|
|
547
|
+
fail(destinationBefore.managed
|
|
548
|
+
? exports.SkillInstallErrorCode.DESTINATION_EXISTS
|
|
549
|
+
: exports.SkillInstallErrorCode.DESTINATION_UNMANAGED, destinationBefore.version ? { version: destinationBefore.version } : undefined);
|
|
550
|
+
}
|
|
551
|
+
const staged = stageSkillRootPayload({
|
|
552
|
+
worktreePath: input.worktreePath,
|
|
553
|
+
worktreeRealPath: input.worktreeRealPath,
|
|
554
|
+
rootPrefix: input.rootPrefix,
|
|
555
|
+
skillId: input.skillId,
|
|
556
|
+
stagingName: input.operationId,
|
|
557
|
+
payload: input.payload,
|
|
558
|
+
directories: input.directories,
|
|
559
|
+
receiptBytes: input.receiptBytes,
|
|
560
|
+
plannedTreeHash: input.plannedTreeHash,
|
|
561
|
+
});
|
|
562
|
+
try {
|
|
523
563
|
// Re-checked immediately before the rename rather than only at entry: the
|
|
524
564
|
// exclusive lock keeps CommandMate out, but nothing keeps the user's own
|
|
525
565
|
// editor from creating this directory while the payload was being staged.
|
|
@@ -531,18 +571,18 @@ function stageAndCommitSkillRoot(input) {
|
|
|
531
571
|
: exports.SkillInstallErrorCode.DESTINATION_UNMANAGED);
|
|
532
572
|
}
|
|
533
573
|
try {
|
|
534
|
-
(0, fs_1.renameSync)(stagingDir, installRootAbs);
|
|
574
|
+
(0, fs_1.renameSync)(staged.stagingDir, installRootAbs);
|
|
535
575
|
}
|
|
536
576
|
catch {
|
|
537
577
|
fail(exports.SkillInstallErrorCode.COMMIT_FAILED, { reason: 'rename' });
|
|
538
578
|
}
|
|
539
579
|
}
|
|
540
580
|
catch (error) {
|
|
541
|
-
(0, fs_1.rmSync)(stagingDir, { recursive: true, force: true });
|
|
542
|
-
pruneStagingRoot(stagingRoot);
|
|
581
|
+
(0, fs_1.rmSync)(staged.stagingDir, { recursive: true, force: true });
|
|
582
|
+
pruneStagingRoot(staged.stagingRoot);
|
|
543
583
|
throw error;
|
|
544
584
|
}
|
|
545
|
-
pruneStagingRoot(stagingRoot);
|
|
585
|
+
pruneStagingRoot(staged.stagingRoot);
|
|
546
586
|
}
|
|
547
587
|
/**
|
|
548
588
|
* Converge a committed install's secondary roots forward from the primary (#1460).
|
|
@@ -573,7 +613,7 @@ function completeSecondarySkillInstallRoots(worktreePath, worktreeRealPath, skil
|
|
|
573
613
|
}
|
|
574
614
|
return { relativePath: file.path, bytes, executable: file.executable };
|
|
575
615
|
});
|
|
576
|
-
const directories =
|
|
616
|
+
const directories = directoriesForSkillPayload(receipt.files.map((file) => file.path));
|
|
577
617
|
const plannedTreeHash = (0, preview_diff_1.computeSkillTreeHash)([
|
|
578
618
|
...receipt.files.map((file) => ({
|
|
579
619
|
path: file.path,
|