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