gsd-pi 2.79.0 → 2.80.0-dev.710c06e97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (774) hide show
  1. package/README.md +94 -47
  2. package/dist/loader.js +0 -0
  3. package/dist/resources/.managed-resources-content-hash +1 -1
  4. package/dist/resources/extensions/github-sync/templates.js +90 -74
  5. package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
  6. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  7. package/dist/resources/extensions/gsd/auto/loop.js +365 -522
  8. package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
  9. package/dist/resources/extensions/gsd/auto/phases.js +61 -7
  10. package/dist/resources/extensions/gsd/auto/run-unit.js +19 -15
  11. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  12. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  13. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  16. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  17. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  18. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  19. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  20. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  21. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  22. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  23. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  24. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  29. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  30. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  31. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  32. package/dist/resources/extensions/gsd/auto-dashboard.js +54 -15
  33. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -0
  34. package/dist/resources/extensions/gsd/auto-prompts.js +220 -32
  35. package/dist/resources/extensions/gsd/auto-recovery.js +90 -58
  36. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  37. package/dist/resources/extensions/gsd/auto-start.js +3 -2
  38. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  39. package/dist/resources/extensions/gsd/auto-worktree.js +87 -38
  40. package/dist/resources/extensions/gsd/auto.js +159 -2
  41. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +24 -2
  42. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  43. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
  44. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +63 -51
  45. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +137 -9
  46. package/dist/resources/extensions/gsd/commands/context.js +1 -1
  47. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  48. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  49. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  50. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  51. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  52. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  53. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  54. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  55. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  56. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  57. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  58. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  59. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  60. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  61. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  62. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  63. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  64. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  65. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  66. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  67. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  68. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  69. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  70. package/dist/resources/extensions/gsd/escalation.js +2 -0
  71. package/dist/resources/extensions/gsd/graph.js +9 -3
  72. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  73. package/dist/resources/extensions/gsd/guided-flow.js +40 -0
  74. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  75. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  76. package/dist/resources/extensions/gsd/model-router.js +9 -6
  77. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  78. package/dist/resources/extensions/gsd/paths.js +5 -1
  79. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  80. package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
  81. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  82. package/dist/resources/extensions/gsd/preferences-types.js +20 -2
  83. package/dist/resources/extensions/gsd/preferences-validation.js +3 -3
  84. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  85. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  86. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  87. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  88. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  89. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  90. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  91. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  92. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  93. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  94. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  95. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  96. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  97. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  98. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  99. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  100. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  101. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  102. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  103. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  104. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  105. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  106. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  107. package/dist/resources/extensions/gsd/state.js +4 -0
  108. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  109. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  110. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +88 -3
  111. package/dist/resources/extensions/gsd/unit-context-composer.js +32 -0
  112. package/dist/resources/extensions/gsd/unit-context-manifest.js +21 -0
  113. package/dist/resources/extensions/gsd/uok/audit.js +23 -9
  114. package/dist/resources/extensions/gsd/uok/contracts.js +69 -1
  115. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +3 -0
  116. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  117. package/dist/resources/extensions/gsd/uok/loop-adapter.js +48 -33
  118. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  119. package/dist/resources/extensions/gsd/uok/timeline.js +125 -0
  120. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  121. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  122. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  123. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  124. package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
  125. package/dist/resources/extensions/shared/gsd-phase-state.js +45 -3
  126. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  127. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  128. package/dist/web/standalone/.next/BUILD_ID +1 -1
  129. package/dist/web/standalone/.next/app-path-routes-manifest.json +7 -7
  130. package/dist/web/standalone/.next/build-manifest.json +4 -4
  131. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  132. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  133. package/dist/web/standalone/.next/required-server-files.json +4 -4
  134. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  135. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  140. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  145. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  147. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  148. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  149. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  150. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  151. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  152. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  153. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  164. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  180. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  186. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  189. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  192. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  195. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  198. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  201. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  204. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  207. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  209. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  210. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  213. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  216. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  218. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  219. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  221. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  223. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  226. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  231. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  232. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  235. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  238. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  243. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  244. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  246. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  247. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  249. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  250. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  251. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  252. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  253. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  256. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  258. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  259. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  261. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  262. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  263. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  264. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  265. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  266. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  267. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  268. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  269. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  270. package/dist/web/standalone/.next/server/app/index.html +1 -1
  271. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  272. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  273. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  274. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  275. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  276. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  277. package/dist/web/standalone/.next/server/app/page.js +2 -2
  278. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  279. package/dist/web/standalone/.next/server/app-paths-manifest.json +7 -7
  280. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  281. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  282. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  283. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  284. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  285. package/dist/web/standalone/.next/server/middleware.js +2 -2
  286. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  287. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  288. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  289. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  290. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  291. package/dist/web/standalone/.next/static/chunks/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
  292. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  293. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  294. package/dist/web/standalone/.next/static/chunks/app/page-fab3ebb85b006001.js +1 -0
  295. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  296. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  297. package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
  298. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  299. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  300. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  301. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  302. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  303. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  304. package/dist/web/standalone/package.json +1 -0
  305. package/dist/web/standalone/server.js +1 -1
  306. package/package.json +15 -6
  307. package/packages/contracts/dist/index.d.ts +3 -0
  308. package/packages/contracts/dist/index.d.ts.map +1 -0
  309. package/packages/contracts/dist/index.js +5 -0
  310. package/packages/contracts/dist/index.js.map +1 -0
  311. package/packages/contracts/dist/rpc.d.ts +549 -0
  312. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  313. package/packages/contracts/dist/rpc.js +53 -0
  314. package/packages/contracts/dist/rpc.js.map +1 -0
  315. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  316. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  317. package/packages/contracts/dist/rpc.test.js +47 -0
  318. package/packages/contracts/dist/rpc.test.js.map +1 -0
  319. package/packages/contracts/dist/workflow.d.ts +180 -0
  320. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  321. package/packages/contracts/dist/workflow.js +201 -0
  322. package/packages/contracts/dist/workflow.js.map +1 -0
  323. package/packages/contracts/package.json +39 -0
  324. package/packages/contracts/src/index.ts +5 -0
  325. package/packages/contracts/src/rpc.test.ts +72 -0
  326. package/packages/contracts/src/rpc.ts +286 -0
  327. package/packages/contracts/src/workflow.ts +213 -0
  328. package/packages/contracts/tsconfig.json +25 -0
  329. package/packages/daemon/package.json +3 -2
  330. package/packages/daemon/src/event-bridge.test.ts +2 -1
  331. package/packages/daemon/src/event-bridge.ts +1 -1
  332. package/packages/daemon/src/event-formatter.test.ts +1 -2
  333. package/packages/daemon/src/event-formatter.ts +1 -2
  334. package/packages/daemon/src/session-manager.ts +2 -2
  335. package/packages/daemon/src/types.ts +3 -18
  336. package/packages/mcp-server/dist/server.d.ts +13 -0
  337. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  338. package/packages/mcp-server/dist/server.js +77 -0
  339. package/packages/mcp-server/dist/server.js.map +1 -1
  340. package/packages/mcp-server/dist/session-manager.js +1 -1
  341. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  342. package/packages/mcp-server/dist/types.d.ts +3 -11
  343. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  344. package/packages/mcp-server/dist/types.js.map +1 -1
  345. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  346. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  347. package/packages/mcp-server/dist/workflow-tools.js +52 -37
  348. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  349. package/packages/mcp-server/package.json +3 -2
  350. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  351. package/packages/mcp-server/src/server.ts +99 -1
  352. package/packages/mcp-server/src/session-manager.ts +2 -2
  353. package/packages/mcp-server/src/types.ts +7 -18
  354. package/packages/mcp-server/src/workflow-tools.test.ts +129 -2
  355. package/packages/mcp-server/src/workflow-tools.ts +80 -37
  356. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  357. package/packages/native/package.json +1 -1
  358. package/packages/pi-agent-core/package.json +1 -1
  359. package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
  360. package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
  361. package/packages/pi-ai/dist/models/fake-model.js +27 -0
  362. package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
  363. package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
  364. package/packages/pi-ai/dist/models/index.js +8 -0
  365. package/packages/pi-ai/dist/models/index.js.map +1 -1
  366. package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
  367. package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
  368. package/packages/pi-ai/dist/providers/fake.js +319 -0
  369. package/packages/pi-ai/dist/providers/fake.js.map +1 -0
  370. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  371. package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
  372. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  373. package/packages/pi-ai/package.json +1 -1
  374. package/packages/pi-ai/src/models/fake-model.ts +30 -0
  375. package/packages/pi-ai/src/models/index.ts +9 -0
  376. package/packages/pi-ai/src/providers/fake.ts +376 -0
  377. package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
  378. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  379. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  380. package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
  381. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  382. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +4 -0
  383. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  384. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  385. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  386. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  387. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  388. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  389. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +22 -0
  390. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  391. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
  392. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
  393. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
  394. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
  395. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
  396. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
  397. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
  398. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
  399. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +8 -8
  400. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  401. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  402. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  403. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
  404. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  406. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  407. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  408. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  409. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +48 -15
  410. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  411. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  412. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -0
  413. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  414. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +40 -1
  415. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  416. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
  417. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  418. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  419. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  420. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  421. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +12 -1
  422. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  423. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  424. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  425. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  426. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
  427. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  428. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
  429. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
  430. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
  431. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
  432. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  433. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  434. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
  435. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  436. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  437. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  438. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  440. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
  441. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
  442. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
  443. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
  444. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
  445. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
  446. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +27 -0
  447. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
  448. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  449. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  450. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  451. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  452. package/packages/pi-coding-agent/package.json +2 -1
  453. package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
  454. package/packages/pi-coding-agent/src/core/settings-manager.ts +12 -0
  455. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  456. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +37 -2
  457. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
  458. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
  459. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +8 -8
  460. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  461. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  462. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +50 -15
  463. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +43 -1
  464. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -0
  465. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
  466. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
  467. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +75 -9
  468. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
  469. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
  470. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
  471. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
  472. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +40 -0
  473. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
  474. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  475. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  476. package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
  477. package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
  478. package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
  479. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
  480. package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
  481. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  482. package/packages/pi-tui/dist/index.d.ts +1 -0
  483. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  484. package/packages/pi-tui/dist/index.js +2 -0
  485. package/packages/pi-tui/dist/index.js.map +1 -1
  486. package/packages/pi-tui/dist/style.d.ts +41 -0
  487. package/packages/pi-tui/dist/style.d.ts.map +1 -0
  488. package/packages/pi-tui/dist/style.js +158 -0
  489. package/packages/pi-tui/dist/style.js.map +1 -0
  490. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  491. package/packages/pi-tui/dist/tui.js +1 -0
  492. package/packages/pi-tui/dist/tui.js.map +1 -1
  493. package/packages/pi-tui/package.json +1 -1
  494. package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
  495. package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
  496. package/packages/pi-tui/src/index.ts +9 -0
  497. package/packages/pi-tui/src/style.ts +225 -0
  498. package/packages/pi-tui/src/tui.ts +1 -0
  499. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  500. package/packages/rpc-client/README.md +3 -3
  501. package/packages/rpc-client/dist/index.d.ts +1 -1
  502. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  503. package/packages/rpc-client/dist/index.js.map +1 -1
  504. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  505. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  506. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  507. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  508. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  509. package/packages/rpc-client/dist/rpc-types.js +3 -11
  510. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  511. package/packages/rpc-client/package.json +4 -1
  512. package/packages/rpc-client/src/index.ts +1 -1
  513. package/packages/rpc-client/src/rpc-client.ts +3 -6
  514. package/packages/rpc-client/src/rpc-types.ts +3 -398
  515. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  516. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  517. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  518. package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
  519. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  520. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  521. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  522. package/pkg/dist/modes/interactive/theme/theme.js +18 -1
  523. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  524. package/pkg/package.json +1 -1
  525. package/src/resources/extensions/github-sync/templates.ts +93 -88
  526. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
  527. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  528. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  529. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  530. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  531. package/src/resources/extensions/gsd/auto/loop.ts +416 -596
  532. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  533. package/src/resources/extensions/gsd/auto/phases.ts +88 -9
  534. package/src/resources/extensions/gsd/auto/run-unit.ts +24 -14
  535. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  536. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  537. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  538. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  539. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  540. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  541. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  542. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  543. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  544. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  545. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  546. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  547. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  548. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  549. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  550. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  551. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  552. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  553. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  554. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  555. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  556. package/src/resources/extensions/gsd/auto-dashboard.ts +61 -8
  557. package/src/resources/extensions/gsd/auto-dispatch.ts +1 -0
  558. package/src/resources/extensions/gsd/auto-prompts.ts +276 -31
  559. package/src/resources/extensions/gsd/auto-recovery.ts +84 -56
  560. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  561. package/src/resources/extensions/gsd/auto-start.ts +3 -2
  562. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  563. package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
  564. package/src/resources/extensions/gsd/auto.ts +167 -1
  565. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +30 -2
  566. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  567. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
  568. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +79 -52
  569. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-shouldblock-basepath.test.ts +97 -0
  570. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +143 -5
  571. package/src/resources/extensions/gsd/commands/context.ts +1 -1
  572. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  573. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  574. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  575. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  576. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  577. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  578. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  579. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  580. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  581. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  582. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  583. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  584. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  585. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  586. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  587. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  588. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  589. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  590. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  591. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  592. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  593. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  594. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  595. package/src/resources/extensions/gsd/escalation.ts +3 -1
  596. package/src/resources/extensions/gsd/graph.ts +12 -5
  597. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  598. package/src/resources/extensions/gsd/guided-flow.ts +47 -0
  599. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  600. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  601. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  602. package/src/resources/extensions/gsd/model-router.ts +10 -6
  603. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  604. package/src/resources/extensions/gsd/paths.ts +6 -1
  605. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  606. package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
  607. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  608. package/src/resources/extensions/gsd/preferences-types.ts +23 -4
  609. package/src/resources/extensions/gsd/preferences-validation.ts +3 -3
  610. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  611. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  612. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  613. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  614. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  615. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  616. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  617. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  618. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  619. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  620. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  621. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  622. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  623. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  624. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  625. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  626. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  627. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  628. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  629. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  630. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  631. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  632. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  633. package/src/resources/extensions/gsd/state.ts +6 -3
  634. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +38 -0
  635. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +98 -0
  636. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +117 -0
  637. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  638. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  639. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +153 -1
  640. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  641. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  642. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -2
  643. package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +203 -0
  644. package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +148 -0
  645. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  646. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  647. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  648. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  649. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  650. package/src/resources/extensions/gsd/tests/current-directory-root-homedir-fallback.test.ts +63 -0
  651. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  652. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  653. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  654. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  655. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  656. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  657. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  658. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  659. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  660. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  661. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  662. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  663. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  664. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
  665. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  666. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  667. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  668. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  669. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  670. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  671. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  672. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  673. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  674. package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +42 -0
  675. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +63 -2
  676. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  677. package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +109 -0
  678. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  679. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
  680. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
  681. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
  682. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
  683. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  684. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  685. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  686. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  687. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  688. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  689. package/src/resources/extensions/gsd/tests/guided-flow-prompt-consolidation.test.ts +14 -0
  690. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  691. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  692. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  693. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  694. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  695. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  696. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  697. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  698. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  699. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  700. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +8 -0
  701. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  702. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  703. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  704. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  705. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  706. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
  707. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
  708. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  709. package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +3 -0
  710. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  711. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  712. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  713. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +85 -0
  714. package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +2 -0
  715. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +59 -0
  716. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  717. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +42 -4
  718. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +32 -0
  719. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +109 -1
  720. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  721. package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +98 -0
  722. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  723. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  724. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  725. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  726. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  727. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  728. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  729. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  730. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  731. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  732. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  733. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  734. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  735. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  736. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  737. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  738. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  739. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  740. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +164 -3
  741. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  742. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  743. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  744. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
  745. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +3 -0
  746. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  747. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
  748. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  749. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  750. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +90 -2
  751. package/src/resources/extensions/gsd/unit-context-composer.ts +49 -0
  752. package/src/resources/extensions/gsd/unit-context-manifest.ts +34 -0
  753. package/src/resources/extensions/gsd/uok/audit.ts +25 -9
  754. package/src/resources/extensions/gsd/uok/contracts.ts +105 -0
  755. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +4 -0
  756. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  757. package/src/resources/extensions/gsd/uok/loop-adapter.ts +60 -45
  758. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  759. package/src/resources/extensions/gsd/uok/timeline.ts +158 -0
  760. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  761. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  762. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  763. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  764. package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
  765. package/src/resources/extensions/shared/gsd-phase-state.ts +56 -3
  766. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  767. package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +43 -1
  768. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  769. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  770. package/dist/web/standalone/.next/static/chunks/app/page-ff639266d978f2a0.js +0 -1
  771. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  772. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  773. /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → CaMwumvGbBPZrJicfsCzV}/_buildManifest.js +0 -0
  774. /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → CaMwumvGbBPZrJicfsCzV}/_ssgManifest.js +0 -0
