gsd-pi 2.33.1 → 2.34.0-dev.bbb5216
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundled-resource-path.d.ts +8 -0
- package/dist/bundled-resource-path.js +14 -0
- package/dist/cli.js +16 -0
- package/dist/headless-query.js +6 -6
- package/dist/resource-loader.d.ts +2 -0
- package/dist/resource-loader.js +39 -4
- package/dist/resources/extensions/ask-user-questions.js +217 -0
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
- package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
- package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
- package/dist/resources/extensions/async-jobs/index.js +119 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
- package/dist/resources/extensions/aws-auth/index.js +138 -0
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
- package/dist/resources/extensions/bg-shell/index.js +41 -0
- package/dist/resources/extensions/bg-shell/interaction.js +160 -0
- package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
- package/dist/resources/extensions/bg-shell/overlay.js +378 -0
- package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
- package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
- package/dist/resources/extensions/bg-shell/types.js +96 -0
- package/dist/resources/extensions/bg-shell/utilities.js +50 -0
- package/dist/resources/extensions/browser-tools/capture.js +179 -0
- package/dist/resources/extensions/browser-tools/core.js +899 -0
- package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
- package/dist/resources/extensions/browser-tools/index.js +123 -0
- package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
- package/dist/resources/extensions/browser-tools/refs.js +254 -0
- package/dist/resources/extensions/browser-tools/settle.js +173 -0
- package/dist/resources/extensions/browser-tools/state.js +126 -0
- package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
- package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
- package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
- package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
- package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
- package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
- package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
- package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
- package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
- package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
- package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
- package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
- package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
- package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
- package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
- package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
- package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
- package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
- package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
- package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
- package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
- package/dist/resources/extensions/browser-tools/utils.js +490 -0
- package/dist/resources/extensions/context7/index.js +337 -0
- package/dist/resources/extensions/get-secrets-from-user.js +492 -0
- package/dist/resources/extensions/google-search/index.js +373 -0
- package/dist/resources/extensions/gsd/activity-log.js +146 -0
- package/dist/resources/extensions/gsd/atomic-write.js +38 -0
- package/dist/resources/extensions/gsd/auto/session.js +182 -0
- package/dist/resources/extensions/gsd/auto-budget.js +30 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +429 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +185 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +353 -0
- package/dist/resources/extensions/gsd/auto-loop.js +956 -0
- package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
- package/dist/resources/extensions/gsd/auto-observability.js +56 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +385 -0
- package/dist/resources/extensions/gsd/auto-prompts.js +1153 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +512 -0
- package/dist/resources/extensions/gsd/auto-start.js +414 -0
- package/dist/resources/extensions/gsd/auto-supervisor.js +47 -0
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
- package/dist/resources/extensions/gsd/auto-timers.js +180 -0
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
- package/dist/resources/extensions/gsd/auto-verification.js +171 -0
- package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +830 -0
- package/dist/resources/extensions/gsd/auto.js +765 -0
- package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
- package/dist/resources/extensions/gsd/captures.js +354 -0
- package/dist/resources/extensions/gsd/claude-import.js +540 -0
- package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +223 -0
- package/dist/resources/extensions/gsd/commands-config.js +89 -0
- package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
- package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
- package/dist/resources/extensions/gsd/commands-logs.js +468 -0
- package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
- package/dist/resources/extensions/gsd/commands.js +1024 -0
- package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
- package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
- package/dist/resources/extensions/gsd/context-budget.js +187 -0
- package/dist/resources/extensions/gsd/context-store.js +165 -0
- package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
- package/dist/resources/extensions/gsd/db-writer.js +298 -0
- package/dist/resources/extensions/gsd/debug-logger.js +161 -0
- package/dist/resources/extensions/gsd/detection.js +373 -0
- package/dist/resources/extensions/gsd/diff-context.js +168 -0
- package/dist/resources/extensions/gsd/dispatch-guard.js +75 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
- package/dist/resources/extensions/gsd/doctor-checks.js +562 -0
- package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
- package/dist/resources/extensions/gsd/doctor-format.js +71 -0
- package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
- package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
- package/dist/resources/extensions/gsd/doctor-types.js +12 -0
- package/dist/resources/extensions/gsd/doctor.js +672 -0
- package/dist/resources/extensions/gsd/error-utils.js +6 -0
- package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
- package/dist/resources/extensions/gsd/exit-command.js +11 -0
- package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
- package/dist/resources/extensions/gsd/export.js +268 -0
- package/dist/resources/extensions/gsd/file-watcher.js +76 -0
- package/dist/resources/extensions/gsd/files.js +937 -0
- package/dist/resources/extensions/gsd/forensics.js +511 -0
- package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
- package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
- package/dist/resources/extensions/gsd/git-service.js +460 -0
- package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
- package/dist/resources/extensions/gsd/gsd-db.js +735 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
- package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
- package/dist/resources/extensions/gsd/health-widget.js +141 -0
- package/dist/resources/extensions/gsd/history.js +118 -0
- package/dist/resources/extensions/gsd/index.js +1114 -0
- package/dist/resources/extensions/gsd/init-wizard.js +479 -0
- package/dist/resources/extensions/gsd/json-persistence.js +62 -0
- package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
- package/dist/resources/extensions/gsd/key-manager.js +829 -0
- package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
- package/dist/resources/extensions/gsd/md-importer.js +440 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
- package/dist/resources/extensions/gsd/memory-store.js +351 -0
- package/dist/resources/extensions/gsd/metrics.js +377 -0
- package/dist/resources/extensions/gsd/migrate/command.js +157 -0
- package/dist/resources/extensions/gsd/migrate/index.js +7 -0
- package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
- package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
- package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
- package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
- package/dist/resources/extensions/gsd/migrate/types.js +4 -0
- package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
- package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
- package/dist/resources/extensions/gsd/migrate-external.js +130 -0
- package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
- package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
- package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
- package/dist/resources/extensions/gsd/model-router.js +187 -0
- package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
- package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
- package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
- package/dist/resources/extensions/gsd/notifications.js +58 -0
- package/dist/resources/extensions/gsd/observability-validator.js +398 -0
- package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
- package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
- package/dist/resources/extensions/gsd/paths.js +414 -0
- package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
- package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
- package/dist/resources/extensions/gsd/preferences-models.js +294 -0
- package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
- package/dist/resources/extensions/gsd/preferences-types.js +73 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
- package/dist/resources/extensions/gsd/preferences.js +325 -0
- package/dist/resources/extensions/gsd/progress-score.js +102 -0
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
- package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
- package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
- package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
- package/dist/resources/extensions/gsd/queue-order.js +178 -0
- package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
- package/dist/resources/extensions/gsd/quick.js +206 -0
- package/dist/resources/extensions/gsd/repo-identity.js +187 -0
- package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
- package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
- package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
- package/dist/resources/extensions/gsd/routing-history.js +210 -0
- package/dist/resources/extensions/gsd/safe-fs.js +52 -0
- package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
- package/dist/resources/extensions/gsd/session-forensics.js +427 -0
- package/dist/resources/extensions/gsd/session-lock.js +397 -0
- package/dist/resources/extensions/gsd/session-status-io.js +134 -0
- package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
- package/dist/resources/extensions/gsd/skill-health.js +324 -0
- package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
- package/dist/resources/extensions/gsd/state.js +653 -0
- package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
- package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
- package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
- package/dist/resources/extensions/gsd/token-counter.js +54 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
- package/dist/resources/extensions/gsd/triage-ui.js +125 -0
- package/dist/resources/extensions/gsd/types.js +4 -0
- package/dist/resources/extensions/gsd/undo.js +205 -0
- package/dist/resources/extensions/gsd/unit-id.js +7 -0
- package/dist/resources/extensions/gsd/unit-runtime.js +131 -0
- package/dist/resources/extensions/gsd/validate-directory.js +143 -0
- package/dist/resources/extensions/gsd/verification-evidence.js +122 -0
- package/dist/resources/extensions/gsd/verification-gate.js +514 -0
- package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
- package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
- package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
- package/dist/resources/extensions/gsd/workspace-index.js +139 -0
- package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
- package/dist/resources/extensions/gsd/worktree-command.js +682 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +358 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
- package/dist/resources/extensions/gsd/worktree.js +199 -0
- package/dist/resources/extensions/mac-tools/index.js +768 -0
- package/dist/resources/extensions/mcp-client/index.js +363 -0
- package/dist/resources/extensions/package.json +3 -0
- package/dist/resources/extensions/remote-questions/config.js +70 -0
- package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
- package/dist/resources/extensions/remote-questions/format.js +234 -0
- package/dist/resources/extensions/remote-questions/http-client.js +43 -0
- package/dist/resources/extensions/remote-questions/manager.js +156 -0
- package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
- package/dist/resources/extensions/remote-questions/notify.js +89 -0
- package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
- package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
- package/dist/resources/extensions/remote-questions/status.js +25 -0
- package/dist/resources/extensions/remote-questions/store.js +70 -0
- package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
- package/dist/resources/extensions/remote-questions/types.js +5 -0
- package/dist/resources/extensions/search-the-web/cache.js +74 -0
- package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
- package/dist/resources/extensions/search-the-web/format.js +161 -0
- package/dist/resources/extensions/search-the-web/http.js +178 -0
- package/dist/resources/extensions/search-the-web/index.js +41 -0
- package/dist/resources/extensions/search-the-web/native-search.js +166 -0
- package/dist/resources/extensions/search-the-web/provider.js +143 -0
- package/dist/resources/extensions/search-the-web/tavily.js +82 -0
- package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
- package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
- package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
- package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
- package/dist/resources/extensions/shared/confirm-ui.js +96 -0
- package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
- package/dist/resources/extensions/shared/frontmatter.js +109 -0
- package/dist/resources/extensions/shared/interview-ui.js +569 -0
- package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
- package/dist/resources/extensions/shared/next-action-ui.js +168 -0
- package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
- package/dist/resources/extensions/shared/sanitize.js +17 -0
- package/dist/resources/extensions/shared/terminal.js +21 -0
- package/dist/resources/extensions/shared/ui.js +245 -0
- package/dist/resources/extensions/shared/wizard-ui.js +478 -0
- package/dist/resources/extensions/slash-commands/audit.js +72 -0
- package/dist/resources/extensions/slash-commands/clear.js +8 -0
- package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
- package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
- package/dist/resources/extensions/slash-commands/index.js +10 -0
- package/dist/resources/extensions/subagent/agents.js +103 -0
- package/dist/resources/extensions/subagent/index.js +905 -0
- package/dist/resources/extensions/subagent/isolation.js +384 -0
- package/dist/resources/extensions/subagent/worker-registry.js +73 -0
- package/dist/resources/extensions/ttsr/index.js +144 -0
- package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
- package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
- package/dist/resources/extensions/universal-config/discovery.js +94 -0
- package/dist/resources/extensions/universal-config/format.js +178 -0
- package/dist/resources/extensions/universal-config/index.js +99 -0
- package/dist/resources/extensions/universal-config/scanners.js +574 -0
- package/dist/resources/extensions/universal-config/tools.js +57 -0
- package/dist/resources/extensions/universal-config/types.js +8 -0
- package/dist/resources/extensions/voice/index.js +247 -0
- package/dist/startup-timings.d.ts +2 -0
- package/dist/startup-timings.js +22 -0
- package/dist/tool-bootstrap.js +59 -11
- package/dist/worktree-cli.js +7 -7
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +9 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +9 -0
- package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
- package/packages/pi-coding-agent/src/index.ts +1 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/bg-shell/index.ts +41 -46
- package/src/resources/extensions/browser-tools/index.ts +156 -67
- package/src/resources/extensions/gsd/auto/session.ts +47 -30
- package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
- package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
- package/src/resources/extensions/gsd/auto-observability.ts +4 -2
- package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
- package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
- package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
- package/src/resources/extensions/gsd/auto-start.ts +440 -354
- package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
- package/src/resources/extensions/gsd/auto-timers.ts +3 -4
- package/src/resources/extensions/gsd/auto-verification.ts +76 -72
- package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
- package/src/resources/extensions/gsd/auto.ts +516 -1189
- package/src/resources/extensions/gsd/captures.ts +10 -4
- package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
- package/src/resources/extensions/gsd/commands.ts +39 -31
- package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
- package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
- package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
- package/src/resources/extensions/gsd/git-service.ts +32 -12
- package/src/resources/extensions/gsd/gitignore.ts +4 -2
- package/src/resources/extensions/gsd/gsd-db.ts +375 -180
- package/src/resources/extensions/gsd/guided-flow.ts +22 -11
- package/src/resources/extensions/gsd/index.ts +76 -163
- package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
- package/src/resources/extensions/gsd/progress-score.ts +65 -200
- package/src/resources/extensions/gsd/quick.ts +121 -76
- package/src/resources/extensions/gsd/repo-identity.ts +56 -22
- package/src/resources/extensions/gsd/session-lock.ts +17 -0
- package/src/resources/extensions/gsd/templates/preferences.md +1 -0
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
- package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
- package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
- package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
- package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
- package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
- package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
- package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
- package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
- package/src/resources/extensions/gsd/types.ts +90 -77
- package/src/resources/extensions/gsd/undo.ts +42 -46
- package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
- package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
- package/src/resources/extensions/gsd/verification-gate.ts +4 -16
- package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
- package/src/resources/extensions/gsd/worktree-command.ts +29 -11
- package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
- package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
- package/src/resources/extensions/gsd/worktree.ts +7 -44
- package/src/resources/extensions/package.json +3 -0
- package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
- package/src/resources/extensions/search-the-web/index.ts +35 -52
- package/src/resources/extensions/search-the-web/tavily.ts +1 -1
- package/dist/resources/extensions/ask-user-questions.ts +0 -290
- package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
- package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
- package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
- package/dist/resources/extensions/async-jobs/index.ts +0 -141
- package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
- package/dist/resources/extensions/aws-auth/index.ts +0 -144
- package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
- package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
- package/dist/resources/extensions/bg-shell/index.ts +0 -59
- package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
- package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
- package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
- package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
- package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
- package/dist/resources/extensions/bg-shell/types.ts +0 -303
- package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
- package/dist/resources/extensions/browser-tools/capture.ts +0 -199
- package/dist/resources/extensions/browser-tools/core.ts +0 -1196
- package/dist/resources/extensions/browser-tools/index.ts +0 -71
- package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
- package/dist/resources/extensions/browser-tools/refs.ts +0 -264
- package/dist/resources/extensions/browser-tools/settle.ts +0 -197
- package/dist/resources/extensions/browser-tools/state.ts +0 -408
- package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
- package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
- package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
- package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
- package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
- package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
- package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
- package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
- package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
- package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
- package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
- package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
- package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
- package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
- package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
- package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
- package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
- package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
- package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
- package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
- package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
- package/dist/resources/extensions/browser-tools/utils.ts +0 -660
- package/dist/resources/extensions/context7/index.ts +0 -428
- package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
- package/dist/resources/extensions/google-search/index.ts +0 -466
- package/dist/resources/extensions/gsd/activity-log.ts +0 -162
- package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
- package/dist/resources/extensions/gsd/auto/session.ts +0 -236
- package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
- package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
- package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
- package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
- package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
- package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
- package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
- package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
- package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
- package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
- package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
- package/dist/resources/extensions/gsd/auto-start.ts +0 -483
- package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
- package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
- package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
- package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
- package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
- package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
- package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
- package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
- package/dist/resources/extensions/gsd/auto.ts +0 -1834
- package/dist/resources/extensions/gsd/captures.ts +0 -427
- package/dist/resources/extensions/gsd/claude-import.ts +0 -656
- package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
- package/dist/resources/extensions/gsd/commands-config.ts +0 -102
- package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
- package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
- package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
- package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
- package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
- package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
- package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
- package/dist/resources/extensions/gsd/commands.ts +0 -1149
- package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
- package/dist/resources/extensions/gsd/context-budget.ts +0 -266
- package/dist/resources/extensions/gsd/context-store.ts +0 -195
- package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
- package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
- package/dist/resources/extensions/gsd/db-writer.ts +0 -360
- package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
- package/dist/resources/extensions/gsd/detection.ts +0 -470
- package/dist/resources/extensions/gsd/diff-context.ts +0 -214
- package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
- package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
- package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
- package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
- package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
- package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
- package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
- package/dist/resources/extensions/gsd/doctor.ts +0 -722
- package/dist/resources/extensions/gsd/error-utils.ts +0 -6
- package/dist/resources/extensions/gsd/exit-command.ts +0 -18
- package/dist/resources/extensions/gsd/export.ts +0 -317
- package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
- package/dist/resources/extensions/gsd/files.ts +0 -1058
- package/dist/resources/extensions/gsd/forensics.ts +0 -629
- package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
- package/dist/resources/extensions/gsd/git-service.ts +0 -580
- package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
- package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
- package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
- package/dist/resources/extensions/gsd/health-widget.ts +0 -167
- package/dist/resources/extensions/gsd/history.ts +0 -143
- package/dist/resources/extensions/gsd/index.ts +0 -1390
- package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
- package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
- package/dist/resources/extensions/gsd/key-manager.ts +0 -996
- package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
- package/dist/resources/extensions/gsd/md-importer.ts +0 -527
- package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
- package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
- package/dist/resources/extensions/gsd/memory-store.ts +0 -441
- package/dist/resources/extensions/gsd/metrics.ts +0 -532
- package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
- package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
- package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
- package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
- package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
- package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
- package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
- package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
- package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
- package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
- package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
- package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
- package/dist/resources/extensions/gsd/model-router.ts +0 -256
- package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
- package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
- package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
- package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
- package/dist/resources/extensions/gsd/notifications.ts +0 -87
- package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
- package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
- package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
- package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
- package/dist/resources/extensions/gsd/paths.ts +0 -449
- package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
- package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
- package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
- package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
- package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
- package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
- package/dist/resources/extensions/gsd/preferences.ts +0 -416
- package/dist/resources/extensions/gsd/progress-score.ts +0 -273
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
- package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
- package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
- package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
- package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
- package/dist/resources/extensions/gsd/queue-order.ts +0 -230
- package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
- package/dist/resources/extensions/gsd/quick.ts +0 -212
- package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
- package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
- package/dist/resources/extensions/gsd/routing-history.ts +0 -286
- package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
- package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
- package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
- package/dist/resources/extensions/gsd/session-lock.ts +0 -426
- package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
- package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
- package/dist/resources/extensions/gsd/skill-health.ts +0 -417
- package/dist/resources/extensions/gsd/state.ts +0 -727
- package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
- package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
- package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
- package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
- package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
- package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
- package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
- package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
- package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
- package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
- package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
- package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
- package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
- package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
- package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
- package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
- package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
- package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
- package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
- package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
- package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
- package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
- package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
- package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
- package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
- package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
- package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
- package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
- package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
- package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
- package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
- package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
- package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
- package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
- package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
- package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
- package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
- package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
- package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
- package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
- package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
- package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
- package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
- package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
- package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
- package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
- package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
- package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
- package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
- package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
- package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
- package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
- package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
- package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
- package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
- package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
- package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
- package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
- package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
- package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
- package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
- package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
- package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
- package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
- package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
- package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
- package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
- package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
- package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
- package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
- package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
- package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
- package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
- package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
- package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
- package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
- package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
- package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
- package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
- package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
- package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
- package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
- package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
- package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
- package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
- package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
- package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
- package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
- package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
- package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
- package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
- package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
- package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
- package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
- package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
- package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
- package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
- package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
- package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
- package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
- package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
- package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
- package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
- package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
- package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
- package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
- package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
- package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
- package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
- package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
- package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
- package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
- package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
- package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
- package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
- package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
- package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
- package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
- package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
- package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
- package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
- package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
- package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
- package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
- package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
- package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
- package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
- package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
- package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
- package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
- package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
- package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
- package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
- package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
- package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
- package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
- package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
- package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
- package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
- package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
- package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
- package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
- package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
- package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
- package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
- package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
- package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
- package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
- package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
- package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
- package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
- package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
- package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
- package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
- package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
- package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
- package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
- package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
- package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
- package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
- package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
- package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
- package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
- package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
- package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
- package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
- package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
- package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
- package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
- package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
- package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
- package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
- package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
- package/dist/resources/extensions/gsd/token-counter.ts +0 -65
- package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
- package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
- package/dist/resources/extensions/gsd/types.ts +0 -425
- package/dist/resources/extensions/gsd/undo.ts +0 -223
- package/dist/resources/extensions/gsd/unit-id.ts +0 -14
- package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
- package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
- package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
- package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
- package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
- package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
- package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
- package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
- package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
- package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
- package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
- package/dist/resources/extensions/gsd/worktree.ts +0 -257
- package/dist/resources/extensions/mac-tools/index.ts +0 -852
- package/dist/resources/extensions/mcp-client/index.ts +0 -459
- package/dist/resources/extensions/remote-questions/config.ts +0 -83
- package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
- package/dist/resources/extensions/remote-questions/format.ts +0 -315
- package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
- package/dist/resources/extensions/remote-questions/manager.ts +0 -184
- package/dist/resources/extensions/remote-questions/notify.ts +0 -90
- package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
- package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
- package/dist/resources/extensions/remote-questions/status.ts +0 -31
- package/dist/resources/extensions/remote-questions/store.ts +0 -81
- package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
- package/dist/resources/extensions/remote-questions/types.ts +0 -102
- package/dist/resources/extensions/search-the-web/cache.ts +0 -78
- package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
- package/dist/resources/extensions/search-the-web/format.ts +0 -258
- package/dist/resources/extensions/search-the-web/http.ts +0 -238
- package/dist/resources/extensions/search-the-web/index.ts +0 -65
- package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
- package/dist/resources/extensions/search-the-web/provider.ts +0 -148
- package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
- package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
- package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
- package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
- package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
- package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
- package/dist/resources/extensions/shared/frontmatter.ts +0 -117
- package/dist/resources/extensions/shared/interview-ui.ts +0 -613
- package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
- package/dist/resources/extensions/shared/sanitize.ts +0 -19
- package/dist/resources/extensions/shared/terminal.ts +0 -23
- package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
- package/dist/resources/extensions/shared/ui.ts +0 -400
- package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
- package/dist/resources/extensions/slash-commands/audit.ts +0 -88
- package/dist/resources/extensions/slash-commands/clear.ts +0 -10
- package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
- package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
- package/dist/resources/extensions/slash-commands/index.ts +0 -12
- package/dist/resources/extensions/subagent/agents.ts +0 -126
- package/dist/resources/extensions/subagent/index.ts +0 -1121
- package/dist/resources/extensions/subagent/isolation.ts +0 -501
- package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
- package/dist/resources/extensions/ttsr/index.ts +0 -168
- package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
- package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
- package/dist/resources/extensions/universal-config/discovery.ts +0 -104
- package/dist/resources/extensions/universal-config/format.ts +0 -191
- package/dist/resources/extensions/universal-config/index.ts +0 -120
- package/dist/resources/extensions/universal-config/scanners.ts +0 -642
- package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
- package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
- package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
- package/dist/resources/extensions/universal-config/tools.ts +0 -60
- package/dist/resources/extensions/universal-config/types.ts +0 -135
- package/dist/resources/extensions/voice/index.ts +0 -272
- package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
- package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
- package/src/resources/extensions/gsd/auto-constants.ts +0 -6
- package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
- package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
- package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
- package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
- package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
- package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
- package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
- package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
- package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
- package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
|
@@ -1,580 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GSD Git Service
|
|
3
|
-
*
|
|
4
|
-
* Core git operations for GSD: types, constants, and pure helpers.
|
|
5
|
-
* Higher-level operations (commit, staging, branching) build on these.
|
|
6
|
-
*
|
|
7
|
-
* This module centralizes the GitPreferences interface, runtime exclusion
|
|
8
|
-
* paths, commit type inference, and the runGit shell helper.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { execFileSync, execSync } from "node:child_process";
|
|
12
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
13
|
-
import { join } from "node:path";
|
|
14
|
-
import { gsdRoot } from "./paths.js";
|
|
15
|
-
import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
|
|
16
|
-
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
detectWorktreeName,
|
|
20
|
-
SLICE_BRANCH_RE,
|
|
21
|
-
} from "./worktree.js";
|
|
22
|
-
import {
|
|
23
|
-
nativeGetCurrentBranch,
|
|
24
|
-
nativeDetectMainBranch,
|
|
25
|
-
nativeBranchExists,
|
|
26
|
-
nativeHasChanges,
|
|
27
|
-
nativeAddAll,
|
|
28
|
-
nativeResetPaths,
|
|
29
|
-
nativeHasStagedChanges,
|
|
30
|
-
nativeCommit,
|
|
31
|
-
nativeRmCached,
|
|
32
|
-
nativeUpdateRef,
|
|
33
|
-
nativeAddPaths,
|
|
34
|
-
} from "./native-git-bridge.js";
|
|
35
|
-
import { GSDError, GSD_MERGE_CONFLICT, GSD_GIT_ERROR } from "./errors.js";
|
|
36
|
-
import { getErrorMessage } from "./error-utils.js";
|
|
37
|
-
|
|
38
|
-
// ─── Types ─────────────────────────────────────────────────────────────────
|
|
39
|
-
|
|
40
|
-
export interface GitPreferences {
|
|
41
|
-
auto_push?: boolean;
|
|
42
|
-
push_branches?: boolean;
|
|
43
|
-
remote?: string;
|
|
44
|
-
snapshots?: boolean;
|
|
45
|
-
pre_merge_check?: boolean | string;
|
|
46
|
-
commit_type?: string;
|
|
47
|
-
main_branch?: string;
|
|
48
|
-
merge_strategy?: "squash" | "merge";
|
|
49
|
-
/** Controls auto-mode git isolation strategy.
|
|
50
|
-
* - "worktree": (default) creates a milestone worktree for isolated work
|
|
51
|
-
* - "branch": works directly in the project root (for submodule-heavy repos)
|
|
52
|
-
* - "none": no git isolation — commits land on the user's current branch directly
|
|
53
|
-
*/
|
|
54
|
-
isolation?: "worktree" | "branch" | "none";
|
|
55
|
-
/** When false, GSD will not modify .gitignore at all — no baseline patterns
|
|
56
|
-
* are added and no self-healing occurs. Use this if you manage your own
|
|
57
|
-
* .gitignore and don't want GSD touching it.
|
|
58
|
-
* Default: true (GSD ensures baseline patterns are present).
|
|
59
|
-
*/
|
|
60
|
-
manage_gitignore?: boolean;
|
|
61
|
-
/** Script to run after a worktree is created (#597).
|
|
62
|
-
* Receives SOURCE_DIR and WORKTREE_DIR as environment variables.
|
|
63
|
-
* Can be an absolute path or relative to the project root.
|
|
64
|
-
* Failure is non-fatal — logged as a warning.
|
|
65
|
-
*/
|
|
66
|
-
worktree_post_create?: string;
|
|
67
|
-
/** When true, automatically create a pull request after milestone completion.
|
|
68
|
-
* The PR targets `pr_target_branch` (default: the main branch).
|
|
69
|
-
* Requires `push_branches: true` and a configured remote.
|
|
70
|
-
* Default: false.
|
|
71
|
-
*/
|
|
72
|
-
auto_pr?: boolean;
|
|
73
|
-
/** Target branch for auto-created PRs (e.g. "develop", "qa").
|
|
74
|
-
* Default: the main branch (from `main_branch` or auto-detected).
|
|
75
|
-
*/
|
|
76
|
-
pr_target_branch?: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export const VALID_BRANCH_NAME = /^[a-zA-Z0-9_\-\/.]+$/;
|
|
80
|
-
|
|
81
|
-
export interface CommitOptions {
|
|
82
|
-
message: string;
|
|
83
|
-
allowEmpty?: boolean;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// ─── Meaningful Commit Message Generation ───────────────────────────────────
|
|
87
|
-
|
|
88
|
-
/** Context for generating a meaningful commit message from task execution results. */
|
|
89
|
-
export interface TaskCommitContext {
|
|
90
|
-
taskId: string;
|
|
91
|
-
taskTitle: string;
|
|
92
|
-
/** The one-liner from the task summary (e.g. "Added retry-aware worker status logging") */
|
|
93
|
-
oneLiner?: string;
|
|
94
|
-
/** Files modified by this task (from task summary frontmatter) */
|
|
95
|
-
keyFiles?: string[];
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Build a meaningful conventional commit message from task execution context.
|
|
100
|
-
* Format: `{type}({sliceId}/{taskId}): {description}`
|
|
101
|
-
*
|
|
102
|
-
* The description is the task summary one-liner if available (it describes
|
|
103
|
-
* what was actually built), falling back to the task title (what was planned).
|
|
104
|
-
*/
|
|
105
|
-
export function buildTaskCommitMessage(ctx: TaskCommitContext): string {
|
|
106
|
-
const scope = ctx.taskId; // e.g. "S01/T02" or just "T02"
|
|
107
|
-
const description = ctx.oneLiner || ctx.taskTitle;
|
|
108
|
-
const type = inferCommitType(ctx.taskTitle, ctx.oneLiner);
|
|
109
|
-
|
|
110
|
-
// Truncate description to ~72 chars for subject line
|
|
111
|
-
const maxDescLen = 68 - type.length - scope.length;
|
|
112
|
-
const truncated = description.length > maxDescLen
|
|
113
|
-
? description.slice(0, maxDescLen - 1).trimEnd() + "…"
|
|
114
|
-
: description;
|
|
115
|
-
|
|
116
|
-
const subject = `${type}(${scope}): ${truncated}`;
|
|
117
|
-
|
|
118
|
-
// Build body with key files if available
|
|
119
|
-
if (ctx.keyFiles && ctx.keyFiles.length > 0) {
|
|
120
|
-
const fileLines = ctx.keyFiles
|
|
121
|
-
.slice(0, 8) // cap at 8 files to keep commit concise
|
|
122
|
-
.map(f => `- ${f}`)
|
|
123
|
-
.join("\n");
|
|
124
|
-
return `${subject}\n\n${fileLines}`;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return subject;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Thrown when a slice merge hits code conflicts in non-.gsd files.
|
|
132
|
-
* The working tree is left in a conflicted state (no reset) so the
|
|
133
|
-
* caller can dispatch a fix-merge session to resolve it.
|
|
134
|
-
*/
|
|
135
|
-
export class MergeConflictError extends GSDError {
|
|
136
|
-
readonly conflictedFiles: string[];
|
|
137
|
-
readonly strategy: "squash" | "merge";
|
|
138
|
-
readonly branch: string;
|
|
139
|
-
readonly mainBranch: string;
|
|
140
|
-
|
|
141
|
-
constructor(
|
|
142
|
-
conflictedFiles: string[],
|
|
143
|
-
strategy: "squash" | "merge",
|
|
144
|
-
branch: string,
|
|
145
|
-
mainBranch: string,
|
|
146
|
-
) {
|
|
147
|
-
super(
|
|
148
|
-
GSD_MERGE_CONFLICT,
|
|
149
|
-
`${strategy === "merge" ? "Merge" : "Squash-merge"} of "${branch}" into "${mainBranch}" ` +
|
|
150
|
-
`failed with conflicts in ${conflictedFiles.length} non-.gsd file(s): ${conflictedFiles.join(", ")}`,
|
|
151
|
-
);
|
|
152
|
-
this.name = "MergeConflictError";
|
|
153
|
-
this.conflictedFiles = conflictedFiles;
|
|
154
|
-
this.strategy = strategy;
|
|
155
|
-
this.branch = branch;
|
|
156
|
-
this.mainBranch = mainBranch;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export interface PreMergeCheckResult {
|
|
161
|
-
passed: boolean;
|
|
162
|
-
skipped?: boolean;
|
|
163
|
-
command?: string;
|
|
164
|
-
error?: string;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// ─── Constants ─────────────────────────────────────────────────────────────
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* GSD runtime paths that should be excluded from smart staging.
|
|
171
|
-
* These are transient/generated artifacts that should never be committed.
|
|
172
|
-
* Matches the union of SKIP_PATHS + SKIP_EXACT in worktree-manager.ts
|
|
173
|
-
* and the first 7 entries in gitignore.ts BASELINE_PATTERNS.
|
|
174
|
-
*/
|
|
175
|
-
export const RUNTIME_EXCLUSION_PATHS: readonly string[] = [
|
|
176
|
-
".gsd/activity/",
|
|
177
|
-
".gsd/runtime/",
|
|
178
|
-
".gsd/worktrees/",
|
|
179
|
-
".gsd/auto.lock",
|
|
180
|
-
".gsd/metrics.json",
|
|
181
|
-
".gsd/completed-units.json",
|
|
182
|
-
".gsd/STATE.md",
|
|
183
|
-
".gsd/gsd.db",
|
|
184
|
-
".gsd/DISCUSSION-MANIFEST.json",
|
|
185
|
-
];
|
|
186
|
-
|
|
187
|
-
// ─── Integration Branch Metadata ───────────────────────────────────────────
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Path to the milestone metadata file that stores the integration branch.
|
|
191
|
-
* Format: .gsd/milestones/<MID>/<MID>-META.json
|
|
192
|
-
*/
|
|
193
|
-
function milestoneMetaPath(basePath: string, milestoneId: string): string {
|
|
194
|
-
return join(gsdRoot(basePath), "milestones", milestoneId, `${milestoneId}-META.json`);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Read the integration branch recorded for a milestone.
|
|
199
|
-
* Returns null if no metadata file exists or the branch isn't set.
|
|
200
|
-
*/
|
|
201
|
-
export function readIntegrationBranch(basePath: string, milestoneId: string): string | null {
|
|
202
|
-
try {
|
|
203
|
-
const metaFile = milestoneMetaPath(basePath, milestoneId);
|
|
204
|
-
if (!existsSync(metaFile)) return null;
|
|
205
|
-
const data = JSON.parse(readFileSync(metaFile, "utf-8"));
|
|
206
|
-
const branch = data?.integrationBranch;
|
|
207
|
-
if (typeof branch === "string" && branch.trim() !== "" && VALID_BRANCH_NAME.test(branch)) {
|
|
208
|
-
return branch;
|
|
209
|
-
}
|
|
210
|
-
return null;
|
|
211
|
-
} catch {
|
|
212
|
-
return null;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Persist the integration branch for a milestone.
|
|
218
|
-
*
|
|
219
|
-
* Called when auto-mode starts on a milestone. Records the branch the user
|
|
220
|
-
* was on at that point, so the milestone worktree merges back to the correct
|
|
221
|
-
* branch. Idempotent when the branch matches; updates the record when the
|
|
222
|
-
* user starts from a different branch.
|
|
223
|
-
*
|
|
224
|
-
* The file is committed immediately so the metadata is persisted in git.
|
|
225
|
-
*/
|
|
226
|
-
export function writeIntegrationBranch(basePath: string, milestoneId: string, branch: string): void {
|
|
227
|
-
// Don't record slice branches as the integration target
|
|
228
|
-
if (SLICE_BRANCH_RE.test(branch)) return;
|
|
229
|
-
// Validate
|
|
230
|
-
if (!VALID_BRANCH_NAME.test(branch)) return;
|
|
231
|
-
// Skip if already recorded with the same branch (idempotent across restarts).
|
|
232
|
-
// If recorded with a different branch, update it — the user started auto-mode
|
|
233
|
-
// from a new branch and expects slices to merge back there (#300).
|
|
234
|
-
const existingBranch = readIntegrationBranch(basePath, milestoneId);
|
|
235
|
-
if (existingBranch === branch) return;
|
|
236
|
-
|
|
237
|
-
const metaFile = milestoneMetaPath(basePath, milestoneId);
|
|
238
|
-
mkdirSync(join(gsdRoot(basePath), "milestones", milestoneId), { recursive: true });
|
|
239
|
-
|
|
240
|
-
// Merge with existing metadata if present
|
|
241
|
-
let existing: Record<string, unknown> = {};
|
|
242
|
-
try {
|
|
243
|
-
if (existsSync(metaFile)) {
|
|
244
|
-
existing = JSON.parse(readFileSync(metaFile, "utf-8"));
|
|
245
|
-
}
|
|
246
|
-
} catch { /* corrupt file — overwrite */ }
|
|
247
|
-
|
|
248
|
-
existing.integrationBranch = branch;
|
|
249
|
-
writeFileSync(metaFile, JSON.stringify(existing, null, 2) + "\n", "utf-8");
|
|
250
|
-
// .gsd/ is managed externally (symlinked) — metadata is not committed to git.
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// ─── Git Helper ────────────────────────────────────────────────────────────
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Strip git-svn noise from error messages.
|
|
258
|
-
* Some systems (notably Arch Linux) have a buggy git-svn Perl module that
|
|
259
|
-
* emits warnings on every git invocation, confusing users. See #404.
|
|
260
|
-
*/
|
|
261
|
-
function filterGitSvnNoise(message: string): string {
|
|
262
|
-
return message
|
|
263
|
-
.replace(/Duplicate specification "[^"]*" for option "[^"]*"\n?/g, "")
|
|
264
|
-
.replace(/Unable to determine upstream SVN information from .*\n?/g, "")
|
|
265
|
-
.replace(/Perhaps the repository is empty\. at .*git-svn.*\n?/g, "")
|
|
266
|
-
.trim();
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Run a git command in the given directory.
|
|
271
|
-
* Returns trimmed stdout. Throws on non-zero exit unless allowFailure is set.
|
|
272
|
-
* When `input` is provided, it is piped to stdin.
|
|
273
|
-
*/
|
|
274
|
-
export function runGit(basePath: string, args: string[], options: { allowFailure?: boolean; input?: string } = {}): string {
|
|
275
|
-
try {
|
|
276
|
-
return execFileSync("git", args, {
|
|
277
|
-
cwd: basePath,
|
|
278
|
-
stdio: [options.input != null ? "pipe" : "ignore", "pipe", "pipe"],
|
|
279
|
-
encoding: "utf-8",
|
|
280
|
-
env: GIT_NO_PROMPT_ENV,
|
|
281
|
-
...(options.input != null ? { input: options.input } : {}),
|
|
282
|
-
}).trim();
|
|
283
|
-
} catch (error) {
|
|
284
|
-
if (options.allowFailure) return "";
|
|
285
|
-
const message = getErrorMessage(error);
|
|
286
|
-
throw new GSDError(GSD_GIT_ERROR, `git ${args.join(" ")} failed in ${basePath}: ${filterGitSvnNoise(message)}`);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// ─── Commit Type Inference ─────────────────────────────────────────────────
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Keyword-to-commit-type mapping. Order matters — first match wins.
|
|
294
|
-
* Each entry: [keywords[], commitType]
|
|
295
|
-
*/
|
|
296
|
-
const COMMIT_TYPE_RULES: [string[], string][] = [
|
|
297
|
-
[["fix", "fixed", "fixes", "bug", "patch", "hotfix", "repair", "correct"], "fix"],
|
|
298
|
-
[["refactor", "restructure", "reorganize"], "refactor"],
|
|
299
|
-
[["doc", "docs", "documentation", "readme", "changelog"], "docs"],
|
|
300
|
-
[["test", "tests", "testing", "spec", "coverage"], "test"],
|
|
301
|
-
[["perf", "performance", "optimize", "speed", "cache"], "perf"],
|
|
302
|
-
[["chore", "cleanup", "clean up", "dependencies", "deps", "bump", "config", "ci", "archive", "remove", "delete"], "chore"],
|
|
303
|
-
];
|
|
304
|
-
|
|
305
|
-
// ─── GitServiceImpl ────────────────────────────────────────────────────
|
|
306
|
-
|
|
307
|
-
export class GitServiceImpl {
|
|
308
|
-
readonly basePath: string;
|
|
309
|
-
readonly prefs: GitPreferences;
|
|
310
|
-
|
|
311
|
-
/** Active milestone ID — used to resolve the integration branch. */
|
|
312
|
-
private _milestoneId: string | null = null;
|
|
313
|
-
|
|
314
|
-
constructor(basePath: string, prefs: GitPreferences = {}) {
|
|
315
|
-
this.basePath = basePath;
|
|
316
|
-
this.prefs = prefs;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Set the active milestone ID for integration branch resolution.
|
|
321
|
-
* When set, getMainBranch() will check the milestone's metadata file
|
|
322
|
-
* for a recorded integration branch before falling back to repo defaults.
|
|
323
|
-
*/
|
|
324
|
-
setMilestoneId(milestoneId: string | null): void {
|
|
325
|
-
this._milestoneId = milestoneId;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/** Convenience wrapper: run git in this repo's basePath. */
|
|
329
|
-
private git(args: string[], options: { allowFailure?: boolean; input?: string } = {}): string {
|
|
330
|
-
return runGit(this.basePath, args, options);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Smart staging: `git add -A` excluding GSD runtime paths via pathspec.
|
|
335
|
-
* Falls back to plain `git add -A` if the exclusion pathspec fails.
|
|
336
|
-
* @param extraExclusions Additional pathspec exclusions beyond RUNTIME_EXCLUSION_PATHS.
|
|
337
|
-
*/
|
|
338
|
-
private smartStage(extraExclusions: readonly string[] = []): void {
|
|
339
|
-
// Always exclude .gsd/ — state is managed externally (symlinked to ~/.gsd/projects/<hash>/)
|
|
340
|
-
const allExclusions = [".gsd/", ...extraExclusions];
|
|
341
|
-
|
|
342
|
-
// One-time cleanup: if runtime files are already tracked in the index
|
|
343
|
-
// (from older versions where the fallback bug staged them), untrack them
|
|
344
|
-
// in a dedicated commit. This must happen as a separate commit because
|
|
345
|
-
// the git reset HEAD step below would otherwise undo the rm --cached.
|
|
346
|
-
if (!this._runtimeFilesCleanedUp) {
|
|
347
|
-
let cleaned = false;
|
|
348
|
-
for (const exclusion of RUNTIME_EXCLUSION_PATHS) {
|
|
349
|
-
const removed = nativeRmCached(this.basePath, [exclusion]);
|
|
350
|
-
if (removed.length > 0) cleaned = true;
|
|
351
|
-
}
|
|
352
|
-
if (cleaned) {
|
|
353
|
-
nativeCommit(this.basePath, "chore: untrack .gsd/ runtime files from git index", { allowEmpty: false });
|
|
354
|
-
}
|
|
355
|
-
this._runtimeFilesCleanedUp = true;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// Stage everything, then unstage excluded paths.
|
|
359
|
-
//
|
|
360
|
-
// Previous approach used pathspec excludes (:(exclude)...) with git add -A,
|
|
361
|
-
// but that fails when .gsd/ is in .gitignore — git exits non-zero before
|
|
362
|
-
// evaluating the excludes. The catch fallback ran plain `git add -A`,
|
|
363
|
-
// staging all tracked runtime files unconditionally and defeating the
|
|
364
|
-
// exclusion list entirely.
|
|
365
|
-
//
|
|
366
|
-
// git reset HEAD silently succeeds when the path isn't staged, so no
|
|
367
|
-
// error handling is needed per-path.
|
|
368
|
-
nativeAddAll(this.basePath);
|
|
369
|
-
|
|
370
|
-
for (const exclusion of allExclusions) {
|
|
371
|
-
try { nativeResetPaths(this.basePath, [exclusion]); } catch { /* path not staged — ignore */ }
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/** Tracks whether runtime file cleanup has run this session. */
|
|
376
|
-
private _runtimeFilesCleanedUp = false;
|
|
377
|
-
|
|
378
|
-
/**
|
|
379
|
-
* Stage files (smart staging) and commit.
|
|
380
|
-
* Returns the commit message string on success, or null if nothing to commit.
|
|
381
|
-
* Uses `git commit -F -` with stdin pipe for safe multi-line message handling.
|
|
382
|
-
*/
|
|
383
|
-
commit(opts: CommitOptions): string | null {
|
|
384
|
-
this.smartStage();
|
|
385
|
-
|
|
386
|
-
// Check if anything was actually staged
|
|
387
|
-
if (!nativeHasStagedChanges(this.basePath) && !opts.allowEmpty) return null;
|
|
388
|
-
|
|
389
|
-
nativeCommit(this.basePath, opts.message, { allowEmpty: opts.allowEmpty ?? false });
|
|
390
|
-
return opts.message;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Auto-commit dirty working tree.
|
|
395
|
-
*
|
|
396
|
-
* When `taskContext` is provided, generates a meaningful conventional commit
|
|
397
|
-
* message from the task execution results (one-liner, title, inferred type).
|
|
398
|
-
* Falls back to a generic `chore()` message when no context is available
|
|
399
|
-
* (e.g. pre-switch commits, stop commits, state rebuild commits).
|
|
400
|
-
*
|
|
401
|
-
* Returns the commit message on success, or null if nothing to commit.
|
|
402
|
-
* @param extraExclusions Additional paths to exclude from staging (e.g. [".gsd/"] for pre-switch commits).
|
|
403
|
-
*/
|
|
404
|
-
autoCommit(
|
|
405
|
-
unitType: string,
|
|
406
|
-
unitId: string,
|
|
407
|
-
extraExclusions: readonly string[] = [],
|
|
408
|
-
taskContext?: TaskCommitContext,
|
|
409
|
-
): string | null {
|
|
410
|
-
// Quick check: is there anything dirty at all?
|
|
411
|
-
// Native path uses libgit2 (single syscall), fallback spawns git.
|
|
412
|
-
if (!nativeHasChanges(this.basePath)) return null;
|
|
413
|
-
|
|
414
|
-
this.smartStage(extraExclusions);
|
|
415
|
-
|
|
416
|
-
// After smart staging, check if anything was actually staged
|
|
417
|
-
// (all changes might have been runtime files that got excluded)
|
|
418
|
-
if (!nativeHasStagedChanges(this.basePath)) return null;
|
|
419
|
-
|
|
420
|
-
const message = taskContext
|
|
421
|
-
? buildTaskCommitMessage(taskContext)
|
|
422
|
-
: `chore(${unitId}): auto-commit after ${unitType}`;
|
|
423
|
-
nativeCommit(this.basePath, message, { allowEmpty: false });
|
|
424
|
-
return message;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
// ─── Branch Queries ────────────────────────────────────────────────────
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
* Get the integration branch for this repo — the branch that slice
|
|
431
|
-
* branches are created from and merged back into.
|
|
432
|
-
*
|
|
433
|
-
* This is often `main` or `master`, but not necessarily. When a user
|
|
434
|
-
* starts GSD on a feature branch like `f-123-new-thing`, that branch
|
|
435
|
-
* is recorded as the integration target, and all slice branches merge
|
|
436
|
-
* back into it — not the repo's default branch. The name "main branch"
|
|
437
|
-
* in variable names is historical; think of it as "integration branch".
|
|
438
|
-
*
|
|
439
|
-
* Resolution order:
|
|
440
|
-
* 1. Explicit `main_branch` preference (user override, highest priority)
|
|
441
|
-
* 2. Milestone integration branch from metadata file (recorded at milestone start)
|
|
442
|
-
* 3. Worktree base branch (worktree/<name>)
|
|
443
|
-
* 4. origin/HEAD symbolic-ref → main/master fallback → current branch
|
|
444
|
-
*/
|
|
445
|
-
getMainBranch(): string {
|
|
446
|
-
// Explicit preference takes priority (double-check validity as defense-in-depth)
|
|
447
|
-
if (this.prefs.main_branch && VALID_BRANCH_NAME.test(this.prefs.main_branch)) {
|
|
448
|
-
return this.prefs.main_branch;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
// Check milestone integration branch — recorded when auto-mode starts
|
|
452
|
-
if (this._milestoneId) {
|
|
453
|
-
const integrationBranch = readIntegrationBranch(this.basePath, this._milestoneId);
|
|
454
|
-
if (integrationBranch) {
|
|
455
|
-
// Verify the branch still exists locally (could have been deleted)
|
|
456
|
-
if (nativeBranchExists(this.basePath, integrationBranch)) return integrationBranch;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
const wtName = detectWorktreeName(this.basePath);
|
|
461
|
-
if (wtName) {
|
|
462
|
-
const wtBranch = `worktree/${wtName}`;
|
|
463
|
-
if (nativeBranchExists(this.basePath, wtBranch)) return wtBranch;
|
|
464
|
-
return nativeGetCurrentBranch(this.basePath);
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
// Repo-level default detection: origin/HEAD → main → master → current branch.
|
|
468
|
-
// Native path uses libgit2 (single call), fallback spawns multiple git processes.
|
|
469
|
-
return nativeDetectMainBranch(this.basePath);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
/** Get the current branch name. Native libgit2 when available, execSync fallback. */
|
|
473
|
-
getCurrentBranch(): string {
|
|
474
|
-
return nativeGetCurrentBranch(this.basePath);
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
/** True if currently on a GSD slice branch. */
|
|
478
|
-
// ─── Branch Lifecycle ──────────────────────────────────────────────────
|
|
479
|
-
|
|
480
|
-
// ─── S05 Features ─────────────────────────────────────────────────────
|
|
481
|
-
|
|
482
|
-
/**
|
|
483
|
-
* Create a snapshot ref for the given label (typically a slice branch name).
|
|
484
|
-
* Gated on prefs.snapshots === true. Ref path: refs/gsd/snapshots/<label>/<timestamp>
|
|
485
|
-
* The ref points at HEAD, capturing the current commit before destructive operations.
|
|
486
|
-
*/
|
|
487
|
-
createSnapshot(label: string): void {
|
|
488
|
-
if (this.prefs.snapshots !== true) return;
|
|
489
|
-
|
|
490
|
-
const now = new Date();
|
|
491
|
-
const ts = now.getFullYear().toString()
|
|
492
|
-
+ String(now.getMonth() + 1).padStart(2, "0")
|
|
493
|
-
+ String(now.getDate()).padStart(2, "0")
|
|
494
|
-
+ "-"
|
|
495
|
-
+ String(now.getHours()).padStart(2, "0")
|
|
496
|
-
+ String(now.getMinutes()).padStart(2, "0")
|
|
497
|
-
+ String(now.getSeconds()).padStart(2, "0");
|
|
498
|
-
|
|
499
|
-
const refPath = `refs/gsd/snapshots/${label}/${ts}`;
|
|
500
|
-
nativeUpdateRef(this.basePath, refPath, "HEAD");
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
/**
|
|
504
|
-
* Run pre-merge verification check. Auto-detects test runner from project
|
|
505
|
-
* files, or uses custom command from prefs.pre_merge_check.
|
|
506
|
-
* Gated on prefs.pre_merge_check (false = skip, string = custom command).
|
|
507
|
-
* Stub: to be implemented in T03.
|
|
508
|
-
*/
|
|
509
|
-
runPreMergeCheck(): PreMergeCheckResult {
|
|
510
|
-
if (this.prefs.pre_merge_check === false || this.prefs.pre_merge_check === undefined) {
|
|
511
|
-
return { passed: true, skipped: true };
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
// Determine command: explicit string or auto-detect from package.json
|
|
515
|
-
let command: string;
|
|
516
|
-
if (typeof this.prefs.pre_merge_check === "string") {
|
|
517
|
-
command = this.prefs.pre_merge_check;
|
|
518
|
-
} else {
|
|
519
|
-
// Auto-detect: look for package.json with a test script
|
|
520
|
-
try {
|
|
521
|
-
const pkg = readFileSync(join(this.basePath, "package.json"), "utf-8");
|
|
522
|
-
const parsed = JSON.parse(pkg);
|
|
523
|
-
if (parsed.scripts?.test) {
|
|
524
|
-
command = "npm test";
|
|
525
|
-
} else {
|
|
526
|
-
return { passed: true, skipped: true };
|
|
527
|
-
}
|
|
528
|
-
} catch {
|
|
529
|
-
return { passed: true, skipped: true };
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
try {
|
|
534
|
-
execSync(command, { cwd: this.basePath, stdio: "pipe", encoding: "utf-8" });
|
|
535
|
-
return { passed: true, skipped: false, command };
|
|
536
|
-
} catch (err) {
|
|
537
|
-
const msg = getErrorMessage(err);
|
|
538
|
-
return { passed: false, skipped: false, command, error: msg };
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// ─── Merge ─────────────────────────────────────────────────────────────
|
|
543
|
-
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
// ─── Factory ───────────────────────────────────────────────────────────────
|
|
547
|
-
|
|
548
|
-
/** Create a GitServiceImpl with the current effective git preferences. */
|
|
549
|
-
export function createGitService(basePath: string): GitServiceImpl {
|
|
550
|
-
const gitPrefs = loadEffectiveGSDPreferences()?.preferences?.git ?? {};
|
|
551
|
-
return new GitServiceImpl(basePath, gitPrefs);
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
// ─── Commit Type Inference ─────────────────────────────────────────────────
|
|
555
|
-
|
|
556
|
-
/**
|
|
557
|
-
* Infer a conventional commit type from a title (and optional one-liner).
|
|
558
|
-
* Uses case-insensitive word-boundary matching against known keywords.
|
|
559
|
-
* Returns "feat" when no keywords match.
|
|
560
|
-
*
|
|
561
|
-
* Used for both slice squash-merge titles and task commit messages.
|
|
562
|
-
*/
|
|
563
|
-
export function inferCommitType(title: string, oneLiner?: string): string {
|
|
564
|
-
const lower = `${title} ${oneLiner || ""}`.toLowerCase();
|
|
565
|
-
|
|
566
|
-
for (const [keywords, commitType] of COMMIT_TYPE_RULES) {
|
|
567
|
-
for (const keyword of keywords) {
|
|
568
|
-
// "clean up" is multi-word — use indexOf for it
|
|
569
|
-
if (keyword.includes(" ")) {
|
|
570
|
-
if (lower.includes(keyword)) return commitType;
|
|
571
|
-
} else {
|
|
572
|
-
// Word boundary match: keyword must not be surrounded by word chars
|
|
573
|
-
const re = new RegExp(`\\b${keyword}\\b`, "i");
|
|
574
|
-
if (re.test(lower)) return commitType;
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
return "feat";
|
|
580
|
-
}
|