gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.96d4bb599
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/memory-tools.js +128 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +17 -4
- 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 +159 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +21 -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-memory.js +462 -0
- 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 +490 -32
- 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/memory-embeddings.js +219 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +78 -27
- package/dist/resources/extensions/gsd/memory-ingest.js +218 -0
- package/dist/resources/extensions/gsd/memory-relations.js +189 -0
- package/dist/resources/extensions/gsd/memory-source-store.js +113 -0
- package/dist/resources/extensions/gsd/memory-store.js +299 -6
- 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/memory-tools.js +306 -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 +5 -5
- 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 +5 -5
- 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/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +12 -10
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +8 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +113 -14
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/mcp-server.test.ts +40 -4
- package/packages/mcp-server/src/server.ts +12 -10
- package/packages/mcp-server/src/session-manager.ts +10 -3
- package/packages/mcp-server/src/workflow-tools.test.ts +91 -1
- package/packages/mcp-server/src/workflow-tools.ts +128 -18
- 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/memory-tools.ts +158 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +20 -4
- 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 +196 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -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-memory.ts +551 -0
- 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 +578 -32
- 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/memory-embeddings.ts +235 -0
- package/src/resources/extensions/gsd/memory-extractor.ts +100 -34
- package/src/resources/extensions/gsd/memory-ingest.ts +286 -0
- package/src/resources/extensions/gsd/memory-relations.ts +240 -0
- package/src/resources/extensions/gsd/memory-source-store.ts +138 -0
- package/src/resources/extensions/gsd/memory-store.ts +351 -7
- 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-embeddings.test.ts +213 -0
- package/src/resources/extensions/gsd/tests/memory-ingest.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/memory-relations.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +295 -0
- 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-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/memory-tools.ts +380 -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-logger.ts +3 -1
- 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 → o61X3klsB6C0UE0X1x3PA}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → o61X3klsB6C0UE0X1x3PA}/_ssgManifest.js +0 -0
|
@@ -89,10 +89,23 @@ export async function buildBeforeAgentStartResult(event, ctx) {
|
|
|
89
89
|
}
|
|
90
90
|
let memoryBlock = "";
|
|
91
91
|
try {
|
|
92
|
-
const { formatMemoriesForPrompt, getActiveMemoriesRanked } = await import("../memory-store.js");
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
const { formatMemoriesForPrompt, getActiveMemoriesRanked, queryMemoriesRanked } = await import("../memory-store.js");
|
|
93
|
+
// Always-on "critical" set — small, stable memories that belong in every
|
|
94
|
+
// turn (gotchas, environment, conventions). Ranked by the existing score.
|
|
95
|
+
const CRITICAL_CATEGORIES = new Set(["gotcha", "environment", "convention"]);
|
|
96
|
+
const allRanked = getActiveMemoriesRanked(60);
|
|
97
|
+
const critical = allRanked.filter((m) => CRITICAL_CATEGORIES.has(m.category)).slice(0, 5);
|
|
98
|
+
const criticalIds = new Set(critical.map((m) => m.id));
|
|
99
|
+
// Prompt-relevance set — hybrid FTS5 + (future) semantic retrieval.
|
|
100
|
+
let relevant = [];
|
|
101
|
+
const userPrompt = (event.prompt ?? "").trim();
|
|
102
|
+
if (userPrompt) {
|
|
103
|
+
const hits = queryMemoriesRanked({ query: userPrompt, k: 10 });
|
|
104
|
+
relevant = hits.map((h) => h.memory).filter((m) => !criticalIds.has(m.id));
|
|
105
|
+
}
|
|
106
|
+
const merged = [...critical, ...relevant];
|
|
107
|
+
if (merged.length > 0) {
|
|
108
|
+
const formatted = formatMemoriesForPrompt(merged, 2000);
|
|
96
109
|
if (formatted) {
|
|
97
110
|
memoryBlock = `\n\n${formatted}`;
|
|
98
111
|
}
|
|
@@ -4,7 +4,7 @@ import { join } from "node:path";
|
|
|
4
4
|
import { loadRegistry } from "../workflow-templates.js";
|
|
5
5
|
import { resolveProjectRoot } from "../worktree.js";
|
|
6
6
|
const gsdHome = process.env.GSD_HOME || join(homedir(), ".gsd");
|
|
7
|
-
export const GSD_COMMAND_DESCRIPTION = "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";
|
|
7
|
+
export const GSD_COMMAND_DESCRIPTION = "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";
|
|
8
8
|
export const TOP_LEVEL_SUBCOMMANDS = [
|
|
9
9
|
{ cmd: "help", desc: "Categorized command reference with descriptions" },
|
|
10
10
|
{ cmd: "next", desc: "Explicit step mode (same as /gsd)" },
|
|
@@ -32,7 +32,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
32
32
|
{ cmd: "model", desc: "Switch the active session model or open a picker" },
|
|
33
33
|
{ cmd: "mode", desc: "Switch workflow mode (solo/team)" },
|
|
34
34
|
{ cmd: "prefs", desc: "Manage preferences (model selection, timeouts, etc.)" },
|
|
35
|
-
{ cmd: "config", desc: "Set API keys
|
|
35
|
+
{ cmd: "config", desc: "(deprecated) Set tool API keys — use /gsd keys instead" },
|
|
36
36
|
{ cmd: "keys", desc: "API key manager — list, add, remove, test, rotate, doctor" },
|
|
37
37
|
{ cmd: "hooks", desc: "Show configured post-unit and pre-dispatch hooks" },
|
|
38
38
|
{ cmd: "run-hook", desc: "Manually trigger a specific hook" },
|
|
@@ -40,9 +40,11 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
40
40
|
{ cmd: "notifications", desc: "View, filter, and clear persistent notification history" },
|
|
41
41
|
{ cmd: "doctor", desc: "Runtime health checks with auto-fix" },
|
|
42
42
|
{ cmd: "logs", desc: "Browse activity logs, debug logs, and metrics" },
|
|
43
|
+
{ cmd: "debug", desc: "Create and inspect persistent /gsd debug sessions" },
|
|
43
44
|
{ cmd: "forensics", desc: "Examine execution logs" },
|
|
44
45
|
{ cmd: "init", desc: "Project init wizard — detect, configure, bootstrap .gsd/" },
|
|
45
|
-
{ cmd: "setup", desc: "
|
|
46
|
+
{ cmd: "setup", desc: "Configuration hub: status + sub-routes (llm, model, search, remote, keys, prefs, onboarding)" },
|
|
47
|
+
{ cmd: "onboarding", desc: "Re-run the setup wizard [--resume|--reset|--step <name>]" },
|
|
46
48
|
{ cmd: "migrate", desc: "Migrate a v1 .planning directory to .gsd format" },
|
|
47
49
|
{ cmd: "remote", desc: "Control remote auto-mode" },
|
|
48
50
|
{ cmd: "steer", desc: "Hard-steer plan documents during execution" },
|
|
@@ -60,7 +62,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
60
62
|
{ cmd: "fast", desc: "Toggle OpenAI service tier (on/off/flex/status)" },
|
|
61
63
|
{ cmd: "mcp", desc: "MCP server status, connectivity, and local config bootstrap (status, check, init)" },
|
|
62
64
|
{ cmd: "rethink", desc: "Conversational project reorganization — reorder, park, discard, add milestones" },
|
|
63
|
-
{ cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, validate, pause, resume)" },
|
|
65
|
+
{ cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, info, install, uninstall, validate, pause, resume) or run <name> directly" },
|
|
64
66
|
{ cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache (.gsd/CODEBASE.md)" },
|
|
65
67
|
{ cmd: "ship", desc: "Create PR from milestone artifacts and open for review" },
|
|
66
68
|
{ cmd: "do", desc: "Route freeform text to the right GSD command" },
|
|
@@ -68,6 +70,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
68
70
|
{ cmd: "backlog", desc: "Manage backlog items (add, promote, remove, list)" },
|
|
69
71
|
{ cmd: "pr-branch", desc: "Create clean PR branch filtering .gsd/ commits" },
|
|
70
72
|
{ cmd: "add-tests", desc: "Generate tests for completed slices" },
|
|
73
|
+
{ cmd: "scan", desc: "Rapid codebase assessment — lightweight alternative to full map (--focus tech|arch|quality|concerns|tech+arch)" },
|
|
71
74
|
{ cmd: "language", desc: "Set or clear the global response language (e.g. /gsd language Chinese)" },
|
|
72
75
|
];
|
|
73
76
|
const NESTED_COMPLETIONS = {
|
|
@@ -100,11 +103,18 @@ const NESTED_COMPLETIONS = {
|
|
|
100
103
|
{ cmd: "watch", desc: "Live TUI dashboard monitoring all workers" },
|
|
101
104
|
],
|
|
102
105
|
setup: [
|
|
103
|
-
{ cmd: "llm", desc: "Configure LLM provider
|
|
106
|
+
{ cmd: "llm", desc: "Configure LLM provider & auth" },
|
|
107
|
+
{ cmd: "model", desc: "Pick default model for the active provider" },
|
|
104
108
|
{ cmd: "search", desc: "Configure web search provider" },
|
|
105
|
-
{ cmd: "remote", desc: "Configure remote integrations" },
|
|
106
|
-
{ cmd: "keys", desc: "Manage API keys" },
|
|
107
|
-
{ cmd: "prefs", desc: "
|
|
109
|
+
{ cmd: "remote", desc: "Configure remote integrations (Discord/Slack/Telegram)" },
|
|
110
|
+
{ cmd: "keys", desc: "Manage API keys (alias for /gsd keys)" },
|
|
111
|
+
{ cmd: "prefs", desc: "Global preferences wizard (alias for /gsd prefs)" },
|
|
112
|
+
{ cmd: "onboarding", desc: "Run the full onboarding wizard (alias for /gsd onboarding)" },
|
|
113
|
+
],
|
|
114
|
+
onboarding: [
|
|
115
|
+
{ cmd: "--resume", desc: "Resume from the last completed step" },
|
|
116
|
+
{ cmd: "--reset", desc: "Reset onboarding state and start over (does not clear API keys)" },
|
|
117
|
+
{ cmd: "--step", desc: "Run a single step: llm|model|search|remote|tool-keys|prefs|skills|doctor|project" },
|
|
108
118
|
],
|
|
109
119
|
notifications: [
|
|
110
120
|
{ cmd: "clear", desc: "Clear all notifications" },
|
|
@@ -116,6 +126,12 @@ const NESTED_COMPLETIONS = {
|
|
|
116
126
|
{ cmd: "tail", desc: "Show last N activity log summaries" },
|
|
117
127
|
{ cmd: "clear", desc: "Remove old activity and debug logs" },
|
|
118
128
|
],
|
|
129
|
+
debug: [
|
|
130
|
+
{ cmd: "list", desc: "List persisted debug sessions" },
|
|
131
|
+
{ cmd: "status", desc: "Show status for one debug session slug" },
|
|
132
|
+
{ cmd: "continue", desc: "Resume an existing debug session slug" },
|
|
133
|
+
{ cmd: "--diagnose", desc: "Inspect malformed artifacts and session health" },
|
|
134
|
+
],
|
|
119
135
|
keys: [
|
|
120
136
|
{ cmd: "list", desc: "Show key status dashboard" },
|
|
121
137
|
{ cmd: "add", desc: "Add a key for a provider" },
|
|
@@ -222,8 +238,11 @@ const NESTED_COMPLETIONS = {
|
|
|
222
238
|
],
|
|
223
239
|
workflow: [
|
|
224
240
|
{ cmd: "new", desc: "Create a new workflow definition (via skill)" },
|
|
225
|
-
{ cmd: "run", desc: "Create a run and start auto-mode" },
|
|
241
|
+
{ cmd: "run", desc: "Create a YAML run and start auto-mode" },
|
|
226
242
|
{ cmd: "list", desc: "List workflow runs" },
|
|
243
|
+
{ cmd: "info", desc: "Show plugin details (source, mode, phases)" },
|
|
244
|
+
{ cmd: "install", desc: "Install a plugin from a URL / gist: / gh:" },
|
|
245
|
+
{ cmd: "uninstall", desc: "Remove an installed plugin" },
|
|
227
246
|
{ cmd: "validate", desc: "Validate a workflow definition YAML" },
|
|
228
247
|
{ cmd: "pause", desc: "Pause custom workflow auto-mode" },
|
|
229
248
|
{ cmd: "resume", desc: "Resume paused custom workflow auto-mode" },
|
|
@@ -257,6 +276,13 @@ const NESTED_COMPLETIONS = {
|
|
|
257
276
|
{ cmd: "--dry-run", desc: "Preview what would be filtered" },
|
|
258
277
|
{ cmd: "--name", desc: "Custom branch name" },
|
|
259
278
|
],
|
|
279
|
+
scan: [
|
|
280
|
+
{ cmd: "--focus tech", desc: "Technology stack and external integrations" },
|
|
281
|
+
{ cmd: "--focus arch", desc: "Architecture patterns and directory structure" },
|
|
282
|
+
{ cmd: "--focus quality", desc: "Coding conventions and testing patterns" },
|
|
283
|
+
{ cmd: "--focus concerns", desc: "Technical debt and risk areas" },
|
|
284
|
+
{ cmd: "--focus tech+arch", desc: "Tech + Architecture (default)" },
|
|
285
|
+
],
|
|
260
286
|
language: [
|
|
261
287
|
{ cmd: "off", desc: "Clear the language preference (revert to default)" },
|
|
262
288
|
{ cmd: "clear", desc: "Alias for off — clear the language preference" },
|
|
@@ -377,6 +403,52 @@ export function getGsdArgumentCompletions(prefix) {
|
|
|
377
403
|
}
|
|
378
404
|
return [];
|
|
379
405
|
}
|
|
406
|
+
// Completion for `/gsd workflow info <name>` — list all discoverable plugins (project + global).
|
|
407
|
+
if (command === "workflow" && subcommand === "info" && parts.length <= 3) {
|
|
408
|
+
const results = [];
|
|
409
|
+
const seen = new Set();
|
|
410
|
+
const scanDir = (dir, source) => {
|
|
411
|
+
if (!existsSync(dir))
|
|
412
|
+
return;
|
|
413
|
+
try {
|
|
414
|
+
for (const f of readdirSync(dir)) {
|
|
415
|
+
if (!/\.(ya?ml|md)$/i.test(f))
|
|
416
|
+
continue;
|
|
417
|
+
const name = f.replace(/\.(ya?ml|md)$/i, "");
|
|
418
|
+
if (!name.startsWith(third))
|
|
419
|
+
continue;
|
|
420
|
+
if (seen.has(name))
|
|
421
|
+
continue;
|
|
422
|
+
seen.add(name);
|
|
423
|
+
results.push({ cmd: name, desc: `Workflow plugin (${source})` });
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
catch { /* ignore */ }
|
|
427
|
+
};
|
|
428
|
+
try {
|
|
429
|
+
const base = resolveProjectRoot(process.cwd());
|
|
430
|
+
scanDir(join(base, ".gsd", "workflows"), "project");
|
|
431
|
+
scanDir(join(base, ".gsd", "workflow-defs"), "project-legacy");
|
|
432
|
+
scanDir(join(gsdHome, "workflows"), "global");
|
|
433
|
+
}
|
|
434
|
+
catch { /* ignore */ }
|
|
435
|
+
// Also include bundled template names.
|
|
436
|
+
try {
|
|
437
|
+
const registry = loadRegistry();
|
|
438
|
+
for (const id of Object.keys(registry.templates)) {
|
|
439
|
+
if (seen.has(id) || !id.startsWith(third))
|
|
440
|
+
continue;
|
|
441
|
+
seen.add(id);
|
|
442
|
+
results.push({ cmd: id, desc: "Workflow plugin (bundled)" });
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
catch { /* ignore */ }
|
|
446
|
+
return results.map((r) => ({
|
|
447
|
+
value: `workflow info ${r.cmd}`,
|
|
448
|
+
label: r.cmd,
|
|
449
|
+
description: r.desc,
|
|
450
|
+
}));
|
|
451
|
+
}
|
|
380
452
|
const nested = NESTED_COMPLETIONS[command];
|
|
381
453
|
if (nested && parts.length <= 2) {
|
|
382
454
|
return filterOptions(subcommand, nested, command);
|
|
@@ -31,11 +31,17 @@ export function showHelp(ctx, args = "") {
|
|
|
31
31
|
" /gsd undo Revert last completed unit [--force]",
|
|
32
32
|
" /gsd rethink Conversational project reorganization",
|
|
33
33
|
"",
|
|
34
|
+
"OBSERVABILITY",
|
|
35
|
+
" /gsd logs Browse activity and debug logs",
|
|
36
|
+
" /gsd debug Create/list/continue persistent debug sessions",
|
|
37
|
+
"",
|
|
34
38
|
"SETUP",
|
|
39
|
+
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
40
|
+
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
35
41
|
" /gsd init Project init wizard",
|
|
36
|
-
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
37
42
|
" /gsd model Switch active session model",
|
|
38
|
-
" /gsd prefs Manage preferences",
|
|
43
|
+
" /gsd prefs Manage preferences (alias for /gsd setup prefs)",
|
|
44
|
+
" /gsd keys API key manager (LLM + tool keys)",
|
|
39
45
|
" /gsd doctor Diagnose and repair .gsd/ state",
|
|
40
46
|
"",
|
|
41
47
|
"Use /gsd help full for the complete command reference.",
|
|
@@ -61,6 +67,8 @@ export function showHelp(ctx, args = "") {
|
|
|
61
67
|
" /gsd history View execution history [--cost] [--phase] [--model] [N]",
|
|
62
68
|
" /gsd changelog Show categorized release notes [version]",
|
|
63
69
|
` /gsd notifications View persistent notification history [clear|tail|filter] (${formattedShortcutPair("notifications")})`,
|
|
70
|
+
" /gsd logs Browse activity logs, debug logs, and metrics",
|
|
71
|
+
" /gsd debug Create/list/continue persistent debug sessions",
|
|
64
72
|
"",
|
|
65
73
|
"COURSE CORRECTION",
|
|
66
74
|
" /gsd steer <desc> Apply user override to active work",
|
|
@@ -77,14 +85,15 @@ export function showHelp(ctx, args = "") {
|
|
|
77
85
|
" /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
|
|
78
86
|
"",
|
|
79
87
|
"SETUP & CONFIGURATION",
|
|
88
|
+
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
89
|
+
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
80
90
|
" /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
|
|
81
|
-
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
82
91
|
" /gsd model Switch active session model [provider/model|model-id]",
|
|
83
92
|
" /gsd mode Set workflow mode (solo/team) [global|project]",
|
|
84
|
-
" /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude]",
|
|
93
|
+
" /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude] (alias for /gsd setup prefs)",
|
|
85
94
|
" /gsd cmux Manage cmux integration [status|on|off|notifications|sidebar|splits|browser]",
|
|
86
|
-
" /gsd
|
|
87
|
-
" /gsd
|
|
95
|
+
" /gsd keys API key manager (LLM + tool keys) [list|add|remove|test|rotate|doctor]",
|
|
96
|
+
" /gsd config (deprecated) Set tool API keys — use /gsd keys instead",
|
|
88
97
|
" /gsd show-config Show effective configuration (models, routing, toggles)",
|
|
89
98
|
" /gsd hooks Show post-unit hook configuration",
|
|
90
99
|
" /gsd extensions Manage extensions [list|enable|disable|info]",
|
|
@@ -149,29 +158,38 @@ export async function handleVisualize(ctx) {
|
|
|
149
158
|
ctx.ui.notify("Visualizer requires an interactive terminal. Use /gsd status for a text-based overview.", "warning");
|
|
150
159
|
}
|
|
151
160
|
}
|
|
152
|
-
export async function handleSetup(args, ctx) {
|
|
161
|
+
export async function handleSetup(args, ctx, pi) {
|
|
153
162
|
const { detectProjectState, hasGlobalSetup } = await import("../../detection.js");
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
163
|
+
const { isOnboardingComplete, readOnboardingRecord } = await import("../../onboarding-state.js");
|
|
164
|
+
// Sub-route dispatch — keep redirects but route the canonical work to /gsd
|
|
165
|
+
// onboarding (single source for wizard steps) and /gsd keys (single source
|
|
166
|
+
// for credentials).
|
|
167
|
+
if (args === "onboarding" || args === "wizard") {
|
|
168
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
169
|
+
await handleOnboarding("", ctx);
|
|
170
|
+
return;
|
|
161
171
|
}
|
|
162
172
|
if (args === "llm" || args === "auth") {
|
|
163
|
-
|
|
173
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
174
|
+
await handleOnboarding("--step llm", ctx);
|
|
164
175
|
return;
|
|
165
176
|
}
|
|
166
177
|
if (args === "search") {
|
|
167
|
-
|
|
178
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
179
|
+
await handleOnboarding("--step search", ctx);
|
|
168
180
|
return;
|
|
169
181
|
}
|
|
170
182
|
if (args === "remote") {
|
|
171
|
-
|
|
183
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
184
|
+
await handleOnboarding("--step remote", ctx);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (args === "model") {
|
|
188
|
+
await handleModel("", ctx, pi);
|
|
172
189
|
return;
|
|
173
190
|
}
|
|
174
191
|
if (args === "keys") {
|
|
192
|
+
ctx.ui.notify("Tip: /gsd keys is the canonical command for API key management.", "info");
|
|
175
193
|
const { handleKeys } = await import("../../key-manager.js");
|
|
176
194
|
await handleKeys("", ctx);
|
|
177
195
|
return;
|
|
@@ -181,13 +199,30 @@ export async function handleSetup(args, ctx) {
|
|
|
181
199
|
await handlePrefsWizard(ctx, "global");
|
|
182
200
|
return;
|
|
183
201
|
}
|
|
202
|
+
// Bare /gsd setup — render the hub: status + actions
|
|
203
|
+
const globalConfigured = hasGlobalSetup();
|
|
204
|
+
const detection = detectProjectState(projectRoot());
|
|
205
|
+
const onboardingDone = isOnboardingComplete();
|
|
206
|
+
const record = readOnboardingRecord();
|
|
207
|
+
const statusLines = ["GSD Setup\n"];
|
|
208
|
+
statusLines.push(onboardingDone
|
|
209
|
+
? ` Onboarding: ✓ complete${record.completedAt ? ` (${record.completedAt.slice(0, 10)})` : ""}`
|
|
210
|
+
: ` Onboarding: ○ not complete — /gsd onboarding to start`);
|
|
211
|
+
statusLines.push(` Global preferences: ${globalConfigured ? "configured" : "not set"}`);
|
|
212
|
+
statusLines.push(` Project state: ${detection.state}`);
|
|
213
|
+
if (detection.projectSignals.primaryLanguage) {
|
|
214
|
+
statusLines.push(` Detected: ${detection.projectSignals.primaryLanguage}`);
|
|
215
|
+
}
|
|
184
216
|
ctx.ui.notify(statusLines.join("\n"), "info");
|
|
185
|
-
ctx.ui.notify("
|
|
186
|
-
" /gsd setup llm
|
|
187
|
-
" /gsd setup
|
|
188
|
-
" /gsd setup
|
|
189
|
-
" /gsd setup
|
|
190
|
-
" /gsd setup
|
|
217
|
+
ctx.ui.notify("Configuration hub:\n" +
|
|
218
|
+
" /gsd setup llm — LLM provider & auth\n" +
|
|
219
|
+
" /gsd setup model — Default model picker\n" +
|
|
220
|
+
" /gsd setup search — Web search provider\n" +
|
|
221
|
+
" /gsd setup remote — Remote questions (Discord/Slack/Telegram)\n" +
|
|
222
|
+
" /gsd setup keys — API keys (alias for /gsd keys)\n" +
|
|
223
|
+
" /gsd setup prefs — Global preferences (alias for /gsd prefs)\n" +
|
|
224
|
+
" /gsd setup onboarding — Full wizard (alias for /gsd onboarding)\n\n" +
|
|
225
|
+
"Tip: /gsd onboarding --resume to continue an incomplete setup.", "info");
|
|
191
226
|
}
|
|
192
227
|
function sortModelsForSelection(models, currentModel) {
|
|
193
228
|
return [...models].sort((a, b) => {
|
|
@@ -364,7 +399,12 @@ export async function handleCoreCommand(trimmed, ctx, pi) {
|
|
|
364
399
|
return true;
|
|
365
400
|
}
|
|
366
401
|
if (trimmed === "setup" || trimmed.startsWith("setup ")) {
|
|
367
|
-
await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx);
|
|
402
|
+
await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx, pi);
|
|
403
|
+
return true;
|
|
404
|
+
}
|
|
405
|
+
if (trimmed === "onboarding" || trimmed.startsWith("onboarding ")) {
|
|
406
|
+
const { handleOnboarding } = await import("./onboarding.js");
|
|
407
|
+
await handleOnboarding(trimmed.replace(/^onboarding\s*/, "").trim(), ctx);
|
|
368
408
|
return true;
|
|
369
409
|
}
|
|
370
410
|
return false;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// GSD Extension — /gsd escalate Command Handler (ADR-011 Phase 2)
|
|
2
|
+
// Surface and resolve mid-execution escalations from the CLI.
|
|
3
|
+
import { projectRoot } from "../context.js";
|
|
4
|
+
import { getActiveMilestoneId } from "../../state.js";
|
|
5
|
+
import { readEscalationArtifact, formatEscalationForDisplay, resolveEscalation, listActionableEscalations, listAllEscalations, } from "../../escalation.js";
|
|
6
|
+
import { saveDecisionToDb } from "../../db-writer.js";
|
|
7
|
+
import { loadEffectiveGSDPreferences } from "../../preferences.js";
|
|
8
|
+
import { invalidateStateCache } from "../../state.js";
|
|
9
|
+
import { emitUokAuditEvent, buildAuditEnvelope } from "../../uok/audit.js";
|
|
10
|
+
function helpMessage() {
|
|
11
|
+
return [
|
|
12
|
+
"/gsd escalate — manage mid-execution escalations (ADR-011 Phase 2)",
|
|
13
|
+
"",
|
|
14
|
+
"Subcommands:",
|
|
15
|
+
" list [--all] show pending escalations (use --all to include resolved)",
|
|
16
|
+
" show <taskId> print the escalation artifact",
|
|
17
|
+
" resolve <taskId> <choice> [rationale...]",
|
|
18
|
+
" resolve an escalation — choice is an option id,",
|
|
19
|
+
" `accept` (use recommendation), or `reject-blocker`",
|
|
20
|
+
" (convert to a blocker and trigger slice replan)",
|
|
21
|
+
"",
|
|
22
|
+
"Note: disabling `phases.mid_execution_escalation` does NOT clear pending",
|
|
23
|
+
"escalations. If you need to drain them, re-enable the flag, resolve via",
|
|
24
|
+
"`/gsd escalate resolve`, then disable.",
|
|
25
|
+
].join("\n");
|
|
26
|
+
}
|
|
27
|
+
function formatListEntries(rows, basePath) {
|
|
28
|
+
if (rows.length === 0)
|
|
29
|
+
return "No escalations.";
|
|
30
|
+
return rows.map((t) => {
|
|
31
|
+
const art = t.escalation_artifact_path ? readEscalationArtifact(t.escalation_artifact_path) : null;
|
|
32
|
+
const status = t.escalation_pending ? "PENDING (paused)" : t.escalation_awaiting_review ? "awaiting-review" : "resolved";
|
|
33
|
+
const question = art?.question ?? "(artifact missing)";
|
|
34
|
+
return ` ${t.slice_id}/${t.id} [${status}] ${question}`;
|
|
35
|
+
}).join("\n");
|
|
36
|
+
}
|
|
37
|
+
export async function handleEscalateCommand(args, ctx, pi) {
|
|
38
|
+
void pi;
|
|
39
|
+
const trimmed = args.trim();
|
|
40
|
+
if (trimmed === "" || trimmed === "help") {
|
|
41
|
+
ctx.ui.notify(helpMessage(), "info");
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const basePath = projectRoot();
|
|
45
|
+
const prefs = loadEffectiveGSDPreferences()?.preferences;
|
|
46
|
+
if (prefs?.phases?.mid_execution_escalation !== true) {
|
|
47
|
+
ctx.ui.notify("Escalation is off. Enable with `phases: { mid_execution_escalation: true }` in your PREFERENCES.md.", "warning");
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const milestoneId = await getActiveMilestoneId(basePath);
|
|
51
|
+
if (!milestoneId) {
|
|
52
|
+
ctx.ui.notify("No active milestone — cannot list escalations.", "warning");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// ── list ────────────────────────────────────────────────────────────────
|
|
56
|
+
if (trimmed === "list" || trimmed === "list --all" || trimmed === "--all") {
|
|
57
|
+
const includeAll = trimmed.includes("--all");
|
|
58
|
+
const rows = includeAll ? listAllEscalations(milestoneId) : listActionableEscalations(milestoneId);
|
|
59
|
+
const body = formatListEntries(rows, basePath);
|
|
60
|
+
ctx.ui.notify(`${includeAll ? "All escalations" : "Actionable escalations"} for ${milestoneId}:\n${body}`, "info");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Parse a possibly-slice-qualified task id: "Sxx/Tyy" or plain "Tyy".
|
|
64
|
+
// Returns { sliceId?, taskId }.
|
|
65
|
+
const parseTaskRef = (ref) => {
|
|
66
|
+
const slash = ref.indexOf("/");
|
|
67
|
+
if (slash > 0) {
|
|
68
|
+
return { sliceId: ref.slice(0, slash), taskId: ref.slice(slash + 1) };
|
|
69
|
+
}
|
|
70
|
+
return { taskId: ref };
|
|
71
|
+
};
|
|
72
|
+
// Resolve a task ref to a single row, surfacing ambiguity when a bare task
|
|
73
|
+
// id matches more than one slice.
|
|
74
|
+
const locateRow = (ref) => {
|
|
75
|
+
const { sliceId, taskId } = parseTaskRef(ref);
|
|
76
|
+
const rows = listAllEscalations(milestoneId).filter((t) => t.id === taskId && (sliceId === undefined || t.slice_id === sliceId));
|
|
77
|
+
if (rows.length === 0)
|
|
78
|
+
return "not-found";
|
|
79
|
+
if (rows.length > 1)
|
|
80
|
+
return "ambiguous";
|
|
81
|
+
return rows[0];
|
|
82
|
+
};
|
|
83
|
+
// ── show <taskRef> ──────────────────────────────────────────────────────
|
|
84
|
+
if (trimmed.startsWith("show ")) {
|
|
85
|
+
const ref = trimmed.slice(5).trim();
|
|
86
|
+
const row = locateRow(ref);
|
|
87
|
+
if (row === "ambiguous") {
|
|
88
|
+
ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (row === "not-found" || !row.escalation_artifact_path) {
|
|
92
|
+
ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const art = readEscalationArtifact(row.escalation_artifact_path);
|
|
96
|
+
if (!art) {
|
|
97
|
+
ctx.ui.notify(`Escalation artifact at ${row.escalation_artifact_path} is missing or malformed.`, "error");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
ctx.ui.notify(formatEscalationForDisplay(art), "info");
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// ── resolve <taskRef> <choice> [rationale...] ───────────────────────────
|
|
104
|
+
if (trimmed.startsWith("resolve ")) {
|
|
105
|
+
const parts = trimmed.slice(8).trim().split(/\s+/);
|
|
106
|
+
const ref = parts[0];
|
|
107
|
+
const choice = parts[1];
|
|
108
|
+
const rationale = parts.slice(2).join(" ").trim();
|
|
109
|
+
if (!ref || !choice) {
|
|
110
|
+
ctx.ui.notify("Usage: /gsd escalate resolve <taskId|Sxx/Tyy> <choice> [rationale...]", "warning");
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const row = locateRow(ref);
|
|
114
|
+
if (row === "ambiguous") {
|
|
115
|
+
ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (row === "not-found") {
|
|
119
|
+
ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const taskId = row.id;
|
|
123
|
+
const result = resolveEscalation(basePath, milestoneId, row.slice_id, taskId, choice, rationale);
|
|
124
|
+
invalidateStateCache();
|
|
125
|
+
if (result.status !== "resolved" && result.status !== "rejected-to-blocker") {
|
|
126
|
+
ctx.ui.notify(result.message, result.status === "invalid-choice" ? "warning" : "error");
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Persist the user's choice as a decision (only for resolved, not reject-blocker).
|
|
130
|
+
if (result.status === "resolved") {
|
|
131
|
+
try {
|
|
132
|
+
const art = row.escalation_artifact_path ? readEscalationArtifact(row.escalation_artifact_path) : null;
|
|
133
|
+
const scope = `${milestoneId}/${row.slice_id}/${taskId}`;
|
|
134
|
+
const decisionText = art?.question ?? `escalation on ${taskId}`;
|
|
135
|
+
const choiceLabel = choice === "accept"
|
|
136
|
+
? `${art?.recommendation ?? "accepted"} (recommended)`
|
|
137
|
+
: (result.chosenOption?.label ?? choice);
|
|
138
|
+
const { id: decisionId } = await saveDecisionToDb({
|
|
139
|
+
scope,
|
|
140
|
+
decision: decisionText,
|
|
141
|
+
choice: choiceLabel,
|
|
142
|
+
rationale: rationale || result.chosenOption?.tradeoffs || "User-resolved escalation.",
|
|
143
|
+
made_by: "human",
|
|
144
|
+
source: "escalation",
|
|
145
|
+
when_context: `ADR-011 escalation resolved ${new Date().toISOString()}`,
|
|
146
|
+
}, basePath);
|
|
147
|
+
emitUokAuditEvent(basePath, buildAuditEnvelope({
|
|
148
|
+
traceId: `escalation:${milestoneId}:${row.slice_id}:${taskId}`,
|
|
149
|
+
category: "gate",
|
|
150
|
+
type: "escalation-decision-persisted",
|
|
151
|
+
payload: {
|
|
152
|
+
milestoneId,
|
|
153
|
+
sliceId: row.slice_id,
|
|
154
|
+
taskId,
|
|
155
|
+
decisionId,
|
|
156
|
+
choice,
|
|
157
|
+
},
|
|
158
|
+
}));
|
|
159
|
+
ctx.ui.notify(`${result.message}\nDecision recorded as ${decisionId}. Run /gsd auto to continue.`, "success");
|
|
160
|
+
}
|
|
161
|
+
catch (decErr) {
|
|
162
|
+
ctx.ui.notify(`${result.message}\nWARN: decision persistence failed: ${decErr.message}`, "warning");
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// rejected-to-blocker path
|
|
167
|
+
ctx.ui.notify(`${result.message} Run /gsd auto to trigger the replan.`, "success");
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
ctx.ui.notify(`Unknown subcommand. ${helpMessage()}`, "warning");
|
|
171
|
+
}
|