gsd-pi 2.33.1 → 2.34.0-dev.bbb5216
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/dist/bundled-resource-path.d.ts +8 -0
- package/dist/bundled-resource-path.js +14 -0
- package/dist/cli.js +16 -0
- package/dist/headless-query.js +6 -6
- package/dist/resource-loader.d.ts +2 -0
- package/dist/resource-loader.js +39 -4
- package/dist/resources/extensions/ask-user-questions.js +217 -0
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
- package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
- package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
- package/dist/resources/extensions/async-jobs/index.js +119 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
- package/dist/resources/extensions/aws-auth/index.js +138 -0
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
- package/dist/resources/extensions/bg-shell/index.js +41 -0
- package/dist/resources/extensions/bg-shell/interaction.js +160 -0
- package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
- package/dist/resources/extensions/bg-shell/overlay.js +378 -0
- package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
- package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
- package/dist/resources/extensions/bg-shell/types.js +96 -0
- package/dist/resources/extensions/bg-shell/utilities.js +50 -0
- package/dist/resources/extensions/browser-tools/capture.js +179 -0
- package/dist/resources/extensions/browser-tools/core.js +899 -0
- package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
- package/dist/resources/extensions/browser-tools/index.js +123 -0
- package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
- package/dist/resources/extensions/browser-tools/refs.js +254 -0
- package/dist/resources/extensions/browser-tools/settle.js +173 -0
- package/dist/resources/extensions/browser-tools/state.js +126 -0
- package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
- package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
- package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
- package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
- package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
- package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
- package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
- package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
- package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
- package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
- package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
- package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
- package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
- package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
- package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
- package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
- package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
- package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
- package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
- package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
- package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
- package/dist/resources/extensions/browser-tools/utils.js +490 -0
- package/dist/resources/extensions/context7/index.js +337 -0
- package/dist/resources/extensions/get-secrets-from-user.js +492 -0
- package/dist/resources/extensions/google-search/index.js +373 -0
- package/dist/resources/extensions/gsd/activity-log.js +146 -0
- package/dist/resources/extensions/gsd/atomic-write.js +38 -0
- package/dist/resources/extensions/gsd/auto/session.js +182 -0
- package/dist/resources/extensions/gsd/auto-budget.js +30 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +429 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +185 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +353 -0
- package/dist/resources/extensions/gsd/auto-loop.js +956 -0
- package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
- package/dist/resources/extensions/gsd/auto-observability.js +56 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +385 -0
- package/dist/resources/extensions/gsd/auto-prompts.js +1153 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +512 -0
- package/dist/resources/extensions/gsd/auto-start.js +414 -0
- package/dist/resources/extensions/gsd/auto-supervisor.js +47 -0
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
- package/dist/resources/extensions/gsd/auto-timers.js +180 -0
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
- package/dist/resources/extensions/gsd/auto-verification.js +171 -0
- package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +830 -0
- package/dist/resources/extensions/gsd/auto.js +765 -0
- package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
- package/dist/resources/extensions/gsd/captures.js +354 -0
- package/dist/resources/extensions/gsd/claude-import.js +540 -0
- package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +223 -0
- package/dist/resources/extensions/gsd/commands-config.js +89 -0
- package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
- package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
- package/dist/resources/extensions/gsd/commands-logs.js +468 -0
- package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
- package/dist/resources/extensions/gsd/commands.js +1024 -0
- package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
- package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
- package/dist/resources/extensions/gsd/context-budget.js +187 -0
- package/dist/resources/extensions/gsd/context-store.js +165 -0
- package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
- package/dist/resources/extensions/gsd/db-writer.js +298 -0
- package/dist/resources/extensions/gsd/debug-logger.js +161 -0
- package/dist/resources/extensions/gsd/detection.js +373 -0
- package/dist/resources/extensions/gsd/diff-context.js +168 -0
- package/dist/resources/extensions/gsd/dispatch-guard.js +75 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
- package/dist/resources/extensions/gsd/doctor-checks.js +562 -0
- package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
- package/dist/resources/extensions/gsd/doctor-format.js +71 -0
- package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
- package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
- package/dist/resources/extensions/gsd/doctor-types.js +12 -0
- package/dist/resources/extensions/gsd/doctor.js +672 -0
- package/dist/resources/extensions/gsd/error-utils.js +6 -0
- package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
- package/dist/resources/extensions/gsd/exit-command.js +11 -0
- package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
- package/dist/resources/extensions/gsd/export.js +268 -0
- package/dist/resources/extensions/gsd/file-watcher.js +76 -0
- package/dist/resources/extensions/gsd/files.js +937 -0
- package/dist/resources/extensions/gsd/forensics.js +511 -0
- package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
- package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
- package/dist/resources/extensions/gsd/git-service.js +460 -0
- package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
- package/dist/resources/extensions/gsd/gsd-db.js +735 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
- package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
- package/dist/resources/extensions/gsd/health-widget.js +141 -0
- package/dist/resources/extensions/gsd/history.js +118 -0
- package/dist/resources/extensions/gsd/index.js +1114 -0
- package/dist/resources/extensions/gsd/init-wizard.js +479 -0
- package/dist/resources/extensions/gsd/json-persistence.js +62 -0
- package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
- package/dist/resources/extensions/gsd/key-manager.js +829 -0
- package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
- package/dist/resources/extensions/gsd/md-importer.js +440 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
- package/dist/resources/extensions/gsd/memory-store.js +351 -0
- package/dist/resources/extensions/gsd/metrics.js +377 -0
- package/dist/resources/extensions/gsd/migrate/command.js +157 -0
- package/dist/resources/extensions/gsd/migrate/index.js +7 -0
- package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
- package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
- package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
- package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
- package/dist/resources/extensions/gsd/migrate/types.js +4 -0
- package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
- package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
- package/dist/resources/extensions/gsd/migrate-external.js +130 -0
- package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
- package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
- package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
- package/dist/resources/extensions/gsd/model-router.js +187 -0
- package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
- package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
- package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
- package/dist/resources/extensions/gsd/notifications.js +58 -0
- package/dist/resources/extensions/gsd/observability-validator.js +398 -0
- package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
- package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
- package/dist/resources/extensions/gsd/paths.js +414 -0
- package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
- package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
- package/dist/resources/extensions/gsd/preferences-models.js +294 -0
- package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
- package/dist/resources/extensions/gsd/preferences-types.js +73 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
- package/dist/resources/extensions/gsd/preferences.js +325 -0
- package/dist/resources/extensions/gsd/progress-score.js +102 -0
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
- package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
- package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
- package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
- package/dist/resources/extensions/gsd/queue-order.js +178 -0
- package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
- package/dist/resources/extensions/gsd/quick.js +206 -0
- package/dist/resources/extensions/gsd/repo-identity.js +187 -0
- package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
- package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
- package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
- package/dist/resources/extensions/gsd/routing-history.js +210 -0
- package/dist/resources/extensions/gsd/safe-fs.js +52 -0
- package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
- package/dist/resources/extensions/gsd/session-forensics.js +427 -0
- package/dist/resources/extensions/gsd/session-lock.js +397 -0
- package/dist/resources/extensions/gsd/session-status-io.js +134 -0
- package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
- package/dist/resources/extensions/gsd/skill-health.js +324 -0
- package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
- package/dist/resources/extensions/gsd/state.js +653 -0
- package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
- package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
- package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
- package/dist/resources/extensions/gsd/token-counter.js +54 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
- package/dist/resources/extensions/gsd/triage-ui.js +125 -0
- package/dist/resources/extensions/gsd/types.js +4 -0
- package/dist/resources/extensions/gsd/undo.js +205 -0
- package/dist/resources/extensions/gsd/unit-id.js +7 -0
- package/dist/resources/extensions/gsd/unit-runtime.js +131 -0
- package/dist/resources/extensions/gsd/validate-directory.js +143 -0
- package/dist/resources/extensions/gsd/verification-evidence.js +122 -0
- package/dist/resources/extensions/gsd/verification-gate.js +514 -0
- package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
- package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
- package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
- package/dist/resources/extensions/gsd/workspace-index.js +139 -0
- package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
- package/dist/resources/extensions/gsd/worktree-command.js +682 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +358 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
- package/dist/resources/extensions/gsd/worktree.js +199 -0
- package/dist/resources/extensions/mac-tools/index.js +768 -0
- package/dist/resources/extensions/mcp-client/index.js +363 -0
- package/dist/resources/extensions/package.json +3 -0
- package/dist/resources/extensions/remote-questions/config.js +70 -0
- package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
- package/dist/resources/extensions/remote-questions/format.js +234 -0
- package/dist/resources/extensions/remote-questions/http-client.js +43 -0
- package/dist/resources/extensions/remote-questions/manager.js +156 -0
- package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
- package/dist/resources/extensions/remote-questions/notify.js +89 -0
- package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
- package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
- package/dist/resources/extensions/remote-questions/status.js +25 -0
- package/dist/resources/extensions/remote-questions/store.js +70 -0
- package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
- package/dist/resources/extensions/remote-questions/types.js +5 -0
- package/dist/resources/extensions/search-the-web/cache.js +74 -0
- package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
- package/dist/resources/extensions/search-the-web/format.js +161 -0
- package/dist/resources/extensions/search-the-web/http.js +178 -0
- package/dist/resources/extensions/search-the-web/index.js +41 -0
- package/dist/resources/extensions/search-the-web/native-search.js +166 -0
- package/dist/resources/extensions/search-the-web/provider.js +143 -0
- package/dist/resources/extensions/search-the-web/tavily.js +82 -0
- package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
- package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
- package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
- package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
- package/dist/resources/extensions/shared/confirm-ui.js +96 -0
- package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
- package/dist/resources/extensions/shared/frontmatter.js +109 -0
- package/dist/resources/extensions/shared/interview-ui.js +569 -0
- package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
- package/dist/resources/extensions/shared/next-action-ui.js +168 -0
- package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
- package/dist/resources/extensions/shared/sanitize.js +17 -0
- package/dist/resources/extensions/shared/terminal.js +21 -0
- package/dist/resources/extensions/shared/ui.js +245 -0
- package/dist/resources/extensions/shared/wizard-ui.js +478 -0
- package/dist/resources/extensions/slash-commands/audit.js +72 -0
- package/dist/resources/extensions/slash-commands/clear.js +8 -0
- package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
- package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
- package/dist/resources/extensions/slash-commands/index.js +10 -0
- package/dist/resources/extensions/subagent/agents.js +103 -0
- package/dist/resources/extensions/subagent/index.js +905 -0
- package/dist/resources/extensions/subagent/isolation.js +384 -0
- package/dist/resources/extensions/subagent/worker-registry.js +73 -0
- package/dist/resources/extensions/ttsr/index.js +144 -0
- package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
- package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
- package/dist/resources/extensions/universal-config/discovery.js +94 -0
- package/dist/resources/extensions/universal-config/format.js +178 -0
- package/dist/resources/extensions/universal-config/index.js +99 -0
- package/dist/resources/extensions/universal-config/scanners.js +574 -0
- package/dist/resources/extensions/universal-config/tools.js +57 -0
- package/dist/resources/extensions/universal-config/types.js +8 -0
- package/dist/resources/extensions/voice/index.js +247 -0
- package/dist/startup-timings.d.ts +2 -0
- package/dist/startup-timings.js +22 -0
- package/dist/tool-bootstrap.js +59 -11
- package/dist/worktree-cli.js +7 -7
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +9 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +9 -0
- package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
- package/packages/pi-coding-agent/src/index.ts +1 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/bg-shell/index.ts +41 -46
- package/src/resources/extensions/browser-tools/index.ts +156 -67
- package/src/resources/extensions/gsd/auto/session.ts +47 -30
- package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
- package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
- package/src/resources/extensions/gsd/auto-observability.ts +4 -2
- package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
- package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
- package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
- package/src/resources/extensions/gsd/auto-start.ts +440 -354
- package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
- package/src/resources/extensions/gsd/auto-timers.ts +3 -4
- package/src/resources/extensions/gsd/auto-verification.ts +76 -72
- package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
- package/src/resources/extensions/gsd/auto.ts +516 -1189
- package/src/resources/extensions/gsd/captures.ts +10 -4
- package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
- package/src/resources/extensions/gsd/commands.ts +39 -31
- package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
- package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
- package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
- package/src/resources/extensions/gsd/git-service.ts +32 -12
- package/src/resources/extensions/gsd/gitignore.ts +4 -2
- package/src/resources/extensions/gsd/gsd-db.ts +375 -180
- package/src/resources/extensions/gsd/guided-flow.ts +22 -11
- package/src/resources/extensions/gsd/index.ts +76 -163
- package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
- package/src/resources/extensions/gsd/progress-score.ts +65 -200
- package/src/resources/extensions/gsd/quick.ts +121 -76
- package/src/resources/extensions/gsd/repo-identity.ts +56 -22
- package/src/resources/extensions/gsd/session-lock.ts +17 -0
- package/src/resources/extensions/gsd/templates/preferences.md +1 -0
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
- package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
- package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
- package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
- package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
- package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
- package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
- package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
- package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
- package/src/resources/extensions/gsd/types.ts +90 -77
- package/src/resources/extensions/gsd/undo.ts +42 -46
- package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
- package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
- package/src/resources/extensions/gsd/verification-gate.ts +4 -16
- package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
- package/src/resources/extensions/gsd/worktree-command.ts +29 -11
- package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
- package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
- package/src/resources/extensions/gsd/worktree.ts +7 -44
- package/src/resources/extensions/package.json +3 -0
- package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
- package/src/resources/extensions/search-the-web/index.ts +35 -52
- package/src/resources/extensions/search-the-web/tavily.ts +1 -1
- package/dist/resources/extensions/ask-user-questions.ts +0 -290
- package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
- package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
- package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
- package/dist/resources/extensions/async-jobs/index.ts +0 -141
- package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
- package/dist/resources/extensions/aws-auth/index.ts +0 -144
- package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
- package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
- package/dist/resources/extensions/bg-shell/index.ts +0 -59
- package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
- package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
- package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
- package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
- package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
- package/dist/resources/extensions/bg-shell/types.ts +0 -303
- package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
- package/dist/resources/extensions/browser-tools/capture.ts +0 -199
- package/dist/resources/extensions/browser-tools/core.ts +0 -1196
- package/dist/resources/extensions/browser-tools/index.ts +0 -71
- package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
- package/dist/resources/extensions/browser-tools/refs.ts +0 -264
- package/dist/resources/extensions/browser-tools/settle.ts +0 -197
- package/dist/resources/extensions/browser-tools/state.ts +0 -408
- package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
- package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
- package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
- package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
- package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
- package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
- package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
- package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
- package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
- package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
- package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
- package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
- package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
- package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
- package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
- package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
- package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
- package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
- package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
- package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
- package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
- package/dist/resources/extensions/browser-tools/utils.ts +0 -660
- package/dist/resources/extensions/context7/index.ts +0 -428
- package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
- package/dist/resources/extensions/google-search/index.ts +0 -466
- package/dist/resources/extensions/gsd/activity-log.ts +0 -162
- package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
- package/dist/resources/extensions/gsd/auto/session.ts +0 -236
- package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
- package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
- package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
- package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
- package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
- package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
- package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
- package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
- package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
- package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
- package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
- package/dist/resources/extensions/gsd/auto-start.ts +0 -483
- package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
- package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
- package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
- package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
- package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
- package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
- package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
- package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
- package/dist/resources/extensions/gsd/auto.ts +0 -1834
- package/dist/resources/extensions/gsd/captures.ts +0 -427
- package/dist/resources/extensions/gsd/claude-import.ts +0 -656
- package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
- package/dist/resources/extensions/gsd/commands-config.ts +0 -102
- package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
- package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
- package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
- package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
- package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
- package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
- package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
- package/dist/resources/extensions/gsd/commands.ts +0 -1149
- package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
- package/dist/resources/extensions/gsd/context-budget.ts +0 -266
- package/dist/resources/extensions/gsd/context-store.ts +0 -195
- package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
- package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
- package/dist/resources/extensions/gsd/db-writer.ts +0 -360
- package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
- package/dist/resources/extensions/gsd/detection.ts +0 -470
- package/dist/resources/extensions/gsd/diff-context.ts +0 -214
- package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
- package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
- package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
- package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
- package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
- package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
- package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
- package/dist/resources/extensions/gsd/doctor.ts +0 -722
- package/dist/resources/extensions/gsd/error-utils.ts +0 -6
- package/dist/resources/extensions/gsd/exit-command.ts +0 -18
- package/dist/resources/extensions/gsd/export.ts +0 -317
- package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
- package/dist/resources/extensions/gsd/files.ts +0 -1058
- package/dist/resources/extensions/gsd/forensics.ts +0 -629
- package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
- package/dist/resources/extensions/gsd/git-service.ts +0 -580
- package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
- package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
- package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
- package/dist/resources/extensions/gsd/health-widget.ts +0 -167
- package/dist/resources/extensions/gsd/history.ts +0 -143
- package/dist/resources/extensions/gsd/index.ts +0 -1390
- package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
- package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
- package/dist/resources/extensions/gsd/key-manager.ts +0 -996
- package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
- package/dist/resources/extensions/gsd/md-importer.ts +0 -527
- package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
- package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
- package/dist/resources/extensions/gsd/memory-store.ts +0 -441
- package/dist/resources/extensions/gsd/metrics.ts +0 -532
- package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
- package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
- package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
- package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
- package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
- package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
- package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
- package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
- package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
- package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
- package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
- package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
- package/dist/resources/extensions/gsd/model-router.ts +0 -256
- package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
- package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
- package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
- package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
- package/dist/resources/extensions/gsd/notifications.ts +0 -87
- package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
- package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
- package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
- package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
- package/dist/resources/extensions/gsd/paths.ts +0 -449
- package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
- package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
- package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
- package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
- package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
- package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
- package/dist/resources/extensions/gsd/preferences.ts +0 -416
- package/dist/resources/extensions/gsd/progress-score.ts +0 -273
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
- package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
- package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
- package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
- package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
- package/dist/resources/extensions/gsd/queue-order.ts +0 -230
- package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
- package/dist/resources/extensions/gsd/quick.ts +0 -212
- package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
- package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
- package/dist/resources/extensions/gsd/routing-history.ts +0 -286
- package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
- package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
- package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
- package/dist/resources/extensions/gsd/session-lock.ts +0 -426
- package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
- package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
- package/dist/resources/extensions/gsd/skill-health.ts +0 -417
- package/dist/resources/extensions/gsd/state.ts +0 -727
- package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
- package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
- package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
- package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
- package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
- package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
- package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
- package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
- package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
- package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
- package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
- package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
- package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
- package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
- package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
- package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
- package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
- package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
- package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
- package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
- package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
- package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
- package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
- package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
- package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
- package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
- package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
- package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
- package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
- package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
- package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
- package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
- package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
- package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
- package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
- package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
- package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
- package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
- package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
- package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
- package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
- package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
- package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
- package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
- package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
- package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
- package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
- package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
- package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
- package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
- package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
- package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
- package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
- package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
- package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
- package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
- package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
- package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
- package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
- package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
- package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
- package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
- package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
- package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
- package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
- package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
- package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
- package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
- package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
- package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
- package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
- package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
- package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
- package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
- package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
- package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
- package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
- package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
- package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
- package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
- package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
- package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
- package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
- package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
- package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
- package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
- package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
- package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
- package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
- package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
- package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
- package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
- package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
- package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
- package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
- package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
- package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
- package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
- package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
- package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
- package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
- package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
- package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
- package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
- package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
- package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
- package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
- package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
- package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
- package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
- package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
- package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
- package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
- package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
- package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
- package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
- package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
- package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
- package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
- package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
- package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
- package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
- package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
- package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
- package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
- package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
- package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
- package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
- package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
- package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
- package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
- package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
- package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
- package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
- package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
- package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
- package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
- package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
- package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
- package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
- package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
- package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
- package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
- package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
- package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
- package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
- package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
- package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
- package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
- package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
- package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
- package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
- package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
- package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
- package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
- package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
- package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
- package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
- package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
- package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
- package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
- package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
- package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
- package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
- package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
- package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
- package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
- package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
- package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
- package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
- package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
- package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
- package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
- package/dist/resources/extensions/gsd/token-counter.ts +0 -65
- package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
- package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
- package/dist/resources/extensions/gsd/types.ts +0 -425
- package/dist/resources/extensions/gsd/undo.ts +0 -223
- package/dist/resources/extensions/gsd/unit-id.ts +0 -14
- package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
- package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
- package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
- package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
- package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
- package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
- package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
- package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
- package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
- package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
- package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
- package/dist/resources/extensions/gsd/worktree.ts +0 -257
- package/dist/resources/extensions/mac-tools/index.ts +0 -852
- package/dist/resources/extensions/mcp-client/index.ts +0 -459
- package/dist/resources/extensions/remote-questions/config.ts +0 -83
- package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
- package/dist/resources/extensions/remote-questions/format.ts +0 -315
- package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
- package/dist/resources/extensions/remote-questions/manager.ts +0 -184
- package/dist/resources/extensions/remote-questions/notify.ts +0 -90
- package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
- package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
- package/dist/resources/extensions/remote-questions/status.ts +0 -31
- package/dist/resources/extensions/remote-questions/store.ts +0 -81
- package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
- package/dist/resources/extensions/remote-questions/types.ts +0 -102
- package/dist/resources/extensions/search-the-web/cache.ts +0 -78
- package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
- package/dist/resources/extensions/search-the-web/format.ts +0 -258
- package/dist/resources/extensions/search-the-web/http.ts +0 -238
- package/dist/resources/extensions/search-the-web/index.ts +0 -65
- package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
- package/dist/resources/extensions/search-the-web/provider.ts +0 -148
- package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
- package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
- package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
- package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
- package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
- package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
- package/dist/resources/extensions/shared/frontmatter.ts +0 -117
- package/dist/resources/extensions/shared/interview-ui.ts +0 -613
- package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
- package/dist/resources/extensions/shared/sanitize.ts +0 -19
- package/dist/resources/extensions/shared/terminal.ts +0 -23
- package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
- package/dist/resources/extensions/shared/ui.ts +0 -400
- package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
- package/dist/resources/extensions/slash-commands/audit.ts +0 -88
- package/dist/resources/extensions/slash-commands/clear.ts +0 -10
- package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
- package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
- package/dist/resources/extensions/slash-commands/index.ts +0 -12
- package/dist/resources/extensions/subagent/agents.ts +0 -126
- package/dist/resources/extensions/subagent/index.ts +0 -1121
- package/dist/resources/extensions/subagent/isolation.ts +0 -501
- package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
- package/dist/resources/extensions/ttsr/index.ts +0 -168
- package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
- package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
- package/dist/resources/extensions/universal-config/discovery.ts +0 -104
- package/dist/resources/extensions/universal-config/format.ts +0 -191
- package/dist/resources/extensions/universal-config/index.ts +0 -120
- package/dist/resources/extensions/universal-config/scanners.ts +0 -642
- package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
- package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
- package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
- package/dist/resources/extensions/universal-config/tools.ts +0 -60
- package/dist/resources/extensions/universal-config/types.ts +0 -135
- package/dist/resources/extensions/voice/index.ts +0 -272
- package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
- package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
- package/src/resources/extensions/gsd/auto-constants.ts +0 -6
- package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
- package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
- package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
- package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
- package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
- package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
- package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
- package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
- package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
- package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
// prompt-db: Tests for DB-aware inline helpers (inlineDecisionsFromDb, inlineRequirementsFromDb, inlineProjectFromDb)
|
|
2
|
-
//
|
|
3
|
-
// Validates:
|
|
4
|
-
// (a) DB-aware helpers return scoped content when DB has data
|
|
5
|
-
// (b) Helpers fall back to non-null output when DB unavailable
|
|
6
|
-
// (c) Scoped filtering actually reduces content
|
|
7
|
-
|
|
8
|
-
import { createTestContext } from './test-helpers.ts';
|
|
9
|
-
import {
|
|
10
|
-
openDatabase,
|
|
11
|
-
closeDatabase,
|
|
12
|
-
isDbAvailable,
|
|
13
|
-
insertDecision,
|
|
14
|
-
insertRequirement,
|
|
15
|
-
insertArtifact,
|
|
16
|
-
} from '../gsd-db.ts';
|
|
17
|
-
import {
|
|
18
|
-
queryDecisions,
|
|
19
|
-
queryRequirements,
|
|
20
|
-
queryProject,
|
|
21
|
-
formatDecisionsForPrompt,
|
|
22
|
-
formatRequirementsForPrompt,
|
|
23
|
-
} from '../context-store.ts';
|
|
24
|
-
|
|
25
|
-
const { assertEq, assertTrue, assertMatch, assertNoMatch, report } = createTestContext();
|
|
26
|
-
|
|
27
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
28
|
-
// prompt-db: DB-aware decisions helper returns scoped content
|
|
29
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
30
|
-
|
|
31
|
-
console.log('\n=== prompt-db: scoped decisions from DB ===');
|
|
32
|
-
{
|
|
33
|
-
openDatabase(':memory:');
|
|
34
|
-
|
|
35
|
-
// Insert decisions across 3 milestones
|
|
36
|
-
for (let i = 1; i <= 10; i++) {
|
|
37
|
-
const milestoneNum = ((i - 1) % 3) + 1;
|
|
38
|
-
insertDecision({
|
|
39
|
-
id: `D${String(i).padStart(3, '0')}`,
|
|
40
|
-
when_context: `M00${milestoneNum}/S01`,
|
|
41
|
-
scope: 'architecture',
|
|
42
|
-
decision: `decision ${i}`,
|
|
43
|
-
choice: `choice ${i}`,
|
|
44
|
-
rationale: `rationale ${i}`,
|
|
45
|
-
revisable: 'yes',
|
|
46
|
-
superseded_by: null,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Query scoped to M001
|
|
51
|
-
const m001Decisions = queryDecisions({ milestoneId: 'M001' });
|
|
52
|
-
assertTrue(m001Decisions.length > 0, 'M001 decisions should exist');
|
|
53
|
-
assertTrue(m001Decisions.length < 10, `scoped query should return fewer than 10 (got ${m001Decisions.length})`);
|
|
54
|
-
|
|
55
|
-
// Verify all returned decisions are for M001
|
|
56
|
-
for (const d of m001Decisions) {
|
|
57
|
-
assertMatch(d.when_context, /M001/, `decision ${d.id} should be for M001`);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Format and verify wrapping
|
|
61
|
-
const formatted = formatDecisionsForPrompt(m001Decisions);
|
|
62
|
-
assertTrue(formatted.length > 0, 'formatted decisions should be non-empty');
|
|
63
|
-
assertMatch(formatted, /\| # \| When \| Scope/, 'formatted decisions have table header');
|
|
64
|
-
|
|
65
|
-
// Verify the expected wrapper format that inlineDecisionsFromDb would produce
|
|
66
|
-
const wrapped = `### Decisions\nSource: \`.gsd/DECISIONS.md\`\n\n${formatted}`;
|
|
67
|
-
assertMatch(wrapped, /^### Decisions/, 'wrapped decisions start with ### Decisions');
|
|
68
|
-
assertMatch(wrapped, /Source:.*DECISIONS\.md/, 'wrapped decisions have source path');
|
|
69
|
-
|
|
70
|
-
closeDatabase();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
74
|
-
// prompt-db: DB-aware requirements helper returns scoped content
|
|
75
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
76
|
-
|
|
77
|
-
console.log('\n=== prompt-db: scoped requirements from DB ===');
|
|
78
|
-
{
|
|
79
|
-
openDatabase(':memory:');
|
|
80
|
-
|
|
81
|
-
// Insert requirements across different slices
|
|
82
|
-
insertRequirement({
|
|
83
|
-
id: 'R001', class: 'functional', status: 'active',
|
|
84
|
-
description: 'feature A', why: 'needed', source: 'M001', primary_owner: 'S01',
|
|
85
|
-
supporting_slices: '', validation: 'test', notes: '', full_content: '',
|
|
86
|
-
superseded_by: null,
|
|
87
|
-
});
|
|
88
|
-
insertRequirement({
|
|
89
|
-
id: 'R002', class: 'functional', status: 'active',
|
|
90
|
-
description: 'feature B', why: 'needed', source: 'M001', primary_owner: 'S02',
|
|
91
|
-
supporting_slices: 'S01', validation: 'test', notes: '', full_content: '',
|
|
92
|
-
superseded_by: null,
|
|
93
|
-
});
|
|
94
|
-
insertRequirement({
|
|
95
|
-
id: 'R003', class: 'functional', status: 'active',
|
|
96
|
-
description: 'feature C', why: 'needed', source: 'M001', primary_owner: 'S03',
|
|
97
|
-
supporting_slices: '', validation: 'test', notes: '', full_content: '',
|
|
98
|
-
superseded_by: null,
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
// Query scoped to S01 — should get R001 (primary) and R002 (supporting)
|
|
102
|
-
const s01Reqs = queryRequirements({ sliceId: 'S01' });
|
|
103
|
-
assertEq(s01Reqs.length, 2, 'S01 requirements should be 2 (primary + supporting)');
|
|
104
|
-
const ids = s01Reqs.map(r => r.id).sort();
|
|
105
|
-
assertEq(ids, ['R001', 'R002'], 'S01 owns R001 and supports R002');
|
|
106
|
-
|
|
107
|
-
// Unscoped query returns all 3
|
|
108
|
-
const allReqs = queryRequirements();
|
|
109
|
-
assertEq(allReqs.length, 3, 'unscoped requirements should return all 3');
|
|
110
|
-
|
|
111
|
-
// Format and verify wrapping
|
|
112
|
-
const formatted = formatRequirementsForPrompt(s01Reqs);
|
|
113
|
-
assertTrue(formatted.length > 0, 'formatted requirements should be non-empty');
|
|
114
|
-
assertMatch(formatted, /### R001/, 'formatted requirements include R001');
|
|
115
|
-
assertMatch(formatted, /### R002/, 'formatted requirements include R002');
|
|
116
|
-
assertNoMatch(formatted, /### R003/, 'formatted requirements exclude R003');
|
|
117
|
-
|
|
118
|
-
// Verify the expected wrapper format that inlineRequirementsFromDb would produce
|
|
119
|
-
const wrapped = `### Requirements\nSource: \`.gsd/REQUIREMENTS.md\`\n\n${formatted}`;
|
|
120
|
-
assertMatch(wrapped, /^### Requirements/, 'wrapped requirements start with ### Requirements');
|
|
121
|
-
assertMatch(wrapped, /Source:.*REQUIREMENTS\.md/, 'wrapped requirements have source path');
|
|
122
|
-
|
|
123
|
-
closeDatabase();
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
127
|
-
// prompt-db: DB-aware project helper returns content from DB
|
|
128
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
129
|
-
|
|
130
|
-
console.log('\n=== prompt-db: project content from DB ===');
|
|
131
|
-
{
|
|
132
|
-
openDatabase(':memory:');
|
|
133
|
-
|
|
134
|
-
insertArtifact({
|
|
135
|
-
path: 'PROJECT.md',
|
|
136
|
-
artifact_type: 'project',
|
|
137
|
-
milestone_id: null,
|
|
138
|
-
slice_id: null,
|
|
139
|
-
task_id: null,
|
|
140
|
-
full_content: '# Test Project\n\nThis is the project description.',
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
const content = queryProject();
|
|
144
|
-
assertEq(content, '# Test Project\n\nThis is the project description.', 'queryProject returns content');
|
|
145
|
-
|
|
146
|
-
// Verify the expected wrapper format that inlineProjectFromDb would produce
|
|
147
|
-
const wrapped = `### Project\nSource: \`.gsd/PROJECT.md\`\n\n${content}`;
|
|
148
|
-
assertMatch(wrapped, /^### Project/, 'wrapped project starts with ### Project');
|
|
149
|
-
assertMatch(wrapped, /Source:.*PROJECT\.md/, 'wrapped project has source path');
|
|
150
|
-
assertMatch(wrapped, /# Test Project/, 'wrapped project includes content');
|
|
151
|
-
|
|
152
|
-
closeDatabase();
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
156
|
-
// prompt-db: fallback when DB unavailable
|
|
157
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
158
|
-
|
|
159
|
-
console.log('\n=== prompt-db: fallback when DB unavailable ===');
|
|
160
|
-
{
|
|
161
|
-
closeDatabase();
|
|
162
|
-
assertTrue(!isDbAvailable(), 'DB should not be available');
|
|
163
|
-
|
|
164
|
-
// queryDecisions returns [] when DB closed — helper would fall back
|
|
165
|
-
const decisions = queryDecisions({ milestoneId: 'M001' });
|
|
166
|
-
assertEq(decisions, [], 'queryDecisions returns [] when DB closed');
|
|
167
|
-
|
|
168
|
-
// queryRequirements returns [] when DB closed — helper would fall back
|
|
169
|
-
const requirements = queryRequirements({ sliceId: 'S01' });
|
|
170
|
-
assertEq(requirements, [], 'queryRequirements returns [] when DB closed');
|
|
171
|
-
|
|
172
|
-
// queryProject returns null when DB closed — helper would fall back
|
|
173
|
-
const project = queryProject();
|
|
174
|
-
assertEq(project, null, 'queryProject returns null when DB closed');
|
|
175
|
-
|
|
176
|
-
// formatDecisionsForPrompt returns '' for empty input
|
|
177
|
-
const formatted = formatDecisionsForPrompt([]);
|
|
178
|
-
assertEq(formatted, '', 'formatDecisionsForPrompt returns empty for empty input');
|
|
179
|
-
|
|
180
|
-
// formatRequirementsForPrompt returns '' for empty input
|
|
181
|
-
const formattedReqs = formatRequirementsForPrompt([]);
|
|
182
|
-
assertEq(formattedReqs, '', 'formatRequirementsForPrompt returns empty for empty input');
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
186
|
-
// prompt-db: scoped filtering reduces content vs unscoped
|
|
187
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
188
|
-
|
|
189
|
-
console.log('\n=== prompt-db: scoped filtering reduces content ===');
|
|
190
|
-
{
|
|
191
|
-
openDatabase(':memory:');
|
|
192
|
-
|
|
193
|
-
// Insert 10 decisions across 3 milestones
|
|
194
|
-
for (let i = 1; i <= 10; i++) {
|
|
195
|
-
const milestoneNum = ((i - 1) % 3) + 1;
|
|
196
|
-
insertDecision({
|
|
197
|
-
id: `D${String(i).padStart(3, '0')}`,
|
|
198
|
-
when_context: `M00${milestoneNum}/S01`,
|
|
199
|
-
scope: 'architecture',
|
|
200
|
-
decision: `decision ${i} with some lengthy description for token measurement`,
|
|
201
|
-
choice: `choice ${i}`,
|
|
202
|
-
rationale: `rationale ${i} with additional context`,
|
|
203
|
-
revisable: 'yes',
|
|
204
|
-
superseded_by: null,
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
const allDecisions = queryDecisions();
|
|
209
|
-
const m001Decisions = queryDecisions({ milestoneId: 'M001' });
|
|
210
|
-
|
|
211
|
-
assertEq(allDecisions.length, 10, 'unscoped returns all 10 decisions');
|
|
212
|
-
assertTrue(m001Decisions.length < 10, `M001-scoped returns fewer than 10 (got ${m001Decisions.length})`);
|
|
213
|
-
assertTrue(m001Decisions.length > 0, 'M001-scoped returns at least 1');
|
|
214
|
-
|
|
215
|
-
// Format both and compare sizes — scoped should be shorter
|
|
216
|
-
const allFormatted = formatDecisionsForPrompt(allDecisions);
|
|
217
|
-
const scopedFormatted = formatDecisionsForPrompt(m001Decisions);
|
|
218
|
-
|
|
219
|
-
assertTrue(
|
|
220
|
-
scopedFormatted.length < allFormatted.length,
|
|
221
|
-
`scoped content (${scopedFormatted.length} chars) should be shorter than unscoped (${allFormatted.length} chars)`,
|
|
222
|
-
);
|
|
223
|
-
|
|
224
|
-
// Insert requirements across 4 slices
|
|
225
|
-
for (let i = 1; i <= 8; i++) {
|
|
226
|
-
const sliceNum = ((i - 1) % 4) + 1;
|
|
227
|
-
insertRequirement({
|
|
228
|
-
id: `R${String(i).padStart(3, '0')}`,
|
|
229
|
-
class: 'functional',
|
|
230
|
-
status: 'active',
|
|
231
|
-
description: `requirement ${i} with detailed description`,
|
|
232
|
-
why: `justification ${i}`,
|
|
233
|
-
source: 'M001',
|
|
234
|
-
primary_owner: `S0${sliceNum}`,
|
|
235
|
-
supporting_slices: '',
|
|
236
|
-
validation: `validation ${i}`,
|
|
237
|
-
notes: '',
|
|
238
|
-
full_content: '',
|
|
239
|
-
superseded_by: null,
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
const allReqs = queryRequirements();
|
|
244
|
-
const s01Reqs = queryRequirements({ sliceId: 'S01' });
|
|
245
|
-
|
|
246
|
-
assertEq(allReqs.length, 8, 'unscoped returns all 8 requirements');
|
|
247
|
-
assertTrue(s01Reqs.length < 8, `S01-scoped returns fewer than 8 (got ${s01Reqs.length})`);
|
|
248
|
-
assertTrue(s01Reqs.length > 0, 'S01-scoped returns at least 1');
|
|
249
|
-
|
|
250
|
-
const allReqsFormatted = formatRequirementsForPrompt(allReqs);
|
|
251
|
-
const scopedReqsFormatted = formatRequirementsForPrompt(s01Reqs);
|
|
252
|
-
|
|
253
|
-
assertTrue(
|
|
254
|
-
scopedReqsFormatted.length < allReqsFormatted.length,
|
|
255
|
-
`scoped requirements (${scopedReqsFormatted.length} chars) should be shorter than unscoped (${allReqsFormatted.length} chars)`,
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
closeDatabase();
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
262
|
-
// prompt-db: DB helpers produce correct wrapper format
|
|
263
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
264
|
-
|
|
265
|
-
console.log('\n=== prompt-db: DB helpers wrapper format matches expected pattern ===');
|
|
266
|
-
{
|
|
267
|
-
openDatabase(':memory:');
|
|
268
|
-
|
|
269
|
-
insertDecision({
|
|
270
|
-
id: 'D001', when_context: 'M001/S01', scope: 'architecture',
|
|
271
|
-
decision: 'use SQLite', choice: 'better-sqlite3', rationale: 'fast',
|
|
272
|
-
revisable: 'yes', superseded_by: null,
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
insertRequirement({
|
|
276
|
-
id: 'R001', class: 'functional', status: 'active',
|
|
277
|
-
description: 'persist decisions', why: 'memory', source: 'M001',
|
|
278
|
-
primary_owner: 'S01', supporting_slices: '', validation: 'test',
|
|
279
|
-
notes: '', full_content: '', superseded_by: null,
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
insertArtifact({
|
|
283
|
-
path: 'PROJECT.md',
|
|
284
|
-
artifact_type: 'project',
|
|
285
|
-
milestone_id: null,
|
|
286
|
-
slice_id: null,
|
|
287
|
-
task_id: null,
|
|
288
|
-
full_content: '# Project Name\n\nDescription.',
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
// Simulate what inlineDecisionsFromDb does
|
|
292
|
-
const decisions = queryDecisions({ milestoneId: 'M001' });
|
|
293
|
-
assertTrue(decisions.length === 1, 'got 1 decision for M001');
|
|
294
|
-
const dFormatted = formatDecisionsForPrompt(decisions);
|
|
295
|
-
const dWrapped = `### Decisions\nSource: \`.gsd/DECISIONS.md\`\n\n${dFormatted}`;
|
|
296
|
-
assertMatch(dWrapped, /^### Decisions\nSource: `.gsd\/DECISIONS\.md`\n\n\| #/, 'decisions wrapper format correct');
|
|
297
|
-
|
|
298
|
-
// Simulate what inlineRequirementsFromDb does
|
|
299
|
-
const reqs = queryRequirements({ sliceId: 'S01' });
|
|
300
|
-
assertTrue(reqs.length === 1, 'got 1 requirement for S01');
|
|
301
|
-
const rFormatted = formatRequirementsForPrompt(reqs);
|
|
302
|
-
const rWrapped = `### Requirements\nSource: \`.gsd/REQUIREMENTS.md\`\n\n${rFormatted}`;
|
|
303
|
-
assertMatch(rWrapped, /^### Requirements\nSource: `.gsd\/REQUIREMENTS\.md`\n\n### R001/, 'requirements wrapper format correct');
|
|
304
|
-
|
|
305
|
-
// Simulate what inlineProjectFromDb does
|
|
306
|
-
const project = queryProject();
|
|
307
|
-
assertTrue(project !== null, 'project content exists');
|
|
308
|
-
const pWrapped = `### Project\nSource: \`.gsd/PROJECT.md\`\n\n${project}`;
|
|
309
|
-
assertMatch(pWrapped, /^### Project\nSource: `.gsd\/PROJECT\.md`\n\n# Project Name/, 'project wrapper format correct');
|
|
310
|
-
|
|
311
|
-
closeDatabase();
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
315
|
-
// prompt-db: re-import updates DB when source markdown changes
|
|
316
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
317
|
-
|
|
318
|
-
import { mkdtempSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
319
|
-
import { join } from 'node:path';
|
|
320
|
-
import { tmpdir } from 'node:os';
|
|
321
|
-
import { migrateFromMarkdown } from '../md-importer.ts';
|
|
322
|
-
|
|
323
|
-
console.log('\n=== prompt-db: re-import updates DB when source markdown changes ===');
|
|
324
|
-
{
|
|
325
|
-
// Create a temp dir simulating a project with .gsd/DECISIONS.md
|
|
326
|
-
const tmpDir = mkdtempSync(join(tmpdir(), 'prompt-db-reimport-'));
|
|
327
|
-
const gsdDir = join(tmpDir, '.gsd');
|
|
328
|
-
mkdirSync(gsdDir, { recursive: true });
|
|
329
|
-
|
|
330
|
-
// Write initial DECISIONS.md with 2 decisions
|
|
331
|
-
const initialDecisions = `# Decisions Register
|
|
332
|
-
|
|
333
|
-
| # | When | Scope | Decision | Choice | Rationale | Revisable? |
|
|
334
|
-
|---|------|-------|----------|--------|-----------|------------|
|
|
335
|
-
| D001 | M001/S01 | architecture | use SQLite | better-sqlite3 | fast and embedded | yes |
|
|
336
|
-
| D002 | M001/S01 | tooling | use vitest | vitest | modern test runner | yes |
|
|
337
|
-
`;
|
|
338
|
-
writeFileSync(join(gsdDir, 'DECISIONS.md'), initialDecisions);
|
|
339
|
-
|
|
340
|
-
// Open in-memory DB and do initial import
|
|
341
|
-
openDatabase(':memory:');
|
|
342
|
-
migrateFromMarkdown(tmpDir);
|
|
343
|
-
|
|
344
|
-
// Verify initial state: 2 decisions
|
|
345
|
-
const initial = queryDecisions();
|
|
346
|
-
assertEq(initial.length, 2, 're-import: initial import has 2 decisions');
|
|
347
|
-
const initialIds = initial.map(d => d.id).sort();
|
|
348
|
-
assertEq(initialIds, ['D001', 'D002'], 're-import: initial decisions are D001, D002');
|
|
349
|
-
|
|
350
|
-
// Now "the LLM modifies DECISIONS.md" — add a third decision
|
|
351
|
-
const updatedDecisions = `# Decisions Register
|
|
352
|
-
|
|
353
|
-
| # | When | Scope | Decision | Choice | Rationale | Revisable? |
|
|
354
|
-
|---|------|-------|----------|--------|-----------|------------|
|
|
355
|
-
| D001 | M001/S01 | architecture | use SQLite | better-sqlite3 | fast and embedded | yes |
|
|
356
|
-
| D002 | M001/S01 | tooling | use vitest | vitest | modern test runner | yes |
|
|
357
|
-
| D003 | M001/S02 | runtime | dynamic imports | D014 pattern | lazy loading | yes |
|
|
358
|
-
`;
|
|
359
|
-
writeFileSync(join(gsdDir, 'DECISIONS.md'), updatedDecisions);
|
|
360
|
-
|
|
361
|
-
// Re-import (simulating what handleAgentEnd does)
|
|
362
|
-
migrateFromMarkdown(tmpDir);
|
|
363
|
-
|
|
364
|
-
// Verify DB now has 3 decisions
|
|
365
|
-
const afterReimport = queryDecisions();
|
|
366
|
-
assertEq(afterReimport.length, 3, 're-import: after re-import has 3 decisions');
|
|
367
|
-
const afterIds = afterReimport.map(d => d.id).sort();
|
|
368
|
-
assertEq(afterIds, ['D001', 'D002', 'D003'], 're-import: decisions are D001, D002, D003');
|
|
369
|
-
|
|
370
|
-
// Verify the new decision has correct data
|
|
371
|
-
const d003 = afterReimport.find(d => d.id === 'D003');
|
|
372
|
-
assertTrue(d003 !== undefined, 're-import: D003 exists');
|
|
373
|
-
assertEq(d003!.when_context, 'M001/S02', 're-import: D003 when_context is M001/S02');
|
|
374
|
-
assertEq(d003!.scope, 'runtime', 're-import: D003 scope is runtime');
|
|
375
|
-
assertEq(d003!.choice, 'D014 pattern', 're-import: D003 choice is D014 pattern');
|
|
376
|
-
|
|
377
|
-
// Verify scoped query picks up the new decision
|
|
378
|
-
const m001Scoped = queryDecisions({ milestoneId: 'M001' });
|
|
379
|
-
assertTrue(m001Scoped.length === 3, 're-import: all 3 decisions are for M001');
|
|
380
|
-
|
|
381
|
-
closeDatabase();
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// ─── Final Report ──────────────────────────────────────────────────────────
|
|
385
|
-
report();
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { reorderForCaching, analyzeCacheEfficiency } from "../prompt-ordering.js";
|
|
4
|
-
|
|
5
|
-
describe("reorderForCaching", () => {
|
|
6
|
-
it("reorders static sections before dynamic sections", () => {
|
|
7
|
-
const prompt = [
|
|
8
|
-
"## Inlined Task Plan",
|
|
9
|
-
"Do the task steps here.",
|
|
10
|
-
"",
|
|
11
|
-
"## Output Template",
|
|
12
|
-
"Use this template.",
|
|
13
|
-
"",
|
|
14
|
-
"## Resume State",
|
|
15
|
-
"Resuming from checkpoint.",
|
|
16
|
-
].join("\n");
|
|
17
|
-
|
|
18
|
-
const result = reorderForCaching(prompt);
|
|
19
|
-
const outputIdx = result.indexOf("## Output Template");
|
|
20
|
-
const taskIdx = result.indexOf("## Inlined Task Plan");
|
|
21
|
-
const resumeIdx = result.indexOf("## Resume State");
|
|
22
|
-
|
|
23
|
-
assert.ok(outputIdx < taskIdx, "Static 'Output Template' should come before dynamic 'Inlined Task Plan'");
|
|
24
|
-
assert.ok(outputIdx < resumeIdx, "Static 'Output Template' should come before dynamic 'Resume State'");
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it("preserves preamble at the beginning", () => {
|
|
28
|
-
const prompt = [
|
|
29
|
-
"You are executing GSD auto-mode.",
|
|
30
|
-
"",
|
|
31
|
-
"## Output Template",
|
|
32
|
-
"Template content.",
|
|
33
|
-
"",
|
|
34
|
-
"## Inlined Task Plan",
|
|
35
|
-
"Task content.",
|
|
36
|
-
].join("\n");
|
|
37
|
-
|
|
38
|
-
const result = reorderForCaching(prompt);
|
|
39
|
-
assert.ok(
|
|
40
|
-
result.startsWith("You are executing GSD auto-mode."),
|
|
41
|
-
"Preamble should remain at the start",
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it("preserves relative order within groups", () => {
|
|
46
|
-
const prompt = [
|
|
47
|
-
"## Decisions",
|
|
48
|
-
"Decision A.",
|
|
49
|
-
"",
|
|
50
|
-
"## Requirements",
|
|
51
|
-
"Requirement B.",
|
|
52
|
-
"",
|
|
53
|
-
"## Overrides",
|
|
54
|
-
"Override C.",
|
|
55
|
-
].join("\n");
|
|
56
|
-
|
|
57
|
-
const result = reorderForCaching(prompt);
|
|
58
|
-
const decisionsIdx = result.indexOf("## Decisions");
|
|
59
|
-
const requirementsIdx = result.indexOf("## Requirements");
|
|
60
|
-
const overridesIdx = result.indexOf("## Overrides");
|
|
61
|
-
|
|
62
|
-
assert.ok(decisionsIdx < requirementsIdx, "Decisions should come before Requirements (same group order)");
|
|
63
|
-
assert.ok(requirementsIdx < overridesIdx, "Requirements should come before Overrides (same group order)");
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it("handles prompts with no headings (returns unchanged)", () => {
|
|
67
|
-
const prompt = "Just plain text with no markdown headings at all.";
|
|
68
|
-
const result = reorderForCaching(prompt);
|
|
69
|
-
assert.equal(result, prompt);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it("handles prompts with only static sections", () => {
|
|
73
|
-
const prompt = [
|
|
74
|
-
"## Output Template",
|
|
75
|
-
"Template A.",
|
|
76
|
-
"",
|
|
77
|
-
"## Executor Context Constraints",
|
|
78
|
-
"Constraints B.",
|
|
79
|
-
].join("\n");
|
|
80
|
-
|
|
81
|
-
const result = reorderForCaching(prompt);
|
|
82
|
-
// Both are static, order preserved
|
|
83
|
-
assert.ok(result.indexOf("## Output Template") < result.indexOf("## Executor Context Constraints"));
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it("handles prompts with only dynamic sections", () => {
|
|
87
|
-
const prompt = [
|
|
88
|
-
"## Inlined Task Plan",
|
|
89
|
-
"Plan A.",
|
|
90
|
-
"",
|
|
91
|
-
"## Resume State",
|
|
92
|
-
"State B.",
|
|
93
|
-
"",
|
|
94
|
-
"## Verification",
|
|
95
|
-
"Check C.",
|
|
96
|
-
].join("\n");
|
|
97
|
-
|
|
98
|
-
const result = reorderForCaching(prompt);
|
|
99
|
-
// All dynamic, order preserved
|
|
100
|
-
const planIdx = result.indexOf("## Inlined Task Plan");
|
|
101
|
-
const resumeIdx = result.indexOf("## Resume State");
|
|
102
|
-
const verifyIdx = result.indexOf("## Verification");
|
|
103
|
-
assert.ok(planIdx < resumeIdx);
|
|
104
|
-
assert.ok(resumeIdx < verifyIdx);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it("unknown headings default to dynamic", () => {
|
|
108
|
-
const prompt = [
|
|
109
|
-
"## Output Template",
|
|
110
|
-
"Static content.",
|
|
111
|
-
"",
|
|
112
|
-
"## Some Unknown Section",
|
|
113
|
-
"Unknown content.",
|
|
114
|
-
"",
|
|
115
|
-
"## Decisions",
|
|
116
|
-
"Semi-static content.",
|
|
117
|
-
].join("\n");
|
|
118
|
-
|
|
119
|
-
const result = reorderForCaching(prompt);
|
|
120
|
-
const staticIdx = result.indexOf("## Output Template");
|
|
121
|
-
const semiIdx = result.indexOf("## Decisions");
|
|
122
|
-
const unknownIdx = result.indexOf("## Some Unknown Section");
|
|
123
|
-
|
|
124
|
-
assert.ok(staticIdx < semiIdx, "Static before semi-static");
|
|
125
|
-
assert.ok(semiIdx < unknownIdx, "Semi-static before unknown (dynamic)");
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it("sub-headings stay with their parent section", () => {
|
|
129
|
-
const prompt = [
|
|
130
|
-
"## Slice Plan Excerpt",
|
|
131
|
-
"Slice content.",
|
|
132
|
-
"### Task List",
|
|
133
|
-
"- T1.1",
|
|
134
|
-
"- T1.2",
|
|
135
|
-
"",
|
|
136
|
-
"## Inlined Task Plan",
|
|
137
|
-
"Dynamic task content.",
|
|
138
|
-
].join("\n");
|
|
139
|
-
|
|
140
|
-
const result = reorderForCaching(prompt);
|
|
141
|
-
// The ### Task List should stay with ## Slice Plan Excerpt
|
|
142
|
-
const sliceIdx = result.indexOf("## Slice Plan Excerpt");
|
|
143
|
-
const taskListIdx = result.indexOf("### Task List");
|
|
144
|
-
const inlinedIdx = result.indexOf("## Inlined Task Plan");
|
|
145
|
-
|
|
146
|
-
assert.ok(sliceIdx < taskListIdx, "Sub-heading stays after its parent");
|
|
147
|
-
assert.ok(taskListIdx < inlinedIdx, "Sub-heading block comes before dynamic section");
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
describe("analyzeCacheEfficiency", () => {
|
|
152
|
-
it("returns correct ratios", () => {
|
|
153
|
-
const prompt = [
|
|
154
|
-
"Preamble text here.",
|
|
155
|
-
"",
|
|
156
|
-
"## Output Template",
|
|
157
|
-
"Static content here.",
|
|
158
|
-
"",
|
|
159
|
-
"## Decisions",
|
|
160
|
-
"Semi-static content.",
|
|
161
|
-
"",
|
|
162
|
-
"## Inlined Task Plan",
|
|
163
|
-
"Dynamic content here.",
|
|
164
|
-
].join("\n");
|
|
165
|
-
|
|
166
|
-
const result = analyzeCacheEfficiency(prompt);
|
|
167
|
-
|
|
168
|
-
assert.ok(result.totalChars > 0, "totalChars should be positive");
|
|
169
|
-
assert.ok(result.staticChars > 0, "staticChars should be positive (includes preamble)");
|
|
170
|
-
assert.ok(result.semiStaticChars > 0, "semiStaticChars should be positive");
|
|
171
|
-
assert.ok(result.dynamicChars > 0, "dynamicChars should be positive");
|
|
172
|
-
assert.ok(result.cacheEfficiency > 0 && result.cacheEfficiency < 1, "efficiency should be between 0 and 1");
|
|
173
|
-
assert.equal(
|
|
174
|
-
result.totalChars,
|
|
175
|
-
result.staticChars + result.semiStaticChars + result.dynamicChars,
|
|
176
|
-
"chars should sum to total",
|
|
177
|
-
);
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it("returns 1.0 efficiency for all-static prompts", () => {
|
|
181
|
-
const prompt = [
|
|
182
|
-
"## Output Template",
|
|
183
|
-
"All static.",
|
|
184
|
-
"",
|
|
185
|
-
"## Executor Context Constraints",
|
|
186
|
-
"Also static.",
|
|
187
|
-
].join("\n");
|
|
188
|
-
|
|
189
|
-
const result = analyzeCacheEfficiency(prompt);
|
|
190
|
-
assert.equal(result.cacheEfficiency, 1.0);
|
|
191
|
-
assert.equal(result.dynamicChars, 0);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it("returns 0 efficiency for all-dynamic prompts", () => {
|
|
195
|
-
const prompt = [
|
|
196
|
-
"## Inlined Task Plan",
|
|
197
|
-
"All dynamic.",
|
|
198
|
-
"",
|
|
199
|
-
"## Resume State",
|
|
200
|
-
"Also dynamic.",
|
|
201
|
-
].join("\n");
|
|
202
|
-
|
|
203
|
-
const result = analyzeCacheEfficiency(prompt);
|
|
204
|
-
assert.equal(result.cacheEfficiency, 0);
|
|
205
|
-
assert.equal(result.staticChars, 0);
|
|
206
|
-
assert.equal(result.semiStaticChars, 0);
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
describe("real-world prompt reordering", () => {
|
|
211
|
-
it("reorders a realistic execute-task prompt for better cache efficiency", () => {
|
|
212
|
-
// Simulate a prompt resembling buildExecuteTaskPrompt output
|
|
213
|
-
const prompt = [
|
|
214
|
-
"You are executing GSD auto-mode.",
|
|
215
|
-
"",
|
|
216
|
-
"## UNIT: Execute Task T1.2 (\"Add login\") -- Slice S1 (\"Auth\"), Milestone M1",
|
|
217
|
-
"",
|
|
218
|
-
"## Working Directory",
|
|
219
|
-
"Your working directory is `/project`.",
|
|
220
|
-
"",
|
|
221
|
-
"## Overrides",
|
|
222
|
-
"No overrides.",
|
|
223
|
-
"",
|
|
224
|
-
"## Resume State",
|
|
225
|
-
"Resuming from step 3.",
|
|
226
|
-
"",
|
|
227
|
-
"## Carry-Forward Context",
|
|
228
|
-
"Previous task noted the API uses JWT.",
|
|
229
|
-
"",
|
|
230
|
-
"## Inlined Task Plan",
|
|
231
|
-
"1. Create auth endpoint",
|
|
232
|
-
"2. Add JWT validation",
|
|
233
|
-
"3. Write tests",
|
|
234
|
-
"",
|
|
235
|
-
"## Slice Plan Excerpt",
|
|
236
|
-
"Tasks: T1.1, T1.2, T1.3",
|
|
237
|
-
"Verification: run tests",
|
|
238
|
-
"",
|
|
239
|
-
"## Decisions",
|
|
240
|
-
"Using bcrypt for password hashing.",
|
|
241
|
-
"",
|
|
242
|
-
"## Requirements",
|
|
243
|
-
"Must support OAuth2.",
|
|
244
|
-
"",
|
|
245
|
-
"## Prior Task Summaries",
|
|
246
|
-
"T1.1 completed: scaffolded auth module.",
|
|
247
|
-
"",
|
|
248
|
-
"## Backing Source Artifacts",
|
|
249
|
-
"- Slice plan: `.gsd/slices/S1.md`",
|
|
250
|
-
"",
|
|
251
|
-
"## Output Template",
|
|
252
|
-
"Use standard task summary format.",
|
|
253
|
-
"",
|
|
254
|
-
"## Verification",
|
|
255
|
-
"Run `npm test` and verify all pass.",
|
|
256
|
-
].join("\n");
|
|
257
|
-
|
|
258
|
-
const beforeEfficiency = analyzeCacheEfficiency(prompt);
|
|
259
|
-
const reordered = reorderForCaching(prompt);
|
|
260
|
-
const afterEfficiency = analyzeCacheEfficiency(reordered);
|
|
261
|
-
|
|
262
|
-
// Efficiency score doesn't change (same content), but ordering improves cache prefix
|
|
263
|
-
assert.equal(beforeEfficiency.cacheEfficiency, afterEfficiency.cacheEfficiency);
|
|
264
|
-
|
|
265
|
-
// Verify static sections come first (after preamble + UNIT heading which is dynamic)
|
|
266
|
-
const outputTemplateIdx = reordered.indexOf("## Output Template");
|
|
267
|
-
const workingDirIdx = reordered.indexOf("## Working Directory");
|
|
268
|
-
const backingIdx = reordered.indexOf("## Backing Source Artifacts");
|
|
269
|
-
|
|
270
|
-
// Semi-static sections come after static
|
|
271
|
-
const decisionsIdx = reordered.indexOf("## Decisions");
|
|
272
|
-
const requirementsIdx = reordered.indexOf("## Requirements");
|
|
273
|
-
const sliceIdx = reordered.indexOf("## Slice Plan Excerpt");
|
|
274
|
-
|
|
275
|
-
// Dynamic sections come last
|
|
276
|
-
const taskPlanIdx = reordered.indexOf("## Inlined Task Plan");
|
|
277
|
-
const resumeIdx = reordered.indexOf("## Resume State");
|
|
278
|
-
const verifyIdx = reordered.indexOf("## Verification");
|
|
279
|
-
|
|
280
|
-
// Static before semi-static
|
|
281
|
-
assert.ok(outputTemplateIdx < decisionsIdx, "Static before semi-static");
|
|
282
|
-
assert.ok(workingDirIdx < sliceIdx, "Static before semi-static");
|
|
283
|
-
assert.ok(backingIdx < requirementsIdx, "Static before semi-static");
|
|
284
|
-
|
|
285
|
-
// Semi-static before dynamic
|
|
286
|
-
assert.ok(decisionsIdx < taskPlanIdx, "Semi-static before dynamic");
|
|
287
|
-
assert.ok(requirementsIdx < resumeIdx, "Semi-static before dynamic");
|
|
288
|
-
assert.ok(sliceIdx < verifyIdx, "Semi-static before dynamic");
|
|
289
|
-
|
|
290
|
-
// Preamble still first
|
|
291
|
-
assert.ok(
|
|
292
|
-
reordered.startsWith("You are executing GSD auto-mode."),
|
|
293
|
-
"Preamble preserved at start",
|
|
294
|
-
);
|
|
295
|
-
});
|
|
296
|
-
});
|