gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.fd2382b9f
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.js +39 -14
- 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 +9 -7
- package/dist/resources/extensions/gsd/auto-prompts.js +151 -37
- 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 +50 -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 +67 -3
- package/dist/resources/extensions/gsd/commands/handlers/core.js +6 -0
- package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -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-debug.js +388 -0
- package/dist/resources/extensions/gsd/commands-do.js +1 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
- 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-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/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/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/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/run-manager.js +37 -17
- 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/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-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 +6 -6
- 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 +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/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- 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 +6 -6
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- 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.02df9631042cc18e.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-6c7cda3e318eedb6.js} +1 -1
- package/dist/web/standalone/.next/static/css/3e9cdadb4d23b8a4.css +1 -0
- 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 +9 -7
- package/src/resources/extensions/gsd/auto-prompts.ts +178 -38
- 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 +53 -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 +60 -3
- package/src/resources/extensions/gsd/commands/handlers/core.ts +6 -0
- package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -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-debug.ts +484 -0
- package/src/resources/extensions/gsd/commands-do.ts +1 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
- 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-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/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/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/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/run-manager.ts +53 -19
- 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-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-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 +2 -2
- 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/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/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/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-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/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/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/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-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 → jaWw1Jh0TYayjbfOrFe8D}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → jaWw1Jh0TYayjbfOrFe8D}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { logWarning } from "../workflow-logger.js";
|
|
2
2
|
import { checkAutoStartAfterDiscuss } from "../guided-flow.js";
|
|
3
|
-
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto } from "../auto.js";
|
|
3
|
+
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto, setCurrentDispatchedModelId } from "../auto.js";
|
|
4
4
|
import { getNextFallbackModel, resolveModelWithFallbacksForUnit } from "../preferences.js";
|
|
5
5
|
import { pauseAutoForProviderError } from "../provider-error-pause.js";
|
|
6
6
|
import { isSessionSwitchInFlight, resolveAgentEnd } from "../auto-loop.js";
|
|
@@ -106,26 +106,11 @@ export async function handleAgentEnd(pi, event, ctx) {
|
|
|
106
106
|
const explicitRetryAfterMs = ("retryAfterMs" in lastMsg && typeof lastMsg.retryAfterMs === "number") ? lastMsg.retryAfterMs : undefined;
|
|
107
107
|
// ── 1. Classify using rawErrorMsg to avoid prose false-positives ────
|
|
108
108
|
const cls = classifyError(rawErrorMsg, explicitRetryAfterMs);
|
|
109
|
-
// ── 1b. Defer to Core RetryHandler for transient errors
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
// better than our Layer 2 pause+resume (which creates a new session).
|
|
115
|
-
//
|
|
116
|
-
// If we react here AND the Core also retries, we race: pauseAuto tears
|
|
117
|
-
// down the session while agent.continue() starts a new turn.
|
|
118
|
-
//
|
|
119
|
-
// Solution: Do nothing for transient errors. The Core RetryHandler
|
|
120
|
-
// runs next in _processAgentEvent and will either:
|
|
121
|
-
// a) Retry successfully → new agent_end (success) → we see it next time
|
|
122
|
-
// b) Exhaust retries → the agent stays idle, autoLoop's unit timeout
|
|
123
|
-
// or stuck detection handles it
|
|
124
|
-
//
|
|
125
|
-
// We do NOT call resolveAgentEnd here — that would unblock autoLoop
|
|
126
|
-
// prematurely while the Core is still retrying in the same session.
|
|
127
|
-
// We do NOT call pauseAuto — that would tear down the session.
|
|
128
|
-
if (isTransient(cls)) {
|
|
109
|
+
// ── 1b. Defer to Core RetryHandler for most transient errors ────────
|
|
110
|
+
// Core retries transient failures in-session after this handler.
|
|
111
|
+
// Keep that behavior for non-rate-limit classes to avoid pause/retry races,
|
|
112
|
+
// but let rate-limit continue into model fallback logic below (#4373).
|
|
113
|
+
if (isTransient(cls) && cls.kind !== "rate-limit") {
|
|
129
114
|
return;
|
|
130
115
|
}
|
|
131
116
|
// Cap rate-limit backoff for CLI-style providers (openai-codex, google-gemini-cli)
|
|
@@ -177,6 +162,7 @@ export async function handleAgentEnd(pi, event, ctx) {
|
|
|
177
162
|
if (modelToSet) {
|
|
178
163
|
const ok = await pi.setModel(modelToSet, { persist: false });
|
|
179
164
|
if (ok) {
|
|
165
|
+
setCurrentDispatchedModelId({ provider: modelToSet.provider, id: modelToSet.id });
|
|
180
166
|
ctx.ui.notify(`Model error${errorDetail}. Switched to fallback: ${nextModelId} and resuming.`, "warning");
|
|
181
167
|
pi.sendMessage({ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false }, { triggerTurn: true });
|
|
182
168
|
return;
|
|
@@ -193,6 +179,7 @@ export async function handleAgentEnd(pi, event, ctx) {
|
|
|
193
179
|
if (startModel) {
|
|
194
180
|
const ok = await pi.setModel(startModel, { persist: false });
|
|
195
181
|
if (ok) {
|
|
182
|
+
setCurrentDispatchedModelId({ provider: startModel.provider, id: startModel.id });
|
|
196
183
|
retryState.networkRetryCount = 0;
|
|
197
184
|
retryState.currentRetryModelId = undefined;
|
|
198
185
|
ctx.ui.notify(`Model error${errorDetail}. Restored session model: ${sessionModel.provider}/${sessionModel.id} and resuming.`, "warning");
|
|
@@ -421,10 +421,14 @@ export function registerDbTools(pi) {
|
|
|
421
421
|
depends: Type.Array(Type.String(), { description: "Slice dependency IDs" }),
|
|
422
422
|
demo: Type.String({ description: "Roadmap demo text / After this" }),
|
|
423
423
|
goal: Type.String({ description: "Slice goal" }),
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
424
|
+
// ADR-011: heavy planning fields are optional for sketch slices; required for full slices.
|
|
425
|
+
successCriteria: Type.Optional(Type.String({ description: "Slice success criteria block (required for full slices; omit for sketches)" })),
|
|
426
|
+
proofLevel: Type.Optional(Type.String({ description: "Slice proof level (required for full slices; omit for sketches)" })),
|
|
427
|
+
integrationClosure: Type.Optional(Type.String({ description: "Slice integration closure (required for full slices; omit for sketches)" })),
|
|
428
|
+
observabilityImpact: Type.Optional(Type.String({ description: "Slice observability impact (required for full slices; omit for sketches)" })),
|
|
429
|
+
// ADR-011 sketch-then-refine fields.
|
|
430
|
+
isSketch: Type.Optional(Type.Boolean({ description: "ADR-011: true marks this slice as a sketch awaiting refine-slice expansion" })),
|
|
431
|
+
sketchScope: Type.Optional(Type.String({ description: "ADR-011: 2–3 sentence scope boundary, required when isSketch=true" })),
|
|
428
432
|
}), { description: "Planned slices for the milestone" }),
|
|
429
433
|
// ── Enrichment metadata (optional — defaults to empty) ────────────
|
|
430
434
|
status: Type.Optional(Type.String({ description: "Milestone status (defaults to active)" })),
|
|
@@ -589,6 +593,20 @@ export function registerDbTools(pi) {
|
|
|
589
593
|
keyFiles: Type.Optional(Type.Array(Type.String(), { description: "List of key files created or modified" })),
|
|
590
594
|
keyDecisions: Type.Optional(Type.Array(Type.String(), { description: "List of key decisions made during this task" })),
|
|
591
595
|
blockerDiscovered: Type.Optional(Type.Boolean({ description: "Whether a plan-invalidating blocker was discovered" })),
|
|
596
|
+
// ADR-011 Phase 2: mid-execution escalation — agent asks the user to resolve an ambiguity.
|
|
597
|
+
escalation: Type.Optional(Type.Object({
|
|
598
|
+
question: Type.String({ description: "The question the user needs to answer — one clear sentence." }),
|
|
599
|
+
options: Type.Array(Type.Object({
|
|
600
|
+
id: Type.String({ description: "Short id (e.g. 'A', 'B') used by /gsd escalate resolve." }),
|
|
601
|
+
label: Type.String({ description: "One-line label." }),
|
|
602
|
+
tradeoffs: Type.String({ description: "1-2 sentences on the tradeoffs of this option." }),
|
|
603
|
+
}), { minItems: 2, maxItems: 4, description: "2–4 options the user can choose between." }),
|
|
604
|
+
recommendation: Type.String({ description: "Option id the executor recommends." }),
|
|
605
|
+
recommendationRationale: Type.String({ description: "Why the recommendation — 1–2 sentences." }),
|
|
606
|
+
continueWithDefault: Type.Boolean({
|
|
607
|
+
description: "When true, loop continues (artifact logged for later review). When false, auto-mode pauses until the user resolves via /gsd escalate resolve.",
|
|
608
|
+
}),
|
|
609
|
+
}, { description: "ADR-011 Phase 2: optional escalation payload. Only honored when phases.mid_execution_escalation is true." })),
|
|
592
610
|
verificationEvidence: Type.Optional(Type.Array(Type.Union([
|
|
593
611
|
Type.Object({
|
|
594
612
|
command: Type.String({ description: "Verification command that was run" }),
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Type } from "@sinclair/typebox";
|
|
3
3
|
import { ensureDbOpen } from "./dynamic-tools.js";
|
|
4
4
|
import { executeMilestoneStatus } from "../tools/workflow-tool-executors.js";
|
|
5
|
+
import { checkpointDatabase } from "../gsd-db.js";
|
|
5
6
|
export function registerQueryTools(pi) {
|
|
6
7
|
pi.registerTool({
|
|
7
8
|
name: "gsd_milestone_status",
|
|
@@ -27,4 +28,32 @@ export function registerQueryTools(pi) {
|
|
|
27
28
|
return executeMilestoneStatus(params);
|
|
28
29
|
},
|
|
29
30
|
});
|
|
31
|
+
pi.registerTool({
|
|
32
|
+
name: "gsd_checkpoint_db",
|
|
33
|
+
label: "Checkpoint GSD Database",
|
|
34
|
+
description: "Flush the SQLite WAL (Write-Ahead Log) into the base gsd.db file. " +
|
|
35
|
+
"Call this before `git add .gsd/gsd.db` to ensure the committed database " +
|
|
36
|
+
"contains current milestone/slice/task state rather than stale pre-session content. " +
|
|
37
|
+
"Safe to call at any time while GSD is running.",
|
|
38
|
+
promptSnippet: "Flush WAL into gsd.db so git add stages current state",
|
|
39
|
+
promptGuidelines: [
|
|
40
|
+
"Call gsd_checkpoint_db immediately before staging .gsd/gsd.db with git add.",
|
|
41
|
+
"Do not use sqlite3 or shell commands to checkpoint — they are blocked. Use this tool instead.",
|
|
42
|
+
],
|
|
43
|
+
parameters: Type.Object({}),
|
|
44
|
+
async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
|
|
45
|
+
const dbAvailable = await ensureDbOpen();
|
|
46
|
+
if (!dbAvailable) {
|
|
47
|
+
return {
|
|
48
|
+
content: [{ type: "text", text: "Error: GSD database is not available. Cannot checkpoint." }],
|
|
49
|
+
details: { operation: "checkpoint_db", error: "db_unavailable" },
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
checkpointDatabase();
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
|
|
55
|
+
details: { operation: "checkpoint_db", status: "ok" },
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
});
|
|
30
59
|
}
|
|
@@ -13,6 +13,7 @@ import { loadToolApiKeys } from "../commands-config.js";
|
|
|
13
13
|
import { loadFile, saveFile, formatContinue } from "../files.js";
|
|
14
14
|
import { deriveState } from "../state.js";
|
|
15
15
|
import { getAutoDashboardData, isAutoActive, isAutoPaused, markToolEnd, markToolStart, recordToolInvocationError } from "../auto.js";
|
|
16
|
+
import { hideFooter } from "../auto-dashboard.js";
|
|
16
17
|
import { isParallelActive, shutdownParallel } from "../parallel-orchestrator.js";
|
|
17
18
|
import { checkToolCallLoop, resetToolCallLoopGuard } from "./tool-call-loop-guard.js";
|
|
18
19
|
import { saveActivityLog } from "../activity-log.js";
|
|
@@ -77,6 +78,9 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
77
78
|
catch { /* non-fatal */ }
|
|
78
79
|
}
|
|
79
80
|
loadToolApiKeys();
|
|
81
|
+
if (isAutoActive()) {
|
|
82
|
+
ctx.ui.setFooter(hideFooter);
|
|
83
|
+
}
|
|
80
84
|
});
|
|
81
85
|
pi.on("session_switch", async (_event, ctx) => {
|
|
82
86
|
initNotificationStore(process.cwd());
|
|
@@ -96,6 +100,9 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
96
100
|
prepareWorkflowMcpForProject(ctx, process.cwd());
|
|
97
101
|
}
|
|
98
102
|
loadToolApiKeys();
|
|
103
|
+
if (isAutoActive()) {
|
|
104
|
+
ctx.ui.setFooter(hideFooter);
|
|
105
|
+
}
|
|
99
106
|
});
|
|
100
107
|
pi.on("before_agent_start", async (event, ctx) => {
|
|
101
108
|
// Wait for ecosystem loader to finish (no-op after first turn).
|
|
@@ -292,6 +299,7 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
292
299
|
pi.on("tool_call", async (event, ctx) => {
|
|
293
300
|
if (!isAutoActive())
|
|
294
301
|
return;
|
|
302
|
+
markToolStart(event.toolCallId, event.toolName);
|
|
295
303
|
safetyRecordToolCall(event.toolCallId, event.toolName, event.input);
|
|
296
304
|
// Destructive command classification (warn only, never block)
|
|
297
305
|
if (isToolCallEventType("bash", event)) {
|
|
@@ -305,6 +313,20 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
305
313
|
}
|
|
306
314
|
});
|
|
307
315
|
pi.on("tool_result", async (event) => {
|
|
316
|
+
if (isAutoActive() && typeof event.toolCallId === "string") {
|
|
317
|
+
markToolEnd(event.toolCallId);
|
|
318
|
+
}
|
|
319
|
+
if (isAutoActive() && event.isError && event.toolName.startsWith("gsd_")) {
|
|
320
|
+
const resultPayload = ("result" in event ? event.result : undefined);
|
|
321
|
+
const errorText = typeof resultPayload === "string"
|
|
322
|
+
? resultPayload
|
|
323
|
+
: (typeof resultPayload?.content?.[0]?.text === "string"
|
|
324
|
+
? resultPayload.content[0].text
|
|
325
|
+
: (typeof event.content === "string"
|
|
326
|
+
? event.content
|
|
327
|
+
: String(resultPayload ?? "")));
|
|
328
|
+
recordToolInvocationError(event.toolName, errorText);
|
|
329
|
+
}
|
|
308
330
|
if (event.toolName !== "ask_user_questions")
|
|
309
331
|
return;
|
|
310
332
|
const milestoneId = getDiscussionMilestoneId(process.cwd());
|
|
@@ -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|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)" },
|
|
@@ -40,6 +40,7 @@ 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
46
|
{ cmd: "setup", desc: "Global setup status and configuration" },
|
|
@@ -60,7 +61,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
60
61
|
{ cmd: "fast", desc: "Toggle OpenAI service tier (on/off/flex/status)" },
|
|
61
62
|
{ cmd: "mcp", desc: "MCP server status, connectivity, and local config bootstrap (status, check, init)" },
|
|
62
63
|
{ cmd: "rethink", desc: "Conversational project reorganization — reorder, park, discard, add milestones" },
|
|
63
|
-
{ cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, validate, pause, resume)" },
|
|
64
|
+
{ cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, info, install, uninstall, validate, pause, resume) or run <name> directly" },
|
|
64
65
|
{ cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache (.gsd/CODEBASE.md)" },
|
|
65
66
|
{ cmd: "ship", desc: "Create PR from milestone artifacts and open for review" },
|
|
66
67
|
{ cmd: "do", desc: "Route freeform text to the right GSD command" },
|
|
@@ -68,6 +69,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
68
69
|
{ cmd: "backlog", desc: "Manage backlog items (add, promote, remove, list)" },
|
|
69
70
|
{ cmd: "pr-branch", desc: "Create clean PR branch filtering .gsd/ commits" },
|
|
70
71
|
{ cmd: "add-tests", desc: "Generate tests for completed slices" },
|
|
72
|
+
{ cmd: "scan", desc: "Rapid codebase assessment — lightweight alternative to full map (--focus tech|arch|quality|concerns|tech+arch)" },
|
|
71
73
|
{ cmd: "language", desc: "Set or clear the global response language (e.g. /gsd language Chinese)" },
|
|
72
74
|
];
|
|
73
75
|
const NESTED_COMPLETIONS = {
|
|
@@ -116,6 +118,12 @@ const NESTED_COMPLETIONS = {
|
|
|
116
118
|
{ cmd: "tail", desc: "Show last N activity log summaries" },
|
|
117
119
|
{ cmd: "clear", desc: "Remove old activity and debug logs" },
|
|
118
120
|
],
|
|
121
|
+
debug: [
|
|
122
|
+
{ cmd: "list", desc: "List persisted debug sessions" },
|
|
123
|
+
{ cmd: "status", desc: "Show status for one debug session slug" },
|
|
124
|
+
{ cmd: "continue", desc: "Resume an existing debug session slug" },
|
|
125
|
+
{ cmd: "--diagnose", desc: "Inspect malformed artifacts and session health" },
|
|
126
|
+
],
|
|
119
127
|
keys: [
|
|
120
128
|
{ cmd: "list", desc: "Show key status dashboard" },
|
|
121
129
|
{ cmd: "add", desc: "Add a key for a provider" },
|
|
@@ -222,8 +230,11 @@ const NESTED_COMPLETIONS = {
|
|
|
222
230
|
],
|
|
223
231
|
workflow: [
|
|
224
232
|
{ cmd: "new", desc: "Create a new workflow definition (via skill)" },
|
|
225
|
-
{ cmd: "run", desc: "Create a run and start auto-mode" },
|
|
233
|
+
{ cmd: "run", desc: "Create a YAML run and start auto-mode" },
|
|
226
234
|
{ cmd: "list", desc: "List workflow runs" },
|
|
235
|
+
{ cmd: "info", desc: "Show plugin details (source, mode, phases)" },
|
|
236
|
+
{ cmd: "install", desc: "Install a plugin from a URL / gist: / gh:" },
|
|
237
|
+
{ cmd: "uninstall", desc: "Remove an installed plugin" },
|
|
227
238
|
{ cmd: "validate", desc: "Validate a workflow definition YAML" },
|
|
228
239
|
{ cmd: "pause", desc: "Pause custom workflow auto-mode" },
|
|
229
240
|
{ cmd: "resume", desc: "Resume paused custom workflow auto-mode" },
|
|
@@ -257,6 +268,13 @@ const NESTED_COMPLETIONS = {
|
|
|
257
268
|
{ cmd: "--dry-run", desc: "Preview what would be filtered" },
|
|
258
269
|
{ cmd: "--name", desc: "Custom branch name" },
|
|
259
270
|
],
|
|
271
|
+
scan: [
|
|
272
|
+
{ cmd: "--focus tech", desc: "Technology stack and external integrations" },
|
|
273
|
+
{ cmd: "--focus arch", desc: "Architecture patterns and directory structure" },
|
|
274
|
+
{ cmd: "--focus quality", desc: "Coding conventions and testing patterns" },
|
|
275
|
+
{ cmd: "--focus concerns", desc: "Technical debt and risk areas" },
|
|
276
|
+
{ cmd: "--focus tech+arch", desc: "Tech + Architecture (default)" },
|
|
277
|
+
],
|
|
260
278
|
language: [
|
|
261
279
|
{ cmd: "off", desc: "Clear the language preference (revert to default)" },
|
|
262
280
|
{ cmd: "clear", desc: "Alias for off — clear the language preference" },
|
|
@@ -377,6 +395,52 @@ export function getGsdArgumentCompletions(prefix) {
|
|
|
377
395
|
}
|
|
378
396
|
return [];
|
|
379
397
|
}
|
|
398
|
+
// Completion for `/gsd workflow info <name>` — list all discoverable plugins (project + global).
|
|
399
|
+
if (command === "workflow" && subcommand === "info" && parts.length <= 3) {
|
|
400
|
+
const results = [];
|
|
401
|
+
const seen = new Set();
|
|
402
|
+
const scanDir = (dir, source) => {
|
|
403
|
+
if (!existsSync(dir))
|
|
404
|
+
return;
|
|
405
|
+
try {
|
|
406
|
+
for (const f of readdirSync(dir)) {
|
|
407
|
+
if (!/\.(ya?ml|md)$/i.test(f))
|
|
408
|
+
continue;
|
|
409
|
+
const name = f.replace(/\.(ya?ml|md)$/i, "");
|
|
410
|
+
if (!name.startsWith(third))
|
|
411
|
+
continue;
|
|
412
|
+
if (seen.has(name))
|
|
413
|
+
continue;
|
|
414
|
+
seen.add(name);
|
|
415
|
+
results.push({ cmd: name, desc: `Workflow plugin (${source})` });
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
catch { /* ignore */ }
|
|
419
|
+
};
|
|
420
|
+
try {
|
|
421
|
+
const base = resolveProjectRoot(process.cwd());
|
|
422
|
+
scanDir(join(base, ".gsd", "workflows"), "project");
|
|
423
|
+
scanDir(join(base, ".gsd", "workflow-defs"), "project-legacy");
|
|
424
|
+
scanDir(join(gsdHome, "workflows"), "global");
|
|
425
|
+
}
|
|
426
|
+
catch { /* ignore */ }
|
|
427
|
+
// Also include bundled template names.
|
|
428
|
+
try {
|
|
429
|
+
const registry = loadRegistry();
|
|
430
|
+
for (const id of Object.keys(registry.templates)) {
|
|
431
|
+
if (seen.has(id) || !id.startsWith(third))
|
|
432
|
+
continue;
|
|
433
|
+
seen.add(id);
|
|
434
|
+
results.push({ cmd: id, desc: "Workflow plugin (bundled)" });
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
catch { /* ignore */ }
|
|
438
|
+
return results.map((r) => ({
|
|
439
|
+
value: `workflow info ${r.cmd}`,
|
|
440
|
+
label: r.cmd,
|
|
441
|
+
description: r.desc,
|
|
442
|
+
}));
|
|
443
|
+
}
|
|
380
444
|
const nested = NESTED_COMPLETIONS[command];
|
|
381
445
|
if (nested && parts.length <= 2) {
|
|
382
446
|
return filterOptions(subcommand, nested, command);
|
|
@@ -31,6 +31,10 @@ 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",
|
|
35
39
|
" /gsd init Project init wizard",
|
|
36
40
|
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
@@ -61,6 +65,8 @@ export function showHelp(ctx, args = "") {
|
|
|
61
65
|
" /gsd history View execution history [--cost] [--phase] [--model] [N]",
|
|
62
66
|
" /gsd changelog Show categorized release notes [version]",
|
|
63
67
|
` /gsd notifications View persistent notification history [clear|tail|filter] (${formattedShortcutPair("notifications")})`,
|
|
68
|
+
" /gsd logs Browse activity logs, debug logs, and metrics",
|
|
69
|
+
" /gsd debug Create/list/continue persistent debug sessions",
|
|
64
70
|
"",
|
|
65
71
|
"COURSE CORRECTION",
|
|
66
72
|
" /gsd steer <desc> Apply user override to active work",
|
|
@@ -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
|
+
}
|
|
@@ -3,6 +3,7 @@ import { handleConfig } from "../../commands-config.js";
|
|
|
3
3
|
import { handleDoctor, handleCapture, handleKnowledge, handleRunHook, handleSkillHealth, handleSteer, handleTriage, handleUpdate } from "../../commands-handlers.js";
|
|
4
4
|
import { handleInspect } from "../../commands-inspect.js";
|
|
5
5
|
import { handleLogs } from "../../commands-logs.js";
|
|
6
|
+
import { handleDebug } from "../../commands-debug.js";
|
|
6
7
|
import { handleCleanupBranches, handleCleanupSnapshots, handleSkip, handleCleanupProjects, handleCleanupWorktrees, handleRecover } from "../../commands-maintenance.js";
|
|
7
8
|
import { handleExport } from "../../export.js";
|
|
8
9
|
import { handleHistory } from "../../history.js";
|
|
@@ -39,6 +40,10 @@ export async function handleOpsCommand(trimmed, ctx, pi) {
|
|
|
39
40
|
await handleLogs(trimmed.replace(/^logs\s*/, "").trim(), ctx);
|
|
40
41
|
return true;
|
|
41
42
|
}
|
|
43
|
+
if (trimmed === "debug" || trimmed.startsWith("debug ")) {
|
|
44
|
+
await handleDebug(trimmed.replace(/^debug\s*/, "").trim(), ctx, pi);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
42
47
|
if (trimmed === "forensics" || trimmed.startsWith("forensics ")) {
|
|
43
48
|
const { handleForensics } = await import("../../forensics.js");
|
|
44
49
|
await handleForensics(trimmed.replace(/^forensics\s*/, "").trim(), ctx, pi);
|
|
@@ -183,6 +188,11 @@ Examples:
|
|
|
183
188
|
await handleNotificationsCommand(trimmed.replace(/^notifications\s*/, "").trim(), ctx, pi);
|
|
184
189
|
return true;
|
|
185
190
|
}
|
|
191
|
+
if (trimmed === "escalate" || trimmed.startsWith("escalate ")) {
|
|
192
|
+
const { handleEscalateCommand } = await import("./escalate.js");
|
|
193
|
+
await handleEscalateCommand(trimmed.replace(/^escalate\s*/, "").trim(), ctx, pi);
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
186
196
|
if (trimmed === "inspect") {
|
|
187
197
|
await handleInspect(ctx);
|
|
188
198
|
return true;
|
|
@@ -238,5 +248,11 @@ Examples:
|
|
|
238
248
|
await handleExtractLearnings(trimmed.replace(/^extract-learnings\s*/, "").trim(), ctx, pi);
|
|
239
249
|
return true;
|
|
240
250
|
}
|
|
251
|
+
if (trimmed === "scan" || trimmed.startsWith("scan ")) {
|
|
252
|
+
const { handleScan } = await import("../../commands-scan.js");
|
|
253
|
+
// \s* (not \s+) is intentional: handles both /gsd scan (no args) and /gsd scan --focus X
|
|
254
|
+
await handleScan(trimmed.replace(/^scan\s*/, "").trim(), ctx, pi);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
241
257
|
return false;
|
|
242
258
|
}
|