gsd-pi 2.79.0-dev.ece5fd8ba → 2.80.0-dev.c5f2443b3

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 (502) hide show
  1. package/dist/resources/.managed-resources-content-hash +1 -1
  2. package/dist/resources/extensions/github-sync/templates.js +55 -70
  3. package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
  4. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  5. package/dist/resources/extensions/gsd/auto/loop.js +359 -523
  6. package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
  7. package/dist/resources/extensions/gsd/auto/phases.js +55 -6
  8. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  9. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  10. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  11. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  12. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  13. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  16. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  17. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  18. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  19. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  20. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  21. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  22. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  23. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  24. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  28. package/dist/resources/extensions/gsd/auto-dashboard.js +3 -0
  29. package/dist/resources/extensions/gsd/auto-prompts.js +168 -3
  30. package/dist/resources/extensions/gsd/auto-recovery.js +45 -52
  31. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  32. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  33. package/dist/resources/extensions/gsd/auto-worktree.js +87 -38
  34. package/dist/resources/extensions/gsd/auto.js +159 -2
  35. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +9 -1
  36. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  37. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -5
  38. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  39. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  40. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  41. package/dist/resources/extensions/gsd/custom-workflow-engine.js +4 -0
  42. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  43. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  44. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  45. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  46. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  47. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  48. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  49. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  50. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  51. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  52. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  53. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  54. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  55. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  56. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  57. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  58. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  59. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  60. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  61. package/dist/resources/extensions/gsd/escalation.js +2 -0
  62. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  63. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  64. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  65. package/dist/resources/extensions/gsd/model-router.js +9 -6
  66. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  67. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  68. package/dist/resources/extensions/gsd/pr-evidence.js +76 -0
  69. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  70. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  71. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  72. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  73. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  74. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  75. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  76. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  77. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  78. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  79. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  80. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  81. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  82. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  83. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  84. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  85. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  86. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  87. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  88. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  89. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  90. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  91. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  92. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  93. package/dist/resources/extensions/gsd/state.js +4 -0
  94. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  95. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  96. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +6 -1
  97. package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
  98. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  99. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  100. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  101. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  102. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  103. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  104. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  105. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  106. package/dist/web/standalone/.next/BUILD_ID +1 -1
  107. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  108. package/dist/web/standalone/.next/build-manifest.json +2 -2
  109. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  110. package/dist/web/standalone/.next/required-server-files.json +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  112. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  133. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  137. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  139. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  141. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  145. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  155. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  169. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  175. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  185. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  187. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  189. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  191. package/dist/web/standalone/.next/server/app/index.html +1 -1
  192. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  193. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  194. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  195. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  196. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  197. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  199. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  200. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  201. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  203. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  204. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  205. package/dist/web/standalone/package.json +1 -0
  206. package/dist/web/standalone/server.js +1 -1
  207. package/package.json +9 -2
  208. package/packages/contracts/dist/index.d.ts +3 -0
  209. package/packages/contracts/dist/index.d.ts.map +1 -0
  210. package/packages/contracts/dist/index.js +5 -0
  211. package/packages/contracts/dist/index.js.map +1 -0
  212. package/packages/contracts/dist/rpc.d.ts +549 -0
  213. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  214. package/packages/contracts/dist/rpc.js +53 -0
  215. package/packages/contracts/dist/rpc.js.map +1 -0
  216. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  217. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  218. package/packages/contracts/dist/rpc.test.js +47 -0
  219. package/packages/contracts/dist/rpc.test.js.map +1 -0
  220. package/packages/contracts/dist/workflow.d.ts +180 -0
  221. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  222. package/packages/contracts/dist/workflow.js +201 -0
  223. package/packages/contracts/dist/workflow.js.map +1 -0
  224. package/packages/contracts/package.json +39 -0
  225. package/packages/contracts/src/index.ts +5 -0
  226. package/packages/contracts/src/rpc.test.ts +72 -0
  227. package/packages/contracts/src/rpc.ts +286 -0
  228. package/packages/contracts/src/workflow.ts +213 -0
  229. package/packages/contracts/tsconfig.json +25 -0
  230. package/packages/contracts/tsconfig.tsbuildinfo +1 -0
  231. package/packages/daemon/package.json +3 -2
  232. package/packages/daemon/src/event-bridge.test.ts +2 -1
  233. package/packages/daemon/src/event-bridge.ts +1 -1
  234. package/packages/daemon/src/event-formatter.test.ts +1 -2
  235. package/packages/daemon/src/event-formatter.ts +1 -2
  236. package/packages/daemon/src/session-manager.ts +2 -2
  237. package/packages/daemon/src/types.ts +3 -18
  238. package/packages/mcp-server/dist/server.d.ts +13 -0
  239. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  240. package/packages/mcp-server/dist/server.js +77 -0
  241. package/packages/mcp-server/dist/server.js.map +1 -1
  242. package/packages/mcp-server/dist/session-manager.js +1 -1
  243. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  244. package/packages/mcp-server/dist/types.d.ts +3 -11
  245. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  246. package/packages/mcp-server/dist/types.js.map +1 -1
  247. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  248. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  249. package/packages/mcp-server/dist/workflow-tools.js +2 -40
  250. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  251. package/packages/mcp-server/package.json +3 -2
  252. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  253. package/packages/mcp-server/src/server.ts +99 -1
  254. package/packages/mcp-server/src/session-manager.ts +2 -2
  255. package/packages/mcp-server/src/types.ts +7 -18
  256. package/packages/mcp-server/src/workflow-tools.ts +2 -40
  257. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  258. package/packages/native/package.json +1 -1
  259. package/packages/pi-agent-core/package.json +1 -1
  260. package/packages/pi-ai/package.json +1 -1
  261. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +14 -0
  262. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  264. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  265. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  266. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -1
  267. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  268. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +9 -1
  269. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  270. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +31 -10
  271. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  272. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  273. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  275. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  276. package/packages/pi-coding-agent/package.json +2 -1
  277. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +23 -2
  278. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  279. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +6 -1
  280. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -9
  281. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  282. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  283. package/packages/pi-tui/dist/tui.d.ts +1 -0
  284. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  285. package/packages/pi-tui/dist/tui.js +8 -2
  286. package/packages/pi-tui/dist/tui.js.map +1 -1
  287. package/packages/pi-tui/package.json +1 -1
  288. package/packages/pi-tui/src/tui.ts +8 -2
  289. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  290. package/packages/rpc-client/README.md +3 -3
  291. package/packages/rpc-client/dist/index.d.ts +1 -1
  292. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  293. package/packages/rpc-client/dist/index.js.map +1 -1
  294. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  295. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  296. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  297. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  298. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  299. package/packages/rpc-client/dist/rpc-types.js +3 -11
  300. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  301. package/packages/rpc-client/package.json +4 -1
  302. package/packages/rpc-client/src/index.ts +1 -1
  303. package/packages/rpc-client/src/rpc-client.ts +3 -6
  304. package/packages/rpc-client/src/rpc-types.ts +3 -398
  305. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  306. package/pkg/package.json +1 -1
  307. package/src/resources/extensions/github-sync/templates.ts +59 -84
  308. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  309. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  310. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  311. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  312. package/src/resources/extensions/gsd/auto/loop.ts +411 -598
  313. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  314. package/src/resources/extensions/gsd/auto/phases.ts +82 -8
  315. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  316. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  317. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  318. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  319. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  320. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  321. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  322. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  323. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  324. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  325. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  326. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  327. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  328. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  329. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  330. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  331. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  332. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  333. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  334. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  335. package/src/resources/extensions/gsd/auto-dashboard.ts +4 -0
  336. package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
  337. package/src/resources/extensions/gsd/auto-recovery.ts +42 -50
  338. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  339. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  340. package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
  341. package/src/resources/extensions/gsd/auto.ts +167 -1
  342. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +14 -1
  343. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  344. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +13 -5
  345. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  346. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  347. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  348. package/src/resources/extensions/gsd/custom-workflow-engine.ts +6 -0
  349. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  350. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  351. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  352. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  353. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  354. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  355. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  356. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  357. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  358. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  359. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  360. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  361. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  362. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  363. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  364. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  365. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  366. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  367. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  368. package/src/resources/extensions/gsd/escalation.ts +3 -1
  369. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  370. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  371. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  372. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  373. package/src/resources/extensions/gsd/model-router.ts +10 -6
  374. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  375. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  376. package/src/resources/extensions/gsd/pr-evidence.ts +124 -0
  377. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  378. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  379. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  380. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  381. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  382. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  383. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  384. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  385. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  386. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  387. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  388. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  389. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  390. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  391. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  392. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  393. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  394. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  395. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  396. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  397. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  398. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  399. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  400. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  401. package/src/resources/extensions/gsd/state.ts +6 -3
  402. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +32 -0
  403. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +65 -0
  404. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +38 -0
  405. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  406. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  407. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  408. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  409. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  410. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  411. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  412. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  413. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  414. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +38 -0
  415. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  416. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +12 -0
  417. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  418. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  419. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  420. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  421. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  422. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  423. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  424. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  425. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  426. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  427. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  428. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  429. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  430. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  431. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  432. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  433. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  434. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  435. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  436. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  437. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  438. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  439. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  440. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  441. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  442. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  443. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  444. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  445. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  446. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  447. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  448. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  449. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  450. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  451. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  452. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  453. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  454. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  455. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  456. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  457. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  458. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  459. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  460. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  461. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  462. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  463. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +6 -6
  464. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  465. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  466. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  467. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  468. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  469. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  470. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  471. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  472. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  473. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  474. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  475. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  476. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  477. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  478. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  479. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  480. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  481. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  482. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  483. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +32 -0
  484. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  485. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  486. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  487. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  488. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  489. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  490. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +6 -1
  491. package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
  492. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  493. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  494. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  495. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  496. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  497. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  498. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  499. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  500. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  501. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → bQDK5_LtkGVS64AirQgQG}/_buildManifest.js +0 -0
  502. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → bQDK5_LtkGVS64AirQgQG}/_ssgManifest.js +0 -0
