gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.2203010a0
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 +15 -0
- package/dist/onboarding.js +94 -36
- 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 +10 -2
- 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 +22 -4
- 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 +175 -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 +7 -1
- package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
- 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/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 +16 -16
- 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 +16 -16
- 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 +13 -2
- 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 +22 -4
- 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 +229 -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 +15 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
- 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-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 +1 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
- 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/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/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 → 8FZqxNe9FxQDmsbRzR8tA}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → 8FZqxNe9FxQDmsbRzR8tA}/_ssgManifest.js +0 -0
|
@@ -146,6 +146,7 @@ import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
|
146
146
|
import {
|
|
147
147
|
createAutoWorktree,
|
|
148
148
|
enterAutoWorktree,
|
|
149
|
+
enterBranchModeForMilestone,
|
|
149
150
|
teardownAutoWorktree,
|
|
150
151
|
isInAutoWorktree,
|
|
151
152
|
getAutoWorktreePath,
|
|
@@ -160,6 +161,7 @@ import {
|
|
|
160
161
|
escapeStaleWorktree,
|
|
161
162
|
} from "./auto-worktree.js";
|
|
162
163
|
import { pruneQueueOrder } from "./queue-order.js";
|
|
164
|
+
import { startCommandPolling as _startCommandPolling, isRemoteConfigured } from "../remote-questions/manager.js";
|
|
163
165
|
|
|
164
166
|
import { debugLog, isDebugEnabled, writeDebugSummary } from "./debug-logger.js";
|
|
165
167
|
import {
|
|
@@ -168,6 +170,7 @@ import {
|
|
|
168
170
|
} from "./auto-recovery.js";
|
|
169
171
|
import { resolveDispatch, DISPATCH_RULES } from "./auto-dispatch.js";
|
|
170
172
|
import { getErrorMessage } from "./error-utils.js";
|
|
173
|
+
import { recoverFailedMigration } from "./migrate-external.js";
|
|
171
174
|
import { initRegistry, convertDispatchRules } from "./rule-registry.js";
|
|
172
175
|
import { emitJournalEvent as _emitJournalEvent, type JournalEntry } from "./journal.js";
|
|
173
176
|
import {
|
|
@@ -201,7 +204,7 @@ import {
|
|
|
201
204
|
} from "./auto-post-unit.js";
|
|
202
205
|
import { bootstrapAutoSession, openProjectDbIfPresent, type BootstrapDeps } from "./auto-start.js";
|
|
203
206
|
import { initHealthWidget } from "./health-widget.js";
|
|
204
|
-
import {
|
|
207
|
+
import { runLegacyAutoLoop, runUokKernelLoop, resolveAgentEnd, resolveAgentEndCancelled, _resetPendingResolve, isSessionSwitchInFlight, type LoopDeps, type ErrorContext } from "./auto-loop.js";
|
|
205
208
|
import { runAutoLoopWithUok } from "./uok/kernel.js";
|
|
206
209
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
207
210
|
// Slice-level parallelism (#2340)
|
|
@@ -326,6 +329,7 @@ export function startAutoDetached(
|
|
|
326
329
|
});
|
|
327
330
|
}
|
|
328
331
|
|
|
332
|
+
/** Returns true if the project is configured for `isolation:worktree` mode. */
|
|
329
333
|
export function shouldUseWorktreeIsolation(): boolean {
|
|
330
334
|
const prefs = loadEffectiveGSDPreferences()?.preferences?.git;
|
|
331
335
|
if (prefs?.isolation === "worktree") return true;
|
|
@@ -390,6 +394,27 @@ function deregisterSigtermHandler(): void {
|
|
|
390
394
|
s.sigtermHandler = null;
|
|
391
395
|
}
|
|
392
396
|
|
|
397
|
+
/**
|
|
398
|
+
* Wrapper: start background command polling for the configured remote channel
|
|
399
|
+
* (currently Telegram only). Stores the cleanup function on the session so
|
|
400
|
+
* every exit path can stop the interval via stopCommandPolling().
|
|
401
|
+
* No-op when no remote channel is configured.
|
|
402
|
+
*/
|
|
403
|
+
function startAutoCommandPolling(basePath: string): void {
|
|
404
|
+
if (!isRemoteConfigured()) return;
|
|
405
|
+
// Clear any existing interval before starting a new one (e.g. resume path).
|
|
406
|
+
stopAutoCommandPolling();
|
|
407
|
+
s.commandPollingCleanup = _startCommandPolling(basePath);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/** Wrapper: stop background command polling and clear the stored cleanup. */
|
|
411
|
+
function stopAutoCommandPolling(): void {
|
|
412
|
+
if (s.commandPollingCleanup) {
|
|
413
|
+
s.commandPollingCleanup();
|
|
414
|
+
s.commandPollingCleanup = null;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
393
418
|
export { type AutoDashboardData } from "./auto-dashboard.js";
|
|
394
419
|
|
|
395
420
|
export function getAutoDashboardData(): AutoDashboardData {
|
|
@@ -466,6 +491,15 @@ export function getAutoModeStartModel(): {
|
|
|
466
491
|
return s.autoModeStartModel;
|
|
467
492
|
}
|
|
468
493
|
|
|
494
|
+
/**
|
|
495
|
+
* Update the dashboard-facing dispatched model label.
|
|
496
|
+
* Used when runtime recovery switches models mid-unit (e.g. provider fallback)
|
|
497
|
+
* so the AUTO box reflects the active model immediately.
|
|
498
|
+
*/
|
|
499
|
+
export function setCurrentDispatchedModelId(model: { provider: string; id: string } | null): void {
|
|
500
|
+
s.currentDispatchedModelId = model ? `${model.provider}/${model.id}` : null;
|
|
501
|
+
}
|
|
502
|
+
|
|
469
503
|
// Tool tracking — delegates to auto-tool-tracking.ts
|
|
470
504
|
export function markToolStart(toolCallId: string, toolName?: string): void {
|
|
471
505
|
_markToolStart(toolCallId, s.active, toolName);
|
|
@@ -648,6 +682,7 @@ function handleLostSessionLock(
|
|
|
648
682
|
s.paused = false;
|
|
649
683
|
deactivateGSD();
|
|
650
684
|
clearUnitTimeout();
|
|
685
|
+
stopAutoCommandPolling();
|
|
651
686
|
restoreProjectRootEnv();
|
|
652
687
|
restoreMilestoneLockEnv();
|
|
653
688
|
deregisterSigtermHandler();
|
|
@@ -687,6 +722,7 @@ function cleanupAfterLoopExit(ctx: ExtensionContext): void {
|
|
|
687
722
|
s.active = false;
|
|
688
723
|
deactivateGSD();
|
|
689
724
|
clearUnitTimeout();
|
|
725
|
+
stopAutoCommandPolling();
|
|
690
726
|
restoreProjectRootEnv();
|
|
691
727
|
restoreMilestoneLockEnv();
|
|
692
728
|
|
|
@@ -735,6 +771,7 @@ export async function stopAuto(
|
|
|
735
771
|
// ── Step 1: Timers and locks ──
|
|
736
772
|
try {
|
|
737
773
|
clearUnitTimeout();
|
|
774
|
+
stopAutoCommandPolling();
|
|
738
775
|
if (lockBase()) clearLock(lockBase());
|
|
739
776
|
if (lockBase()) releaseSessionLock(lockBase());
|
|
740
777
|
} catch (e) {
|
|
@@ -1000,6 +1037,7 @@ export async function pauseAuto(
|
|
|
1000
1037
|
): Promise<void> {
|
|
1001
1038
|
if (!s.active) return;
|
|
1002
1039
|
clearUnitTimeout();
|
|
1040
|
+
stopAutoCommandPolling();
|
|
1003
1041
|
|
|
1004
1042
|
// Flush queued follow-up messages (#3512).
|
|
1005
1043
|
// Late async notifications (async_job_result, gsd-auto-wrapup) can trigger
|
|
@@ -1103,6 +1141,7 @@ function buildResolverDeps(): WorktreeResolverDeps {
|
|
|
1103
1141
|
teardownAutoWorktree,
|
|
1104
1142
|
createAutoWorktree,
|
|
1105
1143
|
enterAutoWorktree,
|
|
1144
|
+
enterBranchModeForMilestone,
|
|
1106
1145
|
getAutoWorktreePath,
|
|
1107
1146
|
autoCommitCurrentBranch,
|
|
1108
1147
|
getCurrentBranch,
|
|
@@ -1253,6 +1292,11 @@ function buildLoopDeps(): LoopDeps {
|
|
|
1253
1292
|
} as unknown as LoopDeps;
|
|
1254
1293
|
}
|
|
1255
1294
|
|
|
1295
|
+
/**
|
|
1296
|
+
* Start auto-mode. Handles both fresh-start and resume paths, sets up session
|
|
1297
|
+
* state, enters the milestone worktree or branch, and dispatches the first unit.
|
|
1298
|
+
* No-ops if auto-mode is already active.
|
|
1299
|
+
*/
|
|
1256
1300
|
export async function startAuto(
|
|
1257
1301
|
ctx: ExtensionCommandContext,
|
|
1258
1302
|
pi: ExtensionAPI,
|
|
@@ -1281,6 +1325,13 @@ export async function startAuto(
|
|
|
1281
1325
|
// Escape stale worktree cwd from a previous milestone (#608).
|
|
1282
1326
|
base = escapeStaleWorktree(base);
|
|
1283
1327
|
|
|
1328
|
+
// Heal .gsd.migrating before any branching — covers both fresh-start and
|
|
1329
|
+
// resume paths (#4416). The matching call in auto-start.ts covers the
|
|
1330
|
+
// bootstrap-only path; this call ensures the resume path is also protected.
|
|
1331
|
+
if (recoverFailedMigration(base)) {
|
|
1332
|
+
ctx.ui.notify("Recovered unfinished migration (.gsd.migrating → .gsd).", "info");
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1284
1335
|
const freshStartAssessment = interruptedAssessment
|
|
1285
1336
|
?? await assessInterruptedSession(base);
|
|
1286
1337
|
|
|
@@ -1438,10 +1489,10 @@ export async function startAuto(
|
|
|
1438
1489
|
ctx.ui.notify(summary, level as "info" | "warning" | "error");
|
|
1439
1490
|
});
|
|
1440
1491
|
|
|
1441
|
-
// ── Auto-worktree: re-enter
|
|
1492
|
+
// ── Auto-worktree / branch-mode: re-enter on resume ──
|
|
1442
1493
|
if (
|
|
1443
1494
|
s.currentMilestoneId &&
|
|
1444
|
-
|
|
1495
|
+
getIsolationMode() !== "none" &&
|
|
1445
1496
|
s.originalBasePath &&
|
|
1446
1497
|
!isInAutoWorktree(s.basePath) &&
|
|
1447
1498
|
!detectWorktreeName(s.basePath) &&
|
|
@@ -1533,12 +1584,14 @@ export async function startAuto(
|
|
|
1533
1584
|
logCmuxEvent(loadEffectiveGSDPreferences()?.preferences, s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", "progress");
|
|
1534
1585
|
|
|
1535
1586
|
captureProjectRootEnv(s.originalBasePath || s.basePath);
|
|
1587
|
+
startAutoCommandPolling(s.basePath);
|
|
1536
1588
|
await runAutoLoopWithUok({
|
|
1537
1589
|
ctx,
|
|
1538
1590
|
pi,
|
|
1539
1591
|
s,
|
|
1540
1592
|
deps: buildLoopDeps(),
|
|
1541
|
-
|
|
1593
|
+
runKernelLoop: runUokKernelLoop,
|
|
1594
|
+
runLegacyLoop: runLegacyAutoLoop,
|
|
1542
1595
|
});
|
|
1543
1596
|
cleanupAfterLoopExit(ctx);
|
|
1544
1597
|
return;
|
|
@@ -1573,40 +1626,20 @@ export async function startAuto(
|
|
|
1573
1626
|
}
|
|
1574
1627
|
logCmuxEvent(loadEffectiveGSDPreferences()?.preferences, requestedStepMode ? "Step-mode started." : "Auto-mode started.", "progress");
|
|
1575
1628
|
|
|
1629
|
+
startAutoCommandPolling(s.basePath);
|
|
1630
|
+
|
|
1576
1631
|
// Dispatch the first unit
|
|
1577
1632
|
await runAutoLoopWithUok({
|
|
1578
1633
|
ctx,
|
|
1579
1634
|
pi,
|
|
1580
1635
|
s,
|
|
1581
1636
|
deps: buildLoopDeps(),
|
|
1582
|
-
|
|
1637
|
+
runKernelLoop: runUokKernelLoop,
|
|
1638
|
+
runLegacyLoop: runLegacyAutoLoop,
|
|
1583
1639
|
});
|
|
1584
1640
|
cleanupAfterLoopExit(ctx);
|
|
1585
1641
|
}
|
|
1586
1642
|
|
|
1587
|
-
// ─── Agent End Handler ────────────────────────────────────────────────────────
|
|
1588
|
-
|
|
1589
|
-
/**
|
|
1590
|
-
* Deprecated thin wrapper — kept as export for backward compatibility.
|
|
1591
|
-
* The actual agent_end processing now happens via resolveAgentEnd() in auto-loop.ts,
|
|
1592
|
-
* which is called directly from index.ts. The autoLoop() while loop handles all
|
|
1593
|
-
* post-unit processing (verification, hooks, dispatch) that this function used to do.
|
|
1594
|
-
*
|
|
1595
|
-
* If called by straggler code, it simply resolves the pending promise so the loop
|
|
1596
|
-
* can continue.
|
|
1597
|
-
*/
|
|
1598
|
-
export async function handleAgentEnd(
|
|
1599
|
-
ctx: ExtensionContext,
|
|
1600
|
-
pi: ExtensionAPI,
|
|
1601
|
-
): Promise<void> {
|
|
1602
|
-
if (!s.active || !s.cmdCtx) {
|
|
1603
|
-
// Even when inactive, resolve any pending promise so the loop is unblocked.
|
|
1604
|
-
resolveAgentEndCancelled();
|
|
1605
|
-
return;
|
|
1606
|
-
}
|
|
1607
|
-
clearUnitTimeout();
|
|
1608
|
-
resolveAgentEnd({ messages: [] });
|
|
1609
|
-
}
|
|
1610
1643
|
// describeNextUnit is imported from auto-dashboard.ts and re-exported
|
|
1611
1644
|
export { describeNextUnit } from "./auto-dashboard.js";
|
|
1612
1645
|
|
|
@@ -2,7 +2,7 @@ import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
|
|
|
2
2
|
|
|
3
3
|
import { logWarning } from "../workflow-logger.js";
|
|
4
4
|
import { checkAutoStartAfterDiscuss } from "../guided-flow.js";
|
|
5
|
-
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto } from "../auto.js";
|
|
5
|
+
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto, setCurrentDispatchedModelId } from "../auto.js";
|
|
6
6
|
import { getNextFallbackModel, resolveModelWithFallbacksForUnit } from "../preferences.js";
|
|
7
7
|
import { pauseAutoForProviderError } from "../provider-error-pause.js";
|
|
8
8
|
import { isSessionSwitchInFlight, resolveAgentEnd } from "../auto-loop.js";
|
|
@@ -124,26 +124,11 @@ export async function handleAgentEnd(
|
|
|
124
124
|
// ── 1. Classify using rawErrorMsg to avoid prose false-positives ────
|
|
125
125
|
const cls = classifyError(rawErrorMsg, explicitRetryAfterMs);
|
|
126
126
|
|
|
127
|
-
// ── 1b. Defer to Core RetryHandler for transient errors
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
// better than our Layer 2 pause+resume (which creates a new session).
|
|
133
|
-
//
|
|
134
|
-
// If we react here AND the Core also retries, we race: pauseAuto tears
|
|
135
|
-
// down the session while agent.continue() starts a new turn.
|
|
136
|
-
//
|
|
137
|
-
// Solution: Do nothing for transient errors. The Core RetryHandler
|
|
138
|
-
// runs next in _processAgentEvent and will either:
|
|
139
|
-
// a) Retry successfully → new agent_end (success) → we see it next time
|
|
140
|
-
// b) Exhaust retries → the agent stays idle, autoLoop's unit timeout
|
|
141
|
-
// or stuck detection handles it
|
|
142
|
-
//
|
|
143
|
-
// We do NOT call resolveAgentEnd here — that would unblock autoLoop
|
|
144
|
-
// prematurely while the Core is still retrying in the same session.
|
|
145
|
-
// We do NOT call pauseAuto — that would tear down the session.
|
|
146
|
-
if (isTransient(cls)) {
|
|
127
|
+
// ── 1b. Defer to Core RetryHandler for most transient errors ────────
|
|
128
|
+
// Core retries transient failures in-session after this handler.
|
|
129
|
+
// Keep that behavior for non-rate-limit classes to avoid pause/retry races,
|
|
130
|
+
// but let rate-limit continue into model fallback logic below (#4373).
|
|
131
|
+
if (isTransient(cls) && cls.kind !== "rate-limit") {
|
|
147
132
|
return;
|
|
148
133
|
}
|
|
149
134
|
|
|
@@ -202,6 +187,7 @@ export async function handleAgentEnd(
|
|
|
202
187
|
if (modelToSet) {
|
|
203
188
|
const ok = await pi.setModel(modelToSet, { persist: false });
|
|
204
189
|
if (ok) {
|
|
190
|
+
setCurrentDispatchedModelId({ provider: modelToSet.provider, id: modelToSet.id });
|
|
205
191
|
ctx.ui.notify(`Model error${errorDetail}. Switched to fallback: ${nextModelId} and resuming.`, "warning");
|
|
206
192
|
pi.sendMessage({ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false }, { triggerTurn: true });
|
|
207
193
|
return;
|
|
@@ -219,6 +205,7 @@ export async function handleAgentEnd(
|
|
|
219
205
|
if (startModel) {
|
|
220
206
|
const ok = await pi.setModel(startModel, { persist: false });
|
|
221
207
|
if (ok) {
|
|
208
|
+
setCurrentDispatchedModelId({ provider: startModel.provider, id: startModel.id });
|
|
222
209
|
retryState.networkRetryCount = 0;
|
|
223
210
|
retryState.currentRetryModelId = undefined;
|
|
224
211
|
ctx.ui.notify(`Model error${errorDetail}. Restored session model: ${sessionModel.provider}/${sessionModel.id} and resuming.`, "warning");
|
|
@@ -449,10 +449,14 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
449
449
|
depends: Type.Array(Type.String(), { description: "Slice dependency IDs" }),
|
|
450
450
|
demo: Type.String({ description: "Roadmap demo text / After this" }),
|
|
451
451
|
goal: Type.String({ description: "Slice goal" }),
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
452
|
+
// ADR-011: heavy planning fields are optional for sketch slices; required for full slices.
|
|
453
|
+
successCriteria: Type.Optional(Type.String({ description: "Slice success criteria block (required for full slices; omit for sketches)" })),
|
|
454
|
+
proofLevel: Type.Optional(Type.String({ description: "Slice proof level (required for full slices; omit for sketches)" })),
|
|
455
|
+
integrationClosure: Type.Optional(Type.String({ description: "Slice integration closure (required for full slices; omit for sketches)" })),
|
|
456
|
+
observabilityImpact: Type.Optional(Type.String({ description: "Slice observability impact (required for full slices; omit for sketches)" })),
|
|
457
|
+
// ADR-011 sketch-then-refine fields.
|
|
458
|
+
isSketch: Type.Optional(Type.Boolean({ description: "ADR-011: true marks this slice as a sketch awaiting refine-slice expansion" })),
|
|
459
|
+
sketchScope: Type.Optional(Type.String({ description: "ADR-011: 2–3 sentence scope boundary, required when isSketch=true" })),
|
|
456
460
|
}), { description: "Planned slices for the milestone" }),
|
|
457
461
|
// ── Enrichment metadata (optional — defaults to empty) ────────────
|
|
458
462
|
status: Type.Optional(Type.String({ description: "Milestone status (defaults to active)" })),
|
|
@@ -631,6 +635,20 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
631
635
|
keyFiles: Type.Optional(Type.Array(Type.String(), { description: "List of key files created or modified" })),
|
|
632
636
|
keyDecisions: Type.Optional(Type.Array(Type.String(), { description: "List of key decisions made during this task" })),
|
|
633
637
|
blockerDiscovered: Type.Optional(Type.Boolean({ description: "Whether a plan-invalidating blocker was discovered" })),
|
|
638
|
+
// ADR-011 Phase 2: mid-execution escalation — agent asks the user to resolve an ambiguity.
|
|
639
|
+
escalation: Type.Optional(Type.Object({
|
|
640
|
+
question: Type.String({ description: "The question the user needs to answer — one clear sentence." }),
|
|
641
|
+
options: Type.Array(Type.Object({
|
|
642
|
+
id: Type.String({ description: "Short id (e.g. 'A', 'B') used by /gsd escalate resolve." }),
|
|
643
|
+
label: Type.String({ description: "One-line label." }),
|
|
644
|
+
tradeoffs: Type.String({ description: "1-2 sentences on the tradeoffs of this option." }),
|
|
645
|
+
}), { minItems: 2, maxItems: 4, description: "2–4 options the user can choose between." }),
|
|
646
|
+
recommendation: Type.String({ description: "Option id the executor recommends." }),
|
|
647
|
+
recommendationRationale: Type.String({ description: "Why the recommendation — 1–2 sentences." }),
|
|
648
|
+
continueWithDefault: Type.Boolean({
|
|
649
|
+
description: "When true, loop continues (artifact logged for later review). When false, auto-mode pauses until the user resolves via /gsd escalate resolve.",
|
|
650
|
+
}),
|
|
651
|
+
}, { description: "ADR-011 Phase 2: optional escalation payload. Only honored when phases.mid_execution_escalation is true." })),
|
|
634
652
|
verificationEvidence: Type.Optional(Type.Array(
|
|
635
653
|
Type.Union([
|
|
636
654
|
Type.Object({
|
|
@@ -4,6 +4,7 @@ import { Type } from "@sinclair/typebox";
|
|
|
4
4
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
5
5
|
import { ensureDbOpen } from "./dynamic-tools.js";
|
|
6
6
|
import { executeMilestoneStatus } from "../tools/workflow-tool-executors.js";
|
|
7
|
+
import { checkpointDatabase } from "../gsd-db.js";
|
|
7
8
|
|
|
8
9
|
export function registerQueryTools(pi: ExtensionAPI): void {
|
|
9
10
|
pi.registerTool({
|
|
@@ -31,4 +32,34 @@ export function registerQueryTools(pi: ExtensionAPI): void {
|
|
|
31
32
|
return executeMilestoneStatus(params);
|
|
32
33
|
},
|
|
33
34
|
});
|
|
35
|
+
|
|
36
|
+
pi.registerTool({
|
|
37
|
+
name: "gsd_checkpoint_db",
|
|
38
|
+
label: "Checkpoint GSD Database",
|
|
39
|
+
description:
|
|
40
|
+
"Flush the SQLite WAL (Write-Ahead Log) into the base gsd.db file. " +
|
|
41
|
+
"Call this before `git add .gsd/gsd.db` to ensure the committed database " +
|
|
42
|
+
"contains current milestone/slice/task state rather than stale pre-session content. " +
|
|
43
|
+
"Safe to call at any time while GSD is running.",
|
|
44
|
+
promptSnippet: "Flush WAL into gsd.db so git add stages current state",
|
|
45
|
+
promptGuidelines: [
|
|
46
|
+
"Call gsd_checkpoint_db immediately before staging .gsd/gsd.db with git add.",
|
|
47
|
+
"Do not use sqlite3 or shell commands to checkpoint — they are blocked. Use this tool instead.",
|
|
48
|
+
],
|
|
49
|
+
parameters: Type.Object({}),
|
|
50
|
+
async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
|
|
51
|
+
const dbAvailable = await ensureDbOpen();
|
|
52
|
+
if (!dbAvailable) {
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: "Error: GSD database is not available. Cannot checkpoint." }],
|
|
55
|
+
details: { operation: "checkpoint_db", error: "db_unavailable" },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
checkpointDatabase();
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
|
|
61
|
+
details: { operation: "checkpoint_db", status: "ok" },
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
});
|
|
34
65
|
}
|
|
@@ -18,6 +18,7 @@ import { loadToolApiKeys } from "../commands-config.js";
|
|
|
18
18
|
import { loadFile, saveFile, formatContinue } from "../files.js";
|
|
19
19
|
import { deriveState } from "../state.js";
|
|
20
20
|
import { getAutoDashboardData, isAutoActive, isAutoPaused, markToolEnd, markToolStart, recordToolInvocationError } from "../auto.js";
|
|
21
|
+
import { hideFooter } from "../auto-dashboard.js";
|
|
21
22
|
import { isParallelActive, shutdownParallel } from "../parallel-orchestrator.js";
|
|
22
23
|
import { checkToolCallLoop, resetToolCallLoopGuard } from "./tool-call-loop-guard.js";
|
|
23
24
|
import { saveActivityLog } from "../activity-log.js";
|
|
@@ -88,6 +89,9 @@ export function registerHooks(
|
|
|
88
89
|
} catch { /* non-fatal */ }
|
|
89
90
|
}
|
|
90
91
|
loadToolApiKeys();
|
|
92
|
+
if (isAutoActive()) {
|
|
93
|
+
ctx.ui.setFooter(hideFooter);
|
|
94
|
+
}
|
|
91
95
|
});
|
|
92
96
|
|
|
93
97
|
pi.on("session_switch", async (_event, ctx) => {
|
|
@@ -108,6 +112,9 @@ export function registerHooks(
|
|
|
108
112
|
prepareWorkflowMcpForProject(ctx, process.cwd());
|
|
109
113
|
}
|
|
110
114
|
loadToolApiKeys();
|
|
115
|
+
if (isAutoActive()) {
|
|
116
|
+
ctx.ui.setFooter(hideFooter);
|
|
117
|
+
}
|
|
111
118
|
});
|
|
112
119
|
|
|
113
120
|
pi.on("before_agent_start", async (event, ctx: ExtensionContext) => {
|
|
@@ -325,6 +332,7 @@ export function registerHooks(
|
|
|
325
332
|
// ── Safety harness: evidence collection + destructive command warnings ──
|
|
326
333
|
pi.on("tool_call", async (event, ctx) => {
|
|
327
334
|
if (!isAutoActive()) return;
|
|
335
|
+
markToolStart(event.toolCallId, event.toolName);
|
|
328
336
|
safetyRecordToolCall(event.toolCallId, event.toolName, event.input as Record<string, unknown>);
|
|
329
337
|
|
|
330
338
|
// Destructive command classification (warn only, never block)
|
|
@@ -343,6 +351,20 @@ export function registerHooks(
|
|
|
343
351
|
});
|
|
344
352
|
|
|
345
353
|
pi.on("tool_result", async (event) => {
|
|
354
|
+
if (isAutoActive() && typeof event.toolCallId === "string") {
|
|
355
|
+
markToolEnd(event.toolCallId);
|
|
356
|
+
}
|
|
357
|
+
if (isAutoActive() && event.isError && event.toolName.startsWith("gsd_")) {
|
|
358
|
+
const resultPayload = ("result" in event ? event.result : undefined) as any;
|
|
359
|
+
const errorText = typeof resultPayload === "string"
|
|
360
|
+
? resultPayload
|
|
361
|
+
: (typeof resultPayload?.content?.[0]?.text === "string"
|
|
362
|
+
? resultPayload.content[0].text
|
|
363
|
+
: (typeof (event as any).content === "string"
|
|
364
|
+
? (event as any).content
|
|
365
|
+
: String(resultPayload ?? "")));
|
|
366
|
+
recordToolInvocationError(event.toolName, errorText);
|
|
367
|
+
}
|
|
346
368
|
if (event.toolName !== "ask_user_questions") return;
|
|
347
369
|
const milestoneId = getDiscussionMilestoneId(process.cwd());
|
|
348
370
|
const queueActive = isQueuePhaseActive();
|
|
@@ -15,7 +15,7 @@ export interface GsdCommandDefinition {
|
|
|
15
15
|
type CompletionMap = Record<string, readonly GsdCommandDefinition[]>;
|
|
16
16
|
|
|
17
17
|
export const GSD_COMMAND_DESCRIPTION =
|
|
18
|
-
"GSD — Get Shit Done: /gsd help|start|templates|next|auto|stop|pause|status|widget|visualize|queue|quick|discuss|capture|triage|dispatch|history|undo|undo-task|reset-slice|rate|skip|export|cleanup|model|mode|prefs|config|keys|hooks|run-hook|skill-health|doctor|logs|forensics|changelog|migrate|remote|steer|knowledge|new-milestone|parallel|cmux|park|unpark|init|setup|inspect|extensions|update|fast|mcp|rethink|codebase|notifications|ship|do|session-report|backlog|pr-branch|add-tests|language";
|
|
18
|
+
"GSD — Get Shit Done: /gsd help|start|templates|next|auto|stop|pause|status|widget|visualize|queue|quick|discuss|capture|triage|dispatch|history|undo|undo-task|reset-slice|rate|skip|export|cleanup|model|mode|prefs|config|keys|hooks|run-hook|skill-health|doctor|debug|logs|forensics|changelog|migrate|remote|steer|knowledge|new-milestone|parallel|cmux|park|unpark|init|setup|onboarding|inspect|extensions|update|fast|mcp|rethink|codebase|notifications|ship|do|session-report|backlog|pr-branch|add-tests|scan|language";
|
|
19
19
|
|
|
20
20
|
export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
|
|
21
21
|
{ cmd: "help", desc: "Categorized command reference with descriptions" },
|
|
@@ -44,7 +44,7 @@ export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
|
|
|
44
44
|
{ cmd: "model", desc: "Switch the active session model or open a picker" },
|
|
45
45
|
{ cmd: "mode", desc: "Switch workflow mode (solo/team)" },
|
|
46
46
|
{ cmd: "prefs", desc: "Manage preferences (model selection, timeouts, etc.)" },
|
|
47
|
-
{ cmd: "config", desc: "Set API keys
|
|
47
|
+
{ cmd: "config", desc: "(deprecated) Set tool API keys — use /gsd keys instead" },
|
|
48
48
|
{ cmd: "keys", desc: "API key manager — list, add, remove, test, rotate, doctor" },
|
|
49
49
|
{ cmd: "hooks", desc: "Show configured post-unit and pre-dispatch hooks" },
|
|
50
50
|
{ cmd: "run-hook", desc: "Manually trigger a specific hook" },
|
|
@@ -52,9 +52,11 @@ export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
|
|
|
52
52
|
{ cmd: "notifications", desc: "View, filter, and clear persistent notification history" },
|
|
53
53
|
{ cmd: "doctor", desc: "Runtime health checks with auto-fix" },
|
|
54
54
|
{ cmd: "logs", desc: "Browse activity logs, debug logs, and metrics" },
|
|
55
|
+
{ cmd: "debug", desc: "Create and inspect persistent /gsd debug sessions" },
|
|
55
56
|
{ cmd: "forensics", desc: "Examine execution logs" },
|
|
56
57
|
{ cmd: "init", desc: "Project init wizard — detect, configure, bootstrap .gsd/" },
|
|
57
|
-
{ cmd: "setup", desc: "
|
|
58
|
+
{ cmd: "setup", desc: "Configuration hub: status + sub-routes (llm, model, search, remote, keys, prefs, onboarding)" },
|
|
59
|
+
{ cmd: "onboarding", desc: "Re-run the setup wizard [--resume|--reset|--step <name>]" },
|
|
58
60
|
{ cmd: "migrate", desc: "Migrate a v1 .planning directory to .gsd format" },
|
|
59
61
|
{ cmd: "remote", desc: "Control remote auto-mode" },
|
|
60
62
|
{ cmd: "steer", desc: "Hard-steer plan documents during execution" },
|
|
@@ -72,7 +74,7 @@ export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
|
|
|
72
74
|
{ cmd: "fast", desc: "Toggle OpenAI service tier (on/off/flex/status)" },
|
|
73
75
|
{ cmd: "mcp", desc: "MCP server status, connectivity, and local config bootstrap (status, check, init)" },
|
|
74
76
|
{ cmd: "rethink", desc: "Conversational project reorganization — reorder, park, discard, add milestones" },
|
|
75
|
-
{ cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, validate, pause, resume)" },
|
|
77
|
+
{ cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, info, install, uninstall, validate, pause, resume) or run <name> directly" },
|
|
76
78
|
{ cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache (.gsd/CODEBASE.md)" },
|
|
77
79
|
{ cmd: "ship", desc: "Create PR from milestone artifacts and open for review" },
|
|
78
80
|
{ cmd: "do", desc: "Route freeform text to the right GSD command" },
|
|
@@ -80,6 +82,7 @@ export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
|
|
|
80
82
|
{ cmd: "backlog", desc: "Manage backlog items (add, promote, remove, list)" },
|
|
81
83
|
{ cmd: "pr-branch", desc: "Create clean PR branch filtering .gsd/ commits" },
|
|
82
84
|
{ cmd: "add-tests", desc: "Generate tests for completed slices" },
|
|
85
|
+
{ cmd: "scan", desc: "Rapid codebase assessment — lightweight alternative to full map (--focus tech|arch|quality|concerns|tech+arch)" },
|
|
83
86
|
{ cmd: "language", desc: "Set or clear the global response language (e.g. /gsd language Chinese)" },
|
|
84
87
|
];
|
|
85
88
|
|
|
@@ -113,11 +116,18 @@ const NESTED_COMPLETIONS: CompletionMap = {
|
|
|
113
116
|
{ cmd: "watch", desc: "Live TUI dashboard monitoring all workers" },
|
|
114
117
|
],
|
|
115
118
|
setup: [
|
|
116
|
-
{ cmd: "llm", desc: "Configure LLM provider
|
|
119
|
+
{ cmd: "llm", desc: "Configure LLM provider & auth" },
|
|
120
|
+
{ cmd: "model", desc: "Pick default model for the active provider" },
|
|
117
121
|
{ cmd: "search", desc: "Configure web search provider" },
|
|
118
|
-
{ cmd: "remote", desc: "Configure remote integrations" },
|
|
119
|
-
{ cmd: "keys", desc: "Manage API keys" },
|
|
120
|
-
{ cmd: "prefs", desc: "
|
|
122
|
+
{ cmd: "remote", desc: "Configure remote integrations (Discord/Slack/Telegram)" },
|
|
123
|
+
{ cmd: "keys", desc: "Manage API keys (alias for /gsd keys)" },
|
|
124
|
+
{ cmd: "prefs", desc: "Global preferences wizard (alias for /gsd prefs)" },
|
|
125
|
+
{ cmd: "onboarding", desc: "Run the full onboarding wizard (alias for /gsd onboarding)" },
|
|
126
|
+
],
|
|
127
|
+
onboarding: [
|
|
128
|
+
{ cmd: "--resume", desc: "Resume from the last completed step" },
|
|
129
|
+
{ cmd: "--reset", desc: "Reset onboarding state and start over (does not clear API keys)" },
|
|
130
|
+
{ cmd: "--step", desc: "Run a single step: llm|model|search|remote|tool-keys|prefs|skills|doctor|project" },
|
|
121
131
|
],
|
|
122
132
|
notifications: [
|
|
123
133
|
{ cmd: "clear", desc: "Clear all notifications" },
|
|
@@ -129,6 +139,12 @@ const NESTED_COMPLETIONS: CompletionMap = {
|
|
|
129
139
|
{ cmd: "tail", desc: "Show last N activity log summaries" },
|
|
130
140
|
{ cmd: "clear", desc: "Remove old activity and debug logs" },
|
|
131
141
|
],
|
|
142
|
+
debug: [
|
|
143
|
+
{ cmd: "list", desc: "List persisted debug sessions" },
|
|
144
|
+
{ cmd: "status", desc: "Show status for one debug session slug" },
|
|
145
|
+
{ cmd: "continue", desc: "Resume an existing debug session slug" },
|
|
146
|
+
{ cmd: "--diagnose", desc: "Inspect malformed artifacts and session health" },
|
|
147
|
+
],
|
|
132
148
|
keys: [
|
|
133
149
|
{ cmd: "list", desc: "Show key status dashboard" },
|
|
134
150
|
{ cmd: "add", desc: "Add a key for a provider" },
|
|
@@ -235,8 +251,11 @@ const NESTED_COMPLETIONS: CompletionMap = {
|
|
|
235
251
|
],
|
|
236
252
|
workflow: [
|
|
237
253
|
{ cmd: "new", desc: "Create a new workflow definition (via skill)" },
|
|
238
|
-
{ cmd: "run", desc: "Create a run and start auto-mode" },
|
|
254
|
+
{ cmd: "run", desc: "Create a YAML run and start auto-mode" },
|
|
239
255
|
{ cmd: "list", desc: "List workflow runs" },
|
|
256
|
+
{ cmd: "info", desc: "Show plugin details (source, mode, phases)" },
|
|
257
|
+
{ cmd: "install", desc: "Install a plugin from a URL / gist: / gh:" },
|
|
258
|
+
{ cmd: "uninstall", desc: "Remove an installed plugin" },
|
|
240
259
|
{ cmd: "validate", desc: "Validate a workflow definition YAML" },
|
|
241
260
|
{ cmd: "pause", desc: "Pause custom workflow auto-mode" },
|
|
242
261
|
{ cmd: "resume", desc: "Resume paused custom workflow auto-mode" },
|
|
@@ -270,6 +289,13 @@ const NESTED_COMPLETIONS: CompletionMap = {
|
|
|
270
289
|
{ cmd: "--dry-run", desc: "Preview what would be filtered" },
|
|
271
290
|
{ cmd: "--name", desc: "Custom branch name" },
|
|
272
291
|
],
|
|
292
|
+
scan: [
|
|
293
|
+
{ cmd: "--focus tech", desc: "Technology stack and external integrations" },
|
|
294
|
+
{ cmd: "--focus arch", desc: "Architecture patterns and directory structure" },
|
|
295
|
+
{ cmd: "--focus quality", desc: "Coding conventions and testing patterns" },
|
|
296
|
+
{ cmd: "--focus concerns", desc: "Technical debt and risk areas" },
|
|
297
|
+
{ cmd: "--focus tech+arch", desc: "Tech + Architecture (default)" },
|
|
298
|
+
],
|
|
273
299
|
language: [
|
|
274
300
|
{ cmd: "off", desc: "Clear the language preference (revert to default)" },
|
|
275
301
|
{ cmd: "clear", desc: "Alias for off — clear the language preference" },
|
|
@@ -399,6 +425,45 @@ export function getGsdArgumentCompletions(prefix: string) {
|
|
|
399
425
|
return [];
|
|
400
426
|
}
|
|
401
427
|
|
|
428
|
+
// Completion for `/gsd workflow info <name>` — list all discoverable plugins (project + global).
|
|
429
|
+
if (command === "workflow" && subcommand === "info" && parts.length <= 3) {
|
|
430
|
+
const results: GsdCommandDefinition[] = [];
|
|
431
|
+
const seen = new Set<string>();
|
|
432
|
+
const scanDir = (dir: string, source: string) => {
|
|
433
|
+
if (!existsSync(dir)) return;
|
|
434
|
+
try {
|
|
435
|
+
for (const f of readdirSync(dir)) {
|
|
436
|
+
if (!/\.(ya?ml|md)$/i.test(f)) continue;
|
|
437
|
+
const name = f.replace(/\.(ya?ml|md)$/i, "");
|
|
438
|
+
if (!name.startsWith(third)) continue;
|
|
439
|
+
if (seen.has(name)) continue;
|
|
440
|
+
seen.add(name);
|
|
441
|
+
results.push({ cmd: name, desc: `Workflow plugin (${source})` });
|
|
442
|
+
}
|
|
443
|
+
} catch { /* ignore */ }
|
|
444
|
+
};
|
|
445
|
+
try {
|
|
446
|
+
const base = resolveProjectRoot(process.cwd());
|
|
447
|
+
scanDir(join(base, ".gsd", "workflows"), "project");
|
|
448
|
+
scanDir(join(base, ".gsd", "workflow-defs"), "project-legacy");
|
|
449
|
+
scanDir(join(gsdHome, "workflows"), "global");
|
|
450
|
+
} catch { /* ignore */ }
|
|
451
|
+
// Also include bundled template names.
|
|
452
|
+
try {
|
|
453
|
+
const registry = loadRegistry();
|
|
454
|
+
for (const id of Object.keys(registry.templates)) {
|
|
455
|
+
if (seen.has(id) || !id.startsWith(third)) continue;
|
|
456
|
+
seen.add(id);
|
|
457
|
+
results.push({ cmd: id, desc: "Workflow plugin (bundled)" });
|
|
458
|
+
}
|
|
459
|
+
} catch { /* ignore */ }
|
|
460
|
+
return results.map((r) => ({
|
|
461
|
+
value: `workflow info ${r.cmd}`,
|
|
462
|
+
label: r.cmd,
|
|
463
|
+
description: r.desc,
|
|
464
|
+
}));
|
|
465
|
+
}
|
|
466
|
+
|
|
402
467
|
const nested = NESTED_COMPLETIONS[command];
|
|
403
468
|
if (nested && parts.length <= 2) {
|
|
404
469
|
return filterOptions(subcommand, nested, command);
|