commandmate 0.22.2 → 0.24.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 +383 -374
- package/.next/app-path-routes-manifest.json +16 -15
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +3 -3
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -0
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -0
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -0
- 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/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/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +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.js.nft.json +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.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/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_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 +1 -1
- 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_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.js +1 -4
- 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 -4
- 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/todos/route.js +1 -1
- package/.next/server/app/api/todos/route.js.nft.json +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.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]/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 +2 -2
- 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]/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 +2 -2
- 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]/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 +6 -6
- 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]/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]/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 +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 -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]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +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 +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 -1
- 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/route.js +1 -4
- 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]/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/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/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +6 -6
- 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 +1 -1
- 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 +16 -15
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1366.js +1 -1
- package/.next/server/chunks/1601.js +7 -0
- package/.next/server/chunks/1825.js +1 -1
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/3241.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3451.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/406.js +10 -6
- package/.next/server/chunks/4393.js +1 -0
- package/.next/server/chunks/4444.js +1 -1
- package/.next/server/chunks/4455.js +1 -0
- package/.next/server/chunks/5164.js +1 -0
- package/.next/server/chunks/5959.js +5 -6
- package/.next/server/chunks/5998.js +2 -13
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6159.js +1 -1
- package/.next/server/chunks/6274.js +3 -3
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -0
- package/.next/server/chunks/7458.js +6 -0
- package/.next/server/chunks/{3753.js → 7970.js} +57 -32
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +21 -0
- package/.next/server/chunks/8807.js +250 -192
- package/.next/server/chunks/9058.js +1 -1
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9123.js +8 -8
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9360.js +1 -1
- package/.next/server/chunks/9373.js +3 -3
- package/.next/server/chunks/9687.js +2 -2
- 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/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/4322-dfd5a7119b5ba4fc.js +1 -0
- package/.next/static/chunks/{4974-eaf66770bfa9dea0.js → 4974-35592ec312322124.js} +1 -1
- package/.next/static/chunks/5229-0610b4e3288e777d.js +1 -0
- package/.next/static/chunks/6381-18a6a02a94d00d76.js +1 -0
- package/.next/static/chunks/7229.7f0f5a7032b612b4.js +1 -0
- package/.next/static/chunks/{744-fa8c0ae444c8338c.js → 744-3ad06d8c8ca482fc.js} +1 -1
- package/.next/static/chunks/app/api/app/update/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/app/update-check/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/assistant/conversation/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/assistant/current-output/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/chat/page-15d13fc024d78f5d.js +1 -0
- package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/more/page-b8ba537baeac8d5b.js +1 -0
- package/.next/static/chunks/app/page-afc64708362f31e5.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/repositories/page-3469dacb6be7842f.js +1 -0
- package/.next/static/chunks/app/review/page-2d9cb7e068f8f35a.js +1 -0
- package/.next/static/chunks/app/sessions/page-7470c2bfd89e0df9.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-5e24481162f7ea78.js +1 -0
- package/.next/static/chunks/app/skills/installed/page-efd2d710a27f9735.js +1 -0
- package/.next/static/chunks/app/skills/page-0498adfc6e48684b.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9ddcb224594f620f.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e611d30e47989e5d.js +1 -0
- package/.next/static/chunks/{webpack-180bebdee221b6f4.js → webpack-3534d858912a6c92.js} +1 -1
- package/.next/static/css/3ac44cfc082d02ad.css +1 -0
- package/.next/static/smu4mnL7qMf8w38n9dQJE/_buildManifest.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/app/api/push/escalation/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +6 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +19 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +6 -0
- package/dist/cli/commands/verify.js +6 -1
- package/dist/cli/types/api-responses.d.ts +46 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +17 -1
- package/dist/server/locales/en/notifications.json +20 -1
- package/dist/server/locales/ja/notifications.json +20 -1
- package/dist/server/server.js +23 -0
- package/dist/server/src/config/log-config.js +10 -1
- package/dist/server/src/config/safe-directory.js +103 -0
- package/dist/server/src/config/system-directories.js +74 -9
- package/dist/server/src/lib/cli-tools/antigravity.js +19 -2
- package/dist/server/src/lib/cli-tools/codex.js +95 -1
- package/dist/server/src/lib/cli-tools/copilot.js +30 -1
- package/dist/server/src/lib/cli-tools/gemini.js +28 -2
- package/dist/server/src/lib/cli-tools/opencode.js +51 -2
- package/dist/server/src/lib/db/db.js +2 -1
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v56-gate-result-source.js +58 -0
- package/dist/server/src/lib/db/verification-db.js +26 -6
- package/dist/server/src/lib/detection/model-info-extractor.js +384 -0
- package/dist/server/src/lib/git/git-default-branch.js +59 -0
- package/dist/server/src/lib/hooks/agent-event-service.js +205 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +7 -86
- package/dist/server/src/lib/hooks/hook-settings-generator.js +26 -11
- package/dist/server/src/lib/hooks/permission-decision-service.js +269 -0
- package/dist/server/src/lib/hooks/sources/abstain.js +78 -0
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +372 -0
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +229 -0
- package/dist/server/src/lib/hooks/sources/antigravity/tool-id.js +16 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +150 -0
- package/dist/server/src/lib/hooks/sources/claude/tool-id.js +18 -0
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +465 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +143 -0
- package/dist/server/src/lib/hooks/sources/codex/tool-id.js +15 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +473 -0
- package/dist/server/src/lib/hooks/sources/copilot/source.js +210 -0
- package/dist/server/src/lib/hooks/sources/copilot/tool-id.js +15 -0
- package/dist/server/src/lib/hooks/sources/define-source.js +177 -0
- package/dist/server/src/lib/hooks/sources/event-mapper.js +177 -0
- package/dist/server/src/lib/hooks/sources/gemini/event-vocabulary.js +102 -0
- package/dist/server/src/lib/hooks/sources/gemini/settings-generator.js +315 -0
- package/dist/server/src/lib/hooks/sources/gemini/shared-config-tree.js +103 -0
- package/dist/server/src/lib/hooks/sources/gemini/source.js +151 -0
- package/dist/server/src/lib/hooks/sources/gemini/tool-id.js +17 -0
- package/dist/server/src/lib/hooks/sources/hook-event-vocabulary.js +111 -0
- package/dist/server/src/lib/hooks/sources/index.js +62 -0
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +84 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +299 -0
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +267 -0
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +176 -0
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +189 -0
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +295 -0
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +159 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +253 -0
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +422 -0
- package/dist/server/src/lib/hooks/sources/opencode/tool-id.js +14 -0
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +193 -0
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +127 -0
- package/dist/server/src/lib/hooks/sources/registry.js +111 -0
- package/dist/server/src/lib/hooks/sources/types.js +46 -0
- package/dist/server/src/lib/polling/response-checker.js +47 -0
- package/dist/server/src/lib/push/escalation-settings.js +114 -0
- package/dist/server/src/lib/push/index.js +21 -1
- package/dist/server/src/lib/push/notification-dedup.js +35 -0
- package/dist/server/src/lib/push/push-sender.js +66 -7
- package/dist/server/src/lib/push/waiting-push-notifier.js +231 -0
- package/dist/server/src/lib/realtime/waiting-broadcast.js +93 -0
- package/dist/server/src/lib/session/agent-event-state.js +260 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +82 -0
- package/dist/server/src/lib/session/claude-session.js +10 -3
- package/dist/server/src/lib/session/current-output-builder.js +24 -0
- package/dist/server/src/lib/session/next-action-helper.js +93 -0
- package/dist/server/src/lib/session/prompt-waiting-composition.js +38 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +136 -0
- package/dist/server/src/lib/session/waiting-kind.js +59 -0
- package/dist/server/src/lib/tasks/contract-message.js +218 -0
- package/dist/server/src/lib/tasks/contract-parser.js +58 -12
- package/dist/server/src/lib/verification/env-clean-gate.js +320 -0
- package/dist/server/src/lib/verification/env-snapshot.js +474 -0
- package/dist/server/src/lib/verification/gate-runner.js +844 -0
- package/dist/server/src/lib/verification/scope-gate.js +402 -0
- package/dist/server/src/lib/verification/verify-config.js +314 -0
- package/dist/server/src/lib/ws-server.js +9 -0
- package/dist/server/src/types/sidebar.js +68 -0
- package/package.json +1 -1
- package/scripts/hooks/cmate-agent-event.sh +73 -3
- package/.next/server/chunks/6283.js +0 -1
- package/.next/server/chunks/646.js +0 -21
- package/.next/server/chunks/8856.js +0 -4
- package/.next/static/XpKfn5x6H-mtTaXI9yNmb/_buildManifest.js +0 -1
- package/.next/static/chunks/4560-0917ae2e6a0e5400.js +0 -1
- package/.next/static/chunks/6488-53a3e1d78e4fe8f7.js +0 -1
- package/.next/static/chunks/7229.edb331fb9fbafa27.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/templates/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/todos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/chat/page-83a2238ab453afaa.js +0 -1
- package/.next/static/chunks/app/layout-86574192bd3c0e6b.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/more/page-1619018cac999bbc.js +0 -1
- package/.next/static/chunks/app/page-a34d26812f085b6c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +0 -1
- package/.next/static/chunks/app/review/page-b559bfb11c46931b.js +0 -1
- package/.next/static/chunks/app/sessions/page-3fa7e767d0ab3889.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +0 -1
- package/.next/static/chunks/app/skills/installed/page-6641f95e6a6e5f9d.js +0 -1
- package/.next/static/chunks/app/skills/page-184f8e23e31a3667.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-6041d3c3db326317.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-6dc0b8c4e808ea3e.js +0 -1
- package/.next/static/css/d3453a6876553d32.css +0 -1
- /package/.next/static/{XpKfn5x6H-mtTaXI9yNmb → smu4mnL7qMf8w38n9dQJE}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Copilot CLI's {@link AgentEventSource} (Issue #1761, Epic #1720 Phase
|
|
4
|
+
* 4-3).
|
|
5
|
+
*
|
|
6
|
+
* Issue #1761 was filed as conditional — "copilot 1.0.77 may have no hooks at
|
|
7
|
+
* all; if it does not, withdraw this Issue" — on the evidence that
|
|
8
|
+
* `copilot --help` never says the word. The #1757 spike then found the feature
|
|
9
|
+
* documented in `copilot help config`, drove six events out of a live session,
|
|
10
|
+
* and captured them into `tests/fixtures/hooks/copilot/`. The premise is
|
|
11
|
+
* inverted: of the four tools Phase 4 adds, **copilot's payloads are the
|
|
12
|
+
* closest to Claude Code's**, and this file is correspondingly short.
|
|
13
|
+
*
|
|
14
|
+
* What it does *not* share with Claude is where the config goes, how a verdict
|
|
15
|
+
* gets back, and how long there is to send one. All three live in
|
|
16
|
+
* `./hook-settings`; the module comment there is the one to read before
|
|
17
|
+
* changing anything about delivery.
|
|
18
|
+
*
|
|
19
|
+
* ## The four values that are not Claude's
|
|
20
|
+
*
|
|
21
|
+
* - **`configScope: 'global-singleton'`.** There is no `--settings`. One file,
|
|
22
|
+
* `~/.copilot/settings.json`, for every session on the machine — so the
|
|
23
|
+
* correlation keys cannot be baked into it and ride in the environment
|
|
24
|
+
* instead.
|
|
25
|
+
* - **`decisionTimeoutSeconds: 10`**, against Claude's 600 (#1757 §5.2.3). A
|
|
26
|
+
* decision path budgeted for Claude misses copilot's window entirely and the
|
|
27
|
+
* tool call proceeds unadjudicated.
|
|
28
|
+
* - **`supportedEvents` omits `notification` and `pre_tool_use`.** See below;
|
|
29
|
+
* both omissions are deliberate and neither is a gap in the mapping.
|
|
30
|
+
* - **`encodeVerdict` speaks `permissionDecision`**, not Claude's
|
|
31
|
+
* `decision.behavior`, and copilot can express a denial that Claude cannot.
|
|
32
|
+
*
|
|
33
|
+
* ## Why `pre_tool_use` is not in `supportedEvents`
|
|
34
|
+
*
|
|
35
|
+
* Copilot has no `PermissionRequest`. `PreToolUse` *is* its approval gate: the
|
|
36
|
+
* hook's stdout decides whether the call runs (#1757 §5.2.4, re-measured for
|
|
37
|
+
* this Issue against 1.0.79 — `deny` prints `Denied by preToolUse hook: …` and
|
|
38
|
+
* the command does not execute). CommandMate therefore points that one event at
|
|
39
|
+
* `/api/hooks/permission-request`, which adjudicates and does not record.
|
|
40
|
+
*
|
|
41
|
+
* So `pre_tool_use` never reaches `agent-event-state` for copilot, and
|
|
42
|
+
* `supportedEvents` is a promise about what does: listing it would leave a
|
|
43
|
+
* caller waiting for an event that is being answered somewhere else. The mapper
|
|
44
|
+
* still recognises the spelling — a hand-configured hook from #1549 pointed at
|
|
45
|
+
* the event route keeps working — which is why the omission is in
|
|
46
|
+
* `capabilities` and not in `mappers`.
|
|
47
|
+
*
|
|
48
|
+
* `notification` is omitted for the opposite reason: it was configured during
|
|
49
|
+
* the spike and **never fired once**, so there is no captured payload and no
|
|
50
|
+
* evidence about what `notification_type` would even contain. Prompt detection
|
|
51
|
+
* for copilot stays with the screen scraper (#1723), which is where it already
|
|
52
|
+
* is.
|
|
53
|
+
*
|
|
54
|
+
* ## Why `session_start` is not a "the agent is up" signal
|
|
55
|
+
*
|
|
56
|
+
* Copilot fires `UserPromptSubmit` **before** `SessionStart` — 20.813Z against
|
|
57
|
+
* 20.915Z, measured. Anything ordering-sensitive built on these two words is
|
|
58
|
+
* wrong for this tool specifically, which is why the fence in
|
|
59
|
+
* `beginAgentSession` is a timestamp rather than a state machine.
|
|
60
|
+
*
|
|
61
|
+
* @module lib/hooks/sources/copilot/source
|
|
62
|
+
*/
|
|
63
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
|
+
exports.copilotAgentEventSource = void 0;
|
|
65
|
+
exports.parseCopilotPermissionRequest = parseCopilotPermissionRequest;
|
|
66
|
+
exports.encodeCopilotVerdict = encodeCopilotVerdict;
|
|
67
|
+
const permission_request_payload_1 = require("../../../../lib/hooks/permission-request-payload");
|
|
68
|
+
const define_source_1 = require("../define-source");
|
|
69
|
+
const event_mapper_1 = require("../event-mapper");
|
|
70
|
+
const hook_event_vocabulary_1 = require("../hook-event-vocabulary");
|
|
71
|
+
const hook_settings_1 = require("./hook-settings");
|
|
72
|
+
const tool_id_1 = require("./tool-id");
|
|
73
|
+
/**
|
|
74
|
+
* No opinion, byte-for-byte the reply the spike measured copilot treating as
|
|
75
|
+
* "carry on" (#1757 §5.2.4).
|
|
76
|
+
*
|
|
77
|
+
* The same object Claude reads the same way — which is a coincidence worth
|
|
78
|
+
* naming, because it is emphatically not true of antigravity, where `{}` is a
|
|
79
|
+
* denial (#1757 P10).
|
|
80
|
+
*/
|
|
81
|
+
const NO_DECISION_BODY = {};
|
|
82
|
+
/**
|
|
83
|
+
* Read copilot's `PreToolUse` payload as a permission request (S7).
|
|
84
|
+
*
|
|
85
|
+
* Deliberately not `parsePermissionRequestPayload`: that one insists on
|
|
86
|
+
* `hook_event_name === 'PermissionRequest'`, an event copilot does not have, so
|
|
87
|
+
* reusing it would answer null for every request copilot ever makes and
|
|
88
|
+
* Auto-Yes would abstain on all of them — silently, and looking exactly like a
|
|
89
|
+
* working feature with nothing to approve.
|
|
90
|
+
*
|
|
91
|
+
* Strict in the same way and for the same reason: anything unvouchable becomes
|
|
92
|
+
* null, the caller turns null into no-decision, and the fallback is a dialog
|
|
93
|
+
* rather than an execution.
|
|
94
|
+
*
|
|
95
|
+
* `promptId` is always null — copilot sends no correlation id on this payload
|
|
96
|
+
* (nor on `PreToolUse`/`PostToolUse`; #1757 R5) — so the permission route mints
|
|
97
|
+
* its own id for the in-flight request.
|
|
98
|
+
*
|
|
99
|
+
* @param body - Whatever was posted to `/api/hooks/permission-request`
|
|
100
|
+
*/
|
|
101
|
+
function parseCopilotPermissionRequest(body) {
|
|
102
|
+
if (!(0, event_mapper_1.isPlainObject)(body))
|
|
103
|
+
return null;
|
|
104
|
+
if (body.hook_event_name !== hook_settings_1.COPILOT_PERMISSION_HOOK_EVENT)
|
|
105
|
+
return null;
|
|
106
|
+
const toolName = (0, event_mapper_1.readStringField)(body, 'tool_name');
|
|
107
|
+
if (!toolName || toolName.length > permission_request_payload_1.MAX_TOOL_NAME_LENGTH)
|
|
108
|
+
return null;
|
|
109
|
+
// No `tool_input` means nothing for the deny patterns to be judged against,
|
|
110
|
+
// which makes the request unadjudicatable rather than harmless.
|
|
111
|
+
if (!(0, event_mapper_1.isPlainObject)(body.tool_input))
|
|
112
|
+
return null;
|
|
113
|
+
return {
|
|
114
|
+
toolName,
|
|
115
|
+
toolInput: body.tool_input,
|
|
116
|
+
promptId: null,
|
|
117
|
+
sessionId: (0, event_mapper_1.readStringField)(body, 'session_id'),
|
|
118
|
+
permissionMode: null,
|
|
119
|
+
permissionSuggestions: null,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Encode a verdict in copilot's wire form (S6).
|
|
124
|
+
*
|
|
125
|
+
* `hookSpecificOutput.permissionDecision`, verified end to end against copilot
|
|
126
|
+
* 1.0.79: `allow` ran a shell command that would otherwise have prompted,
|
|
127
|
+
* `deny` refused it and printed the reason, and `{}` fell through to the
|
|
128
|
+
* ordinary flow.
|
|
129
|
+
*
|
|
130
|
+
* `deny` is encoded rather than collapsed — this is the one place copilot is
|
|
131
|
+
* *more* expressive than Claude, whose source has no spelling for it. Nothing
|
|
132
|
+
* produces one today (`permission-decision-service` answers allow or
|
|
133
|
+
* no-decision and never denies, on purpose), so this branch is a capability
|
|
134
|
+
* being stated honestly, not a behaviour being switched on.
|
|
135
|
+
*
|
|
136
|
+
* `allowAlways` and `answer` collapse to no-decision: copilot's
|
|
137
|
+
* `permissionDecision` has no persistent form, and approving one call is not
|
|
138
|
+
* the same promise as writing a standing rule.
|
|
139
|
+
*/
|
|
140
|
+
function encodeCopilotVerdict(verdict) {
|
|
141
|
+
if (verdict.kind === 'allowOnce') {
|
|
142
|
+
return {
|
|
143
|
+
hookSpecificOutput: {
|
|
144
|
+
hookEventName: hook_settings_1.COPILOT_PERMISSION_HOOK_EVENT,
|
|
145
|
+
permissionDecision: 'allow',
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (verdict.kind === 'deny') {
|
|
150
|
+
return {
|
|
151
|
+
hookSpecificOutput: {
|
|
152
|
+
hookEventName: hook_settings_1.COPILOT_PERMISSION_HOOK_EVENT,
|
|
153
|
+
permissionDecision: 'deny',
|
|
154
|
+
permissionDecisionReason: verdict.message ?? 'denied by CommandMate',
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return NO_DECISION_BODY;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* GitHub Copilot CLI as an event source.
|
|
162
|
+
*
|
|
163
|
+
* Registered in `../registry`. Nothing outside this directory imports it by
|
|
164
|
+
* name; callers ask the registry for the tool they are holding.
|
|
165
|
+
*/
|
|
166
|
+
exports.copilotAgentEventSource = (0, define_source_1.definePushHookSource)({
|
|
167
|
+
cliToolId: tool_id_1.COPILOT_CLI_TOOL_ID,
|
|
168
|
+
// #1757 §5.2.4, re-confirmed here: an empty reply, an unreachable server and
|
|
169
|
+
// a late reply all land in copilot's ordinary approval flow. Abstaining costs
|
|
170
|
+
// a dialog and nothing else — true for Claude, codex and copilot, false for
|
|
171
|
+
// antigravity and opencode (C3).
|
|
172
|
+
noDecision: { kind: 'proceeds' },
|
|
173
|
+
capabilities: {
|
|
174
|
+
// Five of the seven. `pre_tool_use` is answered by the permission receiver
|
|
175
|
+
// rather than recorded, and `notification` has never been observed to fire.
|
|
176
|
+
// Both are explained at the top of this file; neither is an oversight.
|
|
177
|
+
supportedEvents: [
|
|
178
|
+
'stop',
|
|
179
|
+
'session_start',
|
|
180
|
+
'session_end',
|
|
181
|
+
'user_prompt_submit',
|
|
182
|
+
'post_tool_use',
|
|
183
|
+
],
|
|
184
|
+
// One file for the whole machine. See `./hook-settings`.
|
|
185
|
+
configScope: 'global-singleton',
|
|
186
|
+
decisionTimeoutSeconds: hook_settings_1.COPILOT_HOOK_TIMEOUT_SECONDS,
|
|
187
|
+
},
|
|
188
|
+
// The same CamelCase dialect as Claude and codex — measured against six
|
|
189
|
+
// captured payloads (#1757 §8.1), not assumed from the resemblance. Shared
|
|
190
|
+
// rather than copied: `hook-event-vocabulary` exists to be the dialect these
|
|
191
|
+
// three tools agree on, and a private copy here would be a second place for
|
|
192
|
+
// the same spelling to drift.
|
|
193
|
+
mappers: (0, event_mapper_1.fromNameTable)(hook_event_vocabulary_1.CAMEL_CASE_HOOK_EVENT_NAMES),
|
|
194
|
+
nativeEventNameFields: ['hook_event_name'],
|
|
195
|
+
conversationIdFields: hook_event_vocabulary_1.SESSION_ID_FIELDS,
|
|
196
|
+
// No captured copilot payload carries one, so this answers null in practice;
|
|
197
|
+
// it is wired anyway so that a future release which adds `tool_use_id` is
|
|
198
|
+
// correlated rather than ignored.
|
|
199
|
+
toolCallIdFields: hook_event_vocabulary_1.TOOL_CALL_ID_FIELDS,
|
|
200
|
+
// snake_case throughout, exactly as Claude spells it: `source` on
|
|
201
|
+
// `SessionStart`, `reason` on `SessionEnd`, `tool_name` on the tool events.
|
|
202
|
+
extractDetail: hook_event_vocabulary_1.extractSnakeCaseEventDetail,
|
|
203
|
+
parsePermissionRequest: parseCopilotPermissionRequest,
|
|
204
|
+
// Copilot has no `AskUserQuestion` tool and no captured payload resembling
|
|
205
|
+
// one. Null is "no structured data", which degrades to the behaviour of a
|
|
206
|
+
// machine without hooks rather than to a guess.
|
|
207
|
+
parseQuestion: () => null,
|
|
208
|
+
encodeVerdict: encodeCopilotVerdict,
|
|
209
|
+
prepareLaunch: (target, executablePath) => (0, hook_settings_1.buildCopilotLaunchCommand)(executablePath, target),
|
|
210
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Copilot CLI's {@link CLIToolType}, on its own so that anything needing
|
|
4
|
+
* only the id does not pull in the source (Issue #1761).
|
|
5
|
+
*
|
|
6
|
+
* The same split Claude has, and for the same reason: `hook-settings-generator`
|
|
7
|
+
* imports `CLAUDE_CLI_TOOL_ID` while `claude/source.ts` imports
|
|
8
|
+
* `hook-settings-generator`, so a single module would be a cycle.
|
|
9
|
+
*
|
|
10
|
+
* @module lib/hooks/sources/copilot/tool-id
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.COPILOT_CLI_TOOL_ID = void 0;
|
|
14
|
+
/** `copilot`, as `CLI_TOOL_IDS` spells it. */
|
|
15
|
+
exports.COPILOT_CLI_TOOL_ID = 'copilot';
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Factories that turn a tool's *differences* into an {@link AgentEventSource}
|
|
4
|
+
* (Issue #1759).
|
|
5
|
+
*
|
|
6
|
+
* The interface is wide because the six tools genuinely differ in eleven
|
|
7
|
+
* places. Making every implementer restate all eleven would guarantee that
|
|
8
|
+
* Phase 4-2…4-5 is four copies of Claude's file with four things changed —
|
|
9
|
+
* which is the failure mode Epic #1720 was opened about. So the parts that are
|
|
10
|
+
* the *same for every push transport* live here exactly once:
|
|
11
|
+
*
|
|
12
|
+
* - `subscribe` resolves immediately; the receiver route is already listening
|
|
13
|
+
* and there is nothing per-instance to hold open (C1).
|
|
14
|
+
* - `decide` writes into the slot the receiver opened, so the verdict leaves
|
|
15
|
+
* through the response body (C2).
|
|
16
|
+
* - `listPending` answers with the requests in flight, because a hook that was
|
|
17
|
+
* dropped is gone and there is nothing to re-read (C7).
|
|
18
|
+
* - `probeActivity` answers null: an event cannot be asked again (C7).
|
|
19
|
+
* - `liveness` answers `unknown`: a quiet hook and a dead agent look identical
|
|
20
|
+
* (C6).
|
|
21
|
+
*
|
|
22
|
+
* What a push tool then has to supply is the list in
|
|
23
|
+
* {@link PushHookSourceSpec} — spellings, field names, verdict shape, launch
|
|
24
|
+
* command. `docs/design/agent-event-source-interface.md` walks through adding
|
|
25
|
+
* one.
|
|
26
|
+
*
|
|
27
|
+
* {@link definePullEventSource} exists for the same reason in reverse: opencode
|
|
28
|
+
* has real subscription, liveness and re-sync behaviour and no launch config at
|
|
29
|
+
* all, so its defaults are the opposite ones.
|
|
30
|
+
*
|
|
31
|
+
* @module lib/hooks/sources/define-source
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.definePushHookSource = definePushHookSource;
|
|
35
|
+
exports.definePullEventSource = definePullEventSource;
|
|
36
|
+
const agent_event_types_1 = require("../../../lib/hooks/agent-event-types");
|
|
37
|
+
const event_mapper_1 = require("./event-mapper");
|
|
38
|
+
const pending_decisions_1 = require("./pending-decisions");
|
|
39
|
+
/** A subscription that was never really opened. Closing it is legal and inert. */
|
|
40
|
+
const INERT_SUBSCRIPTION = {
|
|
41
|
+
close: async () => { },
|
|
42
|
+
liveness: { state: 'unknown' },
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Build a push (hook) source from its differences.
|
|
46
|
+
*
|
|
47
|
+
* @returns A source whose transport is `push` and whose lifecycle methods are
|
|
48
|
+
* the inert-but-callable ones every hook tool shares
|
|
49
|
+
*/
|
|
50
|
+
function definePushHookSource(spec) {
|
|
51
|
+
const nativeEventNameFields = spec.nativeEventNameFields ?? ['hook_event_name'];
|
|
52
|
+
return {
|
|
53
|
+
cliToolId: spec.cliToolId,
|
|
54
|
+
transport: 'push',
|
|
55
|
+
noDecision: spec.noDecision,
|
|
56
|
+
capabilities: spec.capabilities,
|
|
57
|
+
normalizeEvent(raw) {
|
|
58
|
+
const receivedAt = raw.receivedAt ?? Date.now();
|
|
59
|
+
const nativeEventName = nativeEventNameFields.length > 0
|
|
60
|
+
? (0, event_mapper_1.readFirstStringField)(raw.payload, nativeEventNameFields)
|
|
61
|
+
: null;
|
|
62
|
+
// An event word the caller already resolved wins over the payload. This
|
|
63
|
+
// is the only channel antigravity has, and it is also how the relay
|
|
64
|
+
// script's `--event` reaches here for every other tool.
|
|
65
|
+
if (raw.event != null && (0, agent_event_types_1.isAgentEventType)(raw.event)) {
|
|
66
|
+
return (0, event_mapper_1.buildNormalizedEvent)({ event: raw.event }, raw.payload, receivedAt, {
|
|
67
|
+
detail: spec.extractDetail,
|
|
68
|
+
conversationId: spec.conversationIdFields,
|
|
69
|
+
toolCallId: spec.toolCallIdFields,
|
|
70
|
+
modelFields: spec.modelFields,
|
|
71
|
+
extractModel: spec.extractModel,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const mapping = (0, event_mapper_1.runEventMappers)(spec.mappers, nativeEventName, raw.payload);
|
|
75
|
+
if (!mapping) {
|
|
76
|
+
// C8. Not an error: a tool emits more events than CommandMate has words
|
|
77
|
+
// for, and it grows more of them between releases.
|
|
78
|
+
(0, event_mapper_1.recordUnknownEvent)(spec.cliToolId, nativeEventName);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return (0, event_mapper_1.buildNormalizedEvent)(mapping, raw.payload, receivedAt, {
|
|
82
|
+
detail: spec.extractDetail,
|
|
83
|
+
conversationId: spec.conversationIdFields,
|
|
84
|
+
toolCallId: spec.toolCallIdFields,
|
|
85
|
+
modelFields: spec.modelFields,
|
|
86
|
+
extractModel: spec.extractModel,
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
parsePermissionRequest: spec.parsePermissionRequest,
|
|
90
|
+
parseQuestion: spec.parseQuestion,
|
|
91
|
+
encodeVerdict(verdict) {
|
|
92
|
+
return { kind: 'responseBody', body: spec.encodeVerdict(verdict) };
|
|
93
|
+
},
|
|
94
|
+
prepareLaunch: spec.prepareLaunch,
|
|
95
|
+
async subscribe() {
|
|
96
|
+
// C1: push sources are subscribed to by existing, not by connecting. The
|
|
97
|
+
// method is here so a caller can treat both transports the same way.
|
|
98
|
+
return INERT_SUBSCRIPTION;
|
|
99
|
+
},
|
|
100
|
+
async decide(target, decision, verdict) {
|
|
101
|
+
// C2: the verdict leaves through the body of the request the agent is
|
|
102
|
+
// blocked on, which the receiver is holding open in a slot.
|
|
103
|
+
(0, pending_decisions_1.fillDecisionSlot)(target, decision.id, spec.encodeVerdict(verdict));
|
|
104
|
+
},
|
|
105
|
+
async listPending(target) {
|
|
106
|
+
return (0, pending_decisions_1.listOpenDecisions)(target);
|
|
107
|
+
},
|
|
108
|
+
async probeActivity() {
|
|
109
|
+
// C7: there is no endpoint to ask. Callers fall back to the scraper.
|
|
110
|
+
return null;
|
|
111
|
+
},
|
|
112
|
+
liveness() {
|
|
113
|
+
// C6: a hook that has not fired and an agent that has died look the same.
|
|
114
|
+
return { state: 'unknown' };
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Build a pull (subscription) source from its differences.
|
|
120
|
+
*
|
|
121
|
+
* The mirror image of {@link definePushHookSource}: the lifecycle is real and
|
|
122
|
+
* the verdict never rides on a response body, so {@link
|
|
123
|
+
* AgentEventSource.encodeVerdict} always answers `outOfBand` and callers are
|
|
124
|
+
* pushed towards `decide()`.
|
|
125
|
+
*/
|
|
126
|
+
function definePullEventSource(spec) {
|
|
127
|
+
const nativeEventNameFields = spec.nativeEventNameFields ?? ['type'];
|
|
128
|
+
return {
|
|
129
|
+
cliToolId: spec.cliToolId,
|
|
130
|
+
transport: 'pull',
|
|
131
|
+
noDecision: spec.noDecision,
|
|
132
|
+
capabilities: spec.capabilities,
|
|
133
|
+
normalizeEvent(raw) {
|
|
134
|
+
const receivedAt = raw.receivedAt ?? Date.now();
|
|
135
|
+
const nativeEventName = nativeEventNameFields.length > 0
|
|
136
|
+
? (0, event_mapper_1.readFirstStringField)(raw.payload, nativeEventNameFields)
|
|
137
|
+
: null;
|
|
138
|
+
if (raw.event != null && (0, agent_event_types_1.isAgentEventType)(raw.event)) {
|
|
139
|
+
return (0, event_mapper_1.buildNormalizedEvent)({ event: raw.event }, raw.payload, receivedAt, {
|
|
140
|
+
detail: spec.extractDetail,
|
|
141
|
+
conversationId: spec.conversationIdFields,
|
|
142
|
+
toolCallId: spec.toolCallIdFields,
|
|
143
|
+
modelFields: spec.modelFields,
|
|
144
|
+
extractModel: spec.extractModel,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const mapping = (0, event_mapper_1.runEventMappers)(spec.mappers, nativeEventName, raw.payload);
|
|
148
|
+
if (!mapping) {
|
|
149
|
+
(0, event_mapper_1.recordUnknownEvent)(spec.cliToolId, nativeEventName);
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
return (0, event_mapper_1.buildNormalizedEvent)(mapping, raw.payload, receivedAt, {
|
|
153
|
+
detail: spec.extractDetail,
|
|
154
|
+
conversationId: spec.conversationIdFields,
|
|
155
|
+
toolCallId: spec.toolCallIdFields,
|
|
156
|
+
modelFields: spec.modelFields,
|
|
157
|
+
extractModel: spec.extractModel,
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
parsePermissionRequest: spec.parsePermissionRequest,
|
|
161
|
+
parseQuestion: spec.parseQuestion,
|
|
162
|
+
encodeVerdict() {
|
|
163
|
+
// C2. There is no request to answer: the event arrived on a stream that
|
|
164
|
+
// has been open for hours and carries no reply channel.
|
|
165
|
+
return { kind: 'outOfBand' };
|
|
166
|
+
},
|
|
167
|
+
prepareLaunch: spec.prepareLaunch ?? ((_target, executablePath) => ({
|
|
168
|
+
command: executablePath,
|
|
169
|
+
settingsPath: null,
|
|
170
|
+
})),
|
|
171
|
+
subscribe: spec.subscribe,
|
|
172
|
+
decide: spec.decide,
|
|
173
|
+
listPending: spec.listPending,
|
|
174
|
+
probeActivity: spec.probeActivity,
|
|
175
|
+
liveness: spec.liveness,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Predicate-based mapping from a source's own events onto the seven words
|
|
4
|
+
* (Issue #1759, constraint C4).
|
|
5
|
+
*
|
|
6
|
+
* The Claude-only implementation this replaces was a
|
|
7
|
+
* `Record<string, AgentEventType>`: one native spelling in, one word out. That
|
|
8
|
+
* shape is not general, and #1758 §5.2.3 is the proof:
|
|
9
|
+
*
|
|
10
|
+
* - `message.part.updated` is `pre_tool_use` when `part.state.status` is
|
|
11
|
+
* `running` and `post_tool_use` when it is `completed` or `error` — **the
|
|
12
|
+
* same event name, two different words, chosen by a field.**
|
|
13
|
+
* - `user_prompt_submit` has no event of its own; it is `message.updated` with
|
|
14
|
+
* `info.role === "user"`.
|
|
15
|
+
* - `notification` is three unrelated events (`permission.asked`,
|
|
16
|
+
* `question.asked`, `session.error`) that differ only in `detail`.
|
|
17
|
+
*
|
|
18
|
+
* So a mapper is a function, and a source carries an ordered list of them:
|
|
19
|
+
* the first that returns a value wins, and a list that returns nothing means
|
|
20
|
+
* "this event is not one of the seven", which is a normal outcome, not an
|
|
21
|
+
* error (C8).
|
|
22
|
+
*
|
|
23
|
+
* @module lib/hooks/sources/event-mapper
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.MAX_UNKNOWN_EVENT_NAMES = void 0;
|
|
27
|
+
exports.whenNamed = whenNamed;
|
|
28
|
+
exports.fromNameTable = fromNameTable;
|
|
29
|
+
exports.runEventMappers = runEventMappers;
|
|
30
|
+
exports.recordUnknownEvent = recordUnknownEvent;
|
|
31
|
+
exports.getUnknownEventTally = getUnknownEventTally;
|
|
32
|
+
exports.resetUnknownEventTallies = resetUnknownEventTallies;
|
|
33
|
+
exports.readStringField = readStringField;
|
|
34
|
+
exports.readFirstStringField = readFirstStringField;
|
|
35
|
+
exports.boundDetail = boundDetail;
|
|
36
|
+
exports.boundModel = boundModel;
|
|
37
|
+
exports.isPlainObject = isPlainObject;
|
|
38
|
+
exports.readNestedString = readNestedString;
|
|
39
|
+
exports.buildNormalizedEvent = buildNormalizedEvent;
|
|
40
|
+
const agent_event_types_1 = require("../../../lib/hooks/agent-event-types");
|
|
41
|
+
/**
|
|
42
|
+
* The commonest rule: this native name is always that word.
|
|
43
|
+
*
|
|
44
|
+
* @param nativeName - e.g. `Stop`, `session.idle`
|
|
45
|
+
* @param event - The word it maps to
|
|
46
|
+
* @param detail - A fixed subtype, for sources that fold several events into
|
|
47
|
+
* `notification` and need `detail` to tell them apart
|
|
48
|
+
*/
|
|
49
|
+
function whenNamed(nativeName, event, detail) {
|
|
50
|
+
return (nativeEventName) => nativeEventName === nativeName ? { event, detail: detail ?? null } : null;
|
|
51
|
+
}
|
|
52
|
+
/** Every entry of a name table, as rules. Order within the table is preserved. */
|
|
53
|
+
function fromNameTable(table) {
|
|
54
|
+
return Object.entries(table).map(([nativeName, event]) => whenNamed(nativeName, event));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Run an ordered rule list.
|
|
58
|
+
*
|
|
59
|
+
* @returns The first mapping produced, or null when no rule matched
|
|
60
|
+
*/
|
|
61
|
+
function runEventMappers(mappers, nativeEventName, payload) {
|
|
62
|
+
for (const mapper of mappers) {
|
|
63
|
+
const mapped = mapper(nativeEventName, payload);
|
|
64
|
+
if (mapped)
|
|
65
|
+
return mapped;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
/** Cap on remembered distinct names, so an unbounded vocabulary cannot grow this. */
|
|
70
|
+
exports.MAX_UNKNOWN_EVENT_NAMES = 32;
|
|
71
|
+
const unknownEvents = (globalThis.__agentSourceUnknownEvents ??= new Map());
|
|
72
|
+
/**
|
|
73
|
+
* Record an event that mapped to nothing.
|
|
74
|
+
*
|
|
75
|
+
* Counted rather than thrown, because "I do not recognise this" is the steady
|
|
76
|
+
* state, not a fault: opencode publishes 89 event types against seven words,
|
|
77
|
+
* and `server.heartbeat` — which arrives every ten seconds — is not even in the
|
|
78
|
+
* server's own OpenAPI document (#1758 D3/D5). A receiver that threw would fail
|
|
79
|
+
* ten times a minute on a healthy connection.
|
|
80
|
+
*/
|
|
81
|
+
function recordUnknownEvent(cliToolId, nativeEventName) {
|
|
82
|
+
const tally = unknownEvents.get(cliToolId) ?? { count: 0, names: [] };
|
|
83
|
+
tally.count += 1;
|
|
84
|
+
const name = nativeEventName ?? '(unnamed)';
|
|
85
|
+
if (!tally.names.includes(name) && tally.names.length < exports.MAX_UNKNOWN_EVENT_NAMES) {
|
|
86
|
+
tally.names.push(name);
|
|
87
|
+
}
|
|
88
|
+
unknownEvents.set(cliToolId, tally);
|
|
89
|
+
}
|
|
90
|
+
/** @returns What this tool has sent that no rule claimed. */
|
|
91
|
+
function getUnknownEventTally(cliToolId) {
|
|
92
|
+
const tally = unknownEvents.get(cliToolId);
|
|
93
|
+
return { count: tally?.count ?? 0, names: [...(tally?.names ?? [])] };
|
|
94
|
+
}
|
|
95
|
+
/** Forget the tallies. For tests; nothing in production resets them. */
|
|
96
|
+
function resetUnknownEventTallies() {
|
|
97
|
+
unknownEvents.clear();
|
|
98
|
+
}
|
|
99
|
+
// =============================================================================
|
|
100
|
+
// Payload field helpers
|
|
101
|
+
// =============================================================================
|
|
102
|
+
/** A non-empty string field, or null. */
|
|
103
|
+
function readStringField(payload, key) {
|
|
104
|
+
const value = payload[key];
|
|
105
|
+
return typeof value === 'string' && value !== '' ? value : null;
|
|
106
|
+
}
|
|
107
|
+
/** The first of `keys` present as a non-empty string, or null. */
|
|
108
|
+
function readFirstStringField(payload, keys) {
|
|
109
|
+
for (const key of keys) {
|
|
110
|
+
const value = readStringField(payload, key);
|
|
111
|
+
if (value !== null)
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/** Trim a subtype to the length the store accepts. */
|
|
117
|
+
function boundDetail(value) {
|
|
118
|
+
if (value === null || value === '')
|
|
119
|
+
return null;
|
|
120
|
+
return value.slice(0, agent_event_types_1.MAX_EVENT_DETAIL_LENGTH);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Trim a model id to the length the store accepts (Issue #1783).
|
|
124
|
+
*
|
|
125
|
+
* The same bound as {@link boundDetail} and deliberately so: both are short
|
|
126
|
+
* enum-ish words the agent chose, both end up rendered, and giving the model its
|
|
127
|
+
* own number would only invite the two to drift. Named separately because the
|
|
128
|
+
* call sites read better and because a future measurement could move one
|
|
129
|
+
* without moving the other.
|
|
130
|
+
*/
|
|
131
|
+
function boundModel(value) {
|
|
132
|
+
if (value === null || value === '')
|
|
133
|
+
return null;
|
|
134
|
+
return value.slice(0, agent_event_types_1.MAX_EVENT_DETAIL_LENGTH);
|
|
135
|
+
}
|
|
136
|
+
/** Type guard for a JSON object (not an array, not null). */
|
|
137
|
+
function isPlainObject(value) {
|
|
138
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
139
|
+
}
|
|
140
|
+
/** Read a nested path, e.g. `['part', 'state', 'status']`. */
|
|
141
|
+
function readNestedString(payload, path) {
|
|
142
|
+
let current = payload;
|
|
143
|
+
for (const key of path) {
|
|
144
|
+
if (!isPlainObject(current))
|
|
145
|
+
return null;
|
|
146
|
+
current = current[key];
|
|
147
|
+
}
|
|
148
|
+
return typeof current === 'string' && current !== '' ? current : null;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Assemble a {@link NormalizedAgentEvent} from a mapping and the payload.
|
|
152
|
+
*
|
|
153
|
+
* @param mapping - What the rules decided
|
|
154
|
+
* @param payload - The event, verbatim
|
|
155
|
+
* @param receivedAt - Epoch ms
|
|
156
|
+
* @param fallbacks - Where to look for the fields the rule left unset
|
|
157
|
+
*/
|
|
158
|
+
function buildNormalizedEvent(mapping, payload, receivedAt, fallbacks = {}) {
|
|
159
|
+
const detail = mapping.detail !== undefined && mapping.detail !== null
|
|
160
|
+
? boundDetail(mapping.detail)
|
|
161
|
+
: boundDetail(fallbacks.detail?.(mapping.event, payload) ?? null);
|
|
162
|
+
return {
|
|
163
|
+
event: mapping.event,
|
|
164
|
+
detail,
|
|
165
|
+
conversationId: mapping.conversationId ??
|
|
166
|
+
(fallbacks.conversationId ? readFirstStringField(payload, fallbacks.conversationId) : null),
|
|
167
|
+
toolCallId: mapping.toolCallId ??
|
|
168
|
+
(fallbacks.toolCallId ? readFirstStringField(payload, fallbacks.toolCallId) : null),
|
|
169
|
+
// Issue #1783. Every source runs through here, so a tool that declares
|
|
170
|
+
// neither hook simply answers null — which is the honest answer for gemini
|
|
171
|
+
// and copilot, whose payloads never carry one.
|
|
172
|
+
model: boundModel(fallbacks.extractModel?.(payload) ??
|
|
173
|
+
(fallbacks.modelFields ? readFirstStringField(payload, fallbacks.modelFields) : null)),
|
|
174
|
+
raw: payload,
|
|
175
|
+
receivedAt,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Gemini CLI's hook vocabulary — its event spellings and its subtype values
|
|
4
|
+
* (Issue #1762).
|
|
5
|
+
*
|
|
6
|
+
* Kept here rather than added to `../hook-event-vocabulary`, which is
|
|
7
|
+
* deliberate and is spelled out in `docs/design/agent-event-source-interface.md`
|
|
8
|
+
* §5: that table is *the CamelCase dialect Claude, codex and copilot share*, and
|
|
9
|
+
* putting `BeforeTool` in it would make every one of those tools accept a
|
|
10
|
+
* spelling none of them ever sends. The fact that no gemini session has ever
|
|
11
|
+
* emitted `Stop` is information, and merging the tables destroys it.
|
|
12
|
+
*
|
|
13
|
+
* ## Where the table comes from
|
|
14
|
+
*
|
|
15
|
+
* The CLI's own migration command. `gemini hooks migrate --from-claude` exists
|
|
16
|
+
* to port a Claude `settings.json` across, so the map it carries is gemini's
|
|
17
|
+
* authoritative statement of "this Claude event is that gemini event" (#1757
|
|
18
|
+
* §5.3.1). Confirmed against the shipped bundle's `HookEventName` enum in
|
|
19
|
+
* v0.55.1, which lists eleven events:
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* BeforeTool AfterTool BeforeAgent Notification AfterAgent SessionStart
|
|
23
|
+
* SessionEnd PreCompress BeforeModel AfterModel BeforeToolSelection
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* Four of them have no word in `AGENT_EVENT_TYPES` and are deliberately absent
|
|
27
|
+
* below: `PreCompress`, `BeforeModel`, `AfterModel` and `BeforeToolSelection`
|
|
28
|
+
* are real gemini events (`PreCompress` and `BeforeModel` were captured live in
|
|
29
|
+
* #1757) that mean nothing CommandMate models. They map to null, get counted by
|
|
30
|
+
* `recordUnknownEvent`, and are not filed under something adjacent.
|
|
31
|
+
*
|
|
32
|
+
* @module lib/hooks/sources/gemini/event-vocabulary
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.GEMINI_NOTIFICATION_SUBTYPES = exports.GEMINI_HOOK_EVENT_NAMES = void 0;
|
|
36
|
+
exports.extractGeminiEventDetail = extractGeminiEventDetail;
|
|
37
|
+
const event_mapper_1 = require("../event-mapper");
|
|
38
|
+
const hook_event_vocabulary_1 = require("../hook-event-vocabulary");
|
|
39
|
+
/**
|
|
40
|
+
* `hook_event_name` values gemini sends, mapped onto the seven words.
|
|
41
|
+
*
|
|
42
|
+
* Four of the seven are spelled differently from Claude's — `BeforeAgent`,
|
|
43
|
+
* `AfterAgent`, `BeforeTool`, `AfterTool` — which is the whole reason a source
|
|
44
|
+
* carries its own mappers. `SubagentStop` has no gemini counterpart (the CLI
|
|
45
|
+
* has no subagents; `migrate` folds it onto `AfterAgent`), so it is absent.
|
|
46
|
+
*/
|
|
47
|
+
exports.GEMINI_HOOK_EVENT_NAMES = {
|
|
48
|
+
SessionStart: 'session_start',
|
|
49
|
+
SessionEnd: 'session_end',
|
|
50
|
+
BeforeAgent: 'user_prompt_submit',
|
|
51
|
+
AfterAgent: 'stop',
|
|
52
|
+
BeforeTool: 'pre_tool_use',
|
|
53
|
+
AfterTool: 'post_tool_use',
|
|
54
|
+
Notification: 'notification',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* gemini's only notification subtype, and the word CommandMate spells it with.
|
|
58
|
+
*
|
|
59
|
+
* The value is read out of the shipped bundle: `NotificationType` has exactly
|
|
60
|
+
* one member, `ToolPermission`, and `fireNotificationEvent` puts it on the wire
|
|
61
|
+
* verbatim as `notification_type` (v0.55.1). It means precisely what Claude's
|
|
62
|
+
* `permission_prompt` means — a tool is asking for approval and a dialog is on
|
|
63
|
+
* screen.
|
|
64
|
+
*
|
|
65
|
+
* **The translation is not cosmetic.** `status-mapping.ts` and
|
|
66
|
+
* `agent-event-state.ts` compare `detail` against the literal string
|
|
67
|
+
* `permission_prompt`; #1759 abstracted the event *names* but left the subtype
|
|
68
|
+
* vocabulary shared and Claude-shaped. Publishing `ToolPermission` would
|
|
69
|
+
* therefore be publishing a subtype nothing downstream recognises, and gemini
|
|
70
|
+
* would never report `waiting` — silently, with the event arriving and being
|
|
71
|
+
* recorded correctly the whole time. Translating here is the one place that can
|
|
72
|
+
* fix it without either editing a tool-agnostic consumer to know a tool's
|
|
73
|
+
* dialect, or teaching the shared table a gemini spelling.
|
|
74
|
+
*/
|
|
75
|
+
exports.GEMINI_NOTIFICATION_SUBTYPES = {
|
|
76
|
+
ToolPermission: 'permission_prompt',
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* The subtype for a gemini payload, in CommandMate's vocabulary.
|
|
80
|
+
*
|
|
81
|
+
* gemini's payload is Claude-shaped snake_case — verified field by field
|
|
82
|
+
* against the bundle's per-event input builders (`source` on `SessionStart`,
|
|
83
|
+
* `reason` on `SessionEnd`, `tool_name` on `BeforeTool`/`AfterTool`,
|
|
84
|
+
* `notification_type` on `Notification`) — so the shared extractor does the
|
|
85
|
+
* reading. Only `notification` needs translating afterwards.
|
|
86
|
+
*
|
|
87
|
+
* An unrecognised notification type is passed through rather than dropped: a
|
|
88
|
+
* type gemini adds later is worth recording under its own name, and nothing
|
|
89
|
+
* downstream branches on a value it does not know.
|
|
90
|
+
*
|
|
91
|
+
* @param event - The word this payload mapped to
|
|
92
|
+
* @param payload - The event, verbatim
|
|
93
|
+
* @returns The subtype, or null when the event has none
|
|
94
|
+
*/
|
|
95
|
+
function extractGeminiEventDetail(event, payload) {
|
|
96
|
+
if (event !== 'notification')
|
|
97
|
+
return (0, hook_event_vocabulary_1.extractSnakeCaseEventDetail)(event, payload);
|
|
98
|
+
const native = (0, event_mapper_1.readStringField)(payload, 'notification_type');
|
|
99
|
+
if (native === null)
|
|
100
|
+
return null;
|
|
101
|
+
return (0, event_mapper_1.boundDetail)(exports.GEMINI_NOTIFICATION_SUBTYPES[native] ?? native);
|
|
102
|
+
}
|