gsd-pi 2.74.0-dev.2b524c3 → 2.74.0-dev.658744a

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 (506) hide show
  1. package/dist/cli.js +85 -0
  2. package/dist/headless-query.js +4 -1
  3. package/dist/help-text.js +23 -0
  4. package/dist/resources/extensions/gsd/activity-log.js +16 -0
  5. package/dist/resources/extensions/gsd/auto/detect-stuck.js +11 -4
  6. package/dist/resources/extensions/gsd/auto/loop.js +147 -10
  7. package/dist/resources/extensions/gsd/auto/phases.js +209 -10
  8. package/dist/resources/extensions/gsd/auto/session.js +10 -0
  9. package/dist/resources/extensions/gsd/auto-dispatch.js +11 -1
  10. package/dist/resources/extensions/gsd/auto-model-selection.js +54 -8
  11. package/dist/resources/extensions/gsd/auto-post-unit.js +220 -17
  12. package/dist/resources/extensions/gsd/auto-prompts.js +12 -0
  13. package/dist/resources/extensions/gsd/auto-recovery.js +24 -10
  14. package/dist/resources/extensions/gsd/auto-unit-closeout.js +18 -0
  15. package/dist/resources/extensions/gsd/auto-verification.js +100 -2
  16. package/dist/resources/extensions/gsd/auto-worktree.js +2 -0
  17. package/dist/resources/extensions/gsd/auto.js +36 -4
  18. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +5 -3
  19. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +30 -8
  20. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +61 -9
  21. package/dist/resources/extensions/gsd/cache.js +16 -5
  22. package/dist/resources/extensions/gsd/commands/catalog.js +31 -1
  23. package/dist/resources/extensions/gsd/commands/handlers/core.js +5 -1
  24. package/dist/resources/extensions/gsd/commands/handlers/ops.js +25 -0
  25. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +68 -9
  26. package/dist/resources/extensions/gsd/commands-add-tests.js +111 -0
  27. package/dist/resources/extensions/gsd/commands-backlog.js +140 -0
  28. package/dist/resources/extensions/gsd/commands-do.js +79 -0
  29. package/dist/resources/extensions/gsd/commands-extract-learnings.js +225 -0
  30. package/dist/resources/extensions/gsd/commands-maintenance.js +6 -6
  31. package/dist/resources/extensions/gsd/commands-pr-branch.js +180 -0
  32. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +51 -4
  33. package/dist/resources/extensions/gsd/commands-session-report.js +82 -0
  34. package/dist/resources/extensions/gsd/commands-ship.js +187 -0
  35. package/dist/resources/extensions/gsd/db-writer.js +3 -5
  36. package/dist/resources/extensions/gsd/docs/preferences-reference.md +16 -1
  37. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +144 -0
  38. package/dist/resources/extensions/gsd/ecosystem/loader.js +145 -0
  39. package/dist/resources/extensions/gsd/git-service.js +49 -1
  40. package/dist/resources/extensions/gsd/graph-context.js +157 -0
  41. package/dist/resources/extensions/gsd/gsd-db.js +581 -2
  42. package/dist/resources/extensions/gsd/guided-flow.js +31 -6
  43. package/dist/resources/extensions/gsd/index.js +15 -2
  44. package/dist/resources/extensions/gsd/init-wizard.js +1 -0
  45. package/dist/resources/extensions/gsd/journal.js +27 -0
  46. package/dist/resources/extensions/gsd/md-importer.js +3 -4
  47. package/dist/resources/extensions/gsd/memory-store.js +19 -51
  48. package/dist/resources/extensions/gsd/metrics.js +19 -0
  49. package/dist/resources/extensions/gsd/milestone-validation-gates.js +13 -12
  50. package/dist/resources/extensions/gsd/native-git-bridge.js +7 -4
  51. package/dist/resources/extensions/gsd/parallel-orchestrator.js +33 -1
  52. package/dist/resources/extensions/gsd/preferences-models.js +20 -3
  53. package/dist/resources/extensions/gsd/preferences-types.js +2 -0
  54. package/dist/resources/extensions/gsd/preferences-validation.js +118 -2
  55. package/dist/resources/extensions/gsd/preferences.js +31 -0
  56. package/dist/resources/extensions/gsd/prompts/add-tests.md +35 -0
  57. package/dist/resources/extensions/gsd/safety/evidence-collector.js +15 -30
  58. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +12 -2
  59. package/dist/resources/extensions/gsd/state.js +5 -1
  60. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +19 -0
  61. package/dist/resources/extensions/gsd/tools/complete-slice.js +20 -0
  62. package/dist/resources/extensions/gsd/tools/validate-milestone.js +39 -4
  63. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +3 -14
  64. package/dist/resources/extensions/gsd/triage-resolution.js +2 -5
  65. package/dist/resources/extensions/gsd/unit-ownership.js +1 -1
  66. package/dist/resources/extensions/gsd/uok/audit-toggle.js +7 -0
  67. package/dist/resources/extensions/gsd/uok/audit.js +40 -0
  68. package/dist/resources/extensions/gsd/uok/contracts.js +1 -0
  69. package/dist/resources/extensions/gsd/uok/execution-graph.js +179 -0
  70. package/dist/resources/extensions/gsd/uok/flags.js +29 -0
  71. package/dist/resources/extensions/gsd/uok/gate-runner.js +109 -0
  72. package/dist/resources/extensions/gsd/uok/gitops.js +53 -0
  73. package/dist/resources/extensions/gsd/uok/kernel.js +80 -0
  74. package/dist/resources/extensions/gsd/uok/loop-adapter.js +133 -0
  75. package/dist/resources/extensions/gsd/uok/model-policy.js +66 -0
  76. package/dist/resources/extensions/gsd/uok/plan-v2.js +132 -0
  77. package/dist/resources/extensions/gsd/workflow-logger.js +22 -0
  78. package/dist/resources/extensions/gsd/workflow-manifest.js +8 -69
  79. package/dist/resources/extensions/gsd/workflow-migration.js +21 -22
  80. package/dist/resources/extensions/gsd/workflow-projections.js +4 -1
  81. package/dist/resources/extensions/gsd/workflow-reconcile.js +14 -11
  82. package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
  83. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  84. package/dist/web/standalone/.next/BUILD_ID +1 -1
  85. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  86. package/dist/web/standalone/.next/build-manifest.json +2 -2
  87. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  88. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  89. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  97. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  100. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  103. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  104. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  109. package/dist/web/standalone/.next/server/app/index.html +1 -1
  110. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  111. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  112. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  117. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  118. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  120. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  121. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  122. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  123. package/package.json +3 -2
  124. package/packages/daemon/package.json +2 -2
  125. package/packages/mcp-server/dist/index.d.ts +3 -0
  126. package/packages/mcp-server/dist/index.d.ts.map +1 -1
  127. package/packages/mcp-server/dist/index.js +3 -0
  128. package/packages/mcp-server/dist/index.js.map +1 -1
  129. package/packages/mcp-server/dist/readers/graph.d.ts +87 -0
  130. package/packages/mcp-server/dist/readers/graph.d.ts.map +1 -0
  131. package/packages/mcp-server/dist/readers/graph.js +655 -0
  132. package/packages/mcp-server/dist/readers/graph.js.map +1 -0
  133. package/packages/mcp-server/dist/readers/index.d.ts +2 -0
  134. package/packages/mcp-server/dist/readers/index.d.ts.map +1 -1
  135. package/packages/mcp-server/dist/readers/index.js +1 -0
  136. package/packages/mcp-server/dist/readers/index.js.map +1 -1
  137. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  138. package/packages/mcp-server/dist/server.js +65 -0
  139. package/packages/mcp-server/dist/server.js.map +1 -1
  140. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  141. package/packages/mcp-server/dist/workflow-tools.js +88 -6
  142. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  143. package/packages/mcp-server/package.json +2 -2
  144. package/packages/mcp-server/src/index.ts +15 -0
  145. package/packages/mcp-server/src/readers/graph.test.ts +604 -0
  146. package/packages/mcp-server/src/readers/graph.ts +855 -0
  147. package/packages/mcp-server/src/readers/index.ts +12 -0
  148. package/packages/mcp-server/src/server.ts +83 -0
  149. package/packages/mcp-server/src/workflow-tools.ts +95 -10
  150. package/packages/mcp-server/tsconfig.json +1 -0
  151. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -0
  152. package/packages/native/package.json +2 -2
  153. package/packages/native/tsconfig.tsbuildinfo +1 -0
  154. package/packages/pi-agent-core/package.json +1 -1
  155. package/packages/pi-agent-core/tsconfig.json +1 -0
  156. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -0
  157. package/packages/pi-ai/dist/index.d.ts +1 -9
  158. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  159. package/packages/pi-ai/dist/index.js +1 -9
  160. package/packages/pi-ai/dist/index.js.map +1 -1
  161. package/packages/pi-ai/dist/models/capability-patches.d.ts +19 -0
  162. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -0
  163. package/packages/pi-ai/dist/models/capability-patches.js +36 -0
  164. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -0
  165. package/packages/pi-ai/dist/{models.custom.d.ts → models/custom.d.ts} +1 -1
  166. package/packages/pi-ai/dist/models/custom.d.ts.map +1 -0
  167. package/packages/pi-ai/dist/{models.custom.js → models/custom.js} +4 -4
  168. package/packages/pi-ai/dist/models/custom.js.map +1 -0
  169. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +1482 -0
  170. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -0
  171. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +1484 -0
  172. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -0
  173. package/packages/pi-ai/dist/models/generated/anthropic.d.ts +377 -0
  174. package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -0
  175. package/packages/pi-ai/dist/models/generated/anthropic.js +379 -0
  176. package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -0
  177. package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts +700 -0
  178. package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts.map +1 -0
  179. package/packages/pi-ai/dist/models/generated/azure-openai-responses.js +702 -0
  180. package/packages/pi-ai/dist/models/generated/azure-openai-responses.js.map +1 -0
  181. package/packages/pi-ai/dist/models/generated/cerebras.d.ts +71 -0
  182. package/packages/pi-ai/dist/models/generated/cerebras.d.ts.map +1 -0
  183. package/packages/pi-ai/dist/models/generated/cerebras.js +73 -0
  184. package/packages/pi-ai/dist/models/generated/cerebras.js.map +1 -0
  185. package/packages/pi-ai/dist/models/generated/github-copilot.d.ts +590 -0
  186. package/packages/pi-ai/dist/models/generated/github-copilot.d.ts.map +1 -0
  187. package/packages/pi-ai/dist/models/generated/github-copilot.js +444 -0
  188. package/packages/pi-ai/dist/models/generated/github-copilot.js.map +1 -0
  189. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +156 -0
  190. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -0
  191. package/packages/pi-ai/dist/models/generated/google-antigravity.js +158 -0
  192. package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -0
  193. package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts +105 -0
  194. package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts.map +1 -0
  195. package/packages/pi-ai/dist/models/generated/google-gemini-cli.js +107 -0
  196. package/packages/pi-ai/dist/models/generated/google-gemini-cli.js.map +1 -0
  197. package/packages/pi-ai/dist/models/generated/google-vertex.d.ts +207 -0
  198. package/packages/pi-ai/dist/models/generated/google-vertex.d.ts.map +1 -0
  199. package/packages/pi-ai/dist/models/generated/google-vertex.js +209 -0
  200. package/packages/pi-ai/dist/models/generated/google-vertex.js.map +1 -0
  201. package/packages/pi-ai/dist/models/generated/google.d.ts +462 -0
  202. package/packages/pi-ai/dist/models/generated/google.d.ts.map +1 -0
  203. package/packages/pi-ai/dist/models/generated/google.js +464 -0
  204. package/packages/pi-ai/dist/models/generated/google.js.map +1 -0
  205. package/packages/pi-ai/dist/models/generated/groq.d.ts +309 -0
  206. package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -0
  207. package/packages/pi-ai/dist/models/generated/groq.js +311 -0
  208. package/packages/pi-ai/dist/models/generated/groq.js.map +1 -0
  209. package/packages/pi-ai/dist/models/generated/huggingface.d.ts +383 -0
  210. package/packages/pi-ai/dist/models/generated/huggingface.d.ts.map +1 -0
  211. package/packages/pi-ai/dist/models/generated/huggingface.js +347 -0
  212. package/packages/pi-ai/dist/models/generated/huggingface.js.map +1 -0
  213. package/packages/pi-ai/dist/{models.generated.d.ts → models/generated/index.d.ts} +1 -1
  214. package/packages/pi-ai/dist/{models.generated.d.ts.map → models/generated/index.d.ts.map} +1 -1
  215. package/packages/pi-ai/dist/models/generated/index.js +51 -0
  216. package/packages/pi-ai/dist/models/generated/index.js.map +1 -0
  217. package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts +37 -0
  218. package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts.map +1 -0
  219. package/packages/pi-ai/dist/models/generated/kimi-coding.js +39 -0
  220. package/packages/pi-ai/dist/models/generated/kimi-coding.js.map +1 -0
  221. package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts +105 -0
  222. package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts.map +1 -0
  223. package/packages/pi-ai/dist/models/generated/minimax-cn.js +107 -0
  224. package/packages/pi-ai/dist/models/generated/minimax-cn.js.map +1 -0
  225. package/packages/pi-ai/dist/models/generated/minimax.d.ts +105 -0
  226. package/packages/pi-ai/dist/models/generated/minimax.d.ts.map +1 -0
  227. package/packages/pi-ai/dist/models/generated/minimax.js +107 -0
  228. package/packages/pi-ai/dist/models/generated/minimax.js.map +1 -0
  229. package/packages/pi-ai/dist/models/generated/mistral.d.ts +445 -0
  230. package/packages/pi-ai/dist/models/generated/mistral.d.ts.map +1 -0
  231. package/packages/pi-ai/dist/models/generated/mistral.js +447 -0
  232. package/packages/pi-ai/dist/models/generated/mistral.js.map +1 -0
  233. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +139 -0
  234. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -0
  235. package/packages/pi-ai/dist/models/generated/openai-codex.js +141 -0
  236. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -0
  237. package/packages/pi-ai/dist/models/generated/openai.d.ts +700 -0
  238. package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -0
  239. package/packages/pi-ai/dist/models/generated/openai.js +702 -0
  240. package/packages/pi-ai/dist/models/generated/openai.js.map +1 -0
  241. package/packages/pi-ai/dist/models/generated/opencode-go.d.ts +122 -0
  242. package/packages/pi-ai/dist/models/generated/opencode-go.d.ts.map +1 -0
  243. package/packages/pi-ai/dist/models/generated/opencode-go.js +124 -0
  244. package/packages/pi-ai/dist/models/generated/opencode-go.js.map +1 -0
  245. package/packages/pi-ai/dist/models/generated/opencode.d.ts +530 -0
  246. package/packages/pi-ai/dist/models/generated/opencode.d.ts.map +1 -0
  247. package/packages/pi-ai/dist/models/generated/opencode.js +532 -0
  248. package/packages/pi-ai/dist/models/generated/opencode.js.map +1 -0
  249. package/packages/pi-ai/dist/models/generated/openrouter.d.ts +4270 -0
  250. package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -0
  251. package/packages/pi-ai/dist/models/generated/openrouter.js +4272 -0
  252. package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -0
  253. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts +2604 -0
  254. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts.map +1 -0
  255. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js +2606 -0
  256. package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js.map +1 -0
  257. package/packages/pi-ai/dist/models/generated/xai.d.ts +411 -0
  258. package/packages/pi-ai/dist/models/generated/xai.d.ts.map +1 -0
  259. package/packages/pi-ai/dist/models/generated/xai.js +413 -0
  260. package/packages/pi-ai/dist/models/generated/xai.js.map +1 -0
  261. package/packages/pi-ai/dist/models/generated/zai.d.ts +276 -0
  262. package/packages/pi-ai/dist/models/generated/zai.d.ts.map +1 -0
  263. package/packages/pi-ai/dist/models/generated/zai.js +239 -0
  264. package/packages/pi-ai/dist/models/generated/zai.js.map +1 -0
  265. package/packages/pi-ai/dist/models/index.d.ts +27 -0
  266. package/packages/pi-ai/dist/models/index.d.ts.map +1 -0
  267. package/packages/pi-ai/dist/models/index.js +80 -0
  268. package/packages/pi-ai/dist/models/index.js.map +1 -0
  269. package/packages/pi-ai/dist/models.d.ts +1 -36
  270. package/packages/pi-ai/dist/models.d.ts.map +1 -1
  271. package/packages/pi-ai/dist/models.generated.test.js +1 -2
  272. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  273. package/packages/pi-ai/dist/models.js +3 -112
  274. package/packages/pi-ai/dist/models.js.map +1 -1
  275. package/packages/pi-ai/dist/models.test.js +6 -5
  276. package/packages/pi-ai/dist/models.test.js.map +1 -1
  277. package/packages/pi-ai/package.json +1 -1
  278. package/packages/pi-ai/scripts/generate-models.ts +74 -40
  279. package/packages/pi-ai/src/index.ts +1 -9
  280. package/packages/pi-ai/src/models/capability-patches.ts +40 -0
  281. package/packages/pi-ai/src/{models.custom.ts → models/custom.ts} +4 -4
  282. package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +1486 -0
  283. package/packages/pi-ai/src/models/generated/anthropic.ts +381 -0
  284. package/packages/pi-ai/src/models/generated/azure-openai-responses.ts +704 -0
  285. package/packages/pi-ai/src/models/generated/cerebras.ts +75 -0
  286. package/packages/pi-ai/src/models/generated/github-copilot.ts +446 -0
  287. package/packages/pi-ai/src/models/generated/google-antigravity.ts +160 -0
  288. package/packages/pi-ai/src/models/generated/google-gemini-cli.ts +109 -0
  289. package/packages/pi-ai/src/models/generated/google-vertex.ts +211 -0
  290. package/packages/pi-ai/src/models/generated/google.ts +466 -0
  291. package/packages/pi-ai/src/models/generated/groq.ts +313 -0
  292. package/packages/pi-ai/src/models/generated/huggingface.ts +349 -0
  293. package/packages/pi-ai/src/models/generated/index.ts +52 -0
  294. package/packages/pi-ai/src/models/generated/kimi-coding.ts +41 -0
  295. package/packages/pi-ai/src/models/generated/minimax-cn.ts +109 -0
  296. package/packages/pi-ai/src/models/generated/minimax.ts +109 -0
  297. package/packages/pi-ai/src/models/generated/mistral.ts +449 -0
  298. package/packages/pi-ai/src/models/generated/openai-codex.ts +143 -0
  299. package/packages/pi-ai/src/models/generated/openai.ts +704 -0
  300. package/packages/pi-ai/src/models/generated/opencode-go.ts +126 -0
  301. package/packages/pi-ai/src/models/generated/opencode.ts +534 -0
  302. package/packages/pi-ai/src/models/generated/openrouter.ts +4274 -0
  303. package/packages/pi-ai/src/models/generated/vercel-ai-gateway.ts +2608 -0
  304. package/packages/pi-ai/src/models/generated/xai.ts +415 -0
  305. package/packages/pi-ai/src/models/generated/zai.ts +241 -0
  306. package/packages/pi-ai/src/models/index.ts +106 -0
  307. package/packages/pi-ai/src/models.generated.test.ts +1 -2
  308. package/packages/pi-ai/src/models.test.ts +6 -5
  309. package/packages/pi-ai/src/models.ts +3 -153
  310. package/packages/pi-ai/tsconfig.json +1 -0
  311. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -0
  312. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  313. package/packages/pi-coding-agent/dist/core/agent-session.js +8 -2
  314. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  315. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +472 -0
  316. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  317. package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.d.ts +2 -0
  318. package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.d.ts.map +1 -0
  319. package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.js +52 -0
  320. package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.js.map +1 -0
  321. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  322. package/packages/pi-coding-agent/dist/core/model-registry.js +2 -2
  323. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  324. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +11 -0
  325. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  326. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +1 -0
  327. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  328. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +23 -9
  329. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  330. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +11 -0
  331. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -0
  332. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +47 -0
  333. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -0
  334. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +8 -0
  335. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +68 -8
  337. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  338. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  339. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +22 -22
  340. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  341. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  342. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +232 -18
  343. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  344. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts +2 -0
  345. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts.map +1 -0
  346. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +38 -0
  347. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -0
  348. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +14 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  350. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +70 -6
  351. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  352. package/packages/pi-coding-agent/src/core/agent-session.ts +12 -6
  353. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +612 -0
  354. package/packages/pi-coding-agent/src/core/model-registry-env-fallback.test.ts +59 -0
  355. package/packages/pi-coding-agent/src/core/model-registry.ts +2 -1
  356. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +19 -0
  357. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +25 -10
  358. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +67 -0
  359. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +83 -7
  360. package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +23 -26
  361. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +298 -41
  362. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +44 -0
  363. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +92 -6
  364. package/packages/pi-coding-agent/src/types/ambient-modules.d.ts +69 -0
  365. package/packages/pi-coding-agent/tsconfig.json +3 -2
  366. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -0
  367. package/packages/pi-tui/package.json +1 -1
  368. package/packages/pi-tui/tsconfig.json +1 -0
  369. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -0
  370. package/packages/rpc-client/package.json +1 -1
  371. package/packages/rpc-client/tsconfig.json +1 -0
  372. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -0
  373. package/src/resources/extensions/gsd/activity-log.ts +21 -0
  374. package/src/resources/extensions/gsd/auto/detect-stuck.ts +12 -4
  375. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -0
  376. package/src/resources/extensions/gsd/auto/loop.ts +159 -10
  377. package/src/resources/extensions/gsd/auto/phases.ts +261 -10
  378. package/src/resources/extensions/gsd/auto/session.ts +10 -0
  379. package/src/resources/extensions/gsd/auto-dispatch.ts +16 -6
  380. package/src/resources/extensions/gsd/auto-model-selection.ts +69 -8
  381. package/src/resources/extensions/gsd/auto-post-unit.ts +238 -18
  382. package/src/resources/extensions/gsd/auto-prompts.ts +13 -0
  383. package/src/resources/extensions/gsd/auto-recovery.ts +29 -9
  384. package/src/resources/extensions/gsd/auto-unit-closeout.ts +25 -1
  385. package/src/resources/extensions/gsd/auto-verification.ts +129 -2
  386. package/src/resources/extensions/gsd/auto-worktree.ts +1 -0
  387. package/src/resources/extensions/gsd/auto.ts +41 -2
  388. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +5 -3
  389. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +38 -8
  390. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +72 -8
  391. package/src/resources/extensions/gsd/cache.ts +16 -5
  392. package/src/resources/extensions/gsd/commands/catalog.ts +31 -1
  393. package/src/resources/extensions/gsd/commands/handlers/core.ts +5 -1
  394. package/src/resources/extensions/gsd/commands/handlers/ops.ts +25 -0
  395. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +74 -9
  396. package/src/resources/extensions/gsd/commands-add-tests.ts +137 -0
  397. package/src/resources/extensions/gsd/commands-backlog.ts +182 -0
  398. package/src/resources/extensions/gsd/commands-do.ts +109 -0
  399. package/src/resources/extensions/gsd/commands-extract-learnings.ts +304 -0
  400. package/src/resources/extensions/gsd/commands-maintenance.ts +6 -6
  401. package/src/resources/extensions/gsd/commands-pr-branch.ts +234 -0
  402. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +58 -4
  403. package/src/resources/extensions/gsd/commands-session-report.ts +101 -0
  404. package/src/resources/extensions/gsd/commands-ship.ts +219 -0
  405. package/src/resources/extensions/gsd/db-writer.ts +3 -5
  406. package/src/resources/extensions/gsd/docs/preferences-reference.md +16 -1
  407. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +228 -0
  408. package/src/resources/extensions/gsd/ecosystem/loader.ts +201 -0
  409. package/src/resources/extensions/gsd/git-service.ts +68 -0
  410. package/src/resources/extensions/gsd/graph-context.ts +212 -0
  411. package/src/resources/extensions/gsd/gsd-db.ts +788 -3
  412. package/src/resources/extensions/gsd/guided-flow.ts +36 -2
  413. package/src/resources/extensions/gsd/index.ts +18 -2
  414. package/src/resources/extensions/gsd/init-wizard.ts +3 -2
  415. package/src/resources/extensions/gsd/journal.ts +30 -0
  416. package/src/resources/extensions/gsd/md-importer.ts +3 -5
  417. package/src/resources/extensions/gsd/memory-store.ts +31 -62
  418. package/src/resources/extensions/gsd/metrics.ts +26 -0
  419. package/src/resources/extensions/gsd/milestone-validation-gates.ts +13 -14
  420. package/src/resources/extensions/gsd/native-git-bridge.ts +11 -12
  421. package/src/resources/extensions/gsd/parallel-orchestrator.ts +40 -1
  422. package/src/resources/extensions/gsd/preferences-models.ts +20 -3
  423. package/src/resources/extensions/gsd/preferences-types.ts +38 -0
  424. package/src/resources/extensions/gsd/preferences-validation.ts +117 -2
  425. package/src/resources/extensions/gsd/preferences.ts +34 -0
  426. package/src/resources/extensions/gsd/prompts/add-tests.md +35 -0
  427. package/src/resources/extensions/gsd/safety/evidence-collector.ts +15 -31
  428. package/src/resources/extensions/gsd/session-lock.ts +14 -2
  429. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +20 -1
  430. package/src/resources/extensions/gsd/state.ts +9 -2
  431. package/src/resources/extensions/gsd/templates/PREFERENCES.md +19 -0
  432. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +177 -0
  433. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +7 -3
  434. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +20 -0
  435. package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +7 -3
  436. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +272 -0
  437. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +117 -0
  438. package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +6 -2
  439. package/src/resources/extensions/gsd/tests/commands-backlog.test.ts +158 -0
  440. package/src/resources/extensions/gsd/tests/commands-do.test.ts +127 -0
  441. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +340 -0
  442. package/src/resources/extensions/gsd/tests/commands-pr-branch.test.ts +68 -0
  443. package/src/resources/extensions/gsd/tests/commands-session-report.test.ts +82 -0
  444. package/src/resources/extensions/gsd/tests/commands-ship.test.ts +71 -0
  445. package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +14 -0
  446. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  447. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  448. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +154 -0
  449. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +10 -7
  450. package/src/resources/extensions/gsd/tests/graph-context.test.ts +337 -0
  451. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
  452. package/src/resources/extensions/gsd/tests/health-widget.test.ts +1 -1
  453. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +71 -4
  454. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -2
  455. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -3
  456. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +140 -0
  457. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
  458. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +2 -1
  459. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +40 -1
  460. package/src/resources/extensions/gsd/tests/preferences.test.ts +145 -0
  461. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +57 -2
  462. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +1 -1
  463. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +180 -0
  464. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -5
  465. package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +101 -0
  466. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +85 -0
  467. package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +69 -0
  468. package/src/resources/extensions/gsd/tests/uok-flags.test.ts +39 -0
  469. package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +70 -0
  470. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +85 -0
  471. package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +35 -0
  472. package/src/resources/extensions/gsd/tests/uok-model-policy.test.ts +89 -0
  473. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +167 -0
  474. package/src/resources/extensions/gsd/tests/uok-preferences.test.ts +42 -0
  475. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +39 -0
  476. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +223 -0
  477. package/src/resources/extensions/gsd/tools/complete-slice.ts +26 -0
  478. package/src/resources/extensions/gsd/tools/validate-milestone.ts +48 -3
  479. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +3 -11
  480. package/src/resources/extensions/gsd/triage-resolution.ts +2 -7
  481. package/src/resources/extensions/gsd/types.ts +14 -1
  482. package/src/resources/extensions/gsd/unit-ownership.ts +2 -2
  483. package/src/resources/extensions/gsd/uok/audit-toggle.ts +9 -0
  484. package/src/resources/extensions/gsd/uok/audit.ts +51 -0
  485. package/src/resources/extensions/gsd/uok/contracts.ts +135 -0
  486. package/src/resources/extensions/gsd/uok/execution-graph.ts +241 -0
  487. package/src/resources/extensions/gsd/uok/flags.ts +45 -0
  488. package/src/resources/extensions/gsd/uok/gate-runner.ts +146 -0
  489. package/src/resources/extensions/gsd/uok/gitops.ts +75 -0
  490. package/src/resources/extensions/gsd/uok/kernel.ts +105 -0
  491. package/src/resources/extensions/gsd/uok/loop-adapter.ts +162 -0
  492. package/src/resources/extensions/gsd/uok/model-policy.ts +112 -0
  493. package/src/resources/extensions/gsd/uok/plan-v2.ts +156 -0
  494. package/src/resources/extensions/gsd/workflow-logger.ts +27 -1
  495. package/src/resources/extensions/gsd/workflow-manifest.ts +9 -104
  496. package/src/resources/extensions/gsd/workflow-migration.ts +21 -29
  497. package/src/resources/extensions/gsd/workflow-projections.ts +8 -1
  498. package/src/resources/extensions/gsd/workflow-reconcile.ts +15 -15
  499. package/src/resources/extensions/ttsr/ttsr-manager.ts +10 -5
  500. package/packages/pi-ai/dist/models.custom.d.ts.map +0 -1
  501. package/packages/pi-ai/dist/models.custom.js.map +0 -1
  502. package/packages/pi-ai/dist/models.generated.js +0 -14343
  503. package/packages/pi-ai/dist/models.generated.js.map +0 -1
  504. package/packages/pi-ai/src/models.generated.ts +0 -14345
  505. /package/dist/web/standalone/.next/static/{YzIEI9sxJy4t5xgClF08g → Es_JWCfFZjIvYZShmjyye}/_buildManifest.js +0 -0
  506. /package/dist/web/standalone/.next/static/{YzIEI9sxJy4t5xgClF08g → Es_JWCfFZjIvYZShmjyye}/_ssgManifest.js +0 -0
