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.
Files changed (606) hide show
  1. package/README.md +186 -149
  2. package/dist/claude-cli-check.d.ts +10 -0
  3. package/dist/claude-cli-check.js +13 -3
  4. package/dist/headless-events.d.ts +1 -1
  5. package/dist/headless-events.js +5 -2
  6. package/dist/headless.js +5 -6
  7. package/dist/loader.js +0 -0
  8. package/dist/onboarding.js +39 -14
  9. package/dist/resources/extensions/ask-user-questions.js +17 -5
  10. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  11. package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
  12. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
  13. package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
  14. package/dist/resources/extensions/gsd/auto/loop.js +67 -4
  15. package/dist/resources/extensions/gsd/auto/phases.js +70 -47
  16. package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
  17. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
  18. package/dist/resources/extensions/gsd/auto/session.js +5 -0
  19. package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
  20. package/dist/resources/extensions/gsd/auto-dashboard.js +15 -7
  21. package/dist/resources/extensions/gsd/auto-dispatch.js +112 -6
  22. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  23. package/dist/resources/extensions/gsd/auto-model-selection.js +10 -2
  24. package/dist/resources/extensions/gsd/auto-post-unit.js +9 -7
  25. package/dist/resources/extensions/gsd/auto-prompts.js +151 -37
  26. package/dist/resources/extensions/gsd/auto-recovery.js +57 -0
  27. package/dist/resources/extensions/gsd/auto-start.js +5 -3
  28. package/dist/resources/extensions/gsd/auto-verification.js +3 -3
  29. package/dist/resources/extensions/gsd/auto-worktree.js +55 -1
  30. package/dist/resources/extensions/gsd/auto.js +50 -25
  31. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
  32. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +22 -4
  33. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
  34. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
  35. package/dist/resources/extensions/gsd/commands/catalog.js +67 -3
  36. package/dist/resources/extensions/gsd/commands/handlers/core.js +6 -0
  37. package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
  38. package/dist/resources/extensions/gsd/commands/handlers/ops.js +16 -0
  39. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
  40. package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
  41. package/dist/resources/extensions/gsd/commands-debug.js +388 -0
  42. package/dist/resources/extensions/gsd/commands-do.js +1 -0
  43. package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
  44. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
  45. package/dist/resources/extensions/gsd/commands-scan.js +94 -0
  46. package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
  47. package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
  48. package/dist/resources/extensions/gsd/db-writer.js +1 -0
  49. package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
  50. package/dist/resources/extensions/gsd/definition-loader.js +7 -0
  51. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  52. package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
  53. package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
  54. package/dist/resources/extensions/gsd/doctor-providers.js +48 -20
  55. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
  56. package/dist/resources/extensions/gsd/doctor.js +7 -1
  57. package/dist/resources/extensions/gsd/error-classifier.js +6 -3
  58. package/dist/resources/extensions/gsd/escalation.js +321 -0
  59. package/dist/resources/extensions/gsd/forensics.js +26 -29
  60. package/dist/resources/extensions/gsd/git-service.js +0 -1
  61. package/dist/resources/extensions/gsd/graph.js +26 -2
  62. package/dist/resources/extensions/gsd/gsd-db.js +254 -29
  63. package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
  64. package/dist/resources/extensions/gsd/health-widget.js +7 -4
  65. package/dist/resources/extensions/gsd/metrics.js +1 -0
  66. package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
  67. package/dist/resources/extensions/gsd/model-router.js +7 -1
  68. package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
  69. package/dist/resources/extensions/gsd/notification-widget.js +24 -39
  70. package/dist/resources/extensions/gsd/notifications.js +4 -0
  71. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
  72. package/dist/resources/extensions/gsd/pre-execution-checks.js +97 -4
  73. package/dist/resources/extensions/gsd/preferences-models.js +1 -0
  74. package/dist/resources/extensions/gsd/preferences-types.js +2 -1
  75. package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
  76. package/dist/resources/extensions/gsd/preferences.js +10 -10
  77. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  78. package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  79. package/dist/resources/extensions/gsd/prompts/execute-task.md +12 -0
  80. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  81. package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  82. package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
  83. package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  84. package/dist/resources/extensions/gsd/run-manager.js +37 -17
  85. package/dist/resources/extensions/gsd/state.js +47 -3
  86. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  87. package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
  88. package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
  89. package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
  90. package/dist/resources/extensions/gsd/uok/flags.js +7 -7
  91. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  92. package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
  93. package/dist/resources/extensions/gsd/workflow-install.js +327 -0
  94. package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
  95. package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
  96. package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
  97. package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  98. package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  99. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  100. package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  101. package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  102. package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  103. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  104. package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  105. package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  106. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  107. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  108. package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  109. package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  110. package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  111. package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  112. package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  113. package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  114. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  115. package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  116. package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
  117. package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  118. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  119. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  120. package/dist/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  121. package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  122. package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
  123. package/dist/resources/extensions/remote-questions/commands.js +380 -0
  124. package/dist/resources/extensions/remote-questions/manager.js +39 -5
  125. package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
  126. package/dist/resources/extensions/shared/interview-ui.js +189 -1
  127. package/dist/resources/extensions/shared/layout-utils.js +17 -0
  128. package/dist/resources/extensions/shared/rtk-shared.js +47 -0
  129. package/dist/resources/extensions/shared/rtk.js +3 -46
  130. package/dist/resources/skills/create-workflow/SKILL.md +33 -6
  131. package/dist/rtk-shared.d.ts +10 -0
  132. package/dist/rtk-shared.js +47 -0
  133. package/dist/rtk.d.ts +2 -6
  134. package/dist/rtk.js +3 -48
  135. package/dist/shared/workspace-types.d.ts +52 -0
  136. package/dist/shared/workspace-types.js +1 -0
  137. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  138. package/dist/update-check.d.ts +10 -0
  139. package/dist/update-check.js +24 -3
  140. package/dist/web/standalone/.next/BUILD_ID +1 -1
  141. package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
  142. package/dist/web/standalone/.next/build-manifest.json +3 -3
  143. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  144. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  145. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  147. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  148. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  149. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  150. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  151. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  152. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  153. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  156. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  157. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  158. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  159. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  160. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  161. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  162. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  163. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/index.html +1 -1
  166. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  167. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  169. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  170. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  171. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  172. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app-paths-manifest.json +6 -6
  174. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  175. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  177. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  179. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  180. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  181. package/dist/web/standalone/.next/static/chunks/2826.02df9631042cc18e.js +9 -0
  182. package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-6c7cda3e318eedb6.js} +1 -1
  183. package/dist/web/standalone/.next/static/css/3e9cdadb4d23b8a4.css +1 -0
  184. package/dist/welcome-screen.js +48 -24
  185. package/dist/wizard.js +2 -2
  186. package/dist/worktree-cli.d.ts +6 -5
  187. package/dist/worktree-cli.js +23 -7
  188. package/package.json +3 -3
  189. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  190. package/packages/native/tsconfig.tsbuildinfo +1 -1
  191. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  192. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
  193. package/packages/pi-ai/dist/models/capability-patches.js +3 -2
  194. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
  195. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
  196. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
  197. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
  198. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
  199. package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
  200. package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
  201. package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
  202. package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
  203. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
  204. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
  205. package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
  206. package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
  207. package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
  208. package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
  209. package/packages/pi-ai/dist/models/generated/groq.js +0 -153
  210. package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
  211. package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
  212. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  213. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  214. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  215. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  216. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  217. package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
  218. package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
  219. package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
  220. package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
  221. package/packages/pi-ai/dist/models.generated.test.js +17 -0
  222. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  223. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
  224. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  225. package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
  226. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  227. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
  228. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
  229. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
  230. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
  231. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
  232. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  233. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
  234. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  235. package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
  236. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  237. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
  238. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
  239. package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
  240. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  241. package/packages/pi-ai/dist/providers/anthropic.js +18 -1
  242. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  243. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  244. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
  245. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  246. package/packages/pi-ai/package.json +1 -1
  247. package/packages/pi-ai/scripts/generate-models.ts +50 -0
  248. package/packages/pi-ai/src/models/capability-patches.ts +5 -2
  249. package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
  250. package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
  251. package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
  252. package/packages/pi-ai/src/models/generated/groq.ts +0 -153
  253. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  254. package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
  255. package/packages/pi-ai/src/models.generated.test.ts +17 -0
  256. package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
  257. package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
  258. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
  259. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
  260. package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
  261. package/packages/pi-ai/src/providers/anthropic.ts +19 -1
  262. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
  263. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  264. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
  265. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
  266. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
  267. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
  268. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
  269. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  270. package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
  271. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  272. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
  273. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
  275. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
  277. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  279. package/packages/pi-coding-agent/dist/core/sdk.js +32 -0
  280. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  281. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
  282. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  283. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  284. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
  285. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  286. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  287. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
  288. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  289. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
  290. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  291. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
  292. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  293. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  294. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  295. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
  296. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  297. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
  298. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  299. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
  300. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  301. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
  302. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  303. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
  304. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  305. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
  306. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
  307. package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
  308. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
  309. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
  310. package/packages/pi-coding-agent/src/core/sdk.ts +41 -0
  311. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
  312. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
  313. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
  314. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
  315. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
  316. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
  317. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
  318. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  319. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  320. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  321. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  322. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  323. package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
  324. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  325. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
  326. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  327. package/pkg/dist/modes/interactive/theme/theme.js +1 -75
  328. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  329. package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
  330. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  331. package/pkg/dist/modes/interactive/theme/themes.js +192 -24
  332. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  333. package/src/resources/extensions/ask-user-questions.ts +24 -6
  334. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  335. package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
  336. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
  337. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
  338. package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
  339. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  340. package/src/resources/extensions/gsd/auto/loop.ts +109 -3
  341. package/src/resources/extensions/gsd/auto/phases.ts +94 -60
  342. package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
  343. package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
  344. package/src/resources/extensions/gsd/auto/session.ts +7 -0
  345. package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
  346. package/src/resources/extensions/gsd/auto-dashboard.ts +21 -4
  347. package/src/resources/extensions/gsd/auto-dispatch.ts +123 -5
  348. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  349. package/src/resources/extensions/gsd/auto-model-selection.ts +13 -2
  350. package/src/resources/extensions/gsd/auto-post-unit.ts +9 -7
  351. package/src/resources/extensions/gsd/auto-prompts.ts +178 -38
  352. package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
  353. package/src/resources/extensions/gsd/auto-start.ts +8 -6
  354. package/src/resources/extensions/gsd/auto-verification.ts +3 -3
  355. package/src/resources/extensions/gsd/auto-worktree.ts +65 -0
  356. package/src/resources/extensions/gsd/auto.ts +53 -28
  357. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
  358. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +22 -4
  359. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
  360. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
  361. package/src/resources/extensions/gsd/commands/catalog.ts +60 -3
  362. package/src/resources/extensions/gsd/commands/handlers/core.ts +6 -0
  363. package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
  364. package/src/resources/extensions/gsd/commands/handlers/ops.ts +16 -0
  365. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
  366. package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
  367. package/src/resources/extensions/gsd/commands-debug.ts +484 -0
  368. package/src/resources/extensions/gsd/commands-do.ts +1 -0
  369. package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
  370. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
  371. package/src/resources/extensions/gsd/commands-scan.ts +125 -0
  372. package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
  373. package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
  374. package/src/resources/extensions/gsd/db-writer.ts +3 -0
  375. package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
  376. package/src/resources/extensions/gsd/definition-loader.ts +7 -0
  377. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  378. package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -1
  379. package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
  380. package/src/resources/extensions/gsd/doctor-providers.ts +52 -22
  381. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
  382. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  383. package/src/resources/extensions/gsd/doctor.ts +7 -1
  384. package/src/resources/extensions/gsd/error-classifier.ts +6 -3
  385. package/src/resources/extensions/gsd/escalation.ts +367 -0
  386. package/src/resources/extensions/gsd/forensics.ts +25 -29
  387. package/src/resources/extensions/gsd/git-service.ts +0 -1
  388. package/src/resources/extensions/gsd/graph.ts +33 -3
  389. package/src/resources/extensions/gsd/gsd-db.ts +306 -29
  390. package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
  391. package/src/resources/extensions/gsd/health-widget.ts +7 -3
  392. package/src/resources/extensions/gsd/metrics.ts +1 -0
  393. package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
  394. package/src/resources/extensions/gsd/model-router.ts +15 -1
  395. package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
  396. package/src/resources/extensions/gsd/notification-widget.ts +25 -43
  397. package/src/resources/extensions/gsd/notifications.ts +6 -0
  398. package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
  399. package/src/resources/extensions/gsd/pre-execution-checks.ts +98 -8
  400. package/src/resources/extensions/gsd/preferences-models.ts +1 -0
  401. package/src/resources/extensions/gsd/preferences-types.ts +10 -2
  402. package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
  403. package/src/resources/extensions/gsd/preferences.ts +10 -10
  404. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  405. package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  406. package/src/resources/extensions/gsd/prompts/execute-task.md +12 -0
  407. package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  408. package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  409. package/src/resources/extensions/gsd/prompts/scan.md +79 -0
  410. package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  411. package/src/resources/extensions/gsd/run-manager.ts +53 -19
  412. package/src/resources/extensions/gsd/state.ts +50 -2
  413. package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  414. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
  415. package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
  416. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
  417. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
  418. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
  419. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
  420. package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
  421. package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
  422. package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
  423. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  424. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  425. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
  426. package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
  427. package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
  428. package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
  429. package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
  430. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
  431. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +62 -18
  432. package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
  433. package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
  434. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
  435. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
  436. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
  437. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
  438. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
  439. package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
  440. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
  441. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
  442. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
  443. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
  444. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
  445. package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
  446. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +171 -1
  447. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  448. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  449. package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
  450. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
  451. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  452. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
  453. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
  454. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
  455. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
  456. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +275 -6
  457. package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
  458. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
  459. package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
  460. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +27 -0
  461. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
  462. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
  463. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +33 -0
  464. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
  465. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
  466. package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
  467. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
  468. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
  469. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
  470. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
  471. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
  472. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
  473. package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
  474. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
  475. package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
  476. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
  477. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
  478. package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
  479. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
  480. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
  481. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
  482. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
  483. package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
  484. package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
  485. package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
  486. package/src/resources/extensions/gsd/types.ts +62 -0
  487. package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
  488. package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
  489. package/src/resources/extensions/gsd/uok/flags.ts +7 -7
  490. package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
  491. package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
  492. package/src/resources/extensions/gsd/workflow-install.ts +423 -0
  493. package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
  494. package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
  495. package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
  496. package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  497. package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  498. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  499. package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  500. package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  501. package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  502. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  503. package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  504. package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  505. package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  506. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  507. package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  508. package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  509. package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  510. package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  511. package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  512. package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  513. package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  514. package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  515. package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
  516. package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  517. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  518. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  519. package/src/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  520. package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  521. package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
  522. package/src/resources/extensions/gsd/workspace-index.ts +9 -4
  523. package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
  524. package/src/resources/extensions/remote-questions/commands.ts +480 -0
  525. package/src/resources/extensions/remote-questions/manager.ts +49 -4
  526. package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
  527. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
  528. package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
  529. package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
  530. package/src/resources/extensions/shared/interview-ui.ts +195 -1
  531. package/src/resources/extensions/shared/layout-utils.ts +26 -0
  532. package/src/resources/extensions/shared/rtk-shared.ts +58 -0
  533. package/src/resources/extensions/shared/rtk.ts +12 -52
  534. package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
  535. package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
  536. package/src/resources/skills/create-workflow/SKILL.md +33 -6
  537. package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
  538. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  539. package/packages/native/dist/ps/types.d.ts +0 -5
  540. package/packages/native/dist/ps/types.js +0 -2
  541. package/packages/native/src/ps/types.ts +0 -5
  542. package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
  543. package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
  544. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
  545. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
  546. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
  547. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
  548. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
  549. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
  550. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
  551. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
  552. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
  553. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
  554. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
  555. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
  556. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
  557. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
  558. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
  559. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
  560. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
  561. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
  562. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
  563. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
  564. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
  565. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
  566. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
  567. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
  568. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
  569. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
  570. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
  571. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
  572. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
  573. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
  574. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
  575. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
  576. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
  577. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
  578. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
  579. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
  580. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
  581. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
  582. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
  583. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
  584. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
  585. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
  586. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
  587. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
  588. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
  589. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
  590. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
  591. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
  592. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
  593. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
  594. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
  595. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
  596. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
  597. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
  598. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
  599. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
  600. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
  601. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
  602. package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
  603. package/packages/pi-ai/oauth.d.ts +0 -1
  604. package/packages/pi-ai/oauth.js +0 -1
  605. /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → jaWw1Jh0TYayjbfOrFe8D}/_buildManifest.js +0 -0
  606. /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 = 15;
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
- }, superseded_by FROM wt.decisions
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
- // Uses INSERT OR REPLACE with a subquery that picks the best status — if the main DB
2235
- // already has a completed slice, keep that status even if the worktree copy is stale.
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
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
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