@@ -70,6 +70,7 @@ import {
70
70
  } from "./preparation.js";
71
71
  import { verifyExpectedArtifact } from "./auto-recovery.js";
72
72
  import { createWorkspace, scopeMilestone, type MilestoneScope } from "./workspace.js";
73
+ import { getPendingGate, extractDepthVerificationMilestoneId } from "./bootstrap/write-gate.js";
73
74
 
74
75
  // ─── Re-exports (preserve public API for existing importers) ────────────────
75
76
  export {
@@ -410,6 +411,15 @@ export async function checkDeepProjectSetupAfterTurn(
410
411
  }
411
412
  }
412
413
 
414
+ // R2: a depth-verification gate is still pending — the LLM emitted the
415
+ // confirmation question (via ask_user_questions or plain chat) but the user
416
+ // has not approved yet. Returning false keeps the entry in the
417
+ // pendingDeepProjectSetupMap so the next user message can resume.
418
+ const pendingGateId = getPendingGate(entry.basePath);
419
+ if (pendingGateId) {
420
+ return false;
421
+ }
422
+
413
423
  return dispatchNextDeepProjectSetupStage(entry);
414
424
  }
415
425
 
@@ -494,6 +504,25 @@ export function checkAutoStartAfterDiscuss(): boolean {
494
504
  const roadmapFile = existsSync(roadmapFilePath) ? roadmapFilePath : null;
495
505
  if (!contextFile && !roadmapFile) return false; // neither artifact yet — keep waiting
496
506
 
507
+ // Gate 1a: a depth-verification gate is still pending for THIS milestone — the
508
+ // LLM emitted the confirmation question (via ask_user_questions or plain chat)
509
+ // but the user has not answered yet. Advancing now would skip the gate and
510
+ // race ahead with unverified context.
511
+ const basePathForGate = entry.scope.workspace.projectRoot;
512
+ const pendingGateId = getPendingGate(basePathForGate);
513
+ if (pendingGateId) {
514
+ const pendingMilestoneId = extractDepthVerificationMilestoneId(pendingGateId);
515
+ // Block advancement if the gate is for THIS milestone, OR if it's a
516
+ // project/requirements gate (no milestone id encoded) for the deep setup flow.
517
+ const isProjectGate =
518
+ pendingGateId === "depth_verification_project_confirm" ||
519
+ pendingGateId === "depth_verification_requirements_confirm" ||
520
+ pendingGateId === "depth_verification_research_decision_confirm";
521
+ if (pendingMilestoneId === milestoneId || isProjectGate) {
522
+ return false;
523
+ }
524
+ }
525
+
497
526
  // Gate 1b: Discriminate plan-blocked from discuss-incomplete when the DB row is queued.
498
527
  // If the DB is available and the row is still "queued" but CONTEXT.md already exists on
499
528
  // disk, the discuss phase completed but gsd_plan_milestone was hard-blocked by the
@@ -628,6 +657,24 @@ export function checkAutoStartAfterDiscuss(): boolean {
628
657
  try { unlinkSync(manifestPath); } catch (e) { logWarning("guided", `manifest unlink failed: ${(e as Error).message}`); }
629
658
  }
630
659
 
660
+ // R3b: belt-and-suspenders for silent registration failure. The discuss flow
661
+ // finished and STATE.md exists, but the milestone may never have landed in
662
+ // the DB. Without this guard, the user sees "Milestone M001 ready." and then
663
+ // /gsd reports "No Active Milestone".
664
+ if (isDbAvailable()) {
665
+ const milestoneRow = getMilestone(milestoneId);
666
+ if (!milestoneRow) {
667
+ ctx.ui.notify(
668
+ `Milestone ${milestoneId}: discuss artifacts on disk but no DB row exists. ` +
669
+ `PROJECT.md may have failed to register milestones. ` +
670
+ `Re-save PROJECT.md with canonical "- [ ] M001: Title — One-liner" lines, ` +
671
+ `then re-run /gsd to recover.`,
672
+ "error",
673
+ );
674
+ return false;
675
+ }
676
+ }
677
+
631
678
  pendingAutoStartMap.delete(basePath);
632
679
  ctx.ui.notify(`Milestone ${milestoneId} ready.`, "success");
633
680
  startAutoDetached(ctx, pi, basePath, false, { step });
@@ -37,6 +37,7 @@ export interface PausedSessionMetadata {
37
37
  activeRunDir?: string | null;
38
38
  autoStartTime?: number;
39
39
  milestoneLock?: string | null;
40
+ pauseReason?: string;
40
41
  }
41
42
 
42
43
  export interface InterruptedSessionAssessment {
@@ -0,0 +1,99 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Runtime counters for telemetry-gated legacy compatibility paths.
3
+
4
+ import { mkdirSync, writeFileSync } from "node:fs";
5
+ import { dirname } from "node:path";
6
+
7
+ import { logWarning } from "./workflow-logger.js";
8
+
9
+ export type LegacyTelemetryCounter =
10
+ | "legacy.markdownFallbackUsed"
11
+ | "legacy.workflowEngineUsed"
12
+ | "legacy.uokFallbackUsed"
13
+ | "legacy.mcpAliasUsed"
14
+ | "legacy.componentFormatUsed"
15
+ | "legacy.providerDefaultUsed";
16
+
17
+ export type LegacyTelemetrySnapshot = Record<LegacyTelemetryCounter, number>;
18
+
19
+ export interface LegacyTelemetryReport {
20
+ ts: string;
21
+ counters: LegacyTelemetrySnapshot;
22
+ }
23
+
24
+ const COUNTERS: LegacyTelemetryCounter[] = [
25
+ "legacy.markdownFallbackUsed",
26
+ "legacy.workflowEngineUsed",
27
+ "legacy.uokFallbackUsed",
28
+ "legacy.mcpAliasUsed",
29
+ "legacy.componentFormatUsed",
30
+ "legacy.providerDefaultUsed",
31
+ ];
32
+
33
+ const values: LegacyTelemetrySnapshot = Object.fromEntries(
34
+ COUNTERS.map((counter) => [counter, 0]),
35
+ ) as LegacyTelemetrySnapshot;
36
+
37
+ const warnedCounters = new Set<LegacyTelemetryCounter>();
38
+
39
+ const DIAGNOSTICS: Record<LegacyTelemetryCounter, string> = {
40
+ "legacy.markdownFallbackUsed": "Deprecated markdown state fallback used; migrate projects to DB-authoritative state before removing markdown derivation.",
41
+ "legacy.workflowEngineUsed": "Deprecated workflow engine path used; prefer auto-milestone workflow templates before removing legacy engines.",
42
+ "legacy.uokFallbackUsed": "Deprecated UOK fallback path used; resolve UOK kernel blockers before removing parity fallback wrappers.",
43
+ "legacy.mcpAliasUsed": "Deprecated MCP alias tool used; update callers to the canonical gsd_* tool name before alias removal.",
44
+ "legacy.componentFormatUsed": "Deprecated component format loaded; migrate skills/agents to component.yaml before removing legacy loaders.",
45
+ "legacy.providerDefaultUsed": "Provider-specific default fallback used without an explicit available model; configure provider-aware model preferences before removing defaults.",
46
+ };
47
+
48
+ process.once("beforeExit", persistLegacyTelemetry);
49
+
50
+ export function incrementLegacyTelemetry(counter: LegacyTelemetryCounter, amount = 1): void {
51
+ if (!Number.isFinite(amount) || amount <= 0) return;
52
+ values[counter] += amount;
53
+ emitLegacyDiagnostic(counter);
54
+ persistLegacyTelemetry();
55
+ }
56
+
57
+ export function getLegacyTelemetry(): LegacyTelemetrySnapshot {
58
+ return { ...values };
59
+ }
60
+
61
+ export function resetLegacyTelemetry(): void {
62
+ for (const counter of COUNTERS) {
63
+ values[counter] = 0;
64
+ }
65
+ warnedCounters.clear();
66
+ }
67
+
68
+ export function listLegacyTelemetryCounters(): LegacyTelemetryCounter[] {
69
+ return [...COUNTERS];
70
+ }
71
+
72
+ export function getLegacyTelemetryReport(): LegacyTelemetryReport {
73
+ return {
74
+ ts: new Date().toISOString(),
75
+ counters: getLegacyTelemetry(),
76
+ };
77
+ }
78
+
79
+ export function persistLegacyTelemetrySnapshot(): void {
80
+ persistLegacyTelemetry();
81
+ }
82
+
83
+ function emitLegacyDiagnostic(counter: LegacyTelemetryCounter): void {
84
+ if (warnedCounters.has(counter)) return;
85
+ warnedCounters.add(counter);
86
+ logWarning("migration", DIAGNOSTICS[counter], { counter });
87
+ }
88
+
89
+ function persistLegacyTelemetry(): void {
90
+ const outputPath = process.env.GSD_LEGACY_TELEMETRY_FILE?.trim();
91
+ if (!outputPath) return;
92
+
93
+ try {
94
+ mkdirSync(dirname(outputPath), { recursive: true });
95
+ writeFileSync(outputPath, `${JSON.stringify(getLegacyTelemetryReport(), null, 2)}\n`, "utf-8");
96
+ } catch {
97
+ // Legacy cleanup telemetry must never block runtime paths.
98
+ }
99
+ }
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Markdown projection renderer for GSD workflow database rows.
1
3
  // GSD Markdown Renderer — DB → Markdown file generation
2
4
  //
3
5
  // Transforms DB state into correct markdown files on disk.
@@ -23,7 +25,8 @@ import {
23
25
  insertArtifact,
24
26
  getGateResults,
25
27
  } from "./gsd-db.js";
26
- import type { MilestoneRow, SliceRow, TaskRow, ArtifactRow } from "./gsd-db.js";
28
+ import type { MilestoneRow, ArtifactRow } from "./db-milestone-artifact-rows.js";
29
+ import type { SliceRow, TaskRow } from "./db-task-slice-rows.js";
27
30
  import type { GateRow } from "./types.js";
28
31
  import {
29
32
  resolveMilestoneFile,
@@ -1,6 +1,5 @@
1
- // GSD Extension — Dynamic Model Router
2
- // Maps complexity tiers to models, enforcing downgrade-only semantics.
3
- // The user's configured model is always the ceiling.
1
+ // Project/App: GSD-2
2
+ // File Purpose: Routes work to appropriate models while preserving configured ceilings.
4
3
 
5
4
  import type { ComplexityTier, ClassificationResult, TaskMetadata } from "./complexity-classifier.js";
6
5
  import { tierOrdinal } from "./complexity-classifier.js";
@@ -8,6 +7,7 @@ import type { ResolvedModelConfig } from "./preferences.js";
8
7
  import { getProviderCapabilities, type ProviderCapabilities } from "@gsd/pi-ai";
9
8
  import { getToolCompatibility, getAllToolCompatibility } from "@gsd/pi-coding-agent";
10
9
  import type { ToolCompatibility } from "@gsd/pi-coding-agent";
10
+ import { incrementLegacyTelemetry } from "./legacy-telemetry.js";
11
11
 
12
12
  // ─── Types ───────────────────────────────────────────────────────────────────
13
13
 
@@ -641,14 +641,18 @@ export function resolveModelForTier(
641
641
 
642
642
  // No available models known — return canonical fallback
643
643
  if (availableModelIds.length === 0) {
644
+ incrementLegacyTelemetry("legacy.providerDefaultUsed");
644
645
  return canonicalModelForTier(tier);
645
646
  }
646
647
 
647
648
  // Cross-provider tier search
648
649
  const resolved = findModelForTier(tier, routingConfig, availableModelIds, allowCrossProvider);
649
- return resolved
650
- ? normalizeResolvedTierModelId(resolved, tier, routingConfig)
651
- : canonicalModelForTier(tier);
650
+ if (resolved) {
651
+ return normalizeResolvedTierModelId(resolved, tier, routingConfig);
652
+ }
653
+
654
+ incrementLegacyTelemetry("legacy.providerDefaultUsed");
655
+ return canonicalModelForTier(tier);
652
656
  }
653
657
 
654
658
  // ─── Internal ────────────────────────────────────────────────────────────────
@@ -27,9 +27,13 @@ export function buildNotificationWidgetLines(): string[] {
27
27
  }
28
28
 
29
29
  const REFRESH_INTERVAL_MS = 30_000;
30
+ let notificationWidgetCleanup: (() => void) | undefined;
30
31
 
31
- export function initNotificationWidget(ctx: ExtensionContext): void {
32
- if (!ctx.hasUI) return;
32
+ export function initNotificationWidget(ctx: ExtensionContext): () => void {
33
+ notificationWidgetCleanup?.();
34
+ notificationWidgetCleanup = undefined;
35
+
36
+ if (!ctx.hasUI) return () => {};
33
37
 
34
38
  const push = () => {
35
39
  const chip = buildNotificationChip();
@@ -37,6 +41,23 @@ export function initNotificationWidget(ctx: ExtensionContext): void {
37
41
  };
38
42
  push();
39
43
 
40
- onNotificationStoreChange(push);
41
- setInterval(push, REFRESH_INTERVAL_MS).unref?.();
44
+ const unsubscribe = onNotificationStoreChange(push);
45
+ const interval = setInterval(push, REFRESH_INTERVAL_MS);
46
+ interval.unref?.();
47
+
48
+ const cleanup = () => {
49
+ unsubscribe();
50
+ clearInterval(interval);
51
+ if (notificationWidgetCleanup === cleanup) {
52
+ ctx.ui.setStatus(STATUS_KEY, undefined);
53
+ notificationWidgetCleanup = undefined;
54
+ }
55
+ };
56
+ notificationWidgetCleanup = cleanup;
57
+ return cleanup;
58
+ }
59
+
60
+ export function _resetNotificationWidgetForTests(): void {
61
+ notificationWidgetCleanup?.();
62
+ notificationWidgetCleanup = undefined;
42
63
  }
@@ -188,9 +188,14 @@ export function resolveDir(parentDir: string, idPrefix: string): string | null {
188
188
  // Exact match first (current convention: bare ID)
189
189
  const exact = entries.find(e => e.isDirectory() && e.name === idPrefix);
190
190
  if (exact) return exact.name;
191
+ const idLower = idPrefix.toLowerCase();
192
+ const exactCaseInsensitive = entries.find(
193
+ e => e.isDirectory() && e.name.toLowerCase() === idLower
194
+ );
195
+ if (exactCaseInsensitive) return exactCaseInsensitive.name;
191
196
  // Prefix match for legacy descriptor dirs: M001-SOMETHING
192
197
  const prefixed = entries.find(
193
- e => e.isDirectory() && e.name.startsWith(idPrefix + "-")
198
+ e => e.isDirectory() && e.name.toLowerCase().startsWith(idLower + "-")
194
199
  );
195
200
  return prefixed ? prefixed.name : null;
196
201
  } catch {
@@ -1,3 +1,6 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Post-execution validation checks for completed GSD task output.
3
+
1
4
  /**
2
5
  * Post-Execution Checks — Validate task output after execution completes.
3
6
  *
@@ -15,7 +18,7 @@
15
18
 
16
19
  import { existsSync, readFileSync } from "node:fs";
17
20
  import { resolve, dirname, join, extname } from "node:path";
18
- import type { TaskRow } from "./gsd-db.ts";
21
+ import type { TaskRow } from "./db-task-slice-rows.js";
19
22
 
20
23
  // ─── Result Types ────────────────────────────────────────────────────────────
21
24
 
@@ -144,12 +147,30 @@ export function resolveImportPath(
144
147
  if (existsSync(directPath)) {
145
148
  return { exists: true, resolvedPath: directPath };
146
149
  }
147
- // Only .js/.jsx/.mjs/.cjs imports legitimately fall through for the TS
148
- // ESM convention (.js .ts). Any other explicit extension (.css, .json,
149
- // .svg, images, fonts, .ts, .tsx, …) must stay unresolved when the direct
150
- // path is missing otherwise a stray `./missing.css.ts` could shadow a
151
- // genuinely missing `./missing.css` import.
152
- if (![".js", ".jsx", ".mjs", ".cjs"].includes(explicitExt)) {
150
+
151
+ // Known concrete extensions that should NOT fall through to code-shadow
152
+ // probing when missing. This preserves the "missing.css must stay missing"
153
+ // guarantee while still allowing dotted module stems like ./route.server
154
+ // to resolve as ./route.server.ts.
155
+ const nonFallbackExtensions = new Set([
156
+ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
157
+ ".json", ".css", ".scss", ".sass", ".less", ".styl",
158
+ ".svg", ".png", ".jpg", ".jpeg", ".gif", ".webp", ".avif", ".ico", ".bmp",
159
+ ".woff", ".woff2", ".ttf", ".otf", ".eot",
160
+ ]);
161
+ 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
+
173
+ if (nonFallbackExtensions.has(explicitExt) && !runtimeFallbackExtensions.has(explicitExt)) {
153
174
  return { exists: false, resolvedPath: null };
154
175
  }
155
176
  }
@@ -222,6 +243,13 @@ export function checkImportResolution(
222
243
  const imports = extractRelativeImports(source);
223
244
 
224
245
  for (const { importPath, lineNum } of imports) {
246
+ // React Router generated +types modules may not exist on disk during
247
+ // post-exec checks (generated during framework build). Don't block task
248
+ // completion on these imports.
249
+ if (/^\.{1,2}\/\+types\//.test(importPath)) {
250
+ continue;
251
+ }
252
+
225
253
  const resolution = resolveImportPath(importPath, file, basePath);
226
254
 
227
255
  if (!resolution.exists) {
@@ -0,0 +1,182 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Shared pull request evidence generator for GSD shipping paths.
3
+
4
+ export type PrChangeType = "feat" | "fix" | "refactor" | "test" | "docs" | "chore";
5
+
6
+ export interface PrEvidenceInput {
7
+ milestoneId: string;
8
+ subjectId?: string;
9
+ subjectKind?: "milestone" | "slice" | "workflow";
10
+ milestoneTitle?: string;
11
+ changeType?: PrChangeType;
12
+ linkedIssue?: string;
13
+ summaries?: string[];
14
+ blockers?: string[];
15
+ roadmapItems?: string[];
16
+ metrics?: string[];
17
+ testsRun?: string[];
18
+ why?: string;
19
+ how?: string;
20
+ rollbackNotes?: string[];
21
+ aiAssisted?: boolean;
22
+ }
23
+
24
+ export interface PrEvidence {
25
+ title: string;
26
+ body: string;
27
+ }
28
+
29
+ const CHANGE_TYPE_LABELS: Record<PrChangeType, string> = {
30
+ feat: "New feature or capability",
31
+ fix: "Bug fix",
32
+ refactor: "Code restructuring",
33
+ test: "Adding or updating tests",
34
+ docs: "Documentation only",
35
+ chore: "Build, CI, or tooling changes",
36
+ };
37
+
38
+ // Per-item cap for user-supplied content. 2 KB gives slice titles plus
39
+ // descriptions room while still bounding malicious DoS-via-PR-body input.
40
+ const USER_CONTENT_CAP_BYTES = 2048;
41
+ const TRUNCATION_SUFFIX = " … [truncated]";
42
+
43
+ // Strips HTML comments, fake commit trailers (Co-Authored-By, Signed-off-by —
44
+ // case-insensitive on the trailer name), and caps total length. Designed to
45
+ // be a no-op for well-formed input; golden fixtures must remain byte-stable.
46
+ // Trailer lines are removed (not rejected) so that a single bad line in an
47
+ // otherwise legitimate description does not block the entire PR.
48
+ function sanitizeUserContent(s: string): string {
49
+ if (!s) return s;
50
+ // Strip HTML comments greedily across newlines.
51
+ let out = s.replace(/<!--[\s\S]*?-->/g, "");
52
+ // Drop lines that look like commit trailers we do not want forged.
53
+ out = out
54
+ .split("\n")
55
+ .filter((line) => !/^\s*(co-authored-by|signed-off-by)\s*:/i.test(line))
56
+ .join("\n");
57
+ if (Buffer.byteLength(out, "utf8") > USER_CONTENT_CAP_BYTES) {
58
+ const budget = USER_CONTENT_CAP_BYTES - Buffer.byteLength(TRUNCATION_SUFFIX, "utf8");
59
+ // Truncate by code units to stay safely under the byte budget for ASCII;
60
+ // for multibyte content we conservatively walk back until under budget.
61
+ let sliced = out.slice(0, Math.max(0, budget));
62
+ while (Buffer.byteLength(sliced, "utf8") > budget && sliced.length > 0) {
63
+ sliced = sliced.slice(0, -1);
64
+ }
65
+ out = sliced + TRUNCATION_SUFFIX;
66
+ }
67
+ return out;
68
+ }
69
+
70
+ // Strips HTML comments and fake trailers without applying the length cap.
71
+ // Used for short fields like linkedIssue where truncation would be confusing.
72
+ function sanitizeIssueRef(s: string): string {
73
+ if (!s) return s;
74
+ let out = s.replace(/<!--[\s\S]*?-->/g, "");
75
+ out = out
76
+ .split("\n")
77
+ .filter((line) => !/^\s*(co-authored-by|signed-off-by)\s*:/i.test(line))
78
+ .join("\n");
79
+ return out;
80
+ }
81
+
82
+ function normalizeList(values: readonly string[] | undefined): string[] {
83
+ return (values ?? [])
84
+ .map((value) => sanitizeUserContent(value).trim())
85
+ .filter(Boolean);
86
+ }
87
+
88
+ function changeTypeChecklist(selected: PrChangeType): string[] {
89
+ return (Object.keys(CHANGE_TYPE_LABELS) as PrChangeType[]).map((type) => {
90
+ const checked = type === selected ? "x" : " ";
91
+ return `- [${checked}] \`${type}\` - ${CHANGE_TYPE_LABELS[type]}`;
92
+ });
93
+ }
94
+
95
+ function bulletList(values: readonly string[], fallback: string): string {
96
+ if (values.length === 0) return `- ${fallback}`;
97
+ return values.map((value) => `- ${value}`).join("\n");
98
+ }
99
+
100
+ export function buildPrEvidence(input: PrEvidenceInput): PrEvidence {
101
+ const subjectId = input.subjectId?.trim() || input.milestoneId;
102
+ const subjectKind = input.subjectKind ?? "milestone";
103
+ const subjectTitle = input.milestoneTitle?.trim() || subjectId;
104
+ const changeType = input.changeType ?? "feat";
105
+ const summaries = normalizeList(input.summaries);
106
+ const blockers = normalizeList(input.blockers);
107
+ const roadmapItems = normalizeList(input.roadmapItems);
108
+ const metrics = normalizeList(input.metrics);
109
+ const testsRun = normalizeList(input.testsRun);
110
+ const rollbackNotes = normalizeList(input.rollbackNotes);
111
+ // linkedIssue is sanitized but not length-capped: legitimate issue refs
112
+ // are short by nature, and truncating "Closes #123" would be unhelpful.
113
+ const linkedIssueRaw = input.linkedIssue ? sanitizeIssueRef(input.linkedIssue).trim() : "";
114
+ const linkedIssue = linkedIssueRaw || "Not specified. Add an issue link before marking this PR ready if CONTRIBUTING.md requires one.";
115
+ const why = (input.why ? sanitizeUserContent(input.why).trim() : "") || `${capitalize(subjectKind)} work is complete and ready for review.`;
116
+ const how = (input.how ? sanitizeUserContent(input.how).trim() : "") || "Generated from GSD evidence and local workflow artifacts.";
117
+ const title = `${changeType}: ${subjectTitle}`;
118
+
119
+ const sections: string[] = [
120
+ "## TL;DR",
121
+ "",
122
+ `**What:** Ship ${subjectKind} ${subjectId} - ${subjectTitle}`,
123
+ `**Why:** ${why}`,
124
+ `**How:** ${how}`,
125
+ "",
126
+ "## What",
127
+ "",
128
+ summaries.length > 0 ? summaries.join("\n\n") : `${capitalize(subjectKind)} ${subjectId} completed.`,
129
+ ];
130
+
131
+ if (blockers.length > 0) {
132
+ sections.push("", "## Blockers", "", blockers.map((blocker) => `- ${blocker}`).join("\n"));
133
+ }
134
+
135
+ sections.push(
136
+ "",
137
+ "## Why",
138
+ "",
139
+ why,
140
+ "",
141
+ "## How",
142
+ "",
143
+ how,
144
+ "",
145
+ "## Linked Issue",
146
+ "",
147
+ linkedIssue,
148
+ );
149
+
150
+ if (roadmapItems.length > 0) {
151
+ sections.push("", "## Roadmap", "", roadmapItems.join("\n"));
152
+ }
153
+
154
+ if (metrics.length > 0) {
155
+ sections.push("", "## Metrics", "", bulletList(metrics, "No metrics recorded."));
156
+ }
157
+
158
+ sections.push(
159
+ "",
160
+ "## Tests Run",
161
+ "",
162
+ bulletList(testsRun, "Not specified. Add exact verification commands before requesting review."),
163
+ "",
164
+ "## Change Type",
165
+ "",
166
+ ...changeTypeChecklist(changeType),
167
+ "",
168
+ "## Rollback And Compatibility",
169
+ "",
170
+ bulletList(rollbackNotes, "No behavior-changing rollback notes recorded."),
171
+ );
172
+
173
+ if (input.aiAssisted !== false) {
174
+ sections.push("", "## AI Assistance Disclosure", "", "This PR was prepared with AI assistance.");
175
+ }
176
+
177
+ return { title, body: sections.join("\n") };
178
+ }
179
+
180
+ function capitalize(value: string): string {
181
+ return value.slice(0, 1).toUpperCase() + value.slice(1);
182
+ }
@@ -1,3 +1,6 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Pre-execution validation checks for GSD task plans.
3
+
1
4
  /**
2
5
  * Pre-Execution Checks — Validate task plans before execution begins.
3
6
  *
@@ -18,7 +21,7 @@ import { existsSync } from "node:fs";
18
21
  import { spawn } from "node:child_process";
19
22
  import { homedir } from "node:os";
20
23
  import { resolve } from "node:path";
21
- import type { TaskRow } from "./gsd-db.ts";
24
+ import type { TaskRow } from "./db-task-slice-rows.js";
22
25
  import type { PreExecutionCheckJSON } from "./verification-evidence.ts";
23
26
 
24
27
  const NPM_COMMAND = process.platform === "win32" ? "npm.cmd" : "npm";
@@ -154,8 +154,26 @@ export const KNOWN_PREFERENCE_KEYS = new Set<string>([
154
154
  "planning_depth",
155
155
  ]);
156
156
 
157
- /** Canonical list of all dispatch unit types. */
158
- export const KNOWN_UNIT_TYPES = [
157
+ /**
158
+ * Broad union of every recognized unit-type *label* used across the codebase.
159
+ *
160
+ * This intentionally covers more than the manifest-tracked dispatch units in
161
+ * `unit-context-manifest.ts:KNOWN_UNIT_TYPES`. Examples that live here but not
162
+ * in the manifest:
163
+ * - `discuss-slice` — dispatched by `guided-flow.ts` rather than auto-mode;
164
+ * composer falls through to default behavior via `resolveManifest()` null path.
165
+ * - `worktree-merge` — used as a model-routing case, prompt-template name, and
166
+ * commit-message label, not as an LLM-dispatched unit.
167
+ *
168
+ * Used by `preferences-validation.ts` to validate user-provided unit-type
169
+ * references in preferences (model overrides, skill rules, etc.) — preferences
170
+ * may legitimately reference any label, including non-dispatched ones.
171
+ *
172
+ * The manifest-strict subset lives in `unit-context-manifest.ts:KNOWN_UNIT_TYPES`
173
+ * and is enforced 1:1 against `UNIT_MANIFESTS` by the parity test in
174
+ * `tests/unit-context-manifest.test.ts`.
175
+ */
176
+ export const KNOWN_UNIT_LABELS = [
159
177
  "research-milestone", "plan-milestone", "research-slice", "plan-slice", "refine-slice",
160
178
  "execute-task", "reactive-execute", "gate-evaluate", "complete-slice", "replan-slice", "reassess-roadmap",
161
179
  "run-uat", "complete-milestone", "validate-milestone", "rewrite-docs",
@@ -164,7 +182,7 @@ export const KNOWN_UNIT_TYPES = [
164
182
  "workflow-preferences", "discuss-project", "discuss-requirements",
165
183
  "research-decision", "research-project",
166
184
  ] as const;
167
- export type UnitType = (typeof KNOWN_UNIT_TYPES)[number];
185
+ export type UnitLabel = (typeof KNOWN_UNIT_LABELS)[number];
168
186
 
169
187
 
170
188
  export const SKILL_ACTIONS = new Set(["use", "prefer", "avoid"]);
@@ -343,7 +361,8 @@ export interface GSDPreferences {
343
361
  /**
344
362
  * Tool-output sandboxing via gsd_exec. Keeps sub-session context windows
345
363
  * clean by running scripts in a subprocess and only surfacing a short
346
- * digest. See `ContextModeConfig`. Default: disabled.
364
+ * digest. See `ContextModeConfig`. Default: enabled unless explicitly
365
+ * disabled with `context_mode.enabled: false`.
347
366
  */
348
367
  context_mode?: ContextModeConfig;
349
368
  token_profile?: TokenProfile;
@@ -14,7 +14,7 @@ import { normalizeStringArray } from "../shared/format-utils.js";
14
14
 
15
15
  import {
16
16
  KNOWN_PREFERENCE_KEYS,
17
- KNOWN_UNIT_TYPES,
17
+ KNOWN_UNIT_LABELS,
18
18
 
19
19
  SKILL_ACTIONS,
20
20
  type WorkflowMode,
@@ -441,7 +441,7 @@ export function validatePreferences(preferences: GSDPreferences): {
441
441
  if (preferences.post_unit_hooks && Array.isArray(preferences.post_unit_hooks)) {
442
442
  const validHooks: PostUnitHookConfig[] = [];
443
443
  const seenNames = new Set<string>();
444
- const knownUnitTypes = new Set<string>(KNOWN_UNIT_TYPES);
444
+ const knownUnitTypes = new Set<string>(KNOWN_UNIT_LABELS);
445
445
  for (const hook of preferences.post_unit_hooks) {
446
446
  if (!hook || typeof hook !== "object") {
447
447
  errors.push("post_unit_hooks entry must be an object");
@@ -503,7 +503,7 @@ export function validatePreferences(preferences: GSDPreferences): {
503
503
  if (preferences.pre_dispatch_hooks && Array.isArray(preferences.pre_dispatch_hooks)) {
504
504
  const validPreHooks: PreDispatchHookConfig[] = [];
505
505
  const seenPreNames = new Set<string>();
506
- const knownUnitTypes = new Set<string>(KNOWN_UNIT_TYPES);
506
+ const knownUnitTypes = new Set<string>(KNOWN_UNIT_LABELS);
507
507
  const validActions = new Set(["modify", "skip", "replace"]);
508
508
  for (const hook of preferences.pre_dispatch_hooks) {
509
509
  if (!hook || typeof hook !== "object") {