gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.b6ad8c5f7
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 +186 -149
- package/dist/claude-cli-check.d.ts +10 -0
- package/dist/claude-cli-check.js +13 -3
- package/dist/headless-events.d.ts +1 -1
- package/dist/headless-events.js +5 -2
- package/dist/headless.js +5 -6
- package/dist/loader.js +0 -0
- package/dist/onboarding.d.ts +20 -1
- package/dist/onboarding.js +99 -39
- package/dist/resources/extensions/ask-user-questions.js +17 -5
- package/dist/resources/extensions/claude-code-cli/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
- package/dist/resources/extensions/gsd/auto/loop.js +67 -4
- package/dist/resources/extensions/gsd/auto/phases.js +70 -47
- package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
- package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
- package/dist/resources/extensions/gsd/auto/session.js +5 -0
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +15 -7
- package/dist/resources/extensions/gsd/auto-dispatch.js +112 -6
- package/dist/resources/extensions/gsd/auto-loop.js +1 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +11 -3
- package/dist/resources/extensions/gsd/auto-post-unit.js +10 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +173 -39
- package/dist/resources/extensions/gsd/auto-recovery.js +57 -0
- package/dist/resources/extensions/gsd/auto-start.js +5 -3
- package/dist/resources/extensions/gsd/auto-verification.js +3 -3
- package/dist/resources/extensions/gsd/auto-worktree.js +55 -1
- package/dist/resources/extensions/gsd/auto.js +57 -25
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +45 -23
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +81 -9
- package/dist/resources/extensions/gsd/commands/handlers/core.js +64 -24
- package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
- package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +199 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +16 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
- package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
- package/dist/resources/extensions/gsd/commands-config.js +5 -0
- package/dist/resources/extensions/gsd/commands-debug.js +388 -0
- package/dist/resources/extensions/gsd/commands-do.js +1 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +233 -75
- package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +40 -12
- package/dist/resources/extensions/gsd/commands-scan.js +94 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
- package/dist/resources/extensions/gsd/db-writer.js +1 -0
- package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
- package/dist/resources/extensions/gsd/definition-loader.js +7 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
- package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
- package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +48 -20
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
- package/dist/resources/extensions/gsd/doctor.js +7 -1
- package/dist/resources/extensions/gsd/error-classifier.js +6 -3
- package/dist/resources/extensions/gsd/escalation.js +321 -0
- package/dist/resources/extensions/gsd/forensics.js +26 -29
- package/dist/resources/extensions/gsd/git-service.js +0 -1
- package/dist/resources/extensions/gsd/graph.js +26 -2
- package/dist/resources/extensions/gsd/gsd-db.js +254 -29
- package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
- package/dist/resources/extensions/gsd/health-widget.js +7 -4
- package/dist/resources/extensions/gsd/init-wizard.js +86 -45
- package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
- package/dist/resources/extensions/gsd/metrics.js +1 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
- package/dist/resources/extensions/gsd/model-router.js +16 -6
- package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
- package/dist/resources/extensions/gsd/notification-overlay.js +7 -22
- package/dist/resources/extensions/gsd/notification-widget.js +24 -39
- package/dist/resources/extensions/gsd/notifications.js +4 -0
- package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
- package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
- package/dist/resources/extensions/gsd/pre-execution-checks.js +97 -4
- package/dist/resources/extensions/gsd/preferences-models.js +1 -0
- package/dist/resources/extensions/gsd/preferences-types.js +2 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
- package/dist/resources/extensions/gsd/preferences.js +10 -10
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
- package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +12 -0
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
- package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
- package/dist/resources/extensions/gsd/python-resolver.js +70 -0
- package/dist/resources/extensions/gsd/run-manager.js +37 -17
- package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
- package/dist/resources/extensions/gsd/state.js +47 -3
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
- package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
- package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
- package/dist/resources/extensions/gsd/tools/skip-slice.js +78 -0
- package/dist/resources/extensions/gsd/uok/flags.js +7 -7
- package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
- package/dist/resources/extensions/gsd/verification-gate.js +2 -1
- package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
- package/dist/resources/extensions/gsd/workflow-install.js +327 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
- package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
- package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
- package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
- package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
- package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
- package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
- package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
- package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
- package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
- package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
- package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
- package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
- package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
- package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
- package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
- package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
- package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
- package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
- package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/spike.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
- package/dist/resources/extensions/remote-questions/commands.js +380 -0
- package/dist/resources/extensions/remote-questions/manager.js +39 -5
- package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
- package/dist/resources/extensions/shared/interview-ui.js +189 -1
- package/dist/resources/extensions/shared/layout-utils.js +17 -0
- package/dist/resources/extensions/shared/rtk-shared.js +47 -0
- package/dist/resources/extensions/shared/rtk.js +3 -46
- package/dist/resources/skills/create-workflow/SKILL.md +33 -6
- package/dist/rtk-shared.d.ts +10 -0
- package/dist/rtk-shared.js +47 -0
- package/dist/rtk.d.ts +2 -6
- package/dist/rtk.js +3 -48
- package/dist/shared/workspace-types.d.ts +52 -0
- package/dist/shared/workspace-types.js +1 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.d.ts +10 -0
- package/dist/update-check.js +24 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/chunks/7461.js +1 -0
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/app/{page-f1e30ab6bb269149.js → page-5b113fd32bc2a1c3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-5fc74f13a25fa1bb.js} +1 -1
- package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.js +48 -24
- package/dist/wizard.js +2 -2
- package/dist/worktree-cli.d.ts +6 -5
- package/dist/worktree-cli.js +23 -7
- package/package.json +3 -3
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.js +3 -2
- package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
- package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
- package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/groq.js +0 -153
- package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
- package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
- package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +17 -0
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +18 -1
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +50 -0
- package/packages/pi-ai/src/models/capability-patches.ts +5 -2
- package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
- package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
- package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
- package/packages/pi-ai/src/models/generated/groq.ts +0 -153
- package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
- package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
- package/packages/pi-ai/src/models.generated.test.ts +17 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
- package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
- package/packages/pi-ai/src/providers/anthropic.ts +19 -1
- package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +32 -0
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
- package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +41 -0
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +1 -75
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +192 -24
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/src/resources/extensions/ask-user-questions.ts +24 -6
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/loop.ts +109 -3
- package/src/resources/extensions/gsd/auto/phases.ts +94 -60
- package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
- package/src/resources/extensions/gsd/auto/session.ts +7 -0
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +21 -4
- package/src/resources/extensions/gsd/auto-dispatch.ts +123 -5
- package/src/resources/extensions/gsd/auto-loop.ts +1 -1
- package/src/resources/extensions/gsd/auto-model-selection.ts +14 -3
- package/src/resources/extensions/gsd/auto-post-unit.ts +10 -8
- package/src/resources/extensions/gsd/auto-prompts.ts +201 -40
- package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
- package/src/resources/extensions/gsd/auto-start.ts +8 -6
- package/src/resources/extensions/gsd/auto-verification.ts +3 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +65 -0
- package/src/resources/extensions/gsd/auto.ts +61 -28
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +46 -24
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +74 -9
- package/src/resources/extensions/gsd/commands/handlers/core.ts +69 -27
- package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
- package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +262 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +16 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
- package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
- package/src/resources/extensions/gsd/commands-config.ts +10 -0
- package/src/resources/extensions/gsd/commands-debug.ts +484 -0
- package/src/resources/extensions/gsd/commands-do.ts +1 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +295 -76
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +49 -12
- package/src/resources/extensions/gsd/commands-scan.ts +125 -0
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
- package/src/resources/extensions/gsd/db-writer.ts +3 -0
- package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
- package/src/resources/extensions/gsd/definition-loader.ts +7 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
- package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -1
- package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +52 -22
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +7 -1
- package/src/resources/extensions/gsd/error-classifier.ts +6 -3
- package/src/resources/extensions/gsd/escalation.ts +367 -0
- package/src/resources/extensions/gsd/forensics.ts +25 -29
- package/src/resources/extensions/gsd/git-service.ts +0 -1
- package/src/resources/extensions/gsd/graph.ts +33 -3
- package/src/resources/extensions/gsd/gsd-db.ts +306 -29
- package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
- package/src/resources/extensions/gsd/health-widget.ts +7 -3
- package/src/resources/extensions/gsd/init-wizard.ts +87 -54
- package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
- package/src/resources/extensions/gsd/metrics.ts +1 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
- package/src/resources/extensions/gsd/model-router.ts +25 -6
- package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
- package/src/resources/extensions/gsd/notification-overlay.ts +9 -19
- package/src/resources/extensions/gsd/notification-widget.ts +25 -43
- package/src/resources/extensions/gsd/notifications.ts +6 -0
- package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
- package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
- package/src/resources/extensions/gsd/pre-execution-checks.ts +98 -8
- package/src/resources/extensions/gsd/preferences-models.ts +1 -0
- package/src/resources/extensions/gsd/preferences-types.ts +10 -2
- package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
- package/src/resources/extensions/gsd/preferences.ts +10 -10
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/src/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
- package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +12 -0
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/src/resources/extensions/gsd/prompts/scan.md +79 -0
- package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
- package/src/resources/extensions/gsd/python-resolver.ts +76 -0
- package/src/resources/extensions/gsd/run-manager.ts +53 -19
- package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
- package/src/resources/extensions/gsd/state.ts +50 -2
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
- package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +333 -21
- package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
- package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
- package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
- package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +62 -18
- package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
- package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +171 -1
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/model-router.test.ts +51 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +56 -37
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/onboarding-handler-loader.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +275 -6
- package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/skip-slice-cascades-tasks.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
- package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
- package/src/resources/extensions/gsd/tools/skip-slice.ts +133 -0
- package/src/resources/extensions/gsd/types.ts +62 -0
- package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
- package/src/resources/extensions/gsd/uok/flags.ts +7 -7
- package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
- package/src/resources/extensions/gsd/verification-gate.ts +2 -1
- package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
- package/src/resources/extensions/gsd/workflow-install.ts +423 -0
- package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
- package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
- package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
- package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
- package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
- package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
- package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
- package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
- package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
- package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
- package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
- package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
- package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
- package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
- package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
- package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
- package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
- package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
- package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
- package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/spike.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
- package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
- package/src/resources/extensions/gsd/workspace-index.ts +9 -4
- package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
- package/src/resources/extensions/remote-questions/commands.ts +480 -0
- package/src/resources/extensions/remote-questions/manager.ts +49 -4
- package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
- package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
- package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
- package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
- package/src/resources/extensions/shared/interview-ui.ts +195 -1
- package/src/resources/extensions/shared/layout-utils.ts +26 -0
- package/src/resources/extensions/shared/rtk-shared.ts +58 -0
- package/src/resources/extensions/shared/rtk.ts +12 -52
- package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
- package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
- package/src/resources/skills/create-workflow/SKILL.md +33 -6
- package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
- package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
- package/packages/native/dist/ps/types.d.ts +0 -5
- package/packages/native/dist/ps/types.js +0 -2
- package/packages/native/src/ps/types.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
- package/packages/pi-ai/oauth.d.ts +0 -1
- package/packages/pi-ai/oauth.js +0 -1
- /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → J2z3GMC9QtSLr7gyoM38c}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → J2z3GMC9QtSLr7gyoM38c}/_ssgManifest.js +0 -0
|
@@ -31,11 +31,17 @@ export function showHelp(ctx, args = "") {
|
|
|
31
31
|
" /gsd undo Revert last completed unit [--force]",
|
|
32
32
|
" /gsd rethink Conversational project reorganization",
|
|
33
33
|
"",
|
|
34
|
+
"OBSERVABILITY",
|
|
35
|
+
" /gsd logs Browse activity and debug logs",
|
|
36
|
+
" /gsd debug Create/list/continue persistent debug sessions",
|
|
37
|
+
"",
|
|
34
38
|
"SETUP",
|
|
39
|
+
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
40
|
+
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
35
41
|
" /gsd init Project init wizard",
|
|
36
|
-
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
37
42
|
" /gsd model Switch active session model",
|
|
38
|
-
" /gsd prefs Manage preferences",
|
|
43
|
+
" /gsd prefs Manage preferences (alias for /gsd setup prefs)",
|
|
44
|
+
" /gsd keys API key manager (LLM + tool keys)",
|
|
39
45
|
" /gsd doctor Diagnose and repair .gsd/ state",
|
|
40
46
|
"",
|
|
41
47
|
"Use /gsd help full for the complete command reference.",
|
|
@@ -61,6 +67,8 @@ export function showHelp(ctx, args = "") {
|
|
|
61
67
|
" /gsd history View execution history [--cost] [--phase] [--model] [N]",
|
|
62
68
|
" /gsd changelog Show categorized release notes [version]",
|
|
63
69
|
` /gsd notifications View persistent notification history [clear|tail|filter] (${formattedShortcutPair("notifications")})`,
|
|
70
|
+
" /gsd logs Browse activity logs, debug logs, and metrics",
|
|
71
|
+
" /gsd debug Create/list/continue persistent debug sessions",
|
|
64
72
|
"",
|
|
65
73
|
"COURSE CORRECTION",
|
|
66
74
|
" /gsd steer <desc> Apply user override to active work",
|
|
@@ -77,14 +85,15 @@ export function showHelp(ctx, args = "") {
|
|
|
77
85
|
" /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
|
|
78
86
|
"",
|
|
79
87
|
"SETUP & CONFIGURATION",
|
|
88
|
+
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
89
|
+
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
80
90
|
" /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
|
|
81
|
-
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
82
91
|
" /gsd model Switch active session model [provider/model|model-id]",
|
|
83
92
|
" /gsd mode Set workflow mode (solo/team) [global|project]",
|
|
84
|
-
" /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude]",
|
|
93
|
+
" /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude] (alias for /gsd setup prefs)",
|
|
85
94
|
" /gsd cmux Manage cmux integration [status|on|off|notifications|sidebar|splits|browser]",
|
|
86
|
-
" /gsd
|
|
87
|
-
" /gsd
|
|
95
|
+
" /gsd keys API key manager (LLM + tool keys) [list|add|remove|test|rotate|doctor]",
|
|
96
|
+
" /gsd config (deprecated) Set tool API keys — use /gsd keys instead",
|
|
88
97
|
" /gsd show-config Show effective configuration (models, routing, toggles)",
|
|
89
98
|
" /gsd hooks Show post-unit hook configuration",
|
|
90
99
|
" /gsd extensions Manage extensions [list|enable|disable|info]",
|
|
@@ -149,29 +158,38 @@ export async function handleVisualize(ctx) {
|
|
|
149
158
|
ctx.ui.notify("Visualizer requires an interactive terminal. Use /gsd status for a text-based overview.", "warning");
|
|
150
159
|
}
|
|
151
160
|
}
|
|
152
|
-
export async function handleSetup(args, ctx) {
|
|
161
|
+
export async function handleSetup(args, ctx, pi) {
|
|
153
162
|
const { detectProjectState, hasGlobalSetup } = await import("../../detection.js");
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
163
|
+
const { isOnboardingComplete, readOnboardingRecord } = await import("../../onboarding-state.js");
|
|
164
|
+
// Sub-route dispatch — keep redirects but route the canonical work to /gsd
|
|
165
|
+
// onboarding (single source for wizard steps) and /gsd keys (single source
|
|
166
|
+
// for credentials).
|
|
167
|
+
if (args === "onboarding" || args === "wizard") {
|
|
168
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
169
|
+
await handleOnboarding("", ctx);
|
|
170
|
+
return;
|
|
161
171
|
}
|
|
162
172
|
if (args === "llm" || args === "auth") {
|
|
163
|
-
|
|
173
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
174
|
+
await handleOnboarding("--step llm", ctx);
|
|
164
175
|
return;
|
|
165
176
|
}
|
|
166
177
|
if (args === "search") {
|
|
167
|
-
|
|
178
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
179
|
+
await handleOnboarding("--step search", ctx);
|
|
168
180
|
return;
|
|
169
181
|
}
|
|
170
182
|
if (args === "remote") {
|
|
171
|
-
|
|
183
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
184
|
+
await handleOnboarding("--step remote", ctx);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (args === "model") {
|
|
188
|
+
await handleModel("", ctx, pi);
|
|
172
189
|
return;
|
|
173
190
|
}
|
|
174
191
|
if (args === "keys") {
|
|
192
|
+
ctx.ui.notify("Tip: /gsd keys is the canonical command for API key management.", "info");
|
|
175
193
|
const { handleKeys } = await import("../../key-manager.js");
|
|
176
194
|
await handleKeys("", ctx);
|
|
177
195
|
return;
|
|
@@ -181,13 +199,30 @@ export async function handleSetup(args, ctx) {
|
|
|
181
199
|
await handlePrefsWizard(ctx, "global");
|
|
182
200
|
return;
|
|
183
201
|
}
|
|
202
|
+
// Bare /gsd setup — render the hub: status + actions
|
|
203
|
+
const globalConfigured = hasGlobalSetup();
|
|
204
|
+
const detection = detectProjectState(projectRoot());
|
|
205
|
+
const onboardingDone = isOnboardingComplete();
|
|
206
|
+
const record = readOnboardingRecord();
|
|
207
|
+
const statusLines = ["GSD Setup\n"];
|
|
208
|
+
statusLines.push(onboardingDone
|
|
209
|
+
? ` Onboarding: ✓ complete${record.completedAt ? ` (${record.completedAt.slice(0, 10)})` : ""}`
|
|
210
|
+
: ` Onboarding: ○ not complete — /gsd onboarding to start`);
|
|
211
|
+
statusLines.push(` Global preferences: ${globalConfigured ? "configured" : "not set"}`);
|
|
212
|
+
statusLines.push(` Project state: ${detection.state}`);
|
|
213
|
+
if (detection.projectSignals.primaryLanguage) {
|
|
214
|
+
statusLines.push(` Detected: ${detection.projectSignals.primaryLanguage}`);
|
|
215
|
+
}
|
|
184
216
|
ctx.ui.notify(statusLines.join("\n"), "info");
|
|
185
|
-
ctx.ui.notify("
|
|
186
|
-
" /gsd setup llm
|
|
187
|
-
" /gsd setup
|
|
188
|
-
" /gsd setup
|
|
189
|
-
" /gsd setup
|
|
190
|
-
" /gsd setup
|
|
217
|
+
ctx.ui.notify("Configuration hub:\n" +
|
|
218
|
+
" /gsd setup llm — LLM provider & auth\n" +
|
|
219
|
+
" /gsd setup model — Default model picker\n" +
|
|
220
|
+
" /gsd setup search — Web search provider\n" +
|
|
221
|
+
" /gsd setup remote — Remote questions (Discord/Slack/Telegram)\n" +
|
|
222
|
+
" /gsd setup keys — API keys (alias for /gsd keys)\n" +
|
|
223
|
+
" /gsd setup prefs — Global preferences (alias for /gsd prefs)\n" +
|
|
224
|
+
" /gsd setup onboarding — Full wizard (alias for /gsd onboarding)\n\n" +
|
|
225
|
+
"Tip: /gsd onboarding --resume to continue an incomplete setup.", "info");
|
|
191
226
|
}
|
|
192
227
|
function sortModelsForSelection(models, currentModel) {
|
|
193
228
|
return [...models].sort((a, b) => {
|
|
@@ -364,7 +399,12 @@ export async function handleCoreCommand(trimmed, ctx, pi) {
|
|
|
364
399
|
return true;
|
|
365
400
|
}
|
|
366
401
|
if (trimmed === "setup" || trimmed.startsWith("setup ")) {
|
|
367
|
-
await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx);
|
|
402
|
+
await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx, pi);
|
|
403
|
+
return true;
|
|
404
|
+
}
|
|
405
|
+
if (trimmed === "onboarding" || trimmed.startsWith("onboarding ")) {
|
|
406
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
407
|
+
await handleOnboarding(trimmed.replace(/^onboarding\s*/, "").trim(), ctx);
|
|
368
408
|
return true;
|
|
369
409
|
}
|
|
370
410
|
return false;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// GSD Extension — /gsd escalate Command Handler (ADR-011 Phase 2)
|
|
2
|
+
// Surface and resolve mid-execution escalations from the CLI.
|
|
3
|
+
import { projectRoot } from "../context.js";
|
|
4
|
+
import { getActiveMilestoneId } from "../../state.js";
|
|
5
|
+
import { readEscalationArtifact, formatEscalationForDisplay, resolveEscalation, listActionableEscalations, listAllEscalations, } from "../../escalation.js";
|
|
6
|
+
import { saveDecisionToDb } from "../../db-writer.js";
|
|
7
|
+
import { loadEffectiveGSDPreferences } from "../../preferences.js";
|
|
8
|
+
import { invalidateStateCache } from "../../state.js";
|
|
9
|
+
import { emitUokAuditEvent, buildAuditEnvelope } from "../../uok/audit.js";
|
|
10
|
+
function helpMessage() {
|
|
11
|
+
return [
|
|
12
|
+
"/gsd escalate — manage mid-execution escalations (ADR-011 Phase 2)",
|
|
13
|
+
"",
|
|
14
|
+
"Subcommands:",
|
|
15
|
+
" list [--all] show pending escalations (use --all to include resolved)",
|
|
16
|
+
" show <taskId> print the escalation artifact",
|
|
17
|
+
" resolve <taskId> <choice> [rationale...]",
|
|
18
|
+
" resolve an escalation — choice is an option id,",
|
|
19
|
+
" `accept` (use recommendation), or `reject-blocker`",
|
|
20
|
+
" (convert to a blocker and trigger slice replan)",
|
|
21
|
+
"",
|
|
22
|
+
"Note: disabling `phases.mid_execution_escalation` does NOT clear pending",
|
|
23
|
+
"escalations. If you need to drain them, re-enable the flag, resolve via",
|
|
24
|
+
"`/gsd escalate resolve`, then disable.",
|
|
25
|
+
].join("\n");
|
|
26
|
+
}
|
|
27
|
+
function formatListEntries(rows, basePath) {
|
|
28
|
+
if (rows.length === 0)
|
|
29
|
+
return "No escalations.";
|
|
30
|
+
return rows.map((t) => {
|
|
31
|
+
const art = t.escalation_artifact_path ? readEscalationArtifact(t.escalation_artifact_path) : null;
|
|
32
|
+
const status = t.escalation_pending ? "PENDING (paused)" : t.escalation_awaiting_review ? "awaiting-review" : "resolved";
|
|
33
|
+
const question = art?.question ?? "(artifact missing)";
|
|
34
|
+
return ` ${t.slice_id}/${t.id} [${status}] ${question}`;
|
|
35
|
+
}).join("\n");
|
|
36
|
+
}
|
|
37
|
+
export async function handleEscalateCommand(args, ctx, pi) {
|
|
38
|
+
void pi;
|
|
39
|
+
const trimmed = args.trim();
|
|
40
|
+
if (trimmed === "" || trimmed === "help") {
|
|
41
|
+
ctx.ui.notify(helpMessage(), "info");
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const basePath = projectRoot();
|
|
45
|
+
const prefs = loadEffectiveGSDPreferences()?.preferences;
|
|
46
|
+
if (prefs?.phases?.mid_execution_escalation !== true) {
|
|
47
|
+
ctx.ui.notify("Escalation is off. Enable with `phases: { mid_execution_escalation: true }` in your PREFERENCES.md.", "warning");
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const milestoneId = await getActiveMilestoneId(basePath);
|
|
51
|
+
if (!milestoneId) {
|
|
52
|
+
ctx.ui.notify("No active milestone — cannot list escalations.", "warning");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// ── list ────────────────────────────────────────────────────────────────
|
|
56
|
+
if (trimmed === "list" || trimmed === "list --all" || trimmed === "--all") {
|
|
57
|
+
const includeAll = trimmed.includes("--all");
|
|
58
|
+
const rows = includeAll ? listAllEscalations(milestoneId) : listActionableEscalations(milestoneId);
|
|
59
|
+
const body = formatListEntries(rows, basePath);
|
|
60
|
+
ctx.ui.notify(`${includeAll ? "All escalations" : "Actionable escalations"} for ${milestoneId}:\n${body}`, "info");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Parse a possibly-slice-qualified task id: "Sxx/Tyy" or plain "Tyy".
|
|
64
|
+
// Returns { sliceId?, taskId }.
|
|
65
|
+
const parseTaskRef = (ref) => {
|
|
66
|
+
const slash = ref.indexOf("/");
|
|
67
|
+
if (slash > 0) {
|
|
68
|
+
return { sliceId: ref.slice(0, slash), taskId: ref.slice(slash + 1) };
|
|
69
|
+
}
|
|
70
|
+
return { taskId: ref };
|
|
71
|
+
};
|
|
72
|
+
// Resolve a task ref to a single row, surfacing ambiguity when a bare task
|
|
73
|
+
// id matches more than one slice.
|
|
74
|
+
const locateRow = (ref) => {
|
|
75
|
+
const { sliceId, taskId } = parseTaskRef(ref);
|
|
76
|
+
const rows = listAllEscalations(milestoneId).filter((t) => t.id === taskId && (sliceId === undefined || t.slice_id === sliceId));
|
|
77
|
+
if (rows.length === 0)
|
|
78
|
+
return "not-found";
|
|
79
|
+
if (rows.length > 1)
|
|
80
|
+
return "ambiguous";
|
|
81
|
+
return rows[0];
|
|
82
|
+
};
|
|
83
|
+
// ── show <taskRef> ──────────────────────────────────────────────────────
|
|
84
|
+
if (trimmed.startsWith("show ")) {
|
|
85
|
+
const ref = trimmed.slice(5).trim();
|
|
86
|
+
const row = locateRow(ref);
|
|
87
|
+
if (row === "ambiguous") {
|
|
88
|
+
ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (row === "not-found" || !row.escalation_artifact_path) {
|
|
92
|
+
ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const art = readEscalationArtifact(row.escalation_artifact_path);
|
|
96
|
+
if (!art) {
|
|
97
|
+
ctx.ui.notify(`Escalation artifact at ${row.escalation_artifact_path} is missing or malformed.`, "error");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
ctx.ui.notify(formatEscalationForDisplay(art), "info");
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// ── resolve <taskRef> <choice> [rationale...] ───────────────────────────
|
|
104
|
+
if (trimmed.startsWith("resolve ")) {
|
|
105
|
+
const parts = trimmed.slice(8).trim().split(/\s+/);
|
|
106
|
+
const ref = parts[0];
|
|
107
|
+
const choice = parts[1];
|
|
108
|
+
const rationale = parts.slice(2).join(" ").trim();
|
|
109
|
+
if (!ref || !choice) {
|
|
110
|
+
ctx.ui.notify("Usage: /gsd escalate resolve <taskId|Sxx/Tyy> <choice> [rationale...]", "warning");
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const row = locateRow(ref);
|
|
114
|
+
if (row === "ambiguous") {
|
|
115
|
+
ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (row === "not-found") {
|
|
119
|
+
ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const taskId = row.id;
|
|
123
|
+
const result = resolveEscalation(basePath, milestoneId, row.slice_id, taskId, choice, rationale);
|
|
124
|
+
invalidateStateCache();
|
|
125
|
+
if (result.status !== "resolved" && result.status !== "rejected-to-blocker") {
|
|
126
|
+
ctx.ui.notify(result.message, result.status === "invalid-choice" ? "warning" : "error");
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Persist the user's choice as a decision (only for resolved, not reject-blocker).
|
|
130
|
+
if (result.status === "resolved") {
|
|
131
|
+
try {
|
|
132
|
+
const art = row.escalation_artifact_path ? readEscalationArtifact(row.escalation_artifact_path) : null;
|
|
133
|
+
const scope = `${milestoneId}/${row.slice_id}/${taskId}`;
|
|
134
|
+
const decisionText = art?.question ?? `escalation on ${taskId}`;
|
|
135
|
+
const choiceLabel = choice === "accept"
|
|
136
|
+
? `${art?.recommendation ?? "accepted"} (recommended)`
|
|
137
|
+
: (result.chosenOption?.label ?? choice);
|
|
138
|
+
const { id: decisionId } = await saveDecisionToDb({
|
|
139
|
+
scope,
|
|
140
|
+
decision: decisionText,
|
|
141
|
+
choice: choiceLabel,
|
|
142
|
+
rationale: rationale || result.chosenOption?.tradeoffs || "User-resolved escalation.",
|
|
143
|
+
made_by: "human",
|
|
144
|
+
source: "escalation",
|
|
145
|
+
when_context: `ADR-011 escalation resolved ${new Date().toISOString()}`,
|
|
146
|
+
}, basePath);
|
|
147
|
+
emitUokAuditEvent(basePath, buildAuditEnvelope({
|
|
148
|
+
traceId: `escalation:${milestoneId}:${row.slice_id}:${taskId}`,
|
|
149
|
+
category: "gate",
|
|
150
|
+
type: "escalation-decision-persisted",
|
|
151
|
+
payload: {
|
|
152
|
+
milestoneId,
|
|
153
|
+
sliceId: row.slice_id,
|
|
154
|
+
taskId,
|
|
155
|
+
decisionId,
|
|
156
|
+
choice,
|
|
157
|
+
},
|
|
158
|
+
}));
|
|
159
|
+
ctx.ui.notify(`${result.message}\nDecision recorded as ${decisionId}. Run /gsd auto to continue.`, "success");
|
|
160
|
+
}
|
|
161
|
+
catch (decErr) {
|
|
162
|
+
ctx.ui.notify(`${result.message}\nWARN: decision persistence failed: ${decErr.message}`, "warning");
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// rejected-to-blocker path
|
|
167
|
+
ctx.ui.notify(`${result.message} Run /gsd auto to trigger the replan.`, "success");
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
ctx.ui.notify(`Unknown subcommand. ${helpMessage()}`, "warning");
|
|
171
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// GSD — /gsd onboarding command handler (re-entry, --resume, --reset, --step)
|
|
2
|
+
//
|
|
3
|
+
// Provides the discoverable re-entry point for the onboarding wizard. The
|
|
4
|
+
// first-run wizard in src/onboarding.ts is hidden behind shouldRunOnboarding;
|
|
5
|
+
// this handler lets users re-launch it on demand.
|
|
6
|
+
import { AuthStorage } from "@gsd/pi-coding-agent";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import { dirname, join, resolve } from "node:path";
|
|
9
|
+
import { pathToFileURL } from "node:url";
|
|
10
|
+
import { ONBOARDING_STEPS, isValidStepId, nearestResumeStep, } from "../../setup-catalog.js";
|
|
11
|
+
import { isOnboardingComplete, readOnboardingRecord, resetOnboarding, } from "../../onboarding-state.js";
|
|
12
|
+
// Inline auth path (mirrors src/app-paths.ts) — keep this module rootDir-clean
|
|
13
|
+
// for the resources tsconfig. Importing from src/ pulls files outside
|
|
14
|
+
// src/resources and breaks the build.
|
|
15
|
+
const AUTH_FILE_PATH = join(process.env.GSD_CODING_AGENT_DIR ||
|
|
16
|
+
join(process.env.GSD_HOME || join(homedir(), ".gsd"), "agent"), "auth.json");
|
|
17
|
+
async function loadFirstRunWizard() {
|
|
18
|
+
const candidates = [];
|
|
19
|
+
// Primary deployed path: loader sets GSD_PKG_ROOT (gsd package root).
|
|
20
|
+
if (process.env.GSD_PKG_ROOT) {
|
|
21
|
+
candidates.push(pathToFileURL(join(process.env.GSD_PKG_ROOT, "dist", "onboarding.js")).href);
|
|
22
|
+
}
|
|
23
|
+
// Fallback: derive package root from process entry (typically dist/loader.js).
|
|
24
|
+
// This keeps /gsd onboarding resilient if GSD_PKG_ROOT is absent.
|
|
25
|
+
const argvEntry = process.argv[1];
|
|
26
|
+
if (argvEntry) {
|
|
27
|
+
const pkgRootFromArgv = resolve(dirname(argvEntry), "..");
|
|
28
|
+
candidates.push(pathToFileURL(join(pkgRootFromArgv, "dist", "onboarding.js")).href);
|
|
29
|
+
}
|
|
30
|
+
// Source-tree/dev fallback (works in dist/resources/... and ts test loaders).
|
|
31
|
+
candidates.push("../../../../../onboarding.js");
|
|
32
|
+
let lastError = null;
|
|
33
|
+
for (const specifier of candidates) {
|
|
34
|
+
try {
|
|
35
|
+
return (await import(/* @vite-ignore */ specifier));
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
lastError = err;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const reason = lastError instanceof Error ? lastError.message : String(lastError);
|
|
42
|
+
throw new Error(`[gsd] Failed to load onboarding wizard module. Tried: ${candidates.join(", ")}. Last error: ${reason}`);
|
|
43
|
+
}
|
|
44
|
+
function parseArgs(raw) {
|
|
45
|
+
const tokens = raw.split(/\s+/).filter(Boolean);
|
|
46
|
+
const out = { resume: false, reset: false, step: null, stepValid: null };
|
|
47
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
48
|
+
const t = tokens[i];
|
|
49
|
+
if (t === "--resume" || t === "resume")
|
|
50
|
+
out.resume = true;
|
|
51
|
+
else if (t === "--reset" || t === "reset")
|
|
52
|
+
out.reset = true;
|
|
53
|
+
else if (t === "--step" || t === "step") {
|
|
54
|
+
const next = tokens[i + 1];
|
|
55
|
+
if (next) {
|
|
56
|
+
out.step = next;
|
|
57
|
+
out.stepValid = isValidStepId(next);
|
|
58
|
+
i++;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (t.startsWith("--step=")) {
|
|
62
|
+
const v = t.slice(7);
|
|
63
|
+
out.step = v;
|
|
64
|
+
out.stepValid = isValidStepId(v);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
async function getAuthStorage() {
|
|
70
|
+
return AuthStorage.create(AUTH_FILE_PATH);
|
|
71
|
+
}
|
|
72
|
+
async function runWholeWizard(ctx, fromStep) {
|
|
73
|
+
const authStorage = await getAuthStorage();
|
|
74
|
+
// The first-run wizard ignores the resume hint today — it always walks the
|
|
75
|
+
// full sequence with skip prompts. We still mark completion at the end and
|
|
76
|
+
// record the resume hint for next time. This keeps the wizard linear and
|
|
77
|
+
// simple; per-step jump support comes via --step.
|
|
78
|
+
if (fromStep) {
|
|
79
|
+
ctx.ui.notify(`Resuming from step: ${fromStep}. The wizard runs all remaining steps; press skip on any you've already configured.`, "info");
|
|
80
|
+
}
|
|
81
|
+
const { runOnboarding } = await loadFirstRunWizard();
|
|
82
|
+
await runOnboarding(authStorage, { showIntro: false });
|
|
83
|
+
}
|
|
84
|
+
async function runSingleStep(ctx, stepId) {
|
|
85
|
+
const authStorage = await getAuthStorage();
|
|
86
|
+
const ob = await loadFirstRunWizard();
|
|
87
|
+
// Lazy-load clack + chalk via the same path the wizard uses
|
|
88
|
+
const p = await import("@clack/prompts");
|
|
89
|
+
const { default: chalk } = await import("chalk");
|
|
90
|
+
const pc = {
|
|
91
|
+
cyan: chalk.cyan, green: chalk.green, yellow: chalk.yellow,
|
|
92
|
+
dim: chalk.dim, bold: chalk.bold, red: chalk.red, reset: chalk.reset,
|
|
93
|
+
};
|
|
94
|
+
switch (stepId) {
|
|
95
|
+
case "llm":
|
|
96
|
+
await ob.runLlmStep(p, pc, authStorage);
|
|
97
|
+
return;
|
|
98
|
+
case "search":
|
|
99
|
+
await ob.runWebSearchStep(p, pc, authStorage, false);
|
|
100
|
+
return;
|
|
101
|
+
case "remote":
|
|
102
|
+
await ob.runRemoteQuestionsStep(p, pc, authStorage);
|
|
103
|
+
return;
|
|
104
|
+
case "tool-keys":
|
|
105
|
+
await ob.runToolKeysStep(p, pc, authStorage);
|
|
106
|
+
return;
|
|
107
|
+
case "model": {
|
|
108
|
+
// Delegate to /gsd model picker
|
|
109
|
+
const { handleCoreCommand } = await import("./core.js");
|
|
110
|
+
await handleCoreCommand("model", ctx);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
case "prefs": {
|
|
114
|
+
const { ensurePreferencesFile, handlePrefsWizard } = await import("../../commands-prefs-wizard.js");
|
|
115
|
+
const { getGlobalGSDPreferencesPath } = await import("../../preferences.js");
|
|
116
|
+
await ensurePreferencesFile(getGlobalGSDPreferencesPath(), ctx, "global");
|
|
117
|
+
await handlePrefsWizard(ctx, "global");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
case "doctor": {
|
|
121
|
+
// Best-effort: surface provider doctor results inline
|
|
122
|
+
try {
|
|
123
|
+
const { runProviderDoctor } = await import("../../doctor-providers.js");
|
|
124
|
+
if (typeof runProviderDoctor === "function") {
|
|
125
|
+
await runProviderDoctor(ctx);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch { /* fall through */ }
|
|
130
|
+
ctx.ui.notify("Run /gsd doctor to validate your setup.", "info");
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
case "skills": {
|
|
134
|
+
ctx.ui.notify("Skill install runs automatically during /gsd init. Use /gsd init or /skill manage.", "info");
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
case "project": {
|
|
138
|
+
const { handleCoreCommand } = await import("./core.js");
|
|
139
|
+
await handleCoreCommand("init", ctx);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function renderStatus() {
|
|
145
|
+
const r = readOnboardingRecord();
|
|
146
|
+
const lines = ["GSD Onboarding\n"];
|
|
147
|
+
if (r.completedAt) {
|
|
148
|
+
lines.push(` Completed: ${r.completedAt}`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
lines.push(` Status: not complete`);
|
|
152
|
+
}
|
|
153
|
+
if (r.lastResumePoint)
|
|
154
|
+
lines.push(` Last step: ${r.lastResumePoint}`);
|
|
155
|
+
lines.push("");
|
|
156
|
+
lines.push(" Steps:");
|
|
157
|
+
for (const step of ONBOARDING_STEPS) {
|
|
158
|
+
const mark = r.completedSteps.includes(step.id)
|
|
159
|
+
? "✓"
|
|
160
|
+
: r.skippedSteps.includes(step.id)
|
|
161
|
+
? "↷"
|
|
162
|
+
: "○";
|
|
163
|
+
const reqTag = step.required ? " (required)" : "";
|
|
164
|
+
lines.push(` ${mark} ${step.id.padEnd(10)} — ${step.label}${reqTag}`);
|
|
165
|
+
}
|
|
166
|
+
return lines.join("\n");
|
|
167
|
+
}
|
|
168
|
+
export async function handleOnboarding(rawArgs, ctx) {
|
|
169
|
+
const args = parseArgs(rawArgs.trim());
|
|
170
|
+
if (args.step !== null) {
|
|
171
|
+
if (!args.stepValid) {
|
|
172
|
+
const validIds = ONBOARDING_STEPS.map(s => s.id).join(", ");
|
|
173
|
+
ctx.ui.notify(`Unknown step "${args.step}". Valid: ${validIds}`, "warning");
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
await runSingleStep(ctx, args.step);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (args.reset) {
|
|
180
|
+
resetOnboarding();
|
|
181
|
+
ctx.ui.notify("Onboarding reset. Existing API keys/credentials are unchanged — manage them with /gsd keys.", "info");
|
|
182
|
+
await runWholeWizard(ctx);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (args.resume) {
|
|
186
|
+
const r = readOnboardingRecord();
|
|
187
|
+
const next = nearestResumeStep(r.lastResumePoint, r.completedSteps);
|
|
188
|
+
await runWholeWizard(ctx, next);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// No flags. If already complete, show status + offer choice.
|
|
192
|
+
if (isOnboardingComplete()) {
|
|
193
|
+
ctx.ui.notify(renderStatus(), "info");
|
|
194
|
+
ctx.ui.notify("Onboarding already complete. Use /gsd onboarding --reset to start over, or --step <name> to redo one section.", "info");
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
await runWholeWizard(ctx);
|
|
198
|
+
}
|
|
199
|
+
export { renderStatus as renderOnboardingStatus };
|
|
@@ -3,6 +3,7 @@ import { handleConfig } from "../../commands-config.js";
|
|
|
3
3
|
import { handleDoctor, handleCapture, handleKnowledge, handleRunHook, handleSkillHealth, handleSteer, handleTriage, handleUpdate } from "../../commands-handlers.js";
|
|
4
4
|
import { handleInspect } from "../../commands-inspect.js";
|
|
5
5
|
import { handleLogs } from "../../commands-logs.js";
|
|
6
|
+
import { handleDebug } from "../../commands-debug.js";
|
|
6
7
|
import { handleCleanupBranches, handleCleanupSnapshots, handleSkip, handleCleanupProjects, handleCleanupWorktrees, handleRecover } from "../../commands-maintenance.js";
|
|
7
8
|
import { handleExport } from "../../export.js";
|
|
8
9
|
import { handleHistory } from "../../history.js";
|
|
@@ -39,6 +40,10 @@ export async function handleOpsCommand(trimmed, ctx, pi) {
|
|
|
39
40
|
await handleLogs(trimmed.replace(/^logs\s*/, "").trim(), ctx);
|
|
40
41
|
return true;
|
|
41
42
|
}
|
|
43
|
+
if (trimmed === "debug" || trimmed.startsWith("debug ")) {
|
|
44
|
+
await handleDebug(trimmed.replace(/^debug\s*/, "").trim(), ctx, pi);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
42
47
|
if (trimmed === "forensics" || trimmed.startsWith("forensics ")) {
|
|
43
48
|
const { handleForensics } = await import("../../forensics.js");
|
|
44
49
|
await handleForensics(trimmed.replace(/^forensics\s*/, "").trim(), ctx, pi);
|
|
@@ -183,6 +188,11 @@ Examples:
|
|
|
183
188
|
await handleNotificationsCommand(trimmed.replace(/^notifications\s*/, "").trim(), ctx, pi);
|
|
184
189
|
return true;
|
|
185
190
|
}
|
|
191
|
+
if (trimmed === "escalate" || trimmed.startsWith("escalate ")) {
|
|
192
|
+
const { handleEscalateCommand } = await import("./escalate.js");
|
|
193
|
+
await handleEscalateCommand(trimmed.replace(/^escalate\s*/, "").trim(), ctx, pi);
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
186
196
|
if (trimmed === "inspect") {
|
|
187
197
|
await handleInspect(ctx);
|
|
188
198
|
return true;
|
|
@@ -238,5 +248,11 @@ Examples:
|
|
|
238
248
|
await handleExtractLearnings(trimmed.replace(/^extract-learnings\s*/, "").trim(), ctx, pi);
|
|
239
249
|
return true;
|
|
240
250
|
}
|
|
251
|
+
if (trimmed === "scan" || trimmed.startsWith("scan ")) {
|
|
252
|
+
const { handleScan } = await import("../../commands-scan.js");
|
|
253
|
+
// \s* (not \s+) is intentional: handles both /gsd scan (no args) and /gsd scan --focus X
|
|
254
|
+
await handleScan(trimmed.replace(/^scan\s*/, "").trim(), ctx, pi);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
241
257
|
return false;
|
|
242
258
|
}
|