gsd-pi 2.79.0-dev.ece5fd8ba → 2.80.0-dev.96f4d89d5

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 (640) hide show
  1. package/dist/resources/.managed-resources-content-hash +1 -1
  2. package/dist/resources/extensions/github-sync/templates.js +90 -74
  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 +365 -522
  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/run-unit.js +19 -15
  9. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  10. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  11. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  12. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  13. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  16. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  17. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  18. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  19. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  20. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  21. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  22. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  23. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  24. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  29. package/dist/resources/extensions/gsd/auto-dashboard.js +54 -15
  30. package/dist/resources/extensions/gsd/auto-prompts.js +168 -3
  31. package/dist/resources/extensions/gsd/auto-recovery.js +45 -52
  32. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  33. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  34. package/dist/resources/extensions/gsd/auto-worktree.js +87 -38
  35. package/dist/resources/extensions/gsd/auto.js +159 -2
  36. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +24 -2
  37. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  38. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -5
  39. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  40. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  41. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  42. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  43. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  44. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  45. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  46. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  47. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  48. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  49. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  50. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  51. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  52. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  53. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  54. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  55. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  56. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  57. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  58. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  59. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  60. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  61. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  62. package/dist/resources/extensions/gsd/escalation.js +2 -0
  63. package/dist/resources/extensions/gsd/graph.js +9 -3
  64. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  65. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  66. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  67. package/dist/resources/extensions/gsd/model-router.js +9 -6
  68. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  69. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  70. package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
  71. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  72. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  73. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  74. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  75. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  76. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  77. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  78. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  79. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  80. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  81. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  82. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  83. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  84. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  85. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  86. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  87. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  88. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  89. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  90. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  91. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  92. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  93. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  94. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  95. package/dist/resources/extensions/gsd/state.js +4 -0
  96. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  97. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  98. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +6 -1
  99. package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
  100. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  101. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  102. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  103. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  104. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  105. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  106. package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
  107. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  108. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  109. package/dist/web/standalone/.next/BUILD_ID +1 -1
  110. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  111. package/dist/web/standalone/.next/build-manifest.json +3 -3
  112. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  113. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  114. package/dist/web/standalone/.next/required-server-files.json +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  120. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  128. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  129. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  130. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  131. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  133. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  137. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  139. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  141. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  145. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  155. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  169. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  175. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  185. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  187. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  189. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  191. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  193. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  195. package/dist/web/standalone/.next/server/app/index.html +1 -1
  196. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  197. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  199. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  200. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  201. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  202. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  203. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  204. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  205. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  206. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  207. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  208. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  209. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  210. package/dist/web/standalone/.next/static/chunks/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
  211. package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
  212. package/dist/web/standalone/package.json +1 -0
  213. package/dist/web/standalone/server.js +1 -1
  214. package/package.json +15 -6
  215. package/packages/contracts/dist/index.d.ts +3 -0
  216. package/packages/contracts/dist/index.d.ts.map +1 -0
  217. package/packages/contracts/dist/index.js +5 -0
  218. package/packages/contracts/dist/index.js.map +1 -0
  219. package/packages/contracts/dist/rpc.d.ts +549 -0
  220. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  221. package/packages/contracts/dist/rpc.js +53 -0
  222. package/packages/contracts/dist/rpc.js.map +1 -0
  223. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  224. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  225. package/packages/contracts/dist/rpc.test.js +47 -0
  226. package/packages/contracts/dist/rpc.test.js.map +1 -0
  227. package/packages/contracts/dist/workflow.d.ts +180 -0
  228. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  229. package/packages/contracts/dist/workflow.js +201 -0
  230. package/packages/contracts/dist/workflow.js.map +1 -0
  231. package/packages/contracts/package.json +39 -0
  232. package/packages/contracts/src/index.ts +5 -0
  233. package/packages/contracts/src/rpc.test.ts +72 -0
  234. package/packages/contracts/src/rpc.ts +286 -0
  235. package/packages/contracts/src/workflow.ts +213 -0
  236. package/packages/contracts/tsconfig.json +25 -0
  237. package/packages/daemon/package.json +3 -2
  238. package/packages/daemon/src/event-bridge.test.ts +2 -1
  239. package/packages/daemon/src/event-bridge.ts +1 -1
  240. package/packages/daemon/src/event-formatter.test.ts +1 -2
  241. package/packages/daemon/src/event-formatter.ts +1 -2
  242. package/packages/daemon/src/session-manager.ts +2 -2
  243. package/packages/daemon/src/types.ts +3 -18
  244. package/packages/mcp-server/dist/server.d.ts +13 -0
  245. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  246. package/packages/mcp-server/dist/server.js +77 -0
  247. package/packages/mcp-server/dist/server.js.map +1 -1
  248. package/packages/mcp-server/dist/session-manager.js +1 -1
  249. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  250. package/packages/mcp-server/dist/types.d.ts +3 -11
  251. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  252. package/packages/mcp-server/dist/types.js.map +1 -1
  253. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  254. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  255. package/packages/mcp-server/dist/workflow-tools.js +2 -40
  256. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  257. package/packages/mcp-server/package.json +3 -2
  258. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  259. package/packages/mcp-server/src/server.ts +99 -1
  260. package/packages/mcp-server/src/session-manager.ts +2 -2
  261. package/packages/mcp-server/src/types.ts +7 -18
  262. package/packages/mcp-server/src/workflow-tools.ts +2 -40
  263. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  264. package/packages/native/package.json +1 -1
  265. package/packages/pi-agent-core/package.json +1 -1
  266. package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
  267. package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
  268. package/packages/pi-ai/dist/models/fake-model.js +27 -0
  269. package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
  270. package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
  271. package/packages/pi-ai/dist/models/index.js +8 -0
  272. package/packages/pi-ai/dist/models/index.js.map +1 -1
  273. package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
  274. package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
  275. package/packages/pi-ai/dist/providers/fake.js +319 -0
  276. package/packages/pi-ai/dist/providers/fake.js.map +1 -0
  277. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  278. package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
  279. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  280. package/packages/pi-ai/package.json +1 -1
  281. package/packages/pi-ai/src/models/fake-model.ts +30 -0
  282. package/packages/pi-ai/src/models/index.ts +9 -0
  283. package/packages/pi-ai/src/providers/fake.ts +376 -0
  284. package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
  285. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  286. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  287. package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
  288. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +4 -0
  290. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  291. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  292. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  293. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  295. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +22 -0
  297. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  298. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
  299. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
  300. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
  301. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
  302. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
  303. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
  304. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
  305. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
  306. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +8 -8
  307. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  309. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  310. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
  311. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  312. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  313. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  315. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +48 -15
  317. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -0
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +40 -1
  322. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  323. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
  324. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  325. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  326. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  327. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  328. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +12 -1
  329. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  330. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  331. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  332. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  333. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
  334. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  335. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
  336. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
  337. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
  338. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
  339. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  340. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  341. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
  342. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  343. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  344. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  345. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
  346. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  347. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
  348. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
  350. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
  351. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
  352. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
  353. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +27 -0
  354. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
  355. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  356. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  357. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  358. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  359. package/packages/pi-coding-agent/package.json +2 -1
  360. package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
  361. package/packages/pi-coding-agent/src/core/settings-manager.ts +12 -0
  362. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  363. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +37 -2
  364. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
  365. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
  366. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +8 -8
  367. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  368. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  369. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +50 -15
  370. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +43 -1
  371. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -0
  372. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
  373. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
  374. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +75 -9
  375. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
  376. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
  377. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
  378. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
  379. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +40 -0
  380. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
  381. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  382. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  383. package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
  384. package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
  385. package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
  386. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
  387. package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
  388. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  389. package/packages/pi-tui/dist/index.d.ts +1 -0
  390. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  391. package/packages/pi-tui/dist/index.js +2 -0
  392. package/packages/pi-tui/dist/index.js.map +1 -1
  393. package/packages/pi-tui/dist/style.d.ts +41 -0
  394. package/packages/pi-tui/dist/style.d.ts.map +1 -0
  395. package/packages/pi-tui/dist/style.js +158 -0
  396. package/packages/pi-tui/dist/style.js.map +1 -0
  397. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  398. package/packages/pi-tui/dist/tui.js +1 -0
  399. package/packages/pi-tui/dist/tui.js.map +1 -1
  400. package/packages/pi-tui/package.json +1 -1
  401. package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
  402. package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
  403. package/packages/pi-tui/src/index.ts +9 -0
  404. package/packages/pi-tui/src/style.ts +225 -0
  405. package/packages/pi-tui/src/tui.ts +1 -0
  406. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  407. package/packages/rpc-client/README.md +3 -3
  408. package/packages/rpc-client/dist/index.d.ts +1 -1
  409. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  410. package/packages/rpc-client/dist/index.js.map +1 -1
  411. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  412. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  413. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  414. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  415. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  416. package/packages/rpc-client/dist/rpc-types.js +3 -11
  417. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  418. package/packages/rpc-client/package.json +4 -1
  419. package/packages/rpc-client/src/index.ts +1 -1
  420. package/packages/rpc-client/src/rpc-client.ts +3 -6
  421. package/packages/rpc-client/src/rpc-types.ts +3 -398
  422. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  423. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  424. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  425. package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
  426. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  427. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  428. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  429. package/pkg/dist/modes/interactive/theme/theme.js +18 -1
  430. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  431. package/pkg/package.json +1 -1
  432. package/src/resources/extensions/github-sync/templates.ts +93 -88
  433. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
  434. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  435. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  436. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  437. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  438. package/src/resources/extensions/gsd/auto/loop.ts +416 -596
  439. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  440. package/src/resources/extensions/gsd/auto/phases.ts +82 -8
  441. package/src/resources/extensions/gsd/auto/run-unit.ts +24 -14
  442. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  443. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  444. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  445. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  446. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  447. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  448. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  449. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  450. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  451. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  452. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  453. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  454. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  455. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  456. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  457. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  458. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  459. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  460. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  461. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  462. package/src/resources/extensions/gsd/auto-dashboard.ts +61 -8
  463. package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
  464. package/src/resources/extensions/gsd/auto-recovery.ts +42 -50
  465. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  466. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  467. package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
  468. package/src/resources/extensions/gsd/auto.ts +167 -1
  469. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +30 -2
  470. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  471. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +13 -5
  472. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  473. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  474. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  475. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  476. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  477. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  478. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  479. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  480. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  481. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  482. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  483. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  484. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  485. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  486. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  487. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  488. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  489. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  490. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  491. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  492. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  493. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  494. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  495. package/src/resources/extensions/gsd/escalation.ts +3 -1
  496. package/src/resources/extensions/gsd/graph.ts +12 -5
  497. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  498. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  499. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  500. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  501. package/src/resources/extensions/gsd/model-router.ts +10 -6
  502. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  503. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  504. package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
  505. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  506. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  507. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  508. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  509. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  510. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  511. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  512. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  513. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  514. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  515. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  516. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  517. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  518. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  519. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  520. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  521. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  522. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  523. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  524. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  525. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  526. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  527. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  528. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  529. package/src/resources/extensions/gsd/state.ts +6 -3
  530. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +38 -0
  531. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +98 -0
  532. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +117 -0
  533. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  534. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  535. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  536. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  537. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  538. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  539. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  540. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  541. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  542. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  543. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  544. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  545. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  546. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  547. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  548. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  549. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  550. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  551. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  552. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  553. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  554. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  555. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
  556. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  557. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  558. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  559. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  560. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  561. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  562. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  563. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  564. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  565. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  566. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  567. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
  568. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
  569. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
  570. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
  571. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  572. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  573. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  574. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  575. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  576. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  577. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  578. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  579. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  580. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  581. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  582. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  583. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  584. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  585. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  586. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  587. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  588. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  589. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  590. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  591. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  592. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
  593. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
  594. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  595. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  596. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  597. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  598. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  599. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +6 -6
  600. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  601. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  602. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  603. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  604. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  605. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  606. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  607. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  608. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  609. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  610. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  611. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  612. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  613. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  614. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  615. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  616. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  617. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  618. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  619. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +32 -0
  620. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  621. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  622. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  623. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
  624. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  625. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  626. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  627. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +6 -1
  628. package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
  629. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  630. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  631. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  632. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  633. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  634. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  635. package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
  636. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  637. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  638. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  639. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → y7d--cnc6Cibuva-Lzzw_}/_buildManifest.js +0 -0
  640. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → y7d--cnc6Cibuva-Lzzw_}/_ssgManifest.js +0 -0
