commandmate 0.45.1 → 0.46.1
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 +319 -315
- package/.next/app-path-routes-manifest.json +15 -15
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +4 -4
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_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_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/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.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 +9 -9
- 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.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +9 -9
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_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]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +3 -3
- 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 +3 -3
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.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.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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_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/login/page.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +1 -1
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page.js +1 -1
- package/.next/server/app/offline/page.js.nft.json +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +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_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 +1 -1
- 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 +1 -1
- 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 +12 -9
- 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 +15 -15
- package/.next/server/chunks/1341.js +1 -1
- package/.next/server/chunks/1501.js +2 -2
- package/.next/server/chunks/1559.js +1 -1
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2283.js +15 -13
- package/.next/server/chunks/2404.js +4 -4
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2560.js +1 -1
- package/.next/server/chunks/2908.js +1 -1
- package/.next/server/chunks/2984.js +25 -0
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4072.js +15 -0
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4718.js +3 -3
- package/.next/server/chunks/4837.js +3 -3
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5292.js +2 -2
- package/.next/server/chunks/5845.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6345.js +1 -0
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6722.js +1 -0
- package/.next/server/chunks/8098.js +1 -1
- package/.next/server/chunks/8356.js +1 -1
- package/.next/server/chunks/8581.js +25 -29
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +4 -4
- package/.next/server/chunks/8918.js +5 -5
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9627.js +2 -1
- package/.next/server/chunks/9731.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/_error.js +2 -2
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-86890b00eeecf391.js → 2407-9703c569370b8a9d.js} +1 -1
- package/.next/static/chunks/{2619-a305ad4810f1393a.js → 2619-04bc32f026a0d946.js} +1 -1
- package/.next/static/chunks/2717.1583400c272dc1d9.js +1 -0
- package/.next/static/chunks/2770-db80aedf6384d594.js +1 -0
- package/.next/static/chunks/2863-6a07ec82fb52f4dd.js +1 -0
- package/.next/static/chunks/3201-c01f1feed69020e6.js +1 -0
- package/.next/static/chunks/4768-ad6f82f034f21eae.js +1 -0
- package/.next/static/chunks/5371-0dc947683e46e78c.js +1 -0
- package/.next/static/chunks/5794-4eee51ff1e878aa6.js +1 -0
- package/.next/static/chunks/5927-54315d21f323e204.js +1 -0
- package/.next/static/chunks/602-25e45a2422d2a3ea.js +1 -0
- package/.next/static/chunks/6606-02ddc006686a6b7d.js +1 -0
- package/.next/static/chunks/6654-f3534f35f16644bc.js +1 -0
- package/.next/static/chunks/7730-011e137be64403ae.js +1 -0
- package/.next/static/chunks/8165-263172c17ae8e8c3.js +1 -0
- package/.next/static/chunks/{8407-9a72e6f07c5d5458.js → 8407-155f84e5ba05f1d5.js} +1 -1
- package/.next/static/chunks/8606-cf6bdbff44a764cf.js +1 -0
- package/.next/static/chunks/934-a37509667baa86ee.js +1 -0
- package/.next/static/chunks/9465-e5a351baa941f31b.js +1 -0
- package/.next/static/chunks/app/layout-3e357690446cd2da.js +1 -0
- package/.next/static/chunks/app/repositories/page-71f5a5ac29b0370d.js +1 -0
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +1 -0
- package/.next/static/chunks/app/sessions/page-9859ed61e93e6890.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-52ba58712faf3378.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-effbf0796881dd5a.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-c601f3b3ece6557e.js → page-373ea37b16d930c7.js} +1 -1
- package/.next/static/chunks/{webpack-ee3ccbe378c4aa06.js → webpack-468b7b33030234b3.js} +1 -1
- package/.next/static/css/743f79ff19ab91e9.css +1 -0
- package/.next/trace +13 -13
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +6 -1
- package/dist/cli/types/api-responses.d.ts +8 -6
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +13 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +3 -0
- package/dist/server/locales/en/worktree.json +46 -16
- package/dist/server/locales/ja/worktree.json +46 -16
- package/dist/server/src/config/activity-bar-config.js +56 -9
- package/dist/server/src/lib/assistant-response-saver.js +13 -0
- package/dist/server/src/lib/auto-yes-poller.js +252 -54
- package/dist/server/src/lib/conversation-logger.js +14 -2
- package/dist/server/src/lib/db/chat-db.js +2 -1
- package/dist/server/src/lib/history/user-turn-recorder.js +14 -0
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +28 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/codex/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/command-code/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/transcript-history.js +34 -0
- package/dist/server/src/lib/log-manager.js +7 -2
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +22 -3
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +234 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +3 -0
- package/dist/server/src/lib/polling/pending-scraped-response.js +119 -3
- package/dist/server/src/lib/polling/poller-owner.js +110 -0
- package/dist/server/src/lib/polling/prompt-dedup-state.js +26 -7
- package/dist/server/src/lib/polling/prompt-dedup.js +50 -22
- package/dist/server/src/lib/polling/response-checker.js +212 -36
- package/dist/server/src/lib/polling/response-dedup.js +112 -20
- package/dist/server/src/lib/polling/response-poller-core.js +178 -38
- package/dist/server/src/lib/polling/structured-history-gate.js +20 -1
- package/dist/server/src/lib/prompt-answer-sender.js +59 -12
- package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -0
- package/dist/server/src/lib/session/chat-turn-progress.js +57 -6
- package/dist/server/src/lib/session/current-output-builder.js +19 -0
- package/dist/server/src/lib/session/next-action-helper.js +2 -15
- package/dist/server/src/lib/session/worktree-session-reconcile.js +83 -10
- package/dist/server/src/lib/timer-manager.js +7 -0
- package/dist/server/src/lib/tmux/tmux.js +24 -2
- package/dist/server/src/lib/verification/env-clean-gate.js +41 -0
- package/dist/server/src/lib/verification/gate-runner.js +17 -11
- package/dist/server/src/lib/verification/scope-gate.js +169 -3
- package/dist/server/src/types/sidebar.js +1 -0
- package/docs/en/architecture.md +26 -14
- package/docs/en/user-guide/webapp-guide.md +31 -18
- package/package.json +1 -1
- package/release-notes/0.46.0.json +110 -0
- package/release-notes/0.46.1.json +40 -0
- package/.next/server/chunks/1674.js +0 -15
- package/.next/server/chunks/5625.js +0 -25
- package/.next/server/chunks/6927.js +0 -1
- package/.next/server/chunks/9355.js +0 -1
- package/.next/static/chunks/1642-0f1bf8fb8161e10a.js +0 -1
- package/.next/static/chunks/2770-827a64760bab8a3a.js +0 -1
- package/.next/static/chunks/3922.0bc2e4e168d2b522.js +0 -1
- package/.next/static/chunks/4727-4c69d1aa4118cc09.js +0 -1
- package/.next/static/chunks/4768-fc0aa1d0891cac08.js +0 -1
- package/.next/static/chunks/5371-af1c2b68e983da61.js +0 -1
- package/.next/static/chunks/5521-c358c31f60e5e689.js +0 -1
- package/.next/static/chunks/6192-a67df090838b9aad.js +0 -1
- package/.next/static/chunks/6322-f1b30ed0ee43518f.js +0 -1
- package/.next/static/chunks/6654-ac431270fac1a283.js +0 -1
- package/.next/static/chunks/8165-3525fb42f1b4976e.js +0 -1
- package/.next/static/chunks/8318-01e7d1e5ad0a15a3.js +0 -1
- package/.next/static/chunks/8606-79c36d4c204bbd38.js +0 -1
- package/.next/static/chunks/9619-6c17a271f7f98fbb.js +0 -1
- package/.next/static/chunks/998-2eb5883186abd0bd.js +0 -1
- package/.next/static/chunks/app/layout-eaa6365f8f942e88.js +0 -1
- package/.next/static/chunks/app/repositories/page-6f7511f4ac8449e2.js +0 -1
- package/.next/static/chunks/app/review/page-95f749caae382f46.js +0 -1
- package/.next/static/chunks/app/sessions/page-ebfed2c80e916fb8.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-e4b14031f946c007.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-3372b78fde232b1f.js +0 -1
- package/.next/static/css/6faeb04a0b6819d4.css +0 -1
- /package/.next/static/{vYIpFRCU_Mt0wtG8F_3-6 → QxDf7lm-JJkWoj-TyWiSB}/_buildManifest.js +0 -0
- /package/.next/static/{vYIpFRCU_Mt0wtG8F_3-6 → QxDf7lm-JJkWoj-TyWiSB}/_ssgManifest.js +0 -0
|
@@ -30,11 +30,16 @@
|
|
|
30
30
|
* @module lib/verification/scope-gate
|
|
31
31
|
*/
|
|
32
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
exports.SCOPE_SKIP_NOT_REQUIRED = exports.SCOPE_SKIP_NO_CONTRACT = exports.ScopeMatcher = exports.CONTRACT_DIR_PREFIX = exports.SCOPE_EXEMPT_CONTRACT_PATH = exports.SCOPE_EXEMPT_ALWAYS_ALLOWED = exports.SCOPE_PATTERN_ARROW = exports.ALWAYS_ALLOWED_PREFIX = exports.SCOPE_ALLOW_GUIDANCE = exports.MAX_REPORTED_VIOLATIONS = void 0;
|
|
33
|
+
exports.SCOPE_SKIP_NOT_REQUIRED = exports.SCOPE_SKIP_NO_CONTRACT = exports.ScopeMatcher = exports.ORCHESTRATOR_FOLD_TRAILER_VALUE = exports.ORCHESTRATOR_FOLD_TRAILER_KEY = exports.ORCHESTRATOR_FILES = exports.CONTRACT_DIR_PREFIX = exports.SCOPE_EXEMPT_CONTRACT_PATH = exports.SCOPE_EXEMPT_ALWAYS_ALLOWED = exports.SCOPE_PATTERN_ARROW = exports.ALWAYS_ALLOWED_PREFIX = exports.SCOPE_ALLOW_GUIDANCE = exports.MAX_REPORTED_VIOLATIONS = void 0;
|
|
34
|
+
exports.isOrchestratorOnlyCommit = isOrchestratorOnlyCommit;
|
|
35
|
+
exports.parseBranchCommits = parseBranchCommits;
|
|
36
|
+
exports.isFoldCommit = isFoldCommit;
|
|
37
|
+
exports.orchestratorOnlyPaths = orchestratorOnlyPaths;
|
|
34
38
|
exports.isContractPath = isContractPath;
|
|
35
39
|
exports.parsePorcelainEntries = parsePorcelainEntries;
|
|
36
40
|
exports.parsePorcelainStatusEntries = parsePorcelainStatusEntries;
|
|
37
41
|
exports.isSkillInstalledUntrackedEntry = isSkillInstalledUntrackedEntry;
|
|
42
|
+
exports.collectBranchCommitChanges = collectBranchCommitChanges;
|
|
38
43
|
exports.collectChangedPaths = collectChangedPaths;
|
|
39
44
|
exports.scopeSkipDetachedContract = scopeSkipDetachedContract;
|
|
40
45
|
exports.evaluateScope = evaluateScope;
|
|
@@ -117,6 +122,88 @@ exports.SCOPE_EXEMPT_CONTRACT_PATH = '(exempt: contract path)';
|
|
|
117
122
|
* explicit `deny` can still catch an agent weakening its own gates.
|
|
118
123
|
*/
|
|
119
124
|
exports.CONTRACT_DIR_PREFIX = '.commandmate/tasks/';
|
|
125
|
+
/**
|
|
126
|
+
* Files the orchestrator commits on a PR branch after the worker's checks
|
|
127
|
+
* (orchestrate 6-4: the module-reference fold) (#3588).
|
|
128
|
+
*
|
|
129
|
+
* Copy of `ORCHESTRATOR_FILES` in `scripts/orchestrate/pr-common.mjs`, where
|
|
130
|
+
* `merge-pr.mjs` uses the same file rule to look past a fold commit to the
|
|
131
|
+
* worker's HEAD. A test imports the .mjs and compares the two arrays, so the
|
|
132
|
+
* merge side and this gate cannot drift apart.
|
|
133
|
+
*/
|
|
134
|
+
exports.ORCHESTRATOR_FILES = ['docs/module-reference.md'];
|
|
135
|
+
/**
|
|
136
|
+
* The trailer that marks a fold commit, read the way `git interpret-trailers`
|
|
137
|
+
* reads it — from the message's trailer block only, so the same words in the
|
|
138
|
+
* middle of a body do not count (#3588).
|
|
139
|
+
*
|
|
140
|
+
* The file set alone cannot tell the orchestrator's fold from a worker that
|
|
141
|
+
* committed module-reference on its own, so this gate also requires the
|
|
142
|
+
* trailer. `workHeads` in pr-common.mjs deliberately does not: the merge side
|
|
143
|
+
* only decides which HEAD's records to read, and stays permissive.
|
|
144
|
+
*/
|
|
145
|
+
exports.ORCHESTRATOR_FOLD_TRAILER_KEY = 'Orchestrator-Fold';
|
|
146
|
+
exports.ORCHESTRATOR_FOLD_TRAILER_VALUE = 'module-reference';
|
|
147
|
+
/**
|
|
148
|
+
* Whether a commit's file list is the orchestrator's: at least one file, and
|
|
149
|
+
* every file in {@link ORCHESTRATOR_FILES} — the file rule of `workHeads` in
|
|
150
|
+
* `scripts/orchestrate/pr-common.mjs` (#3588).
|
|
151
|
+
*/
|
|
152
|
+
function isOrchestratorOnlyCommit(files) {
|
|
153
|
+
return files.length > 0 && files.every((file) => exports.ORCHESTRATOR_FILES.includes(file));
|
|
154
|
+
}
|
|
155
|
+
const FIELD_SEPARATOR = '\x1f';
|
|
156
|
+
const TRAILER_SEPARATOR = '\x1e';
|
|
157
|
+
/**
|
|
158
|
+
* Per commit: sha, parents, fold trailer values. With `-z` each record ends in
|
|
159
|
+
* NUL, which no commit message can contain; the sha and parent fields are hex,
|
|
160
|
+
* so only the trailer field is free text, and it is last.
|
|
161
|
+
*/
|
|
162
|
+
const BRANCH_COMMITS_FORMAT = `--format=%H%x1f%P%x1f%(trailers:key=${exports.ORCHESTRATOR_FOLD_TRAILER_KEY},` +
|
|
163
|
+
'valueonly,unfold,separator=%x1e)';
|
|
164
|
+
/** Parse `git log -z` output in {@link BRANCH_COMMITS_FORMAT} (#3588). */
|
|
165
|
+
function parseBranchCommits(output) {
|
|
166
|
+
const commits = [];
|
|
167
|
+
for (const record of output.split('\0')) {
|
|
168
|
+
const first = record.indexOf(FIELD_SEPARATOR);
|
|
169
|
+
const second = record.indexOf(FIELD_SEPARATOR, first + 1);
|
|
170
|
+
if (first <= 0 || second < 0)
|
|
171
|
+
continue;
|
|
172
|
+
const trailers = record.slice(second + 1);
|
|
173
|
+
commits.push({
|
|
174
|
+
sha: record.slice(0, first),
|
|
175
|
+
parents: record.slice(first + 1, second).split(' ').filter(Boolean),
|
|
176
|
+
foldTrailers: trailers === '' ? [] : trailers.split(TRAILER_SEPARATOR),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return commits;
|
|
180
|
+
}
|
|
181
|
+
/** Whether a non-merge commit is a fold (#3588): the trailer and the file rule both hold. */
|
|
182
|
+
function isFoldCommit(commit, files) {
|
|
183
|
+
return (commit.parents.length === 1 &&
|
|
184
|
+
commit.foldTrailers.includes(exports.ORCHESTRATOR_FOLD_TRAILER_VALUE) &&
|
|
185
|
+
isOrchestratorOnlyCommit(files));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Paths that only fold commits touched on the branch (#3588).
|
|
189
|
+
*
|
|
190
|
+
* A path any other non-merge commit also touched is not returned: a worker
|
|
191
|
+
* that committed `docs/module-reference.md` itself — alone or with other
|
|
192
|
+
* files — is still judged on it. Merges are not passed in
|
|
193
|
+
* ({@link collectBranchCommitChanges} skips them): a merge's own edit inside
|
|
194
|
+
* {@link ORCHESTRATOR_FILES} is the approved integration of a refresh and
|
|
195
|
+
* leaves a fold-only path excluded, while its edits elsewhere stay in the
|
|
196
|
+
* branch diff and are judged as the worker's.
|
|
197
|
+
*/
|
|
198
|
+
function orchestratorOnlyPaths(commits) {
|
|
199
|
+
const byOrchestrator = new Set();
|
|
200
|
+
const byWorker = new Set();
|
|
201
|
+
for (const commit of commits) {
|
|
202
|
+
const target = commit.fold ? byOrchestrator : byWorker;
|
|
203
|
+
commit.files.forEach((file) => target.add(file));
|
|
204
|
+
}
|
|
205
|
+
return new Set([...byOrchestrator].filter((path) => !byWorker.has(path)));
|
|
206
|
+
}
|
|
120
207
|
/** Whether git reported a path that {@link CONTRACT_DIR_PREFIX} excludes. */
|
|
121
208
|
function isContractPath(path) {
|
|
122
209
|
return path.startsWith(exports.CONTRACT_DIR_PREFIX);
|
|
@@ -352,6 +439,61 @@ function parsePorcelainStatusEntries(output) {
|
|
|
352
439
|
function isSkillInstalledUntrackedEntry(entry, owned) {
|
|
353
440
|
return entry.status === '??' && entry.paths.every((path) => owned.has(path));
|
|
354
441
|
}
|
|
442
|
+
/**
|
|
443
|
+
* The non-merge commits of `<base>..HEAD` of a worktree, each judged by
|
|
444
|
+
* {@link isFoldCommit} (#3588). The scope gate drops what only folds touched
|
|
445
|
+
* ({@link orchestratorOnlyPaths}); the work-evidence gate does not count a
|
|
446
|
+
* fold as the worker's commit (#3633). Empty when no commit carries the fold
|
|
447
|
+
* trailer: none can be a fold, so the per-commit calls are skipped.
|
|
448
|
+
*
|
|
449
|
+
* File lists come from one `git diff-tree -z` per commit rather than from one
|
|
450
|
+
* `git log --name-only -z` stream: in that stream a commit header and a path
|
|
451
|
+
* are both NUL-terminated fields, and a path may start with a newline or a
|
|
452
|
+
* control character, so no parse of it can tell them apart. diff-tree prints
|
|
453
|
+
* paths and nothing else.
|
|
454
|
+
*
|
|
455
|
+
* A merge's own edits are split by path. Inside {@link ORCHESTRATOR_FILES}
|
|
456
|
+
* they are the approved integration — orchestrate lets the orchestrator
|
|
457
|
+
* resolve a refresh conflict in shared files such as module-reference by
|
|
458
|
+
* machine — so a fold-only path stays excluded. Every other path a merge edits
|
|
459
|
+
* is never a candidate (a fold changes only ORCHESTRATOR_FILES), so it stays in
|
|
460
|
+
* the branch diff and scope judges it as the worker's. Merges are therefore
|
|
461
|
+
* skipped here without asking `git diff-tree --cc`.
|
|
462
|
+
*/
|
|
463
|
+
async function collectBranchCommitChanges(worktreePath, base) {
|
|
464
|
+
const log = await runGit(['log', '-z', BRANCH_COMMITS_FORMAT, `${base}..HEAD`], worktreePath);
|
|
465
|
+
if (log.code !== 0) {
|
|
466
|
+
return {
|
|
467
|
+
error: `'git log ${base}..HEAD' failed.` + (log.stderr.trim() ? `\n${log.stderr.trim()}` : ''),
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
const commits = parseBranchCommits(log.stdout);
|
|
471
|
+
// Nothing to exclude without a trailer; skip the per-commit calls.
|
|
472
|
+
if (!commits.some((commit) => commit.foldTrailers.length > 0))
|
|
473
|
+
return { changes: [] };
|
|
474
|
+
const changes = [];
|
|
475
|
+
for (const commit of commits) {
|
|
476
|
+
if (commit.parents.length !== 1)
|
|
477
|
+
continue;
|
|
478
|
+
const tree = await runGit(['diff-tree', '--no-commit-id', '--name-only', '-z', '--no-renames', '-r', commit.sha], worktreePath);
|
|
479
|
+
if (tree.code !== 0) {
|
|
480
|
+
return {
|
|
481
|
+
error: `'git diff-tree ${commit.sha}' failed.` +
|
|
482
|
+
(tree.stderr.trim() ? `\n${tree.stderr.trim()}` : ''),
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
const files = splitNul(tree.stdout);
|
|
486
|
+
changes.push({ sha: commit.sha, files, fold: isFoldCommit(commit, files) });
|
|
487
|
+
}
|
|
488
|
+
return { changes };
|
|
489
|
+
}
|
|
490
|
+
/** {@link orchestratorOnlyPaths} for `<base>..HEAD` of a worktree (#3588). */
|
|
491
|
+
async function collectOrchestratorOnlyPaths(worktreePath, base) {
|
|
492
|
+
const result = await collectBranchCommitChanges(worktreePath, base);
|
|
493
|
+
if ('error' in result)
|
|
494
|
+
return result;
|
|
495
|
+
return { paths: orchestratorOnlyPaths(result.changes) };
|
|
496
|
+
}
|
|
355
497
|
/**
|
|
356
498
|
* Every path this worktree changed relative to `baseRef`.
|
|
357
499
|
*
|
|
@@ -379,6 +521,18 @@ async function collectChangedPaths(worktreePath, baseRef) {
|
|
|
379
521
|
(diff.stderr.trim() ? `\n${diff.stderr.trim()}` : ''),
|
|
380
522
|
};
|
|
381
523
|
}
|
|
524
|
+
// The orchestrator's fold commit (6-4) can sit under a re-instructed worker's
|
|
525
|
+
// commits; what only it touched is not the worker's change (#3588).
|
|
526
|
+
const orchestratorOnly = await collectOrchestratorOnlyPaths(worktreePath, base);
|
|
527
|
+
if ('error' in orchestratorOnly)
|
|
528
|
+
return orchestratorOnly;
|
|
529
|
+
const orchestratorExcluded = new Set();
|
|
530
|
+
const committed = splitNul(diff.stdout).filter((path) => {
|
|
531
|
+
if (!orchestratorOnly.paths.has(path))
|
|
532
|
+
return true;
|
|
533
|
+
orchestratorExcluded.add(path);
|
|
534
|
+
return false;
|
|
535
|
+
});
|
|
382
536
|
// -uall: without it a new directory collapses to a single `?? dir/` entry, and
|
|
383
537
|
// the gate would judge a directory name instead of the files inside it.
|
|
384
538
|
const status = await runGit(['status', '--porcelain', '-z', '--untracked-files=all'], worktreePath);
|
|
@@ -405,12 +559,14 @@ async function collectChangedPaths(worktreePath, baseRef) {
|
|
|
405
559
|
return true;
|
|
406
560
|
});
|
|
407
561
|
// Both sides are filtered, not just the working tree: an orchestrator may
|
|
408
|
-
// also have committed the contract as a setup commit (#1580).
|
|
409
|
-
|
|
562
|
+
// also have committed the contract as a setup commit (#1580). The working
|
|
563
|
+
// tree keeps an uncommitted module-reference edit: no fold commit made it.
|
|
564
|
+
const paths = new Set([...committed, ...workingTree.flatMap((entry) => entry.paths)].filter((path) => !isContractPath(path)));
|
|
410
565
|
return {
|
|
411
566
|
paths: [...paths].sort(),
|
|
412
567
|
mergeBase: base,
|
|
413
568
|
agentStateExcluded: [...agentStateExcluded].sort(),
|
|
569
|
+
orchestratorExcluded: [...orchestratorExcluded].filter((path) => !paths.has(path)).sort(),
|
|
414
570
|
};
|
|
415
571
|
}
|
|
416
572
|
// =============================================================================
|
|
@@ -470,6 +626,15 @@ function formatAgentStateExcluded(excluded) {
|
|
|
470
626
|
...(remainder > 0 ? [` ... (+${remainder} more)`] : []),
|
|
471
627
|
];
|
|
472
628
|
}
|
|
629
|
+
/** The `excluded:` section naming orchestrator-only committed paths (#3588). */
|
|
630
|
+
function formatOrchestratorExcluded(excluded) {
|
|
631
|
+
if (excluded.length === 0)
|
|
632
|
+
return [];
|
|
633
|
+
return [
|
|
634
|
+
'excluded (changed only by orchestrator commits, not counted as change):',
|
|
635
|
+
...excluded.map((path) => ` ~ ${path}`),
|
|
636
|
+
];
|
|
637
|
+
}
|
|
473
638
|
/**
|
|
474
639
|
* Reasons the gate has nothing to judge, phrased for `log_tail`.
|
|
475
640
|
*
|
|
@@ -546,6 +711,7 @@ async function evaluateScope(worktreePath, scope, requireScopeClean, baseRef, co
|
|
|
546
711
|
`deny: ${formatPatterns(scope.deny)}`,
|
|
547
712
|
...formatAdmitted(admitted),
|
|
548
713
|
...formatAgentStateExcluded(changed.agentStateExcluded),
|
|
714
|
+
...formatOrchestratorExcluded(changed.orchestratorExcluded),
|
|
549
715
|
].join('\n');
|
|
550
716
|
if (violations.length === 0) {
|
|
551
717
|
// An empty change set passes: work-evidence is the gate that judges "nothing
|
|
@@ -337,6 +337,7 @@ function toBranchItem(worktree) {
|
|
|
337
337
|
exitedInstanceIds,
|
|
338
338
|
unclassifiedInstanceIds,
|
|
339
339
|
worktreePath: worktree.path,
|
|
340
|
+
worktreeStatus: worktree.status ?? null,
|
|
340
341
|
waitingKind,
|
|
341
342
|
awaitingInstruction,
|
|
342
343
|
// `promptType` mirrors what `/api/worktrees` does with the same data
|
package/docs/en/architecture.md
CHANGED
|
@@ -621,41 +621,53 @@ For details, see [Status Indicator](./features/sidebar-status-indicator.md).
|
|
|
621
621
|
|
|
622
622
|
## 11. UI Layout Architecture (PC, Issue #727 / #730 / #747)
|
|
623
623
|
|
|
624
|
-
> **Note**: The legacy desktop left-pane model (history / files / memo, MobileTabBar) introduced in #600 has been replaced by the
|
|
624
|
+
> **Note**: The legacy desktop left-pane model (history / files / memo, MobileTabBar) introduced in #600 has been replaced by the activity model described in this chapter (since Issue #3591: the header tools + ActivityPane). Reorganizing the older descriptions is out of scope here.
|
|
625
625
|
|
|
626
626
|
This chapter covers the **responsibility boundaries, state ownership, and data flow** of the top-level PC UI layout (why the structure exists and who owns which state). Visual layout, interactions (keyboard / Tooltip), and the component catalog are owned by [./UI_UX_GUIDE.md](./UI_UX_GUIDE.md) as the single source of truth and are not duplicated here.
|
|
627
627
|
|
|
628
628
|
### 11.1 Component Responsibilities and State Ownership
|
|
629
629
|
|
|
630
|
-
|
|
630
|
+
> **Note (Issue #3589 / #3591)**: The 48px full-height ActivityBar is gone from PC. Activities are opened from the tools at the right of the header (`HeaderToolBar`) and the Verification chip on the second row, and the ActivityPane opens from the right, laid over the body (pinning it puts it beside the body). The items below describe that layout.
|
|
631
|
+
|
|
632
|
+
- **HeaderToolBar** (`src/components/worktree/HeaderToolBar.tsx`, Issue #3591): A controlled component that **does not own** the activity-selection state. It receives `active` / `onToggle` as props and draws `HEADER_TOOLS` from `@/config/activity-bar-config` (`ACTIVITIES` without `verification`) as icons at the right of the PC header (`DesktopHeader`). On a narrow header the trailing tools fold into a "…" list (`useDesktopHeaderFit` decides how many).
|
|
633
|
+
- **VerificationStatusChip** (`VerificationStatusChip.tsx`, Issue #1816 / #2064 / #3590): The PC entry point of the `verification` activity (`CHIP_ACTIVITY_ID`). It sits in the second-row action bar and opens/closes the Verification pane when pressed. It is always drawn, reporting "unverified" on a branch with no execution contract (#2064).
|
|
634
|
+
- **ActivityBar** (`src/components/worktree/ActivityBar.tsx`): The former 48px vertical Activity Bar. Since Issue #3591 it is not mounted on any screen (the sidebar open/close button moved to `SidebarPanelToggle` in #3512).
|
|
631
635
|
- **ActivityPane** (`ActivityPane.tsx`): A stateless, table-driven dispatcher. It picks exactly one node — `activities[active]` — from the parent-built `ActivityContentMap` (`Partial<Record<ActivityId, ReactNode>>`) and renders it through an `ErrorBoundary`. Because a single `active` key resolves to a single node, **rendering multiple activities simultaneously is structurally impossible**.
|
|
632
636
|
- **TerminalContainer** (`TerminalContainer.tsx`, Issue #730): Wraps a `terminal` slot (always rendered) and an optional `history` slot. Since Issue #744, the top-level History column is no longer rendered on PC; History was moved inside each terminal split (see §12). The `history` prop and the `useHistoryPaneState` wiring are kept for backward compatibility with the #730 single-column layout.
|
|
633
|
-
- **WorktreeDesktopLayout** (`WorktreeDesktopLayout.tsx`, Issue #730):
|
|
634
|
-
- **PaneResizer** (`PaneResizer.tsx`): A generic resizer that owns only transient drag state. It **only reports a pixel delta via `onResize(delta)`**; the parent decides the final pane width. It is reused for both the Activity
|
|
637
|
+
- **WorktreeDesktopLayout** (`WorktreeDesktopLayout.tsx`, Issue #730 / #3589 / #3591): Lays out the Right pane (the body) and the ActivityPane. The ActivityPane is on the **right** (#3591). Unpinned — the default — it is drawn over the Right pane, which keeps its width (#3589). Only when pinned (`activityPanePinned`) does it take a column beside the body, with a PaneResizer on the boundary. The pane's frame (title, pin, ×, Esc / outside-press dismissal) is `PaneOverlayFrame` in the same file. When `activityPane === null`, neither the pane nor the PaneResizer is drawn.
|
|
638
|
+
- **PaneResizer** (`PaneResizer.tsx`): A generic resizer that owns only transient drag state. It **only reports a pixel delta via `onResize(delta)`**; the parent decides the final pane width. It is reused for both the Right↔Activity boundary in WorktreeDesktopLayout (when pinned) and the History↔Terminal boundary in TerminalContainer.
|
|
635
639
|
|
|
636
640
|
### 11.2 State Owners (Custom Hooks)
|
|
637
641
|
|
|
638
|
-
- **useActivityBarState** (`src/hooks/useActivityBarState.ts`): The single source of truth for the `active` state. It persists
|
|
639
|
-
- **
|
|
642
|
+
- **useActivityBarState** (`src/hooks/useActivityBarState.ts`): The single source of truth for the `active` state. It persists **per worktree** under `commandmate.worktree.activeActivity-<worktreeId>` (`getActivityBarStorageKey`, Issue #858). **The closed state (null) is persisted too**, as `__closed__` (`ACTIVITY_CLOSED_SENTINEL`), so a pane closed on one worktree stays closed after a visit to another and back. An unvisited worktree or an invalid value gives `INITIAL_ACTIVITY` (`null` = closed since Issue #3589; it was `'files'` before). The initial render is deterministically `INITIAL_ACTIVITY` and the localStorage read happens in a `useEffect` after mount and on every `worktreeId` change (to avoid hydration mismatch).
|
|
643
|
+
- **usePanePinnedState** (`src/hooks/useActivityPaneOverlay.ts`, Issue #3589): Whether the ActivityPane is pinned. Stored once under `commandmate.worktree.activityPanePinned` (`ACTIVITY_PANE_PINNED_STORAGE_KEY`) and shared across worktrees. `usePaneOverlayDismiss` in the same file closes an overlaid pane on Esc / an outside press.
|
|
644
|
+
- **SidebarContext** (`src/contexts/SidebarContext.tsx`): Owns the sidebar `isOpen` via `useReducer`. The sidebar's own open/close button (`SidebarPanelToggle`, at the top of the `SidebarRail` icon rail while the sidebar is closed) reads this context, forming a separate data-flow path from the props-based activity selection.
|
|
640
645
|
|
|
641
|
-
The
|
|
646
|
+
The controller (`src/hooks/useWorktreeDetailController.ts`) calls `useActivityBarState`, and the PC orchestrator (`WorktreeDetailDesktop.tsx`) builds the `ActivityContentMap` and wires HeaderToolBar (through `DesktopHeader`) / VerificationStatusChip / ActivityPane / WorktreeDesktopLayout together.
|
|
642
647
|
|
|
643
648
|
### 11.3 Data-Flow Diagram
|
|
644
649
|
|
|
645
650
|
```mermaid
|
|
646
651
|
graph TD
|
|
647
|
-
|
|
648
|
-
|
|
652
|
+
Ctrl["useWorktreeDetailController<br/>(calls useActivityBarState)"]
|
|
653
|
+
Parent["WorktreeDetailDesktop<br/>(PC orchestrator)"]
|
|
654
|
+
ActState["useActivityBarState<br/>(owns active / per-worktree localStorage)"]
|
|
655
|
+
PinState["usePanePinnedState<br/>(owns the pin / localStorage)"]
|
|
649
656
|
SideCtx["SidebarContext<br/>(owns isOpen)"]
|
|
650
|
-
|
|
657
|
+
SideToggle["SidebarPanelToggle<br/>(sidebar / SidebarRail)"]
|
|
658
|
+
Tools["HeaderToolBar<br/>(header right, stateless)"]
|
|
659
|
+
Chip["VerificationStatusChip<br/>(second row)"]
|
|
651
660
|
Pane["ActivityPane<br/>(table-driven dispatch)"]
|
|
652
|
-
Layout["WorktreeDesktopLayout<br/>(
|
|
661
|
+
Layout["WorktreeDesktopLayout<br/>(overlay / beside the body when pinned)"]
|
|
653
662
|
Term["TerminalContainer<br/>(terminal + optional history)"]
|
|
654
663
|
|
|
655
|
-
ActState -->|active|
|
|
664
|
+
ActState -->|active| Ctrl
|
|
665
|
+
Ctrl -->|"active / onToggle"| Parent
|
|
656
666
|
Parent -->|onToggle| ActState
|
|
657
|
-
Parent -->|active / onToggle|
|
|
658
|
-
|
|
667
|
+
Parent -->|active / onToggle| Tools
|
|
668
|
+
Parent -->|"open/close verification"| Chip
|
|
669
|
+
PinState -->|activityPanePinned| Parent
|
|
670
|
+
SideToggle --> SideCtx
|
|
659
671
|
Parent -->|"activityPane (nullable)"| Layout
|
|
660
672
|
Parent -->|"ActivityContentMap"| Pane
|
|
661
673
|
Pane --> Layout
|
|
@@ -302,7 +302,7 @@ the same button; that strip is **gone**, and the terminal takes the width back
|
|
|
302
302
|
The arrow in the History column's header points the way it **folds** (left).
|
|
303
303
|
Bring it back with [History] in the action bar.
|
|
304
304
|
|
|
305
|
-
Note that the
|
|
305
|
+
Note that the **"File Tree"** among the tools at the right of the header
|
|
306
306
|
is for browsing the worktree, and is a different thing from the action bar's
|
|
307
307
|
**"Open Files"** (the panel showing files you opened).
|
|
308
308
|
|
|
@@ -370,15 +370,25 @@ Useful for recording work details and TODOs.
|
|
|
370
370
|
|
|
371
371
|
## Agent Settings
|
|
372
372
|
|
|
373
|
-
|
|
373
|
+
Each worktree has its own list of CLI agent sessions (instances).
|
|
374
|
+
The same agent can appear more than once under different names (e.g. "Claude" and "Claude review").
|
|
374
375
|
|
|
375
|
-
###
|
|
376
|
+
### Adding One (PC)
|
|
376
377
|
|
|
377
378
|
1. Select a worktree
|
|
378
|
-
2. Click the **
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
379
|
+
2. Click the **[+]** at the right end of the header's session field ([current session][N more ▾])
|
|
380
|
+
("Add session…" in the [N more ▾] list opens the same form)
|
|
381
|
+
3. Choose the agent (installed ones), a name (optional) and **where to open it** (a new split / replace the current split / add only), then click **[Add]**
|
|
382
|
+
4. Adding does not start a session: it starts when you send the first message from that split
|
|
383
|
+
|
|
384
|
+
Rename, reorder and delete in the **"Agent"** tool at the right of the header.
|
|
385
|
+
|
|
386
|
+
### Adding and Managing (Mobile)
|
|
387
|
+
|
|
388
|
+
1. Tap the **"CMATE"** tab
|
|
389
|
+
2. Tap the **"Agent"** sub-tab
|
|
390
|
+
3. Add with **"Add instance"** below the list; rename, reorder and delete on each row
|
|
391
|
+
4. Settings are saved automatically
|
|
382
392
|
|
|
383
393
|
### Available Agents
|
|
384
394
|
|
|
@@ -394,11 +404,11 @@ Select which CLI agents to use for each worktree.
|
|
|
394
404
|
| **Antigravity** | Antigravity CLI (`agy`) |
|
|
395
405
|
| **Command Code** | Command Code CLI (`commandcode`, Issue #2250) |
|
|
396
406
|
|
|
397
|
-
-
|
|
407
|
+
- A branch holds **1 to 10** of them (the last one cannot be deleted)
|
|
398
408
|
- **Auto Yes behaves differently per agent.** Command Code / Gemini / Vibe-Local only have
|
|
399
409
|
the screen-based route (the dialog is drawn once, then answered automatically). See
|
|
400
410
|
[Approval Routes Differ by Agent](#approval-routes-differ-by-agent)
|
|
401
|
-
-
|
|
411
|
+
- These sessions appear in the session field of the header ([current session][N more ▾])
|
|
402
412
|
|
|
403
413
|
### Ollama Model Selection (Vibe-Local)
|
|
404
414
|
|
|
@@ -427,7 +437,7 @@ surface** switches — the input surface stays exactly the same in either mode
|
|
|
427
437
|
|
|
428
438
|
| Screen | Action |
|
|
429
439
|
|--------|--------|
|
|
430
|
-
| **Desktop** | Click the **Terminal / Chat toggle** in each split's header |
|
|
440
|
+
| **Desktop** | Click the **Terminal / Chat toggle** in each split's header (with a single split it is in the second-row action bar) |
|
|
431
441
|
| **Mobile** | Tap the **round toggle** floating over the top-right corner of the output area |
|
|
432
442
|
| **Keyboard** | **`Cmd/Ctrl + Shift + M`** (press `?` for the shortcut list) |
|
|
433
443
|
|
|
@@ -559,8 +569,9 @@ put it back with the same gesture** (Issue #2261).
|
|
|
559
569
|
|
|
560
570
|
| Action | Where |
|
|
561
571
|
|--------|-------|
|
|
562
|
-
| **Maximize / restore** | The button
|
|
563
|
-
| **Maximize / restore** |
|
|
572
|
+
| **Maximize / restore** | The button in the second-row action bar (⤢ / ⤡; acts on the focused split) |
|
|
573
|
+
| **Maximize / restore** | Each split's "…" menu |
|
|
574
|
+
| **Maximize / restore** | With two or more splits, the button at the right end of each split's header (⤢ / ⤡) |
|
|
564
575
|
| **Maximize / restore** | `Cmd/Ctrl + Shift + Enter` |
|
|
565
576
|
|
|
566
577
|
`Cmd/Ctrl + Shift + Enter` follows the same rule as `Cmd/Ctrl + Shift + M` (the output
|
|
@@ -590,21 +601,23 @@ The **execution contract** handed to an agent with `commandmate send --contract`
|
|
|
590
601
|
**gate verdicts** `commandmate verify` produced from it, are readable on screen — no CLI
|
|
591
602
|
stdout required (Issue #1816).
|
|
592
603
|
|
|
593
|
-
### The
|
|
604
|
+
### The Verification chip (the second-row status chip)
|
|
594
605
|
|
|
595
|
-
|
|
596
|
-
the task title, its `TaskStatus`, and the `RESULT` of the most recent verification run.
|
|
606
|
+
The second row of the worktree screen (the action bar) carries the Verification chip (a status
|
|
607
|
+
chip) with the task title, its `TaskStatus`, and the `RESULT` of the most recent verification run.
|
|
597
608
|
|
|
598
|
-
- A worktree with no task row shows
|
|
609
|
+
- A worktree with no task row **still shows the chip**, with "Verification" in place of the title
|
|
610
|
+
and "Not verified" in place of the RESULT (Issue #2064)
|
|
611
|
+
- The chip's ⓘ button shows the **reason** behind the verdict, on a touch device too
|
|
599
612
|
- Hovering the chip (or reading it with a screen reader) gives the **reason** behind the
|
|
600
613
|
verdict, down to the ids of the gates that did not pass
|
|
601
|
-
- Clicking the chip opens the **Verification** pane
|
|
614
|
+
- Clicking the chip opens the **Verification** pane (pressing it again while the pane is open closes it)
|
|
602
615
|
|
|
603
616
|
### The Verification pane
|
|
604
617
|
|
|
605
618
|
| Screen | How to open |
|
|
606
619
|
|---------|-------------|
|
|
607
|
-
| Desktop |
|
|
620
|
+
| Desktop | Press the Verification chip (the chip with the shield icon) on the second row. The pane opens from the right, over the body |
|
|
608
621
|
| Mobile | **Tools** tab in the bottom bar → **Verification** sub-tab |
|
|
609
622
|
|
|
610
623
|
The pane has three sections, top to bottom.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "commandmate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"description": "No long blocks of time? Run an AI team from your phone. Git worktree sessions, task contracts and verification gates for Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity and Command Code.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.46.0",
|
|
3
|
+
"date": "2026-10-14",
|
|
4
|
+
"highlight": {
|
|
5
|
+
"ja": "worktree 画面を作り直し、見出しを 1 行にして道具を右上のアイコンにまとめました。どの画面からでも依頼を送れる「New task」も使えます。",
|
|
6
|
+
"en": "The worktree screen has been redesigned with a one-line header and tool icons at the top right. You can also send a task from any screen with New task."
|
|
7
|
+
},
|
|
8
|
+
"added": [
|
|
9
|
+
{
|
|
10
|
+
"ja": "どの画面からでもエージェントへ依頼を送れる「New task」ダイアログを追加しました(⌘⇧O / Ctrl+Shift+O)。",
|
|
11
|
+
"en": "Added a New task dialog that sends a request to an agent from any screen (Cmd+Shift+O / Ctrl+Shift+O)."
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"improved": [
|
|
15
|
+
{
|
|
16
|
+
"ja": "worktree の見出しを 1 行にし、縦のアイコンの列をなくして道具を見出しの右へ移しました。",
|
|
17
|
+
"en": "The worktree header is now a single line, and the tools moved from the vertical icon column to the right of the header."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"ja": "worktree 画面はパネルを閉じた状態で始まり、Files などのパネルは本文の上に重ねて開くようになりました。",
|
|
21
|
+
"en": "The worktree screen now opens with panels closed, and panels such as Files open over the content."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"ja": "見出しのセッションを「今のセッション+ほか N」にし、セッションが増えても欄の幅が変わらないようにしました。",
|
|
25
|
+
"en": "The header now shows the current session plus \"N more\", so its width no longer changes with the number of sessions."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"ja": "分割が 1 つのときは、分割の見出しを出さずに中身を 2 段目の行にまとめるようにしました。",
|
|
29
|
+
"en": "With a single split, its header is gone and its controls sit in the second row."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"ja": "進み具合(Status)を、サイドバーのブランチの「…」から変えられるようにしました。",
|
|
33
|
+
"en": "You can now change a branch's status from its \"...\" menu in the sidebar."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"ja": "サイドバーの一覧を 1 行の行と角丸の札に作り直し、狭い幅でもブランチ名が読めるようにしました。",
|
|
37
|
+
"en": "The sidebar list was rebuilt as single-line rounded rows, so branch names stay readable at narrow widths."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"ja": "サイドバーの上の絞り込み・表示・並べ替えを 1 行にまとめました。",
|
|
41
|
+
"en": "The filter, view and sort controls above the sidebar list now fit on one row."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"ja": "サイドバーを閉じても、アイコンの列から各画面へ移動できるようになりました。",
|
|
45
|
+
"en": "With the sidebar closed, you can still move between screens from the icon column."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"ja": "スマホの引き出しを PC のサイドバーと同じ並びにし、上端に閉じるボタンを置きました。",
|
|
49
|
+
"en": "The phone drawer now matches the desktop sidebar and has a close button at the top."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"ja": "設定の入口を 1 つの設定メニューにまとめました。",
|
|
53
|
+
"en": "Settings are now reached from a single settings menu."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"ja": "分割が 1 つのときは最大化できないようにそろえました。",
|
|
57
|
+
"en": "Maximize is no longer offered when there is only one split."
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"fixed": [
|
|
61
|
+
{
|
|
62
|
+
"ja": "メニューや吹き出しを Esc で閉じたとき、下に重ねたパネルまで一緒に閉じる問題を直しました。",
|
|
63
|
+
"en": "Fixed Escape closing the panel underneath when it was meant to close only a menu or popup."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"ja": "チャットと履歴の検索で、返答が 2 件以上あると最後の返答しか強調されない問題を直しました。",
|
|
67
|
+
"en": "Fixed chat and history search highlighting only the last reply when there are several replies."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"ja": "チャットの検索の強調が、思考の節や特殊な文字の近くでずれる・消える問題を直しました。",
|
|
71
|
+
"en": "Fixed chat search highlights shifting or disappearing near reasoning sections and special characters."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"ja": "⌘K のコマンドパレットが、ほかの画面やメニューの上に重なって開く問題を直しました。",
|
|
75
|
+
"en": "Fixed the Cmd+K command palette opening on top of other dialogs and menus."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"ja": "分割の見出しや 2 段目で、エージェント名が 1 文字まで縮む問題を直しました。",
|
|
79
|
+
"en": "Fixed agent names shrinking to a single character in split headers and the second row."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"ja": "ダークモードで Git のパネル全体が濃い青になる問題を直しました。",
|
|
83
|
+
"en": "Fixed the Git panel turning dark blue in dark mode."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"ja": "セッション一覧の吹き出しが、次の行の名前を隠す問題を直しました。",
|
|
87
|
+
"en": "Fixed tooltips in the session list hiding the name on the next row."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"ja": "進み具合の保存に失敗したとき、知らせて元の値に戻すようにしました。",
|
|
91
|
+
"en": "A failed status change is now reported and the previous value is restored."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"ja": "worktree 画面を直接開いたり戻ったりしたとき、サイドバーの選択がずれる問題を直しました。",
|
|
95
|
+
"en": "Fixed the sidebar selection not matching the open worktree after a direct visit, reload or back/forward."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"ja": "日本語の設定でも、一部の説明や見出しが英語のまま表示される問題を直しました。",
|
|
99
|
+
"en": "Fixed some descriptions and headings staying in English with the Japanese setting."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"ja": "New task が全画面の表示の上に重なる問題と、Auto-Yes の残り時間の表示の遅れを直しました。",
|
|
103
|
+
"en": "Fixed New task appearing over full-screen views and the Auto-Yes time left updating late."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"ja": "worktree の ID が変わったあと、返答が二重に出たり消えたりすることがある問題を直しました。",
|
|
107
|
+
"en": "Fixed replies that could be duplicated or lost after a worktree's ID changed."
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.46.1",
|
|
3
|
+
"date": "2026-10-16",
|
|
4
|
+
"highlight": {
|
|
5
|
+
"ja": "Auto-Yes を切った直後や切り替えの最中に、古い回答が送られたり同じ確認に二重に答えたりする問題を直しました。",
|
|
6
|
+
"en": "Fixed Auto-Yes sending a stale answer, or answering the same prompt twice, right after it was turned off or switched."
|
|
7
|
+
},
|
|
8
|
+
"added": [],
|
|
9
|
+
"improved": [],
|
|
10
|
+
"fixed": [
|
|
11
|
+
{
|
|
12
|
+
"ja": "Auto-Yes を切った直後に、待ちの間に始まっていた回答が 1 回送られてしまう問題を直しました。",
|
|
13
|
+
"en": "Fixed an answer that had already started being sent once right after Auto-Yes was turned off."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"ja": "途中まで入力した回答が残っているとき、Auto-Yes が同じ確認にもう一度入力しないようにしました。",
|
|
17
|
+
"en": "Auto-Yes no longer types into the same prompt again when an earlier answer was left half-entered."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"ja": "worktree の名前が変わったときも、途中まで入力した回答の記録が引き継がれるようにしました。",
|
|
21
|
+
"en": "The record of a half-entered answer now carries over when a worktree is renamed."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"ja": "止めたセッションの古い処理が、返答の保存や完了の通知を遅れて出す問題を直しました。",
|
|
25
|
+
"en": "Fixed a stopped session's old work saving replies or sending completion notices late."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"ja": "予約送信をキャンセルしたのに送信されてしまうことがある問題を直しました。",
|
|
29
|
+
"en": "Fixed a scheduled message sometimes being sent even though it had been cancelled."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"ja": "Esc キーが、最大化したファイルや検索欄、メニューなどを前面のものから 1 つずつ閉じるようにしました。",
|
|
33
|
+
"en": "The Esc key now closes the front-most layer first, one at a time, such as a maximized file, a search box or a menu."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"ja": "チャットの検索で、記号を表す書き方(< など)に一致したときも強調されるようにしました。",
|
|
37
|
+
"en": "Chat search now highlights matches on character references such as <."
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|