gsd-pi 2.33.1-dev.29a8268 → 2.33.1-dev.bf822e6
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/cli.js +16 -0
- 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 +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} +25 -33
- 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 +665 -0
- package/dist/resources/extensions/gsd/auto.js +1495 -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 +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 +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 +384 -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-ai/dist/models.generated.d.ts +5498 -3645
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +2595 -742
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/src/models.generated.ts +2852 -999
- 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/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/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +32 -2
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/src/utils.ts +28 -2
- 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-verification.ts +20 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +74 -2
- package/src/resources/extensions/gsd/auto.ts +11 -0
- package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
- package/src/resources/extensions/gsd/commands.ts +39 -31
- package/src/resources/extensions/gsd/git-service.ts +7 -0
- package/src/resources/extensions/gsd/guided-flow.ts +22 -11
- package/src/resources/extensions/gsd/index.ts +93 -32
- 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 +6 -0
- package/src/resources/extensions/gsd/tests/loop-regression.test.ts +1 -4
- 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/verification-gate.test.ts +65 -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 -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 -586
- 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 -1401
- 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 -1181
- 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
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for quick-task branch lifecycle:
|
|
3
|
+
* - Branch creation → merge-back → cleanup
|
|
4
|
+
* - Cross-session recovery via disk-persisted state
|
|
5
|
+
* - captureIntegrationBranch guard against quick-task branches
|
|
6
|
+
*
|
|
7
|
+
* Relates to #1269, #1293.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync, existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { tmpdir } from "node:os";
|
|
13
|
+
import { execSync } from "node:child_process";
|
|
14
|
+
|
|
15
|
+
import { createTestContext } from './test-helpers.ts';
|
|
16
|
+
import { captureIntegrationBranch, getCurrentBranch } from "../worktree.ts";
|
|
17
|
+
import { readIntegrationBranch, QUICK_BRANCH_RE } from "../git-service.ts";
|
|
18
|
+
|
|
19
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
20
|
+
|
|
21
|
+
function run(command: string, cwd: string): string {
|
|
22
|
+
return execSync(command, { cwd, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }).trim();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function createTestRepo(): string {
|
|
26
|
+
const repo = mkdtempSync(join(tmpdir(), "gsd-quick-lifecycle-"));
|
|
27
|
+
run("git init -b main", repo);
|
|
28
|
+
run(`git config user.name "GSD Test"`, repo);
|
|
29
|
+
run(`git config user.email "test@gsd.dev"`, repo);
|
|
30
|
+
mkdirSync(join(repo, ".gsd", "runtime"), { recursive: true });
|
|
31
|
+
mkdirSync(join(repo, ".gsd", "milestones", "M001"), { recursive: true });
|
|
32
|
+
writeFileSync(join(repo, "README.md"), "init\n");
|
|
33
|
+
run("git add -A", repo);
|
|
34
|
+
run(`git commit -m "init"`, repo);
|
|
35
|
+
return repo;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function main(): Promise<void> {
|
|
39
|
+
|
|
40
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
41
|
+
// QUICK_BRANCH_RE
|
|
42
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
43
|
+
|
|
44
|
+
console.log("\n=== QUICK_BRANCH_RE: matches quick-task branches ===");
|
|
45
|
+
|
|
46
|
+
assertTrue(QUICK_BRANCH_RE.test("gsd/quick/1-fix-typo"), "matches standard quick branch");
|
|
47
|
+
assertTrue(QUICK_BRANCH_RE.test("gsd/quick/42-some-long-slug-name"), "matches multi-digit quick branch");
|
|
48
|
+
assertTrue(!QUICK_BRANCH_RE.test("main"), "rejects main");
|
|
49
|
+
assertTrue(!QUICK_BRANCH_RE.test("gsd/M001/S01"), "rejects slice branch");
|
|
50
|
+
assertTrue(!QUICK_BRANCH_RE.test("gsd/quickly-something"), "rejects non-quick prefix");
|
|
51
|
+
assertTrue(!QUICK_BRANCH_RE.test("feature/gsd/quick/1"), "rejects nested prefix");
|
|
52
|
+
|
|
53
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
54
|
+
// captureIntegrationBranch: guard against quick-task branches
|
|
55
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
56
|
+
|
|
57
|
+
console.log("\n=== captureIntegrationBranch: skips quick-task branches ===");
|
|
58
|
+
|
|
59
|
+
{
|
|
60
|
+
const repo = createTestRepo();
|
|
61
|
+
|
|
62
|
+
// Create and checkout a quick-task branch
|
|
63
|
+
run("git checkout -b gsd/quick/1-fix-typo", repo);
|
|
64
|
+
assertEq(getCurrentBranch(repo), "gsd/quick/1-fix-typo", "on quick branch");
|
|
65
|
+
|
|
66
|
+
captureIntegrationBranch(repo, "M001");
|
|
67
|
+
|
|
68
|
+
assertEq(readIntegrationBranch(repo, "M001"), null,
|
|
69
|
+
"captureIntegrationBranch is a no-op on quick-task branches");
|
|
70
|
+
|
|
71
|
+
rmSync(repo, { recursive: true, force: true });
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ─── Verify main is still recorded correctly ─────────────────────────
|
|
75
|
+
|
|
76
|
+
console.log("\n=== captureIntegrationBranch: records main correctly ===");
|
|
77
|
+
|
|
78
|
+
{
|
|
79
|
+
const repo = createTestRepo();
|
|
80
|
+
|
|
81
|
+
// Capture from main — should work normally
|
|
82
|
+
captureIntegrationBranch(repo, "M001");
|
|
83
|
+
assertEq(readIntegrationBranch(repo, "M001"), "main",
|
|
84
|
+
"main is recorded as integration branch");
|
|
85
|
+
|
|
86
|
+
// Switch to quick branch — capture should be no-op (doesn't overwrite main)
|
|
87
|
+
run("git checkout -b gsd/quick/1-fix-typo", repo);
|
|
88
|
+
captureIntegrationBranch(repo, "M001");
|
|
89
|
+
assertEq(readIntegrationBranch(repo, "M001"), "main",
|
|
90
|
+
"quick branch does not overwrite existing integration branch");
|
|
91
|
+
|
|
92
|
+
rmSync(repo, { recursive: true, force: true });
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ─── Sequence: main → quick → back to main → capture ────────────────
|
|
96
|
+
|
|
97
|
+
console.log("\n=== captureIntegrationBranch: correct after quick branch round-trip ===");
|
|
98
|
+
|
|
99
|
+
{
|
|
100
|
+
const repo = createTestRepo();
|
|
101
|
+
|
|
102
|
+
// Simulate quick-task lifecycle: branch off, do work, return to main
|
|
103
|
+
run("git checkout -b gsd/quick/1-fix-typo", repo);
|
|
104
|
+
writeFileSync(join(repo, "fix.txt"), "fixed\n");
|
|
105
|
+
run("git add -A", repo);
|
|
106
|
+
run(`git commit -m "quick-fix"`, repo);
|
|
107
|
+
run("git checkout main", repo);
|
|
108
|
+
run("git merge --squash gsd/quick/1-fix-typo", repo);
|
|
109
|
+
run(`git commit -m "quick(Q1): fix-typo"`, repo);
|
|
110
|
+
run("git branch -D gsd/quick/1-fix-typo", repo);
|
|
111
|
+
|
|
112
|
+
// Now capture — should get main, not the deleted quick branch
|
|
113
|
+
captureIntegrationBranch(repo, "M002");
|
|
114
|
+
assertEq(readIntegrationBranch(repo, "M002"), "main",
|
|
115
|
+
"after quick round-trip, main is captured correctly");
|
|
116
|
+
|
|
117
|
+
rmSync(repo, { recursive: true, force: true });
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
121
|
+
// cleanupQuickBranch: in-memory path (same session)
|
|
122
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
123
|
+
|
|
124
|
+
console.log("\n=== cleanupQuickBranch: merges back and cleans up (same session) ===");
|
|
125
|
+
|
|
126
|
+
{
|
|
127
|
+
const repo = createTestRepo();
|
|
128
|
+
const origCwd = process.cwd();
|
|
129
|
+
|
|
130
|
+
// Simulate what handleQuick does: create branch, set pending state
|
|
131
|
+
run("git checkout -b gsd/quick/1-fix-typo", repo);
|
|
132
|
+
writeFileSync(join(repo, "fix.txt"), "fixed\n");
|
|
133
|
+
run("git add -A", repo);
|
|
134
|
+
run(`git commit -m "quick-fix"`, repo);
|
|
135
|
+
|
|
136
|
+
// Write the disk state (simulating handleQuick's persistPendingReturn)
|
|
137
|
+
const returnState = {
|
|
138
|
+
basePath: repo,
|
|
139
|
+
originalBranch: "main",
|
|
140
|
+
quickBranch: "gsd/quick/1-fix-typo",
|
|
141
|
+
taskNum: 1,
|
|
142
|
+
slug: "fix-typo",
|
|
143
|
+
description: "fix typo",
|
|
144
|
+
};
|
|
145
|
+
const runtimeDir = join(repo, ".gsd", "runtime");
|
|
146
|
+
mkdirSync(runtimeDir, { recursive: true });
|
|
147
|
+
writeFileSync(join(runtimeDir, "quick-return.json"), JSON.stringify(returnState) + "\n");
|
|
148
|
+
|
|
149
|
+
// Switch cwd to repo so cleanupQuickBranch finds the disk state
|
|
150
|
+
process.chdir(repo);
|
|
151
|
+
|
|
152
|
+
// Import and call cleanupQuickBranch
|
|
153
|
+
// Use dynamic import to get a fresh module scope — the in-memory state
|
|
154
|
+
// won't be set, so it will fall through to disk recovery
|
|
155
|
+
const { cleanupQuickBranch } = await import("../quick.ts");
|
|
156
|
+
const result = cleanupQuickBranch();
|
|
157
|
+
|
|
158
|
+
assertTrue(result, "cleanupQuickBranch returns true");
|
|
159
|
+
assertEq(getCurrentBranch(repo), "main", "back on main after cleanup");
|
|
160
|
+
|
|
161
|
+
// Verify merge happened — fix.txt should exist on main
|
|
162
|
+
assertTrue(existsSync(join(repo, "fix.txt")), "fix.txt merged to main");
|
|
163
|
+
|
|
164
|
+
// Verify quick branch deleted
|
|
165
|
+
const branches = run("git branch", repo);
|
|
166
|
+
assertTrue(!branches.includes("gsd/quick/1-fix-typo"), "quick branch deleted");
|
|
167
|
+
|
|
168
|
+
// Verify disk state cleaned up
|
|
169
|
+
assertTrue(!existsSync(join(runtimeDir, "quick-return.json")), "quick-return.json removed");
|
|
170
|
+
|
|
171
|
+
process.chdir(origCwd);
|
|
172
|
+
rmSync(repo, { recursive: true, force: true });
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
176
|
+
// cleanupQuickBranch: cross-session recovery from disk
|
|
177
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
178
|
+
|
|
179
|
+
console.log("\n=== cleanupQuickBranch: recovers from disk state (cross-session) ===");
|
|
180
|
+
|
|
181
|
+
{
|
|
182
|
+
const repo = createTestRepo();
|
|
183
|
+
const origCwd = process.cwd();
|
|
184
|
+
|
|
185
|
+
// Simulate a crashed session: branch exists with work, disk state persisted,
|
|
186
|
+
// but in-memory state is gone (new process)
|
|
187
|
+
run("git checkout -b gsd/quick/2-add-docs", repo);
|
|
188
|
+
writeFileSync(join(repo, "docs.md"), "# Docs\n");
|
|
189
|
+
run("git add -A", repo);
|
|
190
|
+
run(`git commit -m "add-docs"`, repo);
|
|
191
|
+
|
|
192
|
+
// Write disk state manually (simulates what handleQuick would persist)
|
|
193
|
+
const runtimeDir = join(repo, ".gsd", "runtime");
|
|
194
|
+
mkdirSync(runtimeDir, { recursive: true });
|
|
195
|
+
writeFileSync(join(runtimeDir, "quick-return.json"), JSON.stringify({
|
|
196
|
+
basePath: repo,
|
|
197
|
+
originalBranch: "main",
|
|
198
|
+
quickBranch: "gsd/quick/2-add-docs",
|
|
199
|
+
taskNum: 2,
|
|
200
|
+
slug: "add-docs",
|
|
201
|
+
description: "add docs",
|
|
202
|
+
}) + "\n");
|
|
203
|
+
|
|
204
|
+
process.chdir(repo);
|
|
205
|
+
|
|
206
|
+
const { cleanupQuickBranch } = await import("../quick.ts");
|
|
207
|
+
const result = cleanupQuickBranch();
|
|
208
|
+
|
|
209
|
+
assertTrue(result, "cross-session recovery returns true");
|
|
210
|
+
assertEq(getCurrentBranch(repo), "main", "back on main after cross-session recovery");
|
|
211
|
+
assertTrue(existsSync(join(repo, "docs.md")), "docs.md merged to main");
|
|
212
|
+
assertTrue(!existsSync(join(runtimeDir, "quick-return.json")), "disk state cleaned up");
|
|
213
|
+
|
|
214
|
+
process.chdir(origCwd);
|
|
215
|
+
rmSync(repo, { recursive: true, force: true });
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
219
|
+
// cleanupQuickBranch: no-op when no pending state
|
|
220
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
221
|
+
|
|
222
|
+
console.log("\n=== cleanupQuickBranch: no-op without pending state ===");
|
|
223
|
+
|
|
224
|
+
{
|
|
225
|
+
const repo = createTestRepo();
|
|
226
|
+
const origCwd = process.cwd();
|
|
227
|
+
process.chdir(repo);
|
|
228
|
+
|
|
229
|
+
const { cleanupQuickBranch } = await import("../quick.ts");
|
|
230
|
+
const result = cleanupQuickBranch();
|
|
231
|
+
|
|
232
|
+
assertTrue(!result, "returns false when no pending state");
|
|
233
|
+
assertEq(getCurrentBranch(repo), "main", "stays on main");
|
|
234
|
+
|
|
235
|
+
process.chdir(origCwd);
|
|
236
|
+
rmSync(repo, { recursive: true, force: true });
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
240
|
+
// End-to-end: quick branch does NOT contaminate integration branch
|
|
241
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
242
|
+
|
|
243
|
+
console.log("\n=== E2E: quick branch does not contaminate integration branch ===");
|
|
244
|
+
|
|
245
|
+
{
|
|
246
|
+
const repo = createTestRepo();
|
|
247
|
+
|
|
248
|
+
// 1. Record main as integration branch for M001
|
|
249
|
+
captureIntegrationBranch(repo, "M001");
|
|
250
|
+
assertEq(readIntegrationBranch(repo, "M001"), "main", "M001 integration = main");
|
|
251
|
+
|
|
252
|
+
// 2. Start a quick task (branch off)
|
|
253
|
+
run("git checkout -b gsd/quick/1-fix-typo", repo);
|
|
254
|
+
|
|
255
|
+
// 3. Try to capture integration branch for M002 while on quick branch
|
|
256
|
+
captureIntegrationBranch(repo, "M002");
|
|
257
|
+
assertEq(readIntegrationBranch(repo, "M002"), null,
|
|
258
|
+
"M002 integration NOT recorded from quick branch");
|
|
259
|
+
|
|
260
|
+
// 4. Return to main (simulate cleanupQuickBranch)
|
|
261
|
+
run("git checkout main", repo);
|
|
262
|
+
|
|
263
|
+
// 5. Now capture M002 from main — should work
|
|
264
|
+
captureIntegrationBranch(repo, "M002");
|
|
265
|
+
assertEq(readIntegrationBranch(repo, "M002"), "main",
|
|
266
|
+
"M002 integration = main after returning from quick branch");
|
|
267
|
+
|
|
268
|
+
// 6. Verify M001 still intact
|
|
269
|
+
assertEq(readIntegrationBranch(repo, "M001"), "main",
|
|
270
|
+
"M001 integration unchanged");
|
|
271
|
+
|
|
272
|
+
rmSync(repo, { recursive: true, force: true });
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
report();
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
main().catch((error) => {
|
|
279
|
+
console.error(error);
|
|
280
|
+
process.exit(1);
|
|
281
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync, existsSync, lstatSync, realpathSync, mkdirSync, symlinkSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
|
|
6
|
+
import { externalGsdRoot, ensureGsdSymlink } from "../repo-identity.ts";
|
|
7
|
+
import { createTestContext } from "./test-helpers.ts";
|
|
8
|
+
|
|
9
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
10
|
+
|
|
11
|
+
function run(command: string, cwd: string): string {
|
|
12
|
+
return execSync(command, { cwd, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }).trim();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function main(): Promise<void> {
|
|
16
|
+
const base = realpathSync(mkdtempSync(join(tmpdir(), "gsd-repo-identity-")));
|
|
17
|
+
const stateDir = realpathSync(mkdtempSync(join(tmpdir(), "gsd-state-")));
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
process.env.GSD_STATE_DIR = stateDir;
|
|
21
|
+
|
|
22
|
+
run("git init -b main", base);
|
|
23
|
+
run('git config user.name "Pi Test"', base);
|
|
24
|
+
run('git config user.email "pi@example.com"', base);
|
|
25
|
+
run('git remote add origin git@github.com:example/repo.git', base);
|
|
26
|
+
writeFileSync(join(base, "README.md"), "# Test Repo\n", "utf-8");
|
|
27
|
+
run("git add README.md", base);
|
|
28
|
+
run('git commit -m "chore: init"', base);
|
|
29
|
+
|
|
30
|
+
const worktreePath = join(base, ".gsd", "worktrees", "M001");
|
|
31
|
+
run(`git worktree add -b milestone/M001 ${worktreePath}`, base);
|
|
32
|
+
|
|
33
|
+
console.log("\n=== ensureGsdSymlink points worktree at main repo external state dir ===");
|
|
34
|
+
const expectedExternalState = externalGsdRoot(base);
|
|
35
|
+
const mainState = ensureGsdSymlink(base);
|
|
36
|
+
assertEq(mainState, realpathSync(join(base, ".gsd")), "ensureGsdSymlink(base) returns the current main repo .gsd target");
|
|
37
|
+
const worktreeState = ensureGsdSymlink(worktreePath);
|
|
38
|
+
assertEq(worktreeState, expectedExternalState, "worktree symlink target matches main repo external state dir");
|
|
39
|
+
assertTrue(existsSync(join(worktreePath, ".gsd")), "worktree .gsd exists");
|
|
40
|
+
assertTrue(lstatSync(join(worktreePath, ".gsd")).isSymbolicLink(), "worktree .gsd is a symlink");
|
|
41
|
+
assertEq(realpathSync(join(worktreePath, ".gsd")), realpathSync(expectedExternalState), "worktree .gsd symlink resolves to main repo external state dir");
|
|
42
|
+
|
|
43
|
+
console.log("\n=== ensureGsdSymlink heals stale worktree symlinks ===");
|
|
44
|
+
const staleState = join(stateDir, "projects", "stale-worktree-state");
|
|
45
|
+
mkdirSync(staleState, { recursive: true });
|
|
46
|
+
rmSync(join(worktreePath, ".gsd"), { recursive: true, force: true });
|
|
47
|
+
symlinkSync(staleState, join(worktreePath, ".gsd"), "junction");
|
|
48
|
+
const healedState = ensureGsdSymlink(worktreePath);
|
|
49
|
+
assertEq(healedState, expectedExternalState, "stale worktree symlink is repaired to canonical external state dir");
|
|
50
|
+
assertEq(realpathSync(join(worktreePath, ".gsd")), realpathSync(expectedExternalState), "healed worktree symlink resolves to canonical external state dir");
|
|
51
|
+
|
|
52
|
+
console.log("\n=== ensureGsdSymlink preserves worktree .gsd directories ===");
|
|
53
|
+
rmSync(join(worktreePath, ".gsd"), { recursive: true, force: true });
|
|
54
|
+
mkdirSync(join(worktreePath, ".gsd", "milestones"), { recursive: true });
|
|
55
|
+
writeFileSync(join(worktreePath, ".gsd", "milestones", "stale.txt"), "stale\n", "utf-8");
|
|
56
|
+
const preservedDirState = ensureGsdSymlink(worktreePath);
|
|
57
|
+
assertEq(preservedDirState, join(worktreePath, ".gsd"), "worktree .gsd directory is left in place for sync-based refresh");
|
|
58
|
+
assertTrue(lstatSync(join(worktreePath, ".gsd")).isDirectory(), "worktree .gsd directory remains a directory");
|
|
59
|
+
assertTrue(existsSync(join(worktreePath, ".gsd", "milestones", "stale.txt")), "existing worktree .gsd directory contents remain available for sync logic");
|
|
60
|
+
} finally {
|
|
61
|
+
delete process.env.GSD_STATE_DIR;
|
|
62
|
+
rmSync(base, { recursive: true, force: true });
|
|
63
|
+
rmSync(stateDir, { recursive: true, force: true });
|
|
64
|
+
report();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
main().catch((error) => {
|
|
69
|
+
console.error(error);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
});
|
|
@@ -261,6 +261,71 @@ test("verification-gate: each check has durationMs", () => {
|
|
|
261
261
|
}
|
|
262
262
|
});
|
|
263
263
|
|
|
264
|
+
// ─── Infra Error Tagging Tests ───────────────────────────────────────────────
|
|
265
|
+
|
|
266
|
+
test("verification-gate: spawnSync ETIMEDOUT → infraError: true on the check", () => {
|
|
267
|
+
const tmp = makeTempDir("vg-etimedout");
|
|
268
|
+
try {
|
|
269
|
+
// Use a short timeout against a long sleep to guarantee ETIMEDOUT
|
|
270
|
+
const result = runVerificationGate({
|
|
271
|
+
basePath: tmp,
|
|
272
|
+
unitId: "T01",
|
|
273
|
+
cwd: tmp,
|
|
274
|
+
preferenceCommands: ["sleep 60"],
|
|
275
|
+
commandTimeoutMs: 200,
|
|
276
|
+
});
|
|
277
|
+
assert.equal(result.passed, false);
|
|
278
|
+
assert.equal(result.checks.length, 1);
|
|
279
|
+
assert.ok(result.checks[0].exitCode !== 0, "should have non-zero exit code");
|
|
280
|
+
assert.equal(result.checks[0].infraError, true, "ETIMEDOUT should be tagged as infraError");
|
|
281
|
+
} finally {
|
|
282
|
+
rmSync(tmp, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
test("verification-gate: real command failure does NOT have infraError", () => {
|
|
287
|
+
const tmp = makeTempDir("vg-real-fail");
|
|
288
|
+
try {
|
|
289
|
+
const result = runVerificationGate({
|
|
290
|
+
basePath: tmp,
|
|
291
|
+
unitId: "T01",
|
|
292
|
+
cwd: tmp,
|
|
293
|
+
// Cross-platform: node with --eval flag and no shell-sensitive characters
|
|
294
|
+
preferenceCommands: ["node --eval \"process.exitCode=1\""],
|
|
295
|
+
});
|
|
296
|
+
assert.equal(result.passed, false);
|
|
297
|
+
assert.equal(result.checks.length, 1);
|
|
298
|
+
assert.equal(result.checks[0].exitCode, 1);
|
|
299
|
+
assert.equal(result.checks[0].infraError, undefined, "real failure should not be tagged as infraError");
|
|
300
|
+
} finally {
|
|
301
|
+
rmSync(tmp, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
test("verification-gate: mixed infra + real failure — only infra check is tagged", () => {
|
|
306
|
+
const tmp = makeTempDir("vg-mixed-infra");
|
|
307
|
+
try {
|
|
308
|
+
// Use a timeout that kills "sleep 60" but lets "node --eval" complete (~80ms).
|
|
309
|
+
// The gate applies the same timeout to each command sequentially.
|
|
310
|
+
const result = runVerificationGate({
|
|
311
|
+
basePath: tmp,
|
|
312
|
+
unitId: "T01",
|
|
313
|
+
cwd: tmp,
|
|
314
|
+
preferenceCommands: ["sleep 60", "node --eval \"process.exitCode=2\""],
|
|
315
|
+
commandTimeoutMs: 500,
|
|
316
|
+
});
|
|
317
|
+
assert.equal(result.passed, false);
|
|
318
|
+
assert.equal(result.checks.length, 2);
|
|
319
|
+
// First check: ETIMEDOUT → infraError
|
|
320
|
+
assert.equal(result.checks[0].infraError, true, "timed-out command should be infraError");
|
|
321
|
+
// Second check: real exit 2 → no infraError
|
|
322
|
+
assert.equal(result.checks[1].exitCode, 2);
|
|
323
|
+
assert.equal(result.checks[1].infraError, undefined, "real failure should not be infraError");
|
|
324
|
+
} finally {
|
|
325
|
+
rmSync(tmp, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
|
|
264
329
|
// ─── Preference Validation Tests ─────────────────────────────────────────────
|
|
265
330
|
|
|
266
331
|
test("verification-gate: validatePreferences accepts valid verification keys", () => {
|
|
@@ -56,6 +56,10 @@ export interface VerificationCheck {
|
|
|
56
56
|
stderr: string;
|
|
57
57
|
durationMs: number;
|
|
58
58
|
blocking: boolean; // true for preference/task-plan sources, false for package-json (advisory only)
|
|
59
|
+
/** True when the failure was a spawn/infra error (ETIMEDOUT, ENOENT, ENOMEM)
|
|
60
|
+
* rather than the command itself failing. Infra errors are transient and
|
|
61
|
+
* should not trigger auto-fix retries — the agent cannot fix the OS. */
|
|
62
|
+
infraError?: boolean;
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
/** A runtime error captured from bg-shell processes or browser console */
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { join } from "node:path";
|
|
14
|
-
import type { VerificationResult } from "./types.
|
|
14
|
+
import type { VerificationResult } from "./types.js";
|
|
15
15
|
|
|
16
16
|
// ─── JSON Evidence Artifact ──────────────────────────────────────────────────
|
|
17
17
|
|
|
@@ -232,13 +232,20 @@ export interface RunVerificationGateOptions {
|
|
|
232
232
|
commandTimeoutMs?: number;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
+
/** Error codes from spawnSync that indicate infrastructure/OS-level failures
|
|
236
|
+
* rather than the command itself failing. These are transient — the agent
|
|
237
|
+
* cannot fix them, so they should not trigger auto-fix retries. */
|
|
238
|
+
const INFRA_ERROR_CODES = new Set(["ETIMEDOUT", "ENOENT", "ENOMEM", "EMFILE", "ENFILE", "EAGAIN"]);
|
|
239
|
+
|
|
235
240
|
/**
|
|
236
241
|
* Run the verification gate: discover commands, execute each via spawnSync,
|
|
237
242
|
* and return a structured result.
|
|
238
243
|
*
|
|
239
244
|
* - All commands run sequentially regardless of individual pass/fail.
|
|
240
|
-
* - `passed` is true when every command exits 0 (or no commands are discovered).
|
|
245
|
+
* - `passed` is true when every blocking command exits 0 (or no commands are discovered).
|
|
241
246
|
* - stdout/stderr per command are truncated to 10 KB.
|
|
247
|
+
* - Spawn/infra errors (ETIMEDOUT, ENOENT, etc.) are tagged with `infraError: true`
|
|
248
|
+
* so the retry logic can distinguish "the OS couldn't run this" from "the tests failed".
|
|
242
249
|
*/
|
|
243
250
|
export function runVerificationGate(options: RunVerificationGateOptions): VerificationResult {
|
|
244
251
|
const timestamp = Date.now();
|
|
@@ -279,12 +286,26 @@ export function runVerificationGate(options: RunVerificationGateOptions): Verifi
|
|
|
279
286
|
let stderr: string;
|
|
280
287
|
|
|
281
288
|
if (result.error) {
|
|
282
|
-
//
|
|
289
|
+
// Spawn infrastructure failure — OS-level, not a test failure.
|
|
290
|
+
// Tag with infraError so the retry logic can skip auto-fix attempts.
|
|
291
|
+
const errCode = (result.error as NodeJS.ErrnoException).code;
|
|
292
|
+
const isInfra = !!errCode && INFRA_ERROR_CODES.has(errCode);
|
|
283
293
|
exitCode = 127;
|
|
284
294
|
stderr = truncate(
|
|
285
295
|
(result.stderr || "") + "\n" + (result.error as Error).message,
|
|
286
296
|
MAX_OUTPUT_BYTES,
|
|
287
297
|
);
|
|
298
|
+
|
|
299
|
+
checks.push({
|
|
300
|
+
command,
|
|
301
|
+
exitCode,
|
|
302
|
+
stdout: truncate(result.stdout, MAX_OUTPUT_BYTES),
|
|
303
|
+
stderr,
|
|
304
|
+
durationMs,
|
|
305
|
+
blocking,
|
|
306
|
+
...(isInfra ? { infraError: true } : {}),
|
|
307
|
+
});
|
|
308
|
+
continue;
|
|
288
309
|
} else {
|
|
289
310
|
// status is null when killed by signal — treat as failure
|
|
290
311
|
exitCode = result.status ?? 1;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { importExtensionModule, type ExtensionAPI, type ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
2
|
+
|
|
3
|
+
const WORKTREE_SUBCOMMANDS = [
|
|
4
|
+
{ cmd: "list", desc: "List existing worktrees" },
|
|
5
|
+
{ cmd: "merge", desc: "Merge a worktree into a target branch" },
|
|
6
|
+
{ cmd: "remove", desc: "Remove a worktree and its branch" },
|
|
7
|
+
{ cmd: "switch", desc: "Switch into an existing worktree" },
|
|
8
|
+
{ cmd: "create", desc: "Create and switch into a new worktree" },
|
|
9
|
+
{ cmd: "return", desc: "Switch back to the main tree" },
|
|
10
|
+
] as const;
|
|
11
|
+
|
|
12
|
+
function getWorktreeCompletions(prefix: string) {
|
|
13
|
+
const parts = prefix.trim().split(/\s+/);
|
|
14
|
+
if (parts.length <= 1) {
|
|
15
|
+
const partial = parts[0] ?? "";
|
|
16
|
+
return WORKTREE_SUBCOMMANDS
|
|
17
|
+
.filter((option) => option.cmd.startsWith(partial))
|
|
18
|
+
.map((option) => ({
|
|
19
|
+
value: option.cmd,
|
|
20
|
+
label: option.cmd,
|
|
21
|
+
description: option.desc,
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (parts[0] === "remove" && parts.length <= 2 && "all".startsWith(parts[1] ?? "")) {
|
|
26
|
+
return [{ value: "remove all", label: "all", description: "Remove all worktrees" }];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function registerLazyWorktreeAlias(pi: ExtensionAPI, name: "worktree" | "wt", description: string): void {
|
|
33
|
+
pi.registerCommand(name, {
|
|
34
|
+
description,
|
|
35
|
+
getArgumentCompletions: getWorktreeCompletions,
|
|
36
|
+
handler: async (args: string, ctx: ExtensionCommandContext) => {
|
|
37
|
+
const { handleWorktreeCommand } = await importExtensionModule<typeof import("./worktree-command.js")>(import.meta.url, "./worktree-command.js");
|
|
38
|
+
await handleWorktreeCommand(args, ctx, pi, name);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function registerLazyWorktreeCommands(pi: ExtensionAPI): void {
|
|
44
|
+
registerLazyWorktreeAlias(pi, "worktree", "Git worktrees (also /wt): /worktree <name> | list | merge | remove");
|
|
45
|
+
registerLazyWorktreeAlias(pi, "wt", "Alias for /worktree");
|
|
46
|
+
}
|
|
@@ -42,13 +42,25 @@ import { getErrorMessage } from "./error-utils.js";
|
|
|
42
42
|
*/
|
|
43
43
|
let originalCwd: string | null = null;
|
|
44
44
|
|
|
45
|
+
function ensureWorktreeStateInitialized(): void {
|
|
46
|
+
if (originalCwd) return;
|
|
47
|
+
const cwd = process.cwd();
|
|
48
|
+
const marker = `${sep}.gsd${sep}worktrees${sep}`;
|
|
49
|
+
const markerIdx = cwd.indexOf(marker);
|
|
50
|
+
if (markerIdx !== -1) {
|
|
51
|
+
originalCwd = cwd.slice(0, markerIdx);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
45
55
|
/** Get the original project root if currently in a worktree, or null. */
|
|
46
56
|
export function getWorktreeOriginalCwd(): string | null {
|
|
57
|
+
ensureWorktreeStateInitialized();
|
|
47
58
|
return originalCwd;
|
|
48
59
|
}
|
|
49
60
|
|
|
50
61
|
/** Get the name of the active worktree, or null if not in one. */
|
|
51
62
|
export function getActiveWorktreeName(): string | null {
|
|
63
|
+
ensureWorktreeStateInitialized();
|
|
52
64
|
if (!originalCwd) return null;
|
|
53
65
|
const cwd = process.cwd();
|
|
54
66
|
const wtDir = join(gsdRoot(originalCwd), "worktrees");
|
|
@@ -104,12 +116,13 @@ function worktreeCompletions(prefix: string) {
|
|
|
104
116
|
return [];
|
|
105
117
|
}
|
|
106
118
|
|
|
107
|
-
async function
|
|
119
|
+
export async function handleWorktreeCommand(
|
|
108
120
|
args: string,
|
|
109
121
|
ctx: ExtensionCommandContext,
|
|
110
122
|
pi: ExtensionAPI,
|
|
111
123
|
alias: string,
|
|
112
124
|
): Promise<void> {
|
|
125
|
+
ensureWorktreeStateInitialized();
|
|
113
126
|
const trimmed = (typeof args === "string" ? args : "").trim();
|
|
114
127
|
const basePath = process.cwd();
|
|
115
128
|
|
|
@@ -233,21 +246,14 @@ export function registerWorktreeCommand(pi: ExtensionAPI): void {
|
|
|
233
246
|
// Restore worktree state after /reload.
|
|
234
247
|
// The module-level originalCwd resets to null when extensions are re-loaded,
|
|
235
248
|
// but process.cwd() is still inside the worktree. Detect this and recover.
|
|
236
|
-
|
|
237
|
-
const cwd = process.cwd();
|
|
238
|
-
const marker = `${sep}.gsd${sep}worktrees${sep}`;
|
|
239
|
-
const markerIdx = cwd.indexOf(marker);
|
|
240
|
-
if (markerIdx !== -1) {
|
|
241
|
-
originalCwd = cwd.slice(0, markerIdx);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
249
|
+
ensureWorktreeStateInitialized();
|
|
244
250
|
|
|
245
251
|
pi.registerCommand("worktree", {
|
|
246
252
|
description: "Git worktrees (also /wt): /worktree <name> | list | merge | remove",
|
|
247
253
|
getArgumentCompletions: worktreeCompletions,
|
|
248
254
|
|
|
249
255
|
async handler(args: string, ctx: ExtensionCommandContext) {
|
|
250
|
-
await
|
|
256
|
+
await handleWorktreeCommand(args, ctx, pi, "worktree");
|
|
251
257
|
},
|
|
252
258
|
});
|
|
253
259
|
|
|
@@ -256,7 +262,7 @@ export function registerWorktreeCommand(pi: ExtensionAPI): void {
|
|
|
256
262
|
description: "Alias for /worktree",
|
|
257
263
|
getArgumentCompletions: worktreeCompletions,
|
|
258
264
|
async handler(args: string, ctx: ExtensionCommandContext) {
|
|
259
|
-
await
|
|
265
|
+
await handleWorktreeCommand(args, ctx, pi, "wt");
|
|
260
266
|
},
|
|
261
267
|
});
|
|
262
268
|
}
|