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,52 @@
1
+ ## TL;DR
2
+
3
+ **What:** Ship milestone M001 - Authentication
4
+ **Why:** Users need to authenticate before accessing protected resources.
5
+ **How:** Added password hash check and session token issuance.
6
+
7
+ ## What
8
+
9
+ ### S01
10
+ Implemented login flow.
11
+
12
+ ## Why
13
+
14
+ Users need to authenticate before accessing protected resources.
15
+
16
+ ## How
17
+
18
+ Added password hash check and session token issuance.
19
+
20
+ ## Linked Issue
21
+
22
+ Closes #123
23
+
24
+ ## Roadmap
25
+
26
+ - [x] **S01: Login**
27
+
28
+ ## Metrics
29
+
30
+ - **Units executed:** 3
31
+
32
+ ## Tests Run
33
+
34
+ - npm test
35
+ - npm run typecheck:extensions
36
+
37
+ ## Change Type
38
+
39
+ - [x] `feat` - New feature or capability
40
+ - [ ] `fix` - Bug fix
41
+ - [ ] `refactor` - Code restructuring
42
+ - [ ] `test` - Adding or updating tests
43
+ - [ ] `docs` - Documentation only
44
+ - [ ] `chore` - Build, CI, or tooling changes
45
+
46
+ ## Rollback And Compatibility
47
+
48
+ - Revert the merge commit.
49
+
50
+ ## AI Assistance Disclosure
51
+
52
+ This PR was prepared with AI assistance.
@@ -0,0 +1,42 @@
1
+ ## TL;DR
2
+
3
+ **What:** Ship milestone M001 - Authentication
4
+ **Why:** Milestone work is complete and ready for review.
5
+ **How:** Generated from GSD evidence and local workflow artifacts.
6
+
7
+ ## What
8
+
9
+ Milestone M001 completed.
10
+
11
+ ## Why
12
+
13
+ Milestone work is complete and ready for review.
14
+
15
+ ## How
16
+
17
+ Generated from GSD evidence and local workflow artifacts.
18
+
19
+ ## Linked Issue
20
+
21
+ Not specified. Add an issue link before marking this PR ready if CONTRIBUTING.md requires one.
22
+
23
+ ## Tests Run
24
+
25
+ - Not specified. Add exact verification commands before requesting review.
26
+
27
+ ## Change Type
28
+
29
+ - [x] `feat` - New feature or capability
30
+ - [ ] `fix` - Bug fix
31
+ - [ ] `refactor` - Code restructuring
32
+ - [ ] `test` - Adding or updating tests
33
+ - [ ] `docs` - Documentation only
34
+ - [ ] `chore` - Build, CI, or tooling changes
35
+
36
+ ## Rollback And Compatibility
37
+
38
+ - No behavior-changing rollback notes recorded.
39
+
40
+ ## AI Assistance Disclosure
41
+
42
+ This PR was prepared with AI assistance.
@@ -0,0 +1,55 @@
1
+ ## TL;DR
2
+
3
+ **What:** Ship workflow lane/writer - lane/writer
4
+ **Why:** Workflow work is complete and ready for review.
5
+ **How:** Generated by GSD GitHub Sync swarm routines from lane evidence.
6
+
7
+ ## What
8
+
9
+ ### Swarm lane
10
+ **Lane:** `lane/writer`
11
+ **Branch:** `lane/single-writer`
12
+ **Owner:** @owner
13
+ **Latest commit:** `abc1234`
14
+
15
+ ### Impact area
16
+ Single-writer UOK metadata.
17
+
18
+ ### Changed contracts
19
+ - [ ] WriterToken
20
+
21
+ ### Transition risks
22
+ - [ ] Writer token lifecycle regression
23
+
24
+ ## Why
25
+
26
+ Workflow work is complete and ready for review.
27
+
28
+ ## How
29
+
30
+ Generated by GSD GitHub Sync swarm routines from lane evidence.
31
+
32
+ ## Linked Issue
33
+
34
+ Closes #123
35
+
36
+ ## Tests Run
37
+
38
+ - npm run typecheck:extensions
39
+
40
+ ## Change Type
41
+
42
+ - [ ] `feat` - New feature or capability
43
+ - [ ] `fix` - Bug fix
44
+ - [x] `refactor` - Code restructuring
45
+ - [ ] `test` - Adding or updating tests
46
+ - [ ] `docs` - Documentation only
47
+ - [ ] `chore` - Build, CI, or tooling changes
48
+
49
+ ## Rollback And Compatibility
50
+
51
+ - Disable writer sequence enrichment
52
+
53
+ ## AI Assistance Disclosure
54
+
55
+ This PR was prepared with AI assistance.
@@ -0,0 +1,60 @@
1
+ ## TL;DR
2
+
3
+ **What:** Ship workflow lane/writer - lane/writer
4
+ **Why:** Workflow work is complete and ready for review.
5
+ **How:** Generated by GSD GitHub Sync swarm routines from lane evidence.
6
+
7
+ ## What
8
+
9
+ ### Swarm lane
10
+ **Lane:** `lane/writer`
11
+ **Branch:** `lane/single-writer`
12
+ **Owner:** @owner
13
+ **Latest commit:** `abc1234`
14
+
15
+ ### Impact area
16
+ Single-writer UOK metadata.
17
+
18
+ ### Changed contracts
19
+ - [ ] WriterToken
20
+
21
+ ### Transition risks
22
+ - [ ] Writer token lifecycle regression
23
+
24
+ ## Blockers
25
+
26
+ - Awaiting state-lane writer-sequence merge
27
+ - Parity report incomplete
28
+
29
+ ## Why
30
+
31
+ Workflow work is complete and ready for review.
32
+
33
+ ## How
34
+
35
+ Generated by GSD GitHub Sync swarm routines from lane evidence.
36
+
37
+ ## Linked Issue
38
+
39
+ Closes #123
40
+
41
+ ## Tests Run
42
+
43
+ - npm run typecheck:extensions
44
+
45
+ ## Change Type
46
+
47
+ - [ ] `feat` - New feature or capability
48
+ - [ ] `fix` - Bug fix
49
+ - [x] `refactor` - Code restructuring
50
+ - [ ] `test` - Adding or updating tests
51
+ - [ ] `docs` - Documentation only
52
+ - [ ] `chore` - Build, CI, or tooling changes
53
+
54
+ ## Rollback And Compatibility
55
+
56
+ - Disable writer sequence enrichment
57
+
58
+ ## AI Assistance Disclosure
59
+
60
+ This PR was prepared with AI assistance.
@@ -0,0 +1,36 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Verifies the forensics prompt renders required investigation and issue-routing guidance.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { mkdtempSync, rmSync } from "node:fs";
7
+ import { tmpdir } from "node:os";
8
+ import { join } from "node:path";
9
+
10
+ test("forensics prompt renders compact investigation and issue routing guidance", async (t) => {
11
+ const previousGsdHome = process.env.GSD_HOME;
12
+ const providedGsdHome = process.env.GSD_TEST_HOME;
13
+ const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-forensics-render-"));
14
+ process.env.GSD_HOME = isolatedHome;
15
+ t.after(() => {
16
+ if (previousGsdHome === undefined) delete process.env.GSD_HOME;
17
+ else process.env.GSD_HOME = previousGsdHome;
18
+ if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
19
+ });
20
+
21
+ const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
22
+ const prompt = loadPrompt("forensics", {
23
+ problemDescription: "Auto-mode repeats the same unit.",
24
+ forensicData: "stuck-detected event for execute-task/M001/S01/T01",
25
+ gsdSourceDir: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
26
+ dedupSection: "No duplicate issue found.",
27
+ });
28
+
29
+ assert.match(prompt, /Investigation Protocol/);
30
+ assert.match(prompt, /gsd_milestone_status/);
31
+ assert.match(prompt, /sqlite3 .gsd\/gsd.db/);
32
+ assert.match(prompt, /gh issue create --repo gsd-build\/gsd-2/);
33
+ assert.match(prompt, /Do NOT use the `github_issues` tool/);
34
+ assert.match(prompt, /Redaction Rules/);
35
+ assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
36
+ });
@@ -233,6 +233,16 @@ describe("getNextPendingStep", () => {
233
233
  const next = getNextPendingStep(graph);
234
234
  assert.equal(next?.id, "b");
235
235
  });
