gsd-pi 2.76.0-dev.fe143342a → 2.77.0-dev.538325aea
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/README.md +17 -35
- package/dist/claude-cli-check.js +32 -3
- package/dist/cli.js +13 -21
- package/dist/extension-registry.js +1 -1
- package/dist/headless-ui.d.ts +1 -1
- package/dist/headless.js +2 -4
- package/dist/loader.js +0 -1
- package/dist/onboarding.js +50 -5
- package/dist/provider-migrations.d.ts +2 -2
- package/dist/provider-migrations.js +2 -1
- package/dist/remote-questions-config.js +1 -1
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
- package/dist/resources/extensions/aws-auth/index.js +2 -1
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +6 -9
- package/dist/resources/extensions/bg-shell/process-manager.js +2 -1
- package/dist/resources/extensions/browser-tools/index.js +0 -1
- package/dist/resources/extensions/claude-code-cli/index.js +1 -1
- package/dist/resources/extensions/claude-code-cli/partial-builder.js +106 -17
- package/dist/resources/extensions/claude-code-cli/readiness.js +4 -3
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +28 -23
- package/dist/resources/extensions/gsd/auto/loop.js +9 -0
- package/dist/resources/extensions/gsd/auto/phases.js +54 -4
- package/dist/resources/extensions/gsd/auto/run-unit.js +38 -2
- package/dist/resources/extensions/gsd/auto/session.js +18 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +56 -17
- package/dist/resources/extensions/gsd/auto-model-selection.js +1 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +59 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +14 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +69 -1
- package/dist/resources/extensions/gsd/auto-start.js +35 -38
- package/dist/resources/extensions/gsd/auto-worktree.js +51 -53
- package/dist/resources/extensions/gsd/auto.js +55 -16
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +17 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +17 -6
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +34 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
- package/dist/resources/extensions/gsd/dispatch-guard.js +44 -3
- package/dist/resources/extensions/gsd/gitignore.js +1 -0
- package/dist/resources/extensions/gsd/gsd-db.js +90 -30
- package/dist/resources/extensions/gsd/guided-flow.js +191 -2
- package/dist/resources/extensions/gsd/health-widget.js +4 -1
- package/dist/resources/extensions/gsd/key-manager.js +22 -0
- package/dist/resources/extensions/gsd/model-router.js +36 -3
- package/dist/resources/extensions/gsd/pre-execution-checks.js +31 -6
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
- package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/dist/resources/extensions/gsd/prompts/system.md +1 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +12 -4
- package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
- package/dist/resources/extensions/gsd/token-counter.js +22 -5
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
- package/dist/resources/extensions/gsd/uok/plan-v2.js +20 -3
- package/dist/resources/extensions/gsd/worktree-resolver.js +50 -10
- package/dist/resources/extensions/mcp-client/index.js +1 -1
- package/dist/resources/extensions/ollama/index.js +1 -2
- package/dist/resources/extensions/ollama/ollama-chat-provider.js +5 -15
- package/dist/resources/extensions/remote-questions/config.js +12 -1
- package/dist/resources/extensions/universal-config/index.js +1 -1
- package/dist/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/dist/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/security-overrides.d.ts +4 -1
- package/dist/security-overrides.js +16 -3
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-1832629448831fdc.js} +1 -1
- package/dist/web-mode.js +1 -1
- package/dist/welcome-screen.js +19 -15
- package/dist/wizard.js +4 -5
- package/package.json +25 -7
- package/packages/daemon/package.json +2 -2
- package/packages/gsd-agent-core/dist/agent-session.d.ts +716 -0
- package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/agent-session.js +2595 -0
- package/packages/gsd-agent-core/dist/agent-session.js.map +1 -0
- package/packages/gsd-agent-core/dist/artifact-manager.d.ts +52 -0
- package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/artifact-manager.js +118 -0
- package/packages/gsd-agent-core/dist/artifact-manager.js.map +1 -0
- package/packages/gsd-agent-core/dist/bash-executor.d.ts +57 -0
- package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/bash-executor.js +282 -0
- package/packages/gsd-agent-core/dist/bash-executor.js.map +1 -0
- package/packages/gsd-agent-core/dist/blob-store.d.ts +39 -0
- package/packages/gsd-agent-core/dist/blob-store.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/blob-store.js +151 -0
- package/packages/gsd-agent-core/dist/blob-store.js.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +90 -0
- package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +207 -0
- package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +137 -0
- package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/compaction.js +621 -0
- package/packages/gsd-agent-core/dist/compaction/compaction.js.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/index.d.ts +7 -0
- package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/index.js +7 -0
- package/packages/gsd-agent-core/dist/compaction/index.js.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/utils.d.ts +78 -0
- package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/compaction/utils.js +263 -0
- package/packages/gsd-agent-core/dist/compaction/utils.js.map +1 -0
- package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +90 -0
- package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/compaction-orchestrator.js +338 -0
- package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +1 -0
- package/packages/gsd-agent-core/dist/contextual-tips.d.ts +43 -0
- package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/contextual-tips.js +208 -0
- package/packages/gsd-agent-core/dist/contextual-tips.js.map +1 -0
- package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +18 -0
- package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +250 -0
- package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +1 -0
- package/packages/gsd-agent-core/dist/export-html/index.d.ts +37 -0
- package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/export-html/index.js +257 -0
- package/packages/gsd-agent-core/dist/export-html/index.js.map +1 -0
- package/packages/gsd-agent-core/dist/export-html/template.css +971 -0
- package/packages/gsd-agent-core/dist/export-html/template.html +54 -0
- package/packages/gsd-agent-core/dist/export-html/template.js +1583 -0
- package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +38 -0
- package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +70 -0
- package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +1 -0
- package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +1213 -0
- package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +6 -0
- package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +75 -0
- package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/fallback-resolver.js +118 -0
- package/packages/gsd-agent-core/dist/fallback-resolver.js.map +1 -0
- package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +44 -0
- package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/image-overflow-recovery.js +99 -0
- package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +1 -0
- package/packages/gsd-agent-core/dist/index.d.ts +14 -0
- package/packages/gsd-agent-core/dist/index.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/index.js +19 -0
- package/packages/gsd-agent-core/dist/index.js.map +1 -0
- package/packages/gsd-agent-core/dist/keybindings.d.ts +47 -0
- package/packages/gsd-agent-core/dist/keybindings.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/keybindings.js +156 -0
- package/packages/gsd-agent-core/dist/keybindings.js.map +1 -0
- package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +42 -0
- package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/lifecycle-hooks.js +204 -0
- package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +1 -0
- package/packages/gsd-agent-core/dist/retry-handler.d.ts +128 -0
- package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/retry-handler.js +518 -0
- package/packages/gsd-agent-core/dist/retry-handler.js.map +1 -0
- package/packages/gsd-agent-core/dist/sdk.d.ts +159 -0
- package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/sdk.js +375 -0
- package/packages/gsd-agent-core/dist/sdk.js.map +1 -0
- package/packages/gsd-agent-core/dist/system-prompt.d.ts +28 -0
- package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/system-prompt.js +201 -0
- package/packages/gsd-agent-core/dist/system-prompt.js.map +1 -0
- package/packages/gsd-agent-core/package.json +25 -0
- package/packages/gsd-agent-core/scripts/copy-assets.cjs +43 -0
- package/packages/gsd-agent-core/src/agent-session.test.ts +169 -0
- package/packages/gsd-agent-core/src/agent-session.ts +3358 -0
- package/packages/gsd-agent-core/src/artifact-manager.ts +126 -0
- package/packages/gsd-agent-core/src/bash-executor.ts +352 -0
- package/packages/gsd-agent-core/src/blob-store.ts +154 -0
- package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +317 -0
- package/packages/gsd-agent-core/src/compaction/compaction.ts +855 -0
- package/packages/gsd-agent-core/src/compaction/index.ts +7 -0
- package/packages/gsd-agent-core/src/compaction/utils.ts +312 -0
- package/packages/gsd-agent-core/src/compaction-orchestrator.ts +449 -0
- package/packages/gsd-agent-core/src/contextual-tips.ts +232 -0
- package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +259 -0
- package/packages/gsd-agent-core/src/export-html/index.ts +345 -0
- package/packages/gsd-agent-core/src/export-html/template.css +971 -0
- package/packages/gsd-agent-core/src/export-html/template.html +54 -0
- package/packages/gsd-agent-core/src/export-html/template.js +1583 -0
- package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +114 -0
- package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +1213 -0
- package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +6 -0
- package/packages/gsd-agent-core/src/fallback-resolver.ts +193 -0
- package/packages/gsd-agent-core/src/image-overflow-recovery.ts +120 -0
- package/packages/gsd-agent-core/src/index.ts +68 -0
- package/packages/gsd-agent-core/src/keybindings.ts +220 -0
- package/packages/gsd-agent-core/src/lifecycle-hooks.ts +284 -0
- package/packages/gsd-agent-core/src/retry-handler.ts +620 -0
- package/packages/gsd-agent-core/src/sdk.ts +550 -0
- package/packages/gsd-agent-core/src/system-prompt.ts +270 -0
- package/packages/gsd-agent-core/tsconfig.json +28 -0
- package/packages/gsd-agent-core/tsconfig.tsbuildinfo +1 -0
- package/packages/gsd-agent-modes/dist/cli/args.d.ts +58 -0
- package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/args.js +324 -0
- package/packages/gsd-agent-modes/dist/cli/args.js.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +13 -0
- package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/config-selector.js +32 -0
- package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +15 -0
- package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/file-processor.js +86 -0
- package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +21 -0
- package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/list-models.js +114 -0
- package/packages/gsd-agent-modes/dist/cli/list-models.js.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +10 -0
- package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/cli/session-picker.js +37 -0
- package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +1 -0
- package/packages/gsd-agent-modes/dist/index.d.ts +7 -0
- package/packages/gsd-agent-modes/dist/index.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/index.js +7 -0
- package/packages/gsd-agent-modes/dist/index.js.map +1 -0
- package/packages/gsd-agent-modes/dist/main.d.ts +8 -0
- package/packages/gsd-agent-modes/dist/main.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/main.js +491 -0
- package/packages/gsd-agent-modes/dist/main.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +34 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +330 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +29 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +141 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +36 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +157 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +48 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +43 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +11 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +47 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +44 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +474 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +15 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +32 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +22 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +70 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +75 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +140 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +12 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +133 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +33 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +82 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +111 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +24 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +63 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +33 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +118 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +32 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +230 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +34 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +36 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +48 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +72 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +63 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +213 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +86 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +536 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +93 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +30 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +169 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +267 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +21 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +97 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +810 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +71 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +320 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +34 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +46 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +45 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +46 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +15 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +40 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +111 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +984 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +44 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +61 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +109 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +1035 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +112 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +12 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +38 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +27 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +793 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +62 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +22 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +118 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +7 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +68 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +50 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +358 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +3409 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +77 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +529 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +6 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +15 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +28 -0
- package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/print-mode.js +84 -0
- package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +17 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +49 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +37 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +84 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +243 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +464 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +25 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +750 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +511 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +8 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +19 -0
- package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +45 -0
- package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +1 -0
- package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +22 -0
- package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +21 -0
- package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +1 -0
- package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/pi-tui-compat.js +3 -0
- package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +1 -0
- package/packages/gsd-agent-modes/dist/theme.d.ts +15 -0
- package/packages/gsd-agent-modes/dist/theme.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/theme.js +23 -0
- package/packages/gsd-agent-modes/dist/theme.js.map +1 -0
- package/packages/gsd-agent-modes/dist/utils/theme.d.ts +16 -0
- package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/utils/theme.js +11 -0
- package/packages/gsd-agent-modes/dist/utils/theme.js.map +1 -0
- package/packages/gsd-agent-modes/package.json +23 -0
- package/packages/gsd-agent-modes/src/cli/args.ts +350 -0
- package/packages/gsd-agent-modes/src/cli/config-selector.ts +54 -0
- package/packages/gsd-agent-modes/src/cli/file-processor.ts +107 -0
- package/packages/gsd-agent-modes/src/cli/list-models.ts +141 -0
- package/packages/gsd-agent-modes/src/cli/session-picker.ts +59 -0
- package/packages/gsd-agent-modes/src/index.ts +6 -0
- package/packages/gsd-agent-modes/src/main.ts +614 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +24 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +18 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +38 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +171 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +382 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +178 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +212 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +66 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +59 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +67 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +60 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +597 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +41 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +88 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +100 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +165 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +147 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +73 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +89 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +151 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +100 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +156 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +257 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +35 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +84 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +257 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +656 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +122 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +210 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +342 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +194 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +1011 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +452 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +45 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +56 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +63 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +64 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +48 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +1157 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +81 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +1208 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +145 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +44 -0
- package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +50 -0
- package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +1430 -0
- package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +71 -0
- package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +957 -0
- package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +63 -0
- package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +183 -0
- package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +140 -0
- package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +77 -0
- package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +44 -0
- package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +49 -0
- package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +4195 -0
- package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +670 -0
- package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +14 -0
- package/packages/gsd-agent-modes/src/modes/print-mode.ts +106 -0
- package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +58 -0
- package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +109 -0
- package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +572 -0
- package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +902 -0
- package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +971 -0
- package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +335 -0
- package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +53 -0
- package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +42 -0
- package/packages/gsd-agent-modes/src/pi-tui-compat.ts +4 -0
- package/packages/gsd-agent-modes/src/theme.ts +25 -0
- package/packages/gsd-agent-modes/src/utils/theme.ts +24 -0
- package/packages/gsd-agent-modes/tsconfig.json +28 -0
- package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +1 -0
- package/packages/gsd-agent-types/dist/index.d.ts +176 -0
- package/packages/gsd-agent-types/dist/index.d.ts.map +1 -0
- package/packages/gsd-agent-types/dist/index.js +24 -0
- package/packages/gsd-agent-types/dist/index.js.map +1 -0
- package/packages/gsd-agent-types/package.json +24 -0
- package/packages/gsd-agent-types/src/index.ts +206 -0
- package/packages/gsd-agent-types/tsconfig.json +25 -0
- package/packages/gsd-agent-types/tsconfig.tsbuildinfo +1 -0
- package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
- package/packages/mcp-server/dist/remote-questions.js +732 -0
- package/packages/mcp-server/dist/remote-questions.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +7 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +77 -11
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts +14 -0
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +49 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/package.json +4 -3
- package/packages/mcp-server/src/mcp-server.test.ts +67 -0
- package/packages/mcp-server/src/remote-questions.test.ts +294 -0
- package/packages/mcp-server/src/remote-questions.ts +916 -0
- package/packages/mcp-server/src/server.ts +94 -18
- package/packages/mcp-server/src/session-manager.ts +43 -1
- package/packages/mcp-server/tsconfig.test.json +19 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/dist/tsconfig.tsbuildinfo +1 -0
- package/packages/native/package.json +1 -1
- package/packages/native/tsconfig.json +2 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/models/custom.d.ts +38 -0
- package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/custom.js +41 -0
- package/packages/pi-ai/dist/models/custom.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +8 -3
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +16 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/models/custom.ts +42 -0
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
- package/packages/pi-ai/src/providers/anthropic.ts +9 -3
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
- package/packages/pi-ai/src/providers/simple-options.ts +17 -1
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +3 -2
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +7 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +7 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +14 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +21 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +13 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +3 -2
- package/packages/pi-coding-agent/src/core/agent-session.ts +11 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +2 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +7 -0
- package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +16 -0
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +30 -1
- package/packages/pi-coding-agent/src/core/session-manager.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.js +1 -0
- package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/pkg/dist/core/export-html/index.d.ts +1 -1
- package/pkg/dist/core/export-html/index.d.ts.map +1 -1
- package/pkg/dist/core/export-html/index.js +39 -5
- package/pkg/dist/core/export-html/index.js.map +1 -1
- package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
- package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
- package/pkg/package.json +1 -1
- package/scripts/ensure-workspace-builds.cjs +2 -0
- package/scripts/install.js +512 -0
- package/scripts/link-workspace-packages.cjs +2 -0
- package/scripts/postinstall.js +9 -178
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
- package/src/resources/extensions/aws-auth/index.ts +2 -1
- package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +4 -7
- package/src/resources/extensions/bg-shell/index.ts +2 -1
- package/src/resources/extensions/bg-shell/process-manager.ts +2 -1
- package/src/resources/extensions/browser-tools/index.ts +2 -1
- package/src/resources/extensions/claude-code-cli/index.ts +1 -1
- package/src/resources/extensions/claude-code-cli/partial-builder.ts +115 -23
- package/src/resources/extensions/claude-code-cli/readiness.ts +4 -3
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +30 -22
- package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +27 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +39 -6
- package/src/resources/extensions/gsd/auto/loop-deps.ts +13 -0
- package/src/resources/extensions/gsd/auto/loop.ts +9 -0
- package/src/resources/extensions/gsd/auto/phases.ts +78 -4
- package/src/resources/extensions/gsd/auto/run-unit.ts +40 -2
- package/src/resources/extensions/gsd/auto/session.ts +28 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +59 -16
- package/src/resources/extensions/gsd/auto-model-selection.ts +1 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +62 -3
- package/src/resources/extensions/gsd/auto-prompts.ts +28 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +62 -1
- package/src/resources/extensions/gsd/auto-start.ts +40 -52
- package/src/resources/extensions/gsd/auto-worktree.ts +62 -63
- package/src/resources/extensions/gsd/auto.ts +58 -16
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +23 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +18 -6
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +35 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
- package/src/resources/extensions/gsd/dispatch-guard.ts +44 -2
- package/src/resources/extensions/gsd/gitignore.ts +1 -1
- package/src/resources/extensions/gsd/gsd-db.ts +92 -32
- package/src/resources/extensions/gsd/guided-flow.ts +223 -2
- package/src/resources/extensions/gsd/health-widget.ts +3 -1
- package/src/resources/extensions/gsd/journal.ts +2 -1
- package/src/resources/extensions/gsd/key-manager.ts +22 -0
- package/src/resources/extensions/gsd/model-router.ts +42 -1
- package/src/resources/extensions/gsd/pre-execution-checks.ts +33 -7
- package/src/resources/extensions/gsd/preferences-types.ts +8 -0
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
- package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/src/resources/extensions/gsd/prompts/system.md +1 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +16 -3
- package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +188 -2
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +9 -9
- package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +296 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/key-manager.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +337 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +127 -5
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
- package/src/resources/extensions/gsd/token-counter.ts +22 -5
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
- package/src/resources/extensions/gsd/uok/plan-v2.ts +26 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +2 -1
- package/src/resources/extensions/gsd/worktree-resolver.ts +54 -9
- package/src/resources/extensions/mcp-client/index.ts +1 -1
- package/src/resources/extensions/ollama/index.ts +3 -3
- package/src/resources/extensions/ollama/ollama-chat-provider.ts +6 -18
- package/src/resources/extensions/remote-questions/config.ts +15 -4
- package/src/resources/extensions/search-the-web/index.ts +2 -1
- package/src/resources/extensions/shared/tests/format-utils.test.ts +5 -3
- package/src/resources/extensions/universal-config/index.ts +1 -1
- package/src/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/src/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
- package/packages/native/tsconfig.tsbuildinfo +0 -1
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → gy6_foLMsEzdGBT19c3hr}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → gy6_foLMsEzdGBT19c3hr}/_ssgManifest.js +0 -0
|
@@ -988,10 +988,12 @@ describe("stream-adapter — MCP elicitation bridge", () => {
|
|
|
988
988
|
});
|
|
989
989
|
|
|
990
990
|
test("createClaudeCodeElicitationHandler falls back to dialog prompts when custom UI is unavailable", async () => {
|
|
991
|
+
// pi 0.67.2: allowMultiple removed from ExtensionUIDialogOptions.
|
|
992
|
+
// Multi-select falls back to single-select; result is wrapped in an array.
|
|
993
|
+
// The select mock no longer receives opts.allowMultiple=true, so it returns options[0].
|
|
991
994
|
const ui = {
|
|
992
995
|
custom: async () => undefined,
|
|
993
|
-
select: async (_title: string, options: string[],
|
|
994
|
-
if (opts?.allowMultiple) return ["Desktop", "Mobile"];
|
|
996
|
+
select: async (_title: string, options: string[], _opts?: Record<string, unknown>) => {
|
|
995
997
|
return options.includes("None of the above") ? "None of the above" : options[0];
|
|
996
998
|
},
|
|
997
999
|
input: async () => "CLI-only deployment target",
|
|
@@ -1005,7 +1007,8 @@ describe("stream-adapter — MCP elicitation bridge", () => {
|
|
|
1005
1007
|
content: {
|
|
1006
1008
|
storage_scope: "None of the above",
|
|
1007
1009
|
storage_scope__note: "CLI-only deployment target",
|
|
1008
|
-
|
|
1010
|
+
// Single-select fallback: first option "Web" wrapped in array
|
|
1011
|
+
platform: ["Web"],
|
|
1009
1012
|
},
|
|
1010
1013
|
});
|
|
1011
1014
|
});
|
|
@@ -1216,11 +1219,15 @@ describe("stream-adapter — permission mode (F10)", () => {
|
|
|
1216
1219
|
}
|
|
1217
1220
|
}
|
|
1218
1221
|
|
|
1219
|
-
test("buildSdkOptions defaults to
|
|
1222
|
+
test("buildSdkOptions defaults to acceptEdits (#4383)", () => {
|
|
1220
1223
|
clearWorkflowMcpEnv();
|
|
1221
1224
|
const opts = buildSdkOptions("claude-sonnet-4-6", "test");
|
|
1222
|
-
assert.equal(opts.permissionMode, "
|
|
1223
|
-
assert.equal(
|
|
1225
|
+
assert.equal(opts.permissionMode, "acceptEdits");
|
|
1226
|
+
assert.equal(
|
|
1227
|
+
opts.allowDangerouslySkipPermissions,
|
|
1228
|
+
false,
|
|
1229
|
+
"allowDangerouslySkipPermissions must be false when permissionMode is acceptEdits",
|
|
1230
|
+
);
|
|
1224
1231
|
});
|
|
1225
1232
|
|
|
1226
1233
|
test("buildSdkOptions respects explicit acceptEdits override", () => {
|
|
@@ -1234,6 +1241,11 @@ describe("stream-adapter — permission mode (F10)", () => {
|
|
|
1234
1241
|
);
|
|
1235
1242
|
});
|
|
1236
1243
|
|
|
1244
|
+
test("resolveClaudePermissionMode defaults to acceptEdits when no env var is set (#4383)", async () => {
|
|
1245
|
+
const mode = await resolveClaudePermissionMode({});
|
|
1246
|
+
assert.equal(mode, "acceptEdits");
|
|
1247
|
+
});
|
|
1248
|
+
|
|
1237
1249
|
test("resolveClaudePermissionMode honours the GSD_CLAUDE_CODE_PERMISSION_MODE env override", async () => {
|
|
1238
1250
|
const env = { GSD_CLAUDE_CODE_PERMISSION_MODE: "acceptEdits" } as NodeJS.ProcessEnv;
|
|
1239
1251
|
const mode = await resolveClaudePermissionMode(env);
|
|
@@ -1249,6 +1261,27 @@ describe("stream-adapter — permission mode (F10)", () => {
|
|
|
1249
1261
|
`expected bypass or acceptEdits, got ${mode}`,
|
|
1250
1262
|
);
|
|
1251
1263
|
});
|
|
1264
|
+
|
|
1265
|
+
test("resolveClaudePermissionMode flips to bypassPermissions when GSD_HEADLESS=1 (#4657)", async () => {
|
|
1266
|
+
const originalWarn = console.warn;
|
|
1267
|
+
console.warn = () => {};
|
|
1268
|
+
try {
|
|
1269
|
+
const env = { GSD_HEADLESS: "1" } as NodeJS.ProcessEnv;
|
|
1270
|
+
const mode = await resolveClaudePermissionMode(env);
|
|
1271
|
+
assert.equal(mode, "bypassPermissions");
|
|
1272
|
+
} finally {
|
|
1273
|
+
console.warn = originalWarn;
|
|
1274
|
+
}
|
|
1275
|
+
});
|
|
1276
|
+
|
|
1277
|
+
test("resolveClaudePermissionMode: explicit override wins over GSD_HEADLESS=1", async () => {
|
|
1278
|
+
const env = {
|
|
1279
|
+
GSD_HEADLESS: "1",
|
|
1280
|
+
GSD_CLAUDE_CODE_PERMISSION_MODE: "acceptEdits",
|
|
1281
|
+
} as NodeJS.ProcessEnv;
|
|
1282
|
+
const mode = await resolveClaudePermissionMode(env);
|
|
1283
|
+
assert.equal(mode, "acceptEdits");
|
|
1284
|
+
});
|
|
1252
1285
|
});
|
|
1253
1286
|
|
|
1254
1287
|
describe("stream-adapter — Windows Claude path lookup (#3770)", () => {
|
|
@@ -22,6 +22,7 @@ import type { CmuxLogLevel } from "../../cmux/index.js";
|
|
|
22
22
|
import type { JournalEntry } from "../journal.js";
|
|
23
23
|
import type { MergeReconcileResult } from "../auto-recovery.js";
|
|
24
24
|
import type { UokTurnObserver } from "../uok/contracts.js";
|
|
25
|
+
import type { PreflightResult } from "../clean-root-preflight.js";
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* Dependencies injected by the caller (auto.ts startAuto) so autoLoop
|
|
@@ -122,6 +123,18 @@ export interface LoopDeps {
|
|
|
122
123
|
) => string | null;
|
|
123
124
|
reconcileMergeState: (basePath: string, ctx: ExtensionContext) => MergeReconcileResult;
|
|
124
125
|
|
|
126
|
+
// Clean-root preflight gate (#2909)
|
|
127
|
+
preflightCleanRoot: (
|
|
128
|
+
basePath: string,
|
|
129
|
+
milestoneId: string,
|
|
130
|
+
notify: (message: string, level: "info" | "warning" | "error") => void,
|
|
131
|
+
) => PreflightResult;
|
|
132
|
+
postflightPopStash: (
|
|
133
|
+
basePath: string,
|
|
134
|
+
milestoneId: string,
|
|
135
|
+
notify: (message: string, level: "info" | "warning" | "error") => void,
|
|
136
|
+
) => void;
|
|
137
|
+
|
|
125
138
|
// Budget/context/secrets
|
|
126
139
|
getLedger: () => unknown;
|
|
127
140
|
getProjectTotals: (units: unknown) => { cost: number };
|
|
@@ -50,6 +50,13 @@ function stuckStatePath(basePath: string): string {
|
|
|
50
50
|
function loadStuckState(basePath: string): { recentUnits: Array<{ key: string }>; stuckRecoveryAttempts: number } {
|
|
51
51
|
try {
|
|
52
52
|
const data = JSON.parse(readFileSync(stuckStatePath(basePath), "utf-8"));
|
|
53
|
+
// Only load state written by a DIFFERENT process (real session restart).
|
|
54
|
+
// If the PID matches the current process, this state was written by an earlier
|
|
55
|
+
// autoLoop call in the same process (e.g., a test that completed before this
|
|
56
|
+
// one), not by a crashed session — skip it to prevent test state pollution.
|
|
57
|
+
if (data.pid === process.pid) {
|
|
58
|
+
return { recentUnits: [], stuckRecoveryAttempts: 0 };
|
|
59
|
+
}
|
|
53
60
|
return {
|
|
54
61
|
recentUnits: Array.isArray(data.recentUnits) ? data.recentUnits : [],
|
|
55
62
|
stuckRecoveryAttempts: typeof data.stuckRecoveryAttempts === "number" ? data.stuckRecoveryAttempts : 0,
|
|
@@ -65,6 +72,7 @@ function saveStuckState(basePath: string, state: LoopState): void {
|
|
|
65
72
|
const filePath = stuckStatePath(basePath);
|
|
66
73
|
mkdirSync(join(gsdRoot(basePath), "runtime"), { recursive: true });
|
|
67
74
|
writeFileSync(filePath, JSON.stringify({
|
|
75
|
+
pid: process.pid,
|
|
68
76
|
recentUnits: state.recentUnits.slice(-20), // keep last 20 entries
|
|
69
77
|
stuckRecoveryAttempts: state.stuckRecoveryAttempts,
|
|
70
78
|
updatedAt: new Date().toISOString(),
|
|
@@ -590,6 +598,7 @@ export async function autoLoop(
|
|
|
590
598
|
consecutiveCooldowns = 0;
|
|
591
599
|
recentErrorMessages.length = 0;
|
|
592
600
|
deps.emitJournalEvent({ ts: new Date().toISOString(), flowId, seq: nextSeq(), eventType: "iteration-end", data: { iteration } });
|
|
601
|
+
saveStuckState(s.basePath, loopState); // persist across session restarts (#4382)
|
|
593
602
|
debugLog("autoLoop", { phase: "iteration-complete", iteration });
|
|
594
603
|
finishTurn("completed");
|
|
595
604
|
} catch (loopErr) {
|
|
@@ -54,7 +54,8 @@ import type { MinimalModelRegistry } from "../context-budget.js";
|
|
|
54
54
|
import { ensurePlanV2Graph } from "../uok/plan-v2.js";
|
|
55
55
|
import { resolveUokFlags } from "../uok/flags.js";
|
|
56
56
|
import { UokGateRunner } from "../uok/gate-runner.js";
|
|
57
|
-
import { resetEvidence } from "../safety/evidence-collector.js";
|
|
57
|
+
import { resetEvidence, loadEvidenceFromDisk } from "../safety/evidence-collector.js";
|
|
58
|
+
import { parseUnitId } from "../unit-id.js";
|
|
58
59
|
import { createCheckpoint, cleanupCheckpoint, rollbackToCheckpoint } from "../safety/git-checkpoint.js";
|
|
59
60
|
import { resolveSafetyHarnessConfig } from "../safety/safety-harness.js";
|
|
60
61
|
import {
|
|
@@ -80,7 +81,11 @@ export function resetSessionTimeoutState(): void {
|
|
|
80
81
|
* Exported for testing as _resolveReportBasePath.
|
|
81
82
|
*/
|
|
82
83
|
export function _resolveReportBasePath(s: Pick<AutoSession, "originalBasePath" | "basePath">): string {
|
|
83
|
-
|
|
84
|
+
// Strip /.gsd/worktrees/ suffix when basePath is itself a worktree path and
|
|
85
|
+
// originalBasePath is falsy — prevents reports landing in the worktree (#3729).
|
|
86
|
+
const resolved = s.originalBasePath || s.basePath;
|
|
87
|
+
const markerIdx = resolved.indexOf("/.gsd/worktrees/");
|
|
88
|
+
return markerIdx !== -1 ? resolved.slice(0, markerIdx) : resolved;
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
/**
|
|
@@ -91,7 +96,12 @@ export function _resolveReportBasePath(s: Pick<AutoSession, "originalBasePath" |
|
|
|
91
96
|
export function _resolveDispatchGuardBasePath(
|
|
92
97
|
s: Pick<AutoSession, "originalBasePath" | "basePath">,
|
|
93
98
|
): string {
|
|
94
|
-
|
|
99
|
+
// Strip /.gsd/worktrees/ suffix when basePath is itself a worktree path and
|
|
100
|
+
// originalBasePath is falsy — prevents guard checks running against the
|
|
101
|
+
// worktree instead of the project root (#3729).
|
|
102
|
+
const resolved = s.originalBasePath || s.basePath;
|
|
103
|
+
const markerIdx = resolved.indexOf("/.gsd/worktrees/");
|
|
104
|
+
return markerIdx !== -1 ? resolved.slice(0, markerIdx) : resolved;
|
|
95
105
|
}
|
|
96
106
|
|
|
97
107
|
const PLAN_V2_GATE_PHASES: ReadonlySet<Phase> = new Set([
|
|
@@ -419,7 +429,7 @@ export async function runPreDispatch(
|
|
|
419
429
|
findings: reason,
|
|
420
430
|
milestoneId: state.activeMilestone?.id ?? undefined,
|
|
421
431
|
});
|
|
422
|
-
ctx.ui.notify(`Plan gate failed-closed: ${reason}`, "error");
|
|
432
|
+
ctx.ui.notify(`Plan gate failed-closed: ${reason}\n\nIf this keeps happening, try: /gsd doctor heal`, "error");
|
|
423
433
|
await deps.pauseAuto(ctx, pi);
|
|
424
434
|
return { action: "break", reason: "plan-v2-gate-failed" };
|
|
425
435
|
}
|
|
@@ -545,6 +555,12 @@ export async function runPreDispatch(
|
|
|
545
555
|
loopState.stuckRecoveryAttempts = 0;
|
|
546
556
|
|
|
547
557
|
// Worktree lifecycle on milestone transition — merge current, enter next
|
|
558
|
+
// #2909: preflight — warn + stash dirty working tree before merge
|
|
559
|
+
const preflightTransition = deps.preflightCleanRoot(
|
|
560
|
+
s.originalBasePath || s.basePath,
|
|
561
|
+
s.currentMilestoneId!,
|
|
562
|
+
ctx.ui.notify.bind(ctx.ui),
|
|
563
|
+
);
|
|
548
564
|
try {
|
|
549
565
|
deps.resolver.mergeAndExit(s.currentMilestoneId!, ctx.ui);
|
|
550
566
|
} catch (mergeErr) {
|
|
@@ -566,6 +582,14 @@ export async function runPreDispatch(
|
|
|
566
582
|
await deps.stopAuto(ctx, pi, `Merge error on milestone ${s.currentMilestoneId}: ${String(mergeErr)}`);
|
|
567
583
|
return { action: "break", reason: "merge-failed" };
|
|
568
584
|
}
|
|
585
|
+
// #2909: postflight — restore stashed changes after successful merge
|
|
586
|
+
if (preflightTransition.stashPushed) {
|
|
587
|
+
deps.postflightPopStash(
|
|
588
|
+
s.originalBasePath || s.basePath,
|
|
589
|
+
s.currentMilestoneId!,
|
|
590
|
+
ctx.ui.notify.bind(ctx.ui),
|
|
591
|
+
);
|
|
592
|
+
}
|
|
569
593
|
|
|
570
594
|
// PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
|
|
571
595
|
|
|
@@ -644,6 +668,12 @@ export async function runPreDispatch(
|
|
|
644
668
|
if (incomplete.length === 0 && state.registry.length > 0) {
|
|
645
669
|
// All milestones complete — merge milestone branch before stopping
|
|
646
670
|
if (s.currentMilestoneId) {
|
|
671
|
+
// #2909: preflight — warn + stash dirty working tree before merge
|
|
672
|
+
const preflightAllComplete = deps.preflightCleanRoot(
|
|
673
|
+
s.originalBasePath || s.basePath,
|
|
674
|
+
s.currentMilestoneId,
|
|
675
|
+
ctx.ui.notify.bind(ctx.ui),
|
|
676
|
+
);
|
|
647
677
|
try {
|
|
648
678
|
deps.resolver.mergeAndExit(s.currentMilestoneId, ctx.ui);
|
|
649
679
|
// Prevent stopAuto from attempting the same merge (#2645)
|
|
@@ -665,6 +695,14 @@ export async function runPreDispatch(
|
|
|
665
695
|
await deps.stopAuto(ctx, pi, `Merge error on milestone ${s.currentMilestoneId}: ${String(mergeErr)}`);
|
|
666
696
|
return { action: "break", reason: "merge-failed" };
|
|
667
697
|
}
|
|
698
|
+
// #2909: postflight — restore stashed changes after successful merge
|
|
699
|
+
if (preflightAllComplete.stashPushed) {
|
|
700
|
+
deps.postflightPopStash(
|
|
701
|
+
s.originalBasePath || s.basePath,
|
|
702
|
+
s.currentMilestoneId,
|
|
703
|
+
ctx.ui.notify.bind(ctx.ui),
|
|
704
|
+
);
|
|
705
|
+
}
|
|
668
706
|
|
|
669
707
|
// PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
|
|
670
708
|
}
|
|
@@ -758,6 +796,12 @@ export async function runPreDispatch(
|
|
|
758
796
|
if (state.phase === "complete") {
|
|
759
797
|
// Milestone merge on complete (before closeout so branch state is clean)
|
|
760
798
|
if (s.currentMilestoneId) {
|
|
799
|
+
// #2909: preflight — warn + stash dirty working tree before merge
|
|
800
|
+
const preflightComplete = deps.preflightCleanRoot(
|
|
801
|
+
s.originalBasePath || s.basePath,
|
|
802
|
+
s.currentMilestoneId,
|
|
803
|
+
ctx.ui.notify.bind(ctx.ui),
|
|
804
|
+
);
|
|
761
805
|
try {
|
|
762
806
|
deps.resolver.mergeAndExit(s.currentMilestoneId, ctx.ui);
|
|
763
807
|
// Prevent stopAuto from attempting the same merge (#2645)
|
|
@@ -779,6 +823,14 @@ export async function runPreDispatch(
|
|
|
779
823
|
await deps.stopAuto(ctx, pi, `Merge error on milestone ${s.currentMilestoneId}: ${String(mergeErr)}`);
|
|
780
824
|
return { action: "break", reason: "merge-failed" };
|
|
781
825
|
}
|
|
826
|
+
// #2909: postflight — restore stashed changes after successful merge
|
|
827
|
+
if (preflightComplete.stashPushed) {
|
|
828
|
+
deps.postflightPopStash(
|
|
829
|
+
s.originalBasePath || s.basePath,
|
|
830
|
+
s.currentMilestoneId,
|
|
831
|
+
ctx.ui.notify.bind(ctx.ui),
|
|
832
|
+
);
|
|
833
|
+
}
|
|
782
834
|
|
|
783
835
|
// PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
|
|
784
836
|
}
|
|
@@ -1385,6 +1437,14 @@ export async function runUnitPhase(
|
|
|
1385
1437
|
);
|
|
1386
1438
|
if (safetyConfig.enabled && safetyConfig.evidence_collection) {
|
|
1387
1439
|
resetEvidence();
|
|
1440
|
+
// Restore persisted evidence so session-restart resumes don't produce
|
|
1441
|
+
// false-positive "no bash calls" warnings (Bug #4385).
|
|
1442
|
+
if (s.basePath && unitType === "execute-task") {
|
|
1443
|
+
const { milestone: eMid, slice: eSid, task: eTid } = parseUnitId(unitId);
|
|
1444
|
+
if (eMid && eSid && eTid) {
|
|
1445
|
+
loadEvidenceFromDisk(s.basePath, eMid, eSid, eTid);
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1388
1448
|
}
|
|
1389
1449
|
// Only checkpoint code-executing units (not lifecycle/planning units)
|
|
1390
1450
|
if (safetyConfig.enabled && safetyConfig.checkpoints && unitType === "execute-task") {
|
|
@@ -1928,6 +1988,20 @@ export async function runFinalize(
|
|
|
1928
1988
|
debugLog("autoLoop", { phase: "sidecar-artifact-retry-skipped", iteration: ic.iteration });
|
|
1929
1989
|
} else {
|
|
1930
1990
|
// s.pendingVerificationRetry was set by postUnitPreVerification.
|
|
1991
|
+
// Emit a dedicated journal event so forensics can distinguish bounded
|
|
1992
|
+
// verification retries from genuine stuck-loop dispatch repetitions (#4540).
|
|
1993
|
+
const retryInfo = s.pendingVerificationRetry;
|
|
1994
|
+
deps.emitJournalEvent({
|
|
1995
|
+
ts: new Date().toISOString(),
|
|
1996
|
+
flowId: ic.flowId,
|
|
1997
|
+
seq: ic.nextSeq(),
|
|
1998
|
+
eventType: "artifact-verification-retry",
|
|
1999
|
+
data: {
|
|
2000
|
+
unitType: preUnitSnapshot?.type,
|
|
2001
|
+
unitId: retryInfo?.unitId,
|
|
2002
|
+
attempt: retryInfo?.attempt,
|
|
2003
|
+
},
|
|
2004
|
+
});
|
|
1931
2005
|
// Continue the loop — next iteration will inject the retry context into the prompt.
|
|
1932
2006
|
debugLog("autoLoop", { phase: "artifact-verification-retry", iteration: ic.iteration });
|
|
1933
2007
|
return { action: "continue" };
|
|
@@ -42,16 +42,25 @@ export async function runUnit(
|
|
|
42
42
|
let sessionResult: { cancelled: boolean };
|
|
43
43
|
let sessionTimeoutHandle: ReturnType<typeof setTimeout> | undefined;
|
|
44
44
|
const mySessionSwitchGeneration = ++sessionSwitchGeneration;
|
|
45
|
+
// #3731: Cancellation controller for newSession(). When the session-creation
|
|
46
|
+
// timeout fires, we abort this controller so that the still-in-flight
|
|
47
|
+
// newSession() discards itself after await this.abort() completes, preventing
|
|
48
|
+
// it from capturing the (now-root) process.cwd() and rebuilding the tool
|
|
49
|
+
// runtime with the wrong cwd.
|
|
50
|
+
const sessionAbortController = new AbortController();
|
|
45
51
|
_setSessionSwitchInFlight(true);
|
|
46
52
|
try {
|
|
47
|
-
const sessionPromise = s.cmdCtx!.newSession().finally(() => {
|
|
53
|
+
const sessionPromise = s.cmdCtx!.newSession({ abortSignal: sessionAbortController.signal }).finally(() => {
|
|
48
54
|
if (sessionSwitchGeneration === mySessionSwitchGeneration) {
|
|
49
55
|
_setSessionSwitchInFlight(false);
|
|
50
56
|
}
|
|
51
57
|
});
|
|
52
58
|
const timeoutPromise = new Promise<{ cancelled: true }>((resolve) => {
|
|
53
59
|
sessionTimeoutHandle = setTimeout(
|
|
54
|
-
() =>
|
|
60
|
+
() => {
|
|
61
|
+
sessionAbortController.abort();
|
|
62
|
+
resolve({ cancelled: true });
|
|
63
|
+
},
|
|
55
64
|
NEW_SESSION_TIMEOUT_MS,
|
|
56
65
|
);
|
|
57
66
|
});
|
|
@@ -118,6 +127,35 @@ export async function runUnit(
|
|
|
118
127
|
logWarning("engine", "Failed to chdir to basePath before dispatch", { basePath: s.basePath, error: String(e) });
|
|
119
128
|
}
|
|
120
129
|
|
|
130
|
+
// ── Provider request-readiness pre-check (#4555) ──
|
|
131
|
+
// Verify the provider can accept requests before dispatching. If the token
|
|
132
|
+
// has expired since bootstrap, return cancelled immediately so the unit is
|
|
133
|
+
// not wasted on a guaranteed 401.
|
|
134
|
+
{
|
|
135
|
+
const provider = s.currentUnitModel?.provider ?? ctx.model?.provider;
|
|
136
|
+
const registry = (ctx as any).modelRegistry;
|
|
137
|
+
|
|
138
|
+
if (provider && registry != null && typeof registry.isProviderRequestReady === "function") {
|
|
139
|
+
let ready = false;
|
|
140
|
+
try {
|
|
141
|
+
ready = registry.isProviderRequestReady(provider);
|
|
142
|
+
} catch {
|
|
143
|
+
ready = false;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (!ready) {
|
|
147
|
+
return {
|
|
148
|
+
status: "cancelled",
|
|
149
|
+
errorContext: {
|
|
150
|
+
message: `Provider ${provider} is not request-ready (login/token expired)`,
|
|
151
|
+
category: "provider",
|
|
152
|
+
isTransient: false,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
121
159
|
// ── Send the prompt ──
|
|
122
160
|
debugLog("runUnit", { phase: "send-message", unitType, unitId });
|
|
123
161
|
|
|
@@ -64,6 +64,15 @@ export interface SidecarItem {
|
|
|
64
64
|
captureId?: string;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
export interface PreExecFailure {
|
|
68
|
+
/** Milestone/slice that failed (e.g. "M001/S02"). */
|
|
69
|
+
unitId: string;
|
|
70
|
+
/** Verbatim blocking check strings from the failed gate run. */
|
|
71
|
+
blockingFindings: string[];
|
|
72
|
+
/** Condensed gate verdict excerpt for context (status + rationale). */
|
|
73
|
+
verdictExcerpt: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
67
76
|
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
68
77
|
|
|
69
78
|
export const MAX_UNIT_DISPATCHES = 3;
|
|
@@ -139,6 +148,18 @@ export class AutoSession {
|
|
|
139
148
|
// ── Sidecar queue ─────────────────────────────────────────────────────
|
|
140
149
|
sidecarQueue: SidecarItem[] = [];
|
|
141
150
|
|
|
151
|
+
// ── Pre-exec gate failure context (#4551) ───────────────────────────
|
|
152
|
+
/**
|
|
153
|
+
* Persisted when a pre-execution gate fails on a plan-slice or refine-slice
|
|
154
|
+
* unit. The planning → plan-slice dispatch rule reads this field and injects
|
|
155
|
+
* the failure details into the next re-dispatch prompt so the LLM can fix the
|
|
156
|
+
* specific issues instead of producing an identical plan.
|
|
157
|
+
*
|
|
158
|
+
* Cleared after it has been consumed (injected into the prompt) to avoid
|
|
159
|
+
* stale context bleeding into unrelated slices.
|
|
160
|
+
*/
|
|
161
|
+
lastPreExecFailure: PreExecFailure | null = null;
|
|
162
|
+
|
|
142
163
|
// ── Tool invocation errors (#2883) ──────────────────────────────────
|
|
143
164
|
/** Set when a GSD tool execution ends with isError due to malformed/truncated
|
|
144
165
|
* JSON arguments. Checked by postUnitPreVerification to break retry loops. */
|
|
@@ -199,7 +220,12 @@ export class AutoSession {
|
|
|
199
220
|
}
|
|
200
221
|
|
|
201
222
|
get lockBasePath(): string {
|
|
202
|
-
|
|
223
|
+
// Prefer originalBasePath (project root); fall back to basePath.
|
|
224
|
+
// Strip /.gsd/worktrees/ suffix if basePath is itself a worktree path
|
|
225
|
+
// to avoid reading/writing the lock inside the worktree (#3729).
|
|
226
|
+
const resolved = this.originalBasePath || this.basePath;
|
|
227
|
+
const markerIdx = resolved.indexOf("/.gsd/worktrees/");
|
|
228
|
+
return markerIdx !== -1 ? resolved.slice(0, markerIdx) : resolved;
|
|
203
229
|
}
|
|
204
230
|
|
|
205
231
|
reset(): void {
|
|
@@ -267,6 +293,7 @@ export class AutoSession {
|
|
|
267
293
|
this.sidecarQueue = [];
|
|
268
294
|
this.rewriteAttemptCount = 0;
|
|
269
295
|
this.consecutiveCompleteBootstraps = 0;
|
|
296
|
+
this.lastPreExecFailure = null;
|
|
270
297
|
this.lastToolInvocationError = null;
|
|
271
298
|
this.lastGitActionFailure = null;
|
|
272
299
|
this.lastGitActionStatus = null;
|
|
@@ -33,7 +33,7 @@ import { parseRoadmap } from "./parsers-legacy.js";
|
|
|
33
33
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
34
34
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
35
35
|
import { join } from "node:path";
|
|
36
|
-
import { hasImplementationArtifacts } from "./auto-recovery.js";
|
|
36
|
+
import { hasImplementationArtifacts, classifyMilestoneSummaryContent } from "./auto-recovery.js";
|
|
37
37
|
import {
|
|
38
38
|
buildDiscussMilestonePrompt,
|
|
39
39
|
buildResearchMilestonePrompt,
|
|
@@ -568,15 +568,28 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
568
568
|
},
|
|
569
569
|
{
|
|
570
570
|
name: "planning → plan-slice",
|
|
571
|
-
match: async ({ state, mid, midTitle, basePath, sessionContextWindow, modelRegistry }) => {
|
|
571
|
+
match: async ({ state, mid, midTitle, basePath, sessionContextWindow, modelRegistry, session }) => {
|
|
572
572
|
if (state.phase !== "planning") return null;
|
|
573
573
|
if (!state.activeSlice) return missingSliceStop(mid, state.phase);
|
|
574
574
|
const sid = state.activeSlice!.id;
|
|
575
575
|
const sTitle = state.activeSlice!.title;
|
|
576
|
+
// #4551: Consume any persisted pre-exec failure for this slice so the
|
|
577
|
+
// re-dispatched prompt includes the exact blocked references. Clear the
|
|
578
|
+
// field immediately after reading to prevent stale context leaking into
|
|
579
|
+
// a later, unrelated plan-slice run.
|
|
580
|
+
const unitId = `${mid}/${sid}`;
|
|
581
|
+
let priorPreExecFailure: { blockingFindings: string[]; verdictExcerpt: string } | undefined;
|
|
582
|
+
if (session?.lastPreExecFailure?.unitId === unitId) {
|
|
583
|
+
priorPreExecFailure = {
|
|
584
|
+
blockingFindings: session.lastPreExecFailure.blockingFindings,
|
|
585
|
+
verdictExcerpt: session.lastPreExecFailure.verdictExcerpt,
|
|
586
|
+
};
|
|
587
|
+
session.lastPreExecFailure = null;
|
|
588
|
+
}
|
|
576
589
|
return {
|
|
577
590
|
action: "dispatch",
|
|
578
591
|
unitType: "plan-slice",
|
|
579
|
-
unitId
|
|
592
|
+
unitId,
|
|
580
593
|
prompt: await buildPlanSlicePrompt(
|
|
581
594
|
mid,
|
|
582
595
|
midTitle,
|
|
@@ -584,7 +597,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
584
597
|
sTitle,
|
|
585
598
|
basePath,
|
|
586
599
|
undefined,
|
|
587
|
-
{ sessionContextWindow, modelRegistry },
|
|
600
|
+
{ sessionContextWindow, modelRegistry, priorPreExecFailure },
|
|
588
601
|
),
|
|
589
602
|
};
|
|
590
603
|
},
|
|
@@ -870,21 +883,13 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
870
883
|
}
|
|
871
884
|
}
|
|
872
885
|
|
|
873
|
-
// Reconciliation guard (#4324): when the SUMMARY file already exists
|
|
874
|
-
// on disk but the DB says the milestone is not complete, the DB is
|
|
875
|
-
// out of sync (e.g. journal reset, partial merge, crash recovery).
|
|
876
|
-
// Reconcile the DB status directly instead of re-dispatching the
|
|
877
|
-
// tool, which would overwrite the richer on-disk SUMMARY with a
|
|
878
|
-
// thinner regenerated version — causing silent data loss.
|
|
879
886
|
const existingSummary = resolveMilestoneFile(basePath, mid, "SUMMARY");
|
|
887
|
+
let summaryOutcome: "success" | "failure" | "unknown" = "unknown";
|
|
880
888
|
if (existingSummary && isDbAvailable()) {
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
} catch (err) {
|
|
885
|
-
logWarning("dispatch", `Failed to reconcile milestone ${mid} status: ${err instanceof Error ? err.message : String(err)}`);
|
|
889
|
+
const summaryContent = await loadFile(existingSummary);
|
|
890
|
+
if (summaryContent) {
|
|
891
|
+
summaryOutcome = classifyMilestoneSummaryContent(summaryContent);
|
|
886
892
|
}
|
|
887
|
-
return { action: "skip" };
|
|
888
893
|
}
|
|
889
894
|
|
|
890
895
|
// Safety guard (#2675): block completion when VALIDATION verdict is
|
|
@@ -969,6 +974,44 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
969
974
|
logWarning("dispatch", `verification class check failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
970
975
|
}
|
|
971
976
|
|
|
977
|
+
// Disk/DB mismatch handling (#4658): SUMMARY presence alone is not enough.
|
|
978
|
+
// Apply post-gate policy:
|
|
979
|
+
// - success summary: reconcile DB and skip re-dispatch
|
|
980
|
+
// - failure summary: pause/fail-closed
|
|
981
|
+
// - unknown summary: pause/fail-closed
|
|
982
|
+
if (existingSummary && isDbAvailable()) {
|
|
983
|
+
const milestone = getMilestone(mid);
|
|
984
|
+
const status = milestone?.status ?? "missing";
|
|
985
|
+
|
|
986
|
+
if (summaryOutcome === "success") {
|
|
987
|
+
try {
|
|
988
|
+
updateMilestoneStatus(mid, "complete", new Date().toISOString());
|
|
989
|
+
logWarning("dispatch", `Milestone ${mid} SUMMARY indicates completion while DB status was "${status}" — reconciled DB to complete (#4658)`);
|
|
990
|
+
return { action: "skip" };
|
|
991
|
+
} catch (err) {
|
|
992
|
+
return {
|
|
993
|
+
action: "stop",
|
|
994
|
+
level: "warning",
|
|
995
|
+
reason: `Milestone ${mid} SUMMARY indicates completion but DB reconciliation failed (${err instanceof Error ? err.message : String(err)}). Auto-mode paused for manual review.`,
|
|
996
|
+
};
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
if (summaryOutcome === "failure") {
|
|
1001
|
+
return {
|
|
1002
|
+
action: "stop",
|
|
1003
|
+
level: "warning",
|
|
1004
|
+
reason: `Milestone ${mid} has a failure-path SUMMARY while DB status is "${status}". Auto-mode will not promote completion from failure artifacts. Re-run complete-milestone only after blockers are resolved and verification passes.`,
|
|
1005
|
+
};
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
return {
|
|
1009
|
+
action: "stop",
|
|
1010
|
+
level: "warning",
|
|
1011
|
+
reason: `Milestone ${mid} has an ambiguous SUMMARY while DB status is "${status}". Auto-mode paused instead of promoting completion from file presence alone.`,
|
|
1012
|
+
};
|
|
1013
|
+
}
|
|
1014
|
+
|
|
972
1015
|
return {
|
|
973
1016
|
action: "dispatch",
|
|
974
1017
|
unitType: "complete-milestone",
|
|
@@ -395,7 +395,7 @@ export async function selectAndApplyModel(
|
|
|
395
395
|
// ADR-005: Adjust active tool set for the selected model's provider capabilities.
|
|
396
396
|
// Hard-filter incompatible tools, then let extensions override via adjust_tool_set hook.
|
|
397
397
|
const activeToolNames = pi.getActiveTools();
|
|
398
|
-
const { toolNames: compatibleTools, removedTools } = adjustToolSet(activeToolNames, model.api);
|
|
398
|
+
const { toolNames: compatibleTools, removedTools } = adjustToolSet(activeToolNames, model.api, model.provider);
|
|
399
399
|
let finalToolNames = compatibleTools;
|
|
400
400
|
|
|
401
401
|
// Fire adjust_tool_set hook — extensions can override the filtered tool set
|