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
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Compressor — deterministic text compression for context reduction.
|
|
3
|
+
*
|
|
4
|
+
* Applies a series of lossless and near-lossless transformations to reduce
|
|
5
|
+
* token count while preserving semantic meaning. No LLM calls, no external
|
|
6
|
+
* dependencies. Sub-millisecond for typical prompt sizes.
|
|
7
|
+
*
|
|
8
|
+
* Compression techniques (applied in order):
|
|
9
|
+
* 1. Redundant whitespace normalization
|
|
10
|
+
* 2. Markdown formatting reduction (collapse verbose tables, lists)
|
|
11
|
+
* 3. Common phrase abbreviation
|
|
12
|
+
* 4. Repeated pattern deduplication
|
|
13
|
+
* 5. Low-information content removal (empty sections, boilerplate)
|
|
14
|
+
*/
|
|
15
|
+
// ─── Phrase Abbreviation Map ────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Build a regex that matches a verbose phrase even when split across lines.
|
|
18
|
+
* Whitespace between words is matched with \s+ to handle line wrapping.
|
|
19
|
+
*/
|
|
20
|
+
function phraseRegex(phrase) {
|
|
21
|
+
const words = phrase.split(/\s+/);
|
|
22
|
+
const pattern = `\\b${words.join("\\s+")}\\b`;
|
|
23
|
+
return new RegExp(pattern, "gi");
|
|
24
|
+
}
|
|
25
|
+
const VERBOSE_PHRASES = [
|
|
26
|
+
[phraseRegex("In order to"), "To"],
|
|
27
|
+
[phraseRegex("It is important to note that"), "Note:"],
|
|
28
|
+
[phraseRegex("As mentioned previously"), "(see above)"],
|
|
29
|
+
[phraseRegex("The following"), "These"],
|
|
30
|
+
[phraseRegex("In addition to"), "Also,"],
|
|
31
|
+
[phraseRegex("Due to the fact that"), "Because"],
|
|
32
|
+
[phraseRegex("At this point in time"), "Now"],
|
|
33
|
+
[phraseRegex("For the purpose of"), "For"],
|
|
34
|
+
[phraseRegex("In the event that"), "If"],
|
|
35
|
+
[phraseRegex("With regard to"), "Re:"],
|
|
36
|
+
[phraseRegex("Prior to"), "Before"],
|
|
37
|
+
[phraseRegex("Subsequent to"), "After"],
|
|
38
|
+
[phraseRegex("In accordance with"), "Per"],
|
|
39
|
+
[phraseRegex("A number of"), "Several"],
|
|
40
|
+
[phraseRegex("In the case of"), "For"],
|
|
41
|
+
[phraseRegex("On the basis of"), "Based on"],
|
|
42
|
+
];
|
|
43
|
+
function extractCodeBlocks(content) {
|
|
44
|
+
const blocks = new Map();
|
|
45
|
+
let counter = 0;
|
|
46
|
+
const text = content.replace(/```[\s\S]*?```/g, (match) => {
|
|
47
|
+
const placeholder = `\x00CODEBLOCK_${counter++}\x00`;
|
|
48
|
+
blocks.set(placeholder, match);
|
|
49
|
+
return placeholder;
|
|
50
|
+
});
|
|
51
|
+
return { text, blocks };
|
|
52
|
+
}
|
|
53
|
+
function restoreCodeBlocks(text, blocks) {
|
|
54
|
+
let result = text;
|
|
55
|
+
for (const [placeholder, block] of blocks) {
|
|
56
|
+
result = result.replace(placeholder, block);
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
// ─── Light Transformations ──────────────────────────────────────────────────
|
|
61
|
+
function normalizeWhitespace(content) {
|
|
62
|
+
// Collapse 3+ consecutive blank lines to 2
|
|
63
|
+
let result = content.replace(/(\n\s*){3,}\n/g, "\n\n");
|
|
64
|
+
// Trim trailing whitespace on every line
|
|
65
|
+
result = result.replace(/[ \t]+$/gm, "");
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
function removeMarkdownComments(content) {
|
|
69
|
+
return content.replace(/<!--[\s\S]*?-->/g, "");
|
|
70
|
+
}
|
|
71
|
+
function removeHorizontalRules(content) {
|
|
72
|
+
// Remove horizontal rules (---, ***, ___) that stand alone on a line
|
|
73
|
+
return content.replace(/^\s*[-*_]{3,}\s*$/gm, "");
|
|
74
|
+
}
|
|
75
|
+
function collapseEmptyListItems(content) {
|
|
76
|
+
// Collapse repeated empty list items (- \n- \n- \n) into one
|
|
77
|
+
return content.replace(/(^[ \t]*[-*+]\s*$\n){2,}/gm, "$1");
|
|
78
|
+
}
|
|
79
|
+
function applyLightTransformations(content) {
|
|
80
|
+
let count = 0;
|
|
81
|
+
let result = content;
|
|
82
|
+
const after1 = normalizeWhitespace(result);
|
|
83
|
+
if (after1 !== result)
|
|
84
|
+
count++;
|
|
85
|
+
result = after1;
|
|
86
|
+
const after2 = removeMarkdownComments(result);
|
|
87
|
+
if (after2 !== result)
|
|
88
|
+
count++;
|
|
89
|
+
result = after2;
|
|
90
|
+
const after3 = removeHorizontalRules(result);
|
|
91
|
+
if (after3 !== result)
|
|
92
|
+
count++;
|
|
93
|
+
result = after3;
|
|
94
|
+
const after4 = collapseEmptyListItems(result);
|
|
95
|
+
if (after4 !== result)
|
|
96
|
+
count++;
|
|
97
|
+
result = after4;
|
|
98
|
+
return { content: result, count };
|
|
99
|
+
}
|
|
100
|
+
// ─── Moderate Transformations ───────────────────────────────────────────────
|
|
101
|
+
function abbreviateVerbosePhrases(content) {
|
|
102
|
+
let count = 0;
|
|
103
|
+
let result = content;
|
|
104
|
+
for (const [pattern, replacement] of VERBOSE_PHRASES) {
|
|
105
|
+
const after = result.replace(pattern, replacement);
|
|
106
|
+
if (after !== result)
|
|
107
|
+
count++;
|
|
108
|
+
result = after;
|
|
109
|
+
}
|
|
110
|
+
return { content: result, count };
|
|
111
|
+
}
|
|
112
|
+
function removeBoilerplateLines(content) {
|
|
113
|
+
const lines = content.split("\n");
|
|
114
|
+
const filtered = lines.filter((line) => {
|
|
115
|
+
const trimmed = line.trim();
|
|
116
|
+
// Remove lines that are just N/A, (none), (empty), (not applicable)
|
|
117
|
+
if (/^(?:N\/A|\(none\)|\(empty\)|\(not applicable\))$/i.test(trimmed)) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
});
|
|
122
|
+
return filtered.join("\n");
|
|
123
|
+
}
|
|
124
|
+
function deduplicateConsecutiveLines(content) {
|
|
125
|
+
const lines = content.split("\n");
|
|
126
|
+
const result = [];
|
|
127
|
+
for (let i = 0; i < lines.length; i++) {
|
|
128
|
+
if (i === 0 || lines[i] !== lines[i - 1] || lines[i].trim() === "") {
|
|
129
|
+
result.push(lines[i]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return result.join("\n");
|
|
133
|
+
}
|
|
134
|
+
function collapseTableFormatting(content) {
|
|
135
|
+
// Remove excessive padding in markdown table cells
|
|
136
|
+
// Matches table rows like | cell | cell | and collapses to | cell | cell |
|
|
137
|
+
return content.replace(/\|[ \t]{2,}([^|\n]*?)[ \t]{2,}\|/g, (_, cellContent) => {
|
|
138
|
+
return `| ${cellContent.trim()} |`;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function applyModerateTransformations(content) {
|
|
142
|
+
let count = 0;
|
|
143
|
+
let result = content;
|
|
144
|
+
const phraseResult = abbreviateVerbosePhrases(result);
|
|
145
|
+
count += phraseResult.count;
|
|
146
|
+
result = phraseResult.content;
|
|
147
|
+
const after1 = removeBoilerplateLines(result);
|
|
148
|
+
if (after1 !== result)
|
|
149
|
+
count++;
|
|
150
|
+
result = after1;
|
|
151
|
+
const after2 = deduplicateConsecutiveLines(result);
|
|
152
|
+
if (after2 !== result)
|
|
153
|
+
count++;
|
|
154
|
+
result = after2;
|
|
155
|
+
const after3 = collapseTableFormatting(result);
|
|
156
|
+
if (after3 !== result)
|
|
157
|
+
count++;
|
|
158
|
+
result = after3;
|
|
159
|
+
return { content: result, count };
|
|
160
|
+
}
|
|
161
|
+
// ─── Aggressive Transformations ─────────────────────────────────────────────
|
|
162
|
+
function removeMarkdownEmphasis(content) {
|
|
163
|
+
// Bold: **text** or __text__
|
|
164
|
+
let result = content.replace(/\*\*(.+?)\*\*/g, "$1");
|
|
165
|
+
result = result.replace(/__(.+?)__/g, "$1");
|
|
166
|
+
// Italic: *text* or _text_ (single, not inside words)
|
|
167
|
+
result = result.replace(/(?<!\w)\*([^*\n]+?)\*(?!\w)/g, "$1");
|
|
168
|
+
result = result.replace(/(?<!\w)_([^_\n]+?)_(?!\w)/g, "$1");
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
function removeMarkdownLinks(content) {
|
|
172
|
+
// [text](url) → text
|
|
173
|
+
return content.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
|
|
174
|
+
}
|
|
175
|
+
function truncateLongLines(content) {
|
|
176
|
+
const lines = content.split("\n");
|
|
177
|
+
const result = lines.map((line) => {
|
|
178
|
+
if (line.length <= 300)
|
|
179
|
+
return line;
|
|
180
|
+
// Find a sentence boundary (. ! ?) near the 300 char mark
|
|
181
|
+
const truncateZone = line.slice(0, 300);
|
|
182
|
+
const lastSentenceEnd = Math.max(truncateZone.lastIndexOf(". "), truncateZone.lastIndexOf("! "), truncateZone.lastIndexOf("? "));
|
|
183
|
+
if (lastSentenceEnd > 150) {
|
|
184
|
+
return line.slice(0, lastSentenceEnd + 1);
|
|
185
|
+
}
|
|
186
|
+
// Fallback: cut at last space before 300
|
|
187
|
+
const lastSpace = truncateZone.lastIndexOf(" ");
|
|
188
|
+
if (lastSpace > 150) {
|
|
189
|
+
return line.slice(0, lastSpace);
|
|
190
|
+
}
|
|
191
|
+
return truncateZone;
|
|
192
|
+
});
|
|
193
|
+
return result.join("\n");
|
|
194
|
+
}
|
|
195
|
+
function removeBulletMarkers(content) {
|
|
196
|
+
// Remove bullet markers: - , * , + , numbered (1. 2. etc)
|
|
197
|
+
return content.replace(/^[ \t]*(?:[-*+]|\d+\.)\s+/gm, "");
|
|
198
|
+
}
|
|
199
|
+
function removeBlockquoteMarkers(content) {
|
|
200
|
+
return content.replace(/^[ \t]*>+\s?/gm, "");
|
|
201
|
+
}
|
|
202
|
+
function deduplicateStructuralPatterns(content) {
|
|
203
|
+
// Deduplicate consecutive lines that match the same "Key: value" pattern
|
|
204
|
+
const lines = content.split("\n");
|
|
205
|
+
const result = [];
|
|
206
|
+
const seen = new Set();
|
|
207
|
+
let lastWasStructural = false;
|
|
208
|
+
for (const line of lines) {
|
|
209
|
+
const trimmed = line.trim();
|
|
210
|
+
// Detect structural patterns: "Key: value"
|
|
211
|
+
const structMatch = trimmed.match(/^(\w[\w\s]*?):\s+(.+)$/);
|
|
212
|
+
if (structMatch) {
|
|
213
|
+
if (seen.has(trimmed)) {
|
|
214
|
+
lastWasStructural = true;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
seen.add(trimmed);
|
|
218
|
+
lastWasStructural = true;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// Reset seen set when structural block ends
|
|
222
|
+
if (!lastWasStructural || trimmed === "") {
|
|
223
|
+
seen.clear();
|
|
224
|
+
}
|
|
225
|
+
lastWasStructural = false;
|
|
226
|
+
}
|
|
227
|
+
result.push(line);
|
|
228
|
+
}
|
|
229
|
+
return result.join("\n");
|
|
230
|
+
}
|
|
231
|
+
function applyAggressiveTransformations(content, preserveHeadings) {
|
|
232
|
+
let count = 0;
|
|
233
|
+
let result = content;
|
|
234
|
+
const after1 = removeMarkdownEmphasis(result);
|
|
235
|
+
if (after1 !== result)
|
|
236
|
+
count++;
|
|
237
|
+
result = after1;
|
|
238
|
+
const after2 = removeMarkdownLinks(result);
|
|
239
|
+
if (after2 !== result)
|
|
240
|
+
count++;
|
|
241
|
+
result = after2;
|
|
242
|
+
const after3 = truncateLongLines(result);
|
|
243
|
+
if (after3 !== result)
|
|
244
|
+
count++;
|
|
245
|
+
result = after3;
|
|
246
|
+
const after4 = removeBulletMarkers(result);
|
|
247
|
+
if (after4 !== result)
|
|
248
|
+
count++;
|
|
249
|
+
result = after4;
|
|
250
|
+
const after5 = removeBlockquoteMarkers(result);
|
|
251
|
+
if (after5 !== result)
|
|
252
|
+
count++;
|
|
253
|
+
result = after5;
|
|
254
|
+
const after6 = deduplicateStructuralPatterns(result);
|
|
255
|
+
if (after6 !== result)
|
|
256
|
+
count++;
|
|
257
|
+
result = after6;
|
|
258
|
+
return { content: result, count };
|
|
259
|
+
}
|
|
260
|
+
function extractHeadings(content) {
|
|
261
|
+
const headings = new Map();
|
|
262
|
+
let counter = 0;
|
|
263
|
+
const text = content.replace(/^(#{1,6}\s.+)$/gm, (match) => {
|
|
264
|
+
const placeholder = `\x00HEADING_${counter++}\x00`;
|
|
265
|
+
headings.set(placeholder, match);
|
|
266
|
+
return placeholder;
|
|
267
|
+
});
|
|
268
|
+
return { text, headings };
|
|
269
|
+
}
|
|
270
|
+
function restoreHeadings(text, headings) {
|
|
271
|
+
let result = text;
|
|
272
|
+
for (const [placeholder, heading] of headings) {
|
|
273
|
+
result = result.replace(placeholder, heading);
|
|
274
|
+
}
|
|
275
|
+
return result;
|
|
276
|
+
}
|
|
277
|
+
// ─── Public API ─────────────────────────────────────────────────────────────
|
|
278
|
+
/**
|
|
279
|
+
* Compress prompt content using deterministic text transformations.
|
|
280
|
+
*/
|
|
281
|
+
export function compressPrompt(content, options) {
|
|
282
|
+
const level = options?.level ?? "moderate";
|
|
283
|
+
const preserveHeadings = options?.preserveHeadings ?? true;
|
|
284
|
+
const preserveCodeBlocks = options?.preserveCodeBlocks ?? true;
|
|
285
|
+
if (content === "") {
|
|
286
|
+
return {
|
|
287
|
+
content: "",
|
|
288
|
+
originalChars: 0,
|
|
289
|
+
compressedChars: 0,
|
|
290
|
+
savingsPercent: 0,
|
|
291
|
+
level,
|
|
292
|
+
transformationsApplied: 0,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
const originalChars = content.length;
|
|
296
|
+
let working = content;
|
|
297
|
+
let totalTransformations = 0;
|
|
298
|
+
// Extract code blocks if preserving
|
|
299
|
+
let codeBlocks = null;
|
|
300
|
+
if (preserveCodeBlocks) {
|
|
301
|
+
const extracted = extractCodeBlocks(working);
|
|
302
|
+
working = extracted.text;
|
|
303
|
+
codeBlocks = extracted.blocks;
|
|
304
|
+
}
|
|
305
|
+
// Extract headings if preserving
|
|
306
|
+
let headings = null;
|
|
307
|
+
if (preserveHeadings) {
|
|
308
|
+
const extracted = extractHeadings(working);
|
|
309
|
+
working = extracted.text;
|
|
310
|
+
headings = extracted.headings;
|
|
311
|
+
}
|
|
312
|
+
// Apply light transformations (always)
|
|
313
|
+
const lightResult = applyLightTransformations(working);
|
|
314
|
+
working = lightResult.content;
|
|
315
|
+
totalTransformations += lightResult.count;
|
|
316
|
+
// Check target
|
|
317
|
+
if (options?.targetChars && getRestoredLength(working, codeBlocks, headings) <= options.targetChars) {
|
|
318
|
+
return buildResult(working, originalChars, level, totalTransformations, codeBlocks, headings);
|
|
319
|
+
}
|
|
320
|
+
// Apply moderate transformations
|
|
321
|
+
if (level === "moderate" || level === "aggressive") {
|
|
322
|
+
const modResult = applyModerateTransformations(working);
|
|
323
|
+
working = modResult.content;
|
|
324
|
+
totalTransformations += modResult.count;
|
|
325
|
+
if (options?.targetChars && getRestoredLength(working, codeBlocks, headings) <= options.targetChars) {
|
|
326
|
+
return buildResult(working, originalChars, level, totalTransformations, codeBlocks, headings);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
// Apply aggressive transformations
|
|
330
|
+
if (level === "aggressive") {
|
|
331
|
+
const aggResult = applyAggressiveTransformations(working, preserveHeadings);
|
|
332
|
+
working = aggResult.content;
|
|
333
|
+
totalTransformations += aggResult.count;
|
|
334
|
+
}
|
|
335
|
+
return buildResult(working, originalChars, level, totalTransformations, codeBlocks, headings);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Compress with a target size — applies progressively more aggressive
|
|
339
|
+
* compression until the target is reached or all transformations exhausted.
|
|
340
|
+
*/
|
|
341
|
+
export function compressToTarget(content, targetChars) {
|
|
342
|
+
if (content.length <= targetChars) {
|
|
343
|
+
return {
|
|
344
|
+
content,
|
|
345
|
+
originalChars: content.length,
|
|
346
|
+
compressedChars: content.length,
|
|
347
|
+
savingsPercent: 0,
|
|
348
|
+
level: "light",
|
|
349
|
+
transformationsApplied: 0,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
const levels = ["light", "moderate", "aggressive"];
|
|
353
|
+
for (const level of levels) {
|
|
354
|
+
const result = compressPrompt(content, { level, targetChars });
|
|
355
|
+
if (result.compressedChars <= targetChars) {
|
|
356
|
+
return result;
|
|
357
|
+
}
|
|
358
|
+
// If aggressive and still over target, return best effort
|
|
359
|
+
if (level === "aggressive") {
|
|
360
|
+
return result;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Unreachable, but satisfy TypeScript
|
|
364
|
+
return compressPrompt(content, { level: "aggressive" });
|
|
365
|
+
}
|
|
366
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
367
|
+
function getRestoredLength(text, codeBlocks, headings) {
|
|
368
|
+
let result = text;
|
|
369
|
+
if (headings)
|
|
370
|
+
result = restoreHeadings(result, headings);
|
|
371
|
+
if (codeBlocks)
|
|
372
|
+
result = restoreCodeBlocks(result, codeBlocks);
|
|
373
|
+
return result.length;
|
|
374
|
+
}
|
|
375
|
+
function buildResult(working, originalChars, level, transformationsApplied, codeBlocks, headings) {
|
|
376
|
+
let content = working;
|
|
377
|
+
if (headings)
|
|
378
|
+
content = restoreHeadings(content, headings);
|
|
379
|
+
if (codeBlocks)
|
|
380
|
+
content = restoreCodeBlocks(content, codeBlocks);
|
|
381
|
+
const compressedChars = content.length;
|
|
382
|
+
const savingsPercent = originalChars > 0
|
|
383
|
+
? Math.round(((originalChars - compressedChars) / originalChars) * 10000) / 100
|
|
384
|
+
: 0;
|
|
385
|
+
return {
|
|
386
|
+
content,
|
|
387
|
+
originalChars,
|
|
388
|
+
compressedChars,
|
|
389
|
+
savingsPercent,
|
|
390
|
+
level,
|
|
391
|
+
transformationsApplied,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GSD Prompt Loader
|
|
3
|
+
*
|
|
4
|
+
* Reads .md prompt templates from the prompts/ directory and substitutes
|
|
5
|
+
* {{variable}} placeholders with provided values.
|
|
6
|
+
*
|
|
7
|
+
* Templates live at prompts/ relative to this module's directory.
|
|
8
|
+
* They use {{variableName}} syntax for substitution.
|
|
9
|
+
*
|
|
10
|
+
* All templates are eagerly loaded into cache at module init via warmCache().
|
|
11
|
+
* This prevents a running session from being invalidated when another `gsd`
|
|
12
|
+
* launch overwrites ~/.gsd/agent/ with newer templates via initResources().
|
|
13
|
+
* Without eager caching, the in-memory extension code (which knows variable
|
|
14
|
+
* set A) can read a newer template from disk (which expects variable set B),
|
|
15
|
+
* causing a "template declares {{X}} but no value was provided" crash
|
|
16
|
+
* mid-session — especially for late-loading templates like complete-milestone
|
|
17
|
+
* that aren't read until the end of a long auto-mode run.
|
|
18
|
+
*/
|
|
19
|
+
import { readFileSync, readdirSync } from "node:fs";
|
|
20
|
+
import { GSDError, GSD_PARSE_ERROR } from "./errors.js";
|
|
21
|
+
import { join, dirname } from "node:path";
|
|
22
|
+
import { fileURLToPath } from "node:url";
|
|
23
|
+
const __extensionDir = dirname(fileURLToPath(import.meta.url));
|
|
24
|
+
const promptsDir = join(__extensionDir, "prompts");
|
|
25
|
+
const templatesDir = join(__extensionDir, "templates");
|
|
26
|
+
// Cache all templates eagerly at module load — a running session uses the
|
|
27
|
+
// template versions that were on disk at startup, immune to later overwrites.
|
|
28
|
+
const templateCache = new Map();
|
|
29
|
+
/**
|
|
30
|
+
* Eagerly read all .md files from prompts/ and templates/ into cache.
|
|
31
|
+
* Called once at module init so that every template is snapshot before
|
|
32
|
+
* a concurrent initResources() can overwrite files on disk.
|
|
33
|
+
*/
|
|
34
|
+
function warmCache() {
|
|
35
|
+
try {
|
|
36
|
+
for (const file of readdirSync(promptsDir)) {
|
|
37
|
+
if (!file.endsWith(".md"))
|
|
38
|
+
continue;
|
|
39
|
+
const name = file.slice(0, -3);
|
|
40
|
+
if (!templateCache.has(name)) {
|
|
41
|
+
templateCache.set(name, readFileSync(join(promptsDir, file), "utf-8"));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// prompts/ may not exist in test environments — lazy loading still works
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
for (const file of readdirSync(templatesDir)) {
|
|
50
|
+
if (!file.endsWith(".md"))
|
|
51
|
+
continue;
|
|
52
|
+
const cacheKey = `tpl:${file.slice(0, -3)}`;
|
|
53
|
+
if (!templateCache.has(cacheKey)) {
|
|
54
|
+
templateCache.set(cacheKey, readFileSync(join(templatesDir, file), "utf-8"));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// templates/ may not exist in test environments — lazy loading still works
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Snapshot all templates at module load time
|
|
63
|
+
warmCache();
|
|
64
|
+
/**
|
|
65
|
+
* Load a prompt template and substitute variables.
|
|
66
|
+
*
|
|
67
|
+
* @param name - Template filename without .md extension (e.g. "execute-task")
|
|
68
|
+
* @param vars - Key-value pairs to substitute for {{key}} placeholders
|
|
69
|
+
*/
|
|
70
|
+
export function loadPrompt(name, vars = {}) {
|
|
71
|
+
let content = templateCache.get(name);
|
|
72
|
+
if (content === undefined) {
|
|
73
|
+
const path = join(promptsDir, `${name}.md`);
|
|
74
|
+
content = readFileSync(path, "utf-8");
|
|
75
|
+
templateCache.set(name, content);
|
|
76
|
+
}
|
|
77
|
+
// Check BEFORE substitution: find all {{varName}} placeholders the template
|
|
78
|
+
// declares and verify every one has a value in vars. Checking after substitution
|
|
79
|
+
// would also flag {{...}} patterns injected by inlined content (e.g. template
|
|
80
|
+
// files embedded in {{inlinedContext}}), producing false positives.
|
|
81
|
+
const declared = content.match(/\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/g);
|
|
82
|
+
if (declared) {
|
|
83
|
+
const missing = [...new Set(declared)]
|
|
84
|
+
.map(m => m.slice(2, -2))
|
|
85
|
+
.filter(key => !(key in vars));
|
|
86
|
+
if (missing.length > 0) {
|
|
87
|
+
throw new GSDError(GSD_PARSE_ERROR, `loadPrompt("${name}"): template declares {{${missing.join("}}, {{")}}}} but no value was provided. ` +
|
|
88
|
+
`This usually means the extension code in memory is older than the template on disk. ` +
|
|
89
|
+
`Restart pi to reload the extension.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
for (const [key, value] of Object.entries(vars)) {
|
|
93
|
+
content = content.replaceAll(`{{${key}}}`, value);
|
|
94
|
+
}
|
|
95
|
+
return content.trim();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load a raw template file from the templates/ directory.
|
|
99
|
+
* Cached with a `tpl:` prefix to avoid collisions with prompt cache keys.
|
|
100
|
+
*/
|
|
101
|
+
export function loadTemplate(name) {
|
|
102
|
+
const cacheKey = `tpl:${name}`;
|
|
103
|
+
let content = templateCache.get(cacheKey);
|
|
104
|
+
if (content === undefined) {
|
|
105
|
+
const path = join(templatesDir, `${name}.md`);
|
|
106
|
+
content = readFileSync(path, "utf-8");
|
|
107
|
+
templateCache.set(cacheKey, content);
|
|
108
|
+
}
|
|
109
|
+
return content.trim();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Load a template and wrap it with a labeled footer for inlining into prompts.
|
|
113
|
+
* The template body is emitted first so that any YAML frontmatter (---) remains
|
|
114
|
+
* at the first non-whitespace line of the template content.
|
|
115
|
+
*/
|
|
116
|
+
export function inlineTemplate(name, label) {
|
|
117
|
+
const content = loadTemplate(name);
|
|
118
|
+
return `${content}\n\n### Output Template: ${label}\nSource: \`templates/${name}.md\``;
|
|
119
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Ordering Optimizer — reorders assembled prompt sections
|
|
3
|
+
* to maximize cache prefix stability.
|
|
4
|
+
*
|
|
5
|
+
* Identifies sections by markdown heading patterns and rearranges
|
|
6
|
+
* them so stable content appears first. Anthropic caches the last
|
|
7
|
+
* user message by prefix match, so placing static/semi-static
|
|
8
|
+
* content before dynamic content improves cache hit rates.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Known heading to role mappings for GSD prompts.
|
|
12
|
+
* Static: templates, executor constraints, system instructions
|
|
13
|
+
* Semi-static: slice plan, decisions, requirements, prior summaries, overrides
|
|
14
|
+
* Dynamic: task plan, resume state, carry-forward, verification
|
|
15
|
+
*/
|
|
16
|
+
const HEADING_ROLES = {
|
|
17
|
+
// Static — never changes per task
|
|
18
|
+
"Output Template": "static",
|
|
19
|
+
"Executor Context Constraints": "static",
|
|
20
|
+
"Working Directory": "static",
|
|
21
|
+
"Backing Source Artifacts": "static",
|
|
22
|
+
// Semi-static — changes per slice but not per task
|
|
23
|
+
"Slice Plan Excerpt": "semi-static",
|
|
24
|
+
"Decisions": "semi-static",
|
|
25
|
+
"Requirements": "semi-static",
|
|
26
|
+
"Prior Task Summaries": "semi-static",
|
|
27
|
+
"Overrides": "semi-static",
|
|
28
|
+
"Project Knowledge": "semi-static",
|
|
29
|
+
"Dependency Summaries": "semi-static",
|
|
30
|
+
// Dynamic — changes per task
|
|
31
|
+
"Inlined Task Plan": "dynamic",
|
|
32
|
+
"Resume State": "dynamic",
|
|
33
|
+
"Carry-Forward Context": "dynamic",
|
|
34
|
+
"Verification": "dynamic",
|
|
35
|
+
"Verification Evidence": "dynamic",
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Extract the heading text from a line like "## Some Heading" or "## UNIT: Execute Task ...".
|
|
39
|
+
* Returns the full text after "## " for role lookup.
|
|
40
|
+
*/
|
|
41
|
+
function extractHeadingText(line) {
|
|
42
|
+
return line.replace(/^##\s+/, "").trim();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Classify a heading by matching against known roles.
|
|
46
|
+
* Uses substring matching so headings like "## UNIT: Execute Task T1.1" don't match
|
|
47
|
+
* but "## Inlined Task Plan" does. Unknown headings default to "dynamic".
|
|
48
|
+
*/
|
|
49
|
+
function classifyHeading(heading) {
|
|
50
|
+
for (const [key, role] of Object.entries(HEADING_ROLES)) {
|
|
51
|
+
if (heading === key || heading.startsWith(key)) {
|
|
52
|
+
return role;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return "dynamic";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Split a prompt into sections at ## heading boundaries.
|
|
59
|
+
* Sub-headings (### and deeper) stay with their parent ## section.
|
|
60
|
+
* Returns a preamble (content before first ##) and an array of sections.
|
|
61
|
+
*/
|
|
62
|
+
function splitSections(prompt) {
|
|
63
|
+
const lines = prompt.split("\n");
|
|
64
|
+
let preamble = "";
|
|
65
|
+
const sections = [];
|
|
66
|
+
let currentHeading = "";
|
|
67
|
+
let currentContent = [];
|
|
68
|
+
for (const line of lines) {
|
|
69
|
+
// Match ## headings but NOT ### or deeper
|
|
70
|
+
if (/^## (?!#)/.test(line)) {
|
|
71
|
+
// Flush previous section
|
|
72
|
+
if (currentHeading) {
|
|
73
|
+
sections.push({
|
|
74
|
+
heading: currentHeading,
|
|
75
|
+
content: currentContent.join("\n"),
|
|
76
|
+
role: classifyHeading(currentHeading),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else if (currentContent.length > 0) {
|
|
80
|
+
preamble = currentContent.join("\n");
|
|
81
|
+
}
|
|
82
|
+
currentHeading = extractHeadingText(line);
|
|
83
|
+
currentContent = [line];
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
currentContent.push(line);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Flush last section
|
|
90
|
+
if (currentHeading) {
|
|
91
|
+
sections.push({
|
|
92
|
+
heading: currentHeading,
|
|
93
|
+
content: currentContent.join("\n"),
|
|
94
|
+
role: classifyHeading(currentHeading),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else if (currentContent.length > 0) {
|
|
98
|
+
preamble = currentContent.join("\n");
|
|
99
|
+
}
|
|
100
|
+
return { preamble, sections };
|
|
101
|
+
}
|
|
102
|
+
const ROLE_ORDER = {
|
|
103
|
+
"static": 0,
|
|
104
|
+
"semi-static": 1,
|
|
105
|
+
"dynamic": 2,
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Reorder a prompt's sections for cache efficiency.
|
|
109
|
+
* Extracts sections by ## heading markers, classifies them,
|
|
110
|
+
* and reorders: static -> semi-static -> dynamic.
|
|
111
|
+
*
|
|
112
|
+
* Content before the first ## heading is treated as a preamble
|
|
113
|
+
* and always placed first (it's usually static instructions).
|
|
114
|
+
*
|
|
115
|
+
* @param prompt The assembled prompt string
|
|
116
|
+
* @returns Reordered prompt string
|
|
117
|
+
*/
|
|
118
|
+
export function reorderForCaching(prompt) {
|
|
119
|
+
const { preamble, sections } = splitSections(prompt);
|
|
120
|
+
// Nothing to reorder
|
|
121
|
+
if (sections.length <= 1) {
|
|
122
|
+
return prompt;
|
|
123
|
+
}
|
|
124
|
+
// Stable sort: sections with the same role keep their original relative order
|
|
125
|
+
const sorted = [...sections].sort((a, b) => {
|
|
126
|
+
return ROLE_ORDER[a.role] - ROLE_ORDER[b.role];
|
|
127
|
+
});
|
|
128
|
+
const parts = [];
|
|
129
|
+
if (preamble) {
|
|
130
|
+
parts.push(preamble);
|
|
131
|
+
}
|
|
132
|
+
for (const section of sorted) {
|
|
133
|
+
parts.push(section.content);
|
|
134
|
+
}
|
|
135
|
+
return parts.join("\n");
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Analyze a prompt's cache efficiency without reordering.
|
|
139
|
+
* Returns stats about how much of the prompt is cacheable.
|
|
140
|
+
*/
|
|
141
|
+
export function analyzeCacheEfficiency(prompt) {
|
|
142
|
+
const { preamble, sections } = splitSections(prompt);
|
|
143
|
+
let staticChars = preamble.length;
|
|
144
|
+
let semiStaticChars = 0;
|
|
145
|
+
let dynamicChars = 0;
|
|
146
|
+
for (const section of sections) {
|
|
147
|
+
switch (section.role) {
|
|
148
|
+
case "static":
|
|
149
|
+
staticChars += section.content.length;
|
|
150
|
+
break;
|
|
151
|
+
case "semi-static":
|
|
152
|
+
semiStaticChars += section.content.length;
|
|
153
|
+
break;
|
|
154
|
+
case "dynamic":
|
|
155
|
+
dynamicChars += section.content.length;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const totalChars = staticChars + semiStaticChars + dynamicChars;
|
|
160
|
+
const cacheEfficiency = totalChars > 0
|
|
161
|
+
? (staticChars + semiStaticChars) / totalChars
|
|
162
|
+
: 0;
|
|
163
|
+
return {
|
|
164
|
+
totalChars,
|
|
165
|
+
staticChars,
|
|
166
|
+
semiStaticChars,
|
|
167
|
+
dynamicChars,
|
|
168
|
+
cacheEfficiency,
|
|
169
|
+
};
|
|
170
|
+
}
|