236
+
237
+ it("treats expanded dependencies as satisfied", (t) => {
238
+ const graph = makeGraph([
239
+ makeStep({ id: "iter", status: "expanded" }),
240
+ makeStep({ id: "after", dependsOn: ["iter"] }),
241
+ ]);
242
+
243
+ const next = getNextPendingStep(graph);
244
+ assert.equal(next?.id, "after");
245
+ });
236
246
  });
237
247
 
238
248
  // ─── markStepComplete ────────────────────────────────────────────────────
@@ -1,3 +1,5 @@
1
+ // GSD Extension - Database regression tests.
2
+
1
3
  import { describe, test } from 'node:test';
2
4
  import assert from 'node:assert/strict';
3
5
  import * as fs from 'node:fs';
@@ -29,7 +31,10 @@ import {
29
31
  getTask,
30
32
  getSliceTasks,
31
33
  checkpointDatabase,
34
+ refreshOpenDatabaseFromDisk,
35
+ tryCreateMemoriesFts,
32
36
  } from '../gsd-db.ts';
37
+ import { _resetLogs, peekLogs, setStderrLoggingEnabled } from '../workflow-logger.ts';
33
38
 
34
39
  const _require = createRequire(import.meta.url);
35
40
 
@@ -910,6 +915,31 @@ describe('gsd-db', () => {
910
915
  closeDatabase();
911
916
  });
