gsd-pi 2.79.0-dev.ece5fd8ba → 2.80.0-dev.710c06e97

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 (644) 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 +72 -55
  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 +22 -6
  39. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +129 -1
  40. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  41. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  42. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  43. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  44. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  45. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  46. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  47. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  48. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  49. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  50. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  51. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  52. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  53. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  54. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  55. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  56. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  57. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  58. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  59. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  60. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  61. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  62. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  63. package/dist/resources/extensions/gsd/escalation.js +2 -0
  64. package/dist/resources/extensions/gsd/graph.js +9 -3
  65. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  66. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  67. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  68. package/dist/resources/extensions/gsd/model-router.js +9 -6
  69. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  70. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  71. package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
  72. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  73. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  74. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  75. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  76. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  77. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  78. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  79. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  80. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  81. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  82. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  83. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  84. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  85. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  86. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  87. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  88. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  89. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  90. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  91. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  92. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  93. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  94. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  95. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  96. package/dist/resources/extensions/gsd/state.js +4 -0
  97. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  98. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  99. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +6 -1
  100. package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
  101. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  102. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  103. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  104. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  105. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  106. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  107. package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
  108. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  109. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  110. package/dist/web/standalone/.next/BUILD_ID +1 -1
  111. package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
  112. package/dist/web/standalone/.next/build-manifest.json +3 -3
  113. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  114. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  115. package/dist/web/standalone/.next/required-server-files.json +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  120. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  125. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  128. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  129. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  130. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  131. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  132. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  134. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  136. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  138. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  140. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  142. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  144. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  146. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  148. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  150. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  152. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  154. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  158. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  160. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  164. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  166. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  176. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  180. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  182. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  184. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  186. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  190. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  192. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  194. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  196. package/dist/web/standalone/.next/server/app/index.html +1 -1
  197. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  199. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  200. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  201. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  202. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  203. package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
  204. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  205. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  206. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  207. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  209. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  210. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  211. package/dist/web/standalone/.next/static/chunks/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
  212. package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
  213. package/dist/web/standalone/package.json +1 -0
  214. package/dist/web/standalone/server.js +1 -1
  215. package/package.json +15 -6
  216. package/packages/contracts/dist/index.d.ts +3 -0
  217. package/packages/contracts/dist/index.d.ts.map +1 -0
  218. package/packages/contracts/dist/index.js +5 -0
  219. package/packages/contracts/dist/index.js.map +1 -0
  220. package/packages/contracts/dist/rpc.d.ts +549 -0
  221. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  222. package/packages/contracts/dist/rpc.js +53 -0
  223. package/packages/contracts/dist/rpc.js.map +1 -0
  224. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  225. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  226. package/packages/contracts/dist/rpc.test.js +47 -0
  227. package/packages/contracts/dist/rpc.test.js.map +1 -0
  228. package/packages/contracts/dist/workflow.d.ts +180 -0
  229. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  230. package/packages/contracts/dist/workflow.js +201 -0
  231. package/packages/contracts/dist/workflow.js.map +1 -0
  232. package/packages/contracts/package.json +39 -0
  233. package/packages/contracts/src/index.ts +5 -0
  234. package/packages/contracts/src/rpc.test.ts +72 -0
  235. package/packages/contracts/src/rpc.ts +286 -0
  236. package/packages/contracts/src/workflow.ts +213 -0
  237. package/packages/contracts/tsconfig.json +25 -0
  238. package/packages/daemon/package.json +3 -2
  239. package/packages/daemon/src/event-bridge.test.ts +2 -1
  240. package/packages/daemon/src/event-bridge.ts +1 -1
  241. package/packages/daemon/src/event-formatter.test.ts +1 -2
  242. package/packages/daemon/src/event-formatter.ts +1 -2
  243. package/packages/daemon/src/session-manager.ts +2 -2
  244. package/packages/daemon/src/types.ts +3 -18
  245. package/packages/mcp-server/dist/server.d.ts +13 -0
  246. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  247. package/packages/mcp-server/dist/server.js +77 -0
  248. package/packages/mcp-server/dist/server.js.map +1 -1
  249. package/packages/mcp-server/dist/session-manager.js +1 -1
  250. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  251. package/packages/mcp-server/dist/types.d.ts +3 -11
  252. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  253. package/packages/mcp-server/dist/types.js.map +1 -1
  254. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  255. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  256. package/packages/mcp-server/dist/workflow-tools.js +2 -40
  257. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  258. package/packages/mcp-server/package.json +3 -2
  259. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  260. package/packages/mcp-server/src/server.ts +99 -1
  261. package/packages/mcp-server/src/session-manager.ts +2 -2
  262. package/packages/mcp-server/src/types.ts +7 -18
  263. package/packages/mcp-server/src/workflow-tools.ts +2 -40
  264. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  265. package/packages/native/package.json +1 -1
  266. package/packages/pi-agent-core/package.json +1 -1
  267. package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
  268. package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
  269. package/packages/pi-ai/dist/models/fake-model.js +27 -0
  270. package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
  271. package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
  272. package/packages/pi-ai/dist/models/index.js +8 -0
  273. package/packages/pi-ai/dist/models/index.js.map +1 -1
  274. package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
  275. package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
  276. package/packages/pi-ai/dist/providers/fake.js +319 -0
  277. package/packages/pi-ai/dist/providers/fake.js.map +1 -0
  278. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  279. package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
  280. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  281. package/packages/pi-ai/package.json +1 -1
  282. package/packages/pi-ai/src/models/fake-model.ts +30 -0
  283. package/packages/pi-ai/src/models/index.ts +9 -0
  284. package/packages/pi-ai/src/providers/fake.ts +376 -0
  285. package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
  286. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  287. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
  289. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +4 -0
  291. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  293. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  296. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +22 -0
  298. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  299. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
  300. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
  301. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
  302. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
  303. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
  304. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
  305. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
  306. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
  307. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +8 -8
  308. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  309. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  310. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  311. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
  312. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  313. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  314. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  315. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  316. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  317. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +48 -15
  318. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -0
  321. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  322. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +40 -1
  323. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  324. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
  325. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  326. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  327. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  328. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  329. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +12 -1
  330. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  331. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  332. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  333. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  334. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
  335. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
  337. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
  338. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
  339. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
  340. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  341. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  342. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
  343. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  344. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  345. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  346. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
  347. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  348. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
  350. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
  351. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
  352. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
  353. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
  354. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +27 -0
  355. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
  356. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  357. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  358. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  359. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  360. package/packages/pi-coding-agent/package.json +2 -1
  361. package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
  362. package/packages/pi-coding-agent/src/core/settings-manager.ts +12 -0
  363. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  364. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +37 -2
  365. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
  366. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
  367. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +8 -8
  368. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  369. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  370. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +50 -15
  371. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +43 -1
  372. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -0
  373. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
  374. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
  375. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +75 -9
  376. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
  377. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
  378. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
  379. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
  380. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +40 -0
  381. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
  382. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  383. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  384. package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
  385. package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
  386. package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
  387. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
  388. package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
  389. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  390. package/packages/pi-tui/dist/index.d.ts +1 -0
  391. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  392. package/packages/pi-tui/dist/index.js +2 -0
  393. package/packages/pi-tui/dist/index.js.map +1 -1
  394. package/packages/pi-tui/dist/style.d.ts +41 -0
  395. package/packages/pi-tui/dist/style.d.ts.map +1 -0
  396. package/packages/pi-tui/dist/style.js +158 -0
  397. package/packages/pi-tui/dist/style.js.map +1 -0
  398. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  399. package/packages/pi-tui/dist/tui.js +1 -0
  400. package/packages/pi-tui/dist/tui.js.map +1 -1
  401. package/packages/pi-tui/package.json +1 -1
  402. package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
  403. package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
  404. package/packages/pi-tui/src/index.ts +9 -0
  405. package/packages/pi-tui/src/style.ts +225 -0
  406. package/packages/pi-tui/src/tui.ts +1 -0
  407. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  408. package/packages/rpc-client/README.md +3 -3
  409. package/packages/rpc-client/dist/index.d.ts +1 -1
  410. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  411. package/packages/rpc-client/dist/index.js.map +1 -1
  412. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  413. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  414. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  415. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  416. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  417. package/packages/rpc-client/dist/rpc-types.js +3 -11
  418. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  419. package/packages/rpc-client/package.json +4 -1
  420. package/packages/rpc-client/src/index.ts +1 -1
  421. package/packages/rpc-client/src/rpc-client.ts +3 -6
  422. package/packages/rpc-client/src/rpc-types.ts +3 -398
  423. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  424. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  425. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  426. package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
  427. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  428. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  429. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  430. package/pkg/dist/modes/interactive/theme/theme.js +18 -1
  431. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  432. package/pkg/package.json +1 -1
  433. package/src/resources/extensions/github-sync/templates.ts +93 -88
  434. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
  435. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  436. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  437. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  438. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  439. package/src/resources/extensions/gsd/auto/loop.ts +416 -596
  440. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  441. package/src/resources/extensions/gsd/auto/phases.ts +82 -8
  442. package/src/resources/extensions/gsd/auto/run-unit.ts +24 -14
  443. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  444. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  445. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  446. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  447. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  448. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  449. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  450. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  451. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  452. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  453. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  454. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  455. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  456. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  457. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  458. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  459. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  460. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  461. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  462. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  463. package/src/resources/extensions/gsd/auto-dashboard.ts +61 -8
  464. package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
  465. package/src/resources/extensions/gsd/auto-recovery.ts +67 -53
  466. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  467. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  468. package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
  469. package/src/resources/extensions/gsd/auto.ts +167 -1
  470. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +30 -2
  471. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  472. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +30 -6
  473. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +135 -1
  474. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  475. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  476. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  477. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  478. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  479. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  480. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  481. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  482. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  483. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  484. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  485. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  486. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  487. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  488. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  489. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  490. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  491. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  492. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  493. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  494. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  495. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  496. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  497. package/src/resources/extensions/gsd/escalation.ts +3 -1
  498. package/src/resources/extensions/gsd/graph.ts +12 -5
  499. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  500. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  501. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  502. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  503. package/src/resources/extensions/gsd/model-router.ts +10 -6
  504. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  505. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  506. package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
  507. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  508. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  509. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  510. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  511. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  512. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  513. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  514. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  515. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  516. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  517. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  518. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  519. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  520. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  521. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  522. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  523. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  524. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  525. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  526. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  527. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  528. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  529. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  530. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  531. package/src/resources/extensions/gsd/state.ts +6 -3
  532. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +38 -0
  533. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +98 -0
  534. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +117 -0
  535. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  536. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  537. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +45 -0
  538. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  539. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  540. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  541. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  542. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  543. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  544. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  545. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  546. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  547. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  548. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  549. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  550. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  551. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  552. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  553. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  554. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  555. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  556. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  557. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  558. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
  559. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  560. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  561. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  562. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  563. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  564. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  565. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  566. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  567. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  568. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  569. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  570. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
  571. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
  572. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
  573. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
  574. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  575. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  576. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  577. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  578. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  579. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  580. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  581. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  582. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  583. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  584. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  585. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  586. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  587. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  588. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  589. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  590. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  591. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  592. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  593. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  594. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  595. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
  596. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
  597. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  598. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  599. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  600. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  601. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  602. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +6 -6
  603. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  604. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  605. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  606. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  607. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  608. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  609. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  610. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  611. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  612. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  613. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  614. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  615. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  616. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  617. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  618. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  619. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  620. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  621. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  622. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +32 -0
  623. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  624. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  625. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  626. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
  627. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  628. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
  629. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  630. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  631. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +6 -1
  632. package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
  633. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  634. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  635. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  636. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  637. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  638. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  639. package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
  640. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  641. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  642. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  643. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → CaMwumvGbBPZrJicfsCzV}/_buildManifest.js +0 -0
  644. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → CaMwumvGbBPZrJicfsCzV}/_ssgManifest.js +0 -0
