gsd-pi 2.33.0 → 2.33.1-dev.235d83a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -18
- package/dist/cli.js +16 -0
- package/dist/resource-loader.d.ts +2 -0
- package/dist/resource-loader.js +36 -3
- package/dist/resources/extensions/ask-user-questions.js +217 -0
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
- package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
- package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
- package/dist/resources/extensions/async-jobs/index.js +119 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
- package/dist/resources/extensions/aws-auth/index.js +138 -0
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
- package/dist/resources/extensions/bg-shell/index.js +41 -0
- package/dist/resources/extensions/bg-shell/interaction.js +160 -0
- package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
- package/dist/resources/extensions/bg-shell/overlay.js +378 -0
- package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
- package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
- package/dist/resources/extensions/bg-shell/types.js +96 -0
- package/dist/resources/extensions/bg-shell/utilities.js +50 -0
- package/dist/resources/extensions/browser-tools/capture.js +179 -0
- package/dist/resources/extensions/browser-tools/core.js +899 -0
- package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
- package/dist/resources/extensions/browser-tools/index.js +123 -0
- package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
- package/dist/resources/extensions/browser-tools/refs.js +254 -0
- package/dist/resources/extensions/browser-tools/settle.js +173 -0
- package/dist/resources/extensions/browser-tools/state.js +126 -0
- package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
- package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
- package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
- package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
- package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
- package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
- package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
- package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
- package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
- package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
- package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
- package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
- package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
- package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
- package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
- package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
- package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
- package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
- package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
- package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
- package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
- package/dist/resources/extensions/browser-tools/utils.js +490 -0
- package/dist/resources/extensions/context7/index.js +337 -0
- package/dist/resources/extensions/get-secrets-from-user.js +492 -0
- package/dist/resources/extensions/google-search/index.js +373 -0
- package/dist/resources/extensions/gsd/activity-log.js +146 -0
- package/dist/resources/extensions/gsd/atomic-write.js +38 -0
- package/dist/resources/extensions/gsd/auto/session.js +187 -0
- package/dist/resources/extensions/gsd/auto-budget.js +30 -0
- package/dist/resources/extensions/gsd/{auto-constants.ts → auto-constants.js} +0 -1
- package/dist/resources/extensions/gsd/auto-dashboard.js +509 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +180 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +382 -0
- package/dist/resources/extensions/gsd/auto-idempotency.js +106 -0
- package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
- package/dist/resources/extensions/gsd/auto-observability.js +54 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +495 -0
- package/dist/resources/extensions/gsd/auto-prompts.js +1121 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +550 -0
- package/dist/resources/extensions/gsd/auto-start.js +393 -0
- package/dist/resources/extensions/gsd/auto-stuck-detection.js +165 -0
- package/dist/resources/extensions/gsd/{auto-supervisor.ts → auto-supervisor.js} +29 -32
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
- package/dist/resources/extensions/gsd/auto-timers.js +181 -0
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
- package/dist/resources/extensions/gsd/auto-verification.js +209 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +594 -0
- package/dist/resources/extensions/gsd/auto.js +1485 -0
- package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
- package/dist/resources/extensions/gsd/captures.js +348 -0
- package/dist/resources/extensions/gsd/claude-import.js +540 -0
- package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +223 -0
- package/dist/resources/extensions/gsd/commands-config.js +89 -0
- package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
- package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
- package/dist/resources/extensions/gsd/commands-logs.js +468 -0
- package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
- package/dist/resources/extensions/gsd/commands.js +1024 -0
- package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
- package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
- package/dist/resources/extensions/gsd/context-budget.js +187 -0
- package/dist/resources/extensions/gsd/context-store.js +165 -0
- package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
- package/dist/resources/extensions/gsd/db-writer.js +298 -0
- package/dist/resources/extensions/gsd/debug-logger.js +161 -0
- package/dist/resources/extensions/gsd/detection.js +373 -0
- package/dist/resources/extensions/gsd/diff-context.js +168 -0
- package/dist/resources/extensions/gsd/dispatch-guard.js +76 -0
- package/dist/resources/extensions/gsd/doctor-checks.js +563 -0
- package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
- package/dist/resources/extensions/gsd/doctor-format.js +71 -0
- package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
- package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
- package/dist/resources/extensions/gsd/doctor-types.js +12 -0
- package/dist/resources/extensions/gsd/doctor.js +672 -0
- package/dist/resources/extensions/gsd/error-utils.js +6 -0
- package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
- package/dist/resources/extensions/gsd/exit-command.js +11 -0
- package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
- package/dist/resources/extensions/gsd/export.js +268 -0
- package/dist/resources/extensions/gsd/file-watcher.js +76 -0
- package/dist/resources/extensions/gsd/files.js +937 -0
- package/dist/resources/extensions/gsd/forensics.js +511 -0
- package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
- package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
- package/dist/resources/extensions/gsd/git-service.js +460 -0
- package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
- package/dist/resources/extensions/gsd/gsd-db.js +590 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
- package/dist/resources/extensions/gsd/guided-flow.js +1149 -0
- package/dist/resources/extensions/gsd/health-widget.js +141 -0
- package/dist/resources/extensions/gsd/history.js +118 -0
- package/dist/resources/extensions/gsd/index.js +1250 -0
- package/dist/resources/extensions/gsd/init-wizard.js +479 -0
- package/dist/resources/extensions/gsd/json-persistence.js +62 -0
- package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
- package/dist/resources/extensions/gsd/key-manager.js +829 -0
- package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
- package/dist/resources/extensions/gsd/md-importer.js +440 -0
- package/dist/resources/extensions/gsd/mechanical-completion.js +351 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
- package/dist/resources/extensions/gsd/memory-store.js +351 -0
- package/dist/resources/extensions/gsd/metrics.js +377 -0
- package/dist/resources/extensions/gsd/migrate/command.js +157 -0
- package/dist/resources/extensions/gsd/migrate/index.js +7 -0
- package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
- package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
- package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
- package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
- package/dist/resources/extensions/gsd/migrate/types.js +4 -0
- package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
- package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
- package/dist/resources/extensions/gsd/migrate-external.js +130 -0
- package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
- package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
- package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
- package/dist/resources/extensions/gsd/model-router.js +187 -0
- package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
- package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
- package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
- package/dist/resources/extensions/gsd/notifications.js +58 -0
- package/dist/resources/extensions/gsd/observability-validator.js +398 -0
- package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
- package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
- package/dist/resources/extensions/gsd/paths.js +414 -0
- package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
- package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
- package/dist/resources/extensions/gsd/preferences-models.js +294 -0
- package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
- package/dist/resources/extensions/gsd/preferences-types.js +73 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
- package/dist/resources/extensions/gsd/preferences.js +325 -0
- package/dist/resources/extensions/gsd/progress-score.js +197 -0
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
- package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
- package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
- package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
- package/dist/resources/extensions/gsd/queue-order.js +178 -0
- package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
- package/dist/resources/extensions/gsd/quick.js +230 -0
- package/dist/resources/extensions/gsd/repo-identity.js +187 -0
- package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
- package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
- package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
- package/dist/resources/extensions/gsd/routing-history.js +210 -0
- package/dist/resources/extensions/gsd/safe-fs.js +52 -0
- package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
- package/dist/resources/extensions/gsd/session-forensics.js +427 -0
- package/dist/resources/extensions/gsd/session-lock.js +376 -0
- package/dist/resources/extensions/gsd/session-status-io.js +134 -0
- package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
- package/dist/resources/extensions/gsd/skill-health.js +324 -0
- package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
- package/dist/resources/extensions/gsd/state.js +653 -0
- package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
- package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
- package/dist/resources/extensions/gsd/token-counter.js +54 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
- package/dist/resources/extensions/gsd/triage-ui.js +125 -0
- package/dist/resources/extensions/gsd/types.js +4 -0
- package/dist/resources/extensions/gsd/undo.js +210 -0
- package/dist/resources/extensions/gsd/unit-id.js +7 -0
- package/dist/resources/extensions/gsd/unit-runtime.js +130 -0
- package/dist/resources/extensions/gsd/validate-directory.js +143 -0
- package/dist/resources/extensions/gsd/verification-evidence.js +123 -0
- package/dist/resources/extensions/gsd/verification-gate.js +543 -0
- package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
- package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
- package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
- package/dist/resources/extensions/gsd/workspace-index.js +139 -0
- package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
- package/dist/resources/extensions/gsd/worktree-command.js +676 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +359 -0
- package/dist/resources/extensions/gsd/worktree.js +236 -0
- package/dist/resources/extensions/mac-tools/index.js +768 -0
- package/dist/resources/extensions/mcp-client/index.js +363 -0
- package/dist/resources/extensions/package.json +3 -0
- package/dist/resources/extensions/remote-questions/config.js +70 -0
- package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
- package/dist/resources/extensions/remote-questions/format.js +234 -0
- package/dist/resources/extensions/remote-questions/http-client.js +43 -0
- package/dist/resources/extensions/remote-questions/manager.js +156 -0
- package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
- package/dist/resources/extensions/remote-questions/notify.js +89 -0
- package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
- package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
- package/dist/resources/extensions/remote-questions/status.js +25 -0
- package/dist/resources/extensions/remote-questions/store.js +70 -0
- package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
- package/dist/resources/extensions/remote-questions/types.js +5 -0
- package/dist/resources/extensions/search-the-web/cache.js +74 -0
- package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
- package/dist/resources/extensions/search-the-web/format.js +161 -0
- package/dist/resources/extensions/search-the-web/http.js +178 -0
- package/dist/resources/extensions/search-the-web/index.js +41 -0
- package/dist/resources/extensions/search-the-web/native-search.js +166 -0
- package/dist/resources/extensions/search-the-web/provider.js +143 -0
- package/dist/resources/extensions/search-the-web/tavily.js +82 -0
- package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
- package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
- package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
- package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
- package/dist/resources/extensions/shared/confirm-ui.js +96 -0
- package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
- package/dist/resources/extensions/shared/frontmatter.js +109 -0
- package/dist/resources/extensions/shared/interview-ui.js +569 -0
- package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
- package/dist/resources/extensions/shared/next-action-ui.js +168 -0
- package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
- package/dist/resources/extensions/shared/sanitize.js +17 -0
- package/dist/resources/extensions/shared/terminal.js +21 -0
- package/dist/resources/extensions/shared/ui.js +245 -0
- package/dist/resources/extensions/shared/wizard-ui.js +478 -0
- package/dist/resources/extensions/slash-commands/audit.js +72 -0
- package/dist/resources/extensions/slash-commands/clear.js +8 -0
- package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
- package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
- package/dist/resources/extensions/slash-commands/index.js +10 -0
- package/dist/resources/extensions/subagent/agents.js +103 -0
- package/dist/resources/extensions/subagent/index.js +905 -0
- package/dist/resources/extensions/subagent/isolation.js +384 -0
- package/dist/resources/extensions/subagent/worker-registry.js +73 -0
- package/dist/resources/extensions/ttsr/index.js +144 -0
- package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
- package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
- package/dist/resources/extensions/universal-config/discovery.js +94 -0
- package/dist/resources/extensions/universal-config/format.js +178 -0
- package/dist/resources/extensions/universal-config/index.js +99 -0
- package/dist/resources/extensions/universal-config/scanners.js +574 -0
- package/dist/resources/extensions/universal-config/tools.js +57 -0
- package/dist/resources/extensions/universal-config/types.js +8 -0
- package/dist/resources/extensions/voice/index.js +247 -0
- package/dist/startup-timings.d.ts +2 -0
- package/dist/startup-timings.js +22 -0
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
- package/packages/pi-coding-agent/src/index.ts +1 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/bg-shell/index.ts +41 -46
- package/src/resources/extensions/browser-tools/index.ts +156 -67
- package/src/resources/extensions/gsd/auto-supervisor.ts +10 -5
- package/src/resources/extensions/gsd/auto-verification.ts +20 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +136 -1
- package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
- package/src/resources/extensions/gsd/commands.ts +53 -33
- package/src/resources/extensions/gsd/git-service.ts +24 -11
- package/src/resources/extensions/gsd/index.ts +106 -34
- package/src/resources/extensions/gsd/quick.ts +52 -3
- package/src/resources/extensions/gsd/repo-identity.ts +56 -22
- package/src/resources/extensions/gsd/session-lock.ts +80 -16
- package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +691 -0
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +317 -0
- package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
- package/src/resources/extensions/gsd/tests/loop-regression.test.ts +40 -5
- package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +216 -0
- package/src/resources/extensions/gsd/tests/session-lock.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +206 -0
- package/src/resources/extensions/gsd/types.ts +4 -0
- package/src/resources/extensions/gsd/verification-evidence.ts +1 -1
- package/src/resources/extensions/gsd/verification-gate.ts +23 -2
- package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
- package/src/resources/extensions/gsd/worktree-command.ts +17 -11
- package/src/resources/extensions/package.json +3 -0
- package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
- package/src/resources/extensions/search-the-web/index.ts +35 -52
- package/src/resources/extensions/search-the-web/tavily.ts +1 -1
- package/dist/resources/extensions/ask-user-questions.ts +0 -290
- package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
- package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
- package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
- package/dist/resources/extensions/async-jobs/index.ts +0 -141
- package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
- package/dist/resources/extensions/aws-auth/index.ts +0 -144
- package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
- package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
- package/dist/resources/extensions/bg-shell/index.ts +0 -59
- package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
- package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
- package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
- package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
- package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
- package/dist/resources/extensions/bg-shell/types.ts +0 -303
- package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
- package/dist/resources/extensions/browser-tools/capture.ts +0 -199
- package/dist/resources/extensions/browser-tools/core.ts +0 -1196
- package/dist/resources/extensions/browser-tools/index.ts +0 -71
- package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
- package/dist/resources/extensions/browser-tools/refs.ts +0 -264
- package/dist/resources/extensions/browser-tools/settle.ts +0 -197
- package/dist/resources/extensions/browser-tools/state.ts +0 -408
- package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
- package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
- package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
- package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
- package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
- package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
- package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
- package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
- package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
- package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
- package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
- package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
- package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
- package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
- package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
- package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
- package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
- package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
- package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
- package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
- package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
- package/dist/resources/extensions/browser-tools/utils.ts +0 -660
- package/dist/resources/extensions/context7/index.ts +0 -428
- package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
- package/dist/resources/extensions/google-search/index.ts +0 -466
- package/dist/resources/extensions/gsd/activity-log.ts +0 -162
- package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
- package/dist/resources/extensions/gsd/auto/session.ts +0 -236
- package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
- package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
- package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
- package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
- package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
- package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
- package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
- package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
- package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
- package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
- package/dist/resources/extensions/gsd/auto-start.ts +0 -483
- package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
- package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
- package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
- package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
- package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
- package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
- package/dist/resources/extensions/gsd/auto-worktree.ts +0 -524
- package/dist/resources/extensions/gsd/auto.ts +0 -1834
- package/dist/resources/extensions/gsd/captures.ts +0 -427
- package/dist/resources/extensions/gsd/claude-import.ts +0 -656
- package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
- package/dist/resources/extensions/gsd/commands-config.ts +0 -102
- package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
- package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
- package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
- package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
- package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
- package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
- package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
- package/dist/resources/extensions/gsd/commands.ts +0 -1137
- package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
- package/dist/resources/extensions/gsd/context-budget.ts +0 -266
- package/dist/resources/extensions/gsd/context-store.ts +0 -195
- package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
- package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
- package/dist/resources/extensions/gsd/db-writer.ts +0 -360
- package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
- package/dist/resources/extensions/gsd/detection.ts +0 -470
- package/dist/resources/extensions/gsd/diff-context.ts +0 -214
- package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
- package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
- package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
- package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
- package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
- package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
- package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
- package/dist/resources/extensions/gsd/doctor.ts +0 -722
- package/dist/resources/extensions/gsd/error-utils.ts +0 -6
- package/dist/resources/extensions/gsd/exit-command.ts +0 -18
- package/dist/resources/extensions/gsd/export.ts +0 -317
- package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
- package/dist/resources/extensions/gsd/files.ts +0 -1058
- package/dist/resources/extensions/gsd/forensics.ts +0 -629
- package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
- package/dist/resources/extensions/gsd/git-service.ts +0 -580
- package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
- package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
- package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
- package/dist/resources/extensions/gsd/health-widget.ts +0 -167
- package/dist/resources/extensions/gsd/history.ts +0 -143
- package/dist/resources/extensions/gsd/index.ts +0 -1390
- package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
- package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
- package/dist/resources/extensions/gsd/key-manager.ts +0 -996
- package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
- package/dist/resources/extensions/gsd/md-importer.ts +0 -527
- package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
- package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
- package/dist/resources/extensions/gsd/memory-store.ts +0 -441
- package/dist/resources/extensions/gsd/metrics.ts +0 -532
- package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
- package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
- package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
- package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
- package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
- package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
- package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
- package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
- package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
- package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
- package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
- package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
- package/dist/resources/extensions/gsd/model-router.ts +0 -256
- package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
- package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
- package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
- package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
- package/dist/resources/extensions/gsd/notifications.ts +0 -87
- package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
- package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
- package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
- package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
- package/dist/resources/extensions/gsd/paths.ts +0 -449
- package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
- package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
- package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
- package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
- package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
- package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
- package/dist/resources/extensions/gsd/preferences.ts +0 -416
- package/dist/resources/extensions/gsd/progress-score.ts +0 -273
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
- package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
- package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
- package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
- package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
- package/dist/resources/extensions/gsd/queue-order.ts +0 -230
- package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
- package/dist/resources/extensions/gsd/quick.ts +0 -212
- package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
- package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
- package/dist/resources/extensions/gsd/routing-history.ts +0 -286
- package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
- package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
- package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
- package/dist/resources/extensions/gsd/session-lock.ts +0 -362
- package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
- package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
- package/dist/resources/extensions/gsd/skill-health.ts +0 -417
- package/dist/resources/extensions/gsd/state.ts +0 -727
- package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
- package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
- package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
- package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
- package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
- package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
- package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
- package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
- package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
- package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
- package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
- package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
- package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
- package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
- package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
- package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
- package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
- package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
- package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
- package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
- package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
- package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
- package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
- package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
- package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
- package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
- package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
- package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
- package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
- package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
- package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
- package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
- package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
- package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
- package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
- package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
- package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
- package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
- package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
- package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
- package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
- package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
- package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
- package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
- package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
- package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
- package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
- package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
- package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
- package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
- package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
- package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
- package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
- package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
- package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
- package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
- package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
- package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
- package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
- package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
- package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
- package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
- package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
- package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
- package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
- package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
- package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
- package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
- package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
- package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -839
- package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
- package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
- package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
- package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
- package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
- package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
- package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
- package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
- package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
- package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
- package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
- package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
- package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
- package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
- package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
- package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
- package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
- package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
- package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
- package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
- package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
- package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
- package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
- package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
- package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
- package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
- package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
- package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
- package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
- package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
- package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
- package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
- package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
- package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
- package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
- package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
- package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
- package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
- package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
- package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
- package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
- package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
- package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
- package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
- package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
- package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
- package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
- package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
- package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
- package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
- package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
- package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
- package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
- package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
- package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
- package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
- package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
- package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
- package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
- package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
- package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
- package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
- package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
- package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -315
- package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
- package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
- package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
- package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
- package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
- package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
- package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
- package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
- package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
- package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
- package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
- package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
- package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
- package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
- package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
- package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
- package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
- package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
- package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
- package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
- package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
- package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
- package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
- package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
- package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
- package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
- package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
- package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
- package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
- package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
- package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
- package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
- package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
- package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
- package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
- package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
- package/dist/resources/extensions/gsd/token-counter.ts +0 -65
- package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
- package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
- package/dist/resources/extensions/gsd/types.ts +0 -425
- package/dist/resources/extensions/gsd/undo.ts +0 -223
- package/dist/resources/extensions/gsd/unit-id.ts +0 -14
- package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
- package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
- package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
- package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
- package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
- package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
- package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
- package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
- package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
- package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
- package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
- package/dist/resources/extensions/gsd/worktree.ts +0 -257
- package/dist/resources/extensions/mac-tools/index.ts +0 -852
- package/dist/resources/extensions/mcp-client/index.ts +0 -459
- package/dist/resources/extensions/mcporter/extension-manifest.json +0 -12
- package/dist/resources/extensions/remote-questions/config.ts +0 -83
- package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
- package/dist/resources/extensions/remote-questions/format.ts +0 -315
- package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
- package/dist/resources/extensions/remote-questions/manager.ts +0 -184
- package/dist/resources/extensions/remote-questions/notify.ts +0 -90
- package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
- package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
- package/dist/resources/extensions/remote-questions/status.ts +0 -31
- package/dist/resources/extensions/remote-questions/store.ts +0 -81
- package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
- package/dist/resources/extensions/remote-questions/types.ts +0 -102
- package/dist/resources/extensions/search-the-web/cache.ts +0 -78
- package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
- package/dist/resources/extensions/search-the-web/format.ts +0 -258
- package/dist/resources/extensions/search-the-web/http.ts +0 -238
- package/dist/resources/extensions/search-the-web/index.ts +0 -65
- package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
- package/dist/resources/extensions/search-the-web/provider.ts +0 -148
- package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
- package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
- package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
- package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
- package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
- package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
- package/dist/resources/extensions/shared/frontmatter.ts +0 -117
- package/dist/resources/extensions/shared/interview-ui.ts +0 -613
- package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
- package/dist/resources/extensions/shared/sanitize.ts +0 -19
- package/dist/resources/extensions/shared/terminal.ts +0 -23
- package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
- package/dist/resources/extensions/shared/ui.ts +0 -400
- package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
- package/dist/resources/extensions/slash-commands/audit.ts +0 -88
- package/dist/resources/extensions/slash-commands/clear.ts +0 -10
- package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
- package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
- package/dist/resources/extensions/slash-commands/index.ts +0 -12
- package/dist/resources/extensions/subagent/agents.ts +0 -126
- package/dist/resources/extensions/subagent/index.ts +0 -1121
- package/dist/resources/extensions/subagent/isolation.ts +0 -501
- package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
- package/dist/resources/extensions/ttsr/index.ts +0 -168
- package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
- package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
- package/dist/resources/extensions/universal-config/discovery.ts +0 -104
- package/dist/resources/extensions/universal-config/format.ts +0 -191
- package/dist/resources/extensions/universal-config/index.ts +0 -120
- package/dist/resources/extensions/universal-config/scanners.ts +0 -642
- package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
- package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
- package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
- package/dist/resources/extensions/universal-config/tools.ts +0 -60
- package/dist/resources/extensions/universal-config/types.ts +0 -135
- package/dist/resources/extensions/voice/index.ts +0 -272
- package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
- package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
- package/src/resources/extensions/mcporter/extension-manifest.json +0 -12
package/README.md
CHANGED
|
@@ -24,24 +24,19 @@ One command. Walk away. Come back to a built project with clean git history.
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
## What's New in v2.
|
|
28
|
-
|
|
29
|
-
- **
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
34
|
-
- **
|
|
35
|
-
- **
|
|
36
|
-
-
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **Quick-task branch cleanup** — `/gsd quick` branches auto-merge back after completion
|
|
41
|
-
- **Windows EPERM fallback** — migration rename uses copy+delete when NTFS blocks rename
|
|
42
|
-
- **Worktree identity fix** — stable project hash across worktrees and main repo
|
|
43
|
-
- **Crash recovery guidance** — actionable next-step messages based on what was interrupted
|
|
44
|
-
- **UAT verdict gating** — non-PASS verdicts now block slice progression instead of being ignored
|
|
27
|
+
## What's New in v2.33
|
|
28
|
+
|
|
29
|
+
- **Dispatch loop hardening** — defensive guards, reentrancy protection, and 125 new regression tests covering the full `deriveState → resolveDispatch` chain without an LLM
|
|
30
|
+
- **Live regression test harness** — post-build pipeline validation that catches dispatch, parser, and lock lifecycle regressions before promotion
|
|
31
|
+
- **Unified error handling** — `getErrorMessage()` helper replaces 65 inline duplicates across the codebase
|
|
32
|
+
- **Centralized unit ID parsing** — `parseUnitId()` eliminates fragile regex patterns scattered across dispatch, recovery, and metrics code
|
|
33
|
+
- **Milestone merge consolidation** — `tryMergeMilestone()` replaces 4 duplicate merge paths in the auto-mode loop
|
|
34
|
+
- **Lock alignment fix** — retry lock path now matches primary lock settings, preventing `ECOMPROMISED` errors on resume
|
|
35
|
+
- **NixOS/nix-darwin support** — symlinks in `.gsd/` are skipped during `makeTreeWritable` to prevent `EPERM` failures
|
|
36
|
+
- **Windows EPERM fallback** — `.gsd/` migration uses copy+delete when NTFS blocks direct rename
|
|
37
|
+
- **Worktree identity fix** — stable project hash resolved from main repo root, not worktree path
|
|
38
|
+
- **Quick-task branch cleanup** — `/gsd quick` branches auto-merge back to the original branch after completion
|
|
39
|
+
- **Crash recovery guidance** — actionable next-step messages based on what was interrupted and what state survived
|
|
45
40
|
|
|
46
41
|
See the full [Changelog](./CHANGELOG.md) for details.
|
|
47
42
|
|
package/dist/cli.js
CHANGED
|
@@ -10,6 +10,7 @@ import { shouldRunOnboarding, runOnboarding } from './onboarding.js';
|
|
|
10
10
|
import chalk from 'chalk';
|
|
11
11
|
import { checkForUpdates } from './update-check.js';
|
|
12
12
|
import { printHelp, printSubcommandHelp } from './help-text.js';
|
|
13
|
+
import { markStartup, printStartupTimings } from './startup-timings.js';
|
|
13
14
|
function exitIfManagedResourcesAreNewer(currentAgentDir) {
|
|
14
15
|
const currentVersion = process.env.GSD_VERSION || '0.0.0';
|
|
15
16
|
const managedVersion = getNewerManagedResourceVersion(currentAgentDir, currentVersion);
|
|
@@ -172,14 +173,18 @@ if (cliFlags.messages[0] === 'headless') {
|
|
|
172
173
|
// because spawnSync(..., ["--version"]) returns EPERM despite a zero exit code.
|
|
173
174
|
// Provision local managed binaries first so Pi sees them without probing PATH.
|
|
174
175
|
ensureManagedTools(join(agentDir, 'bin'));
|
|
176
|
+
markStartup('ensureManagedTools');
|
|
175
177
|
const authStorage = AuthStorage.create(authFilePath);
|
|
178
|
+
markStartup('AuthStorage.create');
|
|
176
179
|
loadStoredEnvKeys(authStorage);
|
|
177
180
|
migratePiCredentials(authStorage);
|
|
178
181
|
// Resolve models.json path with fallback to ~/.pi/agent/models.json
|
|
179
182
|
const { resolveModelsJsonPath } = await import('./models-resolver.js');
|
|
180
183
|
const modelsJsonPath = resolveModelsJsonPath();
|
|
181
184
|
const modelRegistry = new ModelRegistry(authStorage, modelsJsonPath);
|
|
185
|
+
markStartup('ModelRegistry');
|
|
182
186
|
const settingsManager = SettingsManager.create(agentDir);
|
|
187
|
+
markStartup('SettingsManager.create');
|
|
183
188
|
// Run onboarding wizard on first launch (no LLM provider configured)
|
|
184
189
|
if (!isPrintMode && shouldRunOnboarding(authStorage, settingsManager.getDefaultProvider())) {
|
|
185
190
|
await runOnboarding(authStorage);
|
|
@@ -304,12 +309,14 @@ if (isPrintMode) {
|
|
|
304
309
|
}
|
|
305
310
|
exitIfManagedResourcesAreNewer(agentDir);
|
|
306
311
|
initResources(agentDir);
|
|
312
|
+
markStartup('initResources');
|
|
307
313
|
const resourceLoader = new DefaultResourceLoader({
|
|
308
314
|
agentDir,
|
|
309
315
|
additionalExtensionPaths: cliFlags.extensions.length > 0 ? cliFlags.extensions : undefined,
|
|
310
316
|
appendSystemPrompt,
|
|
311
317
|
});
|
|
312
318
|
await resourceLoader.reload();
|
|
319
|
+
markStartup('resourceLoader.reload');
|
|
313
320
|
const { session, extensionsResult } = await createAgentSession({
|
|
314
321
|
authStorage,
|
|
315
322
|
modelRegistry,
|
|
@@ -317,6 +324,7 @@ if (isPrintMode) {
|
|
|
317
324
|
sessionManager,
|
|
318
325
|
resourceLoader,
|
|
319
326
|
});
|
|
327
|
+
markStartup('createAgentSession');
|
|
320
328
|
if (extensionsResult.errors.length > 0) {
|
|
321
329
|
for (const err of extensionsResult.errors) {
|
|
322
330
|
process.stderr.write(`[gsd] Extension load error: ${err.error}\n`);
|
|
@@ -333,10 +341,12 @@ if (isPrintMode) {
|
|
|
333
341
|
}
|
|
334
342
|
const mode = cliFlags.mode || 'text';
|
|
335
343
|
if (mode === 'rpc') {
|
|
344
|
+
printStartupTimings();
|
|
336
345
|
await runRpcMode(session);
|
|
337
346
|
process.exit(0);
|
|
338
347
|
}
|
|
339
348
|
if (mode === 'mcp') {
|
|
349
|
+
printStartupTimings();
|
|
340
350
|
const { startMcpServer } = await import('./mcp-server.js');
|
|
341
351
|
await startMcpServer({
|
|
342
352
|
tools: session.agent.state.tools ?? [],
|
|
@@ -345,6 +355,7 @@ if (isPrintMode) {
|
|
|
345
355
|
// MCP server runs until the transport closes; keep alive
|
|
346
356
|
await new Promise(() => { });
|
|
347
357
|
}
|
|
358
|
+
printStartupTimings();
|
|
348
359
|
await runPrintMode(session, {
|
|
349
360
|
mode: mode,
|
|
350
361
|
messages: cliFlags.messages,
|
|
@@ -431,8 +442,10 @@ const sessionManager = cliFlags._selectedSessionPath
|
|
|
431
442
|
: SessionManager.create(cwd, projectSessionsDir);
|
|
432
443
|
exitIfManagedResourcesAreNewer(agentDir);
|
|
433
444
|
initResources(agentDir);
|
|
445
|
+
markStartup('initResources');
|
|
434
446
|
const resourceLoader = buildResourceLoader(agentDir);
|
|
435
447
|
await resourceLoader.reload();
|
|
448
|
+
markStartup('resourceLoader.reload');
|
|
436
449
|
const { session, extensionsResult } = await createAgentSession({
|
|
437
450
|
authStorage,
|
|
438
451
|
modelRegistry,
|
|
@@ -440,6 +453,7 @@ const { session, extensionsResult } = await createAgentSession({
|
|
|
440
453
|
sessionManager,
|
|
441
454
|
resourceLoader,
|
|
442
455
|
});
|
|
456
|
+
markStartup('createAgentSession');
|
|
443
457
|
if (extensionsResult.errors.length > 0) {
|
|
444
458
|
for (const err of extensionsResult.errors) {
|
|
445
459
|
process.stderr.write(`[gsd] Extension load error: ${err.error}\n`);
|
|
@@ -487,4 +501,6 @@ if (enabledModelPatterns && enabledModelPatterns.length > 0) {
|
|
|
487
501
|
}
|
|
488
502
|
}
|
|
489
503
|
const interactiveMode = new InteractiveMode(session);
|
|
504
|
+
markStartup('InteractiveMode');
|
|
505
|
+
printStartupTimings();
|
|
490
506
|
await interactiveMode.run();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DefaultResourceLoader } from '@gsd/pi-coding-agent';
|
|
2
2
|
export { discoverExtensionEntryPaths } from './extension-discovery.js';
|
|
3
|
+
export declare function getExtensionKey(entryPath: string, extensionsDir: string): string;
|
|
3
4
|
export declare function readManagedResourceVersion(agentDir: string): string | null;
|
|
4
5
|
export declare function getNewerManagedResourceVersion(agentDir: string, currentVersion: string): string | null;
|
|
5
6
|
/**
|
|
@@ -18,4 +19,5 @@ export declare function getNewerManagedResourceVersion(agentDir: string, current
|
|
|
18
19
|
* Inspectable: `ls ~/.gsd/agent/extensions/`
|
|
19
20
|
*/
|
|
20
21
|
export declare function initResources(agentDir: string): void;
|
|
22
|
+
export declare function hasStaleCompiledExtensionSiblings(extensionsDir: string): boolean;
|
|
21
23
|
export declare function buildResourceLoader(agentDir: string): DefaultResourceLoader;
|
package/dist/resource-loader.js
CHANGED
|
@@ -22,9 +22,9 @@ const resourcesDir = existsSync(distResources) ? distResources : srcResources;
|
|
|
22
22
|
const bundledExtensionsDir = join(resourcesDir, 'extensions');
|
|
23
23
|
const resourceVersionManifestName = 'managed-resources.json';
|
|
24
24
|
export { discoverExtensionEntryPaths } from './extension-discovery.js';
|
|
25
|
-
function getExtensionKey(entryPath, extensionsDir) {
|
|
25
|
+
export function getExtensionKey(entryPath, extensionsDir) {
|
|
26
26
|
const relPath = relative(extensionsDir, entryPath);
|
|
27
|
-
return relPath.split(/[\\/]/)[0];
|
|
27
|
+
return relPath.split(/[\\/]/)[0].replace(/\.(?:ts|js)$/, '');
|
|
28
28
|
}
|
|
29
29
|
function getManagedResourceManifestPath(agentDir) {
|
|
30
30
|
return join(agentDir, resourceVersionManifestName);
|
|
@@ -158,6 +158,7 @@ function makeTreeWritable(dirPath) {
|
|
|
158
158
|
function syncResourceDir(srcDir, destDir) {
|
|
159
159
|
makeTreeWritable(destDir);
|
|
160
160
|
if (existsSync(srcDir)) {
|
|
161
|
+
pruneStaleSiblingFiles(srcDir, destDir);
|
|
161
162
|
for (const entry of readdirSync(srcDir, { withFileTypes: true })) {
|
|
162
163
|
if (entry.isDirectory()) {
|
|
163
164
|
const target = join(destDir, entry.name);
|
|
@@ -176,6 +177,24 @@ function syncResourceDir(srcDir, destDir) {
|
|
|
176
177
|
makeTreeWritable(destDir);
|
|
177
178
|
}
|
|
178
179
|
}
|
|
180
|
+
function pruneStaleSiblingFiles(srcDir, destDir) {
|
|
181
|
+
if (!existsSync(destDir))
|
|
182
|
+
return;
|
|
183
|
+
const sourceFiles = new Set(readdirSync(srcDir, { withFileTypes: true })
|
|
184
|
+
.filter((entry) => entry.isFile())
|
|
185
|
+
.map((entry) => entry.name));
|
|
186
|
+
for (const entry of readdirSync(destDir, { withFileTypes: true })) {
|
|
187
|
+
if (!entry.isFile())
|
|
188
|
+
continue;
|
|
189
|
+
if (sourceFiles.has(entry.name))
|
|
190
|
+
continue;
|
|
191
|
+
const sourceJsName = entry.name.replace(/\.ts$/, '.js');
|
|
192
|
+
const sourceTsName = entry.name.replace(/\.js$/, '.ts');
|
|
193
|
+
if (sourceFiles.has(sourceJsName) || sourceFiles.has(sourceTsName)) {
|
|
194
|
+
rmSync(join(destDir, entry.name), { force: true });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
179
198
|
/**
|
|
180
199
|
* Recursive directory copy using copyFileSync — workaround for cpSync failures
|
|
181
200
|
* on Windows paths containing non-ASCII characters (#1178).
|
|
@@ -218,7 +237,8 @@ export function initResources(agentDir) {
|
|
|
218
237
|
if (manifest && manifest.gsdVersion === currentVersion) {
|
|
219
238
|
// Version matches — check content fingerprint for same-version staleness.
|
|
220
239
|
const currentHash = computeResourceFingerprint();
|
|
221
|
-
|
|
240
|
+
const hasStaleExtensionFiles = hasStaleCompiledExtensionSiblings(join(agentDir, 'extensions'));
|
|
241
|
+
if (manifest.contentHash && manifest.contentHash === currentHash && !hasStaleExtensionFiles) {
|
|
222
242
|
return;
|
|
223
243
|
}
|
|
224
244
|
}
|
|
@@ -231,6 +251,19 @@ export function initResources(agentDir) {
|
|
|
231
251
|
writeManagedResourceManifest(agentDir);
|
|
232
252
|
ensureRegistryEntries(join(agentDir, 'extensions'));
|
|
233
253
|
}
|
|
254
|
+
export function hasStaleCompiledExtensionSiblings(extensionsDir) {
|
|
255
|
+
if (!existsSync(extensionsDir))
|
|
256
|
+
return false;
|
|
257
|
+
for (const entry of readdirSync(extensionsDir, { withFileTypes: true })) {
|
|
258
|
+
if (!entry.isFile() || !entry.name.endsWith('.ts'))
|
|
259
|
+
continue;
|
|
260
|
+
const jsName = entry.name.replace(/\.ts$/, '.js');
|
|
261
|
+
if (existsSync(join(extensionsDir, jsName))) {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
234
267
|
/**
|
|
235
268
|
* Constructs a DefaultResourceLoader that loads extensions from both
|
|
236
269
|
* ~/.gsd/agent/extensions/ (GSD's default) and ~/.pi/agent/extensions/ (pi's default).
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request User Input — LLM tool for asking the user questions
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around the shared interview-ui. The LLM presents 1-3
|
|
5
|
+
* questions with 2-3 options each. Each question can be single-select (default)
|
|
6
|
+
* or multi-select (allowMultiple: true). A free-form "None of the above" option
|
|
7
|
+
* is added automatically to single-select questions.
|
|
8
|
+
*
|
|
9
|
+
* Based on: https://github.com/openai/codex (codex-rs/core/src/tools/handlers/ask_user_questions.rs)
|
|
10
|
+
*/
|
|
11
|
+
import { sanitizeError } from "./shared/sanitize.js";
|
|
12
|
+
import { Text } from "@gsd/pi-tui";
|
|
13
|
+
import { Type } from "@sinclair/typebox";
|
|
14
|
+
import { showInterviewRound, } from "./shared/mod.js";
|
|
15
|
+
// ─── Schema ───────────────────────────────────────────────────────────────────
|
|
16
|
+
const OptionSchema = Type.Object({
|
|
17
|
+
label: Type.String({ description: "User-facing label (1-5 words)" }),
|
|
18
|
+
description: Type.String({ description: "One short sentence explaining impact/tradeoff if selected" }),
|
|
19
|
+
});
|
|
20
|
+
const QuestionSchema = Type.Object({
|
|
21
|
+
id: Type.String({ description: "Stable identifier for mapping answers (snake_case)" }),
|
|
22
|
+
header: Type.String({ description: "Short header label shown in the UI (12 or fewer chars)" }),
|
|
23
|
+
question: Type.String({ description: "Single-sentence prompt shown to the user" }),
|
|
24
|
+
options: Type.Array(OptionSchema, {
|
|
25
|
+
description: 'Provide 2-3 mutually exclusive choices for single-select, or any number for multi-select. Put the recommended option first and suffix its label with "(Recommended)". Do not include an "Other" option for single-select; the client adds a free-form "None of the above" option automatically.',
|
|
26
|
+
}),
|
|
27
|
+
allowMultiple: Type.Optional(Type.Boolean({
|
|
28
|
+
description: "If true, the user can select multiple options using SPACE to toggle and ENTER to confirm. No 'None of the above' option is added. Default: false.",
|
|
29
|
+
})),
|
|
30
|
+
});
|
|
31
|
+
const AskUserQuestionsParams = Type.Object({
|
|
32
|
+
questions: Type.Array(QuestionSchema, {
|
|
33
|
+
description: "Questions to show the user. Prefer 1 and do not exceed 3.",
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
37
|
+
const OTHER_OPTION_LABEL = "None of the above";
|
|
38
|
+
function errorResult(message, questions = []) {
|
|
39
|
+
return {
|
|
40
|
+
content: [{ type: "text", text: sanitizeError(message) }],
|
|
41
|
+
details: { questions, response: null, cancelled: true },
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Convert the shared RoundResult into the JSON the LLM expects. */
|
|
45
|
+
function formatForLLM(result) {
|
|
46
|
+
const answers = {};
|
|
47
|
+
for (const [id, answer] of Object.entries(result.answers)) {
|
|
48
|
+
const list = [];
|
|
49
|
+
if (Array.isArray(answer.selected)) {
|
|
50
|
+
list.push(...answer.selected);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
list.push(answer.selected);
|
|
54
|
+
}
|
|
55
|
+
if (answer.notes) {
|
|
56
|
+
list.push(`user_note: ${answer.notes}`);
|
|
57
|
+
}
|
|
58
|
+
answers[id] = { answers: list };
|
|
59
|
+
}
|
|
60
|
+
return JSON.stringify({ answers });
|
|
61
|
+
}
|
|
62
|
+
// ─── Extension ────────────────────────────────────────────────────────────────
|
|
63
|
+
export default function AskUserQuestions(pi) {
|
|
64
|
+
pi.registerTool({
|
|
65
|
+
name: "ask_user_questions",
|
|
66
|
+
label: "Request User Input",
|
|
67
|
+
description: "Request user input for one to three short questions and wait for the response. Single-select questions have 2-3 mutually exclusive options with a free-form 'None of the above' added automatically. Multi-select questions (allowMultiple: true) let the user toggle multiple options with SPACE and confirm with ENTER.",
|
|
68
|
+
promptGuidelines: [
|
|
69
|
+
"Use ask_user_questions when you need the user to choose between concrete alternatives before proceeding.",
|
|
70
|
+
"Keep questions to 1 when possible; never exceed 3.",
|
|
71
|
+
"For single-select: each question must have 2-3 options. Put the recommended option first with '(Recommended)' suffix. Do not include an 'Other' or 'None of the above' option - the client adds one automatically.",
|
|
72
|
+
"For multi-select: set allowMultiple: true. The user can pick any number of options. No 'None of the above' is added.",
|
|
73
|
+
],
|
|
74
|
+
parameters: AskUserQuestionsParams,
|
|
75
|
+
async execute(_toolCallId, params, signal, _onUpdate, ctx) {
|
|
76
|
+
// Validation
|
|
77
|
+
if (params.questions.length === 0 || params.questions.length > 3) {
|
|
78
|
+
return errorResult("Error: questions must contain 1-3 items", params.questions);
|
|
79
|
+
}
|
|
80
|
+
for (const q of params.questions) {
|
|
81
|
+
if (!q.options || q.options.length === 0) {
|
|
82
|
+
return errorResult(`Error: ask_user_questions requires non-empty options for every question (question "${q.id}" has none)`, params.questions);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!ctx.hasUI) {
|
|
86
|
+
const { tryRemoteQuestions } = await import("./remote-questions/manager.js");
|
|
87
|
+
const remoteResult = await tryRemoteQuestions(params.questions, signal);
|
|
88
|
+
if (remoteResult)
|
|
89
|
+
return { ...remoteResult, details: remoteResult.details };
|
|
90
|
+
return errorResult("Error: UI not available (non-interactive mode)", params.questions);
|
|
91
|
+
}
|
|
92
|
+
// Delegate to shared interview UI
|
|
93
|
+
const result = await showInterviewRound(params.questions, {}, ctx);
|
|
94
|
+
// RPC mode fallback: custom() returns undefined, so showInterviewRound
|
|
95
|
+
// may return undefined. Fall back to sequential ctx.ui.select() calls.
|
|
96
|
+
if (!result) {
|
|
97
|
+
const answers = {};
|
|
98
|
+
for (const q of params.questions) {
|
|
99
|
+
const options = q.options.map((o) => o.label);
|
|
100
|
+
if (!q.allowMultiple) {
|
|
101
|
+
options.push(OTHER_OPTION_LABEL);
|
|
102
|
+
}
|
|
103
|
+
const selected = await ctx.ui.select(`${q.header}: ${q.question}`, options, { signal, ...(q.allowMultiple ? { allowMultiple: true } : {}) });
|
|
104
|
+
if (selected === undefined) {
|
|
105
|
+
return errorResult("ask_user_questions was cancelled", params.questions);
|
|
106
|
+
}
|
|
107
|
+
answers[q.id] = {
|
|
108
|
+
answers: Array.isArray(selected) ? selected : [selected],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const roundResult = {
|
|
112
|
+
endInterview: false,
|
|
113
|
+
answers: Object.fromEntries(Object.entries(answers).map(([id, a]) => [
|
|
114
|
+
id,
|
|
115
|
+
{ selected: a.answers.length === 1 ? a.answers[0] : a.answers, notes: "" },
|
|
116
|
+
])),
|
|
117
|
+
};
|
|
118
|
+
return {
|
|
119
|
+
content: [{ type: "text", text: JSON.stringify({ answers }) }],
|
|
120
|
+
details: {
|
|
121
|
+
questions: params.questions,
|
|
122
|
+
response: roundResult,
|
|
123
|
+
cancelled: false,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Check if cancelled (empty answers = user exited)
|
|
128
|
+
const hasAnswers = Object.keys(result.answers).length > 0;
|
|
129
|
+
if (!hasAnswers) {
|
|
130
|
+
return {
|
|
131
|
+
content: [{ type: "text", text: "ask_user_questions was cancelled before receiving a response" }],
|
|
132
|
+
details: { questions: params.questions, response: null, cancelled: true },
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
content: [{ type: "text", text: formatForLLM(result) }],
|
|
137
|
+
details: { questions: params.questions, response: result, cancelled: false },
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
// ─── Rendering ────────────────────────────────────────────────────────
|
|
141
|
+
renderCall(args, theme) {
|
|
142
|
+
const qs = args.questions || [];
|
|
143
|
+
let text = theme.fg("toolTitle", theme.bold("ask_user_questions "));
|
|
144
|
+
text += theme.fg("muted", `${qs.length} question${qs.length !== 1 ? "s" : ""}`);
|
|
145
|
+
if (qs.length > 0) {
|
|
146
|
+
const headers = qs.map((q) => q.header).join(", ");
|
|
147
|
+
text += theme.fg("dim", ` (${headers})`);
|
|
148
|
+
}
|
|
149
|
+
for (const q of qs) {
|
|
150
|
+
const multiSel = !!q.allowMultiple;
|
|
151
|
+
text += `\n ${theme.fg("text", q.question)}`;
|
|
152
|
+
const optLabels = multiSel
|
|
153
|
+
? (q.options || []).map((o) => o.label)
|
|
154
|
+
: [...(q.options || []).map((o) => o.label), OTHER_OPTION_LABEL];
|
|
155
|
+
const prefix = multiSel ? "☐" : "";
|
|
156
|
+
const numbered = optLabels.map((l, i) => `${prefix}${i + 1}. ${l}`).join(", ");
|
|
157
|
+
text += `\n ${theme.fg("dim", numbered)}`;
|
|
158
|
+
}
|
|
159
|
+
return new Text(text, 0, 0);
|
|
160
|
+
},
|
|
161
|
+
renderResult(result, _options, theme) {
|
|
162
|
+
const details = result.details;
|
|
163
|
+
if (!details) {
|
|
164
|
+
const text = result.content[0];
|
|
165
|
+
return new Text(text?.type === "text" ? text.text : "", 0, 0);
|
|
166
|
+
}
|
|
167
|
+
// Remote channel result (discriminated on details.remote === true)
|
|
168
|
+
if (details.remote) {
|
|
169
|
+
if (details.timed_out) {
|
|
170
|
+
return new Text(`${theme.fg("warning", `${details.channel} — timed out`)}${details.threadUrl ? theme.fg("dim", ` ${details.threadUrl}`) : ""}`, 0, 0);
|
|
171
|
+
}
|
|
172
|
+
const questions = (details.questions ?? []);
|
|
173
|
+
const lines = [];
|
|
174
|
+
lines.push(theme.fg("dim", details.channel));
|
|
175
|
+
if (details.response) {
|
|
176
|
+
for (const q of questions) {
|
|
177
|
+
const answer = details.response.answers[q.id];
|
|
178
|
+
if (!answer) {
|
|
179
|
+
lines.push(`${theme.fg("accent", q.header)}: ${theme.fg("dim", "(no answer)")}`);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const answerText = answer.answers.length > 0 ? answer.answers.join(", ") : "(custom)";
|
|
183
|
+
let line = `${theme.fg("success", "✓ ")}${theme.fg("accent", q.header)}: ${answerText}`;
|
|
184
|
+
if (answer.user_note) {
|
|
185
|
+
line += ` ${theme.fg("muted", `[note: ${answer.user_note}]`)}`;
|
|
186
|
+
}
|
|
187
|
+
lines.push(line);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return new Text(lines.join("\n"), 0, 0);
|
|
191
|
+
}
|
|
192
|
+
if (details.cancelled || !details.response) {
|
|
193
|
+
return new Text(theme.fg("warning", "Cancelled"), 0, 0);
|
|
194
|
+
}
|
|
195
|
+
const lines = [];
|
|
196
|
+
for (const q of details.questions) {
|
|
197
|
+
const answer = details.response.answers[q.id];
|
|
198
|
+
if (!answer) {
|
|
199
|
+
lines.push(`${theme.fg("accent", q.header)}: ${theme.fg("dim", "(no answer)")}`);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const selected = answer.selected;
|
|
203
|
+
const notes = answer.notes;
|
|
204
|
+
const multiSel = !!q.allowMultiple;
|
|
205
|
+
const answerText = multiSel && Array.isArray(selected)
|
|
206
|
+
? selected.join(", ")
|
|
207
|
+
: (Array.isArray(selected) ? selected[0] : selected) ?? "(no answer)";
|
|
208
|
+
let line = `${theme.fg("success", "✓ ")}${theme.fg("accent", q.header)}: ${answerText}`;
|
|
209
|
+
if (notes) {
|
|
210
|
+
line += ` ${theme.fg("muted", `[note: ${notes}]`)}`;
|
|
211
|
+
}
|
|
212
|
+
lines.push(line);
|
|
213
|
+
}
|
|
214
|
+
return new Text(lines.join("\n"), 0, 0);
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* async_bash tool — run a bash command in the background.
|
|
3
|
+
*
|
|
4
|
+
* Registers the command with the AsyncJobManager and returns a job ID
|
|
5
|
+
* immediately. The LLM can continue working and check results later
|
|
6
|
+
* with await_job.
|
|
7
|
+
*/
|
|
8
|
+
import { getShellConfig, sanitizeCommand, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, } from "@gsd/pi-coding-agent";
|
|
9
|
+
import { Type } from "@sinclair/typebox";
|
|
10
|
+
import { spawn } from "node:child_process";
|
|
11
|
+
import { createWriteStream } from "node:fs";
|
|
12
|
+
import { tmpdir } from "node:os";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { randomBytes } from "node:crypto";
|
|
15
|
+
const schema = Type.Object({
|
|
16
|
+
command: Type.String({ description: "Bash command to execute in the background" }),
|
|
17
|
+
timeout: Type.Optional(Type.Number({ description: "Timeout in seconds (optional)" })),
|
|
18
|
+
label: Type.Optional(Type.String({ description: "Short label for the job (shown in /jobs). Defaults to a truncated version of the command." })),
|
|
19
|
+
});
|
|
20
|
+
function getTempFilePath() {
|
|
21
|
+
const id = randomBytes(8).toString("hex");
|
|
22
|
+
return join(tmpdir(), `pi-async-bash-${id}.log`);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Kill a process and its children. Uses process group kill on Unix.
|
|
26
|
+
*/
|
|
27
|
+
function killTree(pid) {
|
|
28
|
+
try {
|
|
29
|
+
// Kill the process group (negative PID)
|
|
30
|
+
process.kill(-pid, "SIGTERM");
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
try {
|
|
34
|
+
process.kill(pid, "SIGTERM");
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Already exited
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function createAsyncBashTool(getManager, getCwd) {
|
|
42
|
+
return {
|
|
43
|
+
name: "async_bash",
|
|
44
|
+
label: "Background Bash",
|
|
45
|
+
description: `Run a bash command in the background. Returns a job ID immediately so you can continue working. ` +
|
|
46
|
+
`Use await_job to get results or cancel_job to stop. Ideal for long-running builds, tests, or installs. ` +
|
|
47
|
+
`Output is truncated to the last ${DEFAULT_MAX_LINES} lines or ${DEFAULT_MAX_BYTES / 1024}KB.`,
|
|
48
|
+
promptSnippet: "Run a bash command in the background, returning a job ID immediately.",
|
|
49
|
+
promptGuidelines: [
|
|
50
|
+
"Use async_bash for commands that take more than a few seconds (builds, tests, installs, large git operations).",
|
|
51
|
+
"After starting async jobs, continue with other work and use await_job when you need the results.",
|
|
52
|
+
"Use cancel_job to stop a running background job.",
|
|
53
|
+
"Check /jobs to see all running and recent background jobs.",
|
|
54
|
+
],
|
|
55
|
+
parameters: schema,
|
|
56
|
+
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
57
|
+
const manager = getManager();
|
|
58
|
+
const cwd = getCwd();
|
|
59
|
+
const { command, timeout, label } = params;
|
|
60
|
+
const shortCmd = label ?? (command.length > 60 ? command.slice(0, 57) + "..." : command);
|
|
61
|
+
const jobId = manager.register("bash", shortCmd, (signal) => {
|
|
62
|
+
return executeBashInBackground(command, cwd, signal, timeout);
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
content: [{
|
|
66
|
+
type: "text",
|
|
67
|
+
text: [
|
|
68
|
+
`Background job started: **${jobId}**`,
|
|
69
|
+
`Command: \`${shortCmd}\``,
|
|
70
|
+
"",
|
|
71
|
+
"Use `await_job` to get results when ready, or `cancel_job` to stop.",
|
|
72
|
+
].join("\n"),
|
|
73
|
+
}],
|
|
74
|
+
details: undefined,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Execute a bash command, collecting output. Returns the text result.
|
|
81
|
+
*/
|
|
82
|
+
function executeBashInBackground(command, cwd, signal, timeout) {
|
|
83
|
+
return new Promise((resolve, reject) => {
|
|
84
|
+
const { shell, args } = getShellConfig();
|
|
85
|
+
const resolvedCommand = sanitizeCommand(command);
|
|
86
|
+
const child = spawn(shell, [...args, resolvedCommand], {
|
|
87
|
+
cwd,
|
|
88
|
+
detached: true,
|
|
89
|
+
env: { ...process.env },
|
|
90
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
91
|
+
});
|
|
92
|
+
let timedOut = false;
|
|
93
|
+
let timeoutHandle;
|
|
94
|
+
if (timeout !== undefined && timeout > 0) {
|
|
95
|
+
timeoutHandle = setTimeout(() => {
|
|
96
|
+
timedOut = true;
|
|
97
|
+
if (child.pid)
|
|
98
|
+
killTree(child.pid);
|
|
99
|
+
}, timeout * 1000);
|
|
100
|
+
}
|
|
101
|
+
const chunks = [];
|
|
102
|
+
let totalBytes = 0;
|
|
103
|
+
let spillFilePath;
|
|
104
|
+
let spillStream;
|
|
105
|
+
const MAX_BUFFER = DEFAULT_MAX_BYTES * 2;
|
|
106
|
+
const onData = (data) => {
|
|
107
|
+
totalBytes += data.length;
|
|
108
|
+
if (totalBytes > DEFAULT_MAX_BYTES && !spillFilePath) {
|
|
109
|
+
spillFilePath = getTempFilePath();
|
|
110
|
+
spillStream = createWriteStream(spillFilePath);
|
|
111
|
+
for (const chunk of chunks)
|
|
112
|
+
spillStream.write(chunk);
|
|
113
|
+
}
|
|
114
|
+
if (spillStream)
|
|
115
|
+
spillStream.write(data);
|
|
116
|
+
chunks.push(data);
|
|
117
|
+
let chunksBytes = chunks.reduce((s, c) => s + c.length, 0);
|
|
118
|
+
while (chunksBytes > MAX_BUFFER && chunks.length > 1) {
|
|
119
|
+
const removed = chunks.shift();
|
|
120
|
+
chunksBytes -= removed.length;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
if (child.stdout)
|
|
124
|
+
child.stdout.on("data", onData);
|
|
125
|
+
if (child.stderr)
|
|
126
|
+
child.stderr.on("data", onData);
|
|
127
|
+
const onAbort = () => {
|
|
128
|
+
if (child.pid)
|
|
129
|
+
killTree(child.pid);
|
|
130
|
+
};
|
|
131
|
+
if (signal.aborted) {
|
|
132
|
+
onAbort();
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
136
|
+
}
|
|
137
|
+
child.on("error", (err) => {
|
|
138
|
+
if (timeoutHandle)
|
|
139
|
+
clearTimeout(timeoutHandle);
|
|
140
|
+
signal.removeEventListener("abort", onAbort);
|
|
141
|
+
reject(err);
|
|
142
|
+
});
|
|
143
|
+
child.on("close", (code) => {
|
|
144
|
+
if (timeoutHandle)
|
|
145
|
+
clearTimeout(timeoutHandle);
|
|
146
|
+
signal.removeEventListener("abort", onAbort);
|
|
147
|
+
if (spillStream)
|
|
148
|
+
spillStream.end();
|
|
149
|
+
if (signal.aborted) {
|
|
150
|
+
const output = Buffer.concat(chunks).toString("utf-8");
|
|
151
|
+
resolve(output ? `${output}\n\nCommand aborted` : "Command aborted");
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (timedOut) {
|
|
155
|
+
const output = Buffer.concat(chunks).toString("utf-8");
|
|
156
|
+
resolve(output ? `${output}\n\nCommand timed out after ${timeout} seconds` : `Command timed out after ${timeout} seconds`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const fullOutput = Buffer.concat(chunks).toString("utf-8");
|
|
160
|
+
const lines = fullOutput.split("\n");
|
|
161
|
+
let text;
|
|
162
|
+
if (lines.length > DEFAULT_MAX_LINES) {
|
|
163
|
+
text = lines.slice(-DEFAULT_MAX_LINES).join("\n");
|
|
164
|
+
if (spillFilePath) {
|
|
165
|
+
text += `\n\n[Showing last ${DEFAULT_MAX_LINES} of ${lines.length} lines. Full output: ${spillFilePath}]`;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
text += `\n\n[Showing last ${DEFAULT_MAX_LINES} of ${lines.length} lines]`;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
text = fullOutput || "(no output)";
|
|
173
|
+
}
|
|
174
|
+
if (code !== 0 && code !== null) {
|
|
175
|
+
text += `\n\nCommand exited with code ${code}`;
|
|
176
|
+
}
|
|
177
|
+
resolve(text);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|