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

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 (607) hide show
  1. package/dist/{cli-web-branch.d.ts → cli/cli-web-branch.d.ts} +1 -1
  2. package/dist/{cli-web-branch.js → cli/cli-web-branch.js} +3 -3
  3. package/dist/{cli.js → cli/cli.js} +25 -25
  4. package/dist/{web-mode.js → cli/web-mode.js} +3 -3
  5. package/dist/{extension-registry.js → extension-runtime/extension-registry.js} +1 -1
  6. package/dist/{headless-query.d.ts → headless/headless-query.d.ts} +1 -1
  7. package/dist/{headless-query.js → headless/headless-query.js} +3 -2
  8. package/dist/{headless-recover.js → headless/headless-recover.js} +3 -2
  9. package/dist/{headless.js → headless/headless.js} +3 -3
  10. package/dist/loader.js +10 -10
  11. package/dist/{onboarding.js → onboarding/onboarding.js} +8 -8
  12. package/dist/{welcome-screen.js → onboarding/welcome-screen.js} +1 -1
  13. package/dist/{models-resolver.js → providers/models-resolver.js} +1 -1
  14. package/dist/{remote-questions-config.js → providers/remote-questions-config.js} +1 -1
  15. package/dist/{resource-loader.d.ts → resource-runtime/resource-loader.d.ts} +1 -1
  16. package/dist/{resource-loader.js → resource-runtime/resource-loader.js} +6 -6
  17. package/dist/resources/.managed-resources-content-hash +1 -1
  18. package/dist/resources/extensions/github-sync/templates.js +55 -70
  19. package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
  20. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  21. package/dist/resources/extensions/gsd/auto/loop.js +362 -523
  22. package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
  23. package/dist/resources/extensions/gsd/auto/phases.js +55 -6
  24. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  29. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  30. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  31. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  32. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  33. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  34. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  35. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  36. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  37. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  38. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  39. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  40. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  41. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  42. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  43. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  44. package/dist/resources/extensions/gsd/auto-dashboard.js +3 -0
  45. package/dist/resources/extensions/gsd/auto-prompts.js +168 -3
  46. package/dist/resources/extensions/gsd/auto-recovery.js +45 -52
  47. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  48. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  49. package/dist/resources/extensions/gsd/auto-worktree.js +85 -38
  50. package/dist/resources/extensions/gsd/auto.js +162 -5
  51. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +9 -1
  52. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  53. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -5
  54. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  55. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  56. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  57. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  58. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  59. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  60. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  61. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  62. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  63. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  64. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  65. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  66. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  67. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  68. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  69. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  70. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  71. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  72. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  73. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  74. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  75. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  76. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  77. package/dist/resources/extensions/gsd/escalation.js +2 -0
  78. package/dist/resources/extensions/gsd/graph.js +9 -3
  79. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  80. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  81. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  82. package/dist/resources/extensions/gsd/model-router.js +9 -6
  83. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  84. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  85. package/dist/resources/extensions/gsd/pr-evidence.js +76 -0
  86. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  87. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  88. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  89. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  90. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  91. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  92. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  93. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  94. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  95. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  96. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  97. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  98. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  99. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  100. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  101. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  102. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  103. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  104. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  105. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  106. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  107. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  108. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  109. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  110. package/dist/resources/extensions/gsd/state.js +4 -0
  111. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  112. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  113. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +6 -1
  114. package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
  115. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  116. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  117. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  118. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  119. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  120. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  121. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  122. package/dist/{security-overrides.js → security/security-overrides.js} +1 -1
  123. package/dist/{startup-model-validation.js → startup/startup-model-validation.js} +1 -1
  124. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  125. package/dist/{update-check.js → update/update-check.js} +1 -1
  126. package/dist/web/standalone/.next/BUILD_ID +1 -1
  127. package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
  128. package/dist/web/standalone/.next/build-manifest.json +2 -2
  129. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  130. package/dist/web/standalone/.next/required-server-files.json +1 -1
  131. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  132. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  140. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  146. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  147. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  154. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  155. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  169. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  175. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  180. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  186. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  190. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  192. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  193. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  194. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  196. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  198. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  200. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  202. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  204. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  205. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  206. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  207. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  208. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +3 -3
  209. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  210. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  212. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  215. package/dist/web/standalone/.next/server/app/index.html +1 -1
  216. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  217. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  218. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  219. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  220. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  221. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  222. package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
  223. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  224. package/dist/web/standalone/.next/server/chunks/7020.js +12 -0
  225. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  226. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  227. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  228. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  229. package/dist/web/standalone/package.json +1 -0
  230. package/dist/web/standalone/server.js +1 -1
  231. package/dist/{worktree-cli.js → worktrees/worktree-cli.js} +3 -2
  232. package/package.json +12 -5
  233. package/packages/contracts/dist/index.d.ts +3 -0
  234. package/packages/contracts/dist/index.d.ts.map +1 -0
  235. package/packages/contracts/dist/index.js +5 -0
  236. package/packages/contracts/dist/index.js.map +1 -0
  237. package/packages/contracts/dist/rpc.d.ts +549 -0
  238. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  239. package/packages/contracts/dist/rpc.js +53 -0
  240. package/packages/contracts/dist/rpc.js.map +1 -0
  241. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  242. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  243. package/packages/contracts/dist/rpc.test.js +47 -0
  244. package/packages/contracts/dist/rpc.test.js.map +1 -0
  245. package/packages/contracts/dist/workflow.d.ts +180 -0
  246. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  247. package/packages/contracts/dist/workflow.js +201 -0
  248. package/packages/contracts/dist/workflow.js.map +1 -0
  249. package/packages/contracts/package.json +39 -0
  250. package/packages/contracts/src/index.ts +5 -0
  251. package/packages/contracts/src/rpc.test.ts +72 -0
  252. package/packages/contracts/src/rpc.ts +286 -0
  253. package/packages/contracts/src/workflow.ts +213 -0
  254. package/packages/contracts/tsconfig.json +25 -0
  255. package/packages/daemon/package.json +3 -2
  256. package/packages/daemon/src/event-bridge.test.ts +2 -1
  257. package/packages/daemon/src/event-bridge.ts +1 -1
  258. package/packages/daemon/src/event-formatter.test.ts +1 -2
  259. package/packages/daemon/src/event-formatter.ts +1 -2
  260. package/packages/daemon/src/session-manager.ts +2 -2
  261. package/packages/daemon/src/types.ts +3 -18
  262. package/packages/mcp-server/dist/server.d.ts +13 -0
  263. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  264. package/packages/mcp-server/dist/server.js +77 -0
  265. package/packages/mcp-server/dist/server.js.map +1 -1
  266. package/packages/mcp-server/dist/session-manager.js +1 -1
  267. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  268. package/packages/mcp-server/dist/types.d.ts +3 -11
  269. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  270. package/packages/mcp-server/dist/types.js.map +1 -1
  271. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  272. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  273. package/packages/mcp-server/dist/workflow-tools.js +2 -40
  274. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  275. package/packages/mcp-server/package.json +3 -2
  276. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  277. package/packages/mcp-server/src/server.ts +99 -1
  278. package/packages/mcp-server/src/session-manager.ts +2 -2
  279. package/packages/mcp-server/src/types.ts +7 -18
  280. package/packages/mcp-server/src/workflow-tools.ts +2 -40
  281. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  282. package/packages/native/package.json +1 -1
  283. package/packages/pi-agent-core/package.json +1 -1
  284. package/packages/pi-ai/package.json +1 -1
  285. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +14 -0
  286. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  287. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  288. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  289. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  290. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -1
  291. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  292. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +9 -1
  293. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +31 -10
  295. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  297. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  299. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  300. package/packages/pi-coding-agent/package.json +2 -1
  301. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +23 -2
  302. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  303. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +6 -1
  304. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -9
  305. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  306. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  307. package/packages/pi-tui/dist/__tests__/tui.test.js +25 -3
  308. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  309. package/packages/pi-tui/dist/tui.d.ts +3 -1
  310. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  311. package/packages/pi-tui/dist/tui.js +3 -1
  312. package/packages/pi-tui/dist/tui.js.map +1 -1
  313. package/packages/pi-tui/package.json +1 -1
  314. package/packages/pi-tui/src/__tests__/tui.test.ts +30 -3
  315. package/packages/pi-tui/src/tui.ts +3 -1
  316. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  317. package/packages/rpc-client/README.md +3 -3
  318. package/packages/rpc-client/dist/index.d.ts +1 -1
  319. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  320. package/packages/rpc-client/dist/index.js.map +1 -1
  321. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  322. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  323. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  324. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  325. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  326. package/packages/rpc-client/dist/rpc-types.js +3 -11
  327. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  328. package/packages/rpc-client/package.json +4 -1
  329. package/packages/rpc-client/src/index.ts +1 -1
  330. package/packages/rpc-client/src/rpc-client.ts +3 -6
  331. package/packages/rpc-client/src/rpc-types.ts +3 -398
  332. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  333. package/pkg/package.json +1 -1
  334. package/src/resources/extensions/github-sync/templates.ts +59 -84
  335. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  336. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  337. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  338. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  339. package/src/resources/extensions/gsd/auto/loop.ts +414 -598
  340. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  341. package/src/resources/extensions/gsd/auto/phases.ts +82 -8
  342. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  343. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  344. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  345. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  346. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  347. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  348. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  349. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  350. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  351. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  352. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  353. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  354. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  355. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  356. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  357. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  358. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  359. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  360. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  361. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  362. package/src/resources/extensions/gsd/auto-dashboard.ts +4 -0
  363. package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
  364. package/src/resources/extensions/gsd/auto-recovery.ts +42 -50
  365. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  366. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  367. package/src/resources/extensions/gsd/auto-worktree.ts +83 -36
  368. package/src/resources/extensions/gsd/auto.ts +170 -4
  369. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +14 -1
  370. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  371. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +13 -5
  372. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  373. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  374. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  375. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  376. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  377. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  378. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  379. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  380. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  381. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  382. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  383. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  384. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  385. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  386. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  387. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  388. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  389. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  390. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  391. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  392. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  393. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  394. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  395. package/src/resources/extensions/gsd/escalation.ts +3 -1
  396. package/src/resources/extensions/gsd/graph.ts +12 -5
  397. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  398. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  399. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  400. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  401. package/src/resources/extensions/gsd/model-router.ts +10 -6
  402. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  403. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  404. package/src/resources/extensions/gsd/pr-evidence.ts +124 -0
  405. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  406. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  407. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  408. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  409. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  410. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  411. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  412. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  413. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  414. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  415. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  416. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  417. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  418. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  419. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  420. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  421. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  422. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  423. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  424. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  425. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  426. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  427. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  428. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  429. package/src/resources/extensions/gsd/state.ts +6 -3
  430. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +32 -0
  431. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +65 -0
  432. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +38 -0
  433. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  434. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  435. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  436. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  437. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  438. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  439. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  440. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  441. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  442. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  443. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  444. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  445. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  446. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  447. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  448. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  449. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  450. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  451. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  452. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  453. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  454. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  455. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  456. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  457. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  458. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  459. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  460. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  461. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  462. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  463. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  464. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  465. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  466. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  467. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  468. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  469. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  470. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  471. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  472. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +1 -1
  473. package/src/resources/extensions/gsd/tests/headless-query.test.ts +2 -2
  474. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  475. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  476. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  477. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  478. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  479. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  480. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  481. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  482. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  483. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  484. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  485. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  486. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  487. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  488. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  489. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  490. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  491. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  492. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  493. package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +1 -1
  494. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  495. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +6 -6
  496. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  497. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  498. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  499. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  500. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  501. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  502. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  503. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  504. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  505. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  506. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  507. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  508. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  509. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -7
  510. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  511. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  512. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  513. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  514. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  515. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  516. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +32 -0
  517. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  518. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  519. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  520. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +18 -34
  521. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  522. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  523. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +6 -1
  524. package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
  525. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  526. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  527. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  528. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  529. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  530. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  531. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  532. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  533. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  534. package/dist/web/standalone/.next/server/chunks/6897.js +0 -12
  535. /package/dist/{app-paths.d.ts → app/app-paths.d.ts} +0 -0
  536. /package/dist/{app-paths.js → app/app-paths.js} +0 -0
  537. /package/dist/{project-sessions.d.ts → app/project-sessions.d.ts} +0 -0
  538. /package/dist/{project-sessions.js → app/project-sessions.js} +0 -0
  539. /package/dist/{tool-bootstrap.d.ts → app/tool-bootstrap.d.ts} +0 -0
  540. /package/dist/{tool-bootstrap.js → app/tool-bootstrap.js} +0 -0
  541. /package/dist/{cli-auto-routing.d.ts → cli/cli-auto-routing.d.ts} +0 -0
  542. /package/dist/{cli-auto-routing.js → cli/cli-auto-routing.js} +0 -0
  543. /package/dist/{cli-policy.d.ts → cli/cli-policy.d.ts} +0 -0
  544. /package/dist/{cli-policy.js → cli/cli-policy.js} +0 -0
  545. /package/dist/{cli.d.ts → cli/cli.d.ts} +0 -0
  546. /package/dist/{help-text.d.ts → cli/help-text.d.ts} +0 -0
  547. /package/dist/{help-text.js → cli/help-text.js} +0 -0
  548. /package/dist/{logo.d.ts → cli/logo.d.ts} +0 -0
  549. /package/dist/{logo.js → cli/logo.js} +0 -0
  550. /package/dist/{web-mode.d.ts → cli/web-mode.d.ts} +0 -0
  551. /package/dist/{bundled-extension-paths.d.ts → extension-runtime/bundled-extension-paths.d.ts} +0 -0
  552. /package/dist/{bundled-extension-paths.js → extension-runtime/bundled-extension-paths.js} +0 -0
  553. /package/dist/{bundled-resource-path.d.ts → extension-runtime/bundled-resource-path.d.ts} +0 -0
  554. /package/dist/{bundled-resource-path.js → extension-runtime/bundled-resource-path.js} +0 -0
  555. /package/dist/{extension-discovery.d.ts → extension-runtime/extension-discovery.d.ts} +0 -0
  556. /package/dist/{extension-discovery.js → extension-runtime/extension-discovery.js} +0 -0
  557. /package/dist/{extension-registry.d.ts → extension-runtime/extension-registry.d.ts} +0 -0
  558. /package/dist/{extension-sort.d.ts → extension-runtime/extension-sort.d.ts} +0 -0
  559. /package/dist/{extension-sort.js → extension-runtime/extension-sort.js} +0 -0
  560. /package/dist/{extension-validator.d.ts → extension-runtime/extension-validator.d.ts} +0 -0
  561. /package/dist/{extension-validator.js → extension-runtime/extension-validator.js} +0 -0
  562. /package/dist/{headless-answers.d.ts → headless/headless-answers.d.ts} +0 -0
  563. /package/dist/{headless-answers.js → headless/headless-answers.js} +0 -0
  564. /package/dist/{headless-context.d.ts → headless/headless-context.d.ts} +0 -0
  565. /package/dist/{headless-context.js → headless/headless-context.js} +0 -0
  566. /package/dist/{headless-events.d.ts → headless/headless-events.d.ts} +0 -0
  567. /package/dist/{headless-events.js → headless/headless-events.js} +0 -0
  568. /package/dist/{headless-recover.d.ts → headless/headless-recover.d.ts} +0 -0
  569. /package/dist/{headless-types.d.ts → headless/headless-types.d.ts} +0 -0
  570. /package/dist/{headless-types.js → headless/headless-types.js} +0 -0
  571. /package/dist/{headless-ui.d.ts → headless/headless-ui.d.ts} +0 -0
  572. /package/dist/{headless-ui.js → headless/headless-ui.js} +0 -0
  573. /package/dist/{headless.d.ts → headless/headless.d.ts} +0 -0
  574. /package/dist/{mcp-server.d.ts → mcp/mcp-server.d.ts} +0 -0
  575. /package/dist/{mcp-server.js → mcp/mcp-server.js} +0 -0
  576. /package/dist/{onboarding.d.ts → onboarding/onboarding.d.ts} +0 -0
  577. /package/dist/{welcome-screen.d.ts → onboarding/welcome-screen.d.ts} +0 -0
  578. /package/dist/{wizard.d.ts → onboarding/wizard.d.ts} +0 -0
  579. /package/dist/{wizard.js → onboarding/wizard.js} +0 -0
  580. /package/dist/{models-resolver.d.ts → providers/models-resolver.d.ts} +0 -0
  581. /package/dist/{pi-migration.d.ts → providers/pi-migration.d.ts} +0 -0
  582. /package/dist/{pi-migration.js → providers/pi-migration.js} +0 -0
  583. /package/dist/{provider-migrations.d.ts → providers/provider-migrations.d.ts} +0 -0
  584. /package/dist/{provider-migrations.js → providers/provider-migrations.js} +0 -0
  585. /package/dist/{remote-questions-config.d.ts → providers/remote-questions-config.d.ts} +0 -0
  586. /package/dist/{rtk-shared.d.ts → rtk/rtk-shared.d.ts} +0 -0
  587. /package/dist/{rtk-shared.js → rtk/rtk-shared.js} +0 -0
  588. /package/dist/{rtk.d.ts → rtk/rtk.d.ts} +0 -0
  589. /package/dist/{rtk.js → rtk/rtk.js} +0 -0
  590. /package/dist/{security-overrides.d.ts → security/security-overrides.d.ts} +0 -0
  591. /package/dist/{claude-cli-check.d.ts → startup/claude-cli-check.d.ts} +0 -0
  592. /package/dist/{claude-cli-check.js → startup/claude-cli-check.js} +0 -0
  593. /package/dist/{runtime-checks.d.ts → startup/runtime-checks.d.ts} +0 -0
  594. /package/dist/{runtime-checks.js → startup/runtime-checks.js} +0 -0
  595. /package/dist/{startup-model-validation.d.ts → startup/startup-model-validation.d.ts} +0 -0
  596. /package/dist/{startup-timings.d.ts → startup/startup-timings.d.ts} +0 -0
  597. /package/dist/{startup-timings.js → startup/startup-timings.js} +0 -0
  598. /package/dist/{update-check.d.ts → update/update-check.d.ts} +0 -0
  599. /package/dist/{update-cmd.d.ts → update/update-cmd.d.ts} +0 -0
  600. /package/dist/{update-cmd.js → update/update-cmd.js} +0 -0
  601. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → -WDXZiiJHGZDbYH75Mu6f}/_buildManifest.js +0 -0
  602. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → -WDXZiiJHGZDbYH75Mu6f}/_ssgManifest.js +0 -0
  603. /package/dist/{worktree-cli.d.ts → worktrees/worktree-cli.d.ts} +0 -0
  604. /package/dist/{worktree-name-gen.d.ts → worktrees/worktree-name-gen.d.ts} +0 -0
  605. /package/dist/{worktree-name-gen.js → worktrees/worktree-name-gen.js} +0 -0
  606. /package/dist/{worktree-status-banner.d.ts → worktrees/worktree-status-banner.d.ts} +0 -0
  607. /package/dist/{worktree-status-banner.js → worktrees/worktree-status-banner.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,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
+ });
@@ -0,0 +1,51 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Tests for canonical process recommendations by task size.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+
7
+ import {
8
+ formatRecommendedProcessPaths,
9
+ listRecommendedProcessPaths,
10
+ recommendProcessPath,
11
+ type ProcessTaskSize,
12
+ } from "../process-task-path.ts";
13
+
14
+ test("process task paths cover every Phase 7 task size with one command", () => {
15
+ const expected: ProcessTaskSize[] = [
16
+ "hotfix",
17
+ "bugfix",
18
+ "small-feature",
19
+ "large-feature",
20
+ "architecture-change",
21
+ ];
22
+
23
+ const paths = listRecommendedProcessPaths();
24
+ assert.deepEqual(paths.map((path) => path.taskSize), expected);
25
+
26
+ for (const taskSize of expected) {
27
+ const path = recommendProcessPath(taskSize);
28
+ assert.equal(path.taskSize, taskSize);
29
+ assert.ok(path.templateId.length > 0);
30
+ assert.match(path.command, /^\/gsd /);
31
+ assert.ok(path.phases.length > 0);
32
+ assert.ok(path.guidance.length > 0);
33
+ }
34
+ });
35
+
36
+ test("process task paths route large work to the DB-backed milestone flow", () => {
37
+ const largeFeature = recommendProcessPath("large-feature");
38
+ assert.equal(largeFeature.templateId, "full-project");
39
+ assert.match(largeFeature.command, /\/gsd discuss/);
40
+ assert.match(largeFeature.command, /\/gsd auto/);
41
+ assert.match(largeFeature.guidance, /DB-backed milestone flow/);
42
+ });
43
+
44
+ test("formatted process paths are stable for command help", () => {
45
+ const formatted = formatRecommendedProcessPaths();
46
+ assert.match(formatted, /hotfix\s+\/gsd start hotfix/);
47
+ assert.match(formatted, /bugfix\s+\/gsd start bugfix/);
48
+ assert.match(formatted, /small-feature\s+\/gsd start small-feature/);
49
+ assert.match(formatted, /large-feature\s+\/gsd discuss/);
50
+ assert.match(formatted, /architecture-change\s+\/gsd start refactor/);
51
+ });
@@ -2,7 +2,7 @@
2
2
  * Regression test for #3696 — prompt step ordering and runtime fixes