912
917
 
918
+ test('gsd-db: FTS5 unavailable warning normalizes provider typo', () => {
919
+ const previousStderr = setStderrLoggingEnabled(false);
920
+ _resetLogs();
921
+ try {
922
+ const ok = tryCreateMemoriesFts({
923
+ exec(): void {
924
+ throw new Error('no such moduel : fts5');
925
+ },
926
+ prepare(): never {
927
+ throw new Error('prepare should not be called');
928
+ },
929
+ close(): void {},
930
+ });
931
+
932
+ assert.equal(ok, false, 'FTS5 creation should report fallback');
933
+ const warning = peekLogs().find((entry) => entry.component === 'db' && entry.message.includes('FTS5 unavailable'));
934
+ assert.ok(warning, 'FTS5 fallback warning should be logged');
935
+ assert.match(warning!.message, /no such module: fts5/);
936
+ assert.doesNotMatch(warning!.message, /moduel/);
937
+ } finally {
938
+ _resetLogs();
939
+ setStderrLoggingEnabled(previousStderr);
940
+ }
941
+ });
942
+
913
943
  // ─── checkpointDatabase ────────────────────────────────────────────────────
914
944
 
915
945
  describe('checkpointDatabase', () => {
@@ -952,6 +982,71 @@ describe('gsd-db', () => {
952
982
  });
953
983
  });
954
984
 
