gsd-pi 2.82.0-dev.ed17d078d → 3.0.0-dev.8b8d129d7

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 (562) hide show
  1. package/README.md +93 -18
  2. package/dist/cli.js +20 -9
  3. package/dist/headless.js +9 -2
  4. package/dist/resources/.managed-resources-content-hash +1 -1
  5. package/dist/resources/GSD-WORKFLOW.md +10 -1
  6. package/dist/resources/extensions/claude-code-cli/partial-builder.js +2 -1
  7. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -6
  8. package/dist/resources/extensions/cmux/index.js +5 -0
  9. package/dist/resources/extensions/gsd/auto/infra-errors.js +9 -3
  10. package/dist/resources/extensions/gsd/auto/loop.js +110 -37
  11. package/dist/resources/extensions/gsd/auto/orchestrator.js +12 -1
  12. package/dist/resources/extensions/gsd/auto/phases.js +97 -38
  13. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +3 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +12 -0
  16. package/dist/resources/extensions/gsd/auto-dashboard.js +66 -1
  17. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +1 -0
  18. package/dist/resources/extensions/gsd/auto-dispatch.js +20 -19
  19. package/dist/resources/extensions/gsd/auto-model-selection.js +2 -0
  20. package/dist/resources/extensions/gsd/auto-post-unit.js +278 -137
  21. package/dist/resources/extensions/gsd/auto-prompts.js +36 -10
  22. package/dist/resources/extensions/gsd/auto-recovery.js +79 -14
  23. package/dist/resources/extensions/gsd/auto-start.js +87 -14
  24. package/dist/resources/extensions/gsd/auto-timers.js +11 -3
  25. package/dist/resources/extensions/gsd/auto-verification.js +102 -34
  26. package/dist/resources/extensions/gsd/auto-worktree.js +178 -11
  27. package/dist/resources/extensions/gsd/auto.js +98 -54
  28. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +31 -7
  29. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -9
  30. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +5 -4
  31. package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +21 -9
  32. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +24 -9
  33. package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
  34. package/dist/resources/extensions/gsd/commands/catalog.js +10 -1
  35. package/dist/resources/extensions/gsd/commands/handlers/core.js +38 -0
  36. package/dist/resources/extensions/gsd/commands/handlers/ops.js +20 -0
  37. package/dist/resources/extensions/gsd/commands-bootstrap.js +5 -0
  38. package/dist/resources/extensions/gsd/commands-handlers.js +2 -0
  39. package/dist/resources/extensions/gsd/commands-mcp-status.js +9 -0
  40. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +7 -2
  41. package/dist/resources/extensions/gsd/commands-verdict.js +139 -0
  42. package/dist/resources/extensions/gsd/crash-recovery.js +43 -5
  43. package/dist/resources/extensions/gsd/db/milestone-leases.js +24 -0
  44. package/dist/resources/extensions/gsd/db/unit-dispatches.js +3 -2
  45. package/dist/resources/extensions/gsd/db-base-schema.js +2 -0
  46. package/dist/resources/extensions/gsd/db-migration-steps.js +4 -0
  47. package/dist/resources/extensions/gsd/db-task-slice-rows.js +2 -0
  48. package/dist/resources/extensions/gsd/dispatch-guard.js +46 -2
  49. package/dist/resources/extensions/gsd/docs/preferences-reference.md +8 -0
  50. package/dist/resources/extensions/gsd/doctor-git-checks.js +46 -1
  51. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +28 -11
  52. package/dist/resources/extensions/gsd/doctor.js +2 -28
  53. package/dist/resources/extensions/gsd/export-html.js +27 -425
  54. package/dist/resources/extensions/gsd/forensics.js +8 -3
  55. package/dist/resources/extensions/gsd/git-service.js +138 -10
  56. package/dist/resources/extensions/gsd/gsd-db.js +76 -33
  57. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -3
  58. package/dist/resources/extensions/gsd/guided-flow.js +110 -117
  59. package/dist/resources/extensions/gsd/guided-unit-context.js +23 -0
  60. package/dist/resources/extensions/gsd/init-wizard.js +17 -2
  61. package/dist/resources/extensions/gsd/markdown-renderer.js +10 -8
  62. package/dist/resources/extensions/gsd/mcp-filter.js +58 -0
  63. package/dist/resources/extensions/gsd/migrate/parsers.js +10 -0
  64. package/dist/resources/extensions/gsd/migration-auto-check.js +12 -17
  65. package/dist/resources/extensions/gsd/milestone-actions.js +11 -4
  66. package/dist/resources/extensions/gsd/native-git-bridge.js +57 -14
  67. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -0
  68. package/dist/resources/extensions/gsd/paths.js +4 -0
  69. package/dist/resources/extensions/gsd/pending-auto-start.js +52 -0
  70. package/dist/resources/extensions/gsd/planning-path-scope.js +9 -3
  71. package/dist/resources/extensions/gsd/post-execution-checks.js +73 -9
  72. package/dist/resources/extensions/gsd/pre-execution-checks.js +38 -11
  73. package/dist/resources/extensions/gsd/preferences-mcp.js +19 -0
  74. package/dist/resources/extensions/gsd/preferences-types.js +2 -0
  75. package/dist/resources/extensions/gsd/preferences-validation.js +138 -0
  76. package/dist/resources/extensions/gsd/preferences.js +2 -0
  77. package/dist/resources/extensions/gsd/prompt-loader.js +1 -1
  78. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  79. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  80. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  81. package/dist/resources/extensions/gsd/prompts/discuss.md +9 -9
  82. package/dist/resources/extensions/gsd/prompts/forensics.md +3 -3
  83. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  84. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  85. package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  86. package/dist/resources/extensions/gsd/prompts/queue.md +4 -4
  87. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  88. package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  89. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  90. package/dist/resources/extensions/gsd/queue-reorder-ui.js +30 -13
  91. package/dist/resources/extensions/gsd/repository-registry.js +44 -0
  92. package/dist/resources/extensions/gsd/safety/evidence-collector.js +2 -0
  93. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +42 -18
  94. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +59 -2
  95. package/dist/resources/extensions/gsd/smart-entry-routing.js +36 -0
  96. package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +6 -1
  97. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +9 -14
  98. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +19 -24
  99. package/dist/resources/extensions/gsd/state.js +14 -4
  100. package/dist/resources/extensions/gsd/status-guards.js +14 -2
  101. package/dist/resources/extensions/gsd/templates/plan.md +9 -5
  102. package/dist/resources/extensions/gsd/templates/task-plan.md +10 -2
  103. package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -8
  104. package/dist/resources/extensions/gsd/tools/complete-slice.js +6 -8
  105. package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -1
  106. package/dist/resources/extensions/gsd/tools/plan-slice.js +151 -15
  107. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
  108. package/dist/resources/extensions/gsd/unit-context-manifest.js +36 -17
  109. package/dist/resources/extensions/gsd/validation.js +23 -1
  110. package/dist/resources/extensions/gsd/verification-gate.js +142 -7
  111. package/dist/resources/extensions/gsd/verification-verdict.js +26 -0
  112. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  113. package/dist/resources/extensions/gsd/workflow-mcp.js +17 -1
  114. package/dist/resources/extensions/gsd/workflow-projections.js +6 -8
  115. package/dist/resources/extensions/gsd/worktree-lifecycle.js +54 -10
  116. package/dist/resources/extensions/gsd/worktree-manager.js +1 -1
  117. package/dist/resources/extensions/gsd/worktree-state-projection.js +31 -0
  118. package/dist/resources/extensions/shared/html-shell.js +388 -0
  119. package/dist/resources/extensions/shared/interview-ui.js +6 -4
  120. package/dist/resources/extensions/subagent/index.js +448 -78
  121. package/dist/resources/extensions/subagent/launch.js +77 -0
  122. package/dist/resources/extensions/subagent/run-store.js +148 -0
  123. package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
  124. package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
  125. package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
  126. package/dist/resources/extensions/visual-brief/index.js +5 -0
  127. package/dist/resources/extensions/visual-brief/page-contract.js +124 -0
  128. package/dist/resources/extensions/visual-brief/prompts.js +140 -0
  129. package/dist/resources/skills/forensics/SKILL.md +1 -1
  130. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  131. package/dist/web/standalone/.next/BUILD_ID +1 -1
  132. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  133. package/dist/web/standalone/.next/build-manifest.json +3 -3
  134. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  135. package/dist/web/standalone/.next/react-loadable-manifest.json +5 -5
  136. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  140. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  146. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  149. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -7
  150. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -7
  151. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  152. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -5
  153. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  155. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -5
  156. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/index.html +1 -1
  159. package/dist/web/standalone/.next/server/app/index.rsc +4 -7
  160. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  161. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -7
  162. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  163. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -5
  164. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -5
  165. package/dist/web/standalone/.next/server/app/page.js +2 -2
  166. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  169. package/dist/web/standalone/.next/server/chunks/4266.js +2 -0
  170. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  174. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  175. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  176. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  177. package/dist/web/standalone/.next/static/chunks/2973.33f26573894b6153.js +2 -0
  178. package/dist/web/standalone/.next/static/chunks/8359.65b24fac92188a6b.js +10 -0
  179. package/dist/web/standalone/.next/static/chunks/9441.ff70bb53f6835771.js +1 -0
  180. package/dist/web/standalone/.next/static/chunks/app/layout-8c10ec293ae0f1d5.js +1 -0
  181. package/dist/web/standalone/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-855d616060cb6e59.js} +1 -1
  182. package/dist/web/standalone/.next/static/css/746ee28c929d1880.css +1 -0
  183. package/package.json +4 -4
  184. package/packages/contracts/dist/rpc.test.js +7 -0
  185. package/packages/contracts/dist/rpc.test.js.map +1 -1
  186. package/packages/contracts/dist/workflow.d.ts +21 -0
  187. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  188. package/packages/contracts/dist/workflow.js +24 -0
  189. package/packages/contracts/dist/workflow.js.map +1 -1
  190. package/packages/contracts/src/rpc.test.ts +8 -0
  191. package/packages/contracts/src/workflow.ts +24 -0
  192. package/packages/daemon/package.json +2 -2
  193. package/packages/mcp-server/README.md +13 -4
  194. package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
  195. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  196. package/packages/mcp-server/dist/workflow-tools.js +80 -0
  197. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  198. package/packages/mcp-server/package.json +2 -2
  199. package/packages/mcp-server/src/workflow-tools.test.ts +23 -1
  200. package/packages/mcp-server/src/workflow-tools.ts +168 -0
  201. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  202. package/packages/native/package.json +1 -1
  203. package/packages/native/tsconfig.json +2 -1
  204. package/packages/native/tsconfig.tsbuildinfo +1 -1
  205. package/packages/pi-agent-core/package.json +1 -1
  206. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  207. package/packages/pi-ai/dist/providers/google-gemini-cli.js +5 -0
  208. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  209. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts +2 -0
  210. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts.map +1 -0
  211. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +41 -0
  212. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -0
  213. package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  214. package/packages/pi-ai/dist/providers/openai-codex-responses.js +82 -1
  215. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  216. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts +2 -0
  217. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts.map +1 -0
  218. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +52 -0
  219. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -0
  220. package/packages/pi-ai/dist/providers/simple-options.d.ts +2 -4
  221. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  222. package/packages/pi-ai/dist/providers/simple-options.js +5 -6
  223. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  224. package/packages/pi-ai/dist/providers/simple-options.test.d.ts +2 -0
  225. package/packages/pi-ai/dist/providers/simple-options.test.d.ts.map +1 -0
  226. package/packages/pi-ai/dist/providers/simple-options.test.js +50 -0
  227. package/packages/pi-ai/dist/providers/simple-options.test.js.map +1 -0
  228. package/packages/pi-ai/package.json +1 -1
  229. package/packages/pi-ai/src/providers/google-gemini-cli.test.ts +49 -0
  230. package/packages/pi-ai/src/providers/google-gemini-cli.ts +7 -0
  231. package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +63 -0
  232. package/packages/pi-ai/src/providers/openai-codex-responses.ts +91 -1
  233. package/packages/pi-ai/src/providers/simple-options.test.ts +60 -0
  234. package/packages/pi-ai/src/providers/simple-options.ts +5 -6
  235. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  236. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts +2 -0
  237. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts.map +1 -0
  238. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js +66 -0
  239. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js.map +1 -0
  240. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  241. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  242. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +44 -3
  243. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +6 -1
  245. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  246. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +7 -2
  247. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +14 -1
  249. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
  251. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  252. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  253. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +24 -6
  254. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  255. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  256. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +71 -97
  257. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +7 -7
  259. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +11 -0
  261. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +25 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
  264. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
  265. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  266. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +24 -10
  267. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  268. package/packages/pi-coding-agent/package.json +1 -1
  269. package/packages/pi-coding-agent/src/core/agent-session-thinking-level.test.ts +79 -0
  270. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  271. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +53 -3
  272. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +23 -1
  273. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +7 -2
  274. package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
  275. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +23 -7
  276. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +75 -102
  277. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +15 -1
  278. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +9 -9
  279. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +30 -1
  280. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +29 -10
  281. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  282. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts +2 -0
  283. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts.map +1 -0
  284. package/packages/pi-tui/dist/__tests__/terminal.test.js +103 -0
  285. package/packages/pi-tui/dist/__tests__/terminal.test.js.map +1 -0
  286. package/packages/pi-tui/dist/__tests__/tui.test.js +45 -2
  287. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  288. package/packages/pi-tui/dist/terminal.d.ts +2 -0
  289. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  290. package/packages/pi-tui/dist/terminal.js +12 -0
  291. package/packages/pi-tui/dist/terminal.js.map +1 -1
  292. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  293. package/packages/pi-tui/dist/tui.js +106 -27
  294. package/packages/pi-tui/dist/tui.js.map +1 -1
  295. package/packages/pi-tui/package.json +1 -1
  296. package/packages/pi-tui/src/__tests__/terminal.test.ts +121 -0
  297. package/packages/pi-tui/src/__tests__/tui.test.ts +59 -2
  298. package/packages/pi-tui/src/terminal.ts +11 -0
  299. package/packages/pi-tui/src/tui.ts +108 -27
  300. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  301. package/packages/rpc-client/package.json +1 -1
  302. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  303. package/pkg/package.json +1 -1
  304. package/src/resources/GSD-WORKFLOW.md +10 -1
  305. package/src/resources/extensions/claude-code-cli/partial-builder.ts +2 -1
  306. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +52 -6
  307. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +19 -2
  308. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +49 -2
  309. package/src/resources/extensions/cmux/index.ts +6 -0
  310. package/src/resources/extensions/gsd/auto/contracts.ts +17 -6
  311. package/src/resources/extensions/gsd/auto/infra-errors.ts +9 -3
  312. package/src/resources/extensions/gsd/auto/loop.ts +111 -38
  313. package/src/resources/extensions/gsd/auto/orchestrator.ts +12 -1
  314. package/src/resources/extensions/gsd/auto/phases.ts +115 -49
  315. package/src/resources/extensions/gsd/auto/session.ts +16 -0
  316. package/src/resources/extensions/gsd/auto/types.ts +3 -0
  317. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +5 -1
  318. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +13 -0
  319. package/src/resources/extensions/gsd/auto-dashboard.ts +72 -1
  320. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +1 -0
  321. package/src/resources/extensions/gsd/auto-dispatch.ts +21 -19
  322. package/src/resources/extensions/gsd/auto-model-selection.ts +2 -1
  323. package/src/resources/extensions/gsd/auto-post-unit.ts +312 -148
  324. package/src/resources/extensions/gsd/auto-prompts.ts +36 -13
  325. package/src/resources/extensions/gsd/auto-recovery.ts +83 -11
  326. package/src/resources/extensions/gsd/auto-start.ts +94 -12
  327. package/src/resources/extensions/gsd/auto-timers.ts +10 -3
  328. package/src/resources/extensions/gsd/auto-verification.ts +124 -42
  329. package/src/resources/extensions/gsd/auto-worktree.ts +195 -11
  330. package/src/resources/extensions/gsd/auto.ts +91 -42
  331. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +42 -7
  332. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +10 -9
  333. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +5 -4
  334. package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +19 -7
  335. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +27 -10
  336. package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
  337. package/src/resources/extensions/gsd/commands/catalog.ts +10 -1
  338. package/src/resources/extensions/gsd/commands/handlers/core.ts +41 -0
  339. package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
  340. package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
  341. package/src/resources/extensions/gsd/commands-handlers.ts +2 -0
  342. package/src/resources/extensions/gsd/commands-mcp-status.ts +8 -0
  343. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +8 -3
  344. package/src/resources/extensions/gsd/commands-verdict.ts +202 -0
  345. package/src/resources/extensions/gsd/crash-recovery.ts +44 -4
  346. package/src/resources/extensions/gsd/db/milestone-leases.ts +26 -0
  347. package/src/resources/extensions/gsd/db/unit-dispatches.ts +4 -3
  348. package/src/resources/extensions/gsd/db-base-schema.ts +2 -0
  349. package/src/resources/extensions/gsd/db-migration-steps.ts +5 -0
  350. package/src/resources/extensions/gsd/db-task-slice-rows.ts +4 -0
  351. package/src/resources/extensions/gsd/dispatch-guard.ts +60 -2
  352. package/src/resources/extensions/gsd/docs/preferences-reference.md +8 -0
  353. package/src/resources/extensions/gsd/doctor-git-checks.ts +45 -1
  354. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +25 -13
  355. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  356. package/src/resources/extensions/gsd/doctor.ts +2 -27
  357. package/src/resources/extensions/gsd/export-html.ts +27 -427
  358. package/src/resources/extensions/gsd/forensics.ts +7 -3
  359. package/src/resources/extensions/gsd/git-service.ts +166 -11
  360. package/src/resources/extensions/gsd/gsd-db.ts +80 -31
  361. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -3
  362. package/src/resources/extensions/gsd/guided-flow.ts +142 -134
  363. package/src/resources/extensions/gsd/guided-unit-context.ts +30 -0
  364. package/src/resources/extensions/gsd/init-wizard.ts +17 -2
  365. package/src/resources/extensions/gsd/journal.ts +8 -1
  366. package/src/resources/extensions/gsd/markdown-renderer.ts +10 -8
  367. package/src/resources/extensions/gsd/mcp-filter.ts +80 -0
  368. package/src/resources/extensions/gsd/migrate/parsers.ts +11 -0
  369. package/src/resources/extensions/gsd/migration-auto-check.ts +15 -23
  370. package/src/resources/extensions/gsd/milestone-actions.ts +10 -4
  371. package/src/resources/extensions/gsd/native-git-bridge.ts +63 -14
  372. package/src/resources/extensions/gsd/parallel-orchestrator.ts +3 -0
  373. package/src/resources/extensions/gsd/paths.ts +5 -0
  374. package/src/resources/extensions/gsd/pending-auto-start.ts +79 -0
  375. package/src/resources/extensions/gsd/planning-path-scope.ts +10 -2
  376. package/src/resources/extensions/gsd/post-execution-checks.ts +87 -12
  377. package/src/resources/extensions/gsd/pre-execution-checks.ts +49 -11
  378. package/src/resources/extensions/gsd/preferences-mcp.ts +27 -0
  379. package/src/resources/extensions/gsd/preferences-types.ts +33 -0
  380. package/src/resources/extensions/gsd/preferences-validation.ts +145 -0
  381. package/src/resources/extensions/gsd/preferences.ts +5 -0
  382. package/src/resources/extensions/gsd/prompt-loader.ts +1 -1
  383. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  384. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  385. package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  386. package/src/resources/extensions/gsd/prompts/discuss.md +9 -9
  387. package/src/resources/extensions/gsd/prompts/forensics.md +3 -3
  388. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  389. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  390. package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  391. package/src/resources/extensions/gsd/prompts/queue.md +4 -4
  392. package/src/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  393. package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  394. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  395. package/src/resources/extensions/gsd/queue-reorder-ui.ts +31 -13
  396. package/src/resources/extensions/gsd/repository-registry.ts +77 -0
  397. package/src/resources/extensions/gsd/safety/evidence-collector.ts +2 -0
  398. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +54 -19
  399. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +52 -1
  400. package/src/resources/extensions/gsd/smart-entry-routing.ts +77 -0
  401. package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +8 -1
  402. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +12 -15
  403. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +17 -25
  404. package/src/resources/extensions/gsd/state.ts +15 -4
  405. package/src/resources/extensions/gsd/status-guards.ts +16 -2
  406. package/src/resources/extensions/gsd/templates/plan.md +9 -5
  407. package/src/resources/extensions/gsd/templates/task-plan.md +10 -2
  408. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +71 -0
  409. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +116 -0
  410. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +300 -1
  411. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +174 -8
  412. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +151 -12
  413. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +53 -2
  414. package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +18 -6
  415. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +129 -6
  416. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +12 -0
  417. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -0
  418. package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +20 -0
  419. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +69 -1
  420. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +21 -0
  421. package/src/resources/extensions/gsd/tests/brief-command.test.ts +89 -0
  422. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +87 -0
  423. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
  424. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +32 -4
  425. package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -0
  426. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +378 -0
  427. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +4 -1
  428. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +5 -9
  429. package/src/resources/extensions/gsd/tests/complete-task.test.ts +3 -1
  430. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +86 -2
  431. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
  432. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +208 -0
  433. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +1 -0
  434. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +61 -2
  435. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +66 -0
  436. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +68 -1
  437. package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +65 -0
  438. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +50 -0
  439. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +97 -0
  440. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +8 -0
  441. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +28 -0
  442. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +5 -2
  443. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +2 -0
  444. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +106 -0
  445. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +59 -11
  446. package/src/resources/extensions/gsd/tests/guided-flow.test.ts +21 -0
  447. package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +65 -0
  448. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +7 -7
  449. package/src/resources/extensions/gsd/tests/hook-model-resolution.test.ts +5 -0
  450. package/src/resources/extensions/gsd/tests/infra-error.test.ts +2 -2
  451. package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +9 -0
  452. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +22 -0
  453. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +20 -0
  454. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +199 -2
  455. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +6 -1
  456. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +49 -3
  457. package/src/resources/extensions/gsd/tests/journal.test.ts +32 -0
  458. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +287 -0
  459. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +11 -0
  460. package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +179 -0
  461. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +24 -1
  462. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +26 -18
  463. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +80 -2
  464. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +121 -1
  465. package/src/resources/extensions/gsd/tests/parallel-orchestrator-zombie-cleanup.test.ts +55 -0
  466. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +55 -1
  467. package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +29 -5
  468. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +2 -1
  469. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +26 -0
  470. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  471. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +343 -3
  472. package/src/resources/extensions/gsd/tests/plan-task.test.ts +18 -1
  473. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
  474. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -3
  475. package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +1 -1
  476. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +84 -0
  477. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +59 -0
  478. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +54 -0
  479. package/src/resources/extensions/gsd/tests/preferences-mcp.test.ts +128 -0
  480. package/src/resources/extensions/gsd/tests/preferences.test.ts +75 -0
  481. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +70 -0
  482. package/src/resources/extensions/gsd/tests/prompt-loader.test.ts +23 -0
  483. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +37 -1
  484. package/src/resources/extensions/gsd/tests/quality-gates.test.ts +6 -0
  485. package/src/resources/extensions/gsd/tests/queue-reorder-ui.test.ts +54 -0
  486. package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +89 -2
  487. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +52 -0
  488. package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +2 -3
  489. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +10 -0
  490. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +72 -1
  491. package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +113 -0
  492. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +53 -2
  493. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -0
  494. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +119 -23
  495. package/src/resources/extensions/gsd/tests/status-guards.test.ts +17 -1
  496. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +64 -1
  497. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +2 -1
  498. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +7 -3
  499. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +128 -9
  500. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +111 -1
  501. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +29 -2
  502. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +42 -1
  503. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +173 -1
  504. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -0
  505. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
  506. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +19 -1
  507. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +21 -1
  508. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +1 -1
  509. package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +39 -0
  510. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +64 -12
  511. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +25 -0
  512. package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +25 -0
  513. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +95 -0
  514. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +27 -0
  515. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +59 -0
  516. package/src/resources/extensions/gsd/tools/complete-milestone.ts +8 -10
  517. package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -8
  518. package/src/resources/extensions/gsd/tools/plan-milestone.ts +5 -1
  519. package/src/resources/extensions/gsd/tools/plan-slice.ts +172 -12
  520. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
  521. package/src/resources/extensions/gsd/types.ts +1 -1
  522. package/src/resources/extensions/gsd/unit-context-manifest.ts +51 -18
  523. package/src/resources/extensions/gsd/validation.ts +23 -1
  524. package/src/resources/extensions/gsd/verification-gate.ts +170 -6
  525. package/src/resources/extensions/gsd/verification-verdict.ts +47 -0
  526. package/src/resources/extensions/gsd/workflow-manifest.ts +2 -0
  527. package/src/resources/extensions/gsd/workflow-mcp.ts +18 -1
  528. package/src/resources/extensions/gsd/workflow-projections.ts +6 -8
  529. package/src/resources/extensions/gsd/worktree-lifecycle.ts +61 -10
  530. package/src/resources/extensions/gsd/worktree-manager.ts +1 -1
  531. package/src/resources/extensions/gsd/worktree-state-projection.ts +43 -0
  532. package/src/resources/extensions/shared/html-shell.ts +412 -0
  533. package/src/resources/extensions/shared/interview-ui.ts +6 -4
  534. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +15 -0
  535. package/src/resources/extensions/subagent/index.ts +567 -103
  536. package/src/resources/extensions/subagent/launch.ts +131 -0
  537. package/src/resources/extensions/subagent/run-store.ts +218 -0
  538. package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
  539. package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
  540. package/src/resources/extensions/ttsr/ttsr-manager.ts +5 -1
  541. package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
  542. package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
  543. package/src/resources/extensions/visual-brief/index.ts +8 -0
  544. package/src/resources/extensions/visual-brief/page-contract.ts +136 -0
  545. package/src/resources/extensions/visual-brief/prompts.ts +183 -0
  546. package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +212 -0
  547. package/src/resources/skills/forensics/SKILL.md +1 -1
  548. package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
  549. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
  550. package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +0 -10
  551. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
  552. package/dist/web/standalone/.next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js +0 -1
  553. package/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
  554. package/dist/web/standalone/.next/static/css/de70bee13400563f.css +0 -1
  555. package/dist/web/standalone/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
  556. package/dist/web/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  557. package/dist/web/standalone/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  558. package/dist/web/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  559. package/dist/web/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  560. package/dist/web/standalone/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  561. /package/dist/web/standalone/.next/static/{YEvjuT-fsFfYQhDSWtueS → _kljR-_Miq_YV1IW0wpRO}/_buildManifest.js +0 -0
  562. /package/dist/web/standalone/.next/static/{YEvjuT-fsFfYQhDSWtueS → _kljR-_Miq_YV1IW0wpRO}/_ssgManifest.js +0 -0
