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
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pre-exec-gate-loop.test.ts — Regression tests for #4551.
|
|
3
|
+
*
|
|
4
|
+
* Verifies that when a pre-execution gate fails on a plan-slice unit:
|
|
5
|
+
* 1. `s.lastPreExecFailure` is populated on the AutoSession with the blocking
|
|
6
|
+
* findings and a verdict excerpt.
|
|
7
|
+
* 2. The `planning → plan-slice` dispatch rule reads that field and injects a
|
|
8
|
+
* "Fix these specific issues" section into the prompt.
|
|
9
|
+
* 3. The field is cleared (consumed) after the prompt is built so that stale
|
|
10
|
+
* context does not bleed into an unrelated future plan-slice run.
|
|
11
|
+
* 4. When the failure belongs to a *different* unit ID, the dispatch rule
|
|
12
|
+
* does NOT inject the stale context into the prompt.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import test from "node:test";
|
|
16
|
+
import assert from "node:assert/strict";
|
|
17
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { tmpdir } from "node:os";
|
|
20
|
+
|
|
21
|
+
import { AutoSession } from "../auto/session.ts";
|
|
22
|
+
import { resolveDispatch } from "../auto-dispatch.ts";
|
|
23
|
+
import type { DispatchContext } from "../auto-dispatch.ts";
|
|
24
|
+
import { buildPlanSlicePrompt } from "../auto-prompts.ts";
|
|
25
|
+
import {
|
|
26
|
+
openDatabase,
|
|
27
|
+
closeDatabase,
|
|
28
|
+
insertMilestone,
|
|
29
|
+
insertSlice,
|
|
30
|
+
insertTask,
|
|
31
|
+
} from "../gsd-db.ts";
|
|
32
|
+
import { deriveStateFromDb } from "../state.ts";
|
|
33
|
+
import { _clearGsdRootCache } from "../paths.ts";
|
|
34
|
+
import { invalidateAllCaches } from "../cache.ts";
|
|
35
|
+
|
|
36
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
37
|
+
|
|
38
|
+
function makeTempBase(): string {
|
|
39
|
+
const base = mkdtempSync(join(tmpdir(), "gsd-4551-"));
|
|
40
|
+
mkdirSync(join(base, ".gsd", "milestones", "M001", "slices", "S01"), { recursive: true });
|
|
41
|
+
mkdirSync(join(base, ".gsd", "milestones", "M001", "slices", "S01", "tasks"), { recursive: true });
|
|
42
|
+
return base;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function seedPlanningState(base: string): void {
|
|
46
|
+
openDatabase(join(base, ".gsd", "gsd.db"));
|
|
47
|
+
insertMilestone({ id: "M001", title: "Test Milestone", status: "active" });
|
|
48
|
+
insertSlice({
|
|
49
|
+
id: "S01",
|
|
50
|
+
milestoneId: "M001",
|
|
51
|
+
title: "Core Slice",
|
|
52
|
+
status: "pending",
|
|
53
|
+
risk: "medium",
|
|
54
|
+
depends: [],
|
|
55
|
+
demo: "demo",
|
|
56
|
+
sequence: 1,
|
|
57
|
+
isSketch: false,
|
|
58
|
+
});
|
|
59
|
+
// Write minimal ROADMAP so state derivation doesn't error
|
|
60
|
+
writeFileSync(
|
|
61
|
+
join(base, ".gsd", "milestones", "M001", "M001-ROADMAP.md"),
|
|
62
|
+
"# Roadmap\n",
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function cleanup(base: string, originalCwd: string): void {
|
|
67
|
+
try { closeDatabase(); } catch { /* noop */ }
|
|
68
|
+
try { process.chdir(originalCwd); } catch { /* noop */ }
|
|
69
|
+
try { rmSync(base, { recursive: true, force: true }); } catch { /* noop */ }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ─── Tests ────────────────────────────────────────────────────────────────────
|
|
73
|
+
|
|
74
|
+
test("#4551: AutoSession.lastPreExecFailure defaults to null", () => {
|
|
75
|
+
const s = new AutoSession();
|
|
76
|
+
assert.equal(s.lastPreExecFailure, null, "lastPreExecFailure must start null");
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test("#4551: AutoSession.reset() clears lastPreExecFailure", () => {
|
|
80
|
+
const s = new AutoSession();
|
|
81
|
+
s.lastPreExecFailure = {
|
|
82
|
+
unitId: "M001/S01",
|
|
83
|
+
blockingFindings: ["[file] src/foo.ts: file not found"],
|
|
84
|
+
verdictExcerpt: "status=fail; 1 blocking issue detected",
|
|
85
|
+
};
|
|
86
|
+
s.reset();
|
|
87
|
+
assert.equal(s.lastPreExecFailure, null, "reset() must clear lastPreExecFailure");
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test("#4551: buildPlanSlicePrompt injects fix section when priorPreExecFailure provided", async (t) => {
|
|
91
|
+
const originalCwd = process.cwd();
|
|
92
|
+
const base = makeTempBase();
|
|
93
|
+
t.after(() => cleanup(base, originalCwd));
|
|
94
|
+
|
|
95
|
+
seedPlanningState(base);
|
|
96
|
+
process.chdir(base);
|
|
97
|
+
_clearGsdRootCache();
|
|
98
|
+
invalidateAllCaches();
|
|
99
|
+
|
|
100
|
+
const prompt = await buildPlanSlicePrompt(
|
|
101
|
+
"M001", "Test Milestone", "S01", "Core Slice", base,
|
|
102
|
+
undefined,
|
|
103
|
+
{
|
|
104
|
+
priorPreExecFailure: {
|
|
105
|
+
blockingFindings: [
|
|
106
|
+
"[file] src/utils/helper.ts: file not found",
|
|
107
|
+
"[package] nonexistent-pkg: package not found on npm",
|
|
108
|
+
],
|
|
109
|
+
verdictExcerpt: "status=fail; 2 blocking issues detected",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
assert.ok(
|
|
115
|
+
prompt.includes("Fix these specific issues from the prior pre-exec check"),
|
|
116
|
+
"prompt must contain the fix section heading",
|
|
117
|
+
);
|
|
118
|
+
assert.ok(
|
|
119
|
+
prompt.includes("src/utils/helper.ts: file not found"),
|
|
120
|
+
"prompt must include the specific file finding",
|
|
121
|
+
);
|
|
122
|
+
assert.ok(
|
|
123
|
+
prompt.includes("nonexistent-pkg: package not found on npm"),
|
|
124
|
+
"prompt must include the specific package finding",
|
|
125
|
+
);
|
|
126
|
+
assert.ok(
|
|
127
|
+
prompt.includes("status=fail; 2 blocking issues detected"),
|
|
128
|
+
"prompt must include the verdict excerpt",
|
|
129
|
+
);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test("#4551: buildPlanSlicePrompt with no priorPreExecFailure does NOT include fix section", async (t) => {
|
|
133
|
+
const originalCwd = process.cwd();
|
|
134
|
+
const base = makeTempBase();
|
|
135
|
+
t.after(() => cleanup(base, originalCwd));
|
|
136
|
+
|
|
137
|
+
seedPlanningState(base);
|
|
138
|
+
process.chdir(base);
|
|
139
|
+
_clearGsdRootCache();
|
|
140
|
+
invalidateAllCaches();
|
|
141
|
+
|
|
142
|
+
const prompt = await buildPlanSlicePrompt(
|
|
143
|
+
"M001", "Test Milestone", "S01", "Core Slice", base,
|
|
144
|
+
undefined,
|
|
145
|
+
{ /* no priorPreExecFailure */ },
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
assert.ok(
|
|
149
|
+
!prompt.includes("Fix these specific issues from the prior pre-exec check"),
|
|
150
|
+
"prompt must NOT include the fix section when no failure context is given",
|
|
151
|
+
);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
test("#4551: dispatch rule injects failure context and clears session field", async (t) => {
|
|
155
|
+
const originalCwd = process.cwd();
|
|
156
|
+
const base = makeTempBase();
|
|
157
|
+
t.after(() => cleanup(base, originalCwd));
|
|
158
|
+
|
|
159
|
+
seedPlanningState(base);
|
|
160
|
+
// Write a RESEARCH file so the dispatch rule skips research-slice and reaches
|
|
161
|
+
// plan-slice (which is the phase we're testing).
|
|
162
|
+
writeFileSync(
|
|
163
|
+
join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-RESEARCH.md"),
|
|
164
|
+
"# Research\n",
|
|
165
|
+
);
|
|
166
|
+
process.chdir(base);
|
|
167
|
+
_clearGsdRootCache();
|
|
168
|
+
invalidateAllCaches();
|
|
169
|
+
|
|
170
|
+
const state = await deriveStateFromDb(base);
|
|
171
|
+
assert.equal(state.phase, "planning", "state must be in planning phase");
|
|
172
|
+
|
|
173
|
+
const session = new AutoSession();
|
|
174
|
+
session.basePath = base;
|
|
175
|
+
session.active = true;
|
|
176
|
+
session.lastPreExecFailure = {
|
|
177
|
+
unitId: "M001/S01",
|
|
178
|
+
blockingFindings: ["[file] src/missing.ts: file not found"],
|
|
179
|
+
verdictExcerpt: "status=fail; 1 blocking issue detected",
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const ctx: DispatchContext = {
|
|
183
|
+
basePath: base,
|
|
184
|
+
mid: "M001",
|
|
185
|
+
midTitle: "Test Milestone",
|
|
186
|
+
state,
|
|
187
|
+
prefs: { phases: { reassess_after_slice: false, skip_research: true } } as any,
|
|
188
|
+
session,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const result = await resolveDispatch(ctx);
|
|
192
|
+
assert.equal(result.action, "dispatch", "must dispatch a unit");
|
|
193
|
+
if (result.action !== "dispatch") throw new Error("unreachable");
|
|
194
|
+
assert.equal(result.unitType, "plan-slice", "must be a plan-slice unit");
|
|
195
|
+
|
|
196
|
+
// The fix section must appear in the prompt
|
|
197
|
+
assert.ok(
|
|
198
|
+
result.prompt.includes("Fix these specific issues from the prior pre-exec check"),
|
|
199
|
+
"dispatched prompt must include the fix section",
|
|
200
|
+
);
|
|
201
|
+
assert.ok(
|
|
202
|
+
result.prompt.includes("src/missing.ts: file not found"),
|
|
203
|
+
"dispatched prompt must include the specific blocking finding",
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
// Field must be cleared after consumption
|
|
207
|
+
assert.equal(
|
|
208
|
+
session.lastPreExecFailure,
|
|
209
|
+
null,
|
|
210
|
+
"lastPreExecFailure must be cleared after being consumed by the dispatch rule",
|
|
211
|
+
);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
test("#4551: dispatch rule does NOT inject stale failure for a different slice", async (t) => {
|
|
215
|
+
const originalCwd = process.cwd();
|
|
216
|
+
const base = makeTempBase();
|
|
217
|
+
t.after(() => cleanup(base, originalCwd));
|
|
218
|
+
|
|
219
|
+
seedPlanningState(base);
|
|
220
|
+
// Write a RESEARCH file so dispatch reaches plan-slice, making the assertion
|
|
221
|
+
// about the prompt meaningful (we can check it's a plan-slice prompt without
|
|
222
|
+
// the fix section rather than a research-slice prompt without it).
|
|
223
|
+
writeFileSync(
|
|
224
|
+
join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-RESEARCH.md"),
|
|
225
|
+
"# Research\n",
|
|
226
|
+
);
|
|
227
|
+
process.chdir(base);
|
|
228
|
+
_clearGsdRootCache();
|
|
229
|
+
invalidateAllCaches();
|
|
230
|
+
|
|
231
|
+
const state = await deriveStateFromDb(base);
|
|
232
|
+
|
|
233
|
+
const session = new AutoSession();
|
|
234
|
+
session.basePath = base;
|
|
235
|
+
session.active = true;
|
|
236
|
+
// Failure belongs to a different slice (S02), not the active one (S01)
|
|
237
|
+
session.lastPreExecFailure = {
|
|
238
|
+
unitId: "M001/S02",
|
|
239
|
+
blockingFindings: ["[file] src/other.ts: file not found"],
|
|
240
|
+
verdictExcerpt: "status=fail; 1 blocking issue detected",
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
const ctx: DispatchContext = {
|
|
244
|
+
basePath: base,
|
|
245
|
+
mid: "M001",
|
|
246
|
+
midTitle: "Test Milestone",
|
|
247
|
+
state,
|
|
248
|
+
prefs: { phases: { reassess_after_slice: false, skip_research: true } } as any,
|
|
249
|
+
session,
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
const result = await resolveDispatch(ctx);
|
|
253
|
+
assert.equal(result.action, "dispatch");
|
|
254
|
+
if (result.action !== "dispatch") throw new Error("unreachable");
|
|
255
|
+
|
|
256
|
+
// The stale fix section must NOT appear
|
|
257
|
+
assert.ok(
|
|
258
|
+
!result.prompt.includes("Fix these specific issues from the prior pre-exec check"),
|
|
259
|
+
"prompt must NOT include fix section for a mismatched unit ID",
|
|
260
|
+
);
|
|
261
|
+
assert.ok(
|
|
262
|
+
!result.prompt.includes("src/other.ts"),
|
|
263
|
+
"prompt must NOT include findings from a different slice",
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
// Field must remain untouched (not consumed)
|
|
267
|
+
assert.notEqual(
|
|
268
|
+
session.lastPreExecFailure,
|
|
269
|
+
null,
|
|
270
|
+
"lastPreExecFailure must NOT be cleared when unit IDs don't match",
|
|
271
|
+
);
|
|
272
|
+
});
|
|
@@ -1599,6 +1599,221 @@ describe("checkTaskOrdering directory inputs (#4446)", () => {
|
|
|
1599
1599
|
});
|
|
1600
1600
|
});
|
|
1601
1601
|
|
|
1602
|
+
// ─── Regression Tests: checkTaskOrdering false positive for pre-execution refs (#4071) ──
|
|
1603
|
+
|
|
1604
|
+
describe("checkTaskOrdering false positive for pre-execution refs (#4071)", () => {
|
|
1605
|
+
test("completed task at higher index does not trigger ordering violation for its outputs", () => {
|
|
1606
|
+
// Scenario: after a replan, a completed task at higher array index has already
|
|
1607
|
+
// created a file. A new earlier-sequence task reads that file. Since the
|
|
1608
|
+
// completed task already ran, its output is available regardless of disk state.
|
|
1609
|
+
// checkTaskOrdering must not flag this as a sequence violation.
|
|
1610
|
+
const tasks = [
|
|
1611
|
+
createTask({
|
|
1612
|
+
id: "T_NEW",
|
|
1613
|
+
sequence: 1,
|
|
1614
|
+
status: "pending",
|
|
1615
|
+
inputs: ["artifacts/setup.json"],
|
|
1616
|
+
expected_output: [],
|
|
1617
|
+
}),
|
|
1618
|
+
createTask({
|
|
1619
|
+
id: "T_SETUP",
|
|
1620
|
+
sequence: 5,
|
|
1621
|
+
status: "completed",
|
|
1622
|
+
inputs: [],
|
|
1623
|
+
expected_output: ["artifacts/setup.json"],
|
|
1624
|
+
}),
|
|
1625
|
+
];
|
|
1626
|
+
|
|
1627
|
+
const results = checkTaskOrdering(tasks, "/tmp");
|
|
1628
|
+
assert.equal(
|
|
1629
|
+
results.length,
|
|
1630
|
+
0,
|
|
1631
|
+
"completed task outputs must not trigger ordering violations for earlier-sequence tasks that read them",
|
|
1632
|
+
);
|
|
1633
|
+
});
|
|
1634
|
+
|
|
1635
|
+
test("pending task at higher index still triggers ordering violation", () => {
|
|
1636
|
+
// A PENDING task at higher index creating a file is a real violation.
|
|
1637
|
+
// Only completed tasks get the exemption.
|
|
1638
|
+
const tasks = [
|
|
1639
|
+
createTask({
|
|
1640
|
+
id: "T01",
|
|
1641
|
+
sequence: 1,
|
|
1642
|
+
status: "pending",
|
|
1643
|
+
inputs: ["artifacts/output.json"],
|
|
1644
|
+
expected_output: [],
|
|
1645
|
+
}),
|
|
1646
|
+
createTask({
|
|
1647
|
+
id: "T02",
|
|
1648
|
+
sequence: 5,
|
|
1649
|
+
status: "pending",
|
|
1650
|
+
inputs: [],
|
|
1651
|
+
expected_output: ["artifacts/output.json"],
|
|
1652
|
+
}),
|
|
1653
|
+
];
|
|
1654
|
+
|
|
1655
|
+
const results = checkTaskOrdering(tasks, "/tmp");
|
|
1656
|
+
assert.equal(
|
|
1657
|
+
results.length,
|
|
1658
|
+
1,
|
|
1659
|
+
"pending task at higher index must still be flagged as ordering violation",
|
|
1660
|
+
);
|
|
1661
|
+
assert.equal(results[0].blocking, true);
|
|
1662
|
+
assert.ok(results[0].message.includes("T01"));
|
|
1663
|
+
assert.ok(results[0].message.includes("T02"));
|
|
1664
|
+
assert.ok(results[0].message.includes("sequence violation"));
|
|
1665
|
+
});
|
|
1666
|
+
|
|
1667
|
+
test("pending-first then completed-later: completed replaces pending in fileCreators (#4572)", () => {
|
|
1668
|
+
// Regression for CodeRabbit Major finding on PR #4572:
|
|
1669
|
+
// fileCreators only stored the FIRST task for a given path. If a PENDING task at
|
|
1670
|
+
// array index 1 was registered first, and a COMPLETED task at array index 2 also
|
|
1671
|
+
// declared the same output path, the completed entry was discarded. Line ~529 then
|
|
1672
|
+
// saw a pending creator with index > i and incorrectly fired a sequence violation
|
|
1673
|
+
// for the reader at array index 0.
|
|
1674
|
+
//
|
|
1675
|
+
// Scenario: path first declared by pending task (index 1), then by completed task
|
|
1676
|
+
// (index 2). Reader is at index 0. Without the fix a violation fires; with the fix
|
|
1677
|
+
// the completed entry replaces the pending entry and grants the exemption.
|
|
1678
|
+
const tasks = [
|
|
1679
|
+
// array index 0 — reads the shared path
|
|
1680
|
+
createTask({
|
|
1681
|
+
id: "T_READER",
|
|
1682
|
+
sequence: 1,
|
|
1683
|
+
status: "pending",
|
|
1684
|
+
inputs: ["shared/artifact.json"],
|
|
1685
|
+
expected_output: [],
|
|
1686
|
+
}),
|
|
1687
|
+
// array index 1 — pending producer (visited first during map build)
|
|
1688
|
+
createTask({
|
|
1689
|
+
id: "T_PENDING_PRODUCER",
|
|
1690
|
+
sequence: 5,
|
|
1691
|
+
status: "pending",
|
|
1692
|
+
inputs: [],
|
|
1693
|
+
expected_output: ["shared/artifact.json"],
|
|
1694
|
+
}),
|
|
1695
|
+
// array index 2 — completed producer (visited second; must replace pending entry)
|
|
1696
|
+
createTask({
|
|
1697
|
+
id: "T_COMPLETED_PRODUCER",
|
|
1698
|
+
sequence: 2,
|
|
1699
|
+
status: "completed",
|
|
1700
|
+
inputs: [],
|
|
1701
|
+
expected_output: ["shared/artifact.json"],
|
|
1702
|
+
}),
|
|
1703
|
+
];
|
|
1704
|
+
|
|
1705
|
+
// Without the fix: creator = T_PENDING_PRODUCER (index 1), !creator.completed && 1 > 0 → violation.
|
|
1706
|
+
// With the fix: creator = T_COMPLETED_PRODUCER (index 2), creator.completed → no violation.
|
|
1707
|
+
const results = checkTaskOrdering(tasks, "/tmp");
|
|
1708
|
+
assert.equal(
|
|
1709
|
+
results.length,
|
|
1710
|
+
0,
|
|
1711
|
+
"completed producer must replace pending producer in fileCreators and suppress false violation",
|
|
1712
|
+
);
|
|
1713
|
+
});
|
|
1714
|
+
|
|
1715
|
+
test("completed task output exemption applies regardless of whether file exists on disk", (t) => {
|
|
1716
|
+
// The completed-task exemption must work even when the file is not on disk
|
|
1717
|
+
// (e.g., the file was a temporary artifact that was cleaned up after the task ran).
|
|
1718
|
+
const tempDir = join(tmpdir(), `pre-exec-completed-task-${Date.now()}`);
|
|
1719
|
+
mkdirSync(tempDir, { recursive: true });
|
|
1720
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1721
|
+
|
|
1722
|
+
// File deliberately NOT created on disk — completed task ran in a prior session
|
|
1723
|
+
const tasks = [
|
|
1724
|
+
createTask({
|
|
1725
|
+
id: "T_MAIN",
|
|
1726
|
+
sequence: 0,
|
|
1727
|
+
status: "pending",
|
|
1728
|
+
inputs: ["generated/config.json"],
|
|
1729
|
+
expected_output: [],
|
|
1730
|
+
}),
|
|
1731
|
+
createTask({
|
|
1732
|
+
id: "T_INIT",
|
|
1733
|
+
sequence: 10,
|
|
1734
|
+
status: "completed",
|
|
1735
|
+
inputs: [],
|
|
1736
|
+
expected_output: ["generated/config.json"],
|
|
1737
|
+
}),
|
|
1738
|
+
];
|
|
1739
|
+
|
|
1740
|
+
const results = checkTaskOrdering(tasks, tempDir);
|
|
1741
|
+
assert.equal(
|
|
1742
|
+
results.length,
|
|
1743
|
+
0,
|
|
1744
|
+
"completed task exemption must apply even when file is absent from disk",
|
|
1745
|
+
);
|
|
1746
|
+
});
|
|
1747
|
+
});
|
|
1748
|
+
|
|
1749
|
+
describe("checkFilePathConsistency completed-task output exemption (#4071)", () => {
|
|
1750
|
+
test("completed task at higher index does not cause false positive for file it produced", (t) => {
|
|
1751
|
+
// Parallel to the checkTaskOrdering fix: checkFilePathConsistency also uses
|
|
1752
|
+
// getExpectedOutputsUpTo which historically only looked at prior-index tasks.
|
|
1753
|
+
// A completed task at a higher index has already run and its outputs are available.
|
|
1754
|
+
const tempDir = join(tmpdir(), `pre-exec-fc-completed-${Date.now()}`);
|
|
1755
|
+
mkdirSync(tempDir, { recursive: true });
|
|
1756
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1757
|
+
|
|
1758
|
+
// File is NOT on disk — completed task ran in a prior session and file was cleaned
|
|
1759
|
+
const tasks = [
|
|
1760
|
+
createTask({
|
|
1761
|
+
id: "T_MAIN",
|
|
1762
|
+
sequence: 1,
|
|
1763
|
+
status: "pending",
|
|
1764
|
+
inputs: ["artifacts/config.json"],
|
|
1765
|
+
expected_output: [],
|
|
1766
|
+
}),
|
|
1767
|
+
createTask({
|
|
1768
|
+
id: "T_SETUP",
|
|
1769
|
+
sequence: 10,
|
|
1770
|
+
status: "completed",
|
|
1771
|
+
inputs: [],
|
|
1772
|
+
expected_output: ["artifacts/config.json"],
|
|
1773
|
+
}),
|
|
1774
|
+
];
|
|
1775
|
+
|
|
1776
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1777
|
+
assert.equal(
|
|
1778
|
+
results.length,
|
|
1779
|
+
0,
|
|
1780
|
+
"completed task at higher index should satisfy inputs of pending tasks that read its outputs",
|
|
1781
|
+
);
|
|
1782
|
+
});
|
|
1783
|
+
|
|
1784
|
+
test("pending task at higher index still causes a missing-file error", (t) => {
|
|
1785
|
+
const tempDir = join(tmpdir(), `pre-exec-fc-pending-${Date.now()}`);
|
|
1786
|
+
mkdirSync(tempDir, { recursive: true });
|
|
1787
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1788
|
+
|
|
1789
|
+
const tasks = [
|
|
1790
|
+
createTask({
|
|
1791
|
+
id: "T01",
|
|
1792
|
+
sequence: 1,
|
|
1793
|
+
status: "pending",
|
|
1794
|
+
inputs: ["artifacts/output.json"],
|
|
1795
|
+
expected_output: [],
|
|
1796
|
+
}),
|
|
1797
|
+
createTask({
|
|
1798
|
+
id: "T02",
|
|
1799
|
+
sequence: 10,
|
|
1800
|
+
status: "pending",
|
|
1801
|
+
inputs: [],
|
|
1802
|
+
expected_output: ["artifacts/output.json"],
|
|
1803
|
+
}),
|
|
1804
|
+
];
|
|
1805
|
+
|
|
1806
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1807
|
+
assert.equal(
|
|
1808
|
+
results.length,
|
|
1809
|
+
1,
|
|
1810
|
+
"pending task at higher index must still be flagged — the file is not available yet",
|
|
1811
|
+
);
|
|
1812
|
+
assert.equal(results[0].blocking, true);
|
|
1813
|
+
assert.equal(results[0].target, "artifacts/output.json");
|
|
1814
|
+
});
|
|
1815
|
+
});
|
|
1816
|
+
|
|
1602
1817
|
describe("checkFilePathConsistency self-referential inputs (#4459)", () => {
|
|
1603
1818
|
test("input that is also in the same task's expected_output is not blocking when missing on disk", (t) => {
|
|
1604
1819
|
const tempDir = join(tmpdir(), `pre-exec-self-output-${Date.now()}`);
|
|
@@ -1664,3 +1879,125 @@ describe("checkFilePathConsistency self-referential inputs (#4459)", () => {
|
|
|
1664
1879
|
);
|
|
1665
1880
|
});
|
|
1666
1881
|
});
|
|
1882
|
+
|
|
1883
|
+
// ─── Regression Tests: quote-wrapped inputs treated as literal paths (#3747) ──
|
|
1884
|
+
|
|
1885
|
+
describe("checkFilePathConsistency quote-wrapped annotation (#3747)", () => {
|
|
1886
|
+
test("double-quoted path annotation is stripped before path check", (t) => {
|
|
1887
|
+
// Plan documents sometimes emit `"src/foo.ts"` (double-quote wrapped) as an
|
|
1888
|
+
// input value. The checker must strip the quotes before checking existence so
|
|
1889
|
+
// it doesn't produce a false-positive "file not found" error.
|
|
1890
|
+
const tempDir = join(tmpdir(), `pre-exec-quote-${Date.now()}`);
|
|
1891
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1892
|
+
writeFileSync(join(tempDir, "src/foo.ts"), "// content");
|
|
1893
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1894
|
+
|
|
1895
|
+
const tasks = [
|
|
1896
|
+
createTask({
|
|
1897
|
+
id: "T01",
|
|
1898
|
+
inputs: ['"src/foo.ts"'],
|
|
1899
|
+
expected_output: [],
|
|
1900
|
+
}),
|
|
1901
|
+
];
|
|
1902
|
+
|
|
1903
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1904
|
+
assert.equal(
|
|
1905
|
+
results.length,
|
|
1906
|
+
0,
|
|
1907
|
+
"Double-quoted path should be stripped and resolved to the real file",
|
|
1908
|
+
);
|
|
1909
|
+
});
|
|
1910
|
+
|
|
1911
|
+
test("single-quoted path annotation is stripped before path check", (t) => {
|
|
1912
|
+
const tempDir = join(tmpdir(), `pre-exec-squote-${Date.now()}`);
|
|
1913
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1914
|
+
writeFileSync(join(tempDir, "src/bar.ts"), "// content");
|
|
1915
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1916
|
+
|
|
1917
|
+
const tasks = [
|
|
1918
|
+
createTask({
|
|
1919
|
+
id: "T01",
|
|
1920
|
+
inputs: ["'src/bar.ts'"],
|
|
1921
|
+
expected_output: [],
|
|
1922
|
+
}),
|
|
1923
|
+
];
|
|
1924
|
+
|
|
1925
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1926
|
+
assert.equal(
|
|
1927
|
+
results.length,
|
|
1928
|
+
0,
|
|
1929
|
+
"Single-quoted path should be stripped and resolved to the real file",
|
|
1930
|
+
);
|
|
1931
|
+
});
|
|
1932
|
+
|
|
1933
|
+
test("backtick-only wrapped path without annotation resolves correctly", (t) => {
|
|
1934
|
+
// The bare form `src/foo.ts` (no dash annotation) must also work
|
|
1935
|
+
const tempDir = join(tmpdir(), `pre-exec-backtick-bare-${Date.now()}`);
|
|
1936
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1937
|
+
writeFileSync(join(tempDir, "src/baz.ts"), "// content");
|
|
1938
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1939
|
+
|
|
1940
|
+
const tasks = [
|
|
1941
|
+
createTask({
|
|
1942
|
+
id: "T01",
|
|
1943
|
+
inputs: ["`src/baz.ts`"],
|
|
1944
|
+
expected_output: [],
|
|
1945
|
+
}),
|
|
1946
|
+
];
|
|
1947
|
+
|
|
1948
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1949
|
+
assert.equal(
|
|
1950
|
+
results.length,
|
|
1951
|
+
0,
|
|
1952
|
+
"Bare backtick-wrapped path should resolve to the real file",
|
|
1953
|
+
);
|
|
1954
|
+
});
|
|
1955
|
+
|
|
1956
|
+
test("prose value with spaces inside quotes is skipped (not a path)", () => {
|
|
1957
|
+
// "some description text" contains spaces — should not be checked as a path
|
|
1958
|
+
const tasks = [
|
|
1959
|
+
createTask({
|
|
1960
|
+
id: "T01",
|
|
1961
|
+
inputs: ['"some description text"'],
|
|
1962
|
+
expected_output: [],
|
|
1963
|
+
}),
|
|
1964
|
+
];
|
|
1965
|
+
|
|
1966
|
+
const results = checkFilePathConsistency(tasks, "/tmp");
|
|
1967
|
+
assert.equal(
|
|
1968
|
+
results.length,
|
|
1969
|
+
0,
|
|
1970
|
+
"Quoted prose with spaces should not be treated as a file path",
|
|
1971
|
+
);
|
|
1972
|
+
});
|
|
1973
|
+
|
|
1974
|
+
test("17-error scenario: mixed annotated inputs produce 0 blocking errors", (t) => {
|
|
1975
|
+
// Reproduces the M004-ej6j88/S07 scenario from issue #3747 where a plan with
|
|
1976
|
+
// multiple backtick- and quote-wrapped input strings causes 17 false blocking errors.
|
|
1977
|
+
const tempDir = join(tmpdir(), `pre-exec-3747-scenario-${Date.now()}`);
|
|
1978
|
+
mkdirSync(join(tempDir, "src"), { recursive: true });
|
|
1979
|
+
writeFileSync(join(tempDir, "src/foo.ts"), "// content");
|
|
1980
|
+
writeFileSync(join(tempDir, "src/bar.ts"), "// content");
|
|
1981
|
+
t.after(() => rmSync(tempDir, { recursive: true, force: true }));
|
|
1982
|
+
|
|
1983
|
+
const tasks = [
|
|
1984
|
+
createTask({
|
|
1985
|
+
id: "T01",
|
|
1986
|
+
inputs: [
|
|
1987
|
+
"`src/foo.ts`",
|
|
1988
|
+
'"src/bar.ts"',
|
|
1989
|
+
"some description text",
|
|
1990
|
+
"Existing enum definition",
|
|
1991
|
+
],
|
|
1992
|
+
expected_output: [],
|
|
1993
|
+
}),
|
|
1994
|
+
];
|
|
1995
|
+
|
|
1996
|
+
const results = checkFilePathConsistency(tasks, tempDir);
|
|
1997
|
+
assert.equal(
|
|
1998
|
+
results.length,
|
|
1999
|
+
0,
|
|
2000
|
+
"Annotated file paths and prose inputs should produce zero blocking errors",
|
|
2001
|
+
);
|
|
2002
|
+
});
|
|
2003
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Guard test — every key in KNOWN_PREFERENCE_KEYS must be reachable from the
|
|
2
|
+
// /gsd prefs wizard. Without this guard, a new preference can be added to the
|
|
3
|
+
// schema without anyone wiring it into the TUI, silently re-creating the gap
|
|
4
|
+
// this test exists to prevent.
|
|
5
|
+
|
|
6
|
+
import test from "node:test";
|
|
7
|
+
import assert from "node:assert/strict";
|
|
8
|
+
import { readFileSync } from "node:fs";
|
|
9
|
+
|
|
10
|
+
import { KNOWN_PREFERENCE_KEYS } from "../preferences-types.ts";
|
|
11
|
+
|
|
12
|
+
// Keys exposed via a dedicated command rather than the wizard. They're still
|
|
13
|
+
// reachable by the user, just not inside the category menu flow. If you add a
|
|
14
|
+
// new key here, add a comment explaining where it lives.
|
|
15
|
+
const EXPOSED_OUTSIDE_WIZARD = new Set<string>([
|
|
16
|
+
"version", // auto-managed by writePreferencesFile
|
|
17
|
+
"modelOverrides", // advanced routing — edit PREFERENCES.md directly (not in KNOWN_PREFERENCE_KEYS)
|
|
18
|
+
"context_mode", // advanced sandbox config (gsd_exec + compaction) — enabled by default; edit PREFERENCES.md directly to tune timeouts/caps. Wizard coverage tracked separately.
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
test("every KNOWN_PREFERENCE_KEYS entry is reachable from the wizard source", () => {
|
|
22
|
+
const src = readFileSync(
|
|
23
|
+
new URL("../commands-prefs-wizard.ts", import.meta.url),
|
|
24
|
+
"utf-8",
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const missing: string[] = [];
|
|
28
|
+
for (const key of KNOWN_PREFERENCE_KEYS) {
|
|
29
|
+
if (EXPOSED_OUTSIDE_WIZARD.has(key)) continue;
|
|
30
|
+
// The key must appear somewhere in the wizard — either as a direct
|
|
31
|
+
// prefs[...] / pref reference, or in the orderedKeys serialization list.
|
|
32
|
+
// A plain substring match is enough because all prefs-wizard references
|
|
33
|
+
// use the exact key name.
|
|
34
|
+
if (!src.includes(`"${key}"`) && !src.includes(`.${key}`)) {
|
|
35
|
+
missing.push(key);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
assert.deepEqual(
|
|
40
|
+
missing,
|
|
41
|
+
[],
|
|
42
|
+
`These preference keys are in KNOWN_PREFERENCE_KEYS but are not referenced anywhere in the /gsd prefs wizard — they cannot be configured through the UI. Either add wizard coverage or add them to EXPOSED_OUTSIDE_WIZARD with an explanatory comment:\n${missing.join("\n")}`,
|
|
43
|
+
);
|
|
44
|
+
});
|