3
3
  *
4
4
  * 1. complete-milestone.md: gsd_requirement_update (step 9) before
5
- * gsd_complete_milestone (step 10)
5
+ * gsd_complete_milestone, and completion remains the final durable write
6
6
  * 2. complete-slice.md: uses gsd_requirement_update
7
7
  * 3. register-extension.ts: _gsdEpipeGuard logs instead of re-throwing
8
8
  * 4. register-hooks.ts: session_before_compact only checks isAutoActive
@@ -50,6 +50,21 @@ describe('prompt step ordering (#3696)', () => {
50
50
  );
51
51
  });
52
52
 
53
+ test('project and learnings writes appear before gsd_complete_milestone', () => {
54
+ const projectMatch = completeMilestoneMd.match(/^\d+\.\s.*PROJECT\.md/m);
55
+ const learningsMatch = completeMilestoneMd.match(/^\d+\.\s.*Extract structured learnings/m);
56
+ const completeMilestoneMatch = completeMilestoneMd.match(/^\d+\.\s.*gsd_complete_milestone/m);
57
+ assert.ok(projectMatch, 'PROJECT.md update should appear in a numbered step');
58
+ assert.ok(learningsMatch, 'learnings extraction should appear in a numbered step');
59
+ assert.ok(completeMilestoneMatch, 'gsd_complete_milestone should appear in a numbered step');
60
+
61
+ const projectIdx = completeMilestoneMd.indexOf(projectMatch![0]);
62
+ const learningsIdx = completeMilestoneMd.indexOf(learningsMatch![0]);
63
+ const completeMilestoneIdx = completeMilestoneMd.indexOf(completeMilestoneMatch![0]);
64
+ assert.ok(projectIdx < completeMilestoneIdx, 'PROJECT.md update must happen before gsd_complete_milestone');
65
+ assert.ok(learningsIdx < completeMilestoneIdx, 'learnings extraction must happen before gsd_complete_milestone');
66
+ });
67
+
53
68
  test('complete-slice.md uses gsd_requirement_update', () => {
54
69
  assert.match(completeSliceMd, /gsd_requirement_update/,
55
70
  'complete-slice.md should reference gsd_requirement_update');
@@ -0,0 +1,37 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Verifies the queue prompt renders compact discussion and write-gate 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("queue prompt renders compact draft, verification, 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-queue-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("queue", {
23
+ preamble: "Queue preamble.",
24
+ existingMilestonesContext: "No existing milestones.",
25
+ commitInstruction: "Commit queued milestone artifacts.",
26
+ inlinedTemplates: "## Context Template\n\nUse standard GSD context.",
27
+ });
28
+
29
+ assert.match(prompt, /Draft Awareness/);
30
+ assert.match(prompt, /What do you want to add\?/);
31
+ assert.match(prompt, /Investigate between question rounds/);
32
+ assert.match(prompt, /Pre-Write Verification/);
33
+ assert.match(prompt, /depth_verification/);
34
+ assert.match(prompt, /gsd_milestone_generate_id/);
35
+ assert.match(prompt, /gsd_summary_save/);
36
+ assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
37
+ });
@@ -24,7 +24,7 @@ describe("resource-loader import path", () => {
24
24
 
25
25
  test("uses GSD_PKG_ROOT to resolve resource-loader from package root", () => {
26
26
  // The fix uses GSD_PKG_ROOT (set by loader.ts) to construct an absolute
27
- // file URL to dist/resource-loader.js — works in both source and deployed,
27
+ // file URL to dist/resource-runtime/resource-loader.js — works in both source and deployed,
28
28
  // and on Windows where raw paths fail with ERR_UNSUPPORTED_ESM_URL_SCHEME.
29
29
  assert.ok(
30
30
  autoSrc.includes('process.env.GSD_PKG_ROOT'),
@@ -1,12 +1,10 @@
1
- // tool-naming — Verifies canonical + alias tool registration for GSD DB tools.
2
- //
3
- // Each DB tool must register under its canonical gsd_concept_action name
4
- // AND under a backward-compatible alias name.
5
- // The alias must share the exact same execute function reference as the canonical tool.
1
+ // Project/App: GSD-2
2
+ // File Purpose: Verifies canonical and alias DB tool registration plus legacy alias telemetry.
6
3
 
7
4
  import { test } from 'node:test';
8
5
  import assert from 'node:assert/strict';
9
6
  import { registerDbTools } from '../bootstrap/db-tools.ts';
7
+ import { getLegacyTelemetry, resetLegacyTelemetry } from '../legacy-telemetry.ts';
10
8
 
11
9
 
12
10
  // ─── Mock PI ──────────────────────────────────────────────────────────────────
@@ -66,9 +64,9 @@ for (const { canonical, alias } of RENAME_MAP) {
66
64
  assert.ok(aliasTool !== undefined, `Alias tool "${alias}" should be registered`);
67
65
  }
68
66
 
69
- // ─── Execute function identity ───────────────────────────────────────────────
67
+ // ─── Execute function wrapping ───────────────────────────────────────────────
70
68
 
71
- console.log('\n── Tool naming: execute function identity (===) ──');
69
+ console.log('\n── Tool naming: alias execute wrapper ──');
72
70
 
73
71
  for (const { canonical, alias } of RENAME_MAP) {
74
72
  const canonicalTool = pi.tools.find((t: any) => t.name === canonical);
@@ -76,12 +74,37 @@ for (const { canonical, alias } of RENAME_MAP) {
76
74
 
77
75
  if (canonicalTool && aliasTool) {
78
76
  assert.ok(
79
- canonicalTool.execute === aliasTool.execute,
80
- `"${canonical}" and "${alias}" should share the same execute function reference`,
77
+ canonicalTool.execute !== aliasTool.execute,
78
+ `"${alias}" should wrap "${canonical}" so alias usage can be counted`,
81
79
  );
82
80
  }
83
81
  }
84
82
 
83
+ test("alias execute increments legacy MCP alias telemetry before delegating", async () => {
84
+ const canonicalTool = pi.tools.find((t: any) => t.name === "gsd_decision_save");
85
+ const aliasTool = pi.tools.find((t: any) => t.name === "gsd_save_decision");
86
+ assert.ok(canonicalTool);
87
+ assert.ok(aliasTool);
88
+
89
+ const originalCanonicalExecute = canonicalTool.execute;
90
+ try {
91
+ resetLegacyTelemetry();
92
+ let delegated = false;
93
+ canonicalTool.execute = async () => {
94
+ delegated = true;
95
+ return { content: [{ type: "text", text: "ok" }], details: { ok: true } };
96
+ };
97
+
98
+ await aliasTool.execute("call-1", {}, undefined, undefined, undefined);
99
+
100
+ assert.equal(delegated, true);
101
+ assert.equal(getLegacyTelemetry()["legacy.mcpAliasUsed"], 1);
102
+ } finally {
103
+ canonicalTool.execute = originalCanonicalExecute;
104
+ resetLegacyTelemetry();
105
+ }
106
+ });
107
+
85
108
  // ─── Alias descriptions include "(alias for ...)" ───────────────────────────
86
109
 
87
110
  console.log('\n── Tool naming: alias descriptions ──');
@@ -1,6 +1,5 @@
1
- // GSD-2 — #4782 phase 2 composer tests. Pure-function tests using mock
2
- // resolvers plus an integration check that reassess-roadmap's migrated
3
- // builder produces a prompt matching expectations.
1
+ // Project/App: GSD-2
2
+ // File Purpose: Tests unit context composer rendering, budgets, and reassess-roadmap prompt integration.
4
3
 
5
4
  import test from "node:test";
6
5
  import assert from "node:assert/strict";
@@ -122,9 +121,9 @@ test("Context Mode composer: standalone output starts with heading and includes
122
121
  assert.ok(out.startsWith("## Context Mode"));
123
122
  assert.match(out, /execution lane/i);
124
123
  assert.match(out, /`gsd_exec`/);
125
- assert.match(out, /noisy scans, builds, and tests/);
124
+ assert.match(out, /noisy commands/);
126
125
  assert.match(out, /`gsd_exec_search`/);
127
- assert.match(out, /before repeating prior runs/);
126
+ assert.match(out, /before reruns/);
128
127
  assert.match(out, /`gsd_resume`/);
129
128
  assert.match(out, /after compaction or resume/);
130
129
  });
@@ -137,6 +136,7 @@ test("Context Mode composer: nested output is compact single sentence", () => {
137
136
  assert.match(out, /`gsd_exec`/);
138
137
  assert.match(out, /`gsd_exec_search`/);
139
138
  assert.match(out, /`gsd_resume`/);
139
+ assert.ok(out.length < 180, `nested guidance should stay compact, got ${out.length} chars`);
140
140
  });
141
141
 
142
142
  // ─── Integration: migrated buildReassessRoadmapPrompt ─────────────────────
@@ -224,7 +224,7 @@ test("#4782 phase 2: buildReassessRoadmapPrompt emits composer-shaped context wi
224
224
 
225
225
  const fakeBase: BaseResolverContext = {
226
226
  unitType: "reassess-roadmap",
227
- basePath: "/tmp/fake",
227
+ basePath: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
228
228
  milestoneId: "M001",
229
229
  sliceId: "S01",
230
230
  };