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,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression tests for three false-positive sources in the safety harness.
|
|
3
|
+
* Issue #4385
|
|
4
|
+
*
|
|
5
|
+
* Bug 1: Hardcoded BASH_READ_ONLY_RE — new legitimate commands blocked
|
|
6
|
+
* Bug 2: Non-persisted evidence — session restart causes false positive on resume
|
|
7
|
+
* Bug 3: git diff HEAD~1 scope check — fails on initial commits / shallow clones
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import test from "node:test";
|
|
11
|
+
import assert from "node:assert/strict";
|
|
12
|
+
import { execFileSync } from "node:child_process";
|
|
13
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
14
|
+
import { tmpdir } from "node:os";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
|
|
17
|
+
import { shouldBlockQueueExecution } from "../bootstrap/write-gate.ts";
|
|
18
|
+
import {
|
|
19
|
+
resetEvidence,
|
|
20
|
+
recordToolCall,
|
|
21
|
+
getEvidence,
|
|
22
|
+
saveEvidenceToDisk,
|
|
23
|
+
loadEvidenceFromDisk,
|
|
24
|
+
} from "../safety/evidence-collector.ts";
|
|
25
|
+
import { validateFileChanges } from "../safety/file-change-validator.ts";
|
|
26
|
+
|
|
27
|
+
// ─── Bug 1: Hardcoded Bash allowlist ────────────────────────────────────────
|
|
28
|
+
|
|
29
|
+
test("safety-harness-bug1: npm commands are not blocked during queue mode", () => {
|
|
30
|
+
const r = shouldBlockQueueExecution("bash", "npm run test", true);
|
|
31
|
+
assert.strictEqual(r.block, false, "npm run test must be read-only-safe");
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test("safety-harness-bug1: npx commands are not blocked during queue mode", () => {
|
|
35
|
+
const r = shouldBlockQueueExecution("bash", "npx tsc --noEmit", true);
|
|
36
|
+
assert.strictEqual(r.block, false, "npx tsc --noEmit must pass");
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("safety-harness-bug1: tsx commands are not blocked during queue mode", () => {
|
|
40
|
+
const r = shouldBlockQueueExecution("bash", "tsx src/index.ts", true);
|
|
41
|
+
assert.strictEqual(
|
|
42
|
+
r.block,
|
|
43
|
+
false,
|
|
44
|
+
"tsx (TypeScript runner — read-only investigative) must pass",
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("safety-harness-bug1: node --print commands are not blocked during queue mode", () => {
|
|
49
|
+
const r = shouldBlockQueueExecution("bash", "node --print 'process.version'", true);
|
|
50
|
+
assert.strictEqual(r.block, false, "node --print must pass");
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("safety-harness-bug1: python read-only invocations are not blocked during queue mode", () => {
|
|
54
|
+
const r = shouldBlockQueueExecution("bash", "python -c 'import sys; print(sys.version)'", true);
|
|
55
|
+
assert.strictEqual(r.block, false, "python -c read-only must pass");
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test("safety-harness-bug1: jq read-only command is not blocked during queue mode", () => {
|
|
59
|
+
const r = shouldBlockQueueExecution("bash", "jq '.version' package.json", true);
|
|
60
|
+
assert.strictEqual(r.block, false, "jq (read-only JSON query) must pass");
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("safety-harness-bug1: destructive commands are still blocked during queue mode", () => {
|
|
64
|
+
const r = shouldBlockQueueExecution("bash", "rm -rf dist/", true);
|
|
65
|
+
assert.strictEqual(r.block, true, "rm -rf must still be blocked");
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// ─── Bug 2: Non-persisted evidence ──────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
test("safety-harness-bug2: evidence survives save/load round-trip (simulates session restart)", (t) => {
|
|
71
|
+
const base = mkdtempSync(join(tmpdir(), "gsd-evidence-persist-"));
|
|
72
|
+
t.after(() => rmSync(base, { recursive: true, force: true }));
|
|
73
|
+
|
|
74
|
+
resetEvidence();
|
|
75
|
+
|
|
76
|
+
// Simulate bash tool calls during unit execution
|
|
77
|
+
recordToolCall("tc-001", "Bash", { command: "npm run test:unit" });
|
|
78
|
+
recordToolCall("tc-002", "Bash", { command: "npx tsc --noEmit" });
|
|
79
|
+
recordToolCall("tc-003", "Write", { file_path: "src/foo.ts" });
|
|
80
|
+
|
|
81
|
+
const before = getEvidence();
|
|
82
|
+
assert.equal(before.length, 3, "three entries before save");
|
|
83
|
+
|
|
84
|
+
// Persist to disk
|
|
85
|
+
saveEvidenceToDisk(base, "M001", "S001", "T001");
|
|
86
|
+
|
|
87
|
+
// Simulate session restart: module-level array reset
|
|
88
|
+
resetEvidence();
|
|
89
|
+
assert.equal(getEvidence().length, 0, "in-memory cleared after reset");
|
|
90
|
+
|
|
91
|
+
// Resume: load from disk
|
|
92
|
+
loadEvidenceFromDisk(base, "M001", "S001", "T001");
|
|
93
|
+
|
|
94
|
+
const after = getEvidence();
|
|
95
|
+
assert.equal(after.length, 3, "evidence restored from disk after simulated restart");
|
|
96
|
+
|
|
97
|
+
const bashEntries = after.filter((e) => e.kind === "bash");
|
|
98
|
+
assert.equal(bashEntries.length, 2, "both bash entries restored");
|
|
99
|
+
|
|
100
|
+
const writeEntries = after.filter((e) => e.kind === "write");
|
|
101
|
+
assert.equal(writeEntries.length, 1, "write entry restored");
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
test("safety-harness-bug2: loadEvidenceFromDisk returns empty array when no file exists (fresh unit)", (t) => {
|
|
105
|
+
const base = mkdtempSync(join(tmpdir(), "gsd-evidence-nopersist-"));
|
|
106
|
+
t.after(() => rmSync(base, { recursive: true, force: true }));
|
|
107
|
+
|
|
108
|
+
resetEvidence();
|
|
109
|
+
loadEvidenceFromDisk(base, "M001", "S001", "T001");
|
|
110
|
+
assert.equal(getEvidence().length, 0, "no evidence on fresh unit is correct — not a false positive");
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// ─── Bug 3: git diff HEAD~1 scope check ─────────────────────────────────────
|
|
114
|
+
|
|
115
|
+
test("safety-harness-bug3: validateFileChanges works on initial commit (no HEAD~1)", (t) => {
|
|
116
|
+
const base = mkdtempSync(join(tmpdir(), "gsd-initial-commit-"));
|
|
117
|
+
t.after(() => rmSync(base, { recursive: true, force: true }));
|
|
118
|
+
|
|
119
|
+
execFileSync("git", ["init"], { cwd: base });
|
|
120
|
+
execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: base });
|
|
121
|
+
execFileSync("git", ["config", "user.name", "Test User"], { cwd: base });
|
|
122
|
+
|
|
123
|
+
writeFileSync(join(base, "index.ts"), "export const x = 1;\n");
|
|
124
|
+
execFileSync("git", ["add", "."], { cwd: base });
|
|
125
|
+
execFileSync("git", ["commit", "-m", "initial"], { cwd: base });
|
|
126
|
+
|
|
127
|
+
// On initial commit, HEAD~1 does not exist — must not throw or produce wrong results
|
|
128
|
+
const audit = validateFileChanges(base, ["index.ts"], []);
|
|
129
|
+
|
|
130
|
+
assert.ok(audit !== null, "audit must be produced for initial commit");
|
|
131
|
+
assert.deepEqual(audit!.unexpectedFiles, [], "no unexpected files on initial commit");
|
|
132
|
+
assert.deepEqual(audit!.missingFiles, [], "no missing files on initial commit");
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
test("safety-harness-bug3: validateFileChanges works on shallow clone (shallow repo without full history)", (t) => {
|
|
136
|
+
// Simulate shallow clone: create a repo, then clone it with depth=1
|
|
137
|
+
const origin = mkdtempSync(join(tmpdir(), "gsd-origin-"));
|
|
138
|
+
const shallow = mkdtempSync(join(tmpdir(), "gsd-shallow-"));
|
|
139
|
+
t.after(() => {
|
|
140
|
+
rmSync(origin, { recursive: true, force: true });
|
|
141
|
+
rmSync(shallow, { recursive: true, force: true });
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// Set up origin with multiple commits
|
|
145
|
+
execFileSync("git", ["init"], { cwd: origin });
|
|
146
|
+
execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: origin });
|
|
147
|
+
execFileSync("git", ["config", "user.name", "Test User"], { cwd: origin });
|
|
148
|
+
writeFileSync(join(origin, "a.ts"), "export const a = 1;\n");
|
|
149
|
+
execFileSync("git", ["add", "."], { cwd: origin });
|
|
150
|
+
execFileSync("git", ["commit", "-m", "first"], { cwd: origin });
|
|
151
|
+
writeFileSync(join(origin, "b.ts"), "export const b = 2;\n");
|
|
152
|
+
execFileSync("git", ["add", "."], { cwd: origin });
|
|
153
|
+
execFileSync("git", ["commit", "-m", "second"], { cwd: origin });
|
|
154
|
+
|
|
155
|
+
// Shallow clone with depth=1 — HEAD~1 will not exist
|
|
156
|
+
execFileSync("git", ["clone", "--depth=1", `file://${origin}`, shallow], {
|
|
157
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
// Verify the shallow clone has no parent (HEAD~1 unavailable)
|
|
161
|
+
let hasParent = true;
|
|
162
|
+
try {
|
|
163
|
+
execFileSync("git", ["rev-parse", "HEAD~1"], {
|
|
164
|
+
cwd: shallow,
|
|
165
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
166
|
+
});
|
|
167
|
+
} catch {
|
|
168
|
+
hasParent = false;
|
|
169
|
+
}
|
|
170
|
+
assert.equal(hasParent, false, "shallow clone should not have HEAD~1");
|
|
171
|
+
|
|
172
|
+
// validateFileChanges must not throw or give wrong results
|
|
173
|
+
const audit = validateFileChanges(shallow, ["b.ts"], []);
|
|
174
|
+
assert.ok(audit !== null, "audit must be produced even in shallow clone");
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
test("safety-harness-bug3: validateFileChanges works on merge commit", (t) => {
|
|
178
|
+
const base = mkdtempSync(join(tmpdir(), "gsd-merge-commit-"));
|
|
179
|
+
t.after(() => rmSync(base, { recursive: true, force: true }));
|
|
180
|
+
|
|
181
|
+
execFileSync("git", ["init", "-b", "main"], { cwd: base });
|
|
182
|
+
execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: base });
|
|
183
|
+
execFileSync("git", ["config", "user.name", "Test User"], { cwd: base });
|
|
184
|
+
|
|
185
|
+
// Main branch: initial commit
|
|
186
|
+
writeFileSync(join(base, "main.ts"), "export const m = 1;\n");
|
|
187
|
+
execFileSync("git", ["add", "."], { cwd: base });
|
|
188
|
+
execFileSync("git", ["commit", "-m", "initial"], { cwd: base });
|
|
189
|
+
|
|
190
|
+
// Feature branch
|
|
191
|
+
execFileSync("git", ["checkout", "-b", "feature"], { cwd: base });
|
|
192
|
+
writeFileSync(join(base, "feature.ts"), "export const f = 2;\n");
|
|
193
|
+
execFileSync("git", ["add", "."], { cwd: base });
|
|
194
|
+
execFileSync("git", ["commit", "-m", "feature work"], { cwd: base });
|
|
195
|
+
|
|
196
|
+
// Merge back to main
|
|
197
|
+
execFileSync("git", ["checkout", "main"], { cwd: base });
|
|
198
|
+
execFileSync("git", ["merge", "--no-ff", "feature", "-m", "Merge feature"], { cwd: base });
|
|
199
|
+
|
|
200
|
+
// HEAD is now a merge commit with two parents — git diff HEAD~1 gives wrong scope
|
|
201
|
+
const audit = validateFileChanges(base, ["feature.ts"], []);
|
|
202
|
+
|
|
203
|
+
// Must produce a valid result without throwing
|
|
204
|
+
assert.ok(audit !== null, "audit must be produced for merge commit repo");
|
|
205
|
+
});
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression test for issue #4591: SCHEMA_VERSION gap — v21 migration
|
|
3
|
+
* existed but the constant was never bumped from 20.
|
|
4
|
+
*
|
|
5
|
+
* Root cause: PR #4496 added the v21 migration block but left
|
|
6
|
+
* SCHEMA_VERSION = 20. Because migrateSchema() short-circuits when
|
|
7
|
+
* currentVersion >= SCHEMA_VERSION, a DB already at v20 would skip the
|
|
8
|
+
* v21 block entirely, leaving memories without the structured_fields
|
|
9
|
+
* column and no v21 stamp in schema_version.
|
|
10
|
+
*
|
|
11
|
+
* This file verifies the correct behaviour: opening a v20 DB must result
|
|
12
|
+
* in the structured_fields column being present and schema_version
|
|
13
|
+
* recording version 21.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import test from 'node:test';
|
|
17
|
+
import assert from 'node:assert/strict';
|
|
18
|
+
import * as fs from 'node:fs';
|
|
19
|
+
import * as path from 'node:path';
|
|
20
|
+
import * as os from 'node:os';
|
|
21
|
+
import { createRequire } from 'node:module';
|
|
22
|
+
|
|
23
|
+
import {
|
|
24
|
+
openDatabase,
|
|
25
|
+
closeDatabase,
|
|
26
|
+
_getAdapter,
|
|
27
|
+
} from '../gsd-db.ts';
|
|
28
|
+
|
|
29
|
+
const _require = createRequire(import.meta.url);
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Helpers
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
function makeTmp(): string {
|
|
36
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-v21-'));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function cleanup(base: string): void {
|
|
40
|
+
try { closeDatabase(); } catch { /* noop */ }
|
|
41
|
+
try { fs.rmSync(base, { recursive: true, force: true }); } catch { /* noop */ }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Create a minimal SQLite DB stamped at schema v20.
|
|
46
|
+
*
|
|
47
|
+
* The memories table intentionally omits the structured_fields column —
|
|
48
|
+
* that column is what the v21 migration adds. All other tables that exist
|
|
49
|
+
* after the v20 migration are present so that migrateSchema() can run
|
|
50
|
+
* without tripping over missing prerequisites.
|
|
51
|
+
*/
|
|
52
|
+
function createV20Db(dbPath: string): void {
|
|
53
|
+
const sqlite = _require('node:sqlite') as {
|
|
54
|
+
DatabaseSync: new (p: string) => {
|
|
55
|
+
exec(sql: string): void;
|
|
56
|
+
close(): void;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
const db = new sqlite.DatabaseSync(dbPath);
|
|
60
|
+
db.exec('PRAGMA journal_mode=WAL');
|
|
61
|
+
db.exec(`
|
|
62
|
+
CREATE TABLE schema_version (
|
|
63
|
+
version INTEGER NOT NULL,
|
|
64
|
+
applied_at TEXT NOT NULL
|
|
65
|
+
);
|
|
66
|
+
INSERT INTO schema_version (version, applied_at) VALUES (20, '2026-01-01T00:00:00.000Z');
|
|
67
|
+
|
|
68
|
+
CREATE TABLE decisions (
|
|
69
|
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
70
|
+
id TEXT NOT NULL UNIQUE,
|
|
71
|
+
when_context TEXT NOT NULL DEFAULT '',
|
|
72
|
+
scope TEXT NOT NULL DEFAULT '',
|
|
73
|
+
decision TEXT NOT NULL DEFAULT '',
|
|
74
|
+
choice TEXT NOT NULL DEFAULT '',
|
|
75
|
+
rationale TEXT NOT NULL DEFAULT '',
|
|
76
|
+
revisable TEXT NOT NULL DEFAULT '',
|
|
77
|
+
made_by TEXT NOT NULL DEFAULT 'agent',
|
|
78
|
+
source TEXT NOT NULL DEFAULT 'discussion',
|
|
79
|
+
superseded_by TEXT DEFAULT NULL
|
|
80
|
+
);
|
|
81
|
+
CREATE TABLE requirements (
|
|
82
|
+
id TEXT PRIMARY KEY,
|
|
83
|
+
class TEXT NOT NULL DEFAULT '',
|
|
84
|
+
status TEXT NOT NULL DEFAULT '',
|
|
85
|
+
description TEXT NOT NULL DEFAULT '',
|
|
86
|
+
why TEXT NOT NULL DEFAULT '',
|
|
87
|
+
source TEXT NOT NULL DEFAULT '',
|
|
88
|
+
primary_owner TEXT NOT NULL DEFAULT '',
|
|
89
|
+
supporting_slices TEXT NOT NULL DEFAULT '',
|
|
90
|
+
validation TEXT NOT NULL DEFAULT '',
|
|
91
|
+
notes TEXT NOT NULL DEFAULT '',
|
|
92
|
+
full_content TEXT NOT NULL DEFAULT '',
|
|
93
|
+
superseded_by TEXT DEFAULT NULL
|
|
94
|
+
);
|
|
95
|
+
CREATE TABLE artifacts (
|
|
96
|
+
path TEXT PRIMARY KEY,
|
|
97
|
+
artifact_type TEXT NOT NULL DEFAULT '',
|
|
98
|
+
milestone_id TEXT DEFAULT NULL,
|
|
99
|
+
slice_id TEXT DEFAULT NULL,
|
|
100
|
+
task_id TEXT DEFAULT NULL,
|
|
101
|
+
full_content TEXT NOT NULL DEFAULT '',
|
|
102
|
+
imported_at TEXT NOT NULL DEFAULT ''
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
CREATE TABLE memories (
|
|
106
|
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
107
|
+
id TEXT NOT NULL UNIQUE,
|
|
108
|
+
category TEXT NOT NULL,
|
|
109
|
+
content TEXT NOT NULL,
|
|
110
|
+
confidence REAL NOT NULL DEFAULT 0.8,
|
|
111
|
+
source_unit_type TEXT,
|
|
112
|
+
source_unit_id TEXT,
|
|
113
|
+
created_at TEXT NOT NULL,
|
|
114
|
+
updated_at TEXT NOT NULL,
|
|
115
|
+
superseded_by TEXT DEFAULT NULL,
|
|
116
|
+
hit_count INTEGER NOT NULL DEFAULT 0,
|
|
117
|
+
scope TEXT NOT NULL DEFAULT 'project',
|
|
118
|
+
tags TEXT NOT NULL DEFAULT '[]'
|
|
119
|
+
);
|
|
120
|
+
CREATE TABLE memory_processed_units (
|
|
121
|
+
unit_key TEXT PRIMARY KEY,
|
|
122
|
+
activity_file TEXT,
|
|
123
|
+
processed_at TEXT NOT NULL
|
|
124
|
+
);
|
|
125
|
+
CREATE TABLE memory_sources (
|
|
126
|
+
id TEXT PRIMARY KEY,
|
|
127
|
+
kind TEXT NOT NULL,
|
|
128
|
+
uri TEXT,
|
|
129
|
+
title TEXT,
|
|
130
|
+
content TEXT NOT NULL,
|
|
131
|
+
content_hash TEXT NOT NULL UNIQUE,
|
|
132
|
+
imported_at TEXT NOT NULL,
|
|
133
|
+
scope TEXT NOT NULL DEFAULT 'project',
|
|
134
|
+
tags TEXT NOT NULL DEFAULT '[]'
|
|
135
|
+
);
|
|
136
|
+
CREATE TABLE memory_embeddings (
|
|
137
|
+
memory_id TEXT PRIMARY KEY,
|
|
138
|
+
model TEXT NOT NULL,
|
|
139
|
+
dim INTEGER NOT NULL,
|
|
140
|
+
vector BLOB NOT NULL,
|
|
141
|
+
updated_at TEXT NOT NULL
|
|
142
|
+
);
|
|
143
|
+
CREATE TABLE memory_relations (
|
|
144
|
+
from_id TEXT NOT NULL,
|
|
145
|
+
to_id TEXT NOT NULL,
|
|
146
|
+
rel TEXT NOT NULL,
|
|
147
|
+
confidence REAL NOT NULL DEFAULT 0.8,
|
|
148
|
+
created_at TEXT NOT NULL,
|
|
149
|
+
PRIMARY KEY (from_id, to_id, rel)
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
CREATE TABLE milestones (
|
|
153
|
+
id TEXT PRIMARY KEY,
|
|
154
|
+
title TEXT NOT NULL DEFAULT '',
|
|
155
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
156
|
+
depends_on TEXT NOT NULL DEFAULT '[]',
|
|
157
|
+
created_at TEXT NOT NULL DEFAULT '',
|
|
158
|
+
completed_at TEXT DEFAULT NULL,
|
|
159
|
+
vision TEXT NOT NULL DEFAULT '',
|
|
160
|
+
success_criteria TEXT NOT NULL DEFAULT '[]',
|
|
161
|
+
key_risks TEXT NOT NULL DEFAULT '[]',
|
|
162
|
+
proof_strategy TEXT NOT NULL DEFAULT '[]',
|
|
163
|
+
verification_contract TEXT NOT NULL DEFAULT '',
|
|
164
|
+
verification_integration TEXT NOT NULL DEFAULT '',
|
|
165
|
+
verification_operational TEXT NOT NULL DEFAULT '',
|
|
166
|
+
verification_uat TEXT NOT NULL DEFAULT '',
|
|
167
|
+
definition_of_done TEXT NOT NULL DEFAULT '[]',
|
|
168
|
+
requirement_coverage TEXT NOT NULL DEFAULT '',
|
|
169
|
+
boundary_map_markdown TEXT NOT NULL DEFAULT ''
|
|
170
|
+
);
|
|
171
|
+
CREATE TABLE slices (
|
|
172
|
+
milestone_id TEXT NOT NULL,
|
|
173
|
+
id TEXT NOT NULL,
|
|
174
|
+
title TEXT NOT NULL DEFAULT '',
|
|
175
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
176
|
+
risk TEXT NOT NULL DEFAULT 'medium',
|
|
177
|
+
depends TEXT NOT NULL DEFAULT '[]',
|
|
178
|
+
demo TEXT NOT NULL DEFAULT '',
|
|
179
|
+
created_at TEXT NOT NULL DEFAULT '',
|
|
180
|
+
completed_at TEXT DEFAULT NULL,
|
|
181
|
+
full_summary_md TEXT NOT NULL DEFAULT '',
|
|
182
|
+
full_uat_md TEXT NOT NULL DEFAULT '',
|
|
183
|
+
goal TEXT NOT NULL DEFAULT '',
|
|
184
|
+
success_criteria TEXT NOT NULL DEFAULT '',
|
|
185
|
+
proof_level TEXT NOT NULL DEFAULT '',
|
|
186
|
+
integration_closure TEXT NOT NULL DEFAULT '',
|
|
187
|
+
observability_impact TEXT NOT NULL DEFAULT '',
|
|
188
|
+
sequence INTEGER DEFAULT 0,
|
|
189
|
+
replan_triggered_at TEXT DEFAULT NULL,
|
|
190
|
+
is_sketch INTEGER NOT NULL DEFAULT 0,
|
|
191
|
+
sketch_scope TEXT NOT NULL DEFAULT '',
|
|
192
|
+
PRIMARY KEY (milestone_id, id)
|
|
193
|
+
);
|
|
194
|
+
CREATE TABLE tasks (
|
|
195
|
+
milestone_id TEXT NOT NULL,
|
|
196
|
+
slice_id TEXT NOT NULL,
|
|
197
|
+
id TEXT NOT NULL,
|
|
198
|
+
title TEXT NOT NULL DEFAULT '',
|
|
199
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
200
|
+
one_liner TEXT NOT NULL DEFAULT '',
|
|
201
|
+
narrative TEXT NOT NULL DEFAULT '',
|
|
202
|
+
verification_result TEXT NOT NULL DEFAULT '',
|
|
203
|
+
duration TEXT NOT NULL DEFAULT '',
|
|
204
|
+
completed_at TEXT DEFAULT NULL,
|
|
205
|
+
blocker_discovered INTEGER DEFAULT 0,
|
|
206
|
+
deviations TEXT NOT NULL DEFAULT '',
|
|
207
|
+
known_issues TEXT NOT NULL DEFAULT '',
|
|
208
|
+
key_files TEXT NOT NULL DEFAULT '[]',
|
|
209
|
+
key_decisions TEXT NOT NULL DEFAULT '[]',
|
|
210
|
+
full_summary_md TEXT NOT NULL DEFAULT '',
|
|
211
|
+
description TEXT NOT NULL DEFAULT '',
|
|
212
|
+
estimate TEXT NOT NULL DEFAULT '',
|
|
213
|
+
files TEXT NOT NULL DEFAULT '[]',
|
|
214
|
+
verify TEXT NOT NULL DEFAULT '',
|
|
215
|
+
inputs TEXT NOT NULL DEFAULT '[]',
|
|
216
|
+
expected_output TEXT NOT NULL DEFAULT '[]',
|
|
217
|
+
observability_impact TEXT NOT NULL DEFAULT '',
|
|
218
|
+
full_plan_md TEXT NOT NULL DEFAULT '',
|
|
219
|
+
sequence INTEGER DEFAULT 0,
|
|
220
|
+
blocker_source TEXT NOT NULL DEFAULT '',
|
|
221
|
+
escalation_pending INTEGER NOT NULL DEFAULT 0,
|
|
222
|
+
escalation_awaiting_review INTEGER NOT NULL DEFAULT 0,
|
|
223
|
+
escalation_artifact_path TEXT DEFAULT NULL,
|
|
224
|
+
escalation_override_applied_at TEXT DEFAULT NULL,
|
|
225
|
+
PRIMARY KEY (milestone_id, slice_id, id)
|
|
226
|
+
);
|
|
227
|
+
CREATE TABLE verification_evidence (
|
|
228
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
229
|
+
task_id TEXT NOT NULL DEFAULT '',
|
|
230
|
+
slice_id TEXT NOT NULL DEFAULT '',
|
|
231
|
+
milestone_id TEXT NOT NULL DEFAULT '',
|
|
232
|
+
command TEXT NOT NULL DEFAULT '',
|
|
233
|
+
exit_code INTEGER DEFAULT 0,
|
|
234
|
+
verdict TEXT NOT NULL DEFAULT '',
|
|
235
|
+
duration_ms INTEGER DEFAULT 0,
|
|
236
|
+
created_at TEXT NOT NULL DEFAULT ''
|
|
237
|
+
);
|
|
238
|
+
CREATE TABLE replan_history (
|
|
239
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
240
|
+
milestone_id TEXT NOT NULL DEFAULT '',
|
|
241
|
+
slice_id TEXT DEFAULT NULL,
|
|
242
|
+
task_id TEXT DEFAULT NULL,
|
|
243
|
+
summary TEXT NOT NULL DEFAULT '',
|
|
244
|
+
previous_artifact_path TEXT DEFAULT NULL,
|
|
245
|
+
replacement_artifact_path TEXT DEFAULT NULL,
|
|
246
|
+
created_at TEXT NOT NULL DEFAULT ''
|
|
247
|
+
);
|
|
248
|
+
CREATE TABLE assessments (
|
|
249
|
+
path TEXT PRIMARY KEY,
|
|
250
|
+
milestone_id TEXT NOT NULL DEFAULT '',
|
|
251
|
+
slice_id TEXT DEFAULT NULL,
|
|
252
|
+
task_id TEXT DEFAULT NULL,
|
|
253
|
+
status TEXT NOT NULL DEFAULT '',
|
|
254
|
+
scope TEXT NOT NULL DEFAULT '',
|
|
255
|
+
full_content TEXT NOT NULL DEFAULT '',
|
|
256
|
+
created_at TEXT NOT NULL DEFAULT ''
|
|
257
|
+
);
|
|
258
|
+
CREATE TABLE quality_gates (
|
|
259
|
+
milestone_id TEXT NOT NULL,
|
|
260
|
+
slice_id TEXT NOT NULL,
|
|
261
|
+
gate_id TEXT NOT NULL,
|
|
262
|
+
scope TEXT NOT NULL DEFAULT 'slice',
|
|
263
|
+
task_id TEXT NOT NULL DEFAULT '',
|
|
264
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
265
|
+
verdict TEXT NOT NULL DEFAULT '',
|
|
266
|
+
rationale TEXT NOT NULL DEFAULT '',
|
|
267
|
+
findings TEXT NOT NULL DEFAULT '',
|
|
268
|
+
evaluated_at TEXT DEFAULT NULL,
|
|
269
|
+
PRIMARY KEY (milestone_id, slice_id, gate_id, task_id)
|
|
270
|
+
);
|
|
271
|
+
CREATE TABLE slice_dependencies (
|
|
272
|
+
milestone_id TEXT NOT NULL,
|
|
273
|
+
slice_id TEXT NOT NULL,
|
|
274
|
+
depends_on_slice_id TEXT NOT NULL,
|
|
275
|
+
PRIMARY KEY (milestone_id, slice_id, depends_on_slice_id)
|
|
276
|
+
);
|
|
277
|
+
CREATE TABLE gate_runs (
|
|
278
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
279
|
+
trace_id TEXT NOT NULL,
|
|
280
|
+
turn_id TEXT NOT NULL,
|
|
281
|
+
gate_id TEXT NOT NULL,
|
|
282
|
+
gate_type TEXT NOT NULL DEFAULT '',
|
|
283
|
+
unit_type TEXT DEFAULT NULL,
|
|
284
|
+
unit_id TEXT DEFAULT NULL,
|
|
285
|
+
milestone_id TEXT DEFAULT NULL,
|
|
286
|
+
slice_id TEXT DEFAULT NULL,
|
|
287
|
+
task_id TEXT DEFAULT NULL,
|
|
288
|
+
outcome TEXT NOT NULL DEFAULT 'pass',
|
|
289
|
+
failure_class TEXT NOT NULL DEFAULT 'none',
|
|
290
|
+
rationale TEXT NOT NULL DEFAULT '',
|
|
291
|
+
findings TEXT NOT NULL DEFAULT '',
|
|
292
|
+
attempt INTEGER NOT NULL DEFAULT 1,
|
|
293
|
+
max_attempts INTEGER NOT NULL DEFAULT 1,
|
|
294
|
+
retryable INTEGER NOT NULL DEFAULT 0,
|
|
295
|
+
evaluated_at TEXT NOT NULL DEFAULT ''
|
|
296
|
+
);
|
|
297
|
+
CREATE TABLE turn_git_transactions (
|
|
298
|
+
trace_id TEXT NOT NULL,
|
|
299
|
+
turn_id TEXT NOT NULL,
|
|
300
|
+
unit_type TEXT DEFAULT NULL,
|
|
301
|
+
unit_id TEXT DEFAULT NULL,
|
|
302
|
+
stage TEXT NOT NULL DEFAULT 'turn-start',
|
|
303
|
+
action TEXT NOT NULL DEFAULT 'status-only',
|
|
304
|
+
push INTEGER NOT NULL DEFAULT 0,
|
|
305
|
+
status TEXT NOT NULL DEFAULT 'ok',
|
|
306
|
+
error TEXT DEFAULT NULL,
|
|
307
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
308
|
+
updated_at TEXT NOT NULL DEFAULT '',
|
|
309
|
+
PRIMARY KEY (trace_id, turn_id, stage)
|
|
310
|
+
);
|
|
311
|
+
CREATE TABLE audit_events (
|
|
312
|
+
event_id TEXT PRIMARY KEY,
|
|
313
|
+
trace_id TEXT NOT NULL,
|
|
314
|
+
turn_id TEXT DEFAULT NULL,
|
|
315
|
+
caused_by TEXT DEFAULT NULL,
|
|
316
|
+
category TEXT NOT NULL,
|
|
317
|
+
type TEXT NOT NULL,
|
|
318
|
+
ts TEXT NOT NULL,
|
|
319
|
+
payload_json TEXT NOT NULL DEFAULT '{}'
|
|
320
|
+
);
|
|
321
|
+
CREATE TABLE audit_turn_index (
|
|
322
|
+
trace_id TEXT NOT NULL,
|
|
323
|
+
turn_id TEXT NOT NULL,
|
|
324
|
+
first_ts TEXT NOT NULL,
|
|
325
|
+
last_ts TEXT NOT NULL,
|
|
326
|
+
event_count INTEGER NOT NULL DEFAULT 0,
|
|
327
|
+
PRIMARY KEY (trace_id, turn_id)
|
|
328
|
+
);
|
|
329
|
+
`);
|
|
330
|
+
db.exec('PRAGMA wal_checkpoint(TRUNCATE)');
|
|
331
|
+
db.close();
|
|
332
|
+
try { fs.unlinkSync(`${dbPath}-wal`); } catch { /* may not exist */ }
|
|
333
|
+
try { fs.unlinkSync(`${dbPath}-shm`); } catch { /* may not exist */ }
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// ---------------------------------------------------------------------------
|
|
337
|
+
// Tests
|
|
338
|
+
// ---------------------------------------------------------------------------
|
|
339
|
+
|
|
340
|
+
test('schema v21 migration: structured_fields column added when upgrading from v20', () => {
|
|
341
|
+
const base = makeTmp();
|
|
342
|
+
const dbPath = path.join(base, 'gsd.db');
|
|
343
|
+
createV20Db(dbPath);
|
|
344
|
+
|
|
345
|
+
try {
|
|
346
|
+
openDatabase(dbPath);
|
|
347
|
+
|
|
348
|
+
const db = _getAdapter()!;
|
|
349
|
+
|
|
350
|
+
// The v21 migration must have added the structured_fields column.
|
|
351
|
+
const cols = db.prepare('PRAGMA table_info(memories)').all() as Array<Record<string, unknown>>;
|
|
352
|
+
const colNames = new Set(cols.map((c) => c['name'] as string));
|
|
353
|
+
assert.ok(
|
|
354
|
+
colNames.has('structured_fields'),
|
|
355
|
+
'v21 migration must add structured_fields column to memories table',
|
|
356
|
+
);
|
|
357
|
+
} finally {
|
|
358
|
+
cleanup(base);
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
test('schema v21 migration: version 21 is recorded in schema_version after upgrading from v20', () => {
|
|
363
|
+
const base = makeTmp();
|
|
364
|
+
const dbPath = path.join(base, 'gsd.db');
|
|
365
|
+
createV20Db(dbPath);
|
|
366
|
+
|
|
367
|
+
try {
|
|
368
|
+
openDatabase(dbPath);
|
|
369
|
+
|
|
370
|
+
const db = _getAdapter()!;
|
|
371
|
+
|
|
372
|
+
// Verify that version 21 was recorded. A missing stamp means the
|
|
373
|
+
// migration code executed but never committed its version row — the
|
|
374
|
+
// precise failure mode described in issue #4591.
|
|
375
|
+
const versions = db
|
|
376
|
+
.prepare('SELECT version FROM schema_version ORDER BY version')
|
|
377
|
+
.all() as Array<Record<string, unknown>>;
|
|
378
|
+
const versionNums = versions.map((r) => r['version'] as number);
|
|
379
|
+
|
|
380
|
+
assert.ok(
|
|
381
|
+
versionNums.includes(21),
|
|
382
|
+
`schema_version must contain a row for version 21 after upgrade from v20; found: [${versionNums.join(', ')}]`,
|
|
383
|
+
);
|
|
384
|
+
} finally {
|
|
385
|
+
cleanup(base);
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
test('schema v21 migration: upgrading from v20 lands on current SCHEMA_VERSION', () => {
|
|
390
|
+
const base = makeTmp();
|
|
391
|
+
const dbPath = path.join(base, 'gsd.db');
|
|
392
|
+
createV20Db(dbPath);
|
|
393
|
+
|
|
394
|
+
try {
|
|
395
|
+
openDatabase(dbPath);
|
|
396
|
+
|
|
397
|
+
const db = _getAdapter()!;
|
|
398
|
+
|
|
399
|
+
const maxVersion = (
|
|
400
|
+
db.prepare('SELECT MAX(version) as v FROM schema_version').get() as Record<string, unknown>
|
|
401
|
+
)?.['v'] as number;
|
|
402
|
+
|
|
403
|
+
// The DB must reach the current SCHEMA_VERSION. If the v21 block was
|
|
404
|
+
// skipped (as it would be when SCHEMA_VERSION was still 20), this
|
|
405
|
+
// assertion catches it.
|
|
406
|
+
assert.ok(
|
|
407
|
+
maxVersion >= 21,
|
|
408
|
+
`DB upgraded from v20 must reach at least schema version 21; got ${maxVersion}`,
|
|
409
|
+
);
|
|
410
|
+
} finally {
|
|
411
|
+
cleanup(base);
|
|
412
|
+
}
|
|
413
|
+
});
|