@@ -0,0 +1,46 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Sidecar queue scheduling and dequeue adapter for auto-mode loop.
3
+
4
+ import type { SidecarItem } from "./session.js";
5
+
6
+ export interface SidecarDequeuePayload extends Record<string, unknown> {
7
+ kind: SidecarItem["kind"];
8
+ unitType: string;
9
+ unitId: string;
10
+ }
11
+
12
+ export interface DequeueSidecarItemInput {
13
+ queue: SidecarItem[];
14
+ executionGraphEnabled: boolean;
15
+ scheduleQueue: (queue: SidecarItem[]) => Promise<SidecarItem[]>;
16
+ warnSchedulingFailure: (message: string) => void;
17
+ logDequeue: (payload: SidecarDequeuePayload) => void;
18
+ emitDequeue: (payload: SidecarDequeuePayload) => void;
19
+ }
20
+
21
+ export async function dequeueSidecarItem(
22
+ input: DequeueSidecarItemInput,
23
+ ): Promise<SidecarItem | undefined> {
24
+ if (input.queue.length === 0) return undefined;
25
+
26
+ if (input.executionGraphEnabled && input.queue.length > 1) {
27
+ try {
28
+ const scheduledQueue = await input.scheduleQueue(input.queue);
29
+ input.queue.splice(0, input.queue.length, ...scheduledQueue);
30
+ } catch (err) {
31
+ input.warnSchedulingFailure(err instanceof Error ? err.message : String(err));
32
+ }
33
+ }
34
+
35
+ const sidecarItem = input.queue.shift();
36
+ if (!sidecarItem) return undefined;
37
+
38
+ const payload = {
39
+ kind: sidecarItem.kind,
40
+ unitType: sidecarItem.unitType,
41
+ unitId: sidecarItem.unitId,
42
+ };
43
+ input.logDequeue(payload);
44
+ input.emitDequeue(payload);
45
+ return sidecarItem;
46
+ }
@@ -0,0 +1,68 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Thin adapter for workflow turn observer reporting.
3
+
4
+ import type {
5
+ FailureClass,
6
+ TurnStatus,
7
+ UokTurnObserver,
8
+ } from "../uok/contracts.js";
9
+
10
+ export interface WorkflowTurnReporterInput {
11
+ observer?: UokTurnObserver;
12
+ traceId: string;
13
+ turnId: string;
14
+ iteration: number;
15
+ basePath: string;
16
+ startedAt: string;
17
+ clearCurrentTurn: () => void;
18
+ now?: () => string;
19
+ }
20
+
21
+ export interface WorkflowTurnFinishInput {
22
+ status: TurnStatus;
23
+ failureClass?: FailureClass;
24
+ error?: string;
25
+ unitType?: string;
26
+ unitId?: string;
27
+ }
28
+
29
+ export interface WorkflowTurnReporter {
30
+ start(): void;
31
+ finish(input: WorkflowTurnFinishInput): void;
32
+ }
33
+
34
+ export function createWorkflowTurnReporter(input: WorkflowTurnReporterInput): WorkflowTurnReporter {
35
+ let finished = false;
36
+ const now = input.now ?? (() => new Date().toISOString());
37
+
38
+ return {
39
+ start(): void {
40
+ input.observer?.onTurnStart({
41
+ traceId: input.traceId,
42
+ turnId: input.turnId,
43
+ iteration: input.iteration,
44
+ basePath: input.basePath,
45
+ startedAt: input.startedAt,
46
+ });
47
+ },
48
+
49
+ finish(finishInput: WorkflowTurnFinishInput): void {
50
+ if (finished) return;
51
+ finished = true;
52
+ input.observer?.onTurnResult({
53
+ traceId: input.traceId,
54
+ turnId: input.turnId,
55
+ iteration: input.iteration,
56
+ unitType: finishInput.unitType,
57
+ unitId: finishInput.unitId,
58
+ status: finishInput.status,
59
+ failureClass: finishInput.failureClass ?? "none",
60
+ phaseResults: [],
61
+ error: finishInput.error,
62
+ startedAt: input.startedAt,
63
+ finishedAt: now(),
64
+ });
65
+ input.clearCurrentTurn();
66
+ },
67
+ };
68
+ }
@@ -0,0 +1,89 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Unit dispatch contract adapter for auto-mode loop.
3
+
4
+ import type { SidecarItem } from "./session.js";
5
+ import type {
6
+ IterationContext,
7
+ IterationData,
8
+ LoopState,
9
+ PhaseResult,
10
+ } from "./types.js";
11
+ import { ExecutionGraphScheduler } from "../uok/execution-graph.js";
12
+ import type { UokGraphNode } from "../uok/contracts.js";
13
+ import { runUnitPhase } from "./phases.js";
14
+ import { decideDispatchNodeKind } from "./workflow-kernel.js";
15
+
16
+ export type DispatchContract = "legacy-direct" | "uok-scheduler";
17
+
18
+ export type UnitPhaseResult = PhaseResult<{
19
+ unitStartedAt?: number;
20
+ requestDispatchedAt?: number;
21
+ }>;
22
+
23
+ export interface UnitDispatchScheduler {
24
+ registerHandler(
25
+ kind: UokGraphNode["kind"],
26
+ handler: (node: UokGraphNode) => Promise<void>,
27
+ ): void;
28
+ run(nodes: UokGraphNode[], options: { parallel: false; maxWorkers: 1 }): Promise<unknown>;
29
+ }
30
+
31
+ export interface RunUnitPhaseViaContractDeps {
32
+ runUnitPhase: (
33
+ ic: IterationContext,
34
+ iterData: IterationData,
35
+ loopState: LoopState,
36
+ sidecarItem?: SidecarItem,
37
+ ) => Promise<UnitPhaseResult>;
38
+ createScheduler: () => UnitDispatchScheduler;
39
+ }
40
+
41
+ export async function runUnitPhaseViaContract(
42
+ dispatchContract: DispatchContract,
43
+ ic: IterationContext,
44
+ iterData: IterationData,
45
+ loopState: LoopState,
46
+ sidecarItem: SidecarItem | undefined,
47
+ deps: RunUnitPhaseViaContractDeps,
48
+ ): Promise<UnitPhaseResult> {
49
+ if (dispatchContract === "legacy-direct") {
50
+ return deps.runUnitPhase(ic, iterData, loopState, sidecarItem);
51
+ }
52
+
53
+ const scheduler = deps.createScheduler();
54
+ let outcome: UnitPhaseResult | null = null;
55
+ const executeNode = async (): Promise<void> => {
56
+ outcome = await deps.runUnitPhase(ic, iterData, loopState, sidecarItem);
57
+ };
58
+ const kinds: UokGraphNode["kind"][] = [
59
+ "unit",
60
+ "hook",
61
+ "subagent",
62
+ "team-worker",
63
+ "verification",
64
+ "reprocess",
65
+ ];
66
+ for (const kind of kinds) scheduler.registerHandler(kind, executeNode);
67
+
68
+ const nodeId = `dispatch:${ic.iteration}:${iterData.unitType}:${iterData.unitId}`;
69
+ await scheduler.run([
70
+ {
71
+ id: nodeId,
72
+ kind: decideDispatchNodeKind(iterData.unitType, sidecarItem?.kind),
73
+ dependsOn: [],
74
+ metadata: {
75
+ unitType: iterData.unitType,
76
+ unitId: iterData.unitId,
77
+ },
78
+ },
79
+ ], { parallel: false, maxWorkers: 1 });
80
+
81
+ return outcome ?? { action: "break", reason: "scheduler-dispatch-missing-result" };
82
+ }
83
+
84
+ export function createExecutionGraphUnitDispatchDeps(): RunUnitPhaseViaContractDeps {
85
+ return {
86
+ runUnitPhase: async (...args) => runUnitPhase(...args),
87
+ createScheduler: () => new ExecutionGraphScheduler(),
88
+ };
89
+ }
@@ -0,0 +1,38 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Best-effort worker heartbeat adapter for auto-mode loop.
3
+
4
+ export interface WorkerHeartbeatSession {
5
+ workerId?: string | null;
6
+ currentMilestoneId?: string | null;
7
+ milestoneLeaseToken?: number | null;
8
+ }
9
+
10
+ export interface MaintainWorkerHeartbeatDeps {
11
+ heartbeatAutoWorker: (workerId: string) => void;
12
+ refreshMilestoneLease: (
13
+ workerId: string,
14
+ milestoneId: string,
15
+ fencingToken: number,
16
+ ) => boolean;
17
+ logHeartbeatFailure: (err: unknown) => void;
18
+ }
19
+
20
+ export function maintainWorkerHeartbeat(
21
+ session: WorkerHeartbeatSession,
22
+ deps: MaintainWorkerHeartbeatDeps,
23
+ ): void {
24
+ if (!session.workerId) return;
25
+
26
+ try {
27
+ deps.heartbeatAutoWorker(session.workerId);
28
+ if (session.currentMilestoneId && session.milestoneLeaseToken) {
29
+ deps.refreshMilestoneLease(
30
+ session.workerId,
31
+ session.currentMilestoneId,
32
+ session.milestoneLeaseToken,
33
+ );
34
+ }
35
+ } catch (err) {
36
+ deps.logHeartbeatFailure(err);
37
+ }
38
+ }
@@ -583,6 +583,10 @@ export function updateProgressWidget(
583
583
  : state.activeSlice;
584
584
  const task = state.activeTask;
585
585
 
586
+ if (mid) {
587
+ updateSliceProgressCache(accessors.getBasePath(), mid.id, slice?.id);
588
+ }
589
+
586
590
  // Cache git branch at widget creation time (not per render)
587
591
  let cachedBranch: string | null = null;
588
592
  try { cachedBranch = getCurrentBranch(accessors.getBasePath()); } catch (err) { /* not in git repo */
@@ -275,6 +275,171 @@ export async function inlineFileSmart(
275
275
  return `### ${label}\nSource: \`${relPath}\`\n\n${truncated}`;
276
276
  }
277
277
 
278
+ function inlineCompactTemplate(name: "plan" | "task-summary" | "slice-summary", label: string): string {
279
+ const compact: Record<typeof name, string> = {
280
+ plan: [
281
+ "# {{sliceId}}: {{sliceTitle}}",
282
+ "",
283
+ "**Goal:** {{goal}}",
284
+ "**Demo:** {{demo}}",
285
+ "",
286
+ "## Must-Haves",
287
+ "- {{mustHave}}",
288
+ "",
289
+ "## Threat Surface",
290
+ "- Abuse: {{abuseScenarios}}",
291
+ "- Data exposure: {{sensitiveDataAccessible}}",
292
+ "- Input trust: {{untrustedInput}}",
293
+ "",
294
+ "## Requirement Impact",
295
+ "- Requirements touched: {{requirementIds}}",
296
+ "- Re-verify: {{whatMustBeRetested}}",
297
+ "- Decisions revisited: {{decisionIds}}",
298
+ "",
299
+ "## Proof Level",
300
+ "- This slice proves: {{contract | integration | operational | final-assembly}}",
301
+ "- Real runtime required: {{yes/no}}",
302
+ "- Human/UAT required: {{yes/no}}",
303
+ "",
304
+ "## Verification",
305
+ "- {{testFileOrCommand}}",
306
+ "",
307
+ "## Observability / Diagnostics",
308
+ "- Runtime signals: {{signalOrNone}}",
309
+ "- Inspection surfaces: {{surfaceOrNone}}",
310
+ "- Failure visibility: {{failureSignalOrNone}}",
311
+ "- Redaction constraints: {{secretOrPiiBoundaryOrNone}}",
312
+ "",
313
+ "## Integration Closure",
314
+ "- Upstream surfaces consumed: {{filesModulesContracts}}",
315
+ "- New wiring introduced: {{entrypointOrNone}}",
316
+ "- Remaining end-to-end work: {{listOrNothing}}",
317
+ "",
318
+ "## Tasks",
319
+ "- [ ] **T01: {{taskTitle}}** `est:{{estimate}}`",
320
+ " - Why: {{whyThisTaskExists}}",
321
+ " - Files: `{{filePath}}`",
322
+ " - Do: {{specificImplementationStepsAndConstraints}}",
323
+ " - Verify: {{testCommandOrRuntimeCheck}}",
324
+ " - Done when: {{measurableAcceptanceCondition}}",
325
+ "",
326
+ "## Files Likely Touched",
327
+ "- `{{filePath}}`",
328
+ ].join("\n"),
329
+ "task-summary": [
330
+ "---",
331
+ "id: {{taskId}}",
332
+ "parent: {{sliceId}}",
333
+ "milestone: {{milestoneId}}",
334
+ "provides: [{{whatThisTaskProvides}}]",
335
+ "key_files: [{{filePath}}]",
336
+ "key_decisions: [{{decision}}]",
337
+ "patterns_established: [{{pattern}}]",
338
+ "observability_surfaces: [{{diagnosticOrNone}}]",
339
+ "duration: {{duration}}",
340
+ "verification_result: passed",
341
+ "completed_at: {{date}}",
342
+ "blocker_discovered: false",
343
+ "---",
344
+ "",
345
+ "# {{taskId}}: {{taskTitle}}",
346
+ "**{{oneLiner}}**",
347
+ "",
348
+ "## What Happened",
349
+ "{{narrative}}",
350
+ "",
351
+ "## Verification",
352
+ "{{whatWasVerifiedAndHow}}",
353
+ "",
354
+ "## Verification Evidence",
355
+ "| # | Command | Exit Code | Verdict | Duration |",
356
+ "|---|---------|-----------|---------|----------|",
357
+ "| {{row}} | {{command}} | {{exitCode}} | {{verdict}} | {{duration}} |",
358
+ "",
359
+ "## Diagnostics",
360
+ "{{diagnosticsOrNone}}",
361
+ "",
362
+ "## Deviations",
363
+ "{{deviationsFromPlan_OR_none}}",
364
+ "",
365
+ "## Known Issues",
366
+ "{{issuesDiscoveredButNotFixed_OR_none}}",
367
+ "",
368
+ "## Files Created/Modified",
369
+ "- `{{filePath}}` - {{description}}",
370
+ ].join("\n"),
371
+ "slice-summary": [
372
+ "---",
373
+ "id: {{sliceId}}",
374
+ "parent: {{milestoneId}}",
375
+ "milestone: {{milestoneId}}",
376
+ "provides: [{{whatThisSliceProvides}}]",
377
+ "requires: []",
378
+ "affects: []",
379
+ "key_files: [{{filePath}}]",
380
+ "key_decisions: [{{decision}}]",
381
+ "patterns_established: [{{pattern}}]",
382
+ "observability_surfaces: [{{diagnosticOrNone}}]",
383
+ "drill_down_paths: [{{pathToTaskSummary}}]",
384
+ "duration: {{duration}}",
385
+ "verification_result: passed",
386
+ "completed_at: {{date}}",
387
+ "---",
388
+ "",
389
+ "# {{sliceId}}: {{sliceTitle}}",
390
+ "**{{oneLiner}}**",
391
+ "",
392
+ "## What Happened",
393
+ "{{narrative}}",
394
+ "",
395
+ "## Verification",
396
+ "{{whatWasVerifiedAcrossAllTasks}}",
397
+ "",
398
+ "## Requirements Advanced",
399
+ "- {{requirementId}} - {{howThisSliceAdvancedIt}}",
400
+ "",
401
+ "## Requirements Validated",
402
+ "- {{requirementId}} - {{whatProofNowMakesItValidated}}",
403
+ "",
404
+ "## New Requirements Surfaced",
405
+ "- {{newRequirementOr_none}}",
406
+ "",
407
+ "## Requirements Invalidated or Re-scoped",
408
+ "- {{requirementIdOr_none}} - {{whatChanged}}",
409
+ "",
410
+ "## Operational Readiness",
411
+ "- Health signal: {{healthSignalOrNA}}",
412
+ "- Failure signal: {{failureSignalOrNA}}",
413
+ "- Recovery: {{recoveryOrNA}}",
414
+ "- Monitoring gaps: {{gapsOrNone}}",
415
+ "",
416
+ "## Deviations",
417
+ "{{deviationsFromPlan_OR_none}}",
418
+ "",
419
+ "## Known Limitations",
420
+ "{{whatDoesntWorkYet_OR_whatWasDeferredToLaterSlices}}",
421
+ "",
422
+ "## Follow-ups",
423
+ "{{workDeferredOrDiscoveredDuringExecution_OR_none}}",
424
+ "",
425
+ "## Files Created/Modified",
426
+ "- `{{filePath}}` - {{description}}",
427
+ "",
428
+ "## Forward Intelligence",
429
+ "### What the next slice should know",
430
+ "- {{insightThatWouldHelpDownstreamWork}}",
431
+ "### What's fragile",
432
+ "- {{fragileAreaOrThinImplementation}} - {{whyItMatters}}",
433
+ "### Authoritative diagnostics",
434
+ "- {{whereAFutureAgentShouldLookFirst}} - {{whyThisSignalIsTrustworthy}}",
435
+ "### What assumptions changed",
436
+ "- {{originalAssumption}} - {{whatActuallyHappened}}",
437
+ ].join("\n"),
438
+ };
439
+
440
+ return `${compact[name]}\n\n### Output Template: ${label}\nSource: \`templates/${name}.md\``;
441
+ }
442
+
278
443
  /**
279
444
  * Compact slice-summary excerpt for milestone-level closers (#4780).
280
445
  *
@@ -1717,7 +1882,7 @@ async function renderSlicePrompt(options: {
1717
1882
  const graphBlock = await inlineGraphSubgraph(base, `${sid} ${sTitle}`, { budget: 3000 });
1718
1883
  if (graphBlock) inlined.push(graphBlock);
1719
1884
 
1720
- inlined.push(inlineTemplate("plan", "Slice Plan"));
1885
+ inlined.push(level === "minimal" ? inlineCompactTemplate("plan", "Slice Plan") : inlineTemplate("plan", "Slice Plan"));
1721
1886
  if (level === "full") {
1722
1887
  inlined.push(inlineTemplate("task-plan", "Task Plan"));
1723
1888
  }
@@ -1945,7 +2110,7 @@ export async function buildExecuteTaskPrompt(
1945
2110
  const graphBlockET = await inlineGraphSubgraph(base, `${tid} ${tTitle}`, { budget: 2000 });
1946
2111
 
1947
2112
  const inlinedTemplates = inlineLevel === "minimal"
1948
- ? inlineTemplate("task-summary", "Task Summary")
2113
+ ? inlineCompactTemplate("task-summary", "Task Summary")
1949
2114
  : [
1950
2115
  inlineTemplate("task-summary", "Task Summary"),
1951
2116
  inlineTemplate("decisions", "Decisions"),
@@ -2091,7 +2256,9 @@ export async function buildCompleteSlicePrompt(
2091
2256
  return blocks.length > 0 ? blocks.join("\n\n---\n\n") : null;
2092
2257
  }
2093
2258
  case "templates": {
2094
- const parts = [inlineTemplate("slice-summary", "Slice Summary")];
2259
+ const parts = [inlineLevel === "minimal"
2260
+ ? inlineCompactTemplate("slice-summary", "Slice Summary")
2261
+ : inlineTemplate("slice-summary", "Slice Summary")];
2095
2262
  if (inlineLevel !== "minimal") {
2096
2263
  parts.push(inlineTemplate("uat", "UAT"));
2097
2264
  }
@@ -14,7 +14,7 @@ import { appendEvent } from "./workflow-events.js";
14
14
  import { atomicWriteSync } from "./atomic-write.js";
15
15
  import { clearParseCache } from "./files.js";
16
16
  import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
17
- import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone } from "./gsd-db.js";
17
+ import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone, refreshOpenDatabaseFromDisk } from "./gsd-db.js";
18
18
  import { isValidationTerminal } from "./state.js";
19
19
  import { getErrorMessage } from "./error-utils.js";
20
20
  import { logWarning, logError } from "./workflow-logger.js";
@@ -588,65 +588,32 @@ export function verifyExpectedArtifact(
588
588
  }
589
589
  }
590
590
 
591
- // plan-slice must produce a plan with actual task entries, not just a scaffold.
592
- // The plan file may exist from a prior discussion/context step with only headings
593
- // but no tasks. Without this check the artifact is considered "complete" and the
594
- // unit gets skipped — but deriveState still returns phase:"planning" because the
595
- // plan has no tasks, creating an infinite skip loop (#699).
596
- if (unitType === "plan-slice") {
597
- const planContent = readFileSync(absPath, "utf-8");
598
- // Accept checkbox-style (- [x] **T01: ...) or heading-style (### T01 -- / ### T01: / ### T01 —)
599
- const hasCheckboxTask = /^- \[[xX ]\] \*\*T\d+:/m.test(planContent);
600
- const hasHeadingTask = /^#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
601
- if (!hasCheckboxTask && !hasHeadingTask) {
602
- logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
603
- return false;
604
- }
605
- }
606
-
607
- // execute-task: DB status is authoritative. Fall back to checked-checkbox
608
- // detection when the DB is unavailable (unmigrated projects), or when the
609
- // disk artifacts already reflect completion but the DB replay is one beat
610
- // behind the completion write.
611
- if (unitType === "execute-task") {
612
- const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
613
- if (mid && sid && tid) {
614
- const dbTask = getTask(mid, sid, tid);
615
- if (dbTask) {
616
- if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
617
- return false;
618
- }
619
- } else if (!isDbAvailable()) {
620
- // LEGACY: Pre-migration fallback for projects without DB.
621
- // Require a CHECKED checkbox — a bare heading or unchecked checkbox
622
- // does not prove gsd_complete_task ran. Summary file on disk alone
623
- // is not sufficient evidence (could be a rogue write) (#3607).
624
- if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) return false;
625
- } else {
626
- // DB available but task row not found — completion tool never ran (#3607)
627
- return false;
628
- }
629
- }
630
- }
631
-
632
- // plan-slice must also produce individual task plan files for every task listed
633
- // in the slice plan. Without this check, a plan-slice that wrote S{sid}-PLAN.md
634
- // but omitted T{tid}-PLAN.md files would be marked complete, causing execute-task
635
- // to dispatch with a missing task plan (see issue #739).
591
+ // plan-slice verification is DB-primary. The slice plan is a projection, so
592
+ // DB task rows prove the slice was planned even if the rendered markdown no
593
+ // longer uses legacy checkbox/heading syntax.
636
594
  if (unitType === "plan-slice") {
637
595
  const { milestone: mid, slice: sid } = parseUnitId(unitId);
638
596
  if (mid && sid) {
639
597
  try {
640
- // DB primary path — get task IDs to verify task plan files exist
641
598
  let taskIds: string[] | null = null;
642
599
  if (isDbAvailable()) {
643
- const tasks = getSliceTasks(mid, sid);
644
- if (tasks.length > 0) taskIds = tasks.map(t => t.id);
600
+ const refreshed = refreshOpenDatabaseFromDisk();
601
+ if (refreshed) {
602
+ const tasks = getSliceTasks(mid, sid);
603
+ if (tasks.length > 0) taskIds = tasks.map(t => t.id);
604
+ }
645
605
  }
646
606
 
647
607
  if (!taskIds) {
648
- // LEGACY: DB unavailable or no tasks in DB parse plan file for task IDs
608
+ // LEGACY: DB unavailable or no tasks in DB. Require actual task
609
+ // entries so an empty scaffold cannot advance the pipeline (#699).
649
610
  const planContent = readFileSync(absPath, "utf-8");
611
+ const hasCheckboxTask = /^\s*- \[[xX ]\] \*\*T\d+:/m.test(planContent);
612
+ const hasHeadingTask = /^\s*#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
613
+ if (!hasCheckboxTask && !hasHeadingTask) {
614
+ logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
615
+ return false;
616
+ }
650
617
  const plan = parseLegacyPlan(planContent);
651
618
  if (plan.tasks.length > 0) taskIds = plan.tasks.map((t: { id: string }) => t.id);
652
619
  }
@@ -672,6 +639,31 @@ export function verifyExpectedArtifact(
672
639
  }
673
640
  }
674
641
 
642
+ // execute-task: DB status is authoritative. Fall back to checked-checkbox
643
+ // detection when the DB is unavailable (unmigrated projects), or when the
644
+ // disk artifacts already reflect completion but the DB replay is one beat
645
+ // behind the completion write.
646
+ if (unitType === "execute-task") {
647
+ const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
648
+ if (mid && sid && tid) {
649
+ const dbTask = getTask(mid, sid, tid);
650
+ if (dbTask) {
651
+ if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
652
+ return false;
653
+ }
654
+ } else if (!isDbAvailable()) {
655
+ // LEGACY: Pre-migration fallback for projects without DB.
656
+ // Require a CHECKED checkbox — a bare heading or unchecked checkbox
657
+ // does not prove gsd_complete_task ran. Summary file on disk alone
658
+ // is not sufficient evidence (could be a rogue write) (#3607).
659
+ if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) return false;
660
+ } else {
661
+ // DB available but task row not found — completion tool never ran (#3607)
662
+ return false;
663
+ }
664
+ }
665
+ }
666
+
675
667
  // complete-slice: DB status is authoritative for whether the slice is done.
676
668
  // Fall back to file-based check (roadmap [x]) when DB is unavailable.
677
669
  if (unitType === "complete-slice") {
@@ -16,14 +16,21 @@ export type AutoRuntimeSnapshot = {
16
16
  paused: boolean;
17
17
  currentUnit: CurrentUnit | null;
18
18
  basePath: string;
19
+ orchestrationPhase?: "idle" | "running" | "paused" | "stopped" | "error";
20
+ orchestrationTransitionCount?: number;
21
+ orchestrationLastTransitionAt?: number;
19
22
  };
20
23
 
21
24
  export function getAutoRuntimeSnapshot(): AutoRuntimeSnapshot {
25
+ const orchestrationStatus = autoSession.orchestration?.getStatus();
22
26
  return {
23
27
  active: autoSession.active,
24
28
  paused: autoSession.paused,
25
29
  currentUnit: autoSession.currentUnit ? { ...autoSession.currentUnit } : null,
26
30
  basePath: autoSession.basePath,
31
+ orchestrationPhase: orchestrationStatus?.phase,
32
+ orchestrationTransitionCount: orchestrationStatus?.transitionCount,
33
+ orchestrationLastTransitionAt: orchestrationStatus?.lastTransitionAt,
27
34
  };
28
35
  }
29
36
 
@@ -1,3 +1,6 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Post-unit verification gate for GSD auto-mode units.
3
+
1
4
  /**
2
5
  * Post-unit verification gate for auto-mode.
3
6
  *
@@ -14,7 +17,8 @@ import type { ExtensionContext, ExtensionAPI } from "@gsd/pi-coding-agent";
14
17
  import { mkdirSync, writeFileSync } from "node:fs";
15
18
  import { resolveSliceFile, resolveSlicePath, resolveMilestoneFile } from "./paths.js";
16
19
  import { parseUnitId } from "./unit-id.js";
17
- import { isDbAvailable, getTask, getSliceTasks, getMilestoneSlices, type TaskRow } from "./gsd-db.js";
20
+ import { isDbAvailable, getTask, getSliceTasks, getMilestoneSlices } from "./gsd-db.js";
21
+ import type { TaskRow } from "./db-task-slice-rows.js";
18
22
  import { loadEffectiveGSDPreferences } from "./preferences.js";
19
23
  import { extractVerdict } from "./verdict-parser.js";
20
24
  import { isClosedStatus } from "./status-guards.js";