@@ -0,0 +1,160 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Unit tests for auto-mode unit dispatch contract adapter.
3
+
4
+ import assert from "node:assert/strict";
5
+ import test from "node:test";
6
+
7
+ import type { SidecarItem } from "../auto/session.ts";
8
+ import type { IterationContext, IterationData, LoopState } from "../auto/types.ts";
9
+ import type { UokGraphNode } from "../uok/contracts.ts";
10
+ import {
11
+ runUnitPhaseViaContract,
12
+ type UnitDispatchScheduler,
13
+ type UnitPhaseResult,
14
+ } from "../auto/workflow-unit-dispatch.ts";
15
+
16
+ function makeIterData(overrides?: Partial<IterationData>): IterationData {
17
+ return {
18
+ unitType: "execute-task",
19
+ unitId: "M001/S001/T001",
20
+ prompt: "Run task",
21
+ finalPrompt: "Run task",
22
+ pauseAfterUatDispatch: false,
23
+ state: {} as IterationData["state"],
24
+ mid: "M001",
25
+ midTitle: "Milestone 1",
26
+ isRetry: false,
27
+ previousTier: undefined,
28
+ ...overrides,
29
+ };
30
+ }
31
+
32
+ function makeSidecarItem(kind: SidecarItem["kind"]): SidecarItem {
33
+ return {
34
+ kind,
35
+ unitType: `sidecar/${kind}`,
36
+ unitId: kind,
37
+ prompt: `Run ${kind}`,
38
+ };
39
+ }
40
+
41
+ class FakeScheduler implements UnitDispatchScheduler {
42
+ readonly handlers = new Map<UokGraphNode["kind"], (node: UokGraphNode) => Promise<void>>();
43
+ nodes: UokGraphNode[] = [];
44
+ options: unknown;
45
+ runHandler = true;
46
+
47
+ registerHandler(kind: UokGraphNode["kind"], handler: (node: UokGraphNode) => Promise<void>): void {
48
+ this.handlers.set(kind, handler);
49
+ }
50
+
51
+ async run(nodes: UokGraphNode[], options: { parallel: false; maxWorkers: 1 }): Promise<void> {
52
+ this.nodes = nodes;
53
+ this.options = options;
54
+ if (this.runHandler) {
55
+ await this.handlers.get(nodes[0]!.kind)?.(nodes[0]!);
56
+ }
57
+ }
58
+ }
59
+
60
+ test("runUnitPhaseViaContract calls legacy runner directly", async () => {
61
+ const result: UnitPhaseResult = { action: "next", data: { unitStartedAt: 1 } };
62
+ const calls: unknown[] = [];
63
+ const sidecarItem = makeSidecarItem("hook");
64
+
65
+ const outcome = await runUnitPhaseViaContract(
66
+ "legacy-direct",
67
+ { iteration: 3 } as IterationContext,
68
+ makeIterData(),
69
+ {} as LoopState,
70
+ sidecarItem,
71
+ {
72
+ runUnitPhase: async (...args) => {
73
+ calls.push(args);
74
+ return result;
75
+ },
76
+ createScheduler: () => assert.fail("createScheduler should not be called"),
77
+ },
78
+ );
79
+
80
+ assert.equal(outcome, result);
81
+ assert.equal(calls.length, 1);
82
+ assert.equal((calls[0] as unknown[])[3], sidecarItem);
83
+ });
84
+
85
+ test("runUnitPhaseViaContract dispatches through scheduler in uok mode", async () => {
86
+ const scheduler = new FakeScheduler();
87
+ const result: UnitPhaseResult = { action: "next", data: { requestDispatchedAt: 2 } };
88
+
89
+ const outcome = await runUnitPhaseViaContract(
90
+ "uok-scheduler",
91
+ { iteration: 4 } as IterationContext,
92
+ makeIterData(),
93
+ {} as LoopState,
94
+ undefined,
95
+ {
96
+ runUnitPhase: async () => result,
97
+ createScheduler: () => scheduler,
98
+ },
99
+ );
100
+
101
+ assert.equal(outcome, result);
102
+ assert.deepEqual(Array.from(scheduler.handlers.keys()), [
103
+ "unit",
104
+ "hook",
105
+ "subagent",
106
+ "team-worker",
107
+ "verification",
108
+ "reprocess",
109
+ ]);
110
+ assert.deepEqual(scheduler.nodes, [{
111
+ id: "dispatch:4:execute-task:M001/S001/T001",
112
+ kind: "unit",
113
+ dependsOn: [],
114
+ metadata: {
115
+ unitType: "execute-task",
116
+ unitId: "M001/S001/T001",
117
+ },
118
+ }]);
119
+ assert.deepEqual(scheduler.options, { parallel: false, maxWorkers: 1 });
120
+ });
121
+
122
+ test("runUnitPhaseViaContract maps sidecar kind to scheduler node kind", async () => {
123
+ const scheduler = new FakeScheduler();
124
+
125
+ await runUnitPhaseViaContract(
126
+ "uok-scheduler",
127
+ { iteration: 1 } as IterationContext,
128
+ makeIterData({ unitType: "sidecar/triage", unitId: "triage-1" }),
129
+ {} as LoopState,
130
+ makeSidecarItem("triage"),
131
+ {
132
+ runUnitPhase: async () => ({ action: "next", data: {} }),
133
+ createScheduler: () => scheduler,
134
+ },
135
+ );
136
+
137
+ assert.equal(scheduler.nodes[0]?.kind, "verification");
138
+ });
139
+
140
+ test("runUnitPhaseViaContract breaks when scheduler never runs a handler", async () => {
141
+ const scheduler = new FakeScheduler();
142
+ scheduler.runHandler = false;
143
+
144
+ const outcome = await runUnitPhaseViaContract(
145
+ "uok-scheduler",
146
+ { iteration: 1 } as IterationContext,
147
+ makeIterData(),
148
+ {} as LoopState,
149
+ undefined,
150
+ {
151
+ runUnitPhase: async () => assert.fail("runUnitPhase should not be called"),
152
+ createScheduler: () => scheduler,
153
+ },
154
+ );
155
+
156
+ assert.deepEqual(outcome, {
157
+ action: "break",
158
+ reason: "scheduler-dispatch-missing-result",
159
+ });
160
+ });
@@ -0,0 +1,123 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Unit tests for auto-mode worker heartbeat adapter.
3
+
4
+ import assert from "node:assert/strict";
5
+ import test from "node:test";
6
+
7
+ import {
8
+ maintainWorkerHeartbeat,
9
+ type MaintainWorkerHeartbeatDeps,
10
+ type WorkerHeartbeatSession,
11
+ } from "../auto/workflow-worker-heartbeat.ts";
12
+
13
+ function makeDeps(overrides?: Partial<MaintainWorkerHeartbeatDeps>): {
14
+ deps: MaintainWorkerHeartbeatDeps;
15
+ calls: unknown[];
16
+ errors: unknown[];
17
+ } {
18
+ const calls: unknown[] = [];
19
+ const errors: unknown[] = [];
20
+ const deps: MaintainWorkerHeartbeatDeps = {
21
+ heartbeatAutoWorker: workerId => calls.push(["heartbeat", workerId]),
22
+ refreshMilestoneLease: (workerId, milestoneId, token) => {
23
+ calls.push(["refresh", workerId, milestoneId, token]);
24
+ return true;
25
+ },
26
+ logHeartbeatFailure: err => errors.push(err),
27
+ ...overrides,
28
+ };
29
+ return { deps, calls, errors };
30
+ }
31
+
32
+ test("maintainWorkerHeartbeat no-ops without a worker id", () => {
33
+ const { deps, calls, errors } = makeDeps();
34
+
35
+ maintainWorkerHeartbeat({}, deps);
36
+
37
+ assert.deepEqual(calls, []);
38
+ assert.deepEqual(errors, []);
39
+ });
40
+
41
+ test("maintainWorkerHeartbeat refreshes worker heartbeat without active lease", () => {
42
+ const { deps, calls, errors } = makeDeps();
43
+
44
+ maintainWorkerHeartbeat({ workerId: "worker-1" }, deps);
45
+
46
+ assert.deepEqual(calls, [["heartbeat", "worker-1"]]);
47
+ assert.deepEqual(errors, []);
48
+ });
49
+
50
+ test("maintainWorkerHeartbeat refreshes active milestone lease when token exists", () => {
51
+ const { deps, calls, errors } = makeDeps();
52
+ const session: WorkerHeartbeatSession = {
53
+ workerId: "worker-1",
54
+ currentMilestoneId: "M001",
55
+ milestoneLeaseToken: 7,
56
+ };
57
+
58
+ maintainWorkerHeartbeat(session, deps);
59
+
60
+ assert.deepEqual(calls, [
61
+ ["heartbeat", "worker-1"],
62
+ ["refresh", "worker-1", "M001", 7],
63
+ ]);
64
+ assert.deepEqual(errors, []);
65
+ });
66
+
67
+ test("maintainWorkerHeartbeat skips lease refresh when token is null", () => {
68
+ const { deps, calls, errors } = makeDeps();
69
+
70
+ maintainWorkerHeartbeat({
71
+ workerId: "worker-1",
72
+ currentMilestoneId: "M001",
73
+ milestoneLeaseToken: null,
74
+ }, deps);
75
+
76
+ assert.deepEqual(calls, [["heartbeat", "worker-1"]]);
77
+ assert.deepEqual(errors, []);
78
+ });
79
+
80
+ test("maintainWorkerHeartbeat logs and suppresses heartbeat failures", () => {
81
+ const failure = new Error("db unavailable");
82
+ const { deps, calls, errors } = makeDeps({
83
+ heartbeatAutoWorker: workerId => {
84
+ calls.push(["heartbeat", workerId]);
85
+ throw failure;
86
+ },
87
+ });
88
+
89
+ assert.doesNotThrow(() => {
90
+ maintainWorkerHeartbeat({
91
+ workerId: "worker-1",
92
+ currentMilestoneId: "M001",
93
+ milestoneLeaseToken: 7,
94
+ }, deps);
95
+ });
96
+
97
+ assert.deepEqual(calls, [["heartbeat", "worker-1"]]);
98
+ assert.deepEqual(errors, [failure]);
99
+ });
100
+
101
+ test("maintainWorkerHeartbeat logs and suppresses lease refresh failures", () => {
102
+ const failure = new Error("lease stale");
103
+ const { deps, calls, errors } = makeDeps({
104
+ refreshMilestoneLease: (workerId, milestoneId, token) => {
105
+ calls.push(["refresh", workerId, milestoneId, token]);
106
+ throw failure;
107
+ },
108
+ });
109
+
110
+ assert.doesNotThrow(() => {
111
+ maintainWorkerHeartbeat({
112
+ workerId: "worker-1",
113
+ currentMilestoneId: "M001",
114
+ milestoneLeaseToken: 7,
115
+ }, deps);
116
+ });
117
+
118
+ assert.deepEqual(calls, [
119
+ ["heartbeat", "worker-1"],
120
+ ["refresh", "worker-1", "M001", 7],
121
+ ]);
122
+ assert.deepEqual(errors, [failure]);
123
+ });
@@ -0,0 +1,93 @@
1
+ // GSD-2 + src/resources/extensions/gsd/tests/working-output-messages.test.ts - Regression coverage for user-facing working-state message quality.
2
+
3
+ import test from "node:test";
4
+ import assert from "node:assert/strict";
5
+
6
+ import {
7
+ evaluateWorkingOutputMessage,
8
+ evaluateWorkingOutputMessages,
9
+ formatAutoUnitWorkingMessage,
10
+ } from "../working-output-messages.ts";
11
+
12
+ test("auto unit loader messages name the active work", () => {
13
+ assert.equal(
14
+ formatAutoUnitWorkingMessage("research-milestone", "M001"),
15
+ "Researching M001: waiting for provider response",
16
+ );
17
+ assert.equal(
18
+ evaluateWorkingOutputMessage({
19
+ surface: "loader",
20
+ message: formatAutoUnitWorkingMessage("research-milestone", "M001"),
21
+ context: { unitType: "research-milestone", unitId: "M001", health: "waiting" },
22
+ }).length,
23
+ 0,
24
+ );
25
+ });
26
+
27
+ test("generic working messages are flagged", () => {
28
+ const findings = evaluateWorkingOutputMessage({
29
+ surface: "loader",
30
+ message: "Working...",
31
+ context: { health: "waiting" },
32
+ });
33
+
34
+ assert.deepEqual(findings.map(f => f.code), ["generic-working-message"]);
35
+ });
36
+
37
+ test("dashboard messages cannot claim healthy progress while recovering", () => {
38
+ const findings = evaluateWorkingOutputMessage({
39
+ surface: "dashboard",
40
+ message: "GSD AUTO Progressing well",
41
+ context: { health: "recovering", recoveryAttempts: 1 },
42
+ });
43
+
44
+ assert.deepEqual(findings.map(f => f.code), ["misleading-healthy-message"]);
45
+ });
46
+
47
+ test("pre-roadmap zero-slice counters are flagged", () => {
48
+ const findings = evaluateWorkingOutputMessage({
49
+ surface: "dashboard",
50
+ message: "0/0 slices",
51
+ context: { health: "waiting" },
52
+ });
53
+
54
+ assert.deepEqual(findings.map(f => f.code), ["fake-zero-progress"]);
55
+ });
56
+
57
+ test("stalled/provider-error/timeout messages need an action", () => {
58
+ const noAction = evaluateWorkingOutputMessage({
59
+ surface: "notification",
60
+ message: "Provider stalled after 2m",
61
+ context: { health: "stalled" },
62
+ });
63
+ assert.deepEqual(noAction.map(f => f.code), ["missing-action"]);
64
+
65
+ const withAction = evaluateWorkingOutputMessage({
66
+ surface: "notification",
67
+ message: "Provider stalled after 2m. Type /gsd stop or wait for retry.",
68
+ context: { health: "stalled" },
69
+ });
70
+ assert.equal(withAction.length, 0);
71
+ });
72
+
73
+ test("current fixed research working surfaces pass the audit", () => {
74
+ const findings = evaluateWorkingOutputMessages([
75
+ {
76
+ surface: "loader",
77
+ message: "Researching M001: waiting for provider response",
78
+ context: { unitType: "research-milestone", unitId: "M001", health: "waiting" },
79
+ },
80
+ {
81
+ surface: "dashboard",
82
+ message: "Recovering\nretry 1 after idle stall",
83
+ context: { unitType: "research-milestone", unitId: "M001", health: "recovering", recoveryAttempts: 1 },
84
+ },
85
+ {
86
+ surface: "notification",
87
+ message: "Auto-mode stopped - User requested stop.",
88
+ context: { health: "stopped" },
89
+ },
90
+ ]);
91
+
92
+ assert.equal(findings.length, 0);
93
+ });
@@ -17,8 +17,8 @@
17
17
  *
