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
|
@@ -36,11 +36,17 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
|
|
|
36
36
|
" /gsd undo Revert last completed unit [--force]",
|
|
37
37
|
" /gsd rethink Conversational project reorganization",
|
|
38
38
|
"",
|
|
39
|
+
"OBSERVABILITY",
|
|
40
|
+
" /gsd logs Browse activity and debug logs",
|
|
41
|
+
" /gsd debug Create/list/continue persistent debug sessions",
|
|
42
|
+
"",
|
|
39
43
|
"SETUP",
|
|
44
|
+
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
45
|
+
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
40
46
|
" /gsd init Project init wizard",
|
|
41
|
-
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
42
47
|
" /gsd model Switch active session model",
|
|
43
|
-
" /gsd prefs Manage preferences",
|
|
48
|
+
" /gsd prefs Manage preferences (alias for /gsd setup prefs)",
|
|
49
|
+
" /gsd keys API key manager (LLM + tool keys)",
|
|
44
50
|
" /gsd doctor Diagnose and repair .gsd/ state",
|
|
45
51
|
"",
|
|
46
52
|
"Use /gsd help full for the complete command reference.",
|
|
@@ -67,6 +73,8 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
|
|
|
67
73
|
" /gsd history View execution history [--cost] [--phase] [--model] [N]",
|
|
68
74
|
" /gsd changelog Show categorized release notes [version]",
|
|
69
75
|
` /gsd notifications View persistent notification history [clear|tail|filter] (${formattedShortcutPair("notifications")})`,
|
|
76
|
+
" /gsd logs Browse activity logs, debug logs, and metrics",
|
|
77
|
+
" /gsd debug Create/list/continue persistent debug sessions",
|
|
70
78
|
"",
|
|
71
79
|
"COURSE CORRECTION",
|
|
72
80
|
" /gsd steer <desc> Apply user override to active work",
|
|
@@ -83,14 +91,15 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
|
|
|
83
91
|
" /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
|
|
84
92
|
"",
|
|
85
93
|
"SETUP & CONFIGURATION",
|
|
94
|
+
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
95
|
+
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
86
96
|
" /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
|
|
87
|
-
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
88
97
|
" /gsd model Switch active session model [provider/model|model-id]",
|
|
89
98
|
" /gsd mode Set workflow mode (solo/team) [global|project]",
|
|
90
|
-
" /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude]",
|
|
99
|
+
" /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude] (alias for /gsd setup prefs)",
|
|
91
100
|
" /gsd cmux Manage cmux integration [status|on|off|notifications|sidebar|splits|browser]",
|
|
92
|
-
" /gsd
|
|
93
|
-
" /gsd
|
|
101
|
+
" /gsd keys API key manager (LLM + tool keys) [list|add|remove|test|rotate|doctor]",
|
|
102
|
+
" /gsd config (deprecated) Set tool API keys — use /gsd keys instead",
|
|
94
103
|
" /gsd show-config Show effective configuration (models, routing, toggles)",
|
|
95
104
|
" /gsd hooks Show post-unit hook configuration",
|
|
96
105
|
" /gsd extensions Manage extensions [list|enable|disable|info]",
|
|
@@ -170,32 +179,39 @@ export async function handleVisualize(ctx: ExtensionCommandContext): Promise<voi
|
|
|
170
179
|
}
|
|
171
180
|
}
|
|
172
181
|
|
|
173
|
-
export async function handleSetup(args: string, ctx: ExtensionCommandContext): Promise<void> {
|
|
182
|
+
export async function handleSetup(args: string, ctx: ExtensionCommandContext, pi?: ExtensionAPI): Promise<void> {
|
|
174
183
|
const { detectProjectState, hasGlobalSetup } = await import("../../detection.js");
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
+
const { isOnboardingComplete, readOnboardingRecord } = await import("../../onboarding-state.js");
|
|
185
|
+
|
|
186
|
+
// Sub-route dispatch — keep redirects but route the canonical work to /gsd
|
|
187
|
+
// onboarding (single source for wizard steps) and /gsd keys (single source
|
|
188
|
+
// for credentials).
|
|
189
|
+
if (args === "onboarding" || args === "wizard") {
|
|
190
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
191
|
+
await handleOnboarding("", ctx);
|
|
192
|
+
return;
|
|
184
193
|
}
|
|
185
|
-
|
|
186
194
|
if (args === "llm" || args === "auth") {
|
|
187
|
-
|
|
195
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
196
|
+
await handleOnboarding("--step llm", ctx);
|
|
188
197
|
return;
|
|
189
198
|
}
|
|
190
199
|
if (args === "search") {
|
|
191
|
-
|
|
200
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
201
|
+
await handleOnboarding("--step search", ctx);
|
|
192
202
|
return;
|
|
193
203
|
}
|
|
194
204
|
if (args === "remote") {
|
|
195
|
-
|
|
205
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
206
|
+
await handleOnboarding("--step remote", ctx);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (args === "model") {
|
|
210
|
+
await handleModel("", ctx, pi);
|
|
196
211
|
return;
|
|
197
212
|
}
|
|
198
213
|
if (args === "keys") {
|
|
214
|
+
ctx.ui.notify("Tip: /gsd keys is the canonical command for API key management.", "info");
|
|
199
215
|
const { handleKeys } = await import("../../key-manager.js");
|
|
200
216
|
await handleKeys("", ctx);
|
|
201
217
|
return;
|
|
@@ -206,14 +222,35 @@ export async function handleSetup(args: string, ctx: ExtensionCommandContext): P
|
|
|
206
222
|
return;
|
|
207
223
|
}
|
|
208
224
|
|
|
225
|
+
// Bare /gsd setup — render the hub: status + actions
|
|
226
|
+
const globalConfigured = hasGlobalSetup();
|
|
227
|
+
const detection = detectProjectState(projectRoot());
|
|
228
|
+
const onboardingDone = isOnboardingComplete();
|
|
229
|
+
const record = readOnboardingRecord();
|
|
230
|
+
|
|
231
|
+
const statusLines: string[] = ["GSD Setup\n"];
|
|
232
|
+
statusLines.push(
|
|
233
|
+
onboardingDone
|
|
234
|
+
? ` Onboarding: ✓ complete${record.completedAt ? ` (${record.completedAt.slice(0, 10)})` : ""}`
|
|
235
|
+
: ` Onboarding: ○ not complete — /gsd onboarding to start`,
|
|
236
|
+
);
|
|
237
|
+
statusLines.push(` Global preferences: ${globalConfigured ? "configured" : "not set"}`);
|
|
238
|
+
statusLines.push(` Project state: ${detection.state}`);
|
|
239
|
+
if (detection.projectSignals.primaryLanguage) {
|
|
240
|
+
statusLines.push(` Detected: ${detection.projectSignals.primaryLanguage}`);
|
|
241
|
+
}
|
|
242
|
+
|
|
209
243
|
ctx.ui.notify(statusLines.join("\n"), "info");
|
|
210
244
|
ctx.ui.notify(
|
|
211
|
-
"
|
|
212
|
-
" /gsd setup llm
|
|
213
|
-
" /gsd setup
|
|
214
|
-
" /gsd setup
|
|
215
|
-
" /gsd setup
|
|
216
|
-
" /gsd setup
|
|
245
|
+
"Configuration hub:\n" +
|
|
246
|
+
" /gsd setup llm — LLM provider & auth\n" +
|
|
247
|
+
" /gsd setup model — Default model picker\n" +
|
|
248
|
+
" /gsd setup search — Web search provider\n" +
|
|
249
|
+
" /gsd setup remote — Remote questions (Discord/Slack/Telegram)\n" +
|
|
250
|
+
" /gsd setup keys — API keys (alias for /gsd keys)\n" +
|
|
251
|
+
" /gsd setup prefs — Global preferences (alias for /gsd prefs)\n" +
|
|
252
|
+
" /gsd setup onboarding — Full wizard (alias for /gsd onboarding)\n\n" +
|
|
253
|
+
"Tip: /gsd onboarding --resume to continue an incomplete setup.",
|
|
217
254
|
"info",
|
|
218
255
|
);
|
|
219
256
|
}
|
|
@@ -423,7 +460,12 @@ export async function handleCoreCommand(
|
|
|
423
460
|
return true;
|
|
424
461
|
}
|
|
425
462
|
if (trimmed === "setup" || trimmed.startsWith("setup ")) {
|
|
426
|
-
await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx);
|
|
463
|
+
await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx, pi);
|
|
464
|
+
return true;
|
|
465
|
+
}
|
|
466
|
+
if (trimmed === "onboarding" || trimmed.startsWith("onboarding ")) {
|
|
467
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
468
|
+
await handleOnboarding(trimmed.replace(/^onboarding\s*/, "").trim(), ctx);
|
|
427
469
|
return true;
|
|
428
470
|
}
|
|
429
471
|
return false;
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// GSD Extension — /gsd escalate Command Handler (ADR-011 Phase 2)
|
|
2
|
+
// Surface and resolve mid-execution escalations from the CLI.
|
|
3
|
+
|
|
4
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
5
|
+
|
|
6
|
+
import { projectRoot } from "../context.js";
|
|
7
|
+
import { getActiveMilestoneId } from "../../state.js";
|
|
8
|
+
import {
|
|
9
|
+
readEscalationArtifact,
|
|
10
|
+
formatEscalationForDisplay,
|
|
11
|
+
resolveEscalation,
|
|
12
|
+
listActionableEscalations,
|
|
13
|
+
listAllEscalations,
|
|
14
|
+
} from "../../escalation.js";
|
|
15
|
+
import { saveDecisionToDb } from "../../db-writer.js";
|
|
16
|
+
import { loadEffectiveGSDPreferences } from "../../preferences.js";
|
|
17
|
+
import { invalidateStateCache } from "../../state.js";
|
|
18
|
+
import { emitUokAuditEvent, buildAuditEnvelope } from "../../uok/audit.js";
|
|
19
|
+
|
|
20
|
+
function helpMessage(): string {
|
|
21
|
+
return [
|
|
22
|
+
"/gsd escalate — manage mid-execution escalations (ADR-011 Phase 2)",
|
|
23
|
+
"",
|
|
24
|
+
"Subcommands:",
|
|
25
|
+
" list [--all] show pending escalations (use --all to include resolved)",
|
|
26
|
+
" show <taskId> print the escalation artifact",
|
|
27
|
+
" resolve <taskId> <choice> [rationale...]",
|
|
28
|
+
" resolve an escalation — choice is an option id,",
|
|
29
|
+
" `accept` (use recommendation), or `reject-blocker`",
|
|
30
|
+
" (convert to a blocker and trigger slice replan)",
|
|
31
|
+
"",
|
|
32
|
+
"Note: disabling `phases.mid_execution_escalation` does NOT clear pending",
|
|
33
|
+
"escalations. If you need to drain them, re-enable the flag, resolve via",
|
|
34
|
+
"`/gsd escalate resolve`, then disable.",
|
|
35
|
+
].join("\n");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function formatListEntries(
|
|
39
|
+
rows: ReturnType<typeof listActionableEscalations>,
|
|
40
|
+
basePath: string,
|
|
41
|
+
): string {
|
|
42
|
+
if (rows.length === 0) return "No escalations.";
|
|
43
|
+
return rows.map((t) => {
|
|
44
|
+
const art = t.escalation_artifact_path ? readEscalationArtifact(t.escalation_artifact_path) : null;
|
|
45
|
+
const status = t.escalation_pending ? "PENDING (paused)" : t.escalation_awaiting_review ? "awaiting-review" : "resolved";
|
|
46
|
+
const question = art?.question ?? "(artifact missing)";
|
|
47
|
+
return ` ${t.slice_id}/${t.id} [${status}] ${question}`;
|
|
48
|
+
}).join("\n");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export async function handleEscalateCommand(
|
|
52
|
+
args: string,
|
|
53
|
+
ctx: ExtensionCommandContext,
|
|
54
|
+
pi: ExtensionAPI,
|
|
55
|
+
): Promise<void> {
|
|
56
|
+
void pi;
|
|
57
|
+
|
|
58
|
+
const trimmed = args.trim();
|
|
59
|
+
if (trimmed === "" || trimmed === "help") {
|
|
60
|
+
ctx.ui.notify(helpMessage(), "info");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const basePath = projectRoot();
|
|
65
|
+
const prefs = loadEffectiveGSDPreferences()?.preferences;
|
|
66
|
+
if (prefs?.phases?.mid_execution_escalation !== true) {
|
|
67
|
+
ctx.ui.notify(
|
|
68
|
+
"Escalation is off. Enable with `phases: { mid_execution_escalation: true }` in your PREFERENCES.md.",
|
|
69
|
+
"warning",
|
|
70
|
+
);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const milestoneId = await getActiveMilestoneId(basePath);
|
|
75
|
+
if (!milestoneId) {
|
|
76
|
+
ctx.ui.notify("No active milestone — cannot list escalations.", "warning");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ── list ────────────────────────────────────────────────────────────────
|
|
81
|
+
if (trimmed === "list" || trimmed === "list --all" || trimmed === "--all") {
|
|
82
|
+
const includeAll = trimmed.includes("--all");
|
|
83
|
+
const rows = includeAll ? listAllEscalations(milestoneId) : listActionableEscalations(milestoneId);
|
|
84
|
+
const body = formatListEntries(rows, basePath);
|
|
85
|
+
ctx.ui.notify(
|
|
86
|
+
`${includeAll ? "All escalations" : "Actionable escalations"} for ${milestoneId}:\n${body}`,
|
|
87
|
+
"info",
|
|
88
|
+
);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Parse a possibly-slice-qualified task id: "Sxx/Tyy" or plain "Tyy".
|
|
93
|
+
// Returns { sliceId?, taskId }.
|
|
94
|
+
const parseTaskRef = (ref: string): { sliceId?: string; taskId: string } => {
|
|
95
|
+
const slash = ref.indexOf("/");
|
|
96
|
+
if (slash > 0) {
|
|
97
|
+
return { sliceId: ref.slice(0, slash), taskId: ref.slice(slash + 1) };
|
|
98
|
+
}
|
|
99
|
+
return { taskId: ref };
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// Resolve a task ref to a single row, surfacing ambiguity when a bare task
|
|
103
|
+
// id matches more than one slice.
|
|
104
|
+
const locateRow = (ref: string): ReturnType<typeof listAllEscalations>[number] | "ambiguous" | "not-found" => {
|
|
105
|
+
const { sliceId, taskId } = parseTaskRef(ref);
|
|
106
|
+
const rows = listAllEscalations(milestoneId).filter(
|
|
107
|
+
(t) => t.id === taskId && (sliceId === undefined || t.slice_id === sliceId),
|
|
108
|
+
);
|
|
109
|
+
if (rows.length === 0) return "not-found";
|
|
110
|
+
if (rows.length > 1) return "ambiguous";
|
|
111
|
+
return rows[0]!;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// ── show <taskRef> ──────────────────────────────────────────────────────
|
|
115
|
+
if (trimmed.startsWith("show ")) {
|
|
116
|
+
const ref = trimmed.slice(5).trim();
|
|
117
|
+
const row = locateRow(ref);
|
|
118
|
+
if (row === "ambiguous") {
|
|
119
|
+
ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (row === "not-found" || !row.escalation_artifact_path) {
|
|
123
|
+
ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const art = readEscalationArtifact(row.escalation_artifact_path);
|
|
127
|
+
if (!art) {
|
|
128
|
+
ctx.ui.notify(`Escalation artifact at ${row.escalation_artifact_path} is missing or malformed.`, "error");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
ctx.ui.notify(formatEscalationForDisplay(art), "info");
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// ── resolve <taskRef> <choice> [rationale...] ───────────────────────────
|
|
136
|
+
if (trimmed.startsWith("resolve ")) {
|
|
137
|
+
const parts = trimmed.slice(8).trim().split(/\s+/);
|
|
138
|
+
const ref = parts[0];
|
|
139
|
+
const choice = parts[1];
|
|
140
|
+
const rationale = parts.slice(2).join(" ").trim();
|
|
141
|
+
if (!ref || !choice) {
|
|
142
|
+
ctx.ui.notify("Usage: /gsd escalate resolve <taskId|Sxx/Tyy> <choice> [rationale...]", "warning");
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const row = locateRow(ref);
|
|
147
|
+
if (row === "ambiguous") {
|
|
148
|
+
ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (row === "not-found") {
|
|
152
|
+
ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const taskId = row.id;
|
|
156
|
+
|
|
157
|
+
const result = resolveEscalation(basePath, milestoneId, row.slice_id, taskId, choice, rationale);
|
|
158
|
+
invalidateStateCache();
|
|
159
|
+
|
|
160
|
+
if (result.status !== "resolved" && result.status !== "rejected-to-blocker") {
|
|
161
|
+
ctx.ui.notify(result.message, result.status === "invalid-choice" ? "warning" : "error");
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Persist the user's choice as a decision (only for resolved, not reject-blocker).
|
|
166
|
+
if (result.status === "resolved") {
|
|
167
|
+
try {
|
|
168
|
+
const art = row.escalation_artifact_path ? readEscalationArtifact(row.escalation_artifact_path) : null;
|
|
169
|
+
const scope = `${milestoneId}/${row.slice_id}/${taskId}`;
|
|
170
|
+
const decisionText = art?.question ?? `escalation on ${taskId}`;
|
|
171
|
+
const choiceLabel = choice === "accept"
|
|
172
|
+
? `${art?.recommendation ?? "accepted"} (recommended)`
|
|
173
|
+
: (result.chosenOption?.label ?? choice);
|
|
174
|
+
const { id: decisionId } = await saveDecisionToDb({
|
|
175
|
+
scope,
|
|
176
|
+
decision: decisionText,
|
|
177
|
+
choice: choiceLabel,
|
|
178
|
+
rationale: rationale || result.chosenOption?.tradeoffs || "User-resolved escalation.",
|
|
179
|
+
made_by: "human",
|
|
180
|
+
source: "escalation",
|
|
181
|
+
when_context: `ADR-011 escalation resolved ${new Date().toISOString()}`,
|
|
182
|
+
}, basePath);
|
|
183
|
+
|
|
184
|
+
emitUokAuditEvent(basePath, buildAuditEnvelope({
|
|
185
|
+
traceId: `escalation:${milestoneId}:${row.slice_id}:${taskId}`,
|
|
186
|
+
category: "gate",
|
|
187
|
+
type: "escalation-decision-persisted",
|
|
188
|
+
payload: {
|
|
189
|
+
milestoneId,
|
|
190
|
+
sliceId: row.slice_id,
|
|
191
|
+
taskId,
|
|
192
|
+
decisionId,
|
|
193
|
+
choice,
|
|
194
|
+
},
|
|
195
|
+
}));
|
|
196
|
+
|
|
197
|
+
ctx.ui.notify(
|
|
198
|
+
`${result.message}\nDecision recorded as ${decisionId}. Run /gsd auto to continue.`,
|
|
199
|
+
"success",
|
|
200
|
+
);
|
|
201
|
+
} catch (decErr) {
|
|
202
|
+
ctx.ui.notify(
|
|
203
|
+
`${result.message}\nWARN: decision persistence failed: ${(decErr as Error).message}`,
|
|
204
|
+
"warning",
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// rejected-to-blocker path
|
|
211
|
+
ctx.ui.notify(`${result.message} Run /gsd auto to trigger the replan.`, "success");
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
ctx.ui.notify(`Unknown subcommand. ${helpMessage()}`, "warning");
|
|
216
|
+
}
|
|
@@ -0,0 +1,262 @@
|
|
|
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
|
+
|
|
7
|
+
import type { ExtensionCommandContext } from "@gsd/pi-coding-agent"
|
|
8
|
+
import { AuthStorage } from "@gsd/pi-coding-agent"
|
|
9
|
+
import { homedir } from "node:os"
|
|
10
|
+
import { dirname, join, resolve } from "node:path"
|
|
11
|
+
import { pathToFileURL } from "node:url"
|
|
12
|
+
import {
|
|
13
|
+
ONBOARDING_STEPS,
|
|
14
|
+
isValidStepId,
|
|
15
|
+
nearestResumeStep,
|
|
16
|
+
type OnboardingStepId,
|
|
17
|
+
} from "../../setup-catalog.js"
|
|
18
|
+
import {
|
|
19
|
+
isOnboardingComplete,
|
|
20
|
+
readOnboardingRecord,
|
|
21
|
+
resetOnboarding,
|
|
22
|
+
} from "../../onboarding-state.js"
|
|
23
|
+
|
|
24
|
+
// Inline auth path (mirrors src/app-paths.ts) — keep this module rootDir-clean
|
|
25
|
+
// for the resources tsconfig. Importing from src/ pulls files outside
|
|
26
|
+
// src/resources and breaks the build.
|
|
27
|
+
const AUTH_FILE_PATH = join(
|
|
28
|
+
process.env.GSD_CODING_AGENT_DIR ||
|
|
29
|
+
join(process.env.GSD_HOME || join(homedir(), ".gsd"), "agent"),
|
|
30
|
+
"auth.json",
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Dynamic import shim for the first-run wizard.
|
|
35
|
+
*
|
|
36
|
+
* src/onboarding.ts lives outside the resources rootDir, so a static import
|
|
37
|
+
* pulls it into this tsconfig project and triggers TS6059. We resolve the
|
|
38
|
+
* specifier through a variable + opaque type so TS can't pull the file at
|
|
39
|
+
* compile time; the path resolves correctly at runtime via dist/onboarding.js.
|
|
40
|
+
*/
|
|
41
|
+
type FirstRunWizardModule = {
|
|
42
|
+
runOnboarding: (
|
|
43
|
+
storage: AuthStorage,
|
|
44
|
+
opts?: { showIntro?: boolean },
|
|
45
|
+
) => Promise<void>
|
|
46
|
+
runLlmStep: (...args: unknown[]) => Promise<unknown>
|
|
47
|
+
runWebSearchStep: (...args: unknown[]) => Promise<unknown>
|
|
48
|
+
runRemoteQuestionsStep: (...args: unknown[]) => Promise<unknown>
|
|
49
|
+
runToolKeysStep: (...args: unknown[]) => Promise<unknown>
|
|
50
|
+
}
|
|
51
|
+
async function loadFirstRunWizard(): Promise<FirstRunWizardModule> {
|
|
52
|
+
const candidates: string[] = []
|
|
53
|
+
|
|
54
|
+
// Primary deployed path: loader sets GSD_PKG_ROOT (gsd package root).
|
|
55
|
+
if (process.env.GSD_PKG_ROOT) {
|
|
56
|
+
candidates.push(pathToFileURL(join(process.env.GSD_PKG_ROOT, "dist", "onboarding.js")).href)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Fallback: derive package root from process entry (typically dist/loader.js).
|
|
60
|
+
// This keeps /gsd onboarding resilient if GSD_PKG_ROOT is absent.
|
|
61
|
+
const argvEntry = process.argv[1]
|
|
62
|
+
if (argvEntry) {
|
|
63
|
+
const pkgRootFromArgv = resolve(dirname(argvEntry), "..")
|
|
64
|
+
candidates.push(pathToFileURL(join(pkgRootFromArgv, "dist", "onboarding.js")).href)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Source-tree/dev fallback (works in dist/resources/... and ts test loaders).
|
|
68
|
+
candidates.push("../../../../../onboarding.js")
|
|
69
|
+
|
|
70
|
+
let lastError: unknown = null
|
|
71
|
+
for (const specifier of candidates) {
|
|
72
|
+
try {
|
|
73
|
+
return (await import(/* @vite-ignore */ specifier)) as FirstRunWizardModule
|
|
74
|
+
} catch (err) {
|
|
75
|
+
lastError = err
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const reason = lastError instanceof Error ? lastError.message : String(lastError)
|
|
80
|
+
throw new Error(
|
|
81
|
+
`[gsd] Failed to load onboarding wizard module. Tried: ${candidates.join(", ")}. Last error: ${reason}`,
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface ParsedArgs {
|
|
86
|
+
resume: boolean
|
|
87
|
+
reset: boolean
|
|
88
|
+
step: string | null
|
|
89
|
+
stepValid: boolean | null
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function parseArgs(raw: string): ParsedArgs {
|
|
93
|
+
const tokens = raw.split(/\s+/).filter(Boolean)
|
|
94
|
+
const out: ParsedArgs = { resume: false, reset: false, step: null, stepValid: null }
|
|
95
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
96
|
+
const t = tokens[i]
|
|
97
|
+
if (t === "--resume" || t === "resume") out.resume = true
|
|
98
|
+
else if (t === "--reset" || t === "reset") out.reset = true
|
|
99
|
+
else if (t === "--step" || t === "step") {
|
|
100
|
+
const next = tokens[i + 1]
|
|
101
|
+
if (next) {
|
|
102
|
+
out.step = next
|
|
103
|
+
out.stepValid = isValidStepId(next)
|
|
104
|
+
i++
|
|
105
|
+
}
|
|
106
|
+
} else if (t.startsWith("--step=")) {
|
|
107
|
+
const v = t.slice(7)
|
|
108
|
+
out.step = v
|
|
109
|
+
out.stepValid = isValidStepId(v)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return out
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async function getAuthStorage(): Promise<AuthStorage> {
|
|
116
|
+
return AuthStorage.create(AUTH_FILE_PATH)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
async function runWholeWizard(ctx: ExtensionCommandContext, fromStep?: OnboardingStepId): Promise<void> {
|
|
120
|
+
const authStorage = await getAuthStorage()
|
|
121
|
+
// The first-run wizard ignores the resume hint today — it always walks the
|
|
122
|
+
// full sequence with skip prompts. We still mark completion at the end and
|
|
123
|
+
// record the resume hint for next time. This keeps the wizard linear and
|
|
124
|
+
// simple; per-step jump support comes via --step.
|
|
125
|
+
if (fromStep) {
|
|
126
|
+
ctx.ui.notify(
|
|
127
|
+
`Resuming from step: ${fromStep}. The wizard runs all remaining steps; press skip on any you've already configured.`,
|
|
128
|
+
"info",
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
const { runOnboarding } = await loadFirstRunWizard()
|
|
132
|
+
await runOnboarding(authStorage, { showIntro: false })
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function runSingleStep(ctx: ExtensionCommandContext, stepId: OnboardingStepId): Promise<void> {
|
|
136
|
+
const authStorage = await getAuthStorage()
|
|
137
|
+
const ob = await loadFirstRunWizard()
|
|
138
|
+
// Lazy-load clack + chalk via the same path the wizard uses
|
|
139
|
+
const p = await import("@clack/prompts")
|
|
140
|
+
const { default: chalk } = await import("chalk")
|
|
141
|
+
const pc = {
|
|
142
|
+
cyan: chalk.cyan, green: chalk.green, yellow: chalk.yellow,
|
|
143
|
+
dim: chalk.dim, bold: chalk.bold, red: chalk.red, reset: chalk.reset,
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
switch (stepId) {
|
|
147
|
+
case "llm":
|
|
148
|
+
await ob.runLlmStep(p as any, pc as any, authStorage)
|
|
149
|
+
return
|
|
150
|
+
case "search":
|
|
151
|
+
await ob.runWebSearchStep(p as any, pc as any, authStorage, false)
|
|
152
|
+
return
|
|
153
|
+
case "remote":
|
|
154
|
+
await ob.runRemoteQuestionsStep(p as any, pc as any, authStorage)
|
|
155
|
+
return
|
|
156
|
+
case "tool-keys":
|
|
157
|
+
await ob.runToolKeysStep(p as any, pc as any, authStorage)
|
|
158
|
+
return
|
|
159
|
+
case "model": {
|
|
160
|
+
// Delegate to /gsd model picker
|
|
161
|
+
const { handleCoreCommand } = await import("./core.js")
|
|
162
|
+
await handleCoreCommand("model", ctx)
|
|
163
|
+
return
|
|
164
|
+
}
|
|
165
|
+
case "prefs": {
|
|
166
|
+
const { ensurePreferencesFile, handlePrefsWizard } = await import("../../commands-prefs-wizard.js")
|
|
167
|
+
const { getGlobalGSDPreferencesPath } = await import("../../preferences.js")
|
|
168
|
+
await ensurePreferencesFile(getGlobalGSDPreferencesPath(), ctx, "global")
|
|
169
|
+
await handlePrefsWizard(ctx, "global")
|
|
170
|
+
return
|
|
171
|
+
}
|
|
172
|
+
case "doctor": {
|
|
173
|
+
// Best-effort: surface provider doctor results inline
|
|
174
|
+
try {
|
|
175
|
+
const { runProviderDoctor } = await import("../../doctor-providers.js") as any
|
|
176
|
+
if (typeof runProviderDoctor === "function") {
|
|
177
|
+
await runProviderDoctor(ctx)
|
|
178
|
+
return
|
|
179
|
+
}
|
|
180
|
+
} catch { /* fall through */ }
|
|
181
|
+
ctx.ui.notify("Run /gsd doctor to validate your setup.", "info")
|
|
182
|
+
return
|
|
183
|
+
}
|
|
184
|
+
case "skills": {
|
|
185
|
+
ctx.ui.notify("Skill install runs automatically during /gsd init. Use /gsd init or /skill manage.", "info")
|
|
186
|
+
return
|
|
187
|
+
}
|
|
188
|
+
case "project": {
|
|
189
|
+
const { handleCoreCommand } = await import("./core.js")
|
|
190
|
+
await handleCoreCommand("init", ctx)
|
|
191
|
+
return
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function renderStatus(): string {
|
|
197
|
+
const r = readOnboardingRecord()
|
|
198
|
+
const lines: string[] = ["GSD Onboarding\n"]
|
|
199
|
+
if (r.completedAt) {
|
|
200
|
+
lines.push(` Completed: ${r.completedAt}`)
|
|
201
|
+
} else {
|
|
202
|
+
lines.push(` Status: not complete`)
|
|
203
|
+
}
|
|
204
|
+
if (r.lastResumePoint) lines.push(` Last step: ${r.lastResumePoint}`)
|
|
205
|
+
lines.push("")
|
|
206
|
+
lines.push(" Steps:")
|
|
207
|
+
for (const step of ONBOARDING_STEPS) {
|
|
208
|
+
const mark = r.completedSteps.includes(step.id)
|
|
209
|
+
? "✓"
|
|
210
|
+
: r.skippedSteps.includes(step.id)
|
|
211
|
+
? "↷"
|
|
212
|
+
: "○"
|
|
213
|
+
const reqTag = step.required ? " (required)" : ""
|
|
214
|
+
lines.push(` ${mark} ${step.id.padEnd(10)} — ${step.label}${reqTag}`)
|
|
215
|
+
}
|
|
216
|
+
return lines.join("\n")
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export async function handleOnboarding(rawArgs: string, ctx: ExtensionCommandContext): Promise<void> {
|
|
220
|
+
const args = parseArgs(rawArgs.trim())
|
|
221
|
+
|
|
222
|
+
if (args.step !== null) {
|
|
223
|
+
if (!args.stepValid) {
|
|
224
|
+
const validIds = ONBOARDING_STEPS.map(s => s.id).join(", ")
|
|
225
|
+
ctx.ui.notify(`Unknown step "${args.step}". Valid: ${validIds}`, "warning")
|
|
226
|
+
return
|
|
227
|
+
}
|
|
228
|
+
await runSingleStep(ctx, args.step as OnboardingStepId)
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (args.reset) {
|
|
233
|
+
resetOnboarding()
|
|
234
|
+
ctx.ui.notify(
|
|
235
|
+
"Onboarding reset. Existing API keys/credentials are unchanged — manage them with /gsd keys.",
|
|
236
|
+
"info",
|
|
237
|
+
)
|
|
238
|
+
await runWholeWizard(ctx)
|
|
239
|
+
return
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (args.resume) {
|
|
243
|
+
const r = readOnboardingRecord()
|
|
244
|
+
const next = nearestResumeStep(r.lastResumePoint, r.completedSteps)
|
|
245
|
+
await runWholeWizard(ctx, next)
|
|
246
|
+
return
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// No flags. If already complete, show status + offer choice.
|
|
250
|
+
if (isOnboardingComplete()) {
|
|
251
|
+
ctx.ui.notify(renderStatus(), "info")
|
|
252
|
+
ctx.ui.notify(
|
|
253
|
+
"Onboarding already complete. Use /gsd onboarding --reset to start over, or --step <name> to redo one section.",
|
|
254
|
+
"info",
|
|
255
|
+
)
|
|
256
|
+
return
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
await runWholeWizard(ctx)
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
export { renderStatus as renderOnboardingStatus }
|
|
@@ -6,6 +6,7 @@ import { handleConfig } from "../../commands-config.js";
|
|
|
6
6
|
import { handleDoctor, handleCapture, handleKnowledge, handleRunHook, handleSkillHealth, handleSteer, handleTriage, handleUpdate } from "../../commands-handlers.js";
|
|
7
7
|
import { handleInspect } from "../../commands-inspect.js";
|
|
8
8
|
import { handleLogs } from "../../commands-logs.js";
|
|
9
|
+
import { handleDebug } from "../../commands-debug.js";
|
|
9
10
|
import { handleCleanupBranches, handleCleanupSnapshots, handleSkip, handleCleanupProjects, handleCleanupWorktrees, handleRecover } from "../../commands-maintenance.js";
|
|
10
11
|
import { handleExport } from "../../export.js";
|
|
11
12
|
import { handleHistory } from "../../history.js";
|
|
@@ -42,6 +43,10 @@ export async function handleOpsCommand(trimmed: string, ctx: ExtensionCommandCon
|
|
|
42
43
|
await handleLogs(trimmed.replace(/^logs\s*/, "").trim(), ctx);
|
|
43
44
|
return true;
|
|
44
45
|
}
|
|
46
|
+
if (trimmed === "debug" || trimmed.startsWith("debug ")) {
|
|
47
|
+
await handleDebug(trimmed.replace(/^debug\s*/, "").trim(), ctx, pi);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
45
50
|
if (trimmed === "forensics" || trimmed.startsWith("forensics ")) {
|
|
46
51
|
const { handleForensics } = await import("../../forensics.js");
|
|
47
52
|
await handleForensics(trimmed.replace(/^forensics\s*/, "").trim(), ctx, pi);
|
|
@@ -186,6 +191,11 @@ Examples:
|
|
|
186
191
|
await handleNotificationsCommand(trimmed.replace(/^notifications\s*/, "").trim(), ctx, pi);
|
|
187
192
|
return true;
|
|
188
193
|
}
|
|
194
|
+
if (trimmed === "escalate" || trimmed.startsWith("escalate ")) {
|
|
195
|
+
const { handleEscalateCommand } = await import("./escalate.js");
|
|
196
|
+
await handleEscalateCommand(trimmed.replace(/^escalate\s*/, "").trim(), ctx, pi);
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
189
199
|
if (trimmed === "inspect") {
|
|
190
200
|
await handleInspect(ctx);
|
|
191
201
|
return true;
|
|
@@ -241,5 +251,11 @@ Examples:
|
|
|
241
251
|
await handleExtractLearnings(trimmed.replace(/^extract-learnings\s*/, "").trim(), ctx, pi);
|
|
242
252
|
return true;
|
|
243
253
|
}
|
|
254
|
+
if (trimmed === "scan" || trimmed.startsWith("scan ")) {
|
|
255
|
+
const { handleScan } = await import("../../commands-scan.js");
|
|
256
|
+
// \s* (not \s+) is intentional: handles both /gsd scan (no args) and /gsd scan --focus X
|
|
257
|
+
await handleScan(trimmed.replace(/^scan\s*/, "").trim(), ctx, pi);
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
244
260
|
return false;
|
|
245
261
|
}
|