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
|
@@ -55,7 +55,7 @@ import { hasPendingCaptures, loadPendingCaptures, revertExecutorResolvedCaptures
|
|
|
55
55
|
import { debugLog } from "./debug-logger.js";
|
|
56
56
|
import { runSafely } from "./auto-utils.js";
|
|
57
57
|
import type { AutoSession, SidecarItem } from "./auto/session.js";
|
|
58
|
-
import { getEvidence } from "./safety/evidence-collector.js";
|
|
58
|
+
import { getEvidence, clearEvidenceFromDisk } from "./safety/evidence-collector.js";
|
|
59
59
|
import { validateFileChanges } from "./safety/file-change-validator.js";
|
|
60
60
|
// crossReferenceEvidence available for future use when verification_evidence is stored in DB
|
|
61
61
|
// import { crossReferenceEvidence, type ClaimedEvidence } from "./safety/evidence-cross-ref.js";
|
|
@@ -70,9 +70,23 @@ import { ensureCodebaseMapFresh } from "./codebase-generator.js";
|
|
|
70
70
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
71
71
|
import { UokGateRunner } from "./uok/gate-runner.js";
|
|
72
72
|
import { writeTurnGitTransaction } from "./uok/gitops.js";
|
|
73
|
+
import { isClosedStatus } from "./status-guards.js";
|
|
73
74
|
|
|
74
75
|
/** Maximum verification retry attempts before escalating to blocker placeholder (#2653). */
|
|
75
76
|
const MAX_VERIFICATION_RETRIES = 3;
|
|
77
|
+
const COMPLETE_MILESTONE_DB_SETTLE_MS = 1500;
|
|
78
|
+
const COMPLETE_MILESTONE_DB_SETTLE_POLL_MS = 100;
|
|
79
|
+
|
|
80
|
+
async function waitForMilestoneDbClose(mid: string): Promise<boolean> {
|
|
81
|
+
const deadline = Date.now() + COMPLETE_MILESTONE_DB_SETTLE_MS;
|
|
82
|
+
while (Date.now() < deadline) {
|
|
83
|
+
if (!isDbAvailable()) return false;
|
|
84
|
+
const milestone = getMilestone(mid);
|
|
85
|
+
if (milestone && isClosedStatus(milestone.status)) return true;
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, COMPLETE_MILESTONE_DB_SETTLE_POLL_MS));
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
76
90
|
|
|
77
91
|
|
|
78
92
|
/** Enqueue a sidecar item (hook, triage, or quick-task) for the main loop to
|
|
@@ -107,7 +121,6 @@ import {
|
|
|
107
121
|
updateProgressWidget as _updateProgressWidget,
|
|
108
122
|
updateSliceProgressCache,
|
|
109
123
|
unitVerb,
|
|
110
|
-
hideFooter,
|
|
111
124
|
describeNextUnit,
|
|
112
125
|
} from "./auto-dashboard.js";
|
|
113
126
|
import { existsSync, unlinkSync } from "node:fs";
|
|
@@ -654,7 +667,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
654
667
|
if (taskRow) {
|
|
655
668
|
const expectedOutput = taskRow.expected_output ?? [];
|
|
656
669
|
const plannedFiles = taskRow.files ?? [];
|
|
657
|
-
const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles);
|
|
670
|
+
const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles, safetyConfig.file_change_allowlist);
|
|
658
671
|
if (audit && audit.violations.length > 0) {
|
|
659
672
|
const warnings = audit.violations.filter(v => v.severity === "warning");
|
|
660
673
|
for (const v of warnings) {
|
|
@@ -712,6 +725,16 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
712
725
|
debugLog("postUnit", { phase: "safety-content-validation", error: String(e) });
|
|
713
726
|
}
|
|
714
727
|
}
|
|
728
|
+
|
|
729
|
+
// Clear persisted evidence file now that post-unit processing is complete
|
|
730
|
+
// (Bug #4385 — prevents stale evidence from affecting retries of same unit ID).
|
|
731
|
+
if (safetyConfig.evidence_collection && s.currentUnit.type === "execute-task" && sMid && sSid && sTid) {
|
|
732
|
+
try {
|
|
733
|
+
clearEvidenceFromDisk(s.basePath, sMid, sSid, sTid);
|
|
734
|
+
} catch (e) {
|
|
735
|
+
debugLog("postUnit", { phase: "safety-evidence-clear", error: String(e) });
|
|
736
|
+
}
|
|
737
|
+
}
|
|
715
738
|
}
|
|
716
739
|
} catch (e) {
|
|
717
740
|
debugLog("postUnit", { phase: "safety-harness", error: String(e) });
|
|
@@ -731,6 +754,25 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
731
754
|
|
|
732
755
|
// If verification failed, attempt to regenerate missing projection files
|
|
733
756
|
// from DB data before giving up (e.g. research-slice produces PLAN from engine).
|
|
757
|
+
if (!triggerArtifactVerified) {
|
|
758
|
+
if (s.currentUnit.type === "complete-milestone") {
|
|
759
|
+
try {
|
|
760
|
+
const { milestone: mid } = parseUnitId(s.currentUnit.id);
|
|
761
|
+
if (mid) {
|
|
762
|
+
const settled = await waitForMilestoneDbClose(mid);
|
|
763
|
+
if (settled) {
|
|
764
|
+
triggerArtifactVerified = verifyExpectedArtifact(s.currentUnit.type, s.currentUnit.id, s.basePath);
|
|
765
|
+
if (triggerArtifactVerified) {
|
|
766
|
+
invalidateAllCaches();
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
} catch (e) {
|
|
771
|
+
debugLog("postUnit", { phase: "artifact-verify-settle-db", error: String(e) });
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
|
|
734
776
|
if (!triggerArtifactVerified) {
|
|
735
777
|
try {
|
|
736
778
|
const { milestone: mid, slice: sid } = parseUnitId(s.currentUnit.id);
|
|
@@ -1134,6 +1176,15 @@ export async function postUnitPostVerification(pctx: PostUnitContext): Promise<"
|
|
|
1134
1176
|
`Pre-execution checks failed: ${blockingCount} blocking issue${blockingCount === 1 ? "" : "s"} found\n${details}${suffix}${evidenceNote}`,
|
|
1135
1177
|
"error",
|
|
1136
1178
|
);
|
|
1179
|
+
// Persist failure context so the next plan-slice re-dispatch can inject
|
|
1180
|
+
// it into the prompt and break the infinite loop (#4551).
|
|
1181
|
+
s.lastPreExecFailure = {
|
|
1182
|
+
unitId: currentUnit.id,
|
|
1183
|
+
blockingFindings: blockingChecks.map(
|
|
1184
|
+
c => `[${c.category}] ${c.target}: ${c.message}`,
|
|
1185
|
+
),
|
|
1186
|
+
verdictExcerpt: `status=${result.status}; ${blockingCount} blocking issue${blockingCount === 1 ? "" : "s"} detected`,
|
|
1187
|
+
};
|
|
1137
1188
|
preExecPauseNeeded = true;
|
|
1138
1189
|
} else if (result.status === "warn") {
|
|
1139
1190
|
ctx.ui.notify(
|
|
@@ -1142,6 +1193,14 @@ export async function postUnitPostVerification(pctx: PostUnitContext): Promise<"
|
|
|
1142
1193
|
);
|
|
1143
1194
|
// Strict mode: treat warnings as blocking
|
|
1144
1195
|
if (prefs?.enhanced_verification_strict === true) {
|
|
1196
|
+
const warnChecks = result.checks.filter(c => !c.passed);
|
|
1197
|
+
s.lastPreExecFailure = {
|
|
1198
|
+
unitId: currentUnit.id,
|
|
1199
|
+
blockingFindings: warnChecks.map(
|
|
1200
|
+
c => `[${c.category}] ${c.target}: ${c.message}`,
|
|
1201
|
+
),
|
|
1202
|
+
verdictExcerpt: `status=${result.status} (strict mode); ${warnChecks.length} warning${warnChecks.length === 1 ? "" : "s"} treated as blocking`,
|
|
1203
|
+
};
|
|
1145
1204
|
preExecPauseNeeded = true;
|
|
1146
1205
|
}
|
|
1147
1206
|
}
|
|
@@ -1380,7 +1380,18 @@ async function renderSlicePrompt(options: {
|
|
|
1380
1380
|
|
|
1381
1381
|
export async function buildPlanSlicePrompt(
|
|
1382
1382
|
mid: string, _midTitle: string, sid: string, sTitle: string, base: string, level?: InlineLevel,
|
|
1383
|
-
options?: {
|
|
1383
|
+
options?: {
|
|
1384
|
+
softScopeHint?: string;
|
|
1385
|
+
sessionContextWindow?: number;
|
|
1386
|
+
modelRegistry?: MinimalModelRegistry;
|
|
1387
|
+
/** Failure context from a prior pre-exec gate run (#4551). When present, a
|
|
1388
|
+
* "Fix these specific issues" section is appended so the LLM addresses the
|
|
1389
|
+
* exact problems instead of producing an identical plan that fails again. */
|
|
1390
|
+
priorPreExecFailure?: {
|
|
1391
|
+
blockingFindings: string[];
|
|
1392
|
+
verdictExcerpt: string;
|
|
1393
|
+
};
|
|
1394
|
+
},
|
|
1384
1395
|
): Promise<string> {
|
|
1385
1396
|
const prependBlocks: string[] = [];
|
|
1386
1397
|
// ADR-011: when the refining-phase dispatch rule gracefully downgrades to
|
|
@@ -1393,6 +1404,22 @@ export async function buildPlanSlicePrompt(
|
|
|
1393
1404
|
`This scope was captured during an earlier progressive-planning pass that was later disabled. Treat it as context only — you may plan beyond it if the work genuinely requires more scope. Do NOT treat this as a hard boundary.`,
|
|
1394
1405
|
);
|
|
1395
1406
|
}
|
|
1407
|
+
// #4551: inject pre-exec failure context so the re-dispatched plan-slice
|
|
1408
|
+
// addresses the exact blocked references rather than reproducing the same plan.
|
|
1409
|
+
if (options?.priorPreExecFailure) {
|
|
1410
|
+
const { blockingFindings, verdictExcerpt } = options.priorPreExecFailure;
|
|
1411
|
+
const findingsList = blockingFindings.length > 0
|
|
1412
|
+
? blockingFindings.map(f => `- ${f}`).join("\n")
|
|
1413
|
+
: "- (no specific findings recorded)";
|
|
1414
|
+
prependBlocks.push(
|
|
1415
|
+
`## Fix these specific issues from the prior pre-exec check\n\n` +
|
|
1416
|
+
`The previous plan-slice attempt was blocked by pre-execution validation.\n` +
|
|
1417
|
+
`Gate verdict: ${verdictExcerpt}\n\n` +
|
|
1418
|
+
`Blocked references that must be resolved in this plan:\n${findingsList}\n\n` +
|
|
1419
|
+
`Revise the plan so that every reference listed above is satisfied before execution begins. ` +
|
|
1420
|
+
`Do not reproduce the same file paths, package names, or task ordering that caused these failures.`,
|
|
1421
|
+
);
|
|
1422
|
+
}
|
|
1396
1423
|
return renderSlicePrompt({
|
|
1397
1424
|
mid, sid, sTitle, base,
|
|
1398
1425
|
level: level ?? resolveInlineLevel(),
|
|
@@ -13,10 +13,12 @@ import { appendEvent } from "./workflow-events.js";
|
|
|
13
13
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
14
14
|
import { clearParseCache } from "./files.js";
|
|
15
15
|
import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
|
|
16
|
-
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus } from "./gsd-db.js";
|
|
16
|
+
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone } from "./gsd-db.js";
|
|
17
17
|
import { isValidationTerminal } from "./state.js";
|
|
18
18
|
import { getErrorMessage } from "./error-utils.js";
|
|
19
19
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
20
|
+
import { splitFrontmatter, parseFrontmatterMap } from "./files.js";
|
|
21
|
+
import { isClosedStatus } from "./status-guards.js";
|
|
20
22
|
import {
|
|
21
23
|
nativeConflictFiles,
|
|
22
24
|
nativeCommit,
|
|
@@ -54,6 +56,32 @@ import {
|
|
|
54
56
|
// Re-export so existing consumers of auto-recovery.ts keep working.
|
|
55
57
|
export { resolveExpectedArtifactPath, diagnoseExpectedArtifact };
|
|
56
58
|
|
|
59
|
+
export type MilestoneSummaryOutcome = "success" | "failure" | "unknown";
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Classify milestone summary content for recovery/dispatch decisions.
|
|
63
|
+
* - success: canonical completion summary (frontmatter status is closed)
|
|
64
|
+
* - failure: explicit blocker/failure markers
|
|
65
|
+
* - unknown: ambiguous content
|
|
66
|
+
*/
|
|
67
|
+
export function classifyMilestoneSummaryContent(content: string): MilestoneSummaryOutcome {
|
|
68
|
+
const [fmLines] = splitFrontmatter(content);
|
|
69
|
+
const fm = fmLines ? parseFrontmatterMap(fmLines) : null;
|
|
70
|
+
const rawStatus = typeof fm?.status === "string" ? fm.status.trim().toLowerCase() : "";
|
|
71
|
+
if (rawStatus) {
|
|
72
|
+
if (isClosedStatus(rawStatus)) return "success";
|
|
73
|
+
if (["active", "pending", "blocked", "failed", "incomplete"].includes(rawStatus)) return "failure";
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const failureSignal =
|
|
77
|
+
/(?:^|\n)\s*#\s*BLOCKER\b/i.test(content)
|
|
78
|
+
|| /auto-mode recovery failed/i.test(content)
|
|
79
|
+
|| /verification\s+failed/i.test(content)
|
|
80
|
+
|| /\bnot complete\b/i.test(content);
|
|
81
|
+
if (failureSignal) return "failure";
|
|
82
|
+
return "unknown";
|
|
83
|
+
}
|
|
84
|
+
|
|
57
85
|
// ─── Artifact Resolution & Verification ───────────────────────────────────────
|
|
58
86
|
|
|
59
87
|
/**
|
|
@@ -268,11 +296,26 @@ export function verifyExpectedArtifact(
|
|
|
268
296
|
// RESEARCH file. Without this, resolveExpectedArtifactPath returns null and
|
|
269
297
|
// the retry/escalation machinery silently re-dispatches forever.
|
|
270
298
|
//
|
|
299
|
+
// #4068: Also treat a PARALLEL-BLOCKER placeholder as a terminal completion
|
|
300
|
+
// so that timeout-recovery can write the blocker, have verifyExpectedArtifact
|
|
301
|
+
// return true, and let the dispatch loop advance past this unit. Without
|
|
302
|
+
// this, the blocker is written but verification still returns false, the unit
|
|
303
|
+
// is never cleared from unitDispatchCount, and on the next iteration the
|
|
304
|
+
// dispatch rule (which correctly skips parallel-research when PARALLEL-BLOCKER
|
|
305
|
+
// exists) returns null — leaving the loop stuck re-deriving indefinitely.
|
|
306
|
+
//
|
|
271
307
|
// NOTE: this predicate mirrors the dispatch rule at
|
|
272
308
|
// auto-dispatch.ts parallel-research-slices — keep the two in sync.
|
|
273
309
|
if (unitType === "research-slice" && unitId.endsWith("/parallel-research")) {
|
|
274
310
|
const { milestone: mid } = parseUnitId(unitId);
|
|
275
311
|
if (!mid) return false;
|
|
312
|
+
|
|
313
|
+
// #4068: PARALLEL-BLOCKER written by timeout-recovery is a terminal state.
|
|
314
|
+
const blockerPath = resolveExpectedArtifactPath(unitType, unitId, base);
|
|
315
|
+
if (blockerPath && existsSync(blockerPath)) {
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
|
|
276
319
|
const roadmapFile = resolveMilestoneFile(base, mid, "ROADMAP");
|
|
277
320
|
if (!roadmapFile || !existsSync(roadmapFile)) {
|
|
278
321
|
logWarning("recovery", `verify-fail ${unitType} ${unitId}: roadmap missing`);
|
|
@@ -462,6 +505,14 @@ export function verifyExpectedArtifact(
|
|
|
462
505
|
// A milestone with only .gsd/ plan files and zero implementation code is
|
|
463
506
|
// not genuinely complete — the LLM wrote plan files but skipped actual work.
|
|
464
507
|
if (unitType === "complete-milestone") {
|
|
508
|
+
const summaryOutcome = classifyMilestoneSummaryContent(readFileSync(absPath, "utf-8"));
|
|
509
|
+
if (summaryOutcome === "failure") return false;
|
|
510
|
+
const { milestone: mid } = parseUnitId(unitId);
|
|
511
|
+
if (mid && isDbAvailable()) {
|
|
512
|
+
const dbMilestone = getMilestone(mid);
|
|
513
|
+
if (!dbMilestone) return false;
|
|
514
|
+
if (!isClosedStatus(dbMilestone.status) && summaryOutcome !== "success") return false;
|
|
515
|
+
}
|
|
465
516
|
if (hasImplementationArtifacts(base) === "absent") return false;
|
|
466
517
|
}
|
|
467
518
|
|
|
@@ -532,6 +583,16 @@ export function writeBlockerPlaceholder(
|
|
|
532
583
|
try { updateSliceStatus(mid, sid, "complete", ts); } catch (e) { logWarning("recovery", `updateSliceStatus failed during context exhaustion: ${e instanceof Error ? e.message : String(e)}`); }
|
|
533
584
|
try { appendEvent(base, { cmd: "complete-slice", params: { milestoneId: mid, sliceId: sid }, ts, actor: "system", trigger_reason: "blocker-placeholder-recovery" }); } catch (e) { logWarning("recovery", `appendEvent failed for slice recovery: ${e instanceof Error ? e.message : String(e)}`); }
|
|
534
585
|
}
|
|
586
|
+
// Insert a placeholder complete slice so deriveState sees activeMilestoneSlices.length > 0
|
|
587
|
+
// and exits the pre-planning phase. Without this, activeMilestoneSlices stays empty
|
|
588
|
+
// after the blocker ROADMAP.md is written, causing deriveState to return phase:'pre-planning'
|
|
589
|
+
// indefinitely and re-dispatching plan-milestone in an infinite loop (#4378).
|
|
590
|
+
if (unitType === "plan-milestone" && mid) {
|
|
591
|
+
try {
|
|
592
|
+
insertSlice({ id: "S00-blocker", milestoneId: mid, title: "Blocker placeholder — planning failed", status: "complete", sequence: 0 });
|
|
593
|
+
} catch (e) { logWarning("recovery", `insertSlice placeholder failed for plan-milestone recovery: ${e instanceof Error ? e.message : String(e)}`); }
|
|
594
|
+
try { appendEvent(base, { cmd: "plan-milestone", params: { milestoneId: mid }, ts, actor: "system", trigger_reason: "blocker-placeholder-recovery" }); } catch (e) { logWarning("recovery", `appendEvent failed for plan-milestone recovery: ${e instanceof Error ? e.message : String(e)}`); }
|
|
595
|
+
}
|
|
535
596
|
}
|
|
536
597
|
|
|
537
598
|
return diagnoseExpectedArtifact(unitType, unitId, base);
|
|
@@ -61,7 +61,8 @@ import { restoreHookState, resetHookState } from "./post-unit-hooks.js";
|
|
|
61
61
|
import { resetProactiveHealing, setLevelChangeCallback } from "./doctor-proactive.js";
|
|
62
62
|
import { snapshotSkills } from "./skill-discovery.js";
|
|
63
63
|
import { isDbAvailable, getMilestone, openDatabase, getDbStatus } from "./gsd-db.js";
|
|
64
|
-
import {
|
|
64
|
+
import { isClosedStatus } from "./status-guards.js";
|
|
65
|
+
|
|
65
66
|
import {
|
|
66
67
|
debugLog,
|
|
67
68
|
enableDebug,
|
|
@@ -419,16 +420,29 @@ export async function bootstrapAutoSession(
|
|
|
419
420
|
// Invalidate caches before initial state derivation
|
|
420
421
|
invalidateAllCaches();
|
|
421
422
|
|
|
422
|
-
// Clean stale runtime unit files for completed milestones (#887)
|
|
423
|
-
cleanStaleRuntimeUnits(
|
|
424
|
-
gsdRoot(base),
|
|
425
|
-
(mid) => !!resolveMilestoneFile(base, mid, "SUMMARY"),
|
|
426
|
-
);
|
|
427
|
-
|
|
428
423
|
// Open the project-root DB before deriveState so DB-backed state
|
|
429
424
|
// derivation (queue-order, task status) works on a cold start (#2841).
|
|
425
|
+
// Must happen before cleanStaleRuntimeUnits so the cleanup predicate can
|
|
426
|
+
// consult DB status and avoid clearing runtime units for milestones that
|
|
427
|
+
// only have a failure-path SUMMARY on disk (#4663).
|
|
430
428
|
await openProjectDbIfPresent(base);
|
|
431
429
|
|
|
430
|
+
// Clean stale runtime unit files for completed milestones (#887).
|
|
431
|
+
// DB-authoritative: when DB is available, require DB status to be closed
|
|
432
|
+
// before clearing runtime units. A SUMMARY file alone is no longer
|
|
433
|
+
// trusted as proof of completion (#4663). Fall back to SUMMARY-file
|
|
434
|
+
// presence only when DB is unavailable (legacy/pre-migration).
|
|
435
|
+
cleanStaleRuntimeUnits(
|
|
436
|
+
gsdRoot(base),
|
|
437
|
+
(mid) => {
|
|
438
|
+
if (isDbAvailable()) {
|
|
439
|
+
const row = getMilestone(mid);
|
|
440
|
+
return !!row && isClosedStatus(row.status);
|
|
441
|
+
}
|
|
442
|
+
return !!resolveMilestoneFile(base, mid, "SUMMARY");
|
|
443
|
+
},
|
|
444
|
+
);
|
|
445
|
+
|
|
432
446
|
// ── Orphaned milestone branch audit ──
|
|
433
447
|
// Catches completed milestones whose teardown (merge + branch delete)
|
|
434
448
|
// was lost due to session ending between completion and teardown.
|
|
@@ -553,37 +567,15 @@ export async function bootstrapAutoSession(
|
|
|
553
567
|
const { showSmartEntry } = await import("./guided-flow.js");
|
|
554
568
|
await showSmartEntry(ctx, pi, base, { step: requestedStepMode });
|
|
555
569
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
} else if (
|
|
566
|
-
postState.activeMilestone &&
|
|
567
|
-
postState.phase === "pre-planning"
|
|
568
|
-
) {
|
|
569
|
-
const contextFile = resolveMilestoneFile(
|
|
570
|
-
base,
|
|
571
|
-
postState.activeMilestone.id,
|
|
572
|
-
"CONTEXT",
|
|
573
|
-
);
|
|
574
|
-
const hasContext = !!(contextFile && (await loadFile(contextFile)));
|
|
575
|
-
if (hasContext) {
|
|
576
|
-
state = postState;
|
|
577
|
-
} else {
|
|
578
|
-
ctx.ui.notify(
|
|
579
|
-
"Discussion completed but no milestone context was written. Run /gsd to try the discussion again, or /gsd auto after creating the milestone manually.",
|
|
580
|
-
"warning",
|
|
581
|
-
);
|
|
582
|
-
return releaseLockAndReturn();
|
|
583
|
-
}
|
|
584
|
-
} else {
|
|
585
|
-
return releaseLockAndReturn();
|
|
586
|
-
}
|
|
570
|
+
// showSmartEntry dispatches via pi.sendMessage() which is fire-and-forget:
|
|
571
|
+
// it queues the message and returns immediately, before the LLM turn runs.
|
|
572
|
+
// Checking postState here would always see the pre-dispatch state, causing
|
|
573
|
+
// the premature "Discussion completed but..." warning (#3420).
|
|
574
|
+
//
|
|
575
|
+
// checkAutoStartAfterDiscuss (in guided-flow.ts) already handles re-entering
|
|
576
|
+
// auto-mode by calling startAutoDetached after the discussion completes.
|
|
577
|
+
// Release the lock and let the async dispatch proceed.
|
|
578
|
+
return releaseLockAndReturn();
|
|
587
579
|
}
|
|
588
580
|
|
|
589
581
|
// Active milestone exists but has no roadmap
|
|
@@ -595,17 +587,16 @@ export async function bootstrapAutoSession(
|
|
|
595
587
|
const { showSmartEntry } = await import("./guided-flow.js");
|
|
596
588
|
await showSmartEntry(ctx, pi, base, { step: requestedStepMode });
|
|
597
589
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
}
|
|
590
|
+
// showSmartEntry dispatches via pi.sendMessage() which is fire-and-forget:
|
|
591
|
+
// it queues the message and returns immediately, before the LLM turn runs.
|
|
592
|
+
// Checking postState here fires before the LLM has had a turn, so the
|
|
593
|
+
// pre-planning phase would still appear unchanged and a premature warning
|
|
594
|
+
// would be emitted (#3420).
|
|
595
|
+
//
|
|
596
|
+
// checkAutoStartAfterDiscuss (in guided-flow.ts) already handles re-entering
|
|
597
|
+
// auto-mode by calling startAutoDetached after the discussion completes.
|
|
598
|
+
// Release the lock and let the async dispatch proceed.
|
|
599
|
+
return releaseLockAndReturn();
|
|
609
600
|
}
|
|
610
601
|
}
|
|
611
602
|
|
|
@@ -824,9 +815,6 @@ export async function bootstrapAutoSession(
|
|
|
824
815
|
}
|
|
825
816
|
|
|
826
817
|
ctx.ui.setStatus("gsd-auto", s.stepMode ? "next" : "auto");
|
|
827
|
-
ctx.ui.setFooter(hideFooter);
|
|
828
|
-
// Hide gsd-health during AUTO — gsd-progress is the single source of truth
|
|
829
|
-
// for last-commit / cost / health signal while auto is running.
|
|
830
818
|
ctx.ui.setWidget("gsd-health", undefined);
|
|
831
819
|
const modeLabel = s.stepMode ? "Step-mode" : "Auto-mode";
|
|
832
820
|
const pendingCount = (state.registry ?? []).filter(
|
|
@@ -238,14 +238,6 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
|
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
function isProjectGsdSymlink(basePath: string): boolean {
|
|
242
|
-
try {
|
|
243
|
-
return lstatSyncFn(join(basePath, ".gsd")).isSymbolicLink();
|
|
244
|
-
} catch {
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
241
|
// ─── Build Artifact Auto-Resolve ─────────────────────────────────────────────
|
|
250
242
|
|
|
251
243
|
/** Patterns for machine-generated build artifacts that can be safely
|
|
@@ -1664,54 +1656,15 @@ export function mergeMilestoneToMain(
|
|
|
1664
1656
|
}
|
|
1665
1657
|
}
|
|
1666
1658
|
|
|
1667
|
-
// 7.
|
|
1668
|
-
// blocked by unrelated local changes (#2151). clearProjectRootStateFiles
|
|
1669
|
-
// only removes untracked .gsd/ files; tracked dirty files elsewhere (e.g.
|
|
1670
|
-
// .planning/work-state.json with stash conflict markers) are invisible to
|
|
1671
|
-
// that cleanup but will cause `git merge --squash` to reject.
|
|
1672
|
-
let stashed = false;
|
|
1673
|
-
try {
|
|
1674
|
-
const status = execFileSync("git", ["status", "--porcelain"], {
|
|
1675
|
-
cwd: originalBasePath_,
|
|
1676
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
1677
|
-
encoding: "utf-8",
|
|
1678
|
-
}).trim();
|
|
1679
|
-
if (status) {
|
|
1680
|
-
// Use --include-untracked to stash untracked files that would block
|
|
1681
|
-
// the squash merge, but EXCLUDE .gsd/milestones/ (#2505).
|
|
1682
|
-
// --include-untracked without exclusion sweeps queued milestone
|
|
1683
|
-
// CONTEXT files into the stash. If stash pop later fails, those files
|
|
1684
|
-
// are permanently trapped in the stash entry and lost on the next
|
|
1685
|
-
// stash push or drop.
|
|
1686
|
-
//
|
|
1687
|
-
// When `.gsd` itself is a symlink, Git rejects pathspecs below it
|
|
1688
|
-
// ("beyond a symbolic link"). In that layout, exclude the whole symlink
|
|
1689
|
-
// and keep stashing real project files that could block the merge.
|
|
1690
|
-
const stashPathspecs = isProjectGsdSymlink(originalBasePath_)
|
|
1691
|
-
? [".", ":(exclude).gsd"]
|
|
1692
|
-
: [":(exclude).gsd/milestones"];
|
|
1693
|
-
execFileSync(
|
|
1694
|
-
"git",
|
|
1695
|
-
[
|
|
1696
|
-
"stash", "push", "--include-untracked",
|
|
1697
|
-
"-m", `gsd: pre-merge stash for ${milestoneId}`,
|
|
1698
|
-
"--", ...stashPathspecs,
|
|
1699
|
-
],
|
|
1700
|
-
{ cwd: originalBasePath_, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
|
|
1701
|
-
);
|
|
1702
|
-
stashed = true;
|
|
1703
|
-
}
|
|
1704
|
-
} catch (err) {
|
|
1705
|
-
// Stash failure is non-fatal — proceed without stash and let the merge
|
|
1706
|
-
// report the dirty tree if it fails.
|
|
1707
|
-
logWarning("worktree", `git stash failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1708
|
-
}
|
|
1709
|
-
|
|
1710
|
-
// 7a. Shelter queued milestone directories before the squash merge (#2505).
|
|
1659
|
+
// 7. Shelter queued milestone directories before the squash merge (#2505).
|
|
1711
1660
|
// The milestone branch may contain copies of queued milestone dirs (via
|
|
1712
1661
|
// copyPlanningArtifacts), so `git merge --squash` rejects when those same
|
|
1713
1662
|
// files exist as untracked in the working tree. Temporarily move them to
|
|
1714
1663
|
// a backup location, then restore after the merge+commit.
|
|
1664
|
+
//
|
|
1665
|
+
// MUST run BEFORE the pre-merge stash (step 7a) so `--include-untracked`
|
|
1666
|
+
// does not sweep queued CONTEXT files into the stash. If stash pop later
|
|
1667
|
+
// fails, files trapped inside the stash are permanently lost (#2505).
|
|
1715
1668
|
const milestonesDir = join(gsdRoot(originalBasePath_), "milestones");
|
|
1716
1669
|
const shelterDir = join(gsdRoot(originalBasePath_), ".milestone-shelter");
|
|
1717
1670
|
const shelteredDirs: string[] = [];
|
|
@@ -1759,6 +1712,35 @@ export function mergeMilestoneToMain(
|
|
|
1759
1712
|
logWarning("worktree", `milestone shelter operation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1760
1713
|
}
|
|
1761
1714
|
|
|
1715
|
+
// 7a. Stash pre-existing dirty files so the squash merge is not blocked by
|
|
1716
|
+
// unrelated local changes (#2151). Includes untracked files to handle
|
|
1717
|
+
// locally-added files that conflict with tracked files on the milestone
|
|
1718
|
+
// branch. Passing NO pathspec lets git skip gitignored paths silently;
|
|
1719
|
+
// adding an explicit pathspec trips a `git add`-style fatal on ignored
|
|
1720
|
+
// entries (e.g. a gitignored `.gsd` symlink under ADR-002) (#4573).
|
|
1721
|
+
// Queued CONTEXT files under `.gsd/milestones/*` are already sheltered
|
|
1722
|
+
// in step 7 above, so they won't be swept into the stash.
|
|
1723
|
+
let stashed = false;
|
|
1724
|
+
try {
|
|
1725
|
+
const status = execFileSync("git", ["status", "--porcelain"], {
|
|
1726
|
+
cwd: originalBasePath_,
|
|
1727
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
1728
|
+
encoding: "utf-8",
|
|
1729
|
+
}).trim();
|
|
1730
|
+
if (status) {
|
|
1731
|
+
execFileSync(
|
|
1732
|
+
"git",
|
|
1733
|
+
["stash", "push", "--include-untracked", "-m", `gsd: pre-merge stash for ${milestoneId}`],
|
|
1734
|
+
{ cwd: originalBasePath_, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
|
|
1735
|
+
);
|
|
1736
|
+
stashed = true;
|
|
1737
|
+
}
|
|
1738
|
+
} catch (err) {
|
|
1739
|
+
// Stash failure is non-fatal — proceed without stash and let the merge
|
|
1740
|
+
// report the dirty tree if it fails.
|
|
1741
|
+
logWarning("worktree", `git stash failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1742
|
+
}
|
|
1743
|
+
|
|
1762
1744
|
// 7b. Clean up stale merge state before attempting squash merge (#2912).
|
|
1763
1745
|
// A leftover MERGE_HEAD (from a previous failed merge, libgit2 native path,
|
|
1764
1746
|
// or interrupted operation) causes `git merge --squash` to refuse with
|
|
@@ -2012,21 +1994,38 @@ export function mergeMilestoneToMain(
|
|
|
2012
1994
|
// When a milestone only produced .gsd/ metadata (summaries, roadmaps) but no
|
|
2013
1995
|
// real code, the user sees "milestone complete" but nothing changed in their
|
|
2014
1996
|
// codebase. Surface this so the caller can warn the user.
|
|
1997
|
+
//
|
|
1998
|
+
// Bug #4385 fix: use `git diff-tree --root` instead of `git diff HEAD~1 HEAD`.
|
|
1999
|
+
// `HEAD~1` does not exist on initial commits and is unreliable on shallow clones
|
|
2000
|
+
// and merge commits. `diff-tree --root` handles all three cases correctly.
|
|
2001
|
+
// The empty-tree hash (4b825dc…) is the universal fallback for refs that don't exist.
|
|
2002
|
+
const GIT_EMPTY_TREE = "4b825dc642cb6eb9a060e54bf8d69288fbee4904";
|
|
2015
2003
|
let codeFilesChanged = false;
|
|
2016
2004
|
if (!nothingToCommit) {
|
|
2017
2005
|
try {
|
|
2018
|
-
const
|
|
2019
|
-
|
|
2020
|
-
"HEAD
|
|
2021
|
-
"
|
|
2022
|
-
);
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
);
|
|
2006
|
+
const diffTreeOutput = execFileSync(
|
|
2007
|
+
"git",
|
|
2008
|
+
["diff-tree", "--root", "--no-commit-id", "-r", "--name-only", "HEAD"],
|
|
2009
|
+
{ cwd: originalBasePath_, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
|
|
2010
|
+
).trim();
|
|
2011
|
+
const mergedFiles = diffTreeOutput ? diffTreeOutput.split("\n").filter(Boolean) : [];
|
|
2012
|
+
codeFilesChanged = mergedFiles.some((f) => !f.startsWith(".gsd/"));
|
|
2026
2013
|
} catch (e) {
|
|
2027
|
-
//
|
|
2028
|
-
|
|
2029
|
-
|
|
2014
|
+
// diff-tree failed (e.g. unborn HEAD in a brand-new repo) — fall back to
|
|
2015
|
+
// comparing against the empty tree so initial-commit repos still report changes.
|
|
2016
|
+
try {
|
|
2017
|
+
const fallbackOutput = execFileSync(
|
|
2018
|
+
"git",
|
|
2019
|
+
["diff", "--name-only", GIT_EMPTY_TREE, "HEAD"],
|
|
2020
|
+
{ cwd: originalBasePath_, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
|
|
2021
|
+
).trim();
|
|
2022
|
+
const fallbackFiles = fallbackOutput ? fallbackOutput.split("\n").filter(Boolean) : [];
|
|
2023
|
+
codeFilesChanged = fallbackFiles.some((f) => !f.startsWith(".gsd/"));
|
|
2024
|
+
} catch {
|
|
2025
|
+
// Truly unable to determine — assume code was changed to avoid silent data loss
|
|
2026
|
+
logWarning("worktree", `diff-tree and empty-tree fallback both failed (assuming code changed): ${(e as Error).message}`);
|
|
2027
|
+
codeFilesChanged = true;
|
|
2028
|
+
}
|
|
2030
2029
|
}
|
|
2031
2030
|
}
|
|
2032
2031
|
|