18
18
  * This rewrite builds a real git parent repo + local submodule, creates
19
19
  * a worktree, dirties a tracked file inside the submodule, then invokes
20
- * `removeWorktree` and asserts observable behaviour on stderr (where
21
- * `logWarning` writes) and on the filesystem (the worktree is gone).
20
+ * `removeWorktree` and asserts observable behaviour through the workflow log
21
+ * buffer and on the filesystem (the worktree is gone).
22
22
  */
23
23
 
24
24
  import { describe, test, beforeEach, afterEach } from "node:test";
@@ -35,6 +35,7 @@ import { join } from "node:path";
35
35
  import { tmpdir } from "node:os";
36
36
 
37
37
  import { createWorktree, removeWorktree } from "../worktree-manager.ts";
38
+ import { _resetLogs, peekLogs } from "../workflow-logger.ts";
38
39
 
39
40
  interface Harness {
40
41
  parent: string;
@@ -112,53 +113,38 @@ function makeHarness(): Harness {
112
113
  };
113
114
  }
114
115
 
115
- /** Capture stderr writes during `fn`. `logWarning` writes to stderr, so
116
- * this reveals warnings emitted by the worktree-manager. */
117
- function captureStderr(fn: () => void): string {
118
- const streamAny = process.stderr as unknown as {
119
- write: (chunk: string | Uint8Array, ...rest: unknown[]) => boolean;
120
- };
121
- const original = streamAny.write.bind(streamAny);
122
- const chunks: string[] = [];
123
- streamAny.write = (chunk: string | Uint8Array): boolean => {
124
- chunks.push(typeof chunk === "string" ? chunk : Buffer.from(chunk).toString("utf-8"));
125
- return true;
126
- };
127
- try {
128
- fn();
129
- } finally {
130
- streamAny.write = original;
131
- }
132
- return chunks.join("");
116
+ function workflowLogMessages(): string {
117
+ return peekLogs().map((entry) => entry.message).join("\n");
133
118
  }
134
119
 
135
120
  describe("removeWorktree preserves submodule uncommitted state (#2337)", () => {
136
121
  let h: Harness;
137
122
 
138
123
  beforeEach(() => {
124
+ _resetLogs();
139
125
  h = makeHarness();
140
126
  });
141
127
 
142
128
  afterEach(() => {
143
129
  h.cleanup();
130
+ _resetLogs();
144
131
  });
145
132
 
146
133
  test("clean submodules: worktree removes without stashing or submodule warnings", () => {
147
134
  const wt = createWorktree(h.parent, "cleanwt");
148
135
  runGit(wt.path, ["submodule", "update", "--init", "--recursive"]);
149
136
 
150
- const stderr = captureStderr(() => {
151
- removeWorktree(h.parent, "cleanwt");
152
- });
137
+ removeWorktree(h.parent, "cleanwt");
138
+ const logs = workflowLogMessages();
153
139
 
154
140
  assert.ok(!existsSync(wt.path), "worktree directory should be gone");
155
141
  assert.doesNotMatch(
156
- stderr,
142
+ logs,
157
143
  /Saved uncommitted submodule changes to rescue branch/,
158
144
  "clean submodule must not trigger rescue-branch creation",
159
145
  );
160
146
  assert.doesNotMatch(
161
- stderr,
147
+ logs,
162
148
  /Submodule rescue branch creation failed/,
163
149
  "clean submodule must not trigger rescue-branch failure warning",
164
150
  );
@@ -191,9 +177,8 @@ describe("removeWorktree preserves submodule uncommitted state (#2337)", () => {
191
177
  `precondition: submodule must be diverged, got: "${subStatus}"`,
192
178
  );
193
179
 
194
- const stderr = captureStderr(() => {
195
- removeWorktree(h.parent, "dirtywt");
196
- });
180
+ removeWorktree(h.parent, "dirtywt");
181
+ const logs = workflowLogMessages();
197
182
 
198
183
  // Worktree is gone: force fallback succeeded.
199
184
  assert.ok(!existsSync(wt.path), "worktree directory should be removed");
@@ -205,7 +190,7 @@ describe("removeWorktree preserves submodule uncommitted state (#2337)", () => {
205
190
  // removal. This is the assertion that #4823 demanded in place of
206
191
  // the tautological `src.includes("submodule") && src.includes("force")`.
207
192
  assert.match(
208
- stderr,
193
+ logs,
209
194
  /Saved uncommitted submodule changes to rescue branch|Submodule rescue branch creation failed|Submodule changes detected/,
210
195
  "dirty submodule must trigger detection-and-warning path",
211
196
  );
@@ -231,12 +216,11 @@ describe("removeWorktree preserves submodule uncommitted state (#2337)", () => {
231
216
  renameSync(modPath, hiddenPath);
232
217
  }
233
218
 
234
- const stderr = captureStderr(() => {
235
- removeWorktree(h.parent, "no-gitmodules");
236
- });
219
+ removeWorktree(h.parent, "no-gitmodules");
220
+ const logs = workflowLogMessages();
237
221
 
238
222
  assert.doesNotMatch(
239
- stderr,
223
+ logs,
240
224
  /Saved uncommitted submodule changes to rescue branch/,
241
225
  "missing .gitmodules should skip submodule detection entirely",
242
226
  );
@@ -1,3 +1,4 @@
1
+ // GSD2 complete-milestone tool handler
1
2
  /**
2
3
  * complete-milestone handler — the core operation behind gsd_complete_milestone.
3
4
  *
@@ -57,6 +58,7 @@ export interface CompleteMilestoneResult {
57
58
  milestoneId: string;
58
59
  summaryPath: string;
59
60
  stale?: boolean;
61
+ alreadyComplete?: boolean;
60
62
  }
61
63
 
62
64
  function renderMilestoneSummaryMarkdown(params: CompleteMilestoneParams): string {
@@ -143,6 +145,7 @@ export async function handleCompleteMilestone(
143
145
  // ── Guards + DB writes inside a single transaction (prevents TOCTOU) ───
144
146
  const completedAt = new Date().toISOString();
145
147
  let guardError: string | null = null;
148
+ let alreadyComplete = false;
146
149
 
147
150
  transaction(() => {
148
151
  // State machine preconditions (inside txn for atomicity)
@@ -152,7 +155,7 @@ export async function handleCompleteMilestone(
152
155
  return;
153
156
  }
154
157
  if (isClosedStatus(milestone.status)) {
155
- guardError = `milestone ${params.milestoneId} is already complete`;
158
+ alreadyComplete = true;
156
159
  return;
157
160
  }
158
161
 
@@ -238,14 +241,16 @@ export async function handleCompleteMilestone(
238
241
  logWarning("tool", `complete-milestone manifest warning: ${(mfErr as Error).message}`);
239
242
  }
240
243
  try {
241
- appendEvent(basePath, {
242
- cmd: "complete-milestone",
243
- params: { milestoneId: params.milestoneId },
244
- ts: new Date().toISOString(),
245
- actor: "agent",
246
- actor_name: params.actorName,
247
- trigger_reason: params.triggerReason,
248
- });
244
+ if (!alreadyComplete) {
245
+ appendEvent(basePath, {
246
+ cmd: "complete-milestone",
247
+ params: { milestoneId: params.milestoneId },
248
+ ts: new Date().toISOString(),
249
+ actor: "agent",
250
+ actor_name: params.actorName,
251
+ trigger_reason: params.triggerReason,
252
+ });
253
+ }
249
254
  } catch (eventErr) {
250
255
  logError("tool", `complete-milestone event log FAILED — completion invisible to reconciliation`, { error: (eventErr as Error).message });
251
256
  }
@@ -254,5 +259,6 @@ export async function handleCompleteMilestone(
254
259
  milestoneId: params.milestoneId,
255
260
  summaryPath,
256
261
  ...(projectionStale ? { stale: true } : {}),
262
+ ...(alreadyComplete ? { alreadyComplete: true } : {}),
257
263
  };
258
264
  }
@@ -1,3 +1,6 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Complete-task tool handler for GSD workflow state and summaries.
3
+
1
4
  /**
2
5
  * complete-task handler — the core operation behind gsd_complete_task.
3
6
  *
@@ -55,7 +58,7 @@ export interface CompleteTaskResult {
55
58
  stale?: boolean;
56
59
  }
57
60
 
58
- import type { TaskRow } from "../gsd-db.js";
61
+ import type { TaskRow } from "../db-task-slice-rows.js";
59
62
 
60
63
  /**
61
64
  * Map an execute-task-owned gate id to the CompleteTaskParams field whose
@@ -477,12 +477,17 @@ export async function executeCompleteMilestone(
477
477
  isError: true,
478
478
  };
479
479
  }
480
+ const message = result.alreadyComplete
481
+ ? `Milestone ${result.milestoneId} is already complete. Summary available at ${result.summaryPath}`
482
+ : `Completed milestone ${result.milestoneId}. Summary written to ${result.summaryPath}`;
480
483
  return {
481
- content: [{ type: "text", text: `Completed milestone ${result.milestoneId}. Summary written to ${result.summaryPath}` }],
484
+ content: [{ type: "text", text: message }],
482
485
  details: {
483
486
  operation: "complete_milestone",
484
487
  milestoneId: result.milestoneId,
485
488
  summaryPath: result.summaryPath,
489
+ ...(result.alreadyComplete ? { alreadyComplete: true } : {}),
490
+ ...(result.stale ? { stale: true } : {}),
486
491
  },
487
492
  };
488
493
  } catch (err) {
@@ -113,7 +113,7 @@ const CONTEXT_MODE_LANE_LABELS: Record<Exclude<ContextModePolicy, "none">, strin
113
113
  };
114
114
 
115
115
  const CONTEXT_MODE_GUIDANCE =
116
- "Use `gsd_exec` for noisy scans, builds, and tests so full output stays out of prompt context; call `gsd_exec_search` before repeating prior runs; call `gsd_resume` after compaction or resume to recover stored execution context.";
116
+ "Use `gsd_exec` for noisy commands, `gsd_exec_search` before reruns, and `gsd_resume` after compaction or resume.";
117
117
 
118
118
  /**
119
119
  * Render the Context Mode instruction lane for a unit type. Unknown unit
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Selects the UOK kernel path and records parity diagnostics.
1
3
  import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
2
4
  import { appendFileSync, mkdirSync } from "node:fs";
3
5
  import { join } from "node:path";
@@ -9,6 +11,7 @@ import { buildAuditEnvelope, emitUokAuditEvent } from "./audit.js";
9
11
  import { setUnifiedAuditEnabled } from "./audit-toggle.js";
10
12
  import { resolveUokFlags } from "./flags.js";
11
13
  import { createTurnObserver } from "./loop-adapter.js";
14
+ import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
12
15
 
13
16
  interface RunAutoLoopWithUokArgs {
14
17
  ctx: ExtensionContext;
@@ -54,10 +57,14 @@ export async function runAutoLoopWithUok(args: RunAutoLoopWithUokArgs): Promise<
54
57
  const prefs = deps.loadEffectiveGSDPreferences()?.preferences;
55
58
  const flags = resolveUokFlags(prefs);
56
59
  setUnifiedAuditEnabled(flags.auditUnified);
60
+ const pathLabel = resolveKernelPathLabel(flags);
61
+ if (pathLabel !== "uok-kernel") {
62
+ incrementLegacyTelemetry("legacy.uokFallbackUsed");
63
+ }
57
64
 
58
65
  writeParityEvent(s.basePath, {
59
66
  ts: new Date().toISOString(),
60
- path: resolveKernelPathLabel(flags),
67
+ path: pathLabel,
61
68
  flags,
62
69
  phase: "enter",
63
70
  });
@@ -98,7 +105,7 @@ export async function runAutoLoopWithUok(args: RunAutoLoopWithUokArgs): Promise<
98
105
  }
99
106
  writeParityEvent(s.basePath, {
100
107
  ts: new Date().toISOString(),
101
- path: resolveKernelPathLabel(flags),
108
+ path: pathLabel,
102
109
  flags,
103
110
  phase: "exit",
104
111
  status: "ok",
@@ -106,7 +113,7 @@ export async function runAutoLoopWithUok(args: RunAutoLoopWithUokArgs): Promise<
106
113
  } catch (err) {
107
114
  writeParityEvent(s.basePath, {
108
115
  ts: new Date().toISOString(),
109
- path: resolveKernelPathLabel(flags),
116
+ path: pathLabel,
110
117
  flags,
111
118
  phase: "exit",
112
119
  status: "error",
@@ -1,9 +1,13 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: UOK plan v2 graph compilation from GSD workflow state.
3
+
1
4
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
5
  import { join } from "node:path";
3
6
 
4
7
  import type { GSDState, Phase } from "../types.js";
5
8
  import { gsdRoot, resolveMilestoneFile, resolveSliceFile } from "../paths.js";
6
- import { isDbAvailable, getMilestoneSlices, getSliceTasks, type SliceRow } from "../gsd-db.js";
9
+ import { isDbAvailable, getMilestoneSlices, getSliceTasks } from "../gsd-db.js";
10
+ import type { SliceRow } from "../db-task-slice-rows.js";
7
11
  import type { UokGraphNode } from "./contracts.js";
8
12
 
9
13
  const PLAN_V2_CLARIFY_ROUND_LIMIT = 3;