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
|
@@ -180,7 +180,7 @@ function openRawDb(path: string): unknown {
|
|
|
180
180
|
return new Database(path);
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
const SCHEMA_VERSION =
|
|
183
|
+
const SCHEMA_VERSION = 17;
|
|
184
184
|
|
|
185
185
|
function indexExists(db: DbAdapter, name: string): boolean {
|
|
186
186
|
return !!db.prepare(
|
|
@@ -235,6 +235,7 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
|
|
|
235
235
|
rationale TEXT NOT NULL DEFAULT '',
|
|
236
236
|
revisable TEXT NOT NULL DEFAULT '',
|
|
237
237
|
made_by TEXT NOT NULL DEFAULT 'agent',
|
|
238
|
+
source TEXT NOT NULL DEFAULT 'discussion', -- ADR-011 P2: 'discussion' | 'planning' | 'escalation'
|
|
238
239
|
superseded_by TEXT DEFAULT NULL
|
|
239
240
|
)
|
|
240
241
|
`);
|
|
@@ -334,6 +335,8 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
|
|
|
334
335
|
observability_impact TEXT NOT NULL DEFAULT '',
|
|
335
336
|
sequence INTEGER DEFAULT 0, -- Ordering hint: tools may set this to control execution order
|
|
336
337
|
replan_triggered_at TEXT DEFAULT NULL,
|
|
338
|
+
is_sketch INTEGER NOT NULL DEFAULT 0, -- ADR-011: 1 = slice is a sketch awaiting refinement
|
|
339
|
+
sketch_scope TEXT NOT NULL DEFAULT '', -- ADR-011: 2-3 sentence rough scope from plan-milestone
|
|
337
340
|
PRIMARY KEY (milestone_id, id),
|
|
338
341
|
FOREIGN KEY (milestone_id) REFERENCES milestones(id)
|
|
339
342
|
)
|
|
@@ -352,6 +355,11 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
|
|
|
352
355
|
duration TEXT NOT NULL DEFAULT '',
|
|
353
356
|
completed_at TEXT DEFAULT NULL,
|
|
354
357
|
blocker_discovered INTEGER DEFAULT 0,
|
|
358
|
+
blocker_source TEXT NOT NULL DEFAULT '', -- ADR-011 P2: provenance for blocker_discovered (e.g. 'reject-escalation')
|
|
359
|
+
escalation_pending INTEGER NOT NULL DEFAULT 0, -- ADR-011 P2: pause-on-escalation flag
|
|
360
|
+
escalation_awaiting_review INTEGER NOT NULL DEFAULT 0, -- ADR-011 P2: artifact exists but continueWithDefault=true (no pause)
|
|
361
|
+
escalation_artifact_path TEXT DEFAULT NULL, -- ADR-011 P2: path to T##-ESCALATION.json
|
|
362
|
+
escalation_override_applied_at TEXT DEFAULT NULL, -- ADR-011 P2: DB claim lock for idempotent override injection
|
|
355
363
|
deviations TEXT NOT NULL DEFAULT '',
|
|
356
364
|
known_issues TEXT NOT NULL DEFAULT '',
|
|
357
365
|
key_files TEXT NOT NULL DEFAULT '[]',
|
|
@@ -525,6 +533,9 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
|
|
|
525
533
|
db.exec("CREATE INDEX IF NOT EXISTS idx_turn_git_tx_turn ON turn_git_transactions(trace_id, turn_id)");
|
|
526
534
|
db.exec("CREATE INDEX IF NOT EXISTS idx_audit_events_trace ON audit_events(trace_id, ts)");
|
|
527
535
|
db.exec("CREATE INDEX IF NOT EXISTS idx_audit_events_turn ON audit_events(trace_id, turn_id, ts)");
|
|
536
|
+
// ADR-011 Phase 2 — also created by the v17 migration; fresh installs
|
|
537
|
+
// skip migrations so the index must be created here too.
|
|
538
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_tasks_escalation_pending ON tasks(milestone_id, slice_id, escalation_pending)");
|
|
528
539
|
|
|
529
540
|
db.exec(`CREATE VIEW IF NOT EXISTS active_decisions AS SELECT * FROM decisions WHERE superseded_by IS NULL`);
|
|
530
541
|
db.exec(`CREATE VIEW IF NOT EXISTS active_requirements AS SELECT * FROM requirements WHERE superseded_by IS NULL`);
|
|
@@ -951,6 +962,32 @@ function migrateSchema(db: DbAdapter): void {
|
|
|
951
962
|
});
|
|
952
963
|
}
|
|
953
964
|
|
|
965
|
+
if (currentVersion < 16) {
|
|
966
|
+
// ADR-011 Phase 1: sketch-then-refine progressive planning — sketch columns on slices.
|
|
967
|
+
ensureColumn(db, "slices", "is_sketch", `ALTER TABLE slices ADD COLUMN is_sketch INTEGER NOT NULL DEFAULT 0`);
|
|
968
|
+
ensureColumn(db, "slices", "sketch_scope", `ALTER TABLE slices ADD COLUMN sketch_scope TEXT NOT NULL DEFAULT ''`);
|
|
969
|
+
// ADR-011 Phase 2: decisions can now be sourced from escalation resolutions.
|
|
970
|
+
ensureColumn(db, "decisions", "source", `ALTER TABLE decisions ADD COLUMN source TEXT NOT NULL DEFAULT 'discussion'`);
|
|
971
|
+
db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
|
|
972
|
+
":version": 16,
|
|
973
|
+
":applied_at": new Date().toISOString(),
|
|
974
|
+
});
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
if (currentVersion < 17) {
|
|
978
|
+
// ADR-011 Phase 2: mid-execution escalation — columns on the tasks table.
|
|
979
|
+
ensureColumn(db, "tasks", "blocker_source", `ALTER TABLE tasks ADD COLUMN blocker_source TEXT NOT NULL DEFAULT ''`);
|
|
980
|
+
ensureColumn(db, "tasks", "escalation_pending", `ALTER TABLE tasks ADD COLUMN escalation_pending INTEGER NOT NULL DEFAULT 0`);
|
|
981
|
+
ensureColumn(db, "tasks", "escalation_awaiting_review", `ALTER TABLE tasks ADD COLUMN escalation_awaiting_review INTEGER NOT NULL DEFAULT 0`);
|
|
982
|
+
ensureColumn(db, "tasks", "escalation_artifact_path", `ALTER TABLE tasks ADD COLUMN escalation_artifact_path TEXT DEFAULT NULL`);
|
|
983
|
+
ensureColumn(db, "tasks", "escalation_override_applied_at", `ALTER TABLE tasks ADD COLUMN escalation_override_applied_at TEXT DEFAULT NULL`);
|
|
984
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_tasks_escalation_pending ON tasks(milestone_id, slice_id, escalation_pending)");
|
|
985
|
+
db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
|
|
986
|
+
":version": 17,
|
|
987
|
+
":applied_at": new Date().toISOString(),
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
|
|
954
991
|
db.exec("COMMIT");
|
|
955
992
|
} catch (err) {
|
|
956
993
|
db.exec("ROLLBACK");
|
|
@@ -1052,6 +1089,14 @@ export function vacuumDatabase(): void {
|
|
|
1052
1089
|
} catch (e) { logWarning("db", `VACUUM failed: ${(e as Error).message}`); }
|
|
1053
1090
|
}
|
|
1054
1091
|
|
|
1092
|
+
/** Flush WAL into gsd.db so `git add .gsd/gsd.db` stages current state — safe while DB is open. */
|
|
1093
|
+
export function checkpointDatabase(): void {
|
|
1094
|
+
if (!currentDb) return;
|
|
1095
|
+
try {
|
|
1096
|
+
currentDb.exec('PRAGMA wal_checkpoint(TRUNCATE)');
|
|
1097
|
+
} catch (e) { logWarning("db", `WAL checkpoint failed: ${(e as Error).message}`); }
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1055
1100
|
let _txDepth = 0;
|
|
1056
1101
|
|
|
1057
1102
|
export function transaction<T>(fn: () => T): T {
|
|
@@ -1127,8 +1172,8 @@ export function readTransaction<T>(fn: () => T): T {
|
|
|
1127
1172
|
export function insertDecision(d: Omit<Decision, "seq">): void {
|
|
1128
1173
|
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1129
1174
|
currentDb.prepare(
|
|
1130
|
-
`INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by)
|
|
1131
|
-
VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :superseded_by)`,
|
|
1175
|
+
`INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by)
|
|
1176
|
+
VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :source, :superseded_by)`,
|
|
1132
1177
|
).run({
|
|
1133
1178
|
":id": d.id,
|
|
1134
1179
|
":when_context": d.when_context,
|
|
@@ -1138,6 +1183,7 @@ export function insertDecision(d: Omit<Decision, "seq">): void {
|
|
|
1138
1183
|
":rationale": d.rationale,
|
|
1139
1184
|
":revisable": d.revisable,
|
|
1140
1185
|
":made_by": d.made_by ?? "agent",
|
|
1186
|
+
":source": d.source ?? "discussion",
|
|
1141
1187
|
":superseded_by": d.superseded_by,
|
|
1142
1188
|
});
|
|
1143
1189
|
}
|
|
@@ -1156,6 +1202,7 @@ export function getDecisionById(id: string): Decision | null {
|
|
|
1156
1202
|
rationale: row["rationale"] as string,
|
|
1157
1203
|
revisable: row["revisable"] as string,
|
|
1158
1204
|
made_by: (row["made_by"] as string as import("./types.js").DecisionMadeBy) ?? "agent",
|
|
1205
|
+
source: (row["source"] as string) ?? "discussion",
|
|
1159
1206
|
superseded_by: (row["superseded_by"] as string) ?? null,
|
|
1160
1207
|
};
|
|
1161
1208
|
}
|
|
@@ -1173,6 +1220,7 @@ export function getActiveDecisions(): Decision[] {
|
|
|
1173
1220
|
rationale: row["rationale"] as string,
|
|
1174
1221
|
revisable: row["revisable"] as string,
|
|
1175
1222
|
made_by: (row["made_by"] as string as import("./types.js").DecisionMadeBy) ?? "agent",
|
|
1223
|
+
source: (row["source"] as string) ?? "discussion",
|
|
1176
1224
|
superseded_by: null,
|
|
1177
1225
|
}));
|
|
1178
1226
|
}
|
|
@@ -1261,8 +1309,8 @@ export function upsertDecision(d: Omit<Decision, "seq">): void {
|
|
|
1261
1309
|
// seq column. INSERT OR REPLACE deletes then reinserts, resetting seq and
|
|
1262
1310
|
// corrupting decision ordering in DECISIONS.md after reconcile replay.
|
|
1263
1311
|
currentDb.prepare(
|
|
1264
|
-
`INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by)
|
|
1265
|
-
VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :superseded_by)
|
|
1312
|
+
`INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by)
|
|
1313
|
+
VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :source, :superseded_by)
|
|
1266
1314
|
ON CONFLICT(id) DO UPDATE SET
|
|
1267
1315
|
when_context = excluded.when_context,
|
|
1268
1316
|
scope = excluded.scope,
|
|
@@ -1271,6 +1319,7 @@ export function upsertDecision(d: Omit<Decision, "seq">): void {
|
|
|
1271
1319
|
rationale = excluded.rationale,
|
|
1272
1320
|
revisable = excluded.revisable,
|
|
1273
1321
|
made_by = excluded.made_by,
|
|
1322
|
+
source = excluded.source,
|
|
1274
1323
|
superseded_by = excluded.superseded_by`,
|
|
1275
1324
|
).run({
|
|
1276
1325
|
":id": d.id,
|
|
@@ -1281,6 +1330,7 @@ export function upsertDecision(d: Omit<Decision, "seq">): void {
|
|
|
1281
1330
|
":rationale": d.rationale,
|
|
1282
1331
|
":revisable": d.revisable,
|
|
1283
1332
|
":made_by": d.made_by ?? "agent",
|
|
1333
|
+
":source": d.source ?? "discussion",
|
|
1284
1334
|
":superseded_by": d.superseded_by ?? null,
|
|
1285
1335
|
});
|
|
1286
1336
|
}
|
|
@@ -1455,16 +1505,20 @@ export function insertSlice(s: {
|
|
|
1455
1505
|
depends?: string[];
|
|
1456
1506
|
demo?: string;
|
|
1457
1507
|
sequence?: number;
|
|
1508
|
+
isSketch?: boolean;
|
|
1509
|
+
sketchScope?: string;
|
|
1458
1510
|
planning?: Partial<SlicePlanningRecord>;
|
|
1459
1511
|
}): void {
|
|
1460
1512
|
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1461
1513
|
currentDb.prepare(
|
|
1462
1514
|
`INSERT INTO slices (
|
|
1463
1515
|
milestone_id, id, title, status, risk, depends, demo, created_at,
|
|
1464
|
-
goal, success_criteria, proof_level, integration_closure, observability_impact, sequence
|
|
1516
|
+
goal, success_criteria, proof_level, integration_closure, observability_impact, sequence,
|
|
1517
|
+
is_sketch, sketch_scope
|
|
1465
1518
|
) VALUES (
|
|
1466
1519
|
:milestone_id, :id, :title, :status, :risk, :depends, :demo, :created_at,
|
|
1467
|
-
:goal, :success_criteria, :proof_level, :integration_closure, :observability_impact, :sequence
|
|
1520
|
+
:goal, :success_criteria, :proof_level, :integration_closure, :observability_impact, :sequence,
|
|
1521
|
+
:is_sketch, :sketch_scope
|
|
1468
1522
|
)
|
|
1469
1523
|
ON CONFLICT (milestone_id, id) DO UPDATE SET
|
|
1470
1524
|
title = CASE WHEN :raw_title IS NOT NULL THEN excluded.title ELSE slices.title END,
|
|
@@ -1477,7 +1531,9 @@ export function insertSlice(s: {
|
|
|
1477
1531
|
proof_level = CASE WHEN :raw_proof_level IS NOT NULL THEN excluded.proof_level ELSE slices.proof_level END,
|
|
1478
1532
|
integration_closure = CASE WHEN :raw_integration_closure IS NOT NULL THEN excluded.integration_closure ELSE slices.integration_closure END,
|
|
1479
1533
|
observability_impact = CASE WHEN :raw_observability_impact IS NOT NULL THEN excluded.observability_impact ELSE slices.observability_impact END,
|
|
1480
|
-
sequence = CASE WHEN :raw_sequence IS NOT NULL THEN excluded.sequence ELSE slices.sequence END
|
|
1534
|
+
sequence = CASE WHEN :raw_sequence IS NOT NULL THEN excluded.sequence ELSE slices.sequence END,
|
|
1535
|
+
is_sketch = CASE WHEN :raw_is_sketch IS NOT NULL THEN excluded.is_sketch ELSE slices.is_sketch END,
|
|
1536
|
+
sketch_scope = CASE WHEN :raw_sketch_scope IS NOT NULL THEN excluded.sketch_scope ELSE slices.sketch_scope END`,
|
|
1481
1537
|
).run({
|
|
1482
1538
|
":milestone_id": s.milestoneId,
|
|
1483
1539
|
":id": s.id,
|
|
@@ -1493,6 +1549,8 @@ export function insertSlice(s: {
|
|
|
1493
1549
|
":integration_closure": s.planning?.integrationClosure ?? "",
|
|
1494
1550
|
":observability_impact": s.planning?.observabilityImpact ?? "",
|
|
1495
1551
|
":sequence": s.sequence ?? 0,
|
|
1552
|
+
":is_sketch": s.isSketch ? 1 : 0,
|
|
1553
|
+
":sketch_scope": s.sketchScope ?? "",
|
|
1496
1554
|
// Raw sentinel params: NULL when caller omitted the field, used in ON CONFLICT guards
|
|
1497
1555
|
":raw_title": s.title ?? null,
|
|
1498
1556
|
":raw_risk": s.risk ?? null,
|
|
@@ -1503,9 +1561,52 @@ export function insertSlice(s: {
|
|
|
1503
1561
|
":raw_integration_closure": s.planning?.integrationClosure ?? null,
|
|
1504
1562
|
":raw_observability_impact": s.planning?.observabilityImpact ?? null,
|
|
1505
1563
|
":raw_sequence": s.sequence ?? null,
|
|
1564
|
+
":raw_is_sketch": s.isSketch === undefined ? null : (s.isSketch ? 1 : 0),
|
|
1565
|
+
// NOTE: use !== undefined (not ??) so an explicit empty string "" is treated
|
|
1566
|
+
// as a present value and correctly clears the existing sketch_scope on
|
|
1567
|
+
// CONFLICT. ?? would incorrectly preserve the stale value.
|
|
1568
|
+
":raw_sketch_scope": s.sketchScope !== undefined ? s.sketchScope : null,
|
|
1506
1569
|
});
|
|
1507
1570
|
}
|
|
1508
1571
|
|
|
1572
|
+
// ADR-011: sketch-then-refine helpers
|
|
1573
|
+
export function setSliceSketchFlag(milestoneId: string, sliceId: string, isSketch: boolean): void {
|
|
1574
|
+
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1575
|
+
currentDb.prepare(
|
|
1576
|
+
`UPDATE slices SET is_sketch = :is_sketch WHERE milestone_id = :mid AND id = :sid`,
|
|
1577
|
+
).run({ ":is_sketch": isSketch ? 1 : 0, ":mid": milestoneId, ":sid": sliceId });
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
/**
|
|
1581
|
+
* ADR-011 auto-heal: reconcile stale is_sketch=1 rows whose PLAN already exists.
|
|
1582
|
+
*
|
|
1583
|
+
* Callers pass a predicate that resolves whether a plan file exists for a slice.
|
|
1584
|
+
* The predicate MUST use the canonical path resolver (`resolveSliceFile`, etc.)
|
|
1585
|
+
* to keep path logic in one place — do not hand-roll the path inside the callback.
|
|
1586
|
+
*
|
|
1587
|
+
* Recovers from two scenarios:
|
|
1588
|
+
* 1. Crash between `gsd_plan_slice` write and the sketch flag flip.
|
|
1589
|
+
* 2. Flag-OFF downgrade path: when `progressive_planning` is off, the dispatch
|
|
1590
|
+
* rule routes sketch slices to plan-slice, which writes PLAN.md but leaves
|
|
1591
|
+
* `is_sketch=1` — the next state derivation auto-heals it to 0 here.
|
|
1592
|
+
*
|
|
1593
|
+
* Not aggressive in practice: PLAN.md is only written via the DB-backed
|
|
1594
|
+
* `gsd_plan_slice` tool (which also inserts tasks), so a "stale PLAN.md with
|
|
1595
|
+
* is_sketch=1" is extremely unlikely to indicate anything other than the two
|
|
1596
|
+
* recovery scenarios above.
|
|
1597
|
+
*/
|
|
1598
|
+
export function autoHealSketchFlags(milestoneId: string, hasPlanFile: (sliceId: string) => boolean): void {
|
|
1599
|
+
if (!currentDb) return;
|
|
1600
|
+
const rows = currentDb.prepare(
|
|
1601
|
+
`SELECT id FROM slices WHERE milestone_id = :mid AND is_sketch = 1`,
|
|
1602
|
+
).all({ ":mid": milestoneId }) as Array<{ id: string }>;
|
|
1603
|
+
for (const row of rows) {
|
|
1604
|
+
if (hasPlanFile(row.id)) {
|
|
1605
|
+
setSliceSketchFlag(milestoneId, row.id, false);
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1509
1610
|
export function upsertSlicePlanning(milestoneId: string, sliceId: string, planning: Partial<SlicePlanningRecord>): void {
|
|
1510
1611
|
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1511
1612
|
currentDb.prepare(
|
|
@@ -1679,6 +1780,8 @@ export interface SliceRow {
|
|
|
1679
1780
|
observability_impact: string;
|
|
1680
1781
|
sequence: number;
|
|
1681
1782
|
replan_triggered_at: string | null;
|
|
1783
|
+
is_sketch: number;
|
|
1784
|
+
sketch_scope: string;
|
|
1682
1785
|
}
|
|
1683
1786
|
|
|
1684
1787
|
function rowToSlice(row: Record<string, unknown>): SliceRow {
|
|
@@ -1701,6 +1804,8 @@ function rowToSlice(row: Record<string, unknown>): SliceRow {
|
|
|
1701
1804
|
observability_impact: (row["observability_impact"] as string) ?? "",
|
|
1702
1805
|
sequence: (row["sequence"] as number) ?? 0,
|
|
1703
1806
|
replan_triggered_at: (row["replan_triggered_at"] as string) ?? null,
|
|
1807
|
+
is_sketch: (row["is_sketch"] as number) ?? 0,
|
|
1808
|
+
sketch_scope: (row["sketch_scope"] as string) ?? "",
|
|
1704
1809
|
};
|
|
1705
1810
|
}
|
|
1706
1811
|
|
|
@@ -1764,6 +1869,12 @@ export interface TaskRow {
|
|
|
1764
1869
|
observability_impact: string;
|
|
1765
1870
|
full_plan_md: string;
|
|
1766
1871
|
sequence: number;
|
|
1872
|
+
// ADR-011 Phase 2 escalation fields
|
|
1873
|
+
blocker_source: string;
|
|
1874
|
+
escalation_pending: number;
|
|
1875
|
+
escalation_awaiting_review: number;
|
|
1876
|
+
escalation_artifact_path: string | null;
|
|
1877
|
+
escalation_override_applied_at: string | null;
|
|
1767
1878
|
}
|
|
1768
1879
|
|
|
1769
1880
|
function parseTaskArrayColumn(raw: unknown): string[] {
|
|
@@ -1834,6 +1945,11 @@ function rowToTask(row: Record<string, unknown>): TaskRow {
|
|
|
1834
1945
|
observability_impact: (row["observability_impact"] as string) ?? "",
|
|
1835
1946
|
full_plan_md: (row["full_plan_md"] as string) ?? "",
|
|
1836
1947
|
sequence: (row["sequence"] as number) ?? 0,
|
|
1948
|
+
blocker_source: (row["blocker_source"] as string) ?? "",
|
|
1949
|
+
escalation_pending: (row["escalation_pending"] as number) ?? 0,
|
|
1950
|
+
escalation_awaiting_review: (row["escalation_awaiting_review"] as number) ?? 0,
|
|
1951
|
+
escalation_artifact_path: (row["escalation_artifact_path"] as string) ?? null,
|
|
1952
|
+
escalation_override_applied_at: (row["escalation_override_applied_at"] as string) ?? null,
|
|
1837
1953
|
};
|
|
1838
1954
|
}
|
|
1839
1955
|
|
|
@@ -1854,6 +1970,125 @@ export function getSliceTasks(milestoneId: string, sliceId: string): TaskRow[] {
|
|
|
1854
1970
|
return rows.map(rowToTask);
|
|
1855
1971
|
}
|
|
1856
1972
|
|
|
1973
|
+
// ─── ADR-011 Phase 2 escalation helpers ──────────────────────────────────
|
|
1974
|
+
|
|
1975
|
+
/** Set pause-on-escalation state on a completed task. Mutually exclusive with awaiting_review. */
|
|
1976
|
+
export function setTaskEscalationPending(
|
|
1977
|
+
milestoneId: string, sliceId: string, taskId: string,
|
|
1978
|
+
artifactPath: string,
|
|
1979
|
+
): void {
|
|
1980
|
+
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1981
|
+
currentDb.prepare(
|
|
1982
|
+
`UPDATE tasks
|
|
1983
|
+
SET escalation_pending = 1,
|
|
1984
|
+
escalation_awaiting_review = 0,
|
|
1985
|
+
escalation_artifact_path = :path
|
|
1986
|
+
WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
|
|
1987
|
+
).run({ ":path": artifactPath, ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
|
|
1988
|
+
}
|
|
1989
|
+
|
|
1990
|
+
/** Set awaiting-review state (artifact exists but continueWithDefault=true, no pause). Mutually exclusive with pending. */
|
|
1991
|
+
export function setTaskEscalationAwaitingReview(
|
|
1992
|
+
milestoneId: string, sliceId: string, taskId: string,
|
|
1993
|
+
artifactPath: string,
|
|
1994
|
+
): void {
|
|
1995
|
+
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1996
|
+
currentDb.prepare(
|
|
1997
|
+
`UPDATE tasks
|
|
1998
|
+
SET escalation_awaiting_review = 1,
|
|
1999
|
+
escalation_pending = 0,
|
|
2000
|
+
escalation_artifact_path = :path
|
|
2001
|
+
WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
|
|
2002
|
+
).run({ ":path": artifactPath, ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
|
|
2003
|
+
}
|
|
2004
|
+
|
|
2005
|
+
/** Clear escalation-pending and awaiting-review flags once the user has resolved it. */
|
|
2006
|
+
export function clearTaskEscalationFlags(
|
|
2007
|
+
milestoneId: string, sliceId: string, taskId: string,
|
|
2008
|
+
): void {
|
|
2009
|
+
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
2010
|
+
currentDb.prepare(
|
|
2011
|
+
`UPDATE tasks
|
|
2012
|
+
SET escalation_pending = 0,
|
|
2013
|
+
escalation_awaiting_review = 0
|
|
2014
|
+
WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
|
|
2015
|
+
).run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
|
|
2016
|
+
}
|
|
2017
|
+
|
|
2018
|
+
/**
|
|
2019
|
+
* Atomically claim a resolved escalation override for injection into a downstream
|
|
2020
|
+
* task's prompt. Returns true if this caller claimed it (must inject), false if
|
|
2021
|
+
* another caller already claimed it (must skip).
|
|
2022
|
+
*/
|
|
2023
|
+
export function claimEscalationOverride(
|
|
2024
|
+
milestoneId: string, sliceId: string, sourceTaskId: string,
|
|
2025
|
+
): boolean {
|
|
2026
|
+
if (!currentDb) return false;
|
|
2027
|
+
const now = new Date().toISOString();
|
|
2028
|
+
const result = currentDb.prepare(
|
|
2029
|
+
`UPDATE tasks
|
|
2030
|
+
SET escalation_override_applied_at = :now
|
|
2031
|
+
WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid
|
|
2032
|
+
AND escalation_override_applied_at IS NULL
|
|
2033
|
+
AND escalation_artifact_path IS NOT NULL`,
|
|
2034
|
+
).run({ ":now": now, ":mid": milestoneId, ":sid": sliceId, ":tid": sourceTaskId });
|
|
2035
|
+
// node:sqlite + better-sqlite3 both surface `changes` on the run result.
|
|
2036
|
+
const changes = (result as { changes?: number }).changes ?? 0;
|
|
2037
|
+
return changes > 0;
|
|
2038
|
+
}
|
|
2039
|
+
|
|
2040
|
+
/** Find the most recent resolved-but-unapplied escalation override in a slice. */
|
|
2041
|
+
export function findUnappliedEscalationOverride(
|
|
2042
|
+
milestoneId: string, sliceId: string,
|
|
2043
|
+
): { taskId: string; artifactPath: string } | null {
|
|
2044
|
+
if (!currentDb) return null;
|
|
2045
|
+
// Filter BOTH flags: escalation_pending=0 AND escalation_awaiting_review=0
|
|
2046
|
+
// ensures we only claim overrides the user has explicitly resolved.
|
|
2047
|
+
// Without the awaiting_review filter, continueWithDefault=true artifacts
|
|
2048
|
+
// (not yet responded to) would be prematurely claimed, causing the override
|
|
2049
|
+
// to be lost when the user later resolves (#ADR-011 Phase 2 peer-review Bug 2).
|
|
2050
|
+
const row = currentDb.prepare(
|
|
2051
|
+
`SELECT id, escalation_artifact_path AS path
|
|
2052
|
+
FROM tasks
|
|
2053
|
+
WHERE milestone_id = :mid AND slice_id = :sid
|
|
2054
|
+
AND escalation_artifact_path IS NOT NULL
|
|
2055
|
+
AND escalation_override_applied_at IS NULL
|
|
2056
|
+
AND escalation_pending = 0
|
|
2057
|
+
AND escalation_awaiting_review = 0
|
|
2058
|
+
ORDER BY sequence DESC, id DESC
|
|
2059
|
+
LIMIT 1`,
|
|
2060
|
+
).get({ ":mid": milestoneId, ":sid": sliceId }) as
|
|
2061
|
+
| { id: string; path: string | null }
|
|
2062
|
+
| undefined;
|
|
2063
|
+
if (!row || !row.path) return null;
|
|
2064
|
+
return { taskId: row.id, artifactPath: row.path };
|
|
2065
|
+
}
|
|
2066
|
+
|
|
2067
|
+
/** Set the blocker_source provenance field (used when rejecting an escalation). */
|
|
2068
|
+
export function setTaskBlockerSource(
|
|
2069
|
+
milestoneId: string, sliceId: string, taskId: string, source: string,
|
|
2070
|
+
): void {
|
|
2071
|
+
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
2072
|
+
currentDb.prepare(
|
|
2073
|
+
`UPDATE tasks
|
|
2074
|
+
SET blocker_discovered = 1,
|
|
2075
|
+
blocker_source = :src
|
|
2076
|
+
WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
|
|
2077
|
+
).run({ ":src": source, ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
|
|
2078
|
+
}
|
|
2079
|
+
|
|
2080
|
+
/** List tasks with active escalation artifacts across a milestone (for /gsd escalate list). */
|
|
2081
|
+
export function listEscalationArtifacts(milestoneId: string, includeResolved: boolean = false): TaskRow[] {
|
|
2082
|
+
if (!currentDb) return [];
|
|
2083
|
+
const filter = includeResolved
|
|
2084
|
+
? "escalation_artifact_path IS NOT NULL"
|
|
2085
|
+
: "(escalation_pending = 1 OR escalation_awaiting_review = 1) AND escalation_artifact_path IS NOT NULL";
|
|
2086
|
+
const rows = currentDb.prepare(
|
|
2087
|
+
`SELECT * FROM tasks WHERE milestone_id = :mid AND ${filter} ORDER BY slice_id, sequence, id`,
|
|
2088
|
+
).all({ ":mid": milestoneId });
|
|
2089
|
+
return rows.map(rowToTask);
|
|
2090
|
+
}
|
|
2091
|
+
|
|
1857
2092
|
export function insertVerificationEvidence(e: {
|
|
1858
2093
|
taskId: string;
|
|
1859
2094
|
sliceId: string;
|
|
@@ -2167,6 +2402,19 @@ export function reconcileWorktreeDb(
|
|
|
2167
2402
|
try {
|
|
2168
2403
|
const wtInfo = adapter.prepare("PRAGMA wt.table_info('decisions')").all();
|
|
2169
2404
|
const hasMadeBy = wtInfo.some((col) => col["name"] === "made_by");
|
|
2405
|
+
// ADR-011: worktree may predate schema v16/v17. For missing columns we
|
|
2406
|
+
// fall through to the main DB's existing value (not a literal default)
|
|
2407
|
+
// so reconcile never silently clears state the main tree has recorded.
|
|
2408
|
+
const hasDecisionSource = wtInfo.some((col) => col["name"] === "source");
|
|
2409
|
+
const wtSliceInfo = adapter.prepare("PRAGMA wt.table_info('slices')").all();
|
|
2410
|
+
const hasIsSketch = wtSliceInfo.some((col) => col["name"] === "is_sketch");
|
|
2411
|
+
const hasSketchScope = wtSliceInfo.some((col) => col["name"] === "sketch_scope");
|
|
2412
|
+
const wtTaskInfo = adapter.prepare("PRAGMA wt.table_info('tasks')").all();
|
|
2413
|
+
const hasBlockerSource = wtTaskInfo.some((col) => col["name"] === "blocker_source");
|
|
2414
|
+
const hasEscalationPending = wtTaskInfo.some((col) => col["name"] === "escalation_pending");
|
|
2415
|
+
const hasEscalationAwaiting = wtTaskInfo.some((col) => col["name"] === "escalation_awaiting_review");
|
|
2416
|
+
const hasEscalationArtifact = wtTaskInfo.some((col) => col["name"] === "escalation_artifact_path");
|
|
2417
|
+
const hasEscalationOverride = wtTaskInfo.some((col) => col["name"] === "escalation_override_applied_at");
|
|
2170
2418
|
|
|
2171
2419
|
const decConf = adapter.prepare(
|
|
2172
2420
|
`SELECT m.id FROM decisions m INNER JOIN wt.decisions w ON m.id = w.id WHERE m.decision != w.decision OR m.choice != w.choice OR m.rationale != w.rationale OR ${
|
|
@@ -2188,13 +2436,20 @@ export function reconcileWorktreeDb(
|
|
|
2188
2436
|
|
|
2189
2437
|
adapter.exec("BEGIN");
|
|
2190
2438
|
try {
|
|
2439
|
+
// Join the target decisions so we can prefer an existing main.source
|
|
2440
|
+
// when the worktree predates v16 — otherwise a write-through reconcile
|
|
2441
|
+
// would clobber 'escalation'-sourced decisions with the literal default.
|
|
2191
2442
|
merged.decisions = countChanges(adapter.prepare(`
|
|
2192
2443
|
INSERT OR REPLACE INTO decisions (
|
|
2193
|
-
id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by
|
|
2444
|
+
id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by
|
|
2194
2445
|
)
|
|
2195
|
-
SELECT id, when_context, scope, decision, choice, rationale, revisable, ${
|
|
2196
|
-
hasMadeBy ? "made_by" : "'agent'"
|
|
2197
|
-
},
|
|
2446
|
+
SELECT w.id, w.when_context, w.scope, w.decision, w.choice, w.rationale, w.revisable, ${
|
|
2447
|
+
hasMadeBy ? "w.made_by" : "COALESCE(m.made_by, 'agent')"
|
|
2448
|
+
}, ${
|
|
2449
|
+
hasDecisionSource ? "w.source" : "COALESCE(m.source, 'discussion')"
|
|
2450
|
+
}, w.superseded_by
|
|
2451
|
+
FROM wt.decisions w
|
|
2452
|
+
LEFT JOIN decisions m ON m.id = w.id
|
|
2198
2453
|
`).run());
|
|
2199
2454
|
|
|
2200
2455
|
merged.requirements = countChanges(adapter.prepare(`
|
|
@@ -2231,13 +2486,15 @@ export function reconcileWorktreeDb(
|
|
|
2231
2486
|
`).run());
|
|
2232
2487
|
|
|
2233
2488
|
// Merge slices — preserve worktree progress but never downgrade completed status (#2558).
|
|
2234
|
-
//
|
|
2235
|
-
//
|
|
2489
|
+
// ADR-011 Phase 1: carry is_sketch + sketch_scope so reconcile doesn't
|
|
2490
|
+
// silently clear sketch metadata. When the worktree predates v16,
|
|
2491
|
+
// fall back to the main DB's existing value rather than a literal 0/''.
|
|
2236
2492
|
merged.slices = countChanges(adapter.prepare(`
|
|
2237
2493
|
INSERT OR REPLACE INTO slices (
|
|
2238
2494
|
milestone_id, id, title, status, risk, depends, demo, created_at, completed_at,
|
|
2239
2495
|
full_summary_md, full_uat_md, goal, success_criteria, proof_level,
|
|
2240
|
-
integration_closure, observability_impact, sequence, replan_triggered_at
|
|
2496
|
+
integration_closure, observability_impact, sequence, replan_triggered_at,
|
|
2497
|
+
is_sketch, sketch_scope
|
|
2241
2498
|
)
|
|
2242
2499
|
SELECT w.milestone_id, w.id, w.title,
|
|
2243
2500
|
CASE
|
|
@@ -2250,19 +2507,25 @@ export function reconcileWorktreeDb(
|
|
|
2250
2507
|
THEN m.completed_at ELSE w.completed_at
|
|
2251
2508
|
END,
|
|
2252
2509
|
w.full_summary_md, w.full_uat_md, w.goal, w.success_criteria, w.proof_level,
|
|
2253
|
-
w.integration_closure, w.observability_impact, w.sequence, w.replan_triggered_at
|
|
2510
|
+
w.integration_closure, w.observability_impact, w.sequence, w.replan_triggered_at,
|
|
2511
|
+
${hasIsSketch ? "w.is_sketch" : "COALESCE(m.is_sketch, 0)"},
|
|
2512
|
+
${hasSketchScope ? "w.sketch_scope" : "COALESCE(m.sketch_scope, '')"}
|
|
2254
2513
|
FROM wt.slices w
|
|
2255
2514
|
LEFT JOIN slices m ON m.milestone_id = w.milestone_id AND m.id = w.id
|
|
2256
2515
|
`).run());
|
|
2257
2516
|
|
|
2258
|
-
// Merge tasks — preserve execution results, never downgrade completed status (#2558)
|
|
2517
|
+
// Merge tasks — preserve execution results, never downgrade completed status (#2558).
|
|
2518
|
+
// ADR-011 P2: carry blocker_source + escalation_* columns so worktree reconcile
|
|
2519
|
+
// doesn't silently clear escalation state back to defaults.
|
|
2259
2520
|
merged.tasks = countChanges(adapter.prepare(`
|
|
2260
2521
|
INSERT OR REPLACE INTO tasks (
|
|
2261
2522
|
milestone_id, slice_id, id, title, status, one_liner, narrative,
|
|
2262
2523
|
verification_result, duration, completed_at, blocker_discovered,
|
|
2263
2524
|
deviations, known_issues, key_files, key_decisions, full_summary_md,
|
|
2264
2525
|
description, estimate, files, verify, inputs, expected_output,
|
|
2265
|
-
observability_impact, full_plan_md, sequence
|
|
2526
|
+
observability_impact, full_plan_md, sequence,
|
|
2527
|
+
blocker_source, escalation_pending, escalation_awaiting_review,
|
|
2528
|
+
escalation_artifact_path, escalation_override_applied_at
|
|
2266
2529
|
)
|
|
2267
2530
|
SELECT w.milestone_id, w.slice_id, w.id, w.title,
|
|
2268
2531
|
CASE
|
|
@@ -2278,7 +2541,12 @@ export function reconcileWorktreeDb(
|
|
|
2278
2541
|
w.blocker_discovered,
|
|
2279
2542
|
w.deviations, w.known_issues, w.key_files, w.key_decisions, w.full_summary_md,
|
|
2280
2543
|
w.description, w.estimate, w.files, w.verify, w.inputs, w.expected_output,
|
|
2281
|
-
w.observability_impact, w.full_plan_md, w.sequence
|
|
2544
|
+
w.observability_impact, w.full_plan_md, w.sequence,
|
|
2545
|
+
${hasBlockerSource ? "w.blocker_source" : "COALESCE(m.blocker_source, '')"},
|
|
2546
|
+
${hasEscalationPending ? "w.escalation_pending" : "COALESCE(m.escalation_pending, 0)"},
|
|
2547
|
+
${hasEscalationAwaiting ? "w.escalation_awaiting_review" : "COALESCE(m.escalation_awaiting_review, 0)"},
|
|
2548
|
+
${hasEscalationArtifact ? "w.escalation_artifact_path" : "m.escalation_artifact_path"},
|
|
2549
|
+
${hasEscalationOverride ? "w.escalation_override_applied_at" : "m.escalation_override_applied_at"}
|
|
2282
2550
|
FROM wt.tasks w
|
|
2283
2551
|
LEFT JOIN tasks m ON m.milestone_id = w.milestone_id AND m.slice_id = w.slice_id AND m.id = w.id
|
|
2284
2552
|
`).run());
|
|
@@ -3000,13 +3268,13 @@ export function restoreManifest(manifest: StateManifest): void {
|
|
|
3000
3268
|
);
|
|
3001
3269
|
}
|
|
3002
3270
|
|
|
3003
|
-
// Restore slices
|
|
3271
|
+
// Restore slices (ADR-011 Phase 1: includes is_sketch + sketch_scope)
|
|
3004
3272
|
const slStmt = db.prepare(
|
|
3005
3273
|
`INSERT INTO slices (milestone_id, id, title, status, risk, depends, demo,
|
|
3006
3274
|
created_at, completed_at, full_summary_md, full_uat_md,
|
|
3007
3275
|
goal, success_criteria, proof_level, integration_closure, observability_impact,
|
|
3008
|
-
sequence, replan_triggered_at)
|
|
3009
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
3276
|
+
sequence, replan_triggered_at, is_sketch, sketch_scope)
|
|
3277
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
3010
3278
|
);
|
|
3011
3279
|
for (const s of manifest.slices) {
|
|
3012
3280
|
slStmt.run(
|
|
@@ -3015,17 +3283,21 @@ export function restoreManifest(manifest: StateManifest): void {
|
|
|
3015
3283
|
s.created_at, s.completed_at, s.full_summary_md, s.full_uat_md,
|
|
3016
3284
|
s.goal, s.success_criteria, s.proof_level, s.integration_closure, s.observability_impact,
|
|
3017
3285
|
s.sequence, s.replan_triggered_at,
|
|
3286
|
+
s.is_sketch ?? 0,
|
|
3287
|
+
s.sketch_scope ?? "",
|
|
3018
3288
|
);
|
|
3019
3289
|
}
|
|
3020
3290
|
|
|
3021
|
-
// Restore tasks
|
|
3291
|
+
// Restore tasks (ADR-011 P2: includes blocker_source + escalation_* columns)
|
|
3022
3292
|
const tkStmt = db.prepare(
|
|
3023
3293
|
`INSERT INTO tasks (milestone_id, slice_id, id, title, status,
|
|
3024
3294
|
one_liner, narrative, verification_result, duration, completed_at,
|
|
3025
3295
|
blocker_discovered, deviations, known_issues, key_files, key_decisions,
|
|
3026
3296
|
full_summary_md, description, estimate, files, verify,
|
|
3027
|
-
inputs, expected_output, observability_impact, sequence
|
|
3028
|
-
|
|
3297
|
+
inputs, expected_output, observability_impact, sequence,
|
|
3298
|
+
blocker_source, escalation_pending, escalation_awaiting_review,
|
|
3299
|
+
escalation_artifact_path, escalation_override_applied_at)
|
|
3300
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
3029
3301
|
);
|
|
3030
3302
|
for (const t of manifest.tasks) {
|
|
3031
3303
|
tkStmt.run(
|
|
@@ -3036,16 +3308,21 @@ export function restoreManifest(manifest: StateManifest): void {
|
|
|
3036
3308
|
t.full_summary_md, t.description, t.estimate, JSON.stringify(t.files), t.verify,
|
|
3037
3309
|
JSON.stringify(t.inputs), JSON.stringify(t.expected_output),
|
|
3038
3310
|
t.observability_impact, t.sequence,
|
|
3311
|
+
t.blocker_source ?? "",
|
|
3312
|
+
t.escalation_pending ?? 0,
|
|
3313
|
+
t.escalation_awaiting_review ?? 0,
|
|
3314
|
+
t.escalation_artifact_path ?? null,
|
|
3315
|
+
t.escalation_override_applied_at ?? null,
|
|
3039
3316
|
);
|
|
3040
3317
|
}
|
|
3041
3318
|
|
|
3042
|
-
// Restore decisions
|
|
3319
|
+
// Restore decisions (ADR-011 P2: include source so escalation decisions survive)
|
|
3043
3320
|
const dcStmt = db.prepare(
|
|
3044
|
-
`INSERT INTO decisions (seq, id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by)
|
|
3045
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
3321
|
+
`INSERT INTO decisions (seq, id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by)
|
|
3322
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
3046
3323
|
);
|
|
3047
3324
|
for (const d of manifest.decisions) {
|
|
3048
|
-
dcStmt.run(d.seq, d.id, d.when_context, d.scope, d.decision, d.choice, d.rationale, d.revisable, d.made_by, d.superseded_by);
|
|
3325
|
+
dcStmt.run(d.seq, d.id, d.when_context, d.scope, d.decision, d.choice, d.rationale, d.revisable, d.made_by, d.source ?? "discussion", d.superseded_by);
|
|
3049
3326
|
}
|
|
3050
3327
|
|
|
3051
3328
|
// Restore verification evidence
|