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
|
@@ -59,6 +59,7 @@ import { resolveSafetyHarnessConfig } from "../safety/safety-harness.js";
|
|
|
59
59
|
import {
|
|
60
60
|
getWorkflowTransportSupportError,
|
|
61
61
|
getRequiredWorkflowToolsForAutoUnit,
|
|
62
|
+
supportsStructuredQuestions,
|
|
62
63
|
} from "../workflow-mcp.js";
|
|
63
64
|
|
|
64
65
|
// ─── Session timeout auto-resume state ────────────────────────────────────────
|
|
@@ -216,6 +217,62 @@ async function emitCancelledUnitEnd(
|
|
|
216
217
|
});
|
|
217
218
|
}
|
|
218
219
|
|
|
220
|
+
async function failClosedOnFinalizeTimeout(
|
|
221
|
+
ic: IterationContext,
|
|
222
|
+
iterData: IterationData,
|
|
223
|
+
loopState: LoopState,
|
|
224
|
+
stage: "pre" | "post",
|
|
225
|
+
startedAt: number,
|
|
226
|
+
): Promise<PhaseResult> {
|
|
227
|
+
const { ctx, pi, s, deps } = ic;
|
|
228
|
+
const now = Date.now();
|
|
229
|
+
const unitType = iterData.unitType;
|
|
230
|
+
const unitId = iterData.unitId;
|
|
231
|
+
const timeoutMs = stage === "pre" ? FINALIZE_PRE_TIMEOUT_MS : FINALIZE_POST_TIMEOUT_MS;
|
|
232
|
+
const progressKind = stage === "pre" ? "finalize-pre-timeout" : "finalize-post-timeout";
|
|
233
|
+
|
|
234
|
+
writeUnitRuntimeRecord(s.basePath, unitType, unitId, startedAt, {
|
|
235
|
+
phase: "finalize-timeout",
|
|
236
|
+
timeoutAt: now,
|
|
237
|
+
lastProgressAt: now,
|
|
238
|
+
lastProgressKind: progressKind,
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
deps.emitJournalEvent({
|
|
242
|
+
ts: new Date(now).toISOString(),
|
|
243
|
+
flowId: ic.flowId,
|
|
244
|
+
seq: ic.nextSeq(),
|
|
245
|
+
eventType: "unit-end",
|
|
246
|
+
data: {
|
|
247
|
+
unitType,
|
|
248
|
+
unitId,
|
|
249
|
+
status: "timed-out-finalize",
|
|
250
|
+
artifactVerified: false,
|
|
251
|
+
finalizeStage: stage,
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
loopState.consecutiveFinalizeTimeouts++;
|
|
256
|
+
debugLog("autoLoop", {
|
|
257
|
+
phase: progressKind,
|
|
258
|
+
iteration: ic.iteration,
|
|
259
|
+
unitType,
|
|
260
|
+
unitId,
|
|
261
|
+
consecutiveTimeouts: loopState.consecutiveFinalizeTimeouts,
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
ctx.ui.notify(
|
|
265
|
+
`${stage === "pre" ? "postUnitPreVerification" : "postUnitPostVerification"} timed out after ${timeoutMs / 1000}s for ${unitType} ${unitId} (${loopState.consecutiveFinalizeTimeouts}/${MAX_FINALIZE_TIMEOUTS}) — pausing auto-mode for recovery.`,
|
|
266
|
+
"warning",
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
await deps.pauseAuto(ctx, pi);
|
|
270
|
+
s.currentUnit = null;
|
|
271
|
+
clearCurrentPhase();
|
|
272
|
+
drainLogs();
|
|
273
|
+
return { action: "break", reason: progressKind };
|
|
274
|
+
}
|
|
275
|
+
|
|
219
276
|
// ─── runPreDispatch ───────────────────────────────────────────────────────────
|
|
220
277
|
|
|
221
278
|
/**
|
|
@@ -781,6 +838,15 @@ export async function runDispatch(
|
|
|
781
838
|
const { ctx, pi, s, deps, prefs } = ic;
|
|
782
839
|
const { state, mid, midTitle } = preData;
|
|
783
840
|
const STUCK_WINDOW_SIZE = 6;
|
|
841
|
+
const provider = ctx.model?.provider;
|
|
842
|
+
const authMode = provider && typeof ctx.modelRegistry?.getProviderAuthMode === "function"
|
|
843
|
+
? ctx.modelRegistry.getProviderAuthMode(provider)
|
|
844
|
+
: undefined;
|
|
845
|
+
const activeTools = typeof pi.getActiveTools === "function" ? pi.getActiveTools() : [];
|
|
846
|
+
const structuredQuestionsAvailable = supportsStructuredQuestions(activeTools, {
|
|
847
|
+
authMode,
|
|
848
|
+
baseUrl: ctx.model?.baseUrl,
|
|
849
|
+
}) ? "true" : "false";
|
|
784
850
|
|
|
785
851
|
debugLog("autoLoop", { phase: "dispatch-resolve", iteration: ic.iteration });
|
|
786
852
|
const dispatchResult = await deps.resolveDispatch({
|
|
@@ -790,6 +856,7 @@ export async function runDispatch(
|
|
|
790
856
|
state,
|
|
791
857
|
prefs,
|
|
792
858
|
session: s,
|
|
859
|
+
structuredQuestionsAvailable,
|
|
793
860
|
});
|
|
794
861
|
|
|
795
862
|
if (dispatchResult.action === "stop") {
|
|
@@ -848,6 +915,17 @@ export async function runDispatch(
|
|
|
848
915
|
s.basePath,
|
|
849
916
|
);
|
|
850
917
|
if (artifactExists) {
|
|
918
|
+
if (unitType === "complete-milestone") {
|
|
919
|
+
const stuckDiag = diagnoseExpectedArtifact(unitType, unitId, s.basePath);
|
|
920
|
+
const stuckParts = [
|
|
921
|
+
`Detected ${unitType} ${unitId} output on disk, but the same unit is still being derived.`,
|
|
922
|
+
"This usually means the milestone summary exists while the DB row still does not mark the milestone complete.",
|
|
923
|
+
];
|
|
924
|
+
if (stuckDiag) stuckParts.push(`Expected: ${stuckDiag}`);
|
|
925
|
+
ctx.ui.notify(stuckParts.join(" "), "warning");
|
|
926
|
+
await deps.pauseAuto(ctx, pi);
|
|
927
|
+
return { action: "break", reason: "complete-milestone-artifact-db-mismatch" };
|
|
928
|
+
}
|
|
851
929
|
debugLog("autoLoop", {
|
|
852
930
|
phase: "stuck-recovery",
|
|
853
931
|
level: 1,
|
|
@@ -1241,6 +1319,8 @@ export async function runUnitPhase(
|
|
|
1241
1319
|
// per-unit. Without this, the module-level _buffer accumulates across every
|
|
1242
1320
|
// unit in the same Node process (see workflow-logger.ts module header).
|
|
1243
1321
|
_resetLogs();
|
|
1322
|
+
const dispatchKey = `${unitType}/${unitId}`;
|
|
1323
|
+
s.unitDispatchCount.set(dispatchKey, (s.unitDispatchCount.get(dispatchKey) ?? 0) + 1);
|
|
1244
1324
|
s.currentUnit = { type: unitType, id: unitId, startedAt: Date.now() };
|
|
1245
1325
|
s.lastGitActionFailure = null;
|
|
1246
1326
|
s.lastGitActionStatus = null;
|
|
@@ -1307,7 +1387,7 @@ export async function runUnitPhase(
|
|
|
1307
1387
|
: s.pendingCrashRecovery;
|
|
1308
1388
|
finalPrompt = `${capped}\n\n---\n\n${finalPrompt}`;
|
|
1309
1389
|
s.pendingCrashRecovery = null;
|
|
1310
|
-
} else if ((s.unitDispatchCount.get(
|
|
1390
|
+
} else if ((s.unitDispatchCount.get(dispatchKey) ?? 0) > 1) {
|
|
1311
1391
|
const diagnostic = deps.getDeepDiagnostic(s.basePath);
|
|
1312
1392
|
if (diagnostic) {
|
|
1313
1393
|
const cappedDiag =
|
|
@@ -1666,7 +1746,7 @@ export async function runUnitPhase(
|
|
|
1666
1746
|
skipArtifactVerification ||
|
|
1667
1747
|
verifyExpectedArtifact(unitType, unitId, s.basePath);
|
|
1668
1748
|
if (artifactVerified) {
|
|
1669
|
-
s.unitDispatchCount.delete(
|
|
1749
|
+
s.unitDispatchCount.delete(dispatchKey);
|
|
1670
1750
|
s.unitRecoveryCount.delete(`${unitType}/${unitId}`);
|
|
1671
1751
|
}
|
|
1672
1752
|
|
|
@@ -1771,36 +1851,13 @@ export async function runFinalize(
|
|
|
1771
1851
|
);
|
|
1772
1852
|
|
|
1773
1853
|
if (preResultGuard.timedOut) {
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
drainLogs();
|
|
1781
|
-
loopState.consecutiveFinalizeTimeouts++;
|
|
1782
|
-
debugLog("autoLoop", {
|
|
1783
|
-
phase: "pre-verification-timeout",
|
|
1784
|
-
iteration: ic.iteration,
|
|
1785
|
-
unitType: iterData.unitType,
|
|
1786
|
-
unitId: iterData.unitId,
|
|
1787
|
-
consecutiveTimeouts: loopState.consecutiveFinalizeTimeouts,
|
|
1788
|
-
});
|
|
1789
|
-
|
|
1790
|
-
if (loopState.consecutiveFinalizeTimeouts >= MAX_FINALIZE_TIMEOUTS) {
|
|
1791
|
-
ctx.ui.notify(
|
|
1792
|
-
`postUnitPreVerification timed out ${loopState.consecutiveFinalizeTimeouts} consecutive times — stopping auto-mode to prevent budget waste`,
|
|
1793
|
-
"error",
|
|
1794
|
-
);
|
|
1795
|
-
await deps.stopAuto(ctx, pi, `${loopState.consecutiveFinalizeTimeouts} consecutive finalize timeouts`);
|
|
1796
|
-
return { action: "break", reason: "finalize-timeout-escalation" };
|
|
1797
|
-
}
|
|
1798
|
-
|
|
1799
|
-
ctx.ui.notify(
|
|
1800
|
-
`postUnitPreVerification timed out after ${FINALIZE_PRE_TIMEOUT_MS / 1000}s for ${iterData.unitType} ${iterData.unitId} (${loopState.consecutiveFinalizeTimeouts}/${MAX_FINALIZE_TIMEOUTS}) — continuing to next iteration`,
|
|
1801
|
-
"warning",
|
|
1854
|
+
return failClosedOnFinalizeTimeout(
|
|
1855
|
+
ic,
|
|
1856
|
+
iterData,
|
|
1857
|
+
loopState,
|
|
1858
|
+
"pre",
|
|
1859
|
+
preUnitSnapshot?.startedAt ?? Date.now(),
|
|
1802
1860
|
);
|
|
1803
|
-
return { action: "next", data: undefined as void };
|
|
1804
1861
|
}
|
|
1805
1862
|
|
|
1806
1863
|
const preResult = preResultGuard.value;
|
|
@@ -1876,36 +1933,13 @@ export async function runFinalize(
|
|
|
1876
1933
|
);
|
|
1877
1934
|
|
|
1878
1935
|
if (postResultGuard.timedOut) {
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
drainLogs();
|
|
1886
|
-
loopState.consecutiveFinalizeTimeouts++;
|
|
1887
|
-
debugLog("autoLoop", {
|
|
1888
|
-
phase: "post-verification-timeout",
|
|
1889
|
-
iteration: ic.iteration,
|
|
1890
|
-
unitType: iterData.unitType,
|
|
1891
|
-
unitId: iterData.unitId,
|
|
1892
|
-
consecutiveTimeouts: loopState.consecutiveFinalizeTimeouts,
|
|
1893
|
-
});
|
|
1894
|
-
|
|
1895
|
-
if (loopState.consecutiveFinalizeTimeouts >= MAX_FINALIZE_TIMEOUTS) {
|
|
1896
|
-
ctx.ui.notify(
|
|
1897
|
-
`postUnitPostVerification timed out ${loopState.consecutiveFinalizeTimeouts} consecutive times — stopping auto-mode to prevent budget waste`,
|
|
1898
|
-
"error",
|
|
1899
|
-
);
|
|
1900
|
-
await deps.stopAuto(ctx, pi, `${loopState.consecutiveFinalizeTimeouts} consecutive finalize timeouts`);
|
|
1901
|
-
return { action: "break", reason: "finalize-timeout-escalation" };
|
|
1902
|
-
}
|
|
1903
|
-
|
|
1904
|
-
ctx.ui.notify(
|
|
1905
|
-
`postUnitPostVerification timed out after ${FINALIZE_POST_TIMEOUT_MS / 1000}s for ${iterData.unitType} ${iterData.unitId} (${loopState.consecutiveFinalizeTimeouts}/${MAX_FINALIZE_TIMEOUTS}) — continuing to next iteration`,
|
|
1906
|
-
"warning",
|
|
1936
|
+
return failClosedOnFinalizeTimeout(
|
|
1937
|
+
ic,
|
|
1938
|
+
iterData,
|
|
1939
|
+
loopState,
|
|
1940
|
+
"post",
|
|
1941
|
+
preUnitSnapshot?.startedAt ?? Date.now(),
|
|
1907
1942
|
);
|
|
1908
|
-
return { action: "next", data: undefined as void };
|
|
1909
1943
|
}
|
|
1910
1944
|
|
|
1911
1945
|
const postResult = postResultGuard.value;
|
|
@@ -73,7 +73,7 @@ export function isSessionSwitchInFlight(): boolean {
|
|
|
73
73
|
/**
|
|
74
74
|
* Force-resolve the pending unit promise with { status: "cancelled" }.
|
|
75
75
|
*
|
|
76
|
-
* Used by pauseAuto
|
|
76
|
+
* Used by pauseAuto and supervision catch
|
|
77
77
|
* blocks to ensure the autoLoop is never stuck awaiting a promise that
|
|
78
78
|
* will never resolve. Safe to call when no resolver is pending (no-op).
|
|
79
79
|
*/
|
|
@@ -82,10 +82,20 @@ export async function runUnit(
|
|
|
82
82
|
if (s.currentUnitModel && typeof pi.setModel === "function") {
|
|
83
83
|
const restored = await pi.setModel(s.currentUnitModel, { persist: false });
|
|
84
84
|
if (!restored) {
|
|
85
|
+
const message =
|
|
86
|
+
`Failed to restore configured model ${s.currentUnitModel.provider}/${s.currentUnitModel.id} after session creation`;
|
|
85
87
|
ctx.ui.notify(
|
|
86
|
-
|
|
88
|
+
`${message}. Cancelling unit before dispatch.`,
|
|
87
89
|
"warning",
|
|
88
90
|
);
|
|
91
|
+
return {
|
|
92
|
+
status: "cancelled",
|
|
93
|
+
errorContext: {
|
|
94
|
+
message,
|
|
95
|
+
category: "session-failed",
|
|
96
|
+
isTransient: false,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
89
99
|
}
|
|
90
100
|
}
|
|
91
101
|
|
|
@@ -172,6 +172,10 @@ export class AutoSession {
|
|
|
172
172
|
// ── Signal handler ───────────────────────────────────────────────────────
|
|
173
173
|
sigtermHandler: (() => void) | null = null;
|
|
174
174
|
|
|
175
|
+
// ── Remote command polling ───────────────────────────────────────────────
|
|
176
|
+
/** Cleanup function returned by startCommandPolling(); null when not running. */
|
|
177
|
+
commandPollingCleanup: (() => void) | null = null;
|
|
178
|
+
|
|
175
179
|
// ── Loop promise state ──────────────────────────────────────────────────
|
|
176
180
|
// Per-unit resolve function and session-switch guard live at module level
|
|
177
181
|
// in auto-loop.ts (_currentResolve, _sessionSwitchInFlight).
|
|
@@ -267,6 +271,9 @@ export class AutoSession {
|
|
|
267
271
|
// Signal handler
|
|
268
272
|
this.sigtermHandler = null;
|
|
269
273
|
|
|
274
|
+
// Remote command polling — cleanup must be called before reset (auto.ts stopAuto)
|
|
275
|
+
this.commandPollingCleanup = null;
|
|
276
|
+
|
|
270
277
|
// Loop promise state lives in auto-loop.ts module scope
|
|
271
278
|
}
|
|
272
279
|
|
|
@@ -43,6 +43,16 @@ export function resolveExpectedArtifactPath(
|
|
|
43
43
|
return dir ? join(dir, buildMilestoneFileName(mid, "ROADMAP")) : null;
|
|
44
44
|
}
|
|
45
45
|
case "research-slice": {
|
|
46
|
+
// #4414: Sentinel unitId "{mid}/parallel-research" fans out across
|
|
47
|
+
// multiple slices. Resolve to a milestone-level placeholder path so
|
|
48
|
+
// blocker escalation has somewhere to write. Verification for this
|
|
49
|
+
// sentinel is handled directly in verifyExpectedArtifact.
|
|
50
|
+
if (sid === "parallel-research") {
|
|
51
|
+
const mdir = resolveMilestonePath(base, mid);
|
|
52
|
+
return mdir
|
|
53
|
+
? join(mdir, buildMilestoneFileName(mid, "PARALLEL-BLOCKER"))
|
|
54
|
+
: null;
|
|
55
|
+
}
|
|
46
56
|
const dir = resolveSlicePath(base, mid, sid!);
|
|
47
57
|
return dir ? join(dir, buildSliceFileName(sid!, "RESEARCH")) : null;
|
|
48
58
|
}
|
|
@@ -50,6 +60,11 @@ export function resolveExpectedArtifactPath(
|
|
|
50
60
|
const dir = resolveSlicePath(base, mid, sid!);
|
|
51
61
|
return dir ? join(dir, buildSliceFileName(sid!, "PLAN")) : null;
|
|
52
62
|
}
|
|
63
|
+
case "refine-slice": {
|
|
64
|
+
// ADR-011: refine-slice expands a sketch and writes the same PLAN.md as plan-slice.
|
|
65
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
66
|
+
return dir ? join(dir, buildSliceFileName(sid!, "PLAN")) : null;
|
|
67
|
+
}
|
|
53
68
|
case "reassess-roadmap": {
|
|
54
69
|
const dir = resolveSlicePath(base, mid, sid!);
|
|
55
70
|
return dir ? join(dir, buildSliceFileName(sid!, "ASSESSMENT")) : null;
|
|
@@ -109,9 +124,14 @@ export function diagnoseExpectedArtifact(
|
|
|
109
124
|
case "plan-milestone":
|
|
110
125
|
return `${relMilestoneFile(base, mid, "ROADMAP")} (milestone roadmap)`;
|
|
111
126
|
case "research-slice":
|
|
127
|
+
if (sid === "parallel-research") {
|
|
128
|
+
return `${relMilestoneFile(base, mid, "PARALLEL-BLOCKER")} (parallel slice research sentinel)`;
|
|
129
|
+
}
|
|
112
130
|
return `${relSliceFile(base, mid, sid!, "RESEARCH")} (slice research)`;
|
|
113
131
|
case "plan-slice":
|
|
114
132
|
return `${relSliceFile(base, mid, sid!, "PLAN")} (slice plan)`;
|
|
133
|
+
case "refine-slice":
|
|
134
|
+
return `${relSliceFile(base, mid, sid!, "PLAN")} (refined slice plan from sketch)`;
|
|
115
135
|
case "execute-task": {
|
|
116
136
|
return `Task ${tid} marked [x] in ${relSliceFile(base, mid, sid!, "PLAN")} + summary written`;
|
|
117
137
|
}
|
|
@@ -96,6 +96,7 @@ export function unitVerb(unitType: string): string {
|
|
|
96
96
|
case "research-slice": return "researching";
|
|
97
97
|
case "plan-milestone":
|
|
98
98
|
case "plan-slice": return "planning";
|
|
99
|
+
case "refine-slice": return "refining";
|
|
99
100
|
case "execute-task": return "executing";
|
|
100
101
|
case "complete-slice": return "completing";
|
|
101
102
|
case "replan-slice": return "replanning";
|
|
@@ -116,6 +117,7 @@ export function unitPhaseLabel(unitType: string): string {
|
|
|
116
117
|
case "research-slice": return "RESEARCH";
|
|
117
118
|
case "plan-milestone": return "PLAN";
|
|
118
119
|
case "plan-slice": return "PLAN";
|
|
120
|
+
case "refine-slice": return "REFINE";
|
|
119
121
|
case "execute-task": return "EXECUTE";
|
|
120
122
|
case "complete-slice": return "COMPLETE";
|
|
121
123
|
case "replan-slice": return "REPLAN";
|
|
@@ -143,6 +145,7 @@ function peekNext(unitType: string, state: GSDState): string {
|
|
|
143
145
|
case "plan-milestone": return "plan or execute first slice";
|
|
144
146
|
case "research-slice": return `plan ${sid}`;
|
|
145
147
|
case "plan-slice": return "execute first task";
|
|
148
|
+
case "refine-slice": return "execute first task";
|
|
146
149
|
case "execute-task": return `continue ${sid}`;
|
|
147
150
|
case "complete-slice": return "reassess roadmap";
|
|
148
151
|
case "replan-slice": return `re-execute ${sid}`;
|
|
@@ -901,10 +904,24 @@ export function updateProgressWidget(
|
|
|
901
904
|
}
|
|
902
905
|
if (cumulativeCost) sp.push(theme.fg("warning", `$${cumulativeCost.toFixed(2)}`));
|
|
903
906
|
|
|
904
|
-
const
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
907
|
+
const CX_BAR_WIDTH = 8;
|
|
908
|
+
const cxBarFilled = Math.min(
|
|
909
|
+
CX_BAR_WIDTH,
|
|
910
|
+
Math.max(0, Math.round((cxPctVal / 100) * CX_BAR_WIDTH)),
|
|
911
|
+
);
|
|
912
|
+
const cxBarColor: "error" | "warning" | "success" =
|
|
913
|
+
cxPctVal > 90 ? "error" : cxPctVal > 70 ? "warning" : "success";
|
|
914
|
+
const cxBar =
|
|
915
|
+
theme.fg(cxBarColor, "━".repeat(cxBarFilled)) +
|
|
916
|
+
theme.fg("dim", "─".repeat(CX_BAR_WIDTH - cxBarFilled));
|
|
917
|
+
const cxPctText = `${cxPct}%/${formatWidgetTokens(cxWindow)}`;
|
|
918
|
+
const cxColorized =
|
|
919
|
+
cxPctVal > 90
|
|
920
|
+
? theme.fg("error", cxPctText)
|
|
921
|
+
: cxPctVal > 70
|
|
922
|
+
? theme.fg("warning", cxPctText)
|
|
923
|
+
: cxPctText;
|
|
924
|
+
sp.push(`${cxBar} ${cxColorized}`);
|
|
908
925
|
|
|
909
926
|
const statsLine = sp.map(p => p.includes("\x1b[") ? p : theme.fg("dim", p))
|
|
910
927
|
.join(theme.fg("dim", " "));
|
|
@@ -13,7 +13,8 @@ import type { GSDState } from "./types.js";
|
|
|
13
13
|
import type { GSDPreferences } from "./preferences.js";
|
|
14
14
|
import type { UatType } from "./files.js";
|
|
15
15
|
import { loadFile, extractUatType, loadActiveOverrides } from "./files.js";
|
|
16
|
-
import { isDbAvailable, getMilestoneSlices, getPendingGates, markAllGatesOmitted, getMilestone } from "./gsd-db.js";
|
|
16
|
+
import { isDbAvailable, getMilestoneSlices, getPendingGates, markAllGatesOmitted, getMilestone, updateMilestoneStatus } from "./gsd-db.js";
|
|
17
|
+
import { isClosedStatus } from "./status-guards.js";
|
|
17
18
|
import { extractVerdict, isAcceptableUatVerdict } from "./verdict-parser.js";
|
|
18
19
|
|
|
19
20
|
import {
|
|
@@ -38,6 +39,7 @@ import {
|
|
|
38
39
|
buildPlanMilestonePrompt,
|
|
39
40
|
buildResearchSlicePrompt,
|
|
40
41
|
buildPlanSlicePrompt,
|
|
42
|
+
buildRefineSlicePrompt,
|
|
41
43
|
buildExecuteTaskPrompt,
|
|
42
44
|
buildCompleteSlicePrompt,
|
|
43
45
|
buildCompleteMilestonePrompt,
|
|
@@ -78,6 +80,7 @@ export interface DispatchContext {
|
|
|
78
80
|
state: GSDState;
|
|
79
81
|
prefs: GSDPreferences | undefined;
|
|
80
82
|
session?: import("./auto/session.js").AutoSession;
|
|
83
|
+
structuredQuestionsAvailable?: "true" | "false";
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
export interface DispatchRule {
|
|
@@ -187,6 +190,25 @@ export function isVerificationNotApplicable(value: string): boolean {
|
|
|
187
190
|
// ─── Rules ────────────────────────────────────────────────────────────────
|
|
188
191
|
|
|
189
192
|
export const DISPATCH_RULES: DispatchRule[] = [
|
|
193
|
+
{
|
|
194
|
+
// ADR-011 Phase 2: pause-for-escalation must evaluate FIRST so phase-
|
|
195
|
+
// agnostic rules (rewrite-docs gate, UAT checks, reassess) cannot bypass
|
|
196
|
+
// the user's pending decision. Only fires for continueWithDefault=false
|
|
197
|
+
// escalations (those set escalation_pending=1); awaiting-review artifacts
|
|
198
|
+
// never enter the 'escalating-task' phase.
|
|
199
|
+
name: "escalating-task → pause-for-escalation",
|
|
200
|
+
match: async ({ state, mid }) => {
|
|
201
|
+
if (state.phase !== "escalating-task") return null;
|
|
202
|
+
if (!state.activeSlice) return missingSliceStop(mid, state.phase);
|
|
203
|
+
return {
|
|
204
|
+
action: "stop",
|
|
205
|
+
reason:
|
|
206
|
+
state.nextAction ||
|
|
207
|
+
`${mid}: task escalation awaits user resolution. Run /gsd escalate list to see pending items.`,
|
|
208
|
+
level: "info",
|
|
209
|
+
};
|
|
210
|
+
},
|
|
211
|
+
},
|
|
190
212
|
{
|
|
191
213
|
name: "rewrite-docs (override gate)",
|
|
192
214
|
match: async ({ mid, midTitle, state, basePath, session }) => {
|
|
@@ -331,19 +353,24 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
331
353
|
},
|
|
332
354
|
{
|
|
333
355
|
name: "needs-discussion → discuss-milestone",
|
|
334
|
-
match: async ({ state, mid, midTitle, basePath }) => {
|
|
356
|
+
match: async ({ state, mid, midTitle, basePath, structuredQuestionsAvailable }) => {
|
|
335
357
|
if (state.phase !== "needs-discussion") return null;
|
|
336
358
|
return {
|
|
337
359
|
action: "dispatch",
|
|
338
360
|
unitType: "discuss-milestone",
|
|
339
361
|
unitId: mid,
|
|
340
|
-
prompt: await buildDiscussMilestonePrompt(
|
|
362
|
+
prompt: await buildDiscussMilestonePrompt(
|
|
363
|
+
mid,
|
|
364
|
+
midTitle,
|
|
365
|
+
basePath,
|
|
366
|
+
structuredQuestionsAvailable,
|
|
367
|
+
),
|
|
341
368
|
};
|
|
342
369
|
},
|
|
343
370
|
},
|
|
344
371
|
{
|
|
345
372
|
name: "pre-planning (no context) → discuss-milestone",
|
|
346
|
-
match: async ({ state, mid, midTitle, basePath }) => {
|
|
373
|
+
match: async ({ state, mid, midTitle, basePath, structuredQuestionsAvailable }) => {
|
|
347
374
|
if (state.phase !== "pre-planning") return null;
|
|
348
375
|
const contextFile = resolveMilestoneFile(basePath, mid, "CONTEXT");
|
|
349
376
|
const hasContext = !!(contextFile && (await loadFile(contextFile)));
|
|
@@ -352,7 +379,12 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
352
379
|
action: "dispatch",
|
|
353
380
|
unitType: "discuss-milestone",
|
|
354
381
|
unitId: mid,
|
|
355
|
-
prompt: await buildDiscussMilestonePrompt(
|
|
382
|
+
prompt: await buildDiscussMilestonePrompt(
|
|
383
|
+
mid,
|
|
384
|
+
midTitle,
|
|
385
|
+
basePath,
|
|
386
|
+
structuredQuestionsAvailable,
|
|
387
|
+
),
|
|
356
388
|
};
|
|
357
389
|
},
|
|
358
390
|
},
|
|
@@ -420,6 +452,12 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
420
452
|
// Only dispatch parallel if 2+ slices are ready
|
|
421
453
|
if (researchReadySlices.length < 2) return null;
|
|
422
454
|
|
|
455
|
+
// #4414: If a previous parallel-research attempt escalated to a blocker
|
|
456
|
+
// placeholder, skip this rule and fall through to per-slice research
|
|
457
|
+
// (or other rules) rather than re-dispatching the same failing unit.
|
|
458
|
+
const parallelBlocker = resolveMilestoneFile(basePath, mid, "PARALLEL-BLOCKER");
|
|
459
|
+
if (parallelBlocker) return null;
|
|
460
|
+
|
|
423
461
|
return {
|
|
424
462
|
action: "dispatch",
|
|
425
463
|
unitType: "research-slice",
|
|
@@ -468,6 +506,58 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
468
506
|
};
|
|
469
507
|
},
|
|
470
508
|
},
|
|
509
|
+
{
|
|
510
|
+
// ADR-011: sketch-then-refine. When `refining` phase fires, expand the
|
|
511
|
+
// sketch into a full plan using the prior slice's SUMMARY and the current
|
|
512
|
+
// codebase. If the user flipped `progressive_planning` off mid-milestone
|
|
513
|
+
// while a slice is still `is_sketch=1`, fall through to a standard
|
|
514
|
+
// plan-slice so the loop doesn't dead-end.
|
|
515
|
+
//
|
|
516
|
+
// Note on the flag-OFF downgrade: plan-slice does not explicitly clear
|
|
517
|
+
// `is_sketch`. After it writes PLAN.md, the auto-heal in state.ts's
|
|
518
|
+
// `deriveStateFromDb` (via `autoHealSketchFlags`) flips the flag on the
|
|
519
|
+
// next iteration. That implicit coupling is the sole mechanism that
|
|
520
|
+
// reconciles `is_sketch=1` on the plan-slice path — do not remove the
|
|
521
|
+
// auto-heal without either adding an explicit `setSliceSketchFlag(..., false)`
|
|
522
|
+
// call here or doing so inside the plan-slice tool handler.
|
|
523
|
+
name: "refining → refine-slice",
|
|
524
|
+
match: async ({ state, mid, midTitle, basePath, prefs }) => {
|
|
525
|
+
if (state.phase !== "refining") return null;
|
|
526
|
+
if (!state.activeSlice) return missingSliceStop(mid, state.phase);
|
|
527
|
+
const sid = state.activeSlice.id;
|
|
528
|
+
const sTitle = state.activeSlice.title;
|
|
529
|
+
const progressiveOn = prefs?.phases?.progressive_planning === true;
|
|
530
|
+
if (!progressiveOn) {
|
|
531
|
+
// Graceful downgrade: treat the sketch as a normal slice needing a plan,
|
|
532
|
+
// but forward the stored sketch_scope as a SOFT hint so the scope
|
|
533
|
+
// signal isn't silently lost. The planner may expand beyond it.
|
|
534
|
+
let softScopeHint = "";
|
|
535
|
+
try {
|
|
536
|
+
const { isDbAvailable, getSlice } = await import("./gsd-db.js");
|
|
537
|
+
if (isDbAvailable()) {
|
|
538
|
+
softScopeHint = getSlice(mid, sid)?.sketch_scope ?? "";
|
|
539
|
+
}
|
|
540
|
+
} catch {
|
|
541
|
+
softScopeHint = "";
|
|
542
|
+
}
|
|
543
|
+
return {
|
|
544
|
+
action: "dispatch",
|
|
545
|
+
unitType: "plan-slice",
|
|
546
|
+
unitId: `${mid}/${sid}`,
|
|
547
|
+
prompt: await buildPlanSlicePrompt(
|
|
548
|
+
mid, midTitle, sid, sTitle, basePath, undefined,
|
|
549
|
+
softScopeHint ? { softScopeHint } : undefined,
|
|
550
|
+
),
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
return {
|
|
554
|
+
action: "dispatch",
|
|
555
|
+
unitType: "refine-slice",
|
|
556
|
+
unitId: `${mid}/${sid}`,
|
|
557
|
+
prompt: await buildRefineSlicePrompt(mid, midTitle, sid, sTitle, basePath),
|
|
558
|
+
};
|
|
559
|
+
},
|
|
560
|
+
},
|
|
471
561
|
{
|
|
472
562
|
name: "planning → plan-slice",
|
|
473
563
|
match: async ({ state, mid, midTitle, basePath }) => {
|
|
@@ -755,6 +845,34 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
755
845
|
match: async ({ state, mid, midTitle, basePath }) => {
|
|
756
846
|
if (state.phase !== "completing-milestone") return null;
|
|
757
847
|
|
|
848
|
+
// Defense-in-depth (#4324): skip dispatch if the DB already marks
|
|
849
|
+
// this milestone as complete. Prevents re-enqueue when the legacy
|
|
850
|
+
// filesystem state-derivation path runs (e.g. transient DB
|
|
851
|
+
// unavailability) and produces a stale completing-milestone phase.
|
|
852
|
+
if (isDbAvailable()) {
|
|
853
|
+
const milestone = getMilestone(mid);
|
|
854
|
+
if (milestone && isClosedStatus(milestone.status)) {
|
|
855
|
+
return { action: "skip" };
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// Reconciliation guard (#4324): when the SUMMARY file already exists
|
|
860
|
+
// on disk but the DB says the milestone is not complete, the DB is
|
|
861
|
+
// out of sync (e.g. journal reset, partial merge, crash recovery).
|
|
862
|
+
// Reconcile the DB status directly instead of re-dispatching the
|
|
863
|
+
// tool, which would overwrite the richer on-disk SUMMARY with a
|
|
864
|
+
// thinner regenerated version — causing silent data loss.
|
|
865
|
+
const existingSummary = resolveMilestoneFile(basePath, mid, "SUMMARY");
|
|
866
|
+
if (existingSummary && isDbAvailable()) {
|
|
867
|
+
try {
|
|
868
|
+
updateMilestoneStatus(mid, "complete", new Date().toISOString());
|
|
869
|
+
logWarning("dispatch", `Milestone ${mid} has SUMMARY on disk but DB status was not complete — reconciled DB to complete (#4324)`);
|
|
870
|
+
} catch (err) {
|
|
871
|
+
logWarning("dispatch", `Failed to reconcile milestone ${mid} status: ${err instanceof Error ? err.message : String(err)}`);
|
|
872
|
+
}
|
|
873
|
+
return { action: "skip" };
|
|
874
|
+
}
|
|
875
|
+
|
|
758
876
|
// Safety guard (#2675): block completion when VALIDATION verdict is
|
|
759
877
|
// needs-remediation. The state machine treats needs-remediation as
|
|
760
878
|
// terminal (to prevent validate-milestone loops per #832), but
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* continue to work without changes.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
export { autoLoop } from "./auto/loop.js";
|
|
10
|
+
export { autoLoop, runUokKernelLoop, runLegacyAutoLoop } from "./auto/loop.js";
|
|
11
11
|
export { isInfrastructureError, INFRA_ERROR_CODES } from "./auto/infra-errors.js";
|
|
12
12
|
export { resolveAgentEnd, resolveAgentEndCancelled, isSessionSwitchInFlight, _resetPendingResolve, _setActiveSession } from "./auto/resolve.js";
|
|
13
13
|
export { detectStuck } from "./auto/detect-stuck.js";
|
|
@@ -42,7 +42,15 @@ export function resolvePreferredModelConfig(
|
|
|
42
42
|
if (!routingConfig.enabled || !routingConfig.tier_models) return undefined;
|
|
43
43
|
|
|
44
44
|
// Don't synthesize a routing config for flat-rate providers (#3453).
|
|
45
|
-
|
|
45
|
+
// Users can opt into routing for flat-rate subscriptions (e.g. claude-code)
|
|
46
|
+
// via dynamic_routing.allow_flat_rate_providers (#4386).
|
|
47
|
+
if (
|
|
48
|
+
!routingConfig.allow_flat_rate_providers &&
|
|
49
|
+
autoModeStartModel &&
|
|
50
|
+
isFlatRateProvider(autoModeStartModel.provider, autoModeStartModel.flatRateCtx)
|
|
51
|
+
) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
46
54
|
|
|
47
55
|
const ceilingModel = routingConfig.tier_models.heavy
|
|
48
56
|
?? (autoModeStartModel ? `${autoModeStartModel.provider}/${autoModeStartModel.id}` : undefined);
|
|
@@ -152,7 +160,10 @@ export async function selectAndApplyModel(
|
|
|
152
160
|
// model provides no cost benefit — it only degrades quality.
|
|
153
161
|
// Fail-closed: if primary model can't be resolved, fall back to
|
|
154
162
|
// provider-level signals rather than allowing unwanted downgrades.
|
|
155
|
-
|
|
163
|
+
// Opt-in: dynamic_routing.allow_flat_rate_providers skips the bypass so
|
|
164
|
+
// claude-code subscribers can still get intelligent per-task selection
|
|
165
|
+
// across their subscription (#4386).
|
|
166
|
+
if (routingConfig.enabled && !routingConfig.allow_flat_rate_providers) {
|
|
156
167
|
const primaryModel = resolveModelId(modelConfig.primary, routingEligibleModels, ctx.model?.provider);
|
|
157
168
|
if (primaryModel) {
|
|
158
169
|
const primaryFlatRateCtx = buildFlatRateContext(primaryModel.provider, ctx, prefs);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Post-unit processing for
|
|
2
|
+
* Post-unit processing for auto-loop — auto-commit, doctor run,
|
|
3
3
|
* state rebuild, worktree sync, DB dual-write, hooks, triage, and
|
|
4
4
|
* quick-task dispatch.
|
|
5
5
|
*
|
|
6
|
-
* Split into two functions called sequentially by
|
|
6
|
+
* Split into two functions called sequentially by auto-loop with
|
|
7
7
|
* the verification gate between them:
|
|
8
8
|
* 1. postUnitPreVerification() — commit, doctor, state rebuild, worktree sync, artifact verification
|
|
9
9
|
* 2. postUnitPostVerification() — DB dual-write, hooks, triage, quick-tasks
|
|
10
10
|
*
|
|
11
|
-
* Extracted from
|
|
11
|
+
* Extracted from the pre-loop agent_end handler in auto.ts.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import type { ExtensionContext, ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
@@ -99,7 +99,7 @@ function enqueueSidecar(
|
|
|
99
99
|
* next actual task commit via `smartStage()`. */
|
|
100
100
|
const LIFECYCLE_ONLY_UNITS = new Set([
|
|
101
101
|
"research-milestone", "discuss-milestone", "discuss-slice", "plan-milestone",
|
|
102
|
-
"validate-milestone", "research-slice", "plan-slice",
|
|
102
|
+
"validate-milestone", "research-slice", "plan-slice", "refine-slice",
|
|
103
103
|
"replan-slice", "complete-slice", "run-uat",
|
|
104
104
|
"reassess-roadmap", "rewrite-docs",
|
|
105
105
|
]);
|
|
@@ -190,7 +190,7 @@ export function detectRogueFileWrites(
|
|
|
190
190
|
if (!hasPlanningState) {
|
|
191
191
|
rogues.push({ path: roadmapPath, unitType, unitId });
|
|
192
192
|
}
|
|
193
|
-
} else if (unitType === "plan-slice" || unitType === "replan-slice") {
|
|
193
|
+
} else if (unitType === "plan-slice" || unitType === "refine-slice" || unitType === "replan-slice") {
|
|
194
194
|
if (!mid || !sid) return [];
|
|
195
195
|
|
|
196
196
|
const planPath = resolveSliceFile(basePath, mid, sid, "PLAN");
|
|
@@ -1020,10 +1020,12 @@ export async function postUnitPostVerification(pctx: PostUnitContext): Promise<"
|
|
|
1020
1020
|
}
|
|
1021
1021
|
}
|
|
1022
1022
|
|
|
1023
|
-
// ── Pre-execution checks (after plan-slice completes) ──
|
|
1023
|
+
// ── Pre-execution checks (after plan-slice or ADR-011 refine-slice completes) ──
|
|
1024
|
+
// Both emit the same PLAN.md + task artifacts via gsd_plan_slice, so the
|
|
1025
|
+
// same structural validation applies to both.
|
|
1024
1026
|
if (
|
|
1025
1027
|
s.currentUnit &&
|
|
1026
|
-
s.currentUnit.type === "plan-slice"
|
|
1028
|
+
(s.currentUnit.type === "plan-slice" || s.currentUnit.type === "refine-slice")
|
|
1027
1029
|
) {
|
|
1028
1030
|
const currentUnit = s.currentUnit;
|
|
1029
1031
|
let preExecPauseNeeded = false;
|