985
+ // ─── refreshOpenDatabaseFromDisk ───────────────────────────────────────────
986
+
987
+ describe('refreshOpenDatabaseFromDisk', () => {
988
+ test('refreshOpenDatabaseFromDisk: reopens the active file-backed database and sees external writes', (t) => {
989
+ const dbPath = tempDbPath();
990
+ t.after(() => cleanup(dbPath));
991
+
992
+ openDatabase(dbPath);
993
+ insertMilestone({ id: 'M001', title: 'Test', status: 'active' });
994
+ insertSlice({
995
+ id: 'S01',
996
+ milestoneId: 'M001',
997
+ title: 'Slice 1',
998
+ status: 'pending',
999
+ sequence: 1,
1000
+ });
1001
+ insertTask({
1002
+ id: 'T01',
1003
+ milestoneId: 'M001',
1004
+ sliceId: 'S01',
1005
+ title: 'Task 1',
1006
+ status: 'pending',
1007
+ sequence: 1,
1008
+ });
1009
+
1010
+ const adapterBefore = _getAdapter()!;
1011
+
1012
+ const externalDb = openRawSqliteForTest(dbPath);
1013
+ try {
1014
+ externalDb.exec(`
1015
+ INSERT INTO tasks (milestone_id, slice_id, id, title, status, sequence)
1016
+ VALUES ('M001', 'S01', 'T02', 'Task 2', 'pending', 2)
1017
+ `);
1018
+ } finally {
1019
+ externalDb.close();
1020
+ }
1021
+
1022
+ const visibleBeforeRefresh = getSliceTasks('M001', 'S01').map(task => task.id);
1023
+ assert.ok(visibleBeforeRefresh.includes('T01'));
1024
+
1025
+ assert.equal(refreshOpenDatabaseFromDisk(), true);
1026
+ assert.notEqual(_getAdapter(), adapterBefore, 'refresh must replace the active adapter rather than becoming a no-op');
1027
+ const sliceTaskIds = getSliceTasks('M001', 'S01').map(task => task.id);
1028
+ assert.deepEqual(sliceTaskIds, ['T01', 'T02']);
1029
+ assert.equal(isDbAvailable(), true);
1030
+ });
1031
+
1032
+ test('refreshOpenDatabaseFromDisk: refuses in-memory databases without closing them', () => {
1033
+ openDatabase(':memory:');
1034
+ insertMilestone({ id: 'M001', title: 'Test', status: 'active' });
1035
+
1036
+ assert.equal(refreshOpenDatabaseFromDisk(), false);
1037
+ assert.equal(isDbAvailable(), true);
1038
+ assert.ok(_getAdapter()!.prepare("SELECT 1 FROM milestones WHERE id = 'M001'").get());
1039
+
1040
+ closeDatabase();
1041
+ });
1042
+
1043
+ test('refreshOpenDatabaseFromDisk: is a no-op when no database is open', () => {
1044
+ closeDatabase();
1045
+ assert.equal(refreshOpenDatabaseFromDisk(), false);
1046
+ assert.equal(isDbAvailable(), false);
1047
+ });
1048
+ });
1049
+
955
1050
  // ─── getDbStatus ───────────────────────────────────────────────────────────
956
1051
 