@@ -46,6 +46,46 @@ export interface PostExecutionResult {
46
46
 
47
47
  // ─── Import Resolution Check ─────────────────────────────────────────────────
48
48
 
49
+ /**
50
+ * Replace the contents of single- and double-quoted string literals on a single
51
+ * source line with spaces so import patterns do not match text inside strings.
52
+ * Template-literal spans are handled separately via the inTemplateLiteral flag.
53
+ */
54
+ function stripStringLiterals(line: string): string {
55
+ let result = "";
56
+ let i = 0;
57
+
58
+ while (i < line.length) {
59
+ const ch = line[i];
60
+
61
+ if (ch === '"' || ch === "'") {
62
+ result += ch;
63
+ i++;
64
+
65
+ while (i < line.length) {
66
+ const c = line[i];
67
+
68
+ if (c === "\\" && i + 1 < line.length) {
69
+ result += " ";
70
+ i += 2;
71
+ } else if (c === ch) {
72
+ result += ch;
73
+ i++;
74
+ break;
75
+ } else {
76
+ result += " ";
77
+ i++;
78
+ }
79
+ }
80
+ } else {
81
+ result += ch;
82
+ i++;
83
+ }
84
+ }
85
+
86
+ return result;
87
+ }
88
+
49
89
  /**
50
90
  * Extract relative import paths from TypeScript/JavaScript source code.
51
91
  * Returns array of { importPath, lineNum } for relative imports.
@@ -62,14 +102,23 @@ export function extractRelativeImports(
62
102
  // import './path'
63
103
  // require('./path')
64
104
  // require("../path")
65
- const importPattern = /(?:import\s+(?:.*?\s+from\s+)?|require\s*\(\s*)(['"])(\.\.?\/[^'"]+)\1/g;
105
+ const importPattern = /(?:^|[;{}]\s*)import\s+(?:.*?\s+from\s+)?(['"])(\.\.?\/[^'"]+)\1/g;
106
+ const requirePattern = /require\s*\(\s*(['"])(\.\.?\/[^'"]+)\1/g;
66
107
 
67
108
  // Track if we're inside a block comment
68
109
  let inBlockComment = false;
110
+ let inTemplateLiteral = false;
69
111
 
70
112
  for (let i = 0; i < lines.length; i++) {
71
113
  const line = lines[i];
72
114
 
115
+ if (inTemplateLiteral) {
116
+ if ((line.match(/(?<!\\)`/g) ?? []).length % 2 === 1) {
117
+ inTemplateLiteral = false;
118
+ }
119
+ continue;
120
+ }
121
+
73
122
  // Handle block comment boundaries
74
123
  if (inBlockComment) {
75
124
  if (line.includes("*/")) {
@@ -101,10 +150,22 @@ export function extractRelativeImports(
101
150
 
102
151
  // Reset lastIndex for each line
103
152
  importPattern.lastIndex = 0;
153
+ requirePattern.lastIndex = 0;
154
+
155
+ const strippedLine = stripStringLiterals(line);
104
156
 
105
157
  while ((match = importPattern.exec(line)) !== null) {
158
+ const importOffset = match[0].indexOf("import");
159
+ const importStart = match.index + importOffset;
160
+ if (
161
+ strippedLine.slice(importStart, importStart + "import".length) !==
162
+ "import"
163
+ ) {
164
+ continue;
165
+ }
166
+
106
167
  // Check if this match is after a // comment marker on the same line
107
- const beforeMatch = line.substring(0, match.index);
168
+ const beforeMatch = strippedLine.substring(0, match.index);
108
169
  if (beforeMatch.includes("//")) {
109
170
  continue;
110
171
  }
@@ -114,6 +175,30 @@ export function extractRelativeImports(
114
175
  lineNum: i + 1,
115
176
  });
116
177
  }
178
+
179
+ while ((match = requirePattern.exec(line)) !== null) {
180
+ if (
181
+ strippedLine.slice(match.index, match.index + "require".length) !==
182
+ "require"
183
+ ) {
184
+ continue;
185
+ }
186
+
187
+ // Check if this match is after a // comment marker on the same line
188
+ const beforeMatch = strippedLine.substring(0, match.index);
189
+ if (beforeMatch.includes("//")) {
190
+ continue;
191
+ }
192
+
193
+ imports.push({
194
+ importPath: match[2],
195
+ lineNum: i + 1,
196
+ });
197
+ }
198
+
199
+ if ((strippedLine.match(/(?<!\\)`/g) ?? []).length % 2 === 1) {
200
+ inTemplateLiteral = true;
201
+ }
117
202
  }
118
203
 
119
204
  return imports;
@@ -159,16 +244,6 @@ export function resolveImportPath(
159
244
  ".woff", ".woff2", ".ttf", ".otf", ".eot",
160
245
  ]);
161
246
  const runtimeFallbackExtensions = new Set([".js", ".jsx", ".mjs", ".cjs"]);
162
- const dottedStemFallbackExtensions = new Set([".server", ".client", ".webhook"]);
163
-
164
- if (
165
- explicitExt !== "" &&
166
- !runtimeFallbackExtensions.has(explicitExt) &&
167
- !nonFallbackExtensions.has(explicitExt) &&
168
- !dottedStemFallbackExtensions.has(explicitExt)
169
- ) {
170
- return { exists: false, resolvedPath: null };
171
- }
172
247
 
173
248
  if (nonFallbackExtensions.has(explicitExt) && !runtimeFallbackExtensions.has(explicitExt)) {
174
249
  return { exists: false, resolvedPath: null };
@@ -23,6 +23,7 @@ import { homedir } from "node:os";
23
23
  import { resolve } from "node:path";
24
24
  import type { TaskRow } from "./db-task-slice-rows.js";
25
25
  import type { PreExecutionCheckJSON } from "./verification-evidence.ts";
26
+ import { validateVerificationCommand } from "./verification-gate.js";
26
27
 
27
28
  const NPM_COMMAND = process.platform === "win32" ? "npm.cmd" : "npm";
28
29
 
@@ -37,6 +38,39 @@ export interface PreExecutionResult {
37
38
  durationMs: number;
38
39
  }
39
40
 
41
+ export interface PreExecutionCheckContext {
42
+ additionalRoots?: string[];
43
+ }
44
+
45
+ export function checkVerificationCommands(tasks: TaskRow[]): PreExecutionCheckJSON[] {
46
+ const results: PreExecutionCheckJSON[] = [];
47
+
48
+ for (const task of tasks) {
49
+ const verify = task.verify.trim();
50
+ if (!verify) continue;
51
+
52
+ const commands = verify
53
+ .split("&&")
54
+ .map((command) => command.trim())
55
+ .filter(Boolean);
56
+
57
+ for (const command of commands) {
58
+ const validation = validateVerificationCommand(command);
59
+ if (!validation.ok) {
60
+ results.push({
61
+ category: "tool",
62
+ target: `${task.id} Verify`,
63
+ passed: false,
64
+ message: `Unsafe or non-runnable Verify command: ${command} (${validation.reason})`,
65
+ blocking: true,
66
+ });
67
+ }
68
+ }
69
+ }
70
+
71
+ return results;
72
+ }
73
+
40
74
  // ─── Package Existence Check ─────────────────────────────────────────────────
41
75
 
42
76
  /**
@@ -105,7 +139,7 @@ export function extractPackageReferences(description: string): string[] {
105
139
  while ((importMatch = importPattern.exec(description)) !== null) {
106
140
  // Skip relative imports and node builtins
107
141
  const pkg = importMatch[1];
108
- if (!pkg.startsWith(".") && !pkg.startsWith("node:")) {
142
+ if (!pkg.startsWith(".") && !pkg.startsWith("node:") && !pkg.startsWith("@/")) {
109
143
  packages.add(normalizePackageName(pkg));
110
144
  }
111
145
  }
@@ -450,9 +484,11 @@ function getExpectedOutputsUpTo(tasks: TaskRow[], taskIndex: number): Set<string
450
484
  */
451
485
  export function checkFilePathConsistency(
452
486
  tasks: TaskRow[],
453
- basePath: string
487
+ basePath: string,
488
+ context?: PreExecutionCheckContext,
454
489
  ): PreExecutionCheckJSON[] {
455
490
  const results: PreExecutionCheckJSON[] = [];
491
+ const resolutionRoots = [basePath, ...(context?.additionalRoots ?? [])];
456
492
 
457
493
  // Build a set of all files created by any task at any position (normalized).
458
494
  // Used to suppress consistency errors for files that will be caught with a
@@ -480,8 +516,7 @@ export function checkFilePathConsistency(
480
516
  if (containsGlobPattern(normalizedFile)) continue;
481
517
 
482
518
  // Check if file exists on disk
483
- const absolutePath = resolve(basePath, normalizedFile);
484
- const existsOnDisk = existsSync(absolutePath);
519
+ const existsOnDisk = resolutionRoots.some((root) => existsSync(resolve(root, normalizedFile)));
485
520
 
486
521
  // Check if file is in prior expected outputs (priorOutputs already normalized)
487
522
  const inPriorOutputs = priorOutputs.has(normalizedFile);
@@ -527,9 +562,11 @@ export function checkFilePathConsistency(
527
562
  */
528
563
  export function checkTaskOrdering(
529
564
  tasks: TaskRow[],
530
- basePath: string
565
+ basePath: string,
566
+ context?: PreExecutionCheckContext,
531
567
  ): PreExecutionCheckJSON[] {
532
568
  const results: PreExecutionCheckJSON[] = [];
569
+ const resolutionRoots = [basePath, ...(context?.additionalRoots ?? [])];
533
570
 
534
571
  // Build map: normalized file → task index that creates it
535
572
  const fileCreators = new Map<string, { taskId: string; index: number; originalPath: string; completed: boolean }>();
@@ -567,8 +604,7 @@ export function checkTaskOrdering(
567
604
  // files, and a same-task output under the directory satisfies it.
568
605
  if (isDirectoryReference(file)) continue;
569
606
  const creator = fileCreators.get(normalizedFile);
570
- const absolutePath = resolve(basePath, normalizedFile);
571
- const existsOnDisk = existsSync(absolutePath);
607
+ const existsOnDisk = resolutionRoots.some((root) => existsSync(resolve(root, normalizedFile)));
572
608
  // Skip if the creating task has already completed — its output is available
573
609
  // regardless of disk state (e.g. file was a temp artifact cleaned up after
574
610
  // the task ran, or a replan introduced a new earlier-sequence task that
@@ -748,17 +784,19 @@ export function checkInterfaceContracts(
748
784
  */
749
785
  export async function runPreExecutionChecks(
750
786
  tasks: TaskRow[],
751
- basePath: string
787
+ basePath: string,
788
+ context?: PreExecutionCheckContext,
752
789
  ): Promise<PreExecutionResult> {
753
790
  const startTime = Date.now();
754
791
  const allChecks: PreExecutionCheckJSON[] = [];
755
792
 
756
793
  // Run sync checks first
757
- const fileChecks = checkFilePathConsistency(tasks, basePath);
758
- const orderingChecks = checkTaskOrdering(tasks, basePath);
794
+ const fileChecks = checkFilePathConsistency(tasks, basePath, context);
795
+ const orderingChecks = checkTaskOrdering(tasks, basePath, context);
759
796
  const contractChecks = checkInterfaceContracts(tasks, basePath);
797
+ const verificationChecks = checkVerificationCommands(tasks);
760
798
 
761
- allChecks.push(...fileChecks, ...orderingChecks, ...contractChecks);
799
+ allChecks.push(...fileChecks, ...orderingChecks, ...contractChecks, ...verificationChecks);
762
800
 
763
801
  // Run async package checks
764
802
  const packageChecks = await checkPackageExistence(tasks, basePath);
@@ -0,0 +1,27 @@
1
+ import type { ClaudeCodeMcpConfig, ClaudeCodeMcpPerModelEntry } from "./preferences-types.js";
2
+
3
+ /**
4
+ * Resolve MCP server config for a given model ID using longest-prefix-wins matching.
5
+ *
6
+ * Keys in config.per_model are model-ID prefixes. When modelId.startsWith(key),
7
+ * the key is a candidate; the longest matching key wins. Returns undefined when
8
+ * no key matches or per_model is empty.
9
+ */
10
+ export function resolveModelMcpConfig(
11
+ modelId: string,
12
+ config: ClaudeCodeMcpConfig,
13
+ ): ClaudeCodeMcpPerModelEntry | undefined {
14
+ let bestKey: string | undefined;
15
+
16
+ const perModel = config.per_model ?? {};
17
+
18
+ for (const key of Object.keys(perModel)) {
19
+ if (modelId.startsWith(key)) {
20
+ if (bestKey === undefined || key.length > bestKey.length) {
21
+ bestKey = key;
22
+ }
23
+ }
24
+ }
25
+
26
+ return bestKey !== undefined ? perModel[bestKey] : undefined;
27
+ }
@@ -152,6 +152,8 @@ export const KNOWN_PREFERENCE_KEYS = new Set<string>([
152
152
  "context_window_override",
153
153
  "context_mode",
154
154
  "planning_depth",
155
+ "claude_code_mcp",
156
+ "workspace",
155
157
  ]);
156
158
 
157
159
  /**
@@ -320,6 +322,33 @@ export interface CodebaseMapPreferences {
320
322
  collapse_threshold?: number;
321
323
  }
322
324
 
325
+ /** Per-model MCP server allow/block lists for a single model prefix. */
326
+ export interface ClaudeCodeMcpPerModelEntry {
327
+ allowed_servers?: string[];
328
+ blocked_servers?: string[];
329
+ }
330
+
331
+ /** Top-level claude_code_mcp preference: maps model-ID prefixes to server filter lists. */
332
+ export interface ClaudeCodeMcpConfig {
333
+ per_model?: Record<string, ClaudeCodeMcpPerModelEntry>;
334
+ }
335
+
336
+ export interface WorkspaceRepositoryPreference {
337
+ /** Child repository path; relative paths resolve from the project root. */
338
+ path: string;
339
+ /** Optional human-oriented role label (for prompts/reporting). */
340
+ role?: string;
341
+ /** Optional default verification commands for this repository. */
342
+ verification?: string[];
343
+ /** Optional per-repository commit execution policy for auto-mode turn commits. */
344
+ commit_policy?: "auto" | "skip";
345
+ }
346
+
347
+ export interface WorkspacePreferences {
348
+ /** Parent-workspace uses one parent .gsd coordinating child repos. */
349
+ mode?: "project" | "parent";
350
+ repositories?: Record<string, WorkspaceRepositoryPreference>;
351
+ }
323
352
  export interface GSDPreferences {
324
353
  version?: number;
325
354
  mode?: WorkflowMode;
@@ -415,6 +444,8 @@ export interface GSDPreferences {
415
444
  experimental?: ExperimentalPreferences;
416
445
  /** Configuration for the codebase map generator (/gsd codebase). */
417
446
  codebase?: CodebaseMapPreferences;
447
+ /** Multi-repository parent workspace configuration. */
448
+ workspace?: WorkspacePreferences;
418
449
  /** Slice-level parallelism within a milestone. Disabled by default. */
419
450
  slice_parallel?: { enabled?: boolean; max_workers?: number };
420
451
  /** LLM safety harness configuration. Monitors, validates, and constrains LLM behavior during auto-mode. Enabled by default with warn-and-continue policy. */
@@ -499,6 +530,8 @@ export interface GSDPreferences {
499
530
  * (e.g. "Chinese", "zh", "German", "de", "日本語"). Persists across /clear.
500
531
  */
501
532
  language?: string;
533
+ /** Per-model MCP server filtering configuration. Uses longest-prefix-wins matching. */
534
+ claude_code_mcp?: ClaudeCodeMcpConfig;
502
535
  }
503
536
 
504
537
  export interface LoadedGSDPreferences {
@@ -9,6 +9,7 @@
9
9
  import type { GitPreferences } from "./git-service.js";
10
10
  import type { PostUnitHookConfig, PreDispatchHookConfig, TokenProfile, PhaseSkipPreferences } from "./types.js";
11
11
  import type { DynamicRoutingConfig } from "./model-router.js";
12
+ import { isAbsolute } from "node:path";
12
13
  import { VALID_BRANCH_NAME } from "./git-service.js";
13
14
  import { normalizeStringArray } from "../shared/format-utils.js";
14
15
 
@@ -1216,6 +1217,150 @@ export function validatePreferences(preferences: GSDPreferences): {
1216
1217
  }
1217
1218
  }
1218
1219
 
1220
+ // ─── Claude Code MCP Per-Model Config ───────────────────────────────────────
1221
+ if (preferences.claude_code_mcp !== undefined) {
1222
+ if (typeof preferences.claude_code_mcp === "object" && preferences.claude_code_mcp !== null) {
1223
+ const raw = preferences.claude_code_mcp as unknown as Record<string, unknown>;
1224
+ if (typeof raw.per_model !== "object" || raw.per_model === null || Array.isArray(raw.per_model)) {
1225
+ warnings.push("claude_code_mcp.per_model must be an object — ignoring claude_code_mcp");
1226
+ } else {
1227
+ const perModel = raw.per_model as Record<string, unknown>;
1228
+ const validPerModel: Record<string, { allowed_servers?: string[]; blocked_servers?: string[] }> = {};
1229
+ for (const [prefix, entry] of Object.entries(perModel)) {
1230
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
1231
+ warnings.push(`claude_code_mcp.per_model["${prefix}"] must be an object — ignoring entry`);
1232
+ continue;
1233
+ }
1234
+ const e = entry as Record<string, unknown>;
1235
+ const validEntry: { allowed_servers?: string[]; blocked_servers?: string[] } = {};
1236
+ for (const field of ["allowed_servers", "blocked_servers"] as const) {
1237
+ if (e[field] !== undefined) {
1238
+ if (Array.isArray(e[field]) && (e[field] as unknown[]).every((s) => typeof s === "string")) {
1239
+ validEntry[field] = e[field] as string[];
1240
+ } else {
1241
+ warnings.push(`claude_code_mcp.per_model["${prefix}"].${field} must be an array of strings — ignoring field`);
1242
+ }
1243
+ }
1244
+ }
1245
+ validPerModel[prefix] = validEntry;
1246
+ }
1247
+ validated.claude_code_mcp = { per_model: validPerModel };
1248
+ }
1249
+ } else {
1250
+ warnings.push("claude_code_mcp must be an object — ignoring");
1251
+ }
1252
+ }
1253
+
1254
+ // ─── Workspace Repository Registry ─────────────────────────────────
1255
+ if (preferences.workspace !== undefined) {
1256
+ if (typeof preferences.workspace === "object" && preferences.workspace !== null && !Array.isArray(preferences.workspace)) {
1257
+ const workspace = preferences.workspace as Record<string, unknown>;
1258
+ const validWorkspace: NonNullable<GSDPreferences["workspace"]> = {};
1259
+
1260
+ if (workspace.mode !== undefined) {
1261
+ if (workspace.mode === "project" || workspace.mode === "parent") {
1262
+ validWorkspace.mode = workspace.mode;
1263
+ } else {
1264
+ errors.push('workspace.mode must be one of: project, parent');
1265
+ }
1266
+ }
1267
+
1268
+ if (workspace.repositories !== undefined) {
1269
+ if (
1270
+ typeof workspace.repositories === "object" &&
1271
+ workspace.repositories !== null &&
1272
+ !Array.isArray(workspace.repositories)
1273
+ ) {
1274
+ const repos = workspace.repositories as Record<string, unknown>;
1275
+ const validRepos: NonNullable<NonNullable<GSDPreferences["workspace"]>["repositories"]> = {};
1276
+ const normalizedPaths = new Set<string>();
1277
+
1278
+ for (const [repoId, repoValue] of Object.entries(repos)) {
1279
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(repoId)) {
1280
+ errors.push(`workspace.repositories key "${repoId}" must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/`);
1281
+ continue;
1282
+ }
1283
+ if (typeof repoValue !== "object" || repoValue === null || Array.isArray(repoValue)) {
1284
+ errors.push(`workspace.repositories.${repoId} must be an object`);
1285
+ continue;
1286
+ }
1287
+
1288
+ const repo = repoValue as Record<string, unknown>;
1289
+ const validRepo: import("./preferences-types.js").WorkspaceRepositoryPreference = { path: "" };
1290
+
1291
+ if (typeof repo.path === "string" && repo.path.trim().length > 0) {
1292
+ validRepo.path = repo.path.trim();
1293
+ if (isAbsolute(validRepo.path)) {
1294
+ errors.push(`workspace.repositories.${repoId}.path must be a relative path`);
1295
+ continue;
1296
+ }
1297
+ const normalizedPathKey = validRepo.path.replace(/\\/g, "/").replace(/\/+$/, "").toLowerCase();
1298
+ if (normalizedPaths.has(normalizedPathKey)) {
1299
+ errors.push(`workspace.repositories contains duplicate path: ${validRepo.path}`);
1300
+ continue;
1301
+ }
1302
+ normalizedPaths.add(normalizedPathKey);
1303
+ } else {
1304
+ errors.push(`workspace.repositories.${repoId}.path must be a non-empty string`);
1305
+ continue;
1306
+ }
1307
+
1308
+ if (repo.role !== undefined) {
1309
+ if (typeof repo.role === "string" && repo.role.trim().length > 0) validRepo.role = repo.role.trim();
1310
+ else errors.push(`workspace.repositories.${repoId}.role must be a non-empty string`);
1311
+ }
1312
+
1313
+ if (repo.verification !== undefined) {
1314
+ if (
1315
+ Array.isArray(repo.verification) &&
1316
+ repo.verification.every((v) => typeof v === "string" && v.trim().length > 0)
1317
+ ) {
1318
+ validRepo.verification = repo.verification.map((v) => v.trim());
1319
+ } else {
1320
+ errors.push(`workspace.repositories.${repoId}.verification must be an array of non-empty strings`);
1321
+ }
1322
+ }
1323
+
1324
+ if (repo.commit_policy !== undefined) {
1325
+ if (repo.commit_policy === "auto" || repo.commit_policy === "skip") {
1326
+ validRepo.commit_policy = repo.commit_policy;
1327
+ } else {
1328
+ errors.push(`workspace.repositories.${repoId}.commit_policy must be one of: auto, skip`);
1329
+ }
1330
+ }
1331
+
1332
+ const knownRepoKeys = new Set(["path", "role", "verification", "commit_policy"]);
1333
+ for (const key of Object.keys(repo)) {
1334
+ if (!knownRepoKeys.has(key)) {
1335
+ warnings.push(`unknown workspace.repositories.${repoId} key "${key}" — ignored`);
1336
+ }
1337
+ }
1338
+
1339
+ validRepos[repoId] = validRepo;
1340
+ }
1341
+
1342
+ if (Object.keys(validRepos).length > 0) {
1343
+ validWorkspace.repositories = validRepos;
1344
+ }
1345
+ } else {
1346
+ errors.push("workspace.repositories must be an object mapping repo ids to config");
1347
+ }
1348
+ }
1349
+
1350
+ const knownWorkspaceKeys = new Set(["mode", "repositories"]);
1351
+ for (const key of Object.keys(workspace)) {
1352
+ if (!knownWorkspaceKeys.has(key)) {
1353
+ warnings.push(`unknown workspace key "${key}" — ignored`);
1354
+ }
1355
+ }
1356
+
1357
+ if (Object.keys(validWorkspace).length > 0) {
1358
+ validated.workspace = validWorkspace;
1359
+ }
1360
+ } else {
1361
+ errors.push("workspace must be an object");
1362
+ }
1363
+ }
1219
1364
  // ─── Enhanced Verification ──────────────────────────────────────────────────
1220
1365
  if (preferences.enhanced_verification !== undefined) {
1221
1366
  if (typeof preferences.enhanced_verification === "boolean") {
@@ -55,6 +55,8 @@ export type {
55
55
  UokTurnActionMode,
56
56
  UokPreferences,
57
57
  CodebaseMapPreferences,
58
+ ClaudeCodeMcpPerModelEntry,
59
+ ClaudeCodeMcpConfig,
58
60
  GSDPreferences,
59
61
  LoadedGSDPreferences,
60
62
  SkillResolution,
@@ -99,6 +101,9 @@ export {
99
101
  resolveDisabledModelProvidersFromPreferences,
100
102
  } from "./preferences-models.js";
101
103
 
104
+ // ─── Re-exports: MCP ────────────────────────────────────────────────────────
105
+ export { resolveModelMcpConfig } from "./preferences-mcp.js";
106
+
102
107
  // ─── Path Constants & Getters ───────────────────────────────────────────────
103
108
 
104
109
  function globalPreferencesPath(): string {
@@ -200,7 +200,7 @@ export function loadPrompt(name: string, vars: Record<string, string> = {}): str
200
200
  if (missing.length > 0) {
201
201
  throw new GSDError(
202
202
  GSD_PARSE_ERROR,
203
- `loadPrompt("${name}"): template declares {{${missing.join("}}, {{")}}}} but no value was provided. ` +
203
+ `loadPrompt("${name}"): template declares {{${missing.join("}}, {{")}}} but no value was provided. ` +
204
204
  `This usually means the extension code in memory is older than the template on disk. ` +
205
205
  `Restart pi to reload the extension.`,
206
206
  );
@@ -57,7 +57,7 @@ Subagents report only; they do not write user source. Fold any findings into Dec
57
57
  **Success path** (all verifications passed):
58
58
 
59
59
  10. For each requirement whose status changed in step 9, call `gsd_requirement_update` with the requirement ID and updated `status` and `validation` fields — the tool regenerates `.gsd/REQUIREMENTS.md` automatically. Do this BEFORE completing the milestone so requirement updates are persisted.
60
- 11. Update `.gsd/PROJECT.md`: use the `write` tool with `path: ".gsd/PROJECT.md"` and `content` containing the full updated document reflecting milestone completion and current project state. Do NOT use the `edit` tool for this PROJECT.md is a full-document refresh.
60
+ 11. Refresh the project state through `gsd_summary_save` with `artifact_type: "PROJECT"` and the full updated project markdown as `content`; omit `milestone_id`. The tool persists the DB-backed PROJECT artifact and renders `.gsd/PROJECT.md`. Do not write or edit `.gsd/PROJECT.md` directly.
61
61
  12. Extract structured learnings from this milestone and persist them to the GSD memory store. Follow the procedure block immediately below — it writes `{{milestoneId}}-LEARNINGS.md` as the audit trail and persists Patterns, Lessons, and Decisions via `capture_thought` (categories: pattern, gotcha/convention, architecture). The memory store is the single source of truth for cross-session durable knowledge (ADR-013).
62
62
 
63
63
  {{extractLearningsSteps}}
@@ -34,7 +34,7 @@ Use `subagent` only for fresh-context review when useful: reviewer for cross-cut
34
34
  12. Review the inlined task-summary excerpts for DECISIONS.md and KNOWLEDGE.md-worthy decisions, patterns, and gotchas. Read full `*-SUMMARY.md` files only when an excerpt is absent, truncated, or lacks the specific evidence needed for the slice narrative. Capture significant items with `capture_thought`; do not append knowledge files directly.
35
35
  13. When verification passes, call `gsd_slice_complete`. The DB-backed tool is the canonical write path. Do **not** manually write `{{sliceSummaryPath}}`. Do **not** manually write `{{sliceUatPath}}`. Do not edit roadmap checkboxes; the tool renders files and updates projections.
36
36
  14. Do not run git commands.
37
- 15. Update `.gsd/PROJECT.md` with a full `write` only if the current project state needs refresh.
37
+ 15. If the current project state needs refresh, call `gsd_summary_save` with `artifact_type: "PROJECT"` and the full updated project markdown as `content`; omit `milestone_id`. Do not write or edit `.gsd/PROJECT.md` directly.
38
38
 
39
39
  **Autonomous execution:** no human is available. Do not call `ask_user_questions` or `secure_env_collect`; make reasonable assumptions and document them.
40
40
 
@@ -106,8 +106,8 @@ Directories use bare IDs. Files use ID-SUFFIX format. Titles live inside content
106
106
 
107
107
  In a single pass:
108
108
  1. `mkdir -p .gsd/milestones/{{milestoneId}}/slices`
109
- 2. Write or update `.gsd/PROJECT.md` use the **Project** output template below. Describe what the project is, its current state, and list the milestone sequence.
110
- 3. Write or update `.gsd/REQUIREMENTS.md` use the **Requirements** output template below. Confirm states, ownership, and traceability before roadmap creation.
109
+ 2. Call `gsd_summary_save` with `artifact_type: "PROJECT"` and full Project template content. The tool persists the DB-backed PROJECT artifact and renders `.gsd/PROJECT.md`. Describe what the project is, its current state, and list the milestone sequence.
110
+ 3. Persist requirements with `gsd_requirement_save` or `gsd_requirement_update`, then call `gsd_summary_save` with `artifact_type: "REQUIREMENTS"` so the tool renders `.gsd/REQUIREMENTS.md` from DB rows. Confirm states, ownership, and traceability before roadmap creation.
111
111
 
112
112
  **Depth-Preservation Guidance for context.md:** Preserve the specification's exact terminology, emphasis, and framing. Do not flatten domain-specific language into generics. CONTEXT.md is downstream agents' only window into this spec.
113
113
 
@@ -120,8 +120,8 @@ In a single pass:
120
120
 
121
121
  Before emitting the ready phrase, verify in the CURRENT turn that you have:
122
122
 
123
- - [ ] Written `.gsd/PROJECT.md` (step 2)
124
- - [ ] Written `.gsd/REQUIREMENTS.md` (step 3)
123
+ - [ ] Called `gsd_summary_save` for the PROJECT artifact (step 2)
124
+ - [ ] Persisted requirements and called `gsd_summary_save` for the REQUIREMENTS artifact (step 3)
125
125
  - [ ] Written `{{contextPath}}` (step 4)
126
126
  - [ ] Called `gsd_plan_milestone` (step 5)
127
127
 
@@ -145,8 +145,8 @@ Next steps:
145
145
  #### Phase 1: Shared artifacts
146
146
 
147
147
  1. For each milestone, call `gsd_milestone_generate_id`; never invent IDs. Then `mkdir -p .gsd/milestones/<ID>/slices`.
148
- 2. Write `.gsd/PROJECT.md` use the **Project** output template below.
149
- 3. Write `.gsd/REQUIREMENTS.md` use the **Requirements** output template below. Capture Active, Deferred, Out of Scope, and any already Validated requirements. Later milestones may have provisional ownership where slice plans do not exist yet.
148
+ 2. Call `gsd_summary_save` with `artifact_type: "PROJECT"` and full Project template content so the tool persists the DB-backed PROJECT artifact and renders `.gsd/PROJECT.md`.
149
+ 3. Persist requirements with `gsd_requirement_save` or `gsd_requirement_update`, then call `gsd_summary_save` with `artifact_type: "REQUIREMENTS"` so the tool renders `.gsd/REQUIREMENTS.md` from DB rows. Capture Active, Deferred, Out of Scope, and any already Validated requirements. Later milestones may have provisional ownership where slice plans do not exist yet.
150
150
  4. For any architectural or pattern decisions, call `gsd_decision_save` — the tool auto-assigns IDs and regenerates `.gsd/DECISIONS.md` automatically.
151
151
 
152
152
  #### Phase 2: Primary milestone
@@ -214,8 +214,8 @@ For single-milestone projects, do NOT write this file.
214
214
 
215
215
  Before emitting the ready phrase, verify in the CURRENT turn that you have:
216
216
 
217
- - [ ] Written `.gsd/PROJECT.md`
218
- - [ ] Written `.gsd/REQUIREMENTS.md`
217
+ - [ ] Called `gsd_summary_save` for the PROJECT artifact
218
+ - [ ] Persisted requirements and called `gsd_summary_save` for the REQUIREMENTS artifact
219
219
  - [ ] Written the primary milestone `CONTEXT.md`
220
220
  - [ ] Called `gsd_plan_milestone` for the primary milestone
221
221
  - [ ] Written `.gsd/DISCUSSION-MANIFEST.json` with `gates_completed === total`