@@ -1,3 +1,6 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Verifies GSD planning prompt placeholder rendering and DB-backed tool guidance.
3
+
1
4
  import test from "node:test";
2
5
  import assert from "node:assert/strict";
3
6
  import { readFileSync } from "node:fs";
@@ -6,6 +9,7 @@ import { fileURLToPath } from "node:url";
6
9
 
7
10
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
11
  const worktreePromptsDir = join(__dirname, "..", "prompts");
12
+ const fixtureRoot = process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd();
9
13
 
10
14
  function loadPrompt(name: string, vars: Record<string, string> = {}): string {
11
15
  const path = join(worktreePromptsDir, `${name}.md`);
@@ -17,15 +21,18 @@ function loadPrompt(name: string, vars: Record<string, string> = {}): string {
17
21
  }
18
22
 
19
23
  const BASE_VARS = {
20
- workingDirectory: "/tmp/test-project",
24
+ workingDirectory: fixtureRoot,
21
25
  milestoneId: "M001", sliceId: "S01", sliceTitle: "Test Slice",
22
26
  slicePath: ".gsd/milestones/M001/slices/S01",
23
27
  roadmapPath: ".gsd/milestones/M001/M001-ROADMAP.md",
24
28
  researchPath: ".gsd/milestones/M001/slices/S01/S01-RESEARCH.md",
25
- outputPath: "/tmp/test-project/.gsd/milestones/M001/slices/S01/S01-PLAN.md",
29
+ outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "S01-PLAN.md"),
26
30
  inlinedContext: "--- test inlined context ---",
27
31
  dependencySummaries: "", executorContextConstraints: "",
28
32
  sourceFilePaths: "- **Requirements**: `.gsd/REQUIREMENTS.md`",
33
+ templatesDir: join(fixtureRoot, "templates"),
34
+ planTemplatePath: "C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\plan.md",
35
+ taskPlanTemplatePath: "C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\task-plan.md",
29
36
  skillActivation: "Load the relevant skills.",
30
37
  };