957
1052
  describe('getDbStatus', () => {
@@ -0,0 +1,43 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Verifies the guided milestone discussion prompt renders its core interview and persistence contracts.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { mkdtempSync, rmSync } from "node:fs";
7
+ import { tmpdir } from "node:os";
8
+ import { join } from "node:path";
9
+
10
+ test("guided milestone prompt renders compact interview and context guidance", async (t) => {
11
+ const previousGsdHome = process.env.GSD_HOME;
12
+ const providedGsdHome = process.env.GSD_TEST_HOME;
13
+ const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-guided-milestone-render-"));
14
+ process.env.GSD_HOME = isolatedHome;
15
+ t.after(() => {
16
+ if (previousGsdHome === undefined) delete process.env.GSD_HOME;
17
+ else process.env.GSD_HOME = previousGsdHome;
18
+ if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
19
+ });
20
+
21
+ const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
22
+ const prompt = loadPrompt("guided-discuss-milestone", {
23
+ workingDirectory: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
24
+ milestoneId: "M001",
25
+ milestoneTitle: "Baseline And Safety",
26
+ structuredQuestionsAvailable: "true",
27
+ fastPathInstruction: "No fast path in this test.",
28
+ inlinedTemplates: "## Context\n\n## Decisions\n\n## Open Questions",
29
+ commitInstruction: "Do not commit during this test.",
30
+ });
31
+
32
+ assert.match(prompt, /M001 context written/);
33
+ assert.match(prompt, /Project Shape/);
34
+ assert.match(prompt, /default to `complex`/i);
35
+ assert.match(prompt, /3 or 4 concrete, researched options/);
36
+ assert.match(prompt, /"Other — let me discuss"/);
37
+ assert.match(prompt, /CONTEXT-DRAFT/);
38
+ assert.match(prompt, /Do NOT mention this save to the user/);
39
+ assert.match(prompt, /depth_verification_M001_confirm/);
40
+ assert.match(prompt, /artifact_type: "CONTEXT"/);
41
+ assert.match(prompt, /milestone_id: M001/);
42
+ assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
43
+ });
@@ -0,0 +1,41 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Verifies the guided project discussion prompt renders its core interview and persistence contracts.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { mkdtempSync, rmSync } from "node:fs";
7
+ import { tmpdir } from "node:os";
8
+ import { join } from "node:path";
9
+
10
+ test("guided project prompt renders compact interview and artifact guidance", async (t) => {
11
+ const previousGsdHome = process.env.GSD_HOME;
12
+ const providedGsdHome = process.env.GSD_TEST_HOME;
13
+ const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-guided-project-render-"));
14
+ process.env.GSD_HOME = isolatedHome;
15
+ t.after(() => {
16
+ if (previousGsdHome === undefined) delete process.env.GSD_HOME;
17
+ else process.env.GSD_HOME = previousGsdHome;
18
+ if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
19
+ });
20
+
21
+ const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
22
+ const prompt = loadPrompt("guided-discuss-project", {
23
+ workingDirectory: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
24
+ structuredQuestionsAvailable: "true",
25
+ inlinedTemplates: "## Project\n\n## Project Shape\n\n## Capability Contract\n\n## Milestone Sequence",
26
+ commitInstruction: "Do not commit during this test.",
27
+ });
28
+
29
+ assert.match(prompt, /What do you want to build\?/);
30
+ assert.match(prompt, /Project shape: simple/);
31
+ assert.match(prompt, /Default to `complex` when uncertain/);
32
+ assert.match(prompt, /3 or 4 concrete, researched options/);
33
+ assert.match(prompt, /"Other — let me discuss"/);
34
+ assert.match(prompt, /depth_verification_project_confirm/);
35
+ assert.match(prompt, /artifact_type: "PROJECT"/);
36
+ assert.match(prompt, /omit `milestone_id`/);
37
+ assert.match(prompt, /Do NOT use `artifact_type: "CONTEXT"` and do NOT pass `milestone_id: "PROJECT"`/);
38
+ assert.match(prompt, /\*\*Complexity:\*\* simple/);
39
+ assert.match(prompt, /\*\*Complexity:\*\* complex/);
40
+ assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
41
+ });
@@ -0,0 +1,45 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Verifies the guided requirements discussion prompt renders core requirements and persistence contracts.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { mkdtempSync, rmSync } from "node:fs";
7
+ import { tmpdir } from "node:os";
8
+ import { join } from "node:path";
9
+
10
+ test("guided requirements prompt renders compact capability and persistence guidance", async (t) => {
11
+ const previousGsdHome = process.env.GSD_HOME;
12
+ const providedGsdHome = process.env.GSD_TEST_HOME;
13
+ const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-guided-requirements-render-"));
14
+ process.env.GSD_HOME = isolatedHome;
15
+ t.after(() => {
16
+ if (previousGsdHome === undefined) delete process.env.GSD_HOME;
17
+ else process.env.GSD_HOME = previousGsdHome;
18
+ if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
19
+ });
20
+
21
+ const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
22
+ const prompt = loadPrompt("guided-discuss-requirements", {
23
+ workingDirectory: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
24
+ structuredQuestionsAvailable: "true",
25
+ inlinedTemplates: "## Active\n\n## Validated\n\n## Deferred\n\n## Out of Scope\n\n## Traceability\n\n## Coverage Summary",
26
+ commitInstruction: "Do not commit during this test.",
27
+ });
28
+
29
+ assert.match(prompt, /PROJECT\.md missing/);
30
+ assert.match(prompt, /Project Shape/);
31
+ assert.match(prompt, /R###/);
32
+ assert.match(prompt, /M###\/none yet/);
33
+ assert.match(prompt, /never bare `none yet`/);
34
+ assert.match(prompt, /3 or 4 concrete, researched options/);
35
+ assert.match(prompt, /"Other — let me discuss"/);
36
+ assert.match(prompt, /class-assignment and status questions are exempt/);
37
+ assert.match(prompt, /artifact_type: "REQUIREMENTS-DRAFT"/);
38
+ assert.match(prompt, /depth_verification_requirements_confirm/);
39
+ assert.match(prompt, /gsd_requirement_save/);
40
+ assert.match(prompt, /gsd_summary_save/);
41
+ assert.match(prompt, /artifact_type: "REQUIREMENTS"/);
42
+ assert.match(prompt, /Do NOT use `artifact_type: "CONTEXT"`/);
43
+ assert.match(prompt, /Requirements written\./);
44
+ assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
45
+ });
@@ -1,3 +1,5 @@
1
+ // GSD Extension — Auto recovery integration tests.
2
+
1
3
  import test from "node:test";
2
4
  import assert from "node:assert/strict";
3
5
  import { mkdirSync, writeFileSync, existsSync, readFileSync, rmSync, chmodSync } from "node:fs";
@@ -401,6 +403,57 @@ test("verifyExpectedArtifact plan-slice fails for plan with no tasks (#699)", (t
401
403
  assert.equal(result, false, "should fail when plan has no task entries (empty scaffold, #699)");
402
404
  });
403
405
 
406
+ test("verifyExpectedArtifact plan-slice trusts DB tasks over legacy plan syntax", (t) => {
407
+ const base = makeTmpBase();
408
+ t.after(() => {
409
+ closeDatabase();
410
+ cleanup(base);
411
+ });
412
+
413
+ openDatabase(join(base, ".gsd", "gsd.db"));
414
+ insertMilestone({ id: "M001", title: "Milestone", status: "active" });
415
+ insertSlice({ id: "S01", milestoneId: "M001", title: "Slice", status: "pending" });
416
+ insertTask({ id: "T01", milestoneId: "M001", sliceId: "S01", title: "First task", status: "pending" });
417
+ insertTask({ id: "T02", milestoneId: "M001", sliceId: "S01", title: "Second task", status: "pending" });
418
+
419
+ const sliceDir = join(base, ".gsd", "milestones", "M001", "slices", "S01");
420
+ const tasksDir = join(sliceDir, "tasks");
421
+ writeFileSync(
422
+ join(sliceDir, "S01-PLAN.md"),
423
+ "# S01: Slice\n\n## Tasks\n\nTask rows live in the DB; this projection intentionally has no legacy task syntax.\n",
424
+ );
425
+ writeFileSync(join(tasksDir, "T01-PLAN.md"), "# T01 Plan\n");
426
+ writeFileSync(join(tasksDir, "T02-PLAN.md"), "# T02 Plan\n");
427
+
428
+ const result = verifyExpectedArtifact("plan-slice", "M001/S01", base);
429
+ assert.equal(result, true, "DB task rows plus task plan files should verify plan-slice");
430
+ });
431
+
432
+ test("verifyExpectedArtifact plan-slice still fails when a DB-backed task plan file is missing", (t) => {
433
+ const base = makeTmpBase();
434
+ t.after(() => {
435
+ closeDatabase();
436
+ cleanup(base);
437
+ });
438
+
439
+ openDatabase(join(base, ".gsd", "gsd.db"));
440
+ insertMilestone({ id: "M001", title: "Milestone", status: "active" });
441
+ insertSlice({ id: "S01", milestoneId: "M001", title: "Slice", status: "pending" });
442
+ insertTask({ id: "T01", milestoneId: "M001", sliceId: "S01", title: "First task", status: "pending" });
443
+ insertTask({ id: "T02", milestoneId: "M001", sliceId: "S01", title: "Second task", status: "pending" });
444
+
445
+ const sliceDir = join(base, ".gsd", "milestones", "M001", "slices", "S01");
446
+ const tasksDir = join(sliceDir, "tasks");
447
+ writeFileSync(
448
+ join(sliceDir, "S01-PLAN.md"),
449
+ "# S01: Slice\n\n## Tasks\n\nTask rows live in the DB; this projection intentionally has no legacy task syntax.\n",
450
+ );
451
+ writeFileSync(join(tasksDir, "T01-PLAN.md"), "# T01 Plan\n");
452
+
453
+ const result = verifyExpectedArtifact("plan-slice", "M001/S01", base);
454
+ assert.equal(result, false, "DB task rows must still require matching task plan files");
455
+ });
456
+
404
457
  // ─── verifyExpectedArtifact: heading-style plan tasks (#1691) ─────────────
405
458
 
406
459
  test("verifyExpectedArtifact accepts plan-slice with heading-style tasks (### T01 --)", (t) => {
@@ -456,6 +509,32 @@ test("verifyExpectedArtifact accepts plan-slice with colon-style heading tasks (
456
509
  );
457
510
  });
458
511
 
512
+ test("verifyExpectedArtifact accepts indented legacy plan-slice task markers", (t) => {
513
+ const base = makeTmpBase();
514
+ t.after(() => cleanup(base));
515
+
516
+ const sliceDir = join(base, ".gsd", "milestones", "M001", "slices", "S01");
517
+ const tasksDir = join(sliceDir, "tasks");
518
+ mkdirSync(tasksDir, { recursive: true });
519
+ writeFileSync(join(sliceDir, "S01-PLAN.md"), [
520
+ "# S01: Test Slice",
521
+ "",
522
+ "## Tasks",
523
+ "",
524
+ " - [ ] **T01: Implement feature** `est:1h`",
525
+ "",
526
+ " ### T02 -- Write tests",
527
+ ].join("\n"));
528
+ writeFileSync(join(tasksDir, "T01-PLAN.md"), "# T01 Plan");
529
+ writeFileSync(join(tasksDir, "T02-PLAN.md"), "# T02 Plan");
530
+
531
+ assert.strictEqual(
532
+ verifyExpectedArtifact("plan-slice", "M001/S01", base),
533
+ true,
534
+ "Indented legacy task markers should be treated as completed plan-slice artifacts",
535
+ );
536
+ });
537
+
459
538
  test("verifyExpectedArtifact execute-task rejects heading-style plan without checked checkbox (#3607)", (t) => {
460
539
  const base = makeTmpBase();
461
540
  t.after(() => cleanup(base));
@@ -24,6 +24,7 @@ import {
24
24
  } from "../../auto-worktree.ts";
25
25
  import { getSliceBranchName } from "../../worktree.ts";
26
26
  import { nativeMergeSquash } from "../../native-git-bridge.ts";
27
+ import { drainLogs, setStderrLoggingEnabled } from "../../workflow-logger.ts";
27
28
 
28
29
  function run(cmd: string, cwd: string): string {
29
30
  // Safe: all inputs are hardcoded test strings, not user input
@@ -251,6 +252,42 @@ describe("auto-worktree-milestone-merge", { timeout: 300_000 }, () => {
251
252
  assert.strictEqual(typeof result.pushed, "boolean", "pushed flag remains boolean");
252
253
  });
253
254
 
255
+ test("external .gsd and local-only auto_push closeout without cleanup or push warnings", () => {
256
+ const { repo, externalState } = freshRepoWithExternalGsd();
257
+ const previousStderr = setStderrLoggingEnabled(false);
258
+ drainLogs();
259
+
260
+ try {
261
+ writeFileSync(
262
+ join(externalState, "PREFERENCES.md"),
263
+ "---\nversion: 1\n---\n\ngit:\n auto_push: true\n",
264
+ );
265
+ mkdirSync(join(externalState, "milestones", "M041"), { recursive: true });
266
+ mkdirSync(join(externalState, "runtime", "units"), { recursive: true });
267
+ writeFileSync(join(externalState, "runtime", "units", "leftover.json"), "{}\n");
268
+
269
+ const wtPath = createAutoWorktree(repo, "M041");
270
+ addSliceToMilestone(repo, wtPath, "M041", "S01", "Local-only push", [
271
+ { file: "local-only.ts", content: "export const localOnly = true;\n", message: "add local only file" },
272
+ ]);
273
+
274
+ const roadmap = makeRoadmap("M041", "Local-only closeout", [
275
+ { id: "S01", title: "Local-only push" },
276
+ ]);
277
+
278
+ const result = mergeMilestoneToMain(repo, "M041", roadmap);
279
+ const logs = drainLogs();
280
+ const messages = logs.map((entry) => entry.message).join("\n");
281
+
282
+ assert.equal(result.pushed, false, "local-only repo should not report pushed");
283
+ assert.ok(!messages.includes("untracked file cleanup failed"), "external .gsd cleanup should not call git on paths outside the repo");
284
+ assert.ok(!messages.includes("git push failed"), "missing origin should skip auto-push instead of running git push");
285
+ } finally {
286
+ drainLogs();
287
+ setStderrLoggingEnabled(previousStderr);
288
+ }
289
+ });
290
+
254
291
  test("auto-resolve .gsd/ state file conflicts", () => {
255
292
  const repo = freshRepo();
256
293
  const wtPath = createAutoWorktree(repo, "M050");