gsd-pi 2.33.1-dev.29a8268 → 2.33.1-dev.9bafd68
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 +36 -3
- package/dist/resources/extensions/ask-user-questions.js +217 -0
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
- package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
- package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
- package/dist/resources/extensions/async-jobs/index.js +119 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
- package/dist/resources/extensions/aws-auth/index.js +138 -0
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
- package/dist/resources/extensions/bg-shell/index.js +41 -0
- package/dist/resources/extensions/bg-shell/interaction.js +160 -0
- package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
- package/dist/resources/extensions/bg-shell/overlay.js +378 -0
- package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
- package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
- package/dist/resources/extensions/bg-shell/types.js +96 -0
- package/dist/resources/extensions/bg-shell/utilities.js +50 -0
- package/dist/resources/extensions/browser-tools/capture.js +179 -0
- package/dist/resources/extensions/browser-tools/core.js +899 -0
- package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
- package/dist/resources/extensions/browser-tools/index.js +123 -0
- package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
- package/dist/resources/extensions/browser-tools/refs.js +254 -0
- package/dist/resources/extensions/browser-tools/settle.js +173 -0
- package/dist/resources/extensions/browser-tools/state.js +126 -0
- package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
- package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
- package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
- package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
- package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
- package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
- package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
- package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
- package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
- package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
- package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
- package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
- package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
- package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
- package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
- package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
- package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
- package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
- package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
- package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
- package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
- package/dist/resources/extensions/browser-tools/utils.js +490 -0
- package/dist/resources/extensions/context7/index.js +337 -0
- package/dist/resources/extensions/get-secrets-from-user.js +492 -0
- package/dist/resources/extensions/google-search/index.js +373 -0
- package/dist/resources/extensions/gsd/activity-log.js +146 -0
- package/dist/resources/extensions/gsd/atomic-write.js +38 -0
- package/dist/resources/extensions/gsd/auto/session.js +187 -0
- package/dist/resources/extensions/gsd/auto-budget.js +30 -0
- package/dist/resources/extensions/gsd/{auto-constants.ts → auto-constants.js} +0 -1
- package/dist/resources/extensions/gsd/auto-dashboard.js +509 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +180 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +382 -0
- package/dist/resources/extensions/gsd/auto-idempotency.js +106 -0
- package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
- package/dist/resources/extensions/gsd/auto-observability.js +54 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +495 -0
- package/dist/resources/extensions/gsd/auto-prompts.js +1121 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +550 -0
- package/dist/resources/extensions/gsd/auto-start.js +393 -0
- package/dist/resources/extensions/gsd/auto-stuck-detection.js +165 -0
- package/dist/resources/extensions/gsd/{auto-supervisor.ts → auto-supervisor.js} +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 +594 -0
- package/dist/resources/extensions/gsd/auto.js +1485 -0
- package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
- package/dist/resources/extensions/gsd/captures.js +348 -0
- package/dist/resources/extensions/gsd/claude-import.js +540 -0
- package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +223 -0
- package/dist/resources/extensions/gsd/commands-config.js +89 -0
- package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
- package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
- package/dist/resources/extensions/gsd/commands-logs.js +468 -0
- package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
- package/dist/resources/extensions/gsd/commands.js +1024 -0
- package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
- package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
- package/dist/resources/extensions/gsd/context-budget.js +187 -0
- package/dist/resources/extensions/gsd/context-store.js +165 -0
- package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
- package/dist/resources/extensions/gsd/db-writer.js +298 -0
- package/dist/resources/extensions/gsd/debug-logger.js +161 -0
- package/dist/resources/extensions/gsd/detection.js +373 -0
- package/dist/resources/extensions/gsd/diff-context.js +168 -0
- package/dist/resources/extensions/gsd/dispatch-guard.js +76 -0
- package/dist/resources/extensions/gsd/doctor-checks.js +563 -0
- package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
- package/dist/resources/extensions/gsd/doctor-format.js +71 -0
- package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
- package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
- package/dist/resources/extensions/gsd/doctor-types.js +12 -0
- package/dist/resources/extensions/gsd/doctor.js +672 -0
- package/dist/resources/extensions/gsd/error-utils.js +6 -0
- package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
- package/dist/resources/extensions/gsd/exit-command.js +11 -0
- package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
- package/dist/resources/extensions/gsd/export.js +268 -0
- package/dist/resources/extensions/gsd/file-watcher.js +76 -0
- package/dist/resources/extensions/gsd/files.js +937 -0
- package/dist/resources/extensions/gsd/forensics.js +511 -0
- package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
- package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
- package/dist/resources/extensions/gsd/git-service.js +460 -0
- package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
- package/dist/resources/extensions/gsd/gsd-db.js +590 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
- package/dist/resources/extensions/gsd/guided-flow.js +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-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/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/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 +3 -2
- 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,842 @@
|
|
|
1
|
+
// Native Git Bridge
|
|
2
|
+
// Provides high-performance git operations backed by libgit2 via the Rust native module.
|
|
3
|
+
// Falls back to execSync/execFileSync git commands when the native module is unavailable.
|
|
4
|
+
//
|
|
5
|
+
// Both READ and WRITE operations are native — push operations remain as
|
|
6
|
+
// execSync calls because git2 credential handling is too complex.
|
|
7
|
+
import { execSync, execFileSync } from "node:child_process";
|
|
8
|
+
import { GSDError, GSD_GIT_ERROR } from "./errors.js";
|
|
9
|
+
import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
|
|
10
|
+
import { getErrorMessage } from "./error-utils.js";
|
|
11
|
+
// Issue #453: keep auto-mode bookkeeping on the stable git CLI path unless a
|
|
12
|
+
// caller explicitly opts into the native helper.
|
|
13
|
+
const NATIVE_GSD_GIT_ENABLED = process.env.GSD_ENABLE_NATIVE_GSD_GIT === "1";
|
|
14
|
+
// ─── Native Module Loading ──────────────────────────────────────────────────
|
|
15
|
+
let nativeModule = null;
|
|
16
|
+
let loadAttempted = false;
|
|
17
|
+
function loadNative() {
|
|
18
|
+
if (loadAttempted)
|
|
19
|
+
return nativeModule;
|
|
20
|
+
loadAttempted = true;
|
|
21
|
+
if (!NATIVE_GSD_GIT_ENABLED)
|
|
22
|
+
return nativeModule;
|
|
23
|
+
try {
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
25
|
+
const mod = require("@gsd/native");
|
|
26
|
+
if (mod.gitCurrentBranch && mod.gitHasChanges) {
|
|
27
|
+
nativeModule = mod;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Native module not available — all functions fall back to git CLI
|
|
32
|
+
}
|
|
33
|
+
return nativeModule;
|
|
34
|
+
}
|
|
35
|
+
// ─── Fallback Helpers ──────────────────────────────────────────────────────
|
|
36
|
+
/** Run a git command via execFileSync. Returns trimmed stdout. */
|
|
37
|
+
function gitExec(basePath, args, allowFailure = false) {
|
|
38
|
+
try {
|
|
39
|
+
return execFileSync("git", args, {
|
|
40
|
+
cwd: basePath,
|
|
41
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
42
|
+
encoding: "utf-8",
|
|
43
|
+
env: GIT_NO_PROMPT_ENV,
|
|
44
|
+
}).trim();
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
if (allowFailure)
|
|
48
|
+
return "";
|
|
49
|
+
throw new GSDError(GSD_GIT_ERROR, `git ${args.join(" ")} failed in ${basePath}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Run a git command via execFileSync. Returns trimmed stdout. */
|
|
53
|
+
function gitFileExec(basePath, args, allowFailure = false) {
|
|
54
|
+
try {
|
|
55
|
+
return execFileSync("git", args, {
|
|
56
|
+
cwd: basePath,
|
|
57
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
58
|
+
encoding: "utf-8",
|
|
59
|
+
env: GIT_NO_PROMPT_ENV,
|
|
60
|
+
}).trim();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
if (allowFailure)
|
|
64
|
+
return "";
|
|
65
|
+
throw new GSDError(GSD_GIT_ERROR, `git ${args.join(" ")} failed in ${basePath}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// ─── Existing Read Functions ──────────────────────────────────────────────
|
|
69
|
+
/**
|
|
70
|
+
* Get the current branch name.
|
|
71
|
+
* Native: reads HEAD symbolic ref via libgit2.
|
|
72
|
+
* Fallback: `git branch --show-current`.
|
|
73
|
+
*/
|
|
74
|
+
export function nativeGetCurrentBranch(basePath) {
|
|
75
|
+
const native = loadNative();
|
|
76
|
+
if (native) {
|
|
77
|
+
const branch = native.gitCurrentBranch(basePath);
|
|
78
|
+
return branch ?? "";
|
|
79
|
+
}
|
|
80
|
+
return gitExec(basePath, ["branch", "--show-current"]);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Detect the repo-level main branch (origin/HEAD → main → master → current).
|
|
84
|
+
* Native: checks refs via libgit2.
|
|
85
|
+
* Fallback: `git symbolic-ref` + `git show-ref` chain.
|
|
86
|
+
*/
|
|
87
|
+
export function nativeDetectMainBranch(basePath) {
|
|
88
|
+
const native = loadNative();
|
|
89
|
+
if (native) {
|
|
90
|
+
return native.gitMainBranch(basePath);
|
|
91
|
+
}
|
|
92
|
+
const symbolic = gitExec(basePath, ["symbolic-ref", "refs/remotes/origin/HEAD"], true);
|
|
93
|
+
if (symbolic) {
|
|
94
|
+
const match = symbolic.match(/refs\/remotes\/origin\/(.+)$/);
|
|
95
|
+
if (match)
|
|
96
|
+
return match[1];
|
|
97
|
+
}
|
|
98
|
+
const mainExists = gitExec(basePath, ["show-ref", "--verify", "refs/heads/main"], true);
|
|
99
|
+
if (mainExists)
|
|
100
|
+
return "main";
|
|
101
|
+
const masterExists = gitExec(basePath, ["show-ref", "--verify", "refs/heads/master"], true);
|
|
102
|
+
if (masterExists)
|
|
103
|
+
return "master";
|
|
104
|
+
return gitExec(basePath, ["branch", "--show-current"]);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a local branch exists.
|
|
108
|
+
* Native: checks refs/heads/<name> via libgit2.
|
|
109
|
+
* Fallback: `git show-ref --verify`.
|
|
110
|
+
*/
|
|
111
|
+
export function nativeBranchExists(basePath, branch) {
|
|
112
|
+
const native = loadNative();
|
|
113
|
+
if (native) {
|
|
114
|
+
return native.gitBranchExists(basePath, branch);
|
|
115
|
+
}
|
|
116
|
+
const result = gitExec(basePath, ["show-ref", "--verify", `refs/heads/${branch}`], true);
|
|
117
|
+
return result !== "";
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if the index has unmerged entries (merge conflicts).
|
|
121
|
+
* Native: reads index conflict state via libgit2.
|
|
122
|
+
* Fallback: `git diff --name-only --diff-filter=U`.
|
|
123
|
+
*/
|
|
124
|
+
export function nativeHasMergeConflicts(basePath) {
|
|
125
|
+
const native = loadNative();
|
|
126
|
+
if (native) {
|
|
127
|
+
return native.gitHasMergeConflicts(basePath);
|
|
128
|
+
}
|
|
129
|
+
const result = gitExec(basePath, ["diff", "--name-only", "--diff-filter=U"], true);
|
|
130
|
+
return result !== "";
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get working tree status (porcelain format).
|
|
134
|
+
* Native: reads status via libgit2.
|
|
135
|
+
* Fallback: `git status --porcelain`.
|
|
136
|
+
*/
|
|
137
|
+
export function nativeWorkingTreeStatus(basePath) {
|
|
138
|
+
const native = loadNative();
|
|
139
|
+
if (native) {
|
|
140
|
+
return native.gitWorkingTreeStatus(basePath);
|
|
141
|
+
}
|
|
142
|
+
return gitExec(basePath, ["status", "--porcelain"], true);
|
|
143
|
+
}
|
|
144
|
+
// ─── nativeHasChanges fallback cache (10s TTL) ─────────────────────────
|
|
145
|
+
let _hasChangesCachedResult = false;
|
|
146
|
+
let _hasChangesCachedAt = 0;
|
|
147
|
+
let _hasChangesCachedPath = "";
|
|
148
|
+
const HAS_CHANGES_CACHE_TTL_MS = 10_000; // 10 seconds
|
|
149
|
+
/**
|
|
150
|
+
* Quick check: any staged or unstaged changes?
|
|
151
|
+
* Native: libgit2 status check (single syscall).
|
|
152
|
+
* Fallback: `git status --short` (cached for 10s per basePath).
|
|
153
|
+
*/
|
|
154
|
+
export function nativeHasChanges(basePath) {
|
|
155
|
+
const native = loadNative();
|
|
156
|
+
if (native) {
|
|
157
|
+
return native.gitHasChanges(basePath);
|
|
158
|
+
}
|
|
159
|
+
const now = Date.now();
|
|
160
|
+
if (basePath === _hasChangesCachedPath &&
|
|
161
|
+
now - _hasChangesCachedAt < HAS_CHANGES_CACHE_TTL_MS) {
|
|
162
|
+
return _hasChangesCachedResult;
|
|
163
|
+
}
|
|
164
|
+
const result = gitExec(basePath, ["status", "--short"], true);
|
|
165
|
+
const hasChanges = result !== "";
|
|
166
|
+
_hasChangesCachedResult = hasChanges;
|
|
167
|
+
_hasChangesCachedAt = now;
|
|
168
|
+
_hasChangesCachedPath = basePath;
|
|
169
|
+
return hasChanges;
|
|
170
|
+
}
|
|
171
|
+
/** Reset the nativeHasChanges fallback cache (exported for testing). */
|
|
172
|
+
export function _resetHasChangesCache() {
|
|
173
|
+
_hasChangesCachedResult = false;
|
|
174
|
+
_hasChangesCachedAt = 0;
|
|
175
|
+
_hasChangesCachedPath = "";
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Count commits between two refs (from..to).
|
|
179
|
+
* Native: libgit2 revwalk.
|
|
180
|
+
* Fallback: `git rev-list --count from..to`.
|
|
181
|
+
*/
|
|
182
|
+
export function nativeCommitCountBetween(basePath, fromRef, toRef) {
|
|
183
|
+
const native = loadNative();
|
|
184
|
+
if (native) {
|
|
185
|
+
return native.gitCommitCountBetween(basePath, fromRef, toRef);
|
|
186
|
+
}
|
|
187
|
+
const result = gitExec(basePath, ["rev-list", "--count", `${fromRef}..${toRef}`], true);
|
|
188
|
+
return parseInt(result, 10) || 0;
|
|
189
|
+
}
|
|
190
|
+
// ─── New Read Functions ──────────────────────────────────────────────────
|
|
191
|
+
/**
|
|
192
|
+
* Check if a path is inside a git repository.
|
|
193
|
+
* Native: Repository::open() check.
|
|
194
|
+
* Fallback: `git rev-parse --git-dir`.
|
|
195
|
+
*/
|
|
196
|
+
export function nativeIsRepo(basePath) {
|
|
197
|
+
const native = loadNative();
|
|
198
|
+
if (native) {
|
|
199
|
+
return native.gitIsRepo(basePath);
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
execSync("git rev-parse --git-dir", { cwd: basePath, stdio: "pipe" });
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Check if there are staged changes (index differs from HEAD).
|
|
211
|
+
* Native: libgit2 tree-to-index diff.
|
|
212
|
+
* Fallback: `git diff --cached --stat`.
|
|
213
|
+
*/
|
|
214
|
+
export function nativeHasStagedChanges(basePath) {
|
|
215
|
+
const native = loadNative();
|
|
216
|
+
if (native) {
|
|
217
|
+
return native.gitHasStagedChanges(basePath);
|
|
218
|
+
}
|
|
219
|
+
const result = gitExec(basePath, ["diff", "--cached", "--stat"], true);
|
|
220
|
+
return result !== "";
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get diff statistics.
|
|
224
|
+
* Use fromRef="HEAD", toRef="WORKDIR" for working tree diff.
|
|
225
|
+
* Use fromRef="HEAD", toRef="INDEX" for staged diff.
|
|
226
|
+
* Native: libgit2 diff stats.
|
|
227
|
+
* Fallback: `git diff --stat`.
|
|
228
|
+
*/
|
|
229
|
+
export function nativeDiffStat(basePath, fromRef, toRef) {
|
|
230
|
+
const native = loadNative();
|
|
231
|
+
if (native) {
|
|
232
|
+
return native.gitDiffStat(basePath, fromRef, toRef);
|
|
233
|
+
}
|
|
234
|
+
// Fallback
|
|
235
|
+
let args;
|
|
236
|
+
if (fromRef === "HEAD" && toRef === "WORKDIR") {
|
|
237
|
+
args = ["diff", "--stat", "HEAD"];
|
|
238
|
+
}
|
|
239
|
+
else if (fromRef === "HEAD" && toRef === "INDEX") {
|
|
240
|
+
args = ["diff", "--stat", "--cached", "HEAD"];
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
args = ["diff", "--stat", fromRef, toRef];
|
|
244
|
+
}
|
|
245
|
+
const result = gitExec(basePath, args, true);
|
|
246
|
+
// Parse numeric stats from the summary line (e.g. "3 files changed, 10 insertions(+), 2 deletions(-)")
|
|
247
|
+
let filesChanged = 0, insertions = 0, deletions = 0;
|
|
248
|
+
const statsMatch = result.match(/(\d+) files? changed(?:, (\d+) insertions?\(\+\))?(?:, (\d+) deletions?\(-\))?/);
|
|
249
|
+
if (statsMatch) {
|
|
250
|
+
filesChanged = parseInt(statsMatch[1] ?? "0", 10);
|
|
251
|
+
insertions = parseInt(statsMatch[2] ?? "0", 10);
|
|
252
|
+
deletions = parseInt(statsMatch[3] ?? "0", 10);
|
|
253
|
+
}
|
|
254
|
+
return { filesChanged, insertions, deletions, summary: result };
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get name-status diff between two refs with optional pathspec filter.
|
|
258
|
+
* useMergeBase: if true, uses three-dot semantics (main...branch).
|
|
259
|
+
* Native: libgit2 tree-to-tree diff.
|
|
260
|
+
* Fallback: `git diff --name-status`.
|
|
261
|
+
*/
|
|
262
|
+
export function nativeDiffNameStatus(basePath, fromRef, toRef, pathspec, useMergeBase) {
|
|
263
|
+
const native = loadNative();
|
|
264
|
+
if (native) {
|
|
265
|
+
return native.gitDiffNameStatus(basePath, fromRef, toRef, pathspec, useMergeBase);
|
|
266
|
+
}
|
|
267
|
+
// Fallback
|
|
268
|
+
const separator = useMergeBase ? "..." : " ";
|
|
269
|
+
const args = ["diff", "--name-status", `${fromRef}${separator}${toRef}`];
|
|
270
|
+
if (pathspec)
|
|
271
|
+
args.push("--", pathspec);
|
|
272
|
+
const result = gitExec(basePath, args, true);
|
|
273
|
+
if (!result)
|
|
274
|
+
return [];
|
|
275
|
+
return result.split("\n").filter(Boolean).map(line => {
|
|
276
|
+
const [status, ...pathParts] = line.split("\t");
|
|
277
|
+
return { status: status ?? "", path: pathParts.join("\t") };
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get numstat diff between two refs.
|
|
282
|
+
* Native: libgit2 patch line stats.
|
|
283
|
+
* Fallback: `git diff --numstat`.
|
|
284
|
+
*/
|
|
285
|
+
export function nativeDiffNumstat(basePath, fromRef, toRef) {
|
|
286
|
+
const native = loadNative();
|
|
287
|
+
if (native) {
|
|
288
|
+
return native.gitDiffNumstat(basePath, fromRef, toRef);
|
|
289
|
+
}
|
|
290
|
+
const result = gitExec(basePath, ["diff", "--numstat", fromRef, toRef], true);
|
|
291
|
+
if (!result)
|
|
292
|
+
return [];
|
|
293
|
+
return result.split("\n").filter(Boolean).map(line => {
|
|
294
|
+
const [a, r, ...pathParts] = line.split("\t");
|
|
295
|
+
return {
|
|
296
|
+
added: a === "-" ? 0 : parseInt(a ?? "0", 10),
|
|
297
|
+
removed: r === "-" ? 0 : parseInt(r ?? "0", 10),
|
|
298
|
+
path: pathParts.join("\t"),
|
|
299
|
+
};
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Get unified diff content between two refs.
|
|
304
|
+
* useMergeBase: if true, uses three-dot semantics.
|
|
305
|
+
* Native: libgit2 diff print.
|
|
306
|
+
* Fallback: `git diff`.
|
|
307
|
+
*/
|
|
308
|
+
export function nativeDiffContent(basePath, fromRef, toRef, pathspec, exclude, useMergeBase) {
|
|
309
|
+
const native = loadNative();
|
|
310
|
+
if (native) {
|
|
311
|
+
return native.gitDiffContent(basePath, fromRef, toRef, pathspec, exclude, useMergeBase);
|
|
312
|
+
}
|
|
313
|
+
const separator = useMergeBase ? "..." : " ";
|
|
314
|
+
const args = ["diff", `${fromRef}${separator}${toRef}`];
|
|
315
|
+
if (pathspec) {
|
|
316
|
+
args.push("--", pathspec);
|
|
317
|
+
}
|
|
318
|
+
else if (exclude) {
|
|
319
|
+
args.push("--", ".", `:(exclude)${exclude}`);
|
|
320
|
+
}
|
|
321
|
+
return gitExec(basePath, args, true);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Get commit log between two refs (from..to).
|
|
325
|
+
* Native: libgit2 revwalk.
|
|
326
|
+
* Fallback: `git log --oneline from..to`.
|
|
327
|
+
*/
|
|
328
|
+
export function nativeLogOneline(basePath, fromRef, toRef) {
|
|
329
|
+
const native = loadNative();
|
|
330
|
+
if (native) {
|
|
331
|
+
return native.gitLogOneline(basePath, fromRef, toRef);
|
|
332
|
+
}
|
|
333
|
+
const result = gitExec(basePath, ["log", "--oneline", `${fromRef}..${toRef}`], true);
|
|
334
|
+
if (!result)
|
|
335
|
+
return [];
|
|
336
|
+
return result.split("\n").filter(Boolean).map(line => {
|
|
337
|
+
const sha = line.substring(0, 7);
|
|
338
|
+
const message = line.substring(8);
|
|
339
|
+
return { sha, message };
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* List git worktrees.
|
|
344
|
+
* Native: libgit2 worktree API.
|
|
345
|
+
* Fallback: `git worktree list --porcelain`.
|
|
346
|
+
*/
|
|
347
|
+
export function nativeWorktreeList(basePath) {
|
|
348
|
+
const native = loadNative();
|
|
349
|
+
if (native) {
|
|
350
|
+
return native.gitWorktreeList(basePath);
|
|
351
|
+
}
|
|
352
|
+
const result = gitExec(basePath, ["worktree", "list", "--porcelain"], true);
|
|
353
|
+
if (!result)
|
|
354
|
+
return [];
|
|
355
|
+
const entries = [];
|
|
356
|
+
const blocks = result.replaceAll("\r\n", "\n").split("\n\n").filter(Boolean);
|
|
357
|
+
for (const block of blocks) {
|
|
358
|
+
const lines = block.split("\n");
|
|
359
|
+
const wtLine = lines.find(l => l.startsWith("worktree "));
|
|
360
|
+
const branchLine = lines.find(l => l.startsWith("branch "));
|
|
361
|
+
const isBare = lines.some(l => l === "bare");
|
|
362
|
+
if (wtLine) {
|
|
363
|
+
entries.push({
|
|
364
|
+
path: wtLine.replace("worktree ", ""),
|
|
365
|
+
branch: branchLine ? branchLine.replace("branch refs/heads/", "") : "",
|
|
366
|
+
isBare,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return entries;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* List branches matching an optional pattern.
|
|
374
|
+
* Native: libgit2 branch iterator.
|
|
375
|
+
* Fallback: `git branch --list <pattern>`.
|
|
376
|
+
*/
|
|
377
|
+
export function nativeBranchList(basePath, pattern) {
|
|
378
|
+
const native = loadNative();
|
|
379
|
+
if (native) {
|
|
380
|
+
return native.gitBranchList(basePath, pattern);
|
|
381
|
+
}
|
|
382
|
+
const args = ["branch", "--list"];
|
|
383
|
+
if (pattern)
|
|
384
|
+
args.push(pattern);
|
|
385
|
+
const result = gitFileExec(basePath, args, true);
|
|
386
|
+
if (!result)
|
|
387
|
+
return [];
|
|
388
|
+
return result.split("\n").map(b => b.trim().replace(/^\* /, "")).filter(Boolean);
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* List branches merged into target.
|
|
392
|
+
* Native: libgit2 merge-base check.
|
|
393
|
+
* Fallback: `git branch --merged <target> --list <pattern>`.
|
|
394
|
+
*/
|
|
395
|
+
export function nativeBranchListMerged(basePath, target, pattern) {
|
|
396
|
+
const native = loadNative();
|
|
397
|
+
if (native) {
|
|
398
|
+
return native.gitBranchListMerged(basePath, target, pattern);
|
|
399
|
+
}
|
|
400
|
+
const args = ["branch", "--merged", target];
|
|
401
|
+
if (pattern)
|
|
402
|
+
args.push("--list", pattern);
|
|
403
|
+
const result = gitFileExec(basePath, args, true);
|
|
404
|
+
if (!result)
|
|
405
|
+
return [];
|
|
406
|
+
return result.split("\n").map(b => b.trim()).filter(Boolean);
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* List tracked files matching a pathspec.
|
|
410
|
+
* Native: libgit2 index iteration.
|
|
411
|
+
* Fallback: `git ls-files <pathspec>`.
|
|
412
|
+
*/
|
|
413
|
+
export function nativeLsFiles(basePath, pathspec) {
|
|
414
|
+
const native = loadNative();
|
|
415
|
+
if (native) {
|
|
416
|
+
return native.gitLsFiles(basePath, pathspec);
|
|
417
|
+
}
|
|
418
|
+
const result = gitFileExec(basePath, ["ls-files", pathspec], true);
|
|
419
|
+
if (!result)
|
|
420
|
+
return [];
|
|
421
|
+
return result.split("\n").filter(Boolean);
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* List references matching a prefix.
|
|
425
|
+
* Native: libgit2 references_glob.
|
|
426
|
+
* Fallback: `git for-each-ref <prefix> --format=%(refname)`.
|
|
427
|
+
*/
|
|
428
|
+
export function nativeForEachRef(basePath, prefix) {
|
|
429
|
+
const native = loadNative();
|
|
430
|
+
if (native) {
|
|
431
|
+
return native.gitForEachRef(basePath, prefix);
|
|
432
|
+
}
|
|
433
|
+
const result = gitFileExec(basePath, ["for-each-ref", prefix, "--format=%(refname)"], true);
|
|
434
|
+
if (!result)
|
|
435
|
+
return [];
|
|
436
|
+
return result.split("\n").filter(Boolean);
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Get list of files with unmerged (conflict) entries.
|
|
440
|
+
* Native: libgit2 index conflicts.
|
|
441
|
+
* Fallback: `git diff --name-only --diff-filter=U`.
|
|
442
|
+
*/
|
|
443
|
+
export function nativeConflictFiles(basePath) {
|
|
444
|
+
const native = loadNative();
|
|
445
|
+
if (native) {
|
|
446
|
+
return native.gitConflictFiles(basePath);
|
|
447
|
+
}
|
|
448
|
+
const result = gitExec(basePath, ["diff", "--name-only", "--diff-filter=U"], true);
|
|
449
|
+
if (!result)
|
|
450
|
+
return [];
|
|
451
|
+
return result.split("\n").filter(Boolean);
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Get batch info: branch + status + change counts in ONE call.
|
|
455
|
+
* Native: single libgit2 call replaces 3-4 sequential execSync calls.
|
|
456
|
+
* Fallback: multiple git commands.
|
|
457
|
+
*/
|
|
458
|
+
export function nativeBatchInfo(basePath) {
|
|
459
|
+
const native = loadNative();
|
|
460
|
+
if (native) {
|
|
461
|
+
return native.gitBatchInfo(basePath);
|
|
462
|
+
}
|
|
463
|
+
const branch = gitExec(basePath, ["branch", "--show-current"], true);
|
|
464
|
+
const status = gitExec(basePath, ["status", "--porcelain"], true);
|
|
465
|
+
const hasChanges = status !== "";
|
|
466
|
+
// Parse porcelain status to count staged vs unstaged changes
|
|
467
|
+
let stagedCount = 0;
|
|
468
|
+
let unstagedCount = 0;
|
|
469
|
+
if (status) {
|
|
470
|
+
for (const line of status.split("\n")) {
|
|
471
|
+
if (!line || line.length < 2)
|
|
472
|
+
continue;
|
|
473
|
+
const x = line[0]; // index (staged) status
|
|
474
|
+
const y = line[1]; // worktree (unstaged) status
|
|
475
|
+
if (x !== " " && x !== "?")
|
|
476
|
+
stagedCount++;
|
|
477
|
+
if (y !== " " && y !== "?")
|
|
478
|
+
unstagedCount++;
|
|
479
|
+
if (x === "?" && y === "?")
|
|
480
|
+
unstagedCount++; // untracked files
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return {
|
|
484
|
+
branch,
|
|
485
|
+
hasChanges,
|
|
486
|
+
status,
|
|
487
|
+
stagedCount,
|
|
488
|
+
unstagedCount,
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
// ─── Write Functions ──────────────────────────────────────────────────────
|
|
492
|
+
/**
|
|
493
|
+
* Initialize a new git repository.
|
|
494
|
+
* Native: libgit2 Repository::init.
|
|
495
|
+
* Fallback: `git init -b <branch>`.
|
|
496
|
+
*/
|
|
497
|
+
export function nativeInit(basePath, initialBranch) {
|
|
498
|
+
const native = loadNative();
|
|
499
|
+
if (native) {
|
|
500
|
+
native.gitInit(basePath, initialBranch);
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
const args = ["init"];
|
|
504
|
+
if (initialBranch)
|
|
505
|
+
args.push("-b", initialBranch);
|
|
506
|
+
gitFileExec(basePath, args);
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Stage all files (git add -A).
|
|
510
|
+
* Native: libgit2 index add_all + update_all.
|
|
511
|
+
* Fallback: `git add -A`.
|
|
512
|
+
*/
|
|
513
|
+
export function nativeAddAll(basePath) {
|
|
514
|
+
const native = loadNative();
|
|
515
|
+
if (native) {
|
|
516
|
+
native.gitAddAll(basePath);
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
gitFileExec(basePath, ["add", "-A"]);
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Stage specific files.
|
|
523
|
+
* Native: libgit2 index add.
|
|
524
|
+
* Fallback: `git add -- <paths>`.
|
|
525
|
+
*/
|
|
526
|
+
export function nativeAddPaths(basePath, paths) {
|
|
527
|
+
const native = loadNative();
|
|
528
|
+
if (native) {
|
|
529
|
+
native.gitAddPaths(basePath, paths);
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
gitFileExec(basePath, ["add", "--", ...paths]);
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Unstage files (reset index entries to HEAD).
|
|
536
|
+
* Native: libgit2 reset_default.
|
|
537
|
+
* Fallback: `git reset HEAD -- <paths>`.
|
|
538
|
+
*/
|
|
539
|
+
export function nativeResetPaths(basePath, paths) {
|
|
540
|
+
const native = loadNative();
|
|
541
|
+
if (native) {
|
|
542
|
+
native.gitResetPaths(basePath, paths);
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
for (const p of paths) {
|
|
546
|
+
gitExec(basePath, ["reset", "HEAD", "--", p], true);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Create a commit from the current index.
|
|
551
|
+
* Returns the commit SHA on success, or null if nothing to commit.
|
|
552
|
+
* Native: libgit2 commit create.
|
|
553
|
+
* Fallback: `git commit --no-verify -F -`.
|
|
554
|
+
*/
|
|
555
|
+
export function nativeCommit(basePath, message, options) {
|
|
556
|
+
const native = loadNative();
|
|
557
|
+
if (native) {
|
|
558
|
+
try {
|
|
559
|
+
return native.gitCommit(basePath, message, options?.allowEmpty);
|
|
560
|
+
}
|
|
561
|
+
catch (e) {
|
|
562
|
+
const msg = getErrorMessage(e);
|
|
563
|
+
if (msg.includes("nothing to commit"))
|
|
564
|
+
return null;
|
|
565
|
+
throw e;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
// Fallback: use git commit with stdin pipe for safe multi-line messages
|
|
569
|
+
try {
|
|
570
|
+
const result = execSync(`git commit --no-verify -F -${options?.allowEmpty ? " --allow-empty" : ""}`, {
|
|
571
|
+
cwd: basePath,
|
|
572
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
573
|
+
encoding: "utf-8",
|
|
574
|
+
env: GIT_NO_PROMPT_ENV,
|
|
575
|
+
input: message,
|
|
576
|
+
}).trim();
|
|
577
|
+
return result;
|
|
578
|
+
}
|
|
579
|
+
catch (err) {
|
|
580
|
+
const errObj = err;
|
|
581
|
+
const combined = [errObj.stdout, errObj.stderr, errObj.message].filter(Boolean).join(" ");
|
|
582
|
+
if (combined.includes("nothing to commit") || combined.includes("nothing added to commit") || combined.includes("no changes added")) {
|
|
583
|
+
return null;
|
|
584
|
+
}
|
|
585
|
+
throw err;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* Checkout a branch (switch HEAD and update working tree).
|
|
590
|
+
* Native: libgit2 checkout + set_head.
|
|
591
|
+
* Fallback: `git checkout <branch>`.
|
|
592
|
+
*/
|
|
593
|
+
export function nativeCheckoutBranch(basePath, branch) {
|
|
594
|
+
const native = loadNative();
|
|
595
|
+
if (native) {
|
|
596
|
+
native.gitCheckoutBranch(basePath, branch);
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
execSync(`git checkout ${branch}`, {
|
|
600
|
+
cwd: basePath,
|
|
601
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
602
|
+
encoding: "utf-8",
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Resolve index conflicts by accepting "theirs" version.
|
|
607
|
+
* Native: libgit2 index conflict resolution.
|
|
608
|
+
* Fallback: `git checkout --theirs -- <file>`.
|
|
609
|
+
*/
|
|
610
|
+
export function nativeCheckoutTheirs(basePath, paths) {
|
|
611
|
+
const native = loadNative();
|
|
612
|
+
if (native) {
|
|
613
|
+
native.gitCheckoutTheirs(basePath, paths);
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
for (const path of paths) {
|
|
617
|
+
gitFileExec(basePath, ["checkout", "--theirs", "--", path]);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Squash-merge a branch (stages changes, does NOT commit).
|
|
622
|
+
* Native: libgit2 merge with squash semantics.
|
|
623
|
+
* Fallback: `git merge --squash <branch>`.
|
|
624
|
+
*/
|
|
625
|
+
export function nativeMergeSquash(basePath, branch) {
|
|
626
|
+
const native = loadNative();
|
|
627
|
+
if (native) {
|
|
628
|
+
return native.gitMergeSquash(basePath, branch);
|
|
629
|
+
}
|
|
630
|
+
try {
|
|
631
|
+
execSync(`git merge --squash ${branch}`, {
|
|
632
|
+
cwd: basePath,
|
|
633
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
634
|
+
encoding: "utf-8",
|
|
635
|
+
});
|
|
636
|
+
return { success: true, conflicts: [] };
|
|
637
|
+
}
|
|
638
|
+
catch {
|
|
639
|
+
// Check for conflicts
|
|
640
|
+
const conflictOutput = gitExec(basePath, ["diff", "--name-only", "--diff-filter=U"], true);
|
|
641
|
+
const conflicts = conflictOutput ? conflictOutput.split("\n").filter(Boolean) : [];
|
|
642
|
+
return { success: conflicts.length === 0, conflicts };
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* Abort an in-progress merge.
|
|
647
|
+
* Native: libgit2 reset + cleanup.
|
|
648
|
+
* Fallback: `git merge --abort`.
|
|
649
|
+
*/
|
|
650
|
+
export function nativeMergeAbort(basePath) {
|
|
651
|
+
const native = loadNative();
|
|
652
|
+
if (native) {
|
|
653
|
+
native.gitMergeAbort(basePath);
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
gitExec(basePath, ["merge", "--abort"], true);
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Abort an in-progress rebase.
|
|
660
|
+
* Native: libgit2 reset + cleanup.
|
|
661
|
+
* Fallback: `git rebase --abort`.
|
|
662
|
+
*/
|
|
663
|
+
export function nativeRebaseAbort(basePath) {
|
|
664
|
+
const native = loadNative();
|
|
665
|
+
if (native) {
|
|
666
|
+
native.gitRebaseAbort(basePath);
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
gitExec(basePath, ["rebase", "--abort"], true);
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Hard reset to HEAD.
|
|
673
|
+
* Native: libgit2 reset(Hard).
|
|
674
|
+
* Fallback: `git reset --hard HEAD`.
|
|
675
|
+
*/
|
|
676
|
+
export function nativeResetHard(basePath) {
|
|
677
|
+
const native = loadNative();
|
|
678
|
+
if (native) {
|
|
679
|
+
native.gitResetHard(basePath);
|
|
680
|
+
return;
|
|
681
|
+
}
|
|
682
|
+
execSync("git reset --hard HEAD", { cwd: basePath, stdio: "pipe" });
|
|
683
|
+
}
|
|
684
|
+
/**
|
|
685
|
+
* Delete a branch.
|
|
686
|
+
* Native: libgit2 branch delete.
|
|
687
|
+
* Fallback: `git branch -D/-d <branch>`.
|
|
688
|
+
*/
|
|
689
|
+
export function nativeBranchDelete(basePath, branch, force = true) {
|
|
690
|
+
const native = loadNative();
|
|
691
|
+
if (native) {
|
|
692
|
+
native.gitBranchDelete(basePath, branch, force);
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
gitFileExec(basePath, ["branch", force ? "-D" : "-d", branch], true);
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* Force-reset a branch to point at a target ref.
|
|
699
|
+
* Native: libgit2 branch create with force.
|
|
700
|
+
* Fallback: `git branch -f <branch> <target>`.
|
|
701
|
+
*/
|
|
702
|
+
export function nativeBranchForceReset(basePath, branch, target) {
|
|
703
|
+
const native = loadNative();
|
|
704
|
+
if (native) {
|
|
705
|
+
native.gitBranchForceReset(basePath, branch, target);
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
gitExec(basePath, ["branch", "-f", branch, target]);
|
|
709
|
+
}
|
|
710
|
+
/**
|
|
711
|
+
* Remove files from the index (cache) without touching the working tree.
|
|
712
|
+
* Returns list of removed files.
|
|
713
|
+
* Native: libgit2 index remove.
|
|
714
|
+
* Fallback: `git rm --cached -r --ignore-unmatch <path>`.
|
|
715
|
+
*/
|
|
716
|
+
export function nativeRmCached(basePath, paths, recursive = true) {
|
|
717
|
+
const native = loadNative();
|
|
718
|
+
if (native) {
|
|
719
|
+
return native.gitRmCached(basePath, paths, recursive);
|
|
720
|
+
}
|
|
721
|
+
const removed = [];
|
|
722
|
+
for (const path of paths) {
|
|
723
|
+
const result = gitExec(basePath, ["rm", "--cached", ...(recursive ? ["-r"] : []), "--ignore-unmatch", path], true);
|
|
724
|
+
if (result)
|
|
725
|
+
removed.push(result);
|
|
726
|
+
}
|
|
727
|
+
return removed;
|
|
728
|
+
}
|
|
729
|
+
/**
|
|
730
|
+
* Force-remove files from both index and working tree.
|
|
731
|
+
* Native: libgit2 index remove + fs delete.
|
|
732
|
+
* Fallback: `git rm --force -- <file>`.
|
|
733
|
+
*/
|
|
734
|
+
export function nativeRmForce(basePath, paths) {
|
|
735
|
+
const native = loadNative();
|
|
736
|
+
if (native) {
|
|
737
|
+
native.gitRmForce(basePath, paths);
|
|
738
|
+
return;
|
|
739
|
+
}
|
|
740
|
+
for (const path of paths) {
|
|
741
|
+
gitFileExec(basePath, ["rm", "--force", "--", path], true);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* Add a new git worktree.
|
|
746
|
+
* Native: libgit2 worktree API.
|
|
747
|
+
* Fallback: `git worktree add`.
|
|
748
|
+
*/
|
|
749
|
+
export function nativeWorktreeAdd(basePath, wtPath, branch, createBranch, startPoint) {
|
|
750
|
+
const native = loadNative();
|
|
751
|
+
if (native) {
|
|
752
|
+
native.gitWorktreeAdd(basePath, wtPath, branch, createBranch, startPoint);
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
if (createBranch) {
|
|
756
|
+
gitExec(basePath, ["worktree", "add", "-b", branch, wtPath, startPoint ?? "HEAD"]);
|
|
757
|
+
}
|
|
758
|
+
else {
|
|
759
|
+
gitExec(basePath, ["worktree", "add", wtPath, branch]);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
/**
|
|
763
|
+
* Remove a git worktree.
|
|
764
|
+
* Native: libgit2 worktree prune + fs cleanup.
|
|
765
|
+
* Fallback: `git worktree remove [--force] <path>`.
|
|
766
|
+
*/
|
|
767
|
+
export function nativeWorktreeRemove(basePath, wtPath, force = false) {
|
|
768
|
+
const native = loadNative();
|
|
769
|
+
if (native) {
|
|
770
|
+
native.gitWorktreeRemove(basePath, wtPath, force);
|
|
771
|
+
return;
|
|
772
|
+
}
|
|
773
|
+
const args = ["worktree", "remove"];
|
|
774
|
+
if (force)
|
|
775
|
+
args.push("--force");
|
|
776
|
+
args.push(wtPath);
|
|
777
|
+
gitExec(basePath, args, true);
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Prune stale worktree entries.
|
|
781
|
+
* Native: libgit2 worktree validation + prune.
|
|
782
|
+
* Fallback: `git worktree prune`.
|
|
783
|
+
*/
|
|
784
|
+
export function nativeWorktreePrune(basePath) {
|
|
785
|
+
const native = loadNative();
|
|
786
|
+
if (native) {
|
|
787
|
+
native.gitWorktreePrune(basePath);
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
gitExec(basePath, ["worktree", "prune"], true);
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* Revert a commit without auto-committing.
|
|
794
|
+
* Native: libgit2 revert.
|
|
795
|
+
* Fallback: `git revert --no-commit <sha>`.
|
|
796
|
+
*/
|
|
797
|
+
export function nativeRevertCommit(basePath, sha) {
|
|
798
|
+
const native = loadNative();
|
|
799
|
+
if (native) {
|
|
800
|
+
native.gitRevertCommit(basePath, sha);
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
803
|
+
gitFileExec(basePath, ["revert", "--no-commit", sha]);
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Abort an in-progress revert.
|
|
807
|
+
* Native: libgit2 reset + cleanup.
|
|
808
|
+
* Fallback: `git revert --abort`.
|
|
809
|
+
*/
|
|
810
|
+
export function nativeRevertAbort(basePath) {
|
|
811
|
+
const native = loadNative();
|
|
812
|
+
if (native) {
|
|
813
|
+
native.gitRevertAbort(basePath);
|
|
814
|
+
return;
|
|
815
|
+
}
|
|
816
|
+
gitFileExec(basePath, ["revert", "--abort"], true);
|
|
817
|
+
}
|
|
818
|
+
/**
|
|
819
|
+
* Create or delete a ref.
|
|
820
|
+
* When target is provided, creates/updates the ref. When undefined, deletes it.
|
|
821
|
+
* Native: libgit2 reference create/delete.
|
|
822
|
+
* Fallback: `git update-ref`.
|
|
823
|
+
*/
|
|
824
|
+
export function nativeUpdateRef(basePath, refname, target) {
|
|
825
|
+
const native = loadNative();
|
|
826
|
+
if (native) {
|
|
827
|
+
native.gitUpdateRef(basePath, refname, target);
|
|
828
|
+
return;
|
|
829
|
+
}
|
|
830
|
+
if (target !== undefined) {
|
|
831
|
+
gitExec(basePath, ["update-ref", refname, target]);
|
|
832
|
+
}
|
|
833
|
+
else {
|
|
834
|
+
gitExec(basePath, ["update-ref", "-d", refname], true);
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
/**
|
|
838
|
+
* Check if the native git module is available.
|
|
839
|
+
*/
|
|
840
|
+
export function isNativeGitAvailable() {
|
|
841
|
+
return loadNative() !== null;
|
|
842
|
+
}
|