31
38
 
@@ -61,6 +68,19 @@ test("plan-slice prompt: DB-backed tool names survive template substitution", ()
61
68
  assert.ok(result.includes("canonical write path"), "canonical write path language should survive substitution");
62
69
  });
63
70
 
71
+ test("plan-slice prompt: compact planning gates survive template substitution", () => {
72
+ const result = loadPrompt("plan-slice", { ...BASE_VARS, commitInstruction: "Do not commit." });
73
+ assert.ok(result.includes("planning-dispatch"), "planning-dispatch policy should remain visible");
74
+ assert.ok(result.includes("Bias toward \"roadmap is fine.\""), "roadmap reassessment brake should remain visible");
75
+ assert.ok(result.includes("Self-audit before finishing"), "self-audit gate should remain visible");
76
+ assert.ok(result.includes("Quality gates: non-trivial slices/tasks include specific Q3-Q7 coverage where applicable."));
77
+ assert.ok(result.includes("C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\plan.md"));
78
+ assert.ok(result.includes("C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\task-plan.md"));
79
+ assert.ok(!result.includes("{{templatesDir}}/plan.md"));
80
+ assert.ok(!result.includes("{{templatesDir}}/task-plan.md"));
81
+ assert.ok(!result.includes("{{"));
82
+ });
83
+
64
84
  test("plan-slice prompt: footer references gsd_plan_slice tool, not direct write", () => {
65
85
  const result = loadPrompt("plan-slice", { ...BASE_VARS, commitInstruction: "Do not commit." });
66
86
  assert.ok(
@@ -91,7 +111,7 @@ test("domain-work prompts use skillActivation placeholder", () => {
91
111
 
92
112
  test("skillActivation default leaves no unresolved placeholder", () => {
93
113
  const result = loadPromptWithDefaultSkillActivation("execute-task", {
94
- workingDirectory: "/tmp/test-project",
114
+ workingDirectory: fixtureRoot,
95
115
  milestoneId: "M001",
96
116
  sliceId: "S01",
97
117
  sliceTitle: "Test Slice",
@@ -104,7 +124,8 @@ test("skillActivation default leaves no unresolved placeholder", () => {
104
124
  carryForwardSection: "Carry forward",
105
125
  resumeSection: "Resume",
106
126
  priorTaskLines: "- (no prior tasks)",
107
- taskSummaryPath: "/tmp/test-project/.gsd/milestones/M001/slices/S01/tasks/T01-SUMMARY.md",
127
+ templatesDir: join(fixtureRoot, "templates"),
128
+ taskSummaryPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "tasks", "T01-SUMMARY.md"),
108
129
  inlinedTemplates: "Template",
109
130
  verificationBudget: "~10K chars",
110
131
  overridesSection: "",
@@ -116,7 +137,7 @@ test("skillActivation default leaves no unresolved placeholder", () => {
116
137
 
117
138
  test("custom skillActivation is substituted into execute-task", () => {
118
139
  const result = loadPrompt("execute-task", {
119
- workingDirectory: "/tmp/test-project",
140
+ workingDirectory: fixtureRoot,
120
141
  milestoneId: "M001",
121
142
  sliceId: "S01",
122
143
  sliceTitle: "Test Slice",
@@ -129,7 +150,8 @@ test("custom skillActivation is substituted into execute-task", () => {
129
150
  carryForwardSection: "Carry forward",
130
151
  resumeSection: "Resume",
131
152
  priorTaskLines: "- (no prior tasks)",
132
- taskSummaryPath: "/tmp/test-project/.gsd/milestones/M001/slices/S01/tasks/T01-SUMMARY.md",
153
+ templatesDir: join(fixtureRoot, "templates"),
154
+ taskSummaryPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "tasks", "T01-SUMMARY.md"),
133
155
  inlinedTemplates: "Template",
134
156
  verificationBudget: "~10K chars",
135
157
  overridesSection: "",
@@ -153,12 +175,12 @@ test("guided resume prompt substitutes skillActivation", () => {
153
175
 
154
176
  test("research-milestone prompt substitutes skillActivation", () => {
155
177
  const result = loadPrompt("research-milestone", {
156
- workingDirectory: "/tmp/test-project",
178
+ workingDirectory: fixtureRoot,
157
179
  milestoneId: "M001",
158
180
  milestoneTitle: "Test Milestone",
159
181
  milestonePath: ".gsd/milestones/M001",
160
182
  contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
161
- outputPath: "/tmp/test-project/.gsd/milestones/M001/M001-RESEARCH.md",
183
+ outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
162
184
  inlinedContext: "Context",
163
185
  skillDiscoveryMode: "manual",
164
186
  skillDiscoveryInstructions: " Discover skills manually.",
@@ -171,12 +193,12 @@ test("research-milestone prompt substitutes skillActivation", () => {
171
193
 
172
194
  test("research-milestone prompt references gsd_summary_save, not direct write", () => {
173
195
  const result = loadPrompt("research-milestone", {
174
- workingDirectory: "/tmp/test-project",
196
+ workingDirectory: fixtureRoot,
175
197
  milestoneId: "M001",
176
198
  milestoneTitle: "Test Milestone",
177
199
  milestonePath: ".gsd/milestones/M001",
178
200
  contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
179
- outputPath: "/tmp/test-project/.gsd/milestones/M001/M001-RESEARCH.md",
201
+ outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
180
202
  inlinedContext: "Context",
181
203
  skillDiscoveryMode: "manual",
182
204
  skillDiscoveryInstructions: " Discover skills manually.",
@@ -199,7 +221,7 @@ test("research-milestone prompt references gsd_summary_save, not direct write",
199
221
 
200
222
  test("research-slice prompt substitutes skillActivation", () => {
201
223
  const result = loadPrompt("research-slice", {
202
- workingDirectory: "/tmp/test-project",
224
+ workingDirectory: fixtureRoot,
203
225
  milestoneId: "M001",
204
226
  sliceId: "S01",
205
227
  sliceTitle: "Test Slice",
@@ -207,7 +229,7 @@ test("research-slice prompt substitutes skillActivation", () => {
207
229
  roadmapPath: ".gsd/milestones/M001/M001-ROADMAP.md",
208
230
  contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
209
231
  milestoneResearchPath: ".gsd/milestones/M001/M001-RESEARCH.md",
210
- outputPath: "/tmp/test-project/.gsd/milestones/M001/slices/S01/S01-RESEARCH.md",
232
+ outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "S01-RESEARCH.md"),
211
233
  inlinedContext: "Context",
212
234
  dependencySummaries: "",
213
235
  skillDiscoveryMode: "manual",
@@ -221,15 +243,15 @@ test("research-slice prompt substitutes skillActivation", () => {
221
243
 
222
244
  test("plan-milestone prompt substitutes skillActivation", () => {
223
245
  const result = loadPrompt("plan-milestone", {
224
- workingDirectory: "/tmp/test-project",
246
+ workingDirectory: fixtureRoot,
225
247
  milestoneId: "M001",
226
248
  milestoneTitle: "Test Milestone",
227
249
  milestonePath: ".gsd/milestones/M001",
228
250
  contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
229
251
  researchPath: ".gsd/milestones/M001/M001-RESEARCH.md",
230
- researchOutputPath: "/tmp/test-project/.gsd/milestones/M001/M001-RESEARCH.md",
231
- outputPath: "/tmp/test-project/.gsd/milestones/M001/M001-ROADMAP.md",
232
- secretsOutputPath: "/tmp/test-project/.gsd/milestones/M001/M001-SECRETS.md",
252
+ researchOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
253
+ outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-ROADMAP.md"),
254
+ secretsOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-SECRETS.md"),
233
255
  inlinedContext: "Context",
234
256
  sourceFilePaths: "- source",
235
257
  skillDiscoveryMode: "manual",
@@ -241,6 +263,33 @@ test("plan-milestone prompt substitutes skillActivation", () => {
241
263
  assert.ok(!result.includes("{{skillActivation}}"));
242
264
  });
243
265
 
266
+ test("plan-milestone prompt: compact planning gates survive template substitution", () => {
267
+ const result = loadPrompt("plan-milestone", {
268
+ workingDirectory: fixtureRoot,
269
+ milestoneId: "M001",
270
+ milestoneTitle: "Test Milestone",
271
+ milestonePath: ".gsd/milestones/M001",
272
+ contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
273
+ researchPath: ".gsd/milestones/M001/M001-RESEARCH.md",
274
+ researchOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
275
+ outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-ROADMAP.md"),
276
+ secretsOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-SECRETS.md"),
277
+ inlinedContext: "Context",
278
+ sourceFilePaths: "- source",
279
+ skillDiscoveryMode: "manual",
280
+ skillDiscoveryInstructions: " Discover skills manually.",
281
+ skillActivation: "Load milestone planning skills first.",
282
+ });
283
+
284
+ assert.ok(result.includes("Already Planned? Soft Brake"));
285
+ assert.ok(result.includes("gsd_plan_milestone"));
286
+ assert.ok(result.includes("Dependency format is comma-separated"));
287
+ assert.ok(result.includes("phases.progressive_planning"));
288
+ assert.ok(result.includes("Single-Slice Fast Path"));
289
+ assert.ok(result.includes("Secrets Manifest"));
290
+ assert.ok(!result.includes("{{"));
291
+ });
292
+
244
293
  test("guided research slice prompt substitutes skillActivation", () => {
245
294
  const result = loadPrompt("guided-research-slice", {
246
295
  milestoneId: "M001",
@@ -1,3 +1,5 @@
1
+ // GSD Extension — Plan-slice tool integration tests.
2
+
1
3
  import test from 'node:test';
2
4
  import assert from 'node:assert/strict';
3
5
  import { mkdtempSync, mkdirSync, rmSync, readFileSync, existsSync, writeFileSync } from 'node:fs';
@@ -8,6 +10,7 @@ import { openDatabase, closeDatabase, insertMilestone, insertSlice, getSlice, ge
8
10
  import { handlePlanSlice } from '../tools/plan-slice.ts';
9
11
  import { parsePlan } from '../parsers-legacy.ts';
10
12
  import { parseTaskPlanFile } from '../files.ts';
13
+ import { deriveState, invalidateStateCache } from '../state.ts';
11
14
 
12
15
  function makeTmpBase(): string {
13
16
  const base = mkdtempSync(join(tmpdir(), 'gsd-plan-slice-'));
@@ -98,6 +101,30 @@ test('handlePlanSlice writes slice/task planning state and renders plan artifact
98
101
  }
99
102
  });
100
103
 
104
+ test('handlePlanSlice advances DB-derived state out of planning immediately', async () => {
105
+ const base = makeTmpBase();
106
+ openDatabase(join(base, '.gsd', 'gsd.db'));
107
+
108
+ try {
109
+ seedParentSlice();
110
+
111
+ invalidateStateCache();
112
+ const before = await deriveState(base);
113
+ assert.equal(before.phase, 'planning');
114
+ assert.equal(before.progress?.tasks?.total, 0);
115
+
116
+ const result = await handlePlanSlice(validParams(), base);
117
+ assert.ok(!('error' in result), `unexpected error: ${'error' in result ? result.error : ''}`);
118
+
119
+ invalidateStateCache();
120
+ const after = await deriveState(base);
121
+ assert.notEqual(after.phase, 'planning');
122
+ assert.equal(after.progress?.tasks?.total, 2);
123
+ } finally {
124
+ cleanup(base);
125
+ }
126
+ });
127
+
101
128
  test('handlePlanSlice leaves omitted enrichment fields empty instead of rendering placeholders', async () => {
102
129
  const base = makeTmpBase();
103
130
  openDatabase(join(base, '.gsd', 'gsd.db'));
@@ -304,6 +304,30 @@ describe("resolveImportPath", () => {
304
304
  assert.ok(!result.exists);
305
305
  assert.equal(result.resolvedPath, null);
306
306
  });
307
+
308
+ test("resolves dotted TS module stem like .server via extension probing", (t) => {
309
+ const dir = mkdtempSync(join(tmpdir(), "post-exec-test-server-dot-"));
310
+ t.after(() => rmSync(dir, { recursive: true, force: true }));
311
+ mkdirSync(join(dir, "src"), { recursive: true });
312
+ writeFileSync(join(dir, "src", "route.server.ts"), "export {};\n");
313
+ writeFileSync(join(dir, "src", "main.ts"), "");
314
+
315
+ const result = resolveImportPath("./route.server", "src/main.ts", dir);
316
+ assert.ok(result.exists);
317
+ assert.ok(result.resolvedPath?.endsWith("route.server.ts"));
318
+ });
319
+
320
+ test("missing unknown explicit extension does not match code-extension shadow", (t) => {
321
+ const dir = mkdtempSync(join(tmpdir(), "post-exec-test-unknown-shadow-"));
322
+ t.after(() => rmSync(dir, { recursive: true, force: true }));
323
+ mkdirSync(join(dir, "src"), { recursive: true });
324
+ writeFileSync(join(dir, "src", "video.mp4.ts"), "export {};\n");
325
+ writeFileSync(join(dir, "src", "main.ts"), "");
326
+
327
+ const result = resolveImportPath("./video.mp4", "src/main.ts", dir);
328
+ assert.ok(!result.exists);
329
+ assert.equal(result.resolvedPath, null);
330
+ });
307
331
  });
308
332
 
309
333
  // ─── Import Resolution Check Tests ───────────────────────────────────────────
@@ -334,6 +358,28 @@ describe("checkImportResolution", () => {
334
358
  }
335
359
  });
336
360
 
361
+ test("ignores generated React Router +types imports", () => {
362
+ tempDir = join(tmpdir(), `post-exec-test-${Date.now()}`);
363
+ mkdirSync(tempDir, { recursive: true });
364
+ mkdirSync(join(tempDir, "app", "routes"), { recursive: true });
365
+ writeFileSync(
366
+ join(tempDir, "app", "routes", "root.tsx"),
367
+ "import type { Route } from './+types/root';\nexport default function Root() { return null; }"
368
+ );
369
+
370
+ try {
371
+ const task = createTask({
372
+ id: "T01",
373
+ key_files: ["app/routes/root.tsx"],
374
+ });
375
+
376
+ const results = checkImportResolution(task, [], tempDir);
377
+ assert.deepEqual(results, []);
378
+ } finally {
379
+ rmSync(tempDir, { recursive: true, force: true });
380
+ }
381
+ });
382
+
337
383
  test("fails when import doesn't resolve", () => {
338
384
  tempDir = join(tmpdir(), `post-exec-test-${Date.now()}`);
339
385
  mkdirSync(tempDir, { recursive: true });
@@ -0,0 +1,102 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Golden-fixture equivalence tests pinning PR-body output for buildPrEvidence and formatSwarmLanePRBody.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { readFileSync, writeFileSync } from "node:fs";
7
+ import { fileURLToPath } from "node:url";
8
+ import { dirname, join } from "node:path";
9
+
10
+ import { buildPrEvidence, type PrEvidenceInput } from "../pr-evidence.ts";
11
+ import {
12
+ formatSwarmLanePRBody,
13
+ type SwarmLanePRData,
14
+ } from "../../github-sync/templates.ts";
15
+
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const FIXTURES_DIR = join(__dirname, "fixtures", "pr-body");
18
+
19
+ const UPDATE = process.env.UPDATE_GOLDENS === "1";
20
+
21
+ function compareGolden(name: string, actual: string): void {
22
+ const path = join(FIXTURES_DIR, name);
23
+ if (UPDATE) {
24
+ writeFileSync(path, actual, "utf8");
25
+ return;
26
+ }
27
+ const expected = readFileSync(path, "utf8");
28
+ assert.equal(actual, expected, `golden mismatch for ${name}`);
29
+ }
30
+
31
+ const SHIP_BASIC: PrEvidenceInput = {
32
+ milestoneId: "M001",
33
+ milestoneTitle: "Authentication",
34
+ changeType: "feat",
35
+ linkedIssue: "Closes #123",
36
+ summaries: ["### S01\nImplemented login flow."],
37
+ roadmapItems: ["- [x] **S01: Login**"],
38
+ metrics: ["**Units executed:** 3"],
39
+ testsRun: ["npm test", "npm run typecheck:extensions"],
40
+ why: "Users need to authenticate before accessing protected resources.",
41
+ how: "Added password hash check and session token issuance.",
42
+ rollbackNotes: ["Revert the merge commit."],
43
+ };
44
+
45
+ const SHIP_EMPTY_OPTIONALS: PrEvidenceInput = {
46
+ milestoneId: "M001",
47
+ milestoneTitle: "Authentication",
48
+ changeType: "feat",
49
+ };
50
+
51
+ const SWARM_WITH_BLOCKERS: SwarmLanePRData = {
52
+ lane: {
53
+ id: "writer",
54
+ branch: "lane/single-writer",
55
+ owner: "@owner",
56
+ latestCommit: "abc1234",
57
+ changedContracts: ["WriterToken"],
58
+ testEvidence: ["npm run typecheck:extensions"],
59
+ blockers: ["Awaiting state-lane writer-sequence merge", "Parity report incomplete"],
60
+ },
61
+ impactArea: "Single-writer UOK metadata.",
62
+ transitionRisks: ["Writer token lifecycle regression"],
63
+ rollbackPlan: ["Disable writer sequence enrichment"],
64
+ linkedIssue: 123,
65
+ };
66
+
67
+ const SWARM_NO_BLOCKERS: SwarmLanePRData = {
68
+ lane: {
69
+ id: "writer",
70
+ branch: "lane/single-writer",
71
+ owner: "@owner",
72
+ latestCommit: "abc1234",
73
+ changedContracts: ["WriterToken"],
74
+ testEvidence: ["npm run typecheck:extensions"],
75
+ },
76
+ impactArea: "Single-writer UOK metadata.",
77
+ transitionRisks: ["Writer token lifecycle regression"],
78
+ rollbackPlan: ["Disable writer sequence enrichment"],
79
+ linkedIssue: 123,
80
+ };
81
+
82
+ test("pr-evidence golden: commands-ship basic", () => {
83
+ compareGolden("commands-ship-basic.md", buildPrEvidence(SHIP_BASIC).body);
84
+ });
85
+
86
+ test("pr-evidence golden: commands-ship empty optionals", () => {
87
+ compareGolden("commands-ship-empty-optionals.md", buildPrEvidence(SHIP_EMPTY_OPTIONALS).body);
88
+ });
89
+
90
+ test("pr-evidence golden: swarm-lane with blockers", () => {
91
+ const body = formatSwarmLanePRBody(SWARM_WITH_BLOCKERS);
92
+ compareGolden("swarm-lane-with-blockers.md", body);
93
+ // Cross-check: top-level ## Blockers heading must appear (regression guard
94
+ // for the silent-drop fixed in this PR).
95
+ assert.ok(body.includes("\n## Blockers\n"), "swarm-lane body must emit a top-level ## Blockers heading");
96
+ });
97
+
98
+ test("pr-evidence golden: swarm-lane no blockers (no Blockers heading)", () => {
99
+ const body = formatSwarmLanePRBody(SWARM_NO_BLOCKERS);
100
+ compareGolden("swarm-lane-no-blockers.md", body);
101
+ assert.ok(!body.includes("## Blockers"), "swarm-lane body without blockers must not emit ## Blockers heading");
102
+ });
@@ -0,0 +1,165 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Hardening tests for buildPrEvidence — HTML-comment stripping, fake commit-trailer removal, and per-item length capping.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+
7
+ import { buildPrEvidence, type PrEvidenceInput } from "../pr-evidence.ts";
8
+
9
+ test("pr-evidence hardening: strips HTML comments from summaries", () => {
10
+ const evidence = buildPrEvidence({
11
+ milestoneId: "M001",
12
+ summaries: ["visible<!-- hidden secret -->tail"],
13
+ });
14
+ assert.ok(!evidence.body.includes("<!--"), "raw <!-- must not appear");
15
+ assert.ok(!evidence.body.includes("hidden secret"), "comment contents must be stripped");
16
+ assert.ok(evidence.body.includes("visibletail"), "non-comment text must remain");
17
+ });
18
+
19
+ test("pr-evidence hardening: removes Co-Authored-By trailer from why", () => {
20
+ const evidence = buildPrEvidence({
21
+ milestoneId: "M001",
22
+ why: "Real reason here.\nCo-Authored-By: Evil <e@evil.com>\nMore reason.",
23
+ });
24
+ assert.ok(!evidence.body.includes("Evil <e@evil.com>"));
25
+ assert.ok(!/Co-Authored-By:/i.test(evidence.body));
26
+ assert.ok(evidence.body.includes("Real reason here."));
27
+ assert.ok(evidence.body.includes("More reason."));
28
+ });
29
+
30
+ test("pr-evidence hardening: removes Signed-off-by trailer from how", () => {
31
+ const evidence = buildPrEvidence({
32
+ milestoneId: "M001",
33
+ how: "Step one.\nSigned-off-by: Forged <f@x.com>\nStep two.",
34
+ });
35
+ assert.ok(!evidence.body.includes("Forged <f@x.com>"));
36
+ assert.ok(!/Signed-off-by:/i.test(evidence.body));
37
+ assert.ok(evidence.body.includes("Step one."));
38
+ assert.ok(evidence.body.includes("Step two."));
39
+ });
40
+
41
+ test("pr-evidence hardening: trailer-name match is case-insensitive", () => {
42
+ const evidence = buildPrEvidence({
43
+ milestoneId: "M001",
44
+ why: "ok\nco-authored-by: lower <l@l.com>\nSIGNED-OFF-BY: upper <u@u.com>\nend",
45
+ });
46
+ assert.ok(!evidence.body.includes("lower <l@l.com>"));
47
+ assert.ok(!evidence.body.includes("upper <u@u.com>"));
48
+ assert.ok(evidence.body.includes("ok"));
49
+ assert.ok(evidence.body.includes("end"));
50
+ });
51
+
52
+ test("pr-evidence hardening: caps oversize summaries item with truncation suffix", () => {
53
+ const big = "A".repeat(5 * 1024); // 5 KB
54
+ const evidence = buildPrEvidence({
55
+ milestoneId: "M001",
56
+ summaries: [big],
57
+ });
58
+ // Find the truncated A-block in the body and assert it is bounded.
59
+ const lines = evidence.body.split("\n");
60
+ const longLine = lines.find((l) => l.startsWith("AAAA"));
61
+ assert.ok(longLine, "expected truncated A-line in body");
62
+ assert.ok(longLine!.endsWith(" … [truncated]"), "must end with truncation suffix");
63
+ assert.ok(
64
+ Buffer.byteLength(longLine!, "utf8") <= 2048,
65
+ `truncated item must be within 2 KB cap, got ${Buffer.byteLength(longLine!, "utf8")}`,
66
+ );
67
+ });
68
+
69
+ test("pr-evidence hardening: HTML comment split across summary items is preserved literally", () => {
70
+ // Documented behavior: each item is sanitized independently. A comment
71
+ // that begins in one item and closes in the next is NOT joined, so the
72
+ // open/close markers remain as literal text. This is intentional — joining
73
+ // items before sanitizing would let an attacker straddle items to inject
74
+ // an aligned comment that hides the second item from rendered view.
75
+ const evidence = buildPrEvidence({
76
+ milestoneId: "M001",
77
+ summaries: ["first item ends <!--", "--> second item begins"],
78
+ });
79
+ // The literal markers survive because each item was sanitized alone.
80
+ assert.ok(evidence.body.includes("<!--"), "open marker preserved as literal");
81
+ assert.ok(evidence.body.includes("-->"), "close marker preserved as literal");
82
+ assert.ok(evidence.body.includes("first item ends"));
83
+ assert.ok(evidence.body.includes("second item begins"));
84
+ });
85
+
86
+ test("pr-evidence hardening: clean input is byte-identical to pre-hardening output", () => {
87
+ // This test is the contract that protects the golden fixtures: the
88
+ // sanitizer must be a true no-op for well-formed input. If this fails,
89
+ // there is a bug in the sanitizer (not in the goldens).
90
+ const cleanInput: PrEvidenceInput = {
91
+ milestoneId: "M001",
92
+ milestoneTitle: "Authentication",
93
+ changeType: "feat",
94
+ linkedIssue: "Closes #123",
95
+ summaries: ["### S01\nImplemented login flow."],
96
+ blockers: ["Awaiting design review"],
97
+ roadmapItems: ["- [x] **S01: Login**"],
98
+ metrics: ["**Units executed:** 3"],
99
+ testsRun: ["npm test", "npm run typecheck:extensions"],
100
+ why: "Users need to authenticate before accessing protected resources.",
101
+ how: "Added password hash check and session token issuance.",
102
+ rollbackNotes: ["Revert the merge commit."],
103
+ };
104
+
105
+ const expected = [
106
+ "## TL;DR",
107
+ "",
108
+ "**What:** Ship milestone M001 - Authentication",
109
+ "**Why:** Users need to authenticate before accessing protected resources.",
110
+ "**How:** Added password hash check and session token issuance.",
111
+ "",
112
+ "## What",
113
+ "",
114
+ "### S01\nImplemented login flow.",
115
+ "",
116
+ "## Blockers",
117
+ "",
118
+ "- Awaiting design review",
119
+ "",
120
+ "## Why",
121
+ "",
122
+ "Users need to authenticate before accessing protected resources.",
123
+ "",
124
+ "## How",
125
+ "",
126
+ "Added password hash check and session token issuance.",
127
+ "",
128
+ "## Linked Issue",
129
+ "",
130
+ "Closes #123",
131
+ "",
132
+ "## Roadmap",
133
+ "",
134
+ "- [x] **S01: Login**",
135
+ "",
136
+ "## Metrics",
137
+ "",
138
+ "- **Units executed:** 3",
139
+ "",
140
+ "## Tests Run",
141
+ "",
142
+ "- npm test",
143
+ "- npm run typecheck:extensions",
144
+ "",
145
+ "## Change Type",
146
+ "",
147
+ "- [x] `feat` - New feature or capability",
148
+ "- [ ] `fix` - Bug fix",
149
+ "- [ ] `refactor` - Code restructuring",
150
+ "- [ ] `test` - Adding or updating tests",
151
+ "- [ ] `docs` - Documentation only",
152
+ "- [ ] `chore` - Build, CI, or tooling changes",
153
+ "",
154
+ "## Rollback And Compatibility",
155
+ "",
156
+ "- Revert the merge commit.",
157
+ "",
158
+ "## AI Assistance Disclosure",
159
+ "",
160
+ "This PR was prepared with AI assistance.",
161
+ ].join("\n");
162
+
163
+ const actual = buildPrEvidence(cleanInput).body;
164
+ assert.equal(actual, expected, "clean input must produce byte-identical output (sanitizer is no-op)");
165
+ });
@@ -0,0 +1,79 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Tests for the shared GSD pull request evidence generator.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+
7
+ import { buildPrEvidence, type PrChangeType } from "../pr-evidence.ts";
8
+
9
+ test("pr-evidence: generated body includes contribution-required sections", () => {
10
+ const evidence = buildPrEvidence({
11
+ milestoneId: "M001",
12
+ milestoneTitle: "Authentication",
13
+ linkedIssue: "Closes #123",
14
+ summaries: ["### S01\nImplemented login."],
15
+ roadmapItems: ["- [x] **S01: Login**"],
16
+ metrics: ["**Units executed:** 3"],
17
+ testsRun: ["npm test"],
18
+ rollbackNotes: ["Revert the merge commit."],
19
+ });
20
+
21
+ assert.equal(evidence.title, "feat: Authentication");
22
+ for (const section of [
23
+ "## TL;DR",
24
+ "## What",
25
+ "## Why",
26
+ "## How",
27
+ "## Linked Issue",
28
+ "## Tests Run",
29
+ "## Change Type",
30
+ "## Rollback And Compatibility",
31
+ "## AI Assistance Disclosure",
32
+ ]) {
33
+ assert.ok(evidence.body.includes(section), `missing section: ${section}`);
34
+ }
35
+ assert.ok(evidence.body.includes("Closes #123"));
36
+ assert.ok(evidence.body.includes("npm test"));
37
+ assert.ok(evidence.body.includes("This PR was prepared with AI assistance."));
38
+ });
39
+
40
+ test("pr-evidence: every change type selects exactly one checklist row", () => {
41
+ const changeTypes: PrChangeType[] = ["feat", "fix", "refactor", "test", "docs", "chore"];
42
+
43
+ for (const changeType of changeTypes) {
44
+ const evidence = buildPrEvidence({ milestoneId: "M001", changeType });
45
+ const checkedRows = evidence.body.split("\n").filter((line) => line.startsWith("- [x] `"));
46
+ assert.deepEqual(checkedRows, [
47
+ `- [x] \`${changeType}\` - ${{
48
+ feat: "New feature or capability",
49
+ fix: "Bug fix",
50
+ refactor: "Code restructuring",
51
+ test: "Adding or updating tests",
52
+ docs: "Documentation only",
53
+ chore: "Build, CI, or tooling changes",
54
+ }[changeType]}`,
55
+ ]);
56
+ }
57
+ });
58
+
59
+ test("pr-evidence: missing issue, tests, and rollback data are explicit", () => {
60
+ const evidence = buildPrEvidence({ milestoneId: "M001", aiAssisted: false });
61
+
62
+ assert.ok(evidence.body.includes("Not specified. Add an issue link"));
63
+ assert.ok(evidence.body.includes("Not specified. Add exact verification commands"));
64
+ assert.ok(evidence.body.includes("No behavior-changing rollback notes recorded."));
65
+ assert.ok(!evidence.body.includes("## AI Assistance Disclosure"));
66
+ });
67
+
68
+ test("pr-evidence: subject metadata supports non-milestone PRs", () => {
69
+ const evidence = buildPrEvidence({
70
+ milestoneId: "M001",
71
+ subjectId: "S01",
72
+ subjectKind: "slice",
73
+ milestoneTitle: "Auth Slice",
74
+ });
75
+
76
+ assert.equal(evidence.title, "feat: Auth Slice");
77
+ assert.ok(evidence.body.includes("Ship slice S01 - Auth Slice"));
78
+ assert.ok(evidence.body.includes("Slice work is complete and ready for review."));
79
+ });