@@ -31,6 +31,8 @@ import { isInfrastructureError, isTransientCooldownError, getCooldownRetryAfterM
31
31
  import { resolveEngine } from "../engine-resolver.js";
32
32
  import { logWarning } from "../workflow-logger.js";
33
33
  import { gsdRoot } from "../paths.js";
34
+ import { resolveUokFlags } from "../uok/flags.js";
35
+ import { scheduleSidecarQueue } from "../uok/execution-graph.js";
34
36
  import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
35
37
  import { join } from "node:path";
36
38
 
@@ -128,6 +130,43 @@ export async function autoLoop(
128
130
  const flowId = randomUUID();
129
131
  let seqCounter = 0;
130
132
  const nextSeq = () => ++seqCounter;
133
+ const turnId = randomUUID();
134
+ s.currentTraceId = flowId;
135
+ s.currentTurnId = turnId;
136
+ const turnStartedAt = new Date().toISOString();
137
+ let observedUnitType: string | undefined;
138
+ let observedUnitId: string | undefined;
139
+ let turnFinished = false;
140
+ const finishTurn = (
141
+ status: "completed" | "failed" | "paused" | "stopped" | "skipped" | "retry",
142
+ failureClass: "none" | "unknown" | "manual-attention" | "timeout" | "execution" | "closeout" | "git" = "none",
143
+ error?: string,
144
+ ): void => {
145
+ if (turnFinished) return;
146
+ turnFinished = true;
147
+ deps.uokObserver?.onTurnResult({
148
+ traceId: flowId,
149
+ turnId,
150
+ iteration,
151
+ unitType: observedUnitType,
152
+ unitId: observedUnitId,
153
+ status,
154
+ failureClass,
155
+ phaseResults: [],
156
+ error,
157
+ startedAt: turnStartedAt,
158
+ finishedAt: new Date().toISOString(),
159
+ });
160
+ s.currentTraceId = null;
161
+ s.currentTurnId = null;
162
+ };
163
+ deps.uokObserver?.onTurnStart({
164
+ traceId: flowId,
165
+ turnId,
166
+ iteration,
167
+ basePath: s.basePath,
168
+ startedAt: turnStartedAt,
169
+ });
131
170
 
132
171
  if (iteration > MAX_LOOP_ITERATIONS) {
133
172
  debugLog("autoLoop", {
@@ -140,6 +179,7 @@ export async function autoLoop(
140
179
  pi,
141
180
  `Safety: loop exceeded ${MAX_LOOP_ITERATIONS} iterations — possible runaway`,
142
181
  );
182
+ finishTurn("stopped", "manual-attention", "max-iterations");
143
183
  break;
144
184
  }
145
185
 
@@ -157,22 +197,32 @@ export async function autoLoop(
157
197
  `Stopping gracefully to prevent OOM kill after ${iteration} iterations. ` +
158
198
  `Resume with /gsd auto to continue from where you left off.`,
159
199
  );
200
+ finishTurn("stopped", "timeout", "memory-pressure");
160
201
  break;
161
202
  }
162
203
  }
163
204
 
164
205
  if (!s.cmdCtx) {
165
206
  debugLog("autoLoop", { phase: "exit", reason: "no-cmdCtx" });
207
+ finishTurn("stopped", "manual-attention", "missing-command-context");
166
208
  break;
167
209
  }
168
210
 
169
211
  try {
170
212
  // ── Blanket try/catch: one bad iteration must not kill the session
171
213
  const prefs = deps.loadEffectiveGSDPreferences()?.preferences;
214
+ const uokFlags = resolveUokFlags(prefs);
172
215
 
173
216
  // ── Check sidecar queue before deriveState ──
174
217
  let sidecarItem: SidecarItem | undefined;
175
218
  if (s.sidecarQueue.length > 0) {
219
+ if (uokFlags.executionGraph && s.sidecarQueue.length > 1) {
220
+ try {
221
+ s.sidecarQueue = await scheduleSidecarQueue(s.sidecarQueue);
222
+ } catch (err) {
223
+ logWarning("dispatch", `sidecar queue scheduling failed: ${err instanceof Error ? err.message : String(err)}`);
224
+ }
225
+ }
176
226
  sidecarItem = s.sidecarQueue.shift()!;
177
227
  debugLog("autoLoop", {
178
228
  phase: "sidecar-dequeue",
@@ -256,27 +306,53 @@ export async function autoLoop(
256
306
  isRetry: false,
257
307
  previousTier: undefined,
258
308
  };
309
+ observedUnitType = iterData.unitType;
310
+ observedUnitId = iterData.unitId;
259
311
 
260
312
  // ── Progress widget (mirrors dev path in runDispatch) ──
261
313
  deps.updateProgressWidget(ctx, iterData.unitType, iterData.unitId, iterData.state);
262
314
 
263
315
  // ── Guards (shared with dev path) ──
264
316
  const guardsResult = await runGuards(ic, s.currentMilestoneId ?? "workflow");
265
- if (guardsResult.action === "break") break;
317
+ deps.uokObserver?.onPhaseResult("guard", guardsResult.action, {
318
+ unitType: iterData.unitType,
319
+ unitId: iterData.unitId,
320
+ });
321
+ if (guardsResult.action === "break") {
322
+ finishTurn("stopped", "manual-attention", "guard-break");
323
+ break;
324
+ }
266
325
 
267
326
  // ── Unit execution (shared with dev path) ──
268
327
  const unitPhaseResult = await runUnitPhase(ic, iterData, loopState);
269
- if (unitPhaseResult.action === "break") break;
328
+ deps.uokObserver?.onPhaseResult("unit", unitPhaseResult.action, {
329
+ unitType: iterData.unitType,
330
+ unitId: iterData.unitId,
331
+ });
332
+ if (unitPhaseResult.action === "break") {
333
+ finishTurn("stopped", "execution", "unit-break");
334
+ break;
335
+ }
270
336
 
271
337
  // ── Verify first, then reconcile (only mark complete on pass) ──
272
338
  debugLog("autoLoop", { phase: "custom-engine-verify", iteration, unitId: iterData.unitId });
273
339
  const verifyResult = await policy.verify(iterData.unitType, iterData.unitId, { basePath: s.basePath });
274
340
  if (verifyResult === "pause") {
275
341
  await deps.pauseAuto(ctx, pi);
342
+ deps.uokObserver?.onPhaseResult("custom-engine", "pause", {
343
+ unitType: iterData.unitType,
344
+ unitId: iterData.unitId,
345
+ });
346
+ finishTurn("paused", "manual-attention", "custom-engine-verify-pause");
276
347
  break;
277
348
  }
278
349
  if (verifyResult === "retry") {
279
350
  debugLog("autoLoop", { phase: "custom-engine-verify-retry", iteration, unitId: iterData.unitId });
351
+ deps.uokObserver?.onPhaseResult("custom-engine", "retry", {
352
+ unitType: iterData.unitType,
353
+ unitId: iterData.unitId,
354
+ });
355
+ finishTurn("retry");
280
356
  continue;
281
357
  }
282
358
 
@@ -299,36 +375,77 @@ export async function autoLoop(
299
375
 
300
376
  if (reconcileResult.outcome === "milestone-complete") {
301
377
  await deps.stopAuto(ctx, pi, "Workflow complete");
378
+ deps.uokObserver?.onPhaseResult("custom-engine", "milestone-complete", {
379
+ unitType: iterData.unitType,
380
+ unitId: iterData.unitId,
381
+ });
382
+ finishTurn("completed");
302
383
  break;
303
384
  }
304
385
  if (reconcileResult.outcome === "pause") {
305
386
  await deps.pauseAuto(ctx, pi);
387
+ deps.uokObserver?.onPhaseResult("custom-engine", "pause", {
388
+ unitType: iterData.unitType,
389
+ unitId: iterData.unitId,
390
+ });
391
+ finishTurn("paused", "manual-attention");
306
392
  break;
307
393
  }
308
394
  if (reconcileResult.outcome === "stop") {
309
395
  await deps.stopAuto(ctx, pi, reconcileResult.reason ?? "Engine stopped");
396
+ deps.uokObserver?.onPhaseResult("custom-engine", "stop", {
397
+ unitType: iterData.unitType,
398
+ unitId: iterData.unitId,
399
+ reason: reconcileResult.reason,
400
+ });
401
+ finishTurn("stopped", "manual-attention", reconcileResult.reason);
310
402
  break;
311
403
  }
404
+ deps.uokObserver?.onPhaseResult("custom-engine", "continue", {
405
+ unitType: iterData.unitType,
406
+ unitId: iterData.unitId,
407
+ });
408
+ finishTurn("completed");
312
409
  continue;
313
410
  }
314
411
 
315
412
  if (!sidecarItem) {
316
413
  // ── Phase 1: Pre-dispatch ─────────────────────────────────────────
317
414
  const preDispatchResult = await runPreDispatch(ic, loopState);
318
- if (preDispatchResult.action === "break") break;
319
- if (preDispatchResult.action === "continue") continue;
415
+ deps.uokObserver?.onPhaseResult("pre-dispatch", preDispatchResult.action);
416
+ if (preDispatchResult.action === "break") {
417
+ finishTurn("stopped", "manual-attention", "pre-dispatch-break");
418
+ break;
419
+ }
420
+ if (preDispatchResult.action === "continue") {
421
+ finishTurn("skipped");
422
+ continue;
423
+ }
320
424
 
321
425
  const preData = preDispatchResult.data;
322
426
 
323
427
  // ── Phase 2: Guards ───────────────────────────────────────────────
324
428
  const guardsResult = await runGuards(ic, preData.mid);
325
- if (guardsResult.action === "break") break;
429
+ deps.uokObserver?.onPhaseResult("guard", guardsResult.action);
430
+ if (guardsResult.action === "break") {
431
+ finishTurn("stopped", "manual-attention", "guard-break");
432
+ break;
433
+ }
326
434
 
327
435
  // ── Phase 3: Dispatch ─────────────────────────────────────────────
328
436
  const dispatchResult = await runDispatch(ic, preData, loopState);
329
- if (dispatchResult.action === "break") break;
330
- if (dispatchResult.action === "continue") continue;
437
+ deps.uokObserver?.onPhaseResult("dispatch", dispatchResult.action);
438
+ if (dispatchResult.action === "break") {
439
+ finishTurn("stopped", "manual-attention", "dispatch-break");
440
+ break;
441
+ }
442
+ if (dispatchResult.action === "continue") {
443
+ finishTurn("skipped");
444
+ continue;
445
+ }
331
446
  iterData = dispatchResult.data;
447
+ observedUnitType = iterData.unitType;
448
+ observedUnitId = iterData.unitId;
332
449
  } else {
333
450
  // ── Sidecar path: use values from the sidecar item directly ──
334
451
  const sidecarState = await deps.deriveState(s.basePath);
@@ -343,22 +460,50 @@ export async function autoLoop(
343
460
  midTitle: sidecarState.activeMilestone?.title,
344
461
  isRetry: false, previousTier: undefined,
345
462
  };
463
+ observedUnitType = iterData.unitType;
464
+ observedUnitId = iterData.unitId;
465
+ deps.uokObserver?.onPhaseResult("dispatch", "sidecar", {
466
+ unitType: iterData.unitType,
467
+ unitId: iterData.unitId,
468
+ sidecarKind: sidecarItem.kind,
469
+ });
346
470
  }
347
471
 
348
472
  const unitPhaseResult = await runUnitPhase(ic, iterData, loopState, sidecarItem);
349
- if (unitPhaseResult.action === "break") break;
473
+ deps.uokObserver?.onPhaseResult("unit", unitPhaseResult.action, {
474
+ unitType: iterData.unitType,
475
+ unitId: iterData.unitId,
476
+ });
477
+ if (unitPhaseResult.action === "break") {
478
+ finishTurn("stopped", "execution", "unit-break");
479
+ break;
480
+ }
350
481
 
351
482
  // ── Phase 5: Finalize ───────────────────────────────────────────────
352
483
 
353
484
  const finalizeResult = await runFinalize(ic, iterData, loopState, sidecarItem);
354
- if (finalizeResult.action === "break") break;
355
- if (finalizeResult.action === "continue") continue;
485
+ deps.uokObserver?.onPhaseResult("finalize", finalizeResult.action, {
486
+ unitType: iterData.unitType,
487
+ unitId: iterData.unitId,
488
+ });
489
+ if (finalizeResult.action === "break") {
490
+ const finalizeFailureClass = finalizeResult.reason === "git-closeout-failure"
491
+ ? "git"
492
+ : "closeout";
493
+ finishTurn("stopped", finalizeFailureClass, "finalize-break");
494
+ break;
495
+ }
496
+ if (finalizeResult.action === "continue") {
497
+ finishTurn("retry");
498
+ continue;
499
+ }
356
500
 
357
501
  consecutiveErrors = 0; // Iteration completed successfully
358
502
  consecutiveCooldowns = 0;
359
503
  recentErrorMessages.length = 0;
360
504
  deps.emitJournalEvent({ ts: new Date().toISOString(), flowId, seq: nextSeq(), eventType: "iteration-end", data: { iteration } });
361
505
  debugLog("autoLoop", { phase: "iteration-complete", iteration });
506
+ finishTurn("completed");
362
507
  } catch (loopErr) {
363
508
  // ── Blanket catch: absorb unexpected exceptions, apply graduated recovery ──
364
509
  const msg = loopErr instanceof Error ? loopErr.message : String(loopErr);
@@ -388,6 +533,7 @@ export async function autoLoop(
388
533
  pi,
389
534
  `Infrastructure error (${infraCode}): not recoverable by retry`,
390
535
  );
536
+ finishTurn("failed", "execution", msg);
391
537
  break;
392
538
  }
393
539
 
@@ -429,6 +575,7 @@ export async function autoLoop(
429
575
  "warning",
430
576
  );
431
577
  await new Promise(resolve => setTimeout(resolve, waitMs));
578
+ finishTurn("retry", "timeout", msg);
432
579
  continue; // Retry iteration without incrementing consecutiveErrors
433
580
  }
434
581
 
@@ -455,6 +602,7 @@ export async function autoLoop(
455
602
  pi,
456
603
  `${consecutiveErrors} consecutive iteration failures`,
457
604
  );
605
+ finishTurn("failed", "execution", msg);
458
606
  break;
459
607
  } else if (consecutiveErrors === 2) {
460
608
  // 2nd consecutive: try invalidating caches + re-deriving state
@@ -467,6 +615,7 @@ export async function autoLoop(
467
615
  // 1st error: log and retry — transient failures happen
468
616
  ctx.ui.notify(`Iteration error: ${msg}. Retrying.`, "warning");
469
617
  }
618
+ finishTurn("retry", "execution", msg);
470
619
  }
471
620
  }
472
621