gsd-pi 2.33.0-dev.bafba33 → 2.33.1-dev.235d83a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -18
- package/dist/cli.js +16 -0
- package/dist/resource-loader.d.ts +2 -0
- package/dist/resource-loader.js +36 -3
- 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 +187 -0
- package/dist/resources/extensions/gsd/auto-budget.js +30 -0
- package/dist/resources/extensions/gsd/{auto-constants.ts → auto-constants.js} +0 -1
- package/dist/resources/extensions/gsd/auto-dashboard.js +509 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +180 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +382 -0
- package/dist/resources/extensions/gsd/auto-idempotency.js +106 -0
- package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
- package/dist/resources/extensions/gsd/auto-observability.js +54 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +495 -0
- package/dist/resources/extensions/gsd/auto-prompts.js +1121 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +550 -0
- package/dist/resources/extensions/gsd/auto-start.js +393 -0
- package/dist/resources/extensions/gsd/auto-stuck-detection.js +165 -0
- package/dist/resources/extensions/gsd/{auto-supervisor.ts → auto-supervisor.js} +29 -32
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
- package/dist/resources/extensions/gsd/auto-timers.js +181 -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 +209 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +594 -0
- package/dist/resources/extensions/gsd/auto.js +1485 -0
- package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
- package/dist/resources/extensions/gsd/captures.js +348 -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 +76 -0
- package/dist/resources/extensions/gsd/doctor-checks.js +563 -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 +590 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
- package/dist/resources/extensions/gsd/guided-flow.js +1149 -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 +1250 -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/mechanical-completion.js +351 -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 +197 -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 +230 -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 +376 -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/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 +210 -0
- package/dist/resources/extensions/gsd/unit-id.js +7 -0
- package/dist/resources/extensions/gsd/unit-runtime.js +130 -0
- package/dist/resources/extensions/gsd/validate-directory.js +143 -0
- package/dist/resources/extensions/gsd/verification-evidence.js +123 -0
- package/dist/resources/extensions/gsd/verification-gate.js +543 -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 +676 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +359 -0
- package/dist/resources/extensions/gsd/worktree.js +236 -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/package.json +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/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-supervisor.ts +10 -5
- package/src/resources/extensions/gsd/auto-verification.ts +20 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +136 -1
- package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
- package/src/resources/extensions/gsd/commands.ts +53 -33
- package/src/resources/extensions/gsd/git-service.ts +24 -11
- package/src/resources/extensions/gsd/index.ts +106 -34
- package/src/resources/extensions/gsd/quick.ts +52 -3
- package/src/resources/extensions/gsd/repo-identity.ts +56 -22
- package/src/resources/extensions/gsd/session-lock.ts +80 -16
- package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +691 -0
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +317 -0
- package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
- package/src/resources/extensions/gsd/tests/loop-regression.test.ts +40 -5
- 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/roadmap-parse-regression.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +216 -0
- package/src/resources/extensions/gsd/tests/session-lock.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +206 -0
- package/src/resources/extensions/gsd/types.ts +4 -0
- package/src/resources/extensions/gsd/verification-evidence.ts +1 -1
- package/src/resources/extensions/gsd/verification-gate.ts +23 -2
- package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
- package/src/resources/extensions/gsd/worktree-command.ts +17 -11
- 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-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-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 -524
- 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 -1137
- 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 -362
- 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-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/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 -839
- 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-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.test.ts +0 -315
- 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.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/mcporter/extension-manifest.json +0 -12
- 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/mcporter/extension-manifest.json +0 -12
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification Evidence — JSON persistence and markdown table formatting.
|
|
3
|
+
*
|
|
4
|
+
* Two pure-ish functions:
|
|
5
|
+
* - writeVerificationJSON: persists a machine-readable T##-VERIFY.json artifact
|
|
6
|
+
* - formatEvidenceTable: returns a markdown evidence table string
|
|
7
|
+
*
|
|
8
|
+
* JSON schema uses schemaVersion: 1 for forward-compatibility.
|
|
9
|
+
* stdout/stderr are intentionally excluded from the JSON to avoid unbounded file sizes.
|
|
10
|
+
*/
|
|
11
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
/**
|
|
14
|
+
* Write a T##-VERIFY.json artifact to the tasks directory.
|
|
15
|
+
* Creates the directory with mkdirSync({ recursive: true }) if it doesn't exist.
|
|
16
|
+
*
|
|
17
|
+
* stdout/stderr are excluded from the JSON — the full output lives in VerificationResult
|
|
18
|
+
* in memory and is logged to stderr during the gate run.
|
|
19
|
+
*/
|
|
20
|
+
export function writeVerificationJSON(result, tasksDir, taskId, unitId, retryAttempt, maxRetries) {
|
|
21
|
+
mkdirSync(tasksDir, { recursive: true });
|
|
22
|
+
const evidence = {
|
|
23
|
+
schemaVersion: 1,
|
|
24
|
+
taskId,
|
|
25
|
+
unitId: unitId ?? taskId,
|
|
26
|
+
timestamp: result.timestamp,
|
|
27
|
+
passed: result.passed,
|
|
28
|
+
discoverySource: result.discoverySource,
|
|
29
|
+
checks: result.checks.map((check) => ({
|
|
30
|
+
command: check.command,
|
|
31
|
+
exitCode: check.exitCode,
|
|
32
|
+
durationMs: check.durationMs,
|
|
33
|
+
verdict: check.exitCode === 0 ? "pass" : "fail",
|
|
34
|
+
blocking: check.blocking,
|
|
35
|
+
})),
|
|
36
|
+
...(retryAttempt !== undefined ? { retryAttempt } : {}),
|
|
37
|
+
...(maxRetries !== undefined ? { maxRetries } : {}),
|
|
38
|
+
};
|
|
39
|
+
if (result.runtimeErrors && result.runtimeErrors.length > 0) {
|
|
40
|
+
evidence.runtimeErrors = result.runtimeErrors.map(e => ({
|
|
41
|
+
source: e.source,
|
|
42
|
+
severity: e.severity,
|
|
43
|
+
message: e.message,
|
|
44
|
+
blocking: e.blocking,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
if (result.auditWarnings && result.auditWarnings.length > 0) {
|
|
48
|
+
evidence.auditWarnings = result.auditWarnings.map(w => ({
|
|
49
|
+
name: w.name,
|
|
50
|
+
severity: w.severity,
|
|
51
|
+
title: w.title,
|
|
52
|
+
url: w.url,
|
|
53
|
+
fixAvailable: w.fixAvailable,
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
const filePath = join(tasksDir, `${taskId}-VERIFY.json`);
|
|
57
|
+
writeFileSync(filePath, JSON.stringify(evidence, null, 2) + "\n", "utf-8");
|
|
58
|
+
}
|
|
59
|
+
// ─── Markdown Evidence Table ─────────────────────────────────────────────────
|
|
60
|
+
/**
|
|
61
|
+
* Format duration in milliseconds as seconds with 1 decimal place.
|
|
62
|
+
* e.g. 2340 → "2.3s", 150 → "0.2s", 0 → "0.0s"
|
|
63
|
+
*
|
|
64
|
+
* Distinct from the shared formatDuration (which uses adaptive ms/s/m/h units);
|
|
65
|
+
* evidence tables always display seconds for consistent column alignment.
|
|
66
|
+
*/
|
|
67
|
+
function formatDurationSecs(ms) {
|
|
68
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Generate a markdown evidence table from a VerificationResult.
|
|
72
|
+
*
|
|
73
|
+
* Returns a "no checks" note if result.checks is empty.
|
|
74
|
+
* Otherwise returns a 5-column markdown table: #, Command, Exit Code, Verdict, Duration.
|
|
75
|
+
*/
|
|
76
|
+
export function formatEvidenceTable(result) {
|
|
77
|
+
if (result.checks.length === 0) {
|
|
78
|
+
return "_No verification checks discovered._";
|
|
79
|
+
}
|
|
80
|
+
const lines = [
|
|
81
|
+
"| # | Command | Exit Code | Verdict | Duration |",
|
|
82
|
+
"|---|---------|-----------|---------|----------|",
|
|
83
|
+
];
|
|
84
|
+
for (let i = 0; i < result.checks.length; i++) {
|
|
85
|
+
const check = result.checks[i];
|
|
86
|
+
const num = i + 1;
|
|
87
|
+
const verdict = check.exitCode === 0 ? "✅ pass" : "❌ fail";
|
|
88
|
+
const duration = formatDurationSecs(check.durationMs);
|
|
89
|
+
lines.push(`| ${num} | ${check.command} | ${check.exitCode} | ${verdict} | ${duration} |`);
|
|
90
|
+
}
|
|
91
|
+
if (result.runtimeErrors && result.runtimeErrors.length > 0) {
|
|
92
|
+
lines.push("");
|
|
93
|
+
lines.push("**Runtime Errors**");
|
|
94
|
+
lines.push("");
|
|
95
|
+
lines.push("| # | Source | Severity | Blocking | Message |");
|
|
96
|
+
lines.push("|---|--------|----------|----------|---------|");
|
|
97
|
+
for (let i = 0; i < result.runtimeErrors.length; i++) {
|
|
98
|
+
const err = result.runtimeErrors[i];
|
|
99
|
+
const blockIcon = err.blocking ? "🚫 yes" : "ℹ️ no";
|
|
100
|
+
lines.push(`| ${i + 1} | ${err.source} | ${err.severity} | ${blockIcon} | ${err.message.slice(0, 100)} |`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (result.auditWarnings && result.auditWarnings.length > 0) {
|
|
104
|
+
const severityEmoji = {
|
|
105
|
+
critical: "🔴",
|
|
106
|
+
high: "🟠",
|
|
107
|
+
moderate: "🟡",
|
|
108
|
+
low: "⚪",
|
|
109
|
+
};
|
|
110
|
+
lines.push("");
|
|
111
|
+
lines.push("**Audit Warnings**");
|
|
112
|
+
lines.push("");
|
|
113
|
+
lines.push("| # | Package | Severity | Title | Fix Available |");
|
|
114
|
+
lines.push("|---|---------|----------|-------|---------------|");
|
|
115
|
+
for (let i = 0; i < result.auditWarnings.length; i++) {
|
|
116
|
+
const w = result.auditWarnings[i];
|
|
117
|
+
const emoji = severityEmoji[w.severity] ?? "⚪";
|
|
118
|
+
const fix = w.fixAvailable ? "✅ yes" : "❌ no";
|
|
119
|
+
lines.push(`| ${i + 1} | ${w.name} | ${emoji} ${w.severity} | ${w.title} | ${fix} |`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return lines.join("\n");
|
|
123
|
+
}
|
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
// GSD Extension — Verification Gate
|
|
2
|
+
// Pure functions for discovering and running verification commands.
|
|
3
|
+
// Discovery order (D003): preference → task plan verify → package.json scripts.
|
|
4
|
+
// First non-empty source wins.
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
6
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
7
|
+
import { join, basename } from "node:path";
|
|
8
|
+
import { DEFAULT_COMMAND_TIMEOUT_MS } from "./constants.js";
|
|
9
|
+
/** Maximum bytes of stdout/stderr to retain per command (10 KB). */
|
|
10
|
+
const MAX_OUTPUT_BYTES = 10 * 1024;
|
|
11
|
+
/** Truncate a string to maxBytes, appending a marker if truncated. */
|
|
12
|
+
function truncate(value, maxBytes) {
|
|
13
|
+
if (!value)
|
|
14
|
+
return "";
|
|
15
|
+
if (Buffer.byteLength(value, "utf-8") <= maxBytes)
|
|
16
|
+
return value;
|
|
17
|
+
// Slice conservatively then trim to last full character
|
|
18
|
+
const buf = Buffer.from(value, "utf-8").subarray(0, maxBytes);
|
|
19
|
+
return buf.toString("utf-8") + "\n…[truncated]";
|
|
20
|
+
}
|
|
21
|
+
/** Package.json script keys to probe, in order. */
|
|
22
|
+
const PACKAGE_SCRIPT_KEYS = ["typecheck", "lint", "test"];
|
|
23
|
+
/**
|
|
24
|
+
* Discover verification commands using the first-non-empty-wins strategy (D003):
|
|
25
|
+
* 1. Explicit preference commands
|
|
26
|
+
* 2. Task plan verify field (split on &&)
|
|
27
|
+
* 3. package.json scripts (typecheck, lint, test)
|
|
28
|
+
* 4. None found
|
|
29
|
+
*/
|
|
30
|
+
export function discoverCommands(options) {
|
|
31
|
+
// 1. Preference commands (still sanitize — may contain prose from misconfiguration)
|
|
32
|
+
if (options.preferenceCommands && options.preferenceCommands.length > 0) {
|
|
33
|
+
const filtered = options.preferenceCommands
|
|
34
|
+
.map(c => c.trim())
|
|
35
|
+
.filter(Boolean)
|
|
36
|
+
.filter(c => isLikelyCommand(c));
|
|
37
|
+
if (filtered.length > 0) {
|
|
38
|
+
return { commands: filtered, source: "preference" };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// 2. Task plan verify field (commands are untrusted — sanitize)
|
|
42
|
+
if (options.taskPlanVerify && options.taskPlanVerify.trim()) {
|
|
43
|
+
const commands = options.taskPlanVerify
|
|
44
|
+
.split("&&")
|
|
45
|
+
.map(c => c.trim())
|
|
46
|
+
.filter(Boolean)
|
|
47
|
+
.filter(c => sanitizeCommand(c) !== null);
|
|
48
|
+
if (commands.length > 0) {
|
|
49
|
+
return { commands, source: "task-plan" };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 3. package.json scripts
|
|
53
|
+
const pkgPath = join(options.cwd, "package.json");
|
|
54
|
+
if (existsSync(pkgPath)) {
|
|
55
|
+
try {
|
|
56
|
+
const raw = readFileSync(pkgPath, "utf-8");
|
|
57
|
+
const pkg = JSON.parse(raw);
|
|
58
|
+
if (pkg && typeof pkg === "object" && pkg.scripts && typeof pkg.scripts === "object") {
|
|
59
|
+
const commands = [];
|
|
60
|
+
for (const key of PACKAGE_SCRIPT_KEYS) {
|
|
61
|
+
if (typeof pkg.scripts[key] === "string") {
|
|
62
|
+
commands.push(`npm run ${key}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (commands.length > 0) {
|
|
66
|
+
return { commands, source: "package-json" };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Malformed package.json — fall through to "none"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// 4. Nothing found
|
|
75
|
+
return { commands: [], source: "none" };
|
|
76
|
+
}
|
|
77
|
+
// ─── Failure Context Formatting ──────────────────────────────────────────────
|
|
78
|
+
/** Maximum chars of stderr to include per failed check in failure context. */
|
|
79
|
+
const MAX_STDERR_PER_CHECK = 2_000;
|
|
80
|
+
/** Maximum total chars for the combined failure context output. */
|
|
81
|
+
const MAX_FAILURE_CONTEXT_CHARS = 10_000;
|
|
82
|
+
/**
|
|
83
|
+
* Format failed verification checks into a prompt-injectable text block.
|
|
84
|
+
*
|
|
85
|
+
* Each failed check gets a heading with the command name and exit code,
|
|
86
|
+
* followed by a truncated stderr excerpt. Individual stderr is capped to
|
|
87
|
+
* 2 000 chars; total output is capped to 10 000 chars.
|
|
88
|
+
*
|
|
89
|
+
* Returns an empty string when all checks pass or the checks array is empty.
|
|
90
|
+
*/
|
|
91
|
+
export function formatFailureContext(result) {
|
|
92
|
+
// Only include blocking failures in retry context — non-blocking (advisory) failures
|
|
93
|
+
// should not be injected into retry prompts to avoid noise pollution.
|
|
94
|
+
const failures = result.checks.filter((c) => c.exitCode !== 0 && c.blocking);
|
|
95
|
+
if (failures.length === 0)
|
|
96
|
+
return "";
|
|
97
|
+
const blocks = [];
|
|
98
|
+
for (const check of failures) {
|
|
99
|
+
let stderr = check.stderr ?? "";
|
|
100
|
+
if (stderr.length > MAX_STDERR_PER_CHECK) {
|
|
101
|
+
stderr = stderr.slice(0, MAX_STDERR_PER_CHECK) + "\n…[truncated]";
|
|
102
|
+
}
|
|
103
|
+
blocks.push(`### ❌ \`${check.command}\` (exit code ${check.exitCode})\n\`\`\`stderr\n${stderr}\n\`\`\``);
|
|
104
|
+
}
|
|
105
|
+
let body = blocks.join("\n\n");
|
|
106
|
+
const header = "## Verification Failures\n\n";
|
|
107
|
+
if (header.length + body.length > MAX_FAILURE_CONTEXT_CHARS) {
|
|
108
|
+
body =
|
|
109
|
+
body.slice(0, MAX_FAILURE_CONTEXT_CHARS - header.length) +
|
|
110
|
+
"\n\n…[remaining failures truncated]";
|
|
111
|
+
}
|
|
112
|
+
return header + body;
|
|
113
|
+
}
|
|
114
|
+
// ─── Gate Execution ─────────────────────────────────────────────────────────
|
|
115
|
+
/** Characters that indicate shell injection when found in a command string. */
|
|
116
|
+
const SHELL_INJECTION_PATTERN = /[;|`]|\$\(/;
|
|
117
|
+
/**
|
|
118
|
+
* Known executable first-tokens that are safe to run.
|
|
119
|
+
* Lowercase commands, common build/test tools, and npm/yarn/pnpm invocations.
|
|
120
|
+
*/
|
|
121
|
+
const KNOWN_COMMAND_PREFIXES = new Set([
|
|
122
|
+
"npm", "npx", "yarn", "pnpm", "bun", "bunx", "deno",
|
|
123
|
+
"node", "ts-node", "tsx", "tsc",
|
|
124
|
+
"sh", "bash", "zsh",
|
|
125
|
+
"echo", "cat", "ls", "test", "true", "false", "pwd", "env",
|
|
126
|
+
"make", "cargo", "go", "python", "python3", "pip", "pip3",
|
|
127
|
+
"ruby", "gem", "bundle", "rake",
|
|
128
|
+
"java", "javac", "mvn", "gradle",
|
|
129
|
+
"docker", "docker-compose",
|
|
130
|
+
"git", "gh",
|
|
131
|
+
"eslint", "prettier", "vitest", "jest", "mocha", "pytest", "phpunit",
|
|
132
|
+
"curl", "wget",
|
|
133
|
+
"grep", "find", "diff", "wc", "sort", "head", "tail",
|
|
134
|
+
]);
|
|
135
|
+
/**
|
|
136
|
+
* Heuristic check: does this string look like an executable shell command
|
|
137
|
+
* rather than a prose description?
|
|
138
|
+
*
|
|
139
|
+
* Returns true when the string appears to be a command. Returns false
|
|
140
|
+
* for English prose (e.g. "Document exists, contains all 5 scale names").
|
|
141
|
+
*
|
|
142
|
+
* Heuristics (any true → command-like):
|
|
143
|
+
* 1. First token is a known command prefix
|
|
144
|
+
* 2. First token starts with `.` or `/` (path-like)
|
|
145
|
+
* 3. Any token starts with `-` (flag-like)
|
|
146
|
+
* 4. First token contains no uppercase letters (commands are lowercase)
|
|
147
|
+
* AND first token does not end with a comma or colon (prose punctuation)
|
|
148
|
+
*
|
|
149
|
+
* Heuristics (any true → prose-like):
|
|
150
|
+
* 1. First token starts with an uppercase letter and the string has 4+ words
|
|
151
|
+
* 2. String contains commas followed by spaces (prose clause structure)
|
|
152
|
+
*/
|
|
153
|
+
export function isLikelyCommand(cmd) {
|
|
154
|
+
const trimmed = cmd.trim();
|
|
155
|
+
if (!trimmed)
|
|
156
|
+
return false;
|
|
157
|
+
const tokens = trimmed.split(/\s+/);
|
|
158
|
+
const firstToken = tokens[0];
|
|
159
|
+
// Known command prefix → definitely a command
|
|
160
|
+
if (KNOWN_COMMAND_PREFIXES.has(firstToken))
|
|
161
|
+
return true;
|
|
162
|
+
// Path-like first token → command
|
|
163
|
+
if (firstToken.startsWith("/") || firstToken.startsWith("./") || firstToken.startsWith("../"))
|
|
164
|
+
return true;
|
|
165
|
+
// Has flag-like tokens → command
|
|
166
|
+
if (tokens.some(t => t.startsWith("-")))
|
|
167
|
+
return true;
|
|
168
|
+
// First token starts with uppercase + 4 or more words → prose
|
|
169
|
+
if (/^[A-Z]/.test(firstToken) && tokens.length >= 4)
|
|
170
|
+
return false;
|
|
171
|
+
// Contains comma-space patterns (prose clause separators) → prose
|
|
172
|
+
if (/,\s/.test(trimmed) && tokens.length >= 4)
|
|
173
|
+
return false;
|
|
174
|
+
// First token has uppercase letters and no path separators → prose
|
|
175
|
+
if (/[A-Z]/.test(firstToken) && !firstToken.includes("/"))
|
|
176
|
+
return false;
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Validate a command string for obvious shell injection patterns.
|
|
181
|
+
* Returns the command unchanged if safe, or null if suspicious.
|
|
182
|
+
*/
|
|
183
|
+
function sanitizeCommand(cmd) {
|
|
184
|
+
if (SHELL_INJECTION_PATTERN.test(cmd))
|
|
185
|
+
return null;
|
|
186
|
+
if (!isLikelyCommand(cmd))
|
|
187
|
+
return null;
|
|
188
|
+
return cmd;
|
|
189
|
+
}
|
|
190
|
+
/** Error codes from spawnSync that indicate infrastructure/OS-level failures
|
|
191
|
+
* rather than the command itself failing. These are transient — the agent
|
|
192
|
+
* cannot fix them, so they should not trigger auto-fix retries. */
|
|
193
|
+
const INFRA_ERROR_CODES = new Set(["ETIMEDOUT", "ENOENT", "ENOMEM", "EMFILE", "ENFILE", "EAGAIN"]);
|
|
194
|
+
/**
|
|
195
|
+
* Run the verification gate: discover commands, execute each via spawnSync,
|
|
196
|
+
* and return a structured result.
|
|
197
|
+
*
|
|
198
|
+
* - All commands run sequentially regardless of individual pass/fail.
|
|
199
|
+
* - `passed` is true when every blocking command exits 0 (or no commands are discovered).
|
|
200
|
+
* - stdout/stderr per command are truncated to 10 KB.
|
|
201
|
+
* - Spawn/infra errors (ETIMEDOUT, ENOENT, etc.) are tagged with `infraError: true`
|
|
202
|
+
* so the retry logic can distinguish "the OS couldn't run this" from "the tests failed".
|
|
203
|
+
*/
|
|
204
|
+
export function runVerificationGate(options) {
|
|
205
|
+
const timestamp = Date.now();
|
|
206
|
+
const { commands, source } = discoverCommands({
|
|
207
|
+
preferenceCommands: options.preferenceCommands,
|
|
208
|
+
taskPlanVerify: options.taskPlanVerify,
|
|
209
|
+
cwd: options.cwd,
|
|
210
|
+
});
|
|
211
|
+
if (commands.length === 0) {
|
|
212
|
+
return {
|
|
213
|
+
passed: true,
|
|
214
|
+
checks: [],
|
|
215
|
+
discoverySource: source,
|
|
216
|
+
timestamp,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Commands from preference and task-plan sources are blocking;
|
|
220
|
+
// package-json discovered commands are advisory (non-blocking).
|
|
221
|
+
const blocking = source === "preference" || source === "task-plan";
|
|
222
|
+
const checks = [];
|
|
223
|
+
for (const command of commands) {
|
|
224
|
+
const start = Date.now();
|
|
225
|
+
const result = spawnSync(command, {
|
|
226
|
+
shell: true,
|
|
227
|
+
cwd: options.cwd,
|
|
228
|
+
stdio: "pipe",
|
|
229
|
+
encoding: "utf-8",
|
|
230
|
+
timeout: options.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS,
|
|
231
|
+
});
|
|
232
|
+
const durationMs = Date.now() - start;
|
|
233
|
+
let exitCode;
|
|
234
|
+
let stderr;
|
|
235
|
+
if (result.error) {
|
|
236
|
+
// Spawn infrastructure failure — OS-level, not a test failure.
|
|
237
|
+
// Tag with infraError so the retry logic can skip auto-fix attempts.
|
|
238
|
+
const errCode = result.error.code;
|
|
239
|
+
const isInfra = !!errCode && INFRA_ERROR_CODES.has(errCode);
|
|
240
|
+
exitCode = 127;
|
|
241
|
+
stderr = truncate((result.stderr || "") + "\n" + result.error.message, MAX_OUTPUT_BYTES);
|
|
242
|
+
checks.push({
|
|
243
|
+
command,
|
|
244
|
+
exitCode,
|
|
245
|
+
stdout: truncate(result.stdout, MAX_OUTPUT_BYTES),
|
|
246
|
+
stderr,
|
|
247
|
+
durationMs,
|
|
248
|
+
blocking,
|
|
249
|
+
...(isInfra ? { infraError: true } : {}),
|
|
250
|
+
});
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
// status is null when killed by signal — treat as failure
|
|
255
|
+
exitCode = result.status ?? 1;
|
|
256
|
+
stderr = truncate(result.stderr, MAX_OUTPUT_BYTES);
|
|
257
|
+
}
|
|
258
|
+
checks.push({
|
|
259
|
+
command,
|
|
260
|
+
exitCode,
|
|
261
|
+
stdout: truncate(result.stdout, MAX_OUTPUT_BYTES),
|
|
262
|
+
stderr,
|
|
263
|
+
durationMs,
|
|
264
|
+
blocking,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
// Gate passes if all blocking checks pass (non-blocking failures are advisory)
|
|
268
|
+
const blockingChecks = checks.filter(c => c.blocking);
|
|
269
|
+
const passed = blockingChecks.length === 0 || blockingChecks.every(c => c.exitCode === 0);
|
|
270
|
+
return {
|
|
271
|
+
passed,
|
|
272
|
+
checks,
|
|
273
|
+
discoverySource: source,
|
|
274
|
+
timestamp,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
// ─── Runtime Error Capture ──────────────────────────────────────────────────
|
|
278
|
+
/** Maximum characters of browser console text to retain per entry. */
|
|
279
|
+
const MAX_BROWSER_TEXT_CHARS = 500;
|
|
280
|
+
/** Fatal signals that indicate a crash regardless of other status fields. */
|
|
281
|
+
const FATAL_SIGNALS = new Set(["SIGABRT", "SIGSEGV", "SIGBUS"]);
|
|
282
|
+
/**
|
|
283
|
+
* Scan bg-shell processes and browser console logs for runtime errors.
|
|
284
|
+
*
|
|
285
|
+
* Severity classification follows D004:
|
|
286
|
+
* - bg-shell status "crashed" → blocking crash
|
|
287
|
+
* - bg-shell !alive && exitCode !== 0 && exitCode !== null → blocking crash
|
|
288
|
+
* - bg-shell signal SIGABRT/SIGSEGV/SIGBUS → blocking crash
|
|
289
|
+
* - Browser console error with "Unhandled"/"UnhandledRejection" → blocking crash
|
|
290
|
+
* - Browser console error (general) → non-blocking error
|
|
291
|
+
* - Browser console warning with deprecation text → non-blocking warning
|
|
292
|
+
* - bg-shell alive process with recentErrors → non-blocking error
|
|
293
|
+
*
|
|
294
|
+
* Returns RuntimeError[] — empty when both sources are unavailable.
|
|
295
|
+
*/
|
|
296
|
+
export async function captureRuntimeErrors(options) {
|
|
297
|
+
const errors = [];
|
|
298
|
+
// ── bg-shell scan ─────────────────────────────────────────────────────
|
|
299
|
+
try {
|
|
300
|
+
let processes;
|
|
301
|
+
if (options?.getProcesses) {
|
|
302
|
+
processes = options.getProcesses();
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
const mod = await import("../bg-shell/process-manager.js");
|
|
306
|
+
processes = mod.processes;
|
|
307
|
+
}
|
|
308
|
+
for (const [id, raw] of processes) {
|
|
309
|
+
const proc = raw;
|
|
310
|
+
const name = proc.label || proc.id || id;
|
|
311
|
+
// Check for fatal signal first (applies regardless of alive/status)
|
|
312
|
+
if (proc.signal && FATAL_SIGNALS.has(proc.signal)) {
|
|
313
|
+
errors.push({
|
|
314
|
+
source: "bg-shell",
|
|
315
|
+
severity: "crash",
|
|
316
|
+
message: buildBgShellMessage(name, proc.exitCode, proc.signal, proc.recentErrors),
|
|
317
|
+
blocking: true,
|
|
318
|
+
});
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
// Crashed status
|
|
322
|
+
if (proc.status === "crashed") {
|
|
323
|
+
errors.push({
|
|
324
|
+
source: "bg-shell",
|
|
325
|
+
severity: "crash",
|
|
326
|
+
message: buildBgShellMessage(name, proc.exitCode, proc.signal, proc.recentErrors),
|
|
327
|
+
blocking: true,
|
|
328
|
+
});
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
// Non-zero exit on dead process
|
|
332
|
+
if (!proc.alive &&
|
|
333
|
+
proc.exitCode !== 0 &&
|
|
334
|
+
proc.exitCode !== null &&
|
|
335
|
+
proc.exitCode !== undefined) {
|
|
336
|
+
errors.push({
|
|
337
|
+
source: "bg-shell",
|
|
338
|
+
severity: "crash",
|
|
339
|
+
message: buildBgShellMessage(name, proc.exitCode, proc.signal, proc.recentErrors),
|
|
340
|
+
blocking: true,
|
|
341
|
+
});
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
// Alive process with recent errors — non-blocking
|
|
345
|
+
if (proc.alive && proc.recentErrors && proc.recentErrors.length > 0) {
|
|
346
|
+
const snippet = proc.recentErrors.slice(0, 3).join("; ");
|
|
347
|
+
errors.push({
|
|
348
|
+
source: "bg-shell",
|
|
349
|
+
severity: "error",
|
|
350
|
+
message: `[${name}] recent errors: ${snippet}`,
|
|
351
|
+
blocking: false,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
// bg-shell not available — skip silently
|
|
358
|
+
}
|
|
359
|
+
// ── browser console scan ──────────────────────────────────────────────
|
|
360
|
+
try {
|
|
361
|
+
let logs;
|
|
362
|
+
if (options?.getConsoleLogs) {
|
|
363
|
+
logs = options.getConsoleLogs();
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
const mod = await import("../browser-tools/state.js");
|
|
367
|
+
logs = mod.getConsoleLogs();
|
|
368
|
+
}
|
|
369
|
+
for (const entry of logs) {
|
|
370
|
+
const text = entry.text.length > MAX_BROWSER_TEXT_CHARS
|
|
371
|
+
? entry.text.slice(0, MAX_BROWSER_TEXT_CHARS) + "…[truncated]"
|
|
372
|
+
: entry.text;
|
|
373
|
+
if (entry.type === "error") {
|
|
374
|
+
// Unhandled rejection / unhandled error → blocking crash
|
|
375
|
+
if (/unhandled/i.test(entry.text)) {
|
|
376
|
+
errors.push({
|
|
377
|
+
source: "browser",
|
|
378
|
+
severity: "crash",
|
|
379
|
+
message: text,
|
|
380
|
+
blocking: true,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// General console.error → non-blocking error
|
|
385
|
+
errors.push({
|
|
386
|
+
source: "browser",
|
|
387
|
+
severity: "error",
|
|
388
|
+
message: text,
|
|
389
|
+
blocking: false,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
else if (entry.type === "warning" && /deprecated/i.test(entry.text)) {
|
|
394
|
+
// Deprecation warning → non-blocking warning
|
|
395
|
+
errors.push({
|
|
396
|
+
source: "browser",
|
|
397
|
+
severity: "warning",
|
|
398
|
+
message: text,
|
|
399
|
+
blocking: false,
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
// Non-deprecation warnings are intentionally ignored
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
// browser-tools not available — skip silently
|
|
407
|
+
}
|
|
408
|
+
return errors;
|
|
409
|
+
}
|
|
410
|
+
/** Build a human-readable message for a bg-shell process error. */
|
|
411
|
+
function buildBgShellMessage(name, exitCode, signal, recentErrors) {
|
|
412
|
+
const parts = [`[${name}]`];
|
|
413
|
+
if (signal)
|
|
414
|
+
parts.push(`signal=${signal}`);
|
|
415
|
+
if (exitCode !== null && exitCode !== undefined)
|
|
416
|
+
parts.push(`exitCode=${exitCode}`);
|
|
417
|
+
if (recentErrors && recentErrors.length > 0) {
|
|
418
|
+
const snippet = recentErrors.slice(0, 3).join("; ");
|
|
419
|
+
parts.push(`errors: ${snippet}`);
|
|
420
|
+
}
|
|
421
|
+
return parts.join(" ");
|
|
422
|
+
}
|
|
423
|
+
// ─── Dependency Audit ───────────────────────────────────────────────────────
|
|
424
|
+
/** Top-level dependency files that trigger an audit when changed. */
|
|
425
|
+
const DEPENDENCY_FILES = new Set([
|
|
426
|
+
"package.json",
|
|
427
|
+
"package-lock.json",
|
|
428
|
+
"pnpm-lock.yaml",
|
|
429
|
+
"yarn.lock",
|
|
430
|
+
"bun.lockb",
|
|
431
|
+
]);
|
|
432
|
+
/**
|
|
433
|
+
* Default gitDiff: runs `git diff --name-only HEAD` and returns file paths.
|
|
434
|
+
* Returns empty array on any failure (non-git dir, git not found, etc.).
|
|
435
|
+
*/
|
|
436
|
+
function defaultGitDiff(cwd) {
|
|
437
|
+
try {
|
|
438
|
+
const result = spawnSync("git", ["diff", "--name-only", "HEAD"], {
|
|
439
|
+
cwd,
|
|
440
|
+
encoding: "utf-8",
|
|
441
|
+
timeout: 10_000,
|
|
442
|
+
});
|
|
443
|
+
if (result.status !== 0 || !result.stdout)
|
|
444
|
+
return [];
|
|
445
|
+
return result.stdout.trim().split("\n").filter(Boolean);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
return [];
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Default npmAudit: runs `npm audit --audit-level=moderate --json`.
|
|
453
|
+
* Returns { stdout, exitCode }. Non-zero exit is expected when vulnerabilities exist.
|
|
454
|
+
*/
|
|
455
|
+
function defaultNpmAudit(cwd) {
|
|
456
|
+
const result = spawnSync("npm", ["audit", "--audit-level=moderate", "--json"], {
|
|
457
|
+
cwd,
|
|
458
|
+
encoding: "utf-8",
|
|
459
|
+
timeout: 60_000,
|
|
460
|
+
});
|
|
461
|
+
return {
|
|
462
|
+
stdout: result.stdout ?? "",
|
|
463
|
+
exitCode: result.status ?? 1,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Detect dependency file changes and run npm audit if changes are found.
|
|
468
|
+
*
|
|
469
|
+
* - Calls gitDiff to get changed files, checks if any are top-level dependency files
|
|
470
|
+
* - If no dependency files changed, returns []
|
|
471
|
+
* - Runs npmAudit and parses JSON output into AuditWarning[]
|
|
472
|
+
* - Never throws — all errors return []
|
|
473
|
+
* - Non-zero npm audit exit code is expected (vulnerabilities found), not an error
|
|
474
|
+
*/
|
|
475
|
+
export function runDependencyAudit(cwd, options) {
|
|
476
|
+
try {
|
|
477
|
+
const gitDiff = options?.gitDiff ?? defaultGitDiff;
|
|
478
|
+
const npmAudit = options?.npmAudit ?? defaultNpmAudit;
|
|
479
|
+
// Get changed files and check for top-level dependency file matches
|
|
480
|
+
const changedFiles = gitDiff(cwd);
|
|
481
|
+
const hasDependencyChange = changedFiles.some((filePath) => {
|
|
482
|
+
const name = basename(filePath);
|
|
483
|
+
// Only match top-level files: the path must equal just the filename
|
|
484
|
+
// (no directory separators) to be considered top-level
|
|
485
|
+
return DEPENDENCY_FILES.has(name) && filePath === name;
|
|
486
|
+
});
|
|
487
|
+
if (!hasDependencyChange)
|
|
488
|
+
return [];
|
|
489
|
+
// Run npm audit
|
|
490
|
+
const auditResult = npmAudit(cwd);
|
|
491
|
+
// Parse JSON output — npm audit exits non-zero when vulnerabilities exist
|
|
492
|
+
let parsed;
|
|
493
|
+
try {
|
|
494
|
+
parsed = JSON.parse(auditResult.stdout);
|
|
495
|
+
}
|
|
496
|
+
catch {
|
|
497
|
+
return [];
|
|
498
|
+
}
|
|
499
|
+
// Extract vulnerabilities from the parsed output
|
|
500
|
+
const vulnerabilities = parsed.vulnerabilities;
|
|
501
|
+
if (!vulnerabilities || typeof vulnerabilities !== "object")
|
|
502
|
+
return [];
|
|
503
|
+
const warnings = [];
|
|
504
|
+
for (const [name, raw] of Object.entries(vulnerabilities)) {
|
|
505
|
+
const vuln = raw;
|
|
506
|
+
if (!vuln || typeof vuln !== "object")
|
|
507
|
+
continue;
|
|
508
|
+
const severity = vuln.severity;
|
|
509
|
+
if (severity !== "low" &&
|
|
510
|
+
severity !== "moderate" &&
|
|
511
|
+
severity !== "high" &&
|
|
512
|
+
severity !== "critical") {
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
// Find the first `via` entry that's an object (not a string reference)
|
|
516
|
+
let title = name;
|
|
517
|
+
let url = "";
|
|
518
|
+
if (Array.isArray(vuln.via)) {
|
|
519
|
+
for (const entry of vuln.via) {
|
|
520
|
+
if (entry && typeof entry === "object" && !Array.isArray(entry)) {
|
|
521
|
+
const obj = entry;
|
|
522
|
+
if (obj.title)
|
|
523
|
+
title = obj.title;
|
|
524
|
+
if (obj.url)
|
|
525
|
+
url = obj.url;
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
warnings.push({
|
|
531
|
+
name,
|
|
532
|
+
severity: severity,
|
|
533
|
+
title,
|
|
534
|
+
url,
|
|
535
|
+
fixAvailable: vuln.fixAvailable === true,
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
return warnings;
|
|
539
|
+
}
|
|
540
|
+
catch {
|
|
541
|
+
return [];
|
|
542
|
+
}
|
|
543
|
+
}
|