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
|
@@ -49,6 +49,7 @@ function makeDeps(
|
|
|
49
49
|
loadEffectiveGSDPreferences: () => ({ preferences: { git: {} } }),
|
|
50
50
|
invalidateAllCaches: () => {},
|
|
51
51
|
captureIntegrationBranch: () => {},
|
|
52
|
+
enterBranchModeForMilestone: () => {},
|
|
52
53
|
...overrides,
|
|
53
54
|
};
|
|
54
55
|
return deps;
|
|
@@ -127,7 +128,7 @@ describe("worktree journal events", () => {
|
|
|
127
128
|
|
|
128
129
|
test("enterMilestone emits worktree-skip when isolation disabled", () => {
|
|
129
130
|
const s = makeSession({ basePath: tmp, originalBasePath: tmp });
|
|
130
|
-
const deps = makeDeps({ shouldUseWorktreeIsolation: () => false });
|
|
131
|
+
const deps = makeDeps({ shouldUseWorktreeIsolation: () => false, getIsolationMode: () => "none" });
|
|
131
132
|
const resolver = new WorktreeResolver(s, deps);
|
|
132
133
|
|
|
133
134
|
resolver.enterMilestone("M001", makeNotifyCtx());
|
|
@@ -145,6 +145,9 @@ function makeDeps(
|
|
|
145
145
|
args: [basePath, mid],
|
|
146
146
|
});
|
|
147
147
|
},
|
|
148
|
+
enterBranchModeForMilestone: (basePath: string, milestoneId: string) => {
|
|
149
|
+
calls.push({ fn: "enterBranchModeForMilestone", args: [basePath, milestoneId] });
|
|
150
|
+
},
|
|
148
151
|
...overrides,
|
|
149
152
|
};
|
|
150
153
|
|
|
@@ -252,10 +255,10 @@ test("enterMilestone enters existing worktree instead of creating", () => {
|
|
|
252
255
|
assert.equal(findCalls(deps.calls, "createAutoWorktree").length, 0);
|
|
253
256
|
});
|
|
254
257
|
|
|
255
|
-
test("enterMilestone is no-op when
|
|
258
|
+
test("enterMilestone is no-op when isolation mode is none", () => {
|
|
256
259
|
const s = makeSession();
|
|
257
260
|
const deps = makeDeps({
|
|
258
|
-
|
|
261
|
+
getIsolationMode: () => "none",
|
|
259
262
|
});
|
|
260
263
|
const ctx = makeNotifyCtx();
|
|
261
264
|
const resolver = new WorktreeResolver(s, deps);
|
|
@@ -265,6 +268,7 @@ test("enterMilestone is no-op when shouldUseWorktreeIsolation is false", () => {
|
|
|
265
268
|
assert.equal(s.basePath, "/project"); // unchanged
|
|
266
269
|
assert.equal(findCalls(deps.calls, "createAutoWorktree").length, 0);
|
|
267
270
|
assert.equal(findCalls(deps.calls, "enterAutoWorktree").length, 0);
|
|
271
|
+
assert.equal(findCalls(deps.calls, "enterBranchModeForMilestone").length, 0);
|
|
268
272
|
});
|
|
269
273
|
|
|
270
274
|
test("enterMilestone does NOT update basePath on creation failure", () => {
|
|
@@ -309,6 +313,77 @@ test("enterMilestone uses originalBasePath as base for worktree ops", () => {
|
|
|
309
313
|
assert.equal(createdFrom, "/project"); // uses originalBasePath, not current basePath
|
|
310
314
|
});
|
|
311
315
|
|
|
316
|
+
// ─── enterMilestone Tests (branch mode) ──────────────────────────────────────
|
|
317
|
+
|
|
318
|
+
test("enterMilestone in branch mode calls enterBranchModeForMilestone and rebuilds GitService", () => {
|
|
319
|
+
const s = makeSession();
|
|
320
|
+
const deps = makeDeps({
|
|
321
|
+
getIsolationMode: () => "branch",
|
|
322
|
+
});
|
|
323
|
+
const ctx = makeNotifyCtx();
|
|
324
|
+
const resolver = new WorktreeResolver(s, deps);
|
|
325
|
+
|
|
326
|
+
resolver.enterMilestone("M001", ctx);
|
|
327
|
+
|
|
328
|
+
// Branch mode: no worktree created, basePath unchanged
|
|
329
|
+
assert.equal(s.basePath, "/project");
|
|
330
|
+
assert.equal(findCalls(deps.calls, "enterBranchModeForMilestone").length, 1);
|
|
331
|
+
assert.equal(findCalls(deps.calls, "createAutoWorktree").length, 0);
|
|
332
|
+
assert.equal(findCalls(deps.calls, "enterAutoWorktree").length, 0);
|
|
333
|
+
assert.equal(findCalls(deps.calls, "GitServiceImpl").length, 1);
|
|
334
|
+
assert.ok(ctx.messages.some((m) => m.level === "info" && m.msg.includes("milestone/M001")));
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
test("enterMilestone in branch mode uses originalBasePath as base", () => {
|
|
338
|
+
const s = makeSession({ basePath: "/project", originalBasePath: "/project" });
|
|
339
|
+
let calledWith = "";
|
|
340
|
+
const deps = makeDeps({
|
|
341
|
+
getIsolationMode: () => "branch",
|
|
342
|
+
enterBranchModeForMilestone: (basePath: string, _mid: string) => {
|
|
343
|
+
calledWith = basePath;
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
const ctx = makeNotifyCtx();
|
|
347
|
+
const resolver = new WorktreeResolver(s, deps);
|
|
348
|
+
|
|
349
|
+
resolver.enterMilestone("M001", ctx);
|
|
350
|
+
|
|
351
|
+
assert.equal(calledWith, "/project");
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
test("enterMilestone in branch mode degrades isolation on failure", () => {
|
|
355
|
+
const s = makeSession();
|
|
356
|
+
const deps = makeDeps({
|
|
357
|
+
getIsolationMode: () => "branch",
|
|
358
|
+
enterBranchModeForMilestone: () => {
|
|
359
|
+
throw new Error("checkout failed");
|
|
360
|
+
},
|
|
361
|
+
});
|
|
362
|
+
const ctx = makeNotifyCtx();
|
|
363
|
+
const resolver = new WorktreeResolver(s, deps);
|
|
364
|
+
|
|
365
|
+
resolver.enterMilestone("M001", ctx);
|
|
366
|
+
|
|
367
|
+
assert.equal(s.basePath, "/project"); // unchanged
|
|
368
|
+
assert.ok(s.isolationDegraded);
|
|
369
|
+
assert.ok(ctx.messages.some((m) => m.level === "warning" && m.msg.includes("checkout failed")));
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
test("enterMilestone branch mode is skipped when isolationDegraded", () => {
|
|
373
|
+
const s = makeSession();
|
|
374
|
+
s.isolationDegraded = true;
|
|
375
|
+
const deps = makeDeps({
|
|
376
|
+
getIsolationMode: () => "branch",
|
|
377
|
+
});
|
|
378
|
+
const ctx = makeNotifyCtx();
|
|
379
|
+
const resolver = new WorktreeResolver(s, deps);
|
|
380
|
+
|
|
381
|
+
resolver.enterMilestone("M001", ctx);
|
|
382
|
+
|
|
383
|
+
assert.equal(findCalls(deps.calls, "enterBranchModeForMilestone").length, 0);
|
|
384
|
+
assert.equal(findCalls(deps.calls, "createAutoWorktree").length, 0);
|
|
385
|
+
});
|
|
386
|
+
|
|
312
387
|
// ─── exitMilestone Tests ─────────────────────────────────────────────────────
|
|
313
388
|
|
|
314
389
|
test("exitMilestone commits, tears down, and resets basePath", () => {
|
|
@@ -37,6 +37,8 @@ import { renderAllProjections, renderSummaryContent } from "../workflow-projecti
|
|
|
37
37
|
import { writeManifest } from "../workflow-manifest.js";
|
|
38
38
|
import { appendEvent } from "../workflow-events.js";
|
|
39
39
|
import { logWarning, logError } from "../workflow-logger.js";
|
|
40
|
+
import { loadEffectiveGSDPreferences } from "../preferences.js";
|
|
41
|
+
import { buildEscalationArtifact, writeEscalationArtifact } from "../escalation.js";
|
|
40
42
|
|
|
41
43
|
export interface CompleteTaskResult {
|
|
42
44
|
taskId: string;
|
|
@@ -111,6 +113,11 @@ function paramsToTaskRow(params: CompleteTaskParams, completedAt: string): TaskR
|
|
|
111
113
|
observability_impact: "",
|
|
112
114
|
full_plan_md: "",
|
|
113
115
|
sequence: 0,
|
|
116
|
+
blocker_source: "",
|
|
117
|
+
escalation_pending: 0,
|
|
118
|
+
escalation_awaiting_review: 0,
|
|
119
|
+
escalation_artifact_path: null,
|
|
120
|
+
escalation_override_applied_at: null,
|
|
114
121
|
};
|
|
115
122
|
}
|
|
116
123
|
|
|
@@ -153,6 +160,39 @@ export async function handleCompleteTask(
|
|
|
153
160
|
const completedAt = new Date().toISOString();
|
|
154
161
|
let guardError: string | null = null;
|
|
155
162
|
|
|
163
|
+
// ── ADR-011 Phase 2: validate escalation payload BEFORE any side effects ─
|
|
164
|
+
// Building the artifact runs the full shape validation (2-4 options, unique
|
|
165
|
+
// ids, recommendation references a real id). If the payload is malformed
|
|
166
|
+
// we must reject the call before marking the task complete, writing
|
|
167
|
+
// SUMMARY.md, flipping the plan checkbox, or closing execute-task gates —
|
|
168
|
+
// otherwise a rejected payload would leave the task marked complete with
|
|
169
|
+
// no escalation recorded, and the loop would silently advance past it.
|
|
170
|
+
// The filesystem write happens later (after side effects) because that's
|
|
171
|
+
// the cheapest ordering and validation is where 99% of failures live.
|
|
172
|
+
let validatedEscalationArtifact: ReturnType<typeof buildEscalationArtifact> | null = null;
|
|
173
|
+
let escalationWriteEnabled = false;
|
|
174
|
+
if (params.escalation) {
|
|
175
|
+
escalationWriteEnabled = loadEffectiveGSDPreferences()?.preferences?.phases?.mid_execution_escalation === true;
|
|
176
|
+
if (escalationWriteEnabled) {
|
|
177
|
+
try {
|
|
178
|
+
validatedEscalationArtifact = buildEscalationArtifact({
|
|
179
|
+
taskId: params.taskId,
|
|
180
|
+
sliceId: params.sliceId,
|
|
181
|
+
milestoneId: params.milestoneId,
|
|
182
|
+
question: params.escalation.question,
|
|
183
|
+
options: params.escalation.options,
|
|
184
|
+
recommendation: params.escalation.recommendation,
|
|
185
|
+
recommendationRationale: params.escalation.recommendationRationale,
|
|
186
|
+
continueWithDefault: params.escalation.continueWithDefault,
|
|
187
|
+
});
|
|
188
|
+
} catch (validationErr) {
|
|
189
|
+
return {
|
|
190
|
+
error: `complete-task escalation payload invalid for ${params.milestoneId}/${params.sliceId}/${params.taskId}: ${(validationErr as Error).message}`,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
156
196
|
transaction(() => {
|
|
157
197
|
// State machine preconditions (inside txn for atomicity).
|
|
158
198
|
// Milestone/slice not existing is OK — insertMilestone/insertSlice below will auto-create.
|
|
@@ -299,6 +339,53 @@ export async function handleCompleteTask(
|
|
|
299
339
|
);
|
|
300
340
|
}
|
|
301
341
|
|
|
342
|
+
// ── ADR-011 Phase 2: write escalation artifact (opt-in) ────────────────
|
|
343
|
+
// Validation already happened BEFORE side effects — this block only
|
|
344
|
+
// performs the disk write for a pre-validated artifact. For
|
|
345
|
+
// continueWithDefault=false, a write failure here would otherwise leave
|
|
346
|
+
// the task marked complete with SUMMARY.md + closed gates but no
|
|
347
|
+
// escalation, which silently advances the loop past a pause the user
|
|
348
|
+
// asked for. We compensate by reverting the DB-level completion: set
|
|
349
|
+
// status back to 'pending' and delete the verification_evidence rows
|
|
350
|
+
// (same shape as the disk-render-failure rollback above). SUMMARY.md
|
|
351
|
+
// on disk is left in place because the next complete-task retry will
|
|
352
|
+
// overwrite it; gate rows are UPSERT-keyed per task and will also be
|
|
353
|
+
// overwritten. This restores the invariant that deriveState() sees a
|
|
354
|
+
// consistent "task not done" view so the loop re-dispatches the task.
|
|
355
|
+
if (validatedEscalationArtifact) {
|
|
356
|
+
try {
|
|
357
|
+
writeEscalationArtifact(basePath, validatedEscalationArtifact);
|
|
358
|
+
} catch (escalationErr) {
|
|
359
|
+
const msg = `complete-task escalation write failed for ${params.milestoneId}/${params.sliceId}/${params.taskId}: ${(escalationErr as Error).message}`;
|
|
360
|
+
logWarning("tool", msg);
|
|
361
|
+
if (validatedEscalationArtifact.continueWithDefault === false) {
|
|
362
|
+
// Compensating rollback: revert DB completion so the loop pauses on
|
|
363
|
+
// re-dispatch instead of silently advancing. Mirror the existing
|
|
364
|
+
// renderErr rollback (line ~261).
|
|
365
|
+
try {
|
|
366
|
+
deleteVerificationEvidence(params.milestoneId, params.sliceId, params.taskId);
|
|
367
|
+
updateTaskStatus(params.milestoneId, params.sliceId, params.taskId, 'pending');
|
|
368
|
+
invalidateStateCache();
|
|
369
|
+
logWarning(
|
|
370
|
+
"tool",
|
|
371
|
+
`complete-task rolled back DB completion for ${params.milestoneId}/${params.sliceId}/${params.taskId} after escalation write failure; SUMMARY.md left on disk for retry.`,
|
|
372
|
+
);
|
|
373
|
+
} catch (rollbackErr) {
|
|
374
|
+
logWarning(
|
|
375
|
+
"tool",
|
|
376
|
+
`complete-task rollback failed after escalation write failure for ${params.milestoneId}/${params.sliceId}/${params.taskId}: ${(rollbackErr as Error).message}`,
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
return { error: msg };
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
} else if (params.escalation && !escalationWriteEnabled) {
|
|
383
|
+
logWarning(
|
|
384
|
+
"tool",
|
|
385
|
+
`complete-task received escalation payload but phases.mid_execution_escalation is not enabled; ignoring (${params.milestoneId}/${params.sliceId}/${params.taskId})`,
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
|
|
302
389
|
// Invalidate all caches
|
|
303
390
|
invalidateStateCache();
|
|
304
391
|
clearPathCache();
|
|
@@ -25,10 +25,18 @@ export interface PlanMilestoneSliceInput {
|
|
|
25
25
|
depends: string[];
|
|
26
26
|
demo: string;
|
|
27
27
|
goal: string;
|
|
28
|
+
/** Required when isSketch is false/absent; may be empty for sketch slices (ADR-011). */
|
|
28
29
|
successCriteria: string;
|
|
30
|
+
/** Required when isSketch is false/absent; may be empty for sketch slices (ADR-011). */
|
|
29
31
|
proofLevel: string;
|
|
32
|
+
/** Required when isSketch is false/absent; may be empty for sketch slices (ADR-011). */
|
|
30
33
|
integrationClosure: string;
|
|
34
|
+
/** Required when isSketch is false/absent; may be empty for sketch slices (ADR-011). */
|
|
31
35
|
observabilityImpact: string;
|
|
36
|
+
/** ADR-011: when true, this slice is a sketch awaiting refine-slice expansion. */
|
|
37
|
+
isSketch?: boolean;
|
|
38
|
+
/** ADR-011: 2–3 sentence scope boundary, required when isSketch is true. */
|
|
39
|
+
sketchScope?: string;
|
|
32
40
|
}
|
|
33
41
|
|
|
34
42
|
export interface PlanMilestoneParams {
|
|
@@ -125,6 +133,16 @@ function validateSlices(value: unknown): PlanMilestoneSliceInput[] {
|
|
|
125
133
|
const proofLevel = obj.proofLevel;
|
|
126
134
|
const integrationClosure = obj.integrationClosure;
|
|
127
135
|
const observabilityImpact = obj.observabilityImpact;
|
|
136
|
+
const isSketchRaw = obj.isSketch;
|
|
137
|
+
const sketchScopeRaw = obj.sketchScope;
|
|
138
|
+
// ADR-011: preserve the 3-valued semantics of isSketch (true / false / absent).
|
|
139
|
+
// Callers that omit isSketch must receive `undefined` here so `insertSlice`'s
|
|
140
|
+
// ON CONFLICT clause preserves any existing is_sketch on the row rather than
|
|
141
|
+
// silently overwriting a legitimate sketch to non-sketch.
|
|
142
|
+
const isSketch: boolean | undefined =
|
|
143
|
+
isSketchRaw === true ? true
|
|
144
|
+
: isSketchRaw === false ? false
|
|
145
|
+
: undefined;
|
|
128
146
|
|
|
129
147
|
if (!isNonEmptyString(sliceId)) throw new Error(`slices[${index}].sliceId must be a non-empty string`);
|
|
130
148
|
if (seen.has(sliceId)) throw new Error(`slices[${index}].sliceId must be unique`);
|
|
@@ -136,10 +154,18 @@ function validateSlices(value: unknown): PlanMilestoneSliceInput[] {
|
|
|
136
154
|
}
|
|
137
155
|
if (!isNonEmptyString(demo)) throw new Error(`slices[${index}].demo must be a non-empty string`);
|
|
138
156
|
if (!isNonEmptyString(goal)) throw new Error(`slices[${index}].goal must be a non-empty string`);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (
|
|
142
|
-
|
|
157
|
+
|
|
158
|
+
// ADR-011: sketch slices may defer the heavyweight planning fields to refine-slice.
|
|
159
|
+
if (isSketch === true) {
|
|
160
|
+
if (!isNonEmptyString(sketchScopeRaw)) {
|
|
161
|
+
throw new Error(`slices[${index}].sketchScope must be a non-empty string when isSketch is true`);
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
if (!isNonEmptyString(successCriteria)) throw new Error(`slices[${index}].successCriteria must be a non-empty string`);
|
|
165
|
+
if (!isNonEmptyString(proofLevel)) throw new Error(`slices[${index}].proofLevel must be a non-empty string`);
|
|
166
|
+
if (!isNonEmptyString(integrationClosure)) throw new Error(`slices[${index}].integrationClosure must be a non-empty string`);
|
|
167
|
+
if (!isNonEmptyString(observabilityImpact)) throw new Error(`slices[${index}].observabilityImpact must be a non-empty string`);
|
|
168
|
+
}
|
|
143
169
|
|
|
144
170
|
return {
|
|
145
171
|
sliceId,
|
|
@@ -148,10 +174,14 @@ function validateSlices(value: unknown): PlanMilestoneSliceInput[] {
|
|
|
148
174
|
depends,
|
|
149
175
|
demo,
|
|
150
176
|
goal,
|
|
151
|
-
successCriteria,
|
|
152
|
-
proofLevel,
|
|
153
|
-
integrationClosure,
|
|
154
|
-
observabilityImpact,
|
|
177
|
+
successCriteria: isNonEmptyString(successCriteria) ? successCriteria : "",
|
|
178
|
+
proofLevel: isNonEmptyString(proofLevel) ? proofLevel : "",
|
|
179
|
+
integrationClosure: isNonEmptyString(integrationClosure) ? integrationClosure : "",
|
|
180
|
+
observabilityImpact: isNonEmptyString(observabilityImpact) ? observabilityImpact : "",
|
|
181
|
+
isSketch,
|
|
182
|
+
// Only carry the sketch scope through if the caller explicitly provided it
|
|
183
|
+
// — preserves ON CONFLICT semantics for re-plans that omit the field.
|
|
184
|
+
sketchScope: sketchScopeRaw === undefined ? undefined : (isNonEmptyString(sketchScopeRaw) ? sketchScopeRaw : ""),
|
|
155
185
|
};
|
|
156
186
|
});
|
|
157
187
|
}
|
|
@@ -274,6 +304,10 @@ export async function handlePlanMilestone(
|
|
|
274
304
|
depends: slice.depends,
|
|
275
305
|
demo: slice.demo,
|
|
276
306
|
sequence: i + 1, // Preserve agent-ordered sequence (#3356)
|
|
307
|
+
// ADR-011: pass undefined through so ON CONFLICT preserves existing values
|
|
308
|
+
// when the caller omitted the fields on a re-plan.
|
|
309
|
+
isSketch: slice.isSketch,
|
|
310
|
+
sketchScope: slice.sketchScope,
|
|
277
311
|
});
|
|
278
312
|
upsertSlicePlanning(params.milestoneId, slice.sliceId, {
|
|
279
313
|
goal: slice.goal,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clearParseCache } from "../files.js";
|
|
2
|
-
import { isClosedStatus } from "../status-guards.js";
|
|
2
|
+
import { isClosedStatus, isDeferredStatus } from "../status-guards.js";
|
|
3
3
|
import { isNonEmptyString, validateStringArray } from "../validation.js";
|
|
4
4
|
import {
|
|
5
5
|
transaction,
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
upsertSlicePlanning,
|
|
10
10
|
upsertTaskPlanning,
|
|
11
11
|
insertGateRow,
|
|
12
|
+
updateSliceStatus,
|
|
12
13
|
} from "../gsd-db.js";
|
|
13
14
|
import type { GateId } from "../types.js";
|
|
14
15
|
import { invalidateStateCache } from "../state.js";
|
|
@@ -166,6 +167,10 @@ export async function handlePlanSlice(
|
|
|
166
167
|
return;
|
|
167
168
|
}
|
|
168
169
|
|
|
170
|
+
if (isDeferredStatus(parentSlice.status)) {
|
|
171
|
+
updateSliceStatus(params.milestoneId, params.sliceId, "pending");
|
|
172
|
+
}
|
|
173
|
+
|
|
169
174
|
upsertSlicePlanning(params.milestoneId, params.sliceId, {
|
|
170
175
|
goal: params.goal,
|
|
171
176
|
successCriteria: params.successCriteria,
|
|
@@ -11,6 +11,7 @@ export type Phase =
|
|
|
11
11
|
| "discussing"
|
|
12
12
|
| "researching"
|
|
13
13
|
| "planning"
|
|
14
|
+
| "refining"
|
|
14
15
|
| "evaluating-gates"
|
|
15
16
|
| "executing"
|
|
16
17
|
| "verifying"
|
|
@@ -19,6 +20,7 @@ export type Phase =
|
|
|
19
20
|
| "validating-milestone"
|
|
20
21
|
| "completing-milestone"
|
|
21
22
|
| "replanning-slice"
|
|
23
|
+
| "escalating-task"
|
|
22
24
|
| "complete"
|
|
23
25
|
| "paused"
|
|
24
26
|
| "blocked";
|
|
@@ -350,6 +352,51 @@ export interface PhaseSkipPreferences {
|
|
|
350
352
|
reassess_after_slice?: boolean;
|
|
351
353
|
/** When true, auto-mode pauses before each slice for discussion (#789). */
|
|
352
354
|
require_slice_discussion?: boolean;
|
|
355
|
+
/** ADR-011 Phase 2: when true, executors may escalate task-level ambiguity via T##-ESCALATION.json. */
|
|
356
|
+
mid_execution_escalation?: boolean;
|
|
357
|
+
/** ADR-011 Phase 1: when true, plan S01 in full and S02+ as sketches refined just-in-time. */
|
|
358
|
+
progressive_planning?: boolean;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// ─── ADR-011 Phase 2 Escalation ──────────────────────────────────────────
|
|
362
|
+
|
|
363
|
+
export interface EscalationOption {
|
|
364
|
+
/** Short identifier, e.g. "A", "B". Used as the `choice` value in `/gsd escalate resolve <taskId> <id>`. */
|
|
365
|
+
id: string;
|
|
366
|
+
/** One-line label for the option. */
|
|
367
|
+
label: string;
|
|
368
|
+
/** 1-2 sentence description of the tradeoffs of this option. */
|
|
369
|
+
tradeoffs: string;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
export interface EscalationArtifact {
|
|
373
|
+
/** Schema version for the artifact file — bumps if we change the shape. */
|
|
374
|
+
version: 1;
|
|
375
|
+
taskId: string;
|
|
376
|
+
sliceId: string;
|
|
377
|
+
milestoneId: string;
|
|
378
|
+
/** The question the executor needs the user to resolve. */
|
|
379
|
+
question: string;
|
|
380
|
+
/** 2-4 options the user can choose between. */
|
|
381
|
+
options: EscalationOption[];
|
|
382
|
+
/** Which option the executor recommends (references `options[].id`). */
|
|
383
|
+
recommendation: string;
|
|
384
|
+
/** Why the executor recommends that option (1-2 sentences). */
|
|
385
|
+
recommendationRationale: string;
|
|
386
|
+
/**
|
|
387
|
+
* When true, the executor proceeds with the recommendation as the answer
|
|
388
|
+
* and the loop continues. User's later choice becomes a carry-forward
|
|
389
|
+
* override for the NEXT task. When false, auto-mode pauses until the
|
|
390
|
+
* user resolves via `/gsd escalate resolve`.
|
|
391
|
+
*/
|
|
392
|
+
continueWithDefault: boolean;
|
|
393
|
+
createdAt: string;
|
|
394
|
+
/** Populated by `/gsd escalate resolve`. */
|
|
395
|
+
respondedAt?: string;
|
|
396
|
+
/** User's choice — either an option id, "accept" (use recommendation), or "reject-blocker". */
|
|
397
|
+
userChoice?: string;
|
|
398
|
+
/** Optional free-text rationale from the user. */
|
|
399
|
+
userRationale?: string;
|
|
353
400
|
}
|
|
354
401
|
|
|
355
402
|
export interface NotificationPreferences {
|
|
@@ -435,6 +482,7 @@ export interface Decision {
|
|
|
435
482
|
rationale: string; // why this choice
|
|
436
483
|
revisable: string; // whether/when revisable
|
|
437
484
|
made_by: DecisionMadeBy; // who made the decision: human, agent, or collaborative
|
|
485
|
+
source?: string; // ADR-011 P2: origin — "discussion" (default) | "planning" | "escalation"
|
|
438
486
|
superseded_by: string | null; // ID of superseding decision, or null
|
|
439
487
|
}
|
|
440
488
|
|
|
@@ -542,6 +590,20 @@ export interface CompleteTaskParams {
|
|
|
542
590
|
knownIssues?: string;
|
|
543
591
|
/** @optional — defaults to false when omitted */
|
|
544
592
|
blockerDiscovered?: boolean;
|
|
593
|
+
/**
|
|
594
|
+
* ADR-011 Phase 2 — optional escalation payload. When populated, the executor
|
|
595
|
+
* is asking the user to resolve an ambiguity. If `continueWithDefault: true`
|
|
596
|
+
* the task still completes (using the recommendation) but an artifact is
|
|
597
|
+
* written for later user review. If false, auto-mode pauses.
|
|
598
|
+
* @optional
|
|
599
|
+
*/
|
|
600
|
+
escalation?: {
|
|
601
|
+
question: string;
|
|
602
|
+
options: EscalationOption[];
|
|
603
|
+
recommendation: string;
|
|
604
|
+
recommendationRationale: string;
|
|
605
|
+
continueWithDefault: boolean;
|
|
606
|
+
};
|
|
545
607
|
/** @optional — defaults to [] when omitted by models with limited tool-calling */
|
|
546
608
|
verificationEvidence?: Array<{
|
|
547
609
|
command: string;
|
|
@@ -28,14 +28,14 @@ export function resolveUokFlags(prefs: GSDPreferences | undefined): UokFlags {
|
|
|
28
28
|
return {
|
|
29
29
|
enabled: enabledByPreference && !legacyFallback,
|
|
30
30
|
legacyFallback,
|
|
31
|
-
gates: uok?.gates?.enabled
|
|
32
|
-
modelPolicy: uok?.model_policy?.enabled
|
|
33
|
-
executionGraph: uok?.execution_graph?.enabled
|
|
34
|
-
gitops: uok?.gitops?.enabled
|
|
35
|
-
gitopsTurnAction: uok?.gitops?.turn_action ?? "
|
|
31
|
+
gates: uok?.gates?.enabled ?? true,
|
|
32
|
+
modelPolicy: uok?.model_policy?.enabled ?? true,
|
|
33
|
+
executionGraph: uok?.execution_graph?.enabled ?? true,
|
|
34
|
+
gitops: uok?.gitops?.enabled ?? true,
|
|
35
|
+
gitopsTurnAction: uok?.gitops?.turn_action ?? "commit",
|
|
36
36
|
gitopsTurnPush: uok?.gitops?.turn_push === true,
|
|
37
|
-
auditUnified: uok?.audit_unified?.enabled
|
|
38
|
-
planV2: uok?.plan_v2?.enabled
|
|
37
|
+
auditUnified: uok?.audit_unified?.enabled ?? true,
|
|
38
|
+
planV2: uok?.plan_v2?.enabled ?? true,
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -15,6 +15,12 @@ interface RunAutoLoopWithUokArgs {
|
|
|
15
15
|
pi: ExtensionAPI;
|
|
16
16
|
s: AutoSession;
|
|
17
17
|
deps: LoopDeps;
|
|
18
|
+
runKernelLoop: (
|
|
19
|
+
ctx: ExtensionContext,
|
|
20
|
+
pi: ExtensionAPI,
|
|
21
|
+
s: AutoSession,
|
|
22
|
+
deps: LoopDeps,
|
|
23
|
+
) => Promise<void>;
|
|
18
24
|
runLegacyLoop: (
|
|
19
25
|
ctx: ExtensionContext,
|
|
20
26
|
pi: ExtensionAPI,
|
|
@@ -36,13 +42,15 @@ function writeParityEvent(basePath: string, event: Record<string, unknown>): voi
|
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
44
|
|
|
39
|
-
function resolveKernelPathLabel(
|
|
45
|
+
function resolveKernelPathLabel(
|
|
46
|
+
flags: ReturnType<typeof resolveUokFlags>,
|
|
47
|
+
): "uok-kernel" | "legacy-wrapper" | "legacy-fallback" {
|
|
40
48
|
if (flags.legacyFallback) return "legacy-fallback";
|
|
41
|
-
return flags.enabled ? "uok-
|
|
49
|
+
return flags.enabled ? "uok-kernel" : "legacy-wrapper";
|
|
42
50
|
}
|
|
43
51
|
|
|
44
52
|
export async function runAutoLoopWithUok(args: RunAutoLoopWithUokArgs): Promise<void> {
|
|
45
|
-
const { ctx, pi, s, deps, runLegacyLoop } = args;
|
|
53
|
+
const { ctx, pi, s, deps, runKernelLoop, runLegacyLoop } = args;
|
|
46
54
|
const prefs = deps.loadEffectiveGSDPreferences()?.preferences;
|
|
47
55
|
const flags = resolveUokFlags(prefs);
|
|
48
56
|
setUnifiedAuditEnabled(flags.auditUnified);
|
|
@@ -83,7 +91,11 @@ export async function runAutoLoopWithUok(args: RunAutoLoopWithUokArgs): Promise<
|
|
|
83
91
|
: deps;
|
|
84
92
|
|
|
85
93
|
try {
|
|
86
|
-
|
|
94
|
+
if (flags.enabled) {
|
|
95
|
+
await runKernelLoop(ctx, pi, s, decoratedDeps);
|
|
96
|
+
} else {
|
|
97
|
+
await runLegacyLoop(ctx, pi, s, deps);
|
|
98
|
+
}
|
|
87
99
|
writeParityEvent(s.basePath, {
|
|
88
100
|
ts: new Date().toISOString(),
|
|
89
101
|
path: resolveKernelPathLabel(flags),
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workflow-dispatch.ts — Shared dispatchers for workflow plugins.
|
|
3
|
+
*
|
|
4
|
+
* Called by both `/gsd start <template>` (existing markdown path) and
|
|
5
|
+
* `/gsd workflow <name>` (new direct dispatch). Keeps the prompt-build
|
|
6
|
+
* logic in one place so md template behavior stays consistent.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
10
|
+
import { readFileSync } from "node:fs";
|
|
11
|
+
|
|
12
|
+
import { loadPrompt } from "./prompt-loader.js";
|
|
13
|
+
import type { WorkflowPlugin } from "./workflow-plugins.js";
|
|
14
|
+
|
|
15
|
+
// ─── Oneshot dispatch ────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Strip the `<template_meta>` block from markdown content so it's not
|
|
19
|
+
* repeated in the prompt body.
|
|
20
|
+
*/
|
|
21
|
+
function stripTemplateMeta(content: string): string {
|
|
22
|
+
return content.replace(/<template_meta>[\s\S]*?<\/template_meta>\s*/, "");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* For a oneshot YAML plugin, extract the single-step prompt.
|
|
27
|
+
* For multi-step YAML defined as oneshot, concatenate step prompts.
|
|
28
|
+
*/
|
|
29
|
+
function extractYamlOneshotPrompt(yamlContent: string): string {
|
|
30
|
+
// Simple: just include the raw YAML so the model can follow it.
|
|
31
|
+
// This keeps the oneshot format flexible without re-parsing.
|
|
32
|
+
return `\`\`\`yaml\n${yamlContent}\n\`\`\``;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Dispatch a oneshot workflow: load the prompt, inject the body, send.
|
|
37
|
+
* No STATE.json, no branch switch, no auto-loop.
|
|
38
|
+
*/
|
|
39
|
+
export function dispatchOneshot(
|
|
40
|
+
plugin: WorkflowPlugin,
|
|
41
|
+
pi: ExtensionAPI,
|
|
42
|
+
userArgs: string,
|
|
43
|
+
): void {
|
|
44
|
+
const raw = readFileSync(plugin.path, "utf-8");
|
|
45
|
+
const body = plugin.format === "yaml"
|
|
46
|
+
? extractYamlOneshotPrompt(raw)
|
|
47
|
+
: stripTemplateMeta(raw);
|
|
48
|
+
|
|
49
|
+
const prompt = loadPrompt("workflow-oneshot", {
|
|
50
|
+
name: plugin.name,
|
|
51
|
+
displayName: plugin.meta.displayName,
|
|
52
|
+
body,
|
|
53
|
+
userArgs: userArgs || "(none)",
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
pi.sendMessage(
|
|
57
|
+
{ customType: "gsd-workflow-oneshot", content: prompt, display: false },
|
|
58
|
+
{ triggerTurn: true },
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ─── Markdown-phase dispatch ─────────────────────────────────────────────
|
|
63
|
+
|
|
64
|
+
export interface MarkdownPhaseDispatchOptions {
|
|
65
|
+
templateId: string;
|
|
66
|
+
templateName: string;
|
|
67
|
+
templateDescription: string;
|
|
68
|
+
phases: string[];
|
|
69
|
+
complexity: string;
|
|
70
|
+
artifactDir: string;
|
|
71
|
+
branch: string;
|
|
72
|
+
description: string;
|
|
73
|
+
issueRef: string;
|
|
74
|
+
date: string;
|
|
75
|
+
workflowContent: string;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Build and dispatch the `workflow-start.md` prompt for a markdown-phase plugin.
|
|
80
|
+
* Returns the prompt that was sent (useful for tests).
|
|
81
|
+
*/
|
|
82
|
+
export function dispatchMarkdownPhase(
|
|
83
|
+
opts: MarkdownPhaseDispatchOptions,
|
|
84
|
+
pi: ExtensionAPI,
|
|
85
|
+
): string {
|
|
86
|
+
const prompt = loadPrompt("workflow-start", {
|
|
87
|
+
templateId: opts.templateId,
|
|
88
|
+
templateName: opts.templateName,
|
|
89
|
+
templateDescription: opts.templateDescription,
|
|
90
|
+
phases: opts.phases.join(" → "),
|
|
91
|
+
complexity: opts.complexity,
|
|
92
|
+
artifactDir: opts.artifactDir || "(none)",
|
|
93
|
+
branch: opts.branch,
|
|
94
|
+
description: opts.description || "(none provided)",
|
|
95
|
+
issueRef: opts.issueRef || "(none)",
|
|
96
|
+
date: opts.date,
|
|
97
|
+
workflowContent: opts.workflowContent,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
pi.sendMessage(
|
|
101
|
+
{ customType: "gsd-workflow-template", content: prompt, display: false },
|
|
102
|
+
{ triggerTurn: true },
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
return prompt;
|
|
106
|
+
}
|