gsd-pi 2.79.0 → 2.80.0-dev.0aaa4fc17

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 (866) 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/GSD-WORKFLOW.md +2 -2
  5. package/dist/resources/extensions/github-sync/templates.js +90 -74
  6. package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
  7. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  8. package/dist/resources/extensions/gsd/auto/loop.js +394 -520
  9. package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
  10. package/dist/resources/extensions/gsd/auto/phases.js +98 -37
  11. package/dist/resources/extensions/gsd/auto/run-unit.js +19 -15
  12. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  13. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  16. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  17. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  18. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  19. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  20. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  21. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  22. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  23. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  24. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  29. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  30. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  31. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  32. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  33. package/dist/resources/extensions/gsd/auto-dashboard.js +54 -15
  34. package/dist/resources/extensions/gsd/auto-dispatch.js +12 -0
  35. package/dist/resources/extensions/gsd/auto-post-unit.js +10 -10
  36. package/dist/resources/extensions/gsd/auto-prompts.js +331 -33
  37. package/dist/resources/extensions/gsd/auto-recovery.js +216 -62
  38. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  39. package/dist/resources/extensions/gsd/auto-start.js +4 -4
  40. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  41. package/dist/resources/extensions/gsd/auto-worktree.js +87 -38
  42. package/dist/resources/extensions/gsd/auto.js +168 -3
  43. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +24 -2
  44. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  45. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
  46. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +63 -51
  47. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +137 -9
  48. package/dist/resources/extensions/gsd/clean-root-preflight.js +42 -4
  49. package/dist/resources/extensions/gsd/commands/context.js +1 -1
  50. package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
  51. package/dist/resources/extensions/gsd/commands-extract-learnings.js +17 -12
  52. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  53. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  54. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  55. package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
  56. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  57. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  58. package/dist/resources/extensions/gsd/db-base-schema.js +351 -0
  59. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  60. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  61. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  62. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  63. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  64. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  65. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  66. package/dist/resources/extensions/gsd/db-migration-steps.js +410 -0
  67. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  68. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  69. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  70. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  71. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  72. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  73. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  74. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  75. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  76. package/dist/resources/extensions/gsd/detection.js +106 -0
  77. package/dist/resources/extensions/gsd/escalation.js +2 -0
  78. package/dist/resources/extensions/gsd/graph.js +9 -3
  79. package/dist/resources/extensions/gsd/gsd-db.js +316 -1520
  80. package/dist/resources/extensions/gsd/guided-flow.js +103 -12
  81. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  82. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  83. package/dist/resources/extensions/gsd/migrate/command.js +40 -1
  84. package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
  85. package/dist/resources/extensions/gsd/model-router.js +9 -6
  86. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  87. package/dist/resources/extensions/gsd/paths.js +5 -1
  88. package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
  89. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  90. package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
  91. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  92. package/dist/resources/extensions/gsd/preferences-types.js +20 -2
  93. package/dist/resources/extensions/gsd/preferences-validation.js +3 -3
  94. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  95. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  96. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -31
  97. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  98. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  99. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  100. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  101. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  102. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  103. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  104. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  105. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  106. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  107. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
  108. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  109. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  110. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  111. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  112. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  113. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  114. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  115. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  116. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  117. package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
  118. package/dist/resources/extensions/gsd/state.js +4 -0
  119. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  120. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  121. package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
  122. package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
  123. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +88 -3
  124. package/dist/resources/extensions/gsd/unit-context-composer.js +32 -0
  125. package/dist/resources/extensions/gsd/unit-context-manifest.js +21 -0
  126. package/dist/resources/extensions/gsd/unit-runtime.js +11 -0
  127. package/dist/resources/extensions/gsd/uok/audit.js +23 -9
  128. package/dist/resources/extensions/gsd/uok/contracts.js +69 -1
  129. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +3 -0
  130. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  131. package/dist/resources/extensions/gsd/uok/loop-adapter.js +48 -33
  132. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  133. package/dist/resources/extensions/gsd/uok/timeline.js +125 -0
  134. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  135. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  136. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  137. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  138. package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
  139. package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
  140. package/dist/resources/extensions/shared/gsd-phase-state.js +45 -3
  141. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  142. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  143. package/dist/web/standalone/.next/BUILD_ID +1 -1
  144. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  145. package/dist/web/standalone/.next/build-manifest.json +4 -4
  146. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  147. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  148. package/dist/web/standalone/.next/required-server-files.json +4 -4
  149. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  150. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  152. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  153. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  155. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  156. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  157. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  158. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  159. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  160. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  162. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  163. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  164. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  165. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  166. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  167. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  169. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  179. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  180. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  185. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  193. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  195. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  198. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  201. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  204. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  207. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  209. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  210. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  213. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  216. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  219. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  221. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  222. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  223. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  224. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  225. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  226. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  228. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  229. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  231. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  232. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  233. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  235. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  236. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  238. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  241. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  243. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  244. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  246. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  247. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  249. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  250. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  251. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  252. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  253. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  256. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  258. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  259. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  261. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  262. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  263. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  264. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  265. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  266. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  267. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  268. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  269. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  270. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  271. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  272. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  273. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  274. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  275. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  276. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  277. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  278. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  279. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  280. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  281. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  282. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  283. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  284. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  285. package/dist/web/standalone/.next/server/app/index.html +1 -1
  286. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  287. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  288. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  289. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  290. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  291. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  292. package/dist/web/standalone/.next/server/app/page.js +2 -2
  293. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  294. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  295. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  296. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  297. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  298. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  299. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  300. package/dist/web/standalone/.next/server/middleware.js +2 -2
  301. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  302. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  303. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  304. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  305. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  306. package/dist/web/standalone/.next/static/chunks/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
  307. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  308. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  309. package/dist/web/standalone/.next/static/chunks/app/page-fab3ebb85b006001.js +1 -0
  310. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  311. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  312. package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
  313. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  314. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  315. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  316. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  317. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  318. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  319. package/dist/web/standalone/package.json +1 -0
  320. package/dist/web/standalone/server.js +1 -1
  321. package/package.json +18 -7
  322. package/packages/contracts/dist/index.d.ts +3 -0
  323. package/packages/contracts/dist/index.d.ts.map +1 -0
  324. package/packages/contracts/dist/index.js +5 -0
  325. package/packages/contracts/dist/index.js.map +1 -0
  326. package/packages/contracts/dist/rpc.d.ts +549 -0
  327. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  328. package/packages/contracts/dist/rpc.js +53 -0
  329. package/packages/contracts/dist/rpc.js.map +1 -0
  330. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  331. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  332. package/packages/contracts/dist/rpc.test.js +47 -0
  333. package/packages/contracts/dist/rpc.test.js.map +1 -0
  334. package/packages/contracts/dist/workflow.d.ts +180 -0
  335. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  336. package/packages/contracts/dist/workflow.js +201 -0
  337. package/packages/contracts/dist/workflow.js.map +1 -0
  338. package/packages/contracts/package.json +39 -0
  339. package/packages/contracts/src/index.ts +5 -0
  340. package/packages/contracts/src/rpc.test.ts +72 -0
  341. package/packages/contracts/src/rpc.ts +286 -0
  342. package/packages/contracts/src/workflow.ts +213 -0
  343. package/packages/contracts/tsconfig.json +25 -0
  344. package/packages/daemon/package.json +3 -2
  345. package/packages/daemon/src/event-bridge.test.ts +2 -1
  346. package/packages/daemon/src/event-bridge.ts +1 -1
  347. package/packages/daemon/src/event-formatter.test.ts +1 -2
  348. package/packages/daemon/src/event-formatter.ts +1 -2
  349. package/packages/daemon/src/session-manager.ts +2 -2
  350. package/packages/daemon/src/types.ts +3 -18
  351. package/packages/mcp-server/dist/server.d.ts +13 -0
  352. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  353. package/packages/mcp-server/dist/server.js +77 -0
  354. package/packages/mcp-server/dist/server.js.map +1 -1
  355. package/packages/mcp-server/dist/session-manager.js +1 -1
  356. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  357. package/packages/mcp-server/dist/types.d.ts +3 -11
  358. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  359. package/packages/mcp-server/dist/types.js.map +1 -1
  360. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  361. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  362. package/packages/mcp-server/dist/workflow-tools.js +52 -37
  363. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  364. package/packages/mcp-server/package.json +3 -2
  365. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  366. package/packages/mcp-server/src/server.ts +99 -1
  367. package/packages/mcp-server/src/session-manager.ts +2 -2
  368. package/packages/mcp-server/src/types.ts +7 -18
  369. package/packages/mcp-server/src/workflow-tools.test.ts +129 -2
  370. package/packages/mcp-server/src/workflow-tools.ts +80 -37
  371. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  372. package/packages/native/package.json +1 -1
  373. package/packages/pi-agent-core/package.json +1 -1
  374. package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
  375. package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
  376. package/packages/pi-ai/dist/models/fake-model.js +27 -0
  377. package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
  378. package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
  379. package/packages/pi-ai/dist/models/index.js +8 -0
  380. package/packages/pi-ai/dist/models/index.js.map +1 -1
  381. package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
  382. package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
  383. package/packages/pi-ai/dist/providers/fake.js +319 -0
  384. package/packages/pi-ai/dist/providers/fake.js.map +1 -0
  385. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  386. package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
  387. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  388. package/packages/pi-ai/package.json +1 -1
  389. package/packages/pi-ai/src/models/fake-model.ts +30 -0
  390. package/packages/pi-ai/src/models/index.ts +9 -0
  391. package/packages/pi-ai/src/providers/fake.ts +376 -0
  392. package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
  393. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  394. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +74 -0
  395. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  396. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
  397. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
  398. package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
  399. package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
  400. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
  401. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
  402. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
  403. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
  404. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
  405. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  406. package/packages/pi-coding-agent/dist/core/extensions/runner.js +14 -1
  407. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  408. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +97 -0
  409. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  410. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  411. package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
  412. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  413. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +4 -0
  414. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  415. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  416. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  417. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  418. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  419. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  420. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
  421. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
  422. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +67 -14
  423. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  424. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
  425. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
  426. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
  427. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
  428. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
  429. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
  430. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
  431. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
  432. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  433. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  434. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  435. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +10 -9
  436. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  437. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  438. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
  440. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  441. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +27 -6
  442. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  443. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +16 -0
  444. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  445. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +112 -18
  446. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  447. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  448. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +60 -1
  449. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  450. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +40 -1
  451. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  452. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
  453. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  454. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  455. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  456. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  457. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +12 -1
  458. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  459. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  460. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  461. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  462. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
  463. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  464. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
  465. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
  466. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
  467. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
  468. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  469. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  470. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
  471. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  472. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  473. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  474. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
  475. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  476. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  477. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +36 -27
  478. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  479. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
  480. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
  481. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
  482. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
  483. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
  484. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
  485. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +48 -0
  486. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
  487. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  488. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  489. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  490. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  491. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
  492. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
  493. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +10 -0
  494. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
  495. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
  496. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
  497. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
  498. package/packages/pi-coding-agent/package.json +2 -1
  499. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +87 -0
  500. package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
  501. package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
  502. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +108 -0
  503. package/packages/pi-coding-agent/src/core/extensions/runner.ts +16 -1
  504. package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
  505. package/packages/pi-coding-agent/src/core/settings-manager.ts +12 -0
  506. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  507. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
  508. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +100 -16
  509. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
  510. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
  511. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -0
  512. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +10 -9
  513. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  514. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +41 -9
  515. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +124 -18
  516. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +43 -1
  517. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +75 -1
  518. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
  519. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
  520. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +75 -9
  521. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
  522. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
  523. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
  524. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
  525. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +36 -27
  526. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +65 -0
  527. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
  528. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  529. package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +14 -0
  530. package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
  531. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  532. package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
  533. package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
  534. package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
  535. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
  536. package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
  537. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  538. package/packages/pi-tui/dist/index.d.ts +1 -0
  539. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  540. package/packages/pi-tui/dist/index.js +2 -0
  541. package/packages/pi-tui/dist/index.js.map +1 -1
  542. package/packages/pi-tui/dist/style.d.ts +41 -0
  543. package/packages/pi-tui/dist/style.d.ts.map +1 -0
  544. package/packages/pi-tui/dist/style.js +158 -0
  545. package/packages/pi-tui/dist/style.js.map +1 -0
  546. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  547. package/packages/pi-tui/dist/tui.js +1 -0
  548. package/packages/pi-tui/dist/tui.js.map +1 -1
  549. package/packages/pi-tui/package.json +1 -1
  550. package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
  551. package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
  552. package/packages/pi-tui/src/index.ts +9 -0
  553. package/packages/pi-tui/src/style.ts +225 -0
  554. package/packages/pi-tui/src/tui.ts +1 -0
  555. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  556. package/packages/rpc-client/README.md +3 -3
  557. package/packages/rpc-client/dist/index.d.ts +1 -1
  558. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  559. package/packages/rpc-client/dist/index.js.map +1 -1
  560. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  561. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  562. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  563. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  564. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  565. package/packages/rpc-client/dist/rpc-types.js +3 -11
  566. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  567. package/packages/rpc-client/package.json +4 -1
  568. package/packages/rpc-client/src/index.ts +1 -1
  569. package/packages/rpc-client/src/rpc-client.ts +3 -6
  570. package/packages/rpc-client/src/rpc-types.ts +3 -398
  571. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  572. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  573. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  574. package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
  575. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  576. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  577. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  578. package/pkg/dist/modes/interactive/theme/theme.js +18 -1
  579. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  580. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  581. package/pkg/dist/modes/interactive/theme/themes.js +36 -27
  582. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  583. package/pkg/package.json +1 -1
  584. package/src/resources/GSD-WORKFLOW.md +2 -2
  585. package/src/resources/extensions/github-sync/templates.ts +93 -88
  586. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
  587. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  588. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  589. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  590. package/src/resources/extensions/gsd/auto/loop-deps.ts +11 -3
  591. package/src/resources/extensions/gsd/auto/loop.ts +461 -599
  592. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  593. package/src/resources/extensions/gsd/auto/phases.ts +130 -37
  594. package/src/resources/extensions/gsd/auto/run-unit.ts +24 -14
  595. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  596. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  597. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  598. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  599. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  600. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  601. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  602. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  603. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  604. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  605. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  606. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  607. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  608. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  609. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  610. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  611. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  612. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  613. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  614. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  615. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  616. package/src/resources/extensions/gsd/auto-dashboard.ts +61 -8
  617. package/src/resources/extensions/gsd/auto-dispatch.ts +18 -0
  618. package/src/resources/extensions/gsd/auto-post-unit.ts +10 -10
  619. package/src/resources/extensions/gsd/auto-prompts.ts +392 -32
  620. package/src/resources/extensions/gsd/auto-recovery.ts +211 -59
  621. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  622. package/src/resources/extensions/gsd/auto-start.ts +9 -7
  623. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  624. package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
  625. package/src/resources/extensions/gsd/auto.ts +179 -2
  626. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +30 -2
  627. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  628. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
  629. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +79 -52
  630. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-shouldblock-basepath.test.ts +97 -0
  631. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +143 -5
  632. package/src/resources/extensions/gsd/clean-root-preflight.ts +41 -3
  633. package/src/resources/extensions/gsd/commands/context.ts +1 -1
  634. package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
  635. package/src/resources/extensions/gsd/commands-extract-learnings.ts +17 -12
  636. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  637. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  638. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  639. package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
  640. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  641. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  642. package/src/resources/extensions/gsd/db-base-schema.ts +383 -0
  643. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  644. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  645. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  646. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  647. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  648. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  649. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  650. package/src/resources/extensions/gsd/db-migration-steps.ts +451 -0
  651. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  652. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  653. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  654. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  655. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  656. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  657. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  658. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  659. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  660. package/src/resources/extensions/gsd/detection.ts +128 -0
  661. package/src/resources/extensions/gsd/escalation.ts +3 -1
  662. package/src/resources/extensions/gsd/graph.ts +12 -5
  663. package/src/resources/extensions/gsd/gsd-db.ts +379 -1660
  664. package/src/resources/extensions/gsd/guided-flow.ts +113 -12
  665. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  666. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  667. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  668. package/src/resources/extensions/gsd/migrate/command.ts +47 -1
  669. package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
  670. package/src/resources/extensions/gsd/model-router.ts +10 -6
  671. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  672. package/src/resources/extensions/gsd/paths.ts +6 -1
  673. package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
  674. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  675. package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
  676. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  677. package/src/resources/extensions/gsd/preferences-types.ts +23 -4
  678. package/src/resources/extensions/gsd/preferences-validation.ts +3 -3
  679. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  680. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  681. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -31
  682. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  683. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  684. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  685. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  686. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  687. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  688. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  689. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  690. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  691. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  692. package/src/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
  693. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  694. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  695. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  696. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  697. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  698. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  699. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  700. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  701. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  702. package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
  703. package/src/resources/extensions/gsd/state.ts +6 -3
  704. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +38 -0
  705. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +98 -0
  706. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +118 -1
  707. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  708. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  709. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +277 -1
  710. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  711. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  712. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -2
  713. package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +203 -0
  714. package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +148 -0
  715. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +88 -2
  716. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  717. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
  718. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  719. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  720. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  721. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  722. package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +55 -0
  723. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
  724. package/src/resources/extensions/gsd/tests/current-directory-root-homedir-fallback.test.ts +63 -0
  725. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  726. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  727. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  728. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  729. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  730. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  731. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  732. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  733. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  734. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  735. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  736. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  737. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  738. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
  739. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  740. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  741. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  742. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  743. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  744. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  745. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  746. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  747. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  748. package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +42 -0
  749. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +63 -2
  750. package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
  751. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  752. package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +109 -0
  753. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  754. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
  755. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
  756. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
  757. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
  758. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  759. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  760. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +139 -0
  761. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  762. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  763. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  764. package/src/resources/extensions/gsd/tests/guided-flow-prompt-consolidation.test.ts +14 -0
  765. package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
  766. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  767. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  768. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  769. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  770. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  771. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  772. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  773. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
  774. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
  775. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  776. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  777. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  778. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +8 -0
  779. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  780. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  781. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  782. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +77 -0
  783. package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
  784. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  785. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
  786. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
  787. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  788. package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +3 -0
  789. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  790. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  791. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  792. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +85 -0
  793. package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
  794. package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +2 -0
  795. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +29 -0
  796. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +38 -0
  797. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +46 -2
  798. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +59 -0
  799. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  800. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +42 -4
  801. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +32 -0
  802. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +7 -0
  803. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +109 -1
  804. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  805. package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +98 -0
  806. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
  807. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  808. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  809. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  810. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  811. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  812. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  813. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  814. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  815. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  816. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  817. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  818. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  819. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  820. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  821. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  822. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  823. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  824. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  825. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +164 -3
  826. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  827. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  828. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  829. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
  830. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +37 -6
  831. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +7 -0
  832. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +9 -2
  833. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +3 -0
  834. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  835. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
  836. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  837. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  838. package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
  839. package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
  840. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +90 -2
  841. package/src/resources/extensions/gsd/unit-context-composer.ts +49 -0
  842. package/src/resources/extensions/gsd/unit-context-manifest.ts +34 -0
  843. package/src/resources/extensions/gsd/unit-runtime.ts +14 -0
  844. package/src/resources/extensions/gsd/uok/audit.ts +25 -9
  845. package/src/resources/extensions/gsd/uok/contracts.ts +105 -0
  846. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +4 -0
  847. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  848. package/src/resources/extensions/gsd/uok/loop-adapter.ts +60 -45
  849. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  850. package/src/resources/extensions/gsd/uok/timeline.ts +158 -0
  851. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  852. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  853. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  854. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  855. package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
  856. package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
  857. package/src/resources/extensions/shared/gsd-phase-state.ts +56 -3
  858. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  859. package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +43 -1
  860. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  861. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  862. package/dist/web/standalone/.next/static/chunks/app/page-ff639266d978f2a0.js +0 -1
  863. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  864. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  865. /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → YRK7-Es93MwpIn3VL35K0}/_buildManifest.js +0 -0
  866. /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → YRK7-Es93MwpIn3VL35K0}/_ssgManifest.js +0 -0
@@ -16,7 +16,7 @@ import { invalidateAllCaches } from "./cache.js";
16
16
  import { startAutoDetached } from "./auto.js";
17
17
  import { clearLock } from "./crash-recovery.js";
18
18
  import { assessInterruptedSession, formatInterruptedSessionRunningMessage, formatInterruptedSessionSummary, } from "./interrupted-session.js";
19
- import { listUnitRuntimeRecords, clearUnitRuntimeRecord } from "./unit-runtime.js";
19
+ import { listUnitRuntimeRecords, clearUnitRuntimeRecord, isInFlightRuntimePhase } from "./unit-runtime.js";
20
20
  import { resolveExpectedArtifactPath } from "./auto.js";
21
21
  import { gsdHome } from "./gsd-home.js";
22
22
  import { gsdRoot, milestonesDir, resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveSlicePath, resolveGsdRootFile, relGsdRootFile, relMilestoneFile, relSliceFile, clearPathCache, } from "./paths.js";
@@ -44,6 +44,7 @@ import { getWorkflowTransportSupportError, getRequiredWorkflowToolsForGuidedUnit
44
44
  import { runPreparation, formatCodebaseBrief, formatPriorContextBrief, } from "./preparation.js";
45
45
  import { verifyExpectedArtifact } from "./auto-recovery.js";
46
46
  import { createWorkspace, scopeMilestone } from "./workspace.js";
47
+ import { getPendingGate, extractDepthVerificationMilestoneId } from "./bootstrap/write-gate.js";
47
48
  // ─── Re-exports (preserve public API for existing importers) ────────────────
48
49
  export { MILESTONE_ID_RE, generateMilestoneSuffix, nextMilestoneId, extractMilestoneSeq, parseMilestoneId, milestoneIdSort, maxMilestoneNum, findMilestoneIds, reserveMilestoneId, claimReservedId, getReservedMilestoneIds, clearReservedMilestoneIds, } from "./milestone-ids.js";
49
50
  export { showQueue, handleQueueReorder, showQueueAdd, buildExistingMilestonesContext, } from "./guided-flow-queue.js";
@@ -70,6 +71,19 @@ export function verifyExpectedArtifactForScope(scope, unitType, unitId) {
70
71
  export function resolveExpectedArtifactPathForScope(scope, unitType, unitId) {
71
72
  return resolveExpectedArtifactPath(unitType, unitId, scope.workspace.projectRoot);
72
73
  }
74
+ async function runQuickTaskChoice(ctx, pi) {
75
+ if (!ctx.hasUI) {
76
+ ctx.ui.notify("Run /gsd quick <task> for small bounded work, or /gsd do <task> for natural-language routing.", "info");
77
+ return;
78
+ }
79
+ const task = (await ctx.ui.input("Quick task", "Describe the small task to run with /gsd quick"))?.trim();
80
+ if (!task) {
81
+ ctx.ui.notify("Quick task cancelled.", "info");
82
+ return;
83
+ }
84
+ const { handleQuick } = await import("./quick.js");
85
+ await handleQuick(task, ctx, pi);
86
+ }
73
87
  /**
74
88
  * Scope-based overload of isGhostMilestone.
75
89
  * Binds basePath and milestoneId from the scope, ensuring path resolution
@@ -295,6 +309,14 @@ export async function checkDeepProjectSetupAfterTurn(_event, ctx, basePath) {
295
309
  return false;
296
310
  }
297
311
  }
312
+ // R2: a depth-verification gate is still pending — the LLM emitted the
313
+ // confirmation question (via ask_user_questions or plain chat) but the user
314
+ // has not approved yet. Returning false keeps the entry in the
315
+ // pendingDeepProjectSetupMap so the next user message can resume.
316
+ const pendingGateId = getPendingGate(entry.basePath);
317
+ if (pendingGateId) {
318
+ return false;
319
+ }
298
320
  return dispatchNextDeepProjectSetupStage(entry);
299
321
  }
300
322
  async function dispatchNextDeepProjectSetupStage(entry) {
@@ -368,6 +390,23 @@ export function checkAutoStartAfterDiscuss() {
368
390
  const roadmapFile = existsSync(roadmapFilePath) ? roadmapFilePath : null;
369
391
  if (!contextFile && !roadmapFile)
370
392
  return false; // neither artifact yet — keep waiting
393
+ // Gate 1a: a depth-verification gate is still pending for THIS milestone — the
394
+ // LLM emitted the confirmation question (via ask_user_questions or plain chat)
395
+ // but the user has not answered yet. Advancing now would skip the gate and
396
+ // race ahead with unverified context.
397
+ const basePathForGate = entry.scope.workspace.projectRoot;
398
+ const pendingGateId = getPendingGate(basePathForGate);
399
+ if (pendingGateId) {
400
+ const pendingMilestoneId = extractDepthVerificationMilestoneId(pendingGateId);
401
+ // Block advancement if the gate is for THIS milestone, OR if it's a
402
+ // project/requirements gate (no milestone id encoded) for the deep setup flow.
403
+ const isProjectGate = pendingGateId === "depth_verification_project_confirm" ||
404
+ pendingGateId === "depth_verification_requirements_confirm" ||
405
+ pendingGateId === "depth_verification_research_decision_confirm";
406
+ if (pendingMilestoneId === milestoneId || isProjectGate) {
407
+ return false;
408
+ }
409
+ }
371
410
  // Gate 1b: Discriminate plan-blocked from discuss-incomplete when the DB row is queued.
372
411
  // If the DB is available and the row is still "queued" but CONTEXT.md already exists on
373
412
  // disk, the discuss phase completed but gsd_plan_milestone was hard-blocked by the
@@ -489,6 +528,20 @@ export function checkAutoStartAfterDiscuss() {
489
528
  logWarning("guided", `manifest unlink failed: ${e.message}`);
490
529
  }
491
530
  }
531
+ // R3b: belt-and-suspenders for silent registration failure. The discuss flow
532
+ // finished and STATE.md exists, but the milestone may never have landed in
533
+ // the DB. Without this guard, the user sees "Milestone M001 ready." and then
534
+ // /gsd reports "No Active Milestone".
535
+ if (isDbAvailable()) {
536
+ const milestoneRow = getMilestone(milestoneId);
537
+ if (!milestoneRow) {
538
+ ctx.ui.notify(`Milestone ${milestoneId}: discuss artifacts on disk but no DB row exists. ` +
539
+ `PROJECT.md may have failed to register milestones. ` +
540
+ `Re-save PROJECT.md with canonical "- [ ] M001: Title — One-liner" lines, ` +
541
+ `then re-run /gsd to recover.`, "error");
542
+ return false;
543
+ }
544
+ }
492
545
  pendingAutoStartMap.delete(basePath);
493
546
  ctx.ui.notify(`Milestone ${milestoneId} ready.`, "success");
494
547
  startAutoDetached(ctx, pi, basePath, false, { step });
@@ -1429,8 +1482,8 @@ function selfHealRuntimeRecords(basePath, ctx) {
1429
1482
  cleared++;
1430
1483
  continue;
1431
1484
  }
1432
- // Clear records stuck in dispatched or timeout phase (process died mid-unit)
1433
- if (phase === "dispatched" || phase === "timeout") {
1485
+ // Clear records stuck in an in-flight phase (process died mid-unit).
1486
+ if (isInFlightRuntimePhase(phase)) {
1434
1487
  clearUnitRuntimeRecord(basePath, unitType, unitId);
1435
1488
  cleared++;
1436
1489
  }
@@ -1655,6 +1708,20 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1655
1708
  return;
1656
1709
  }
1657
1710
  }
1711
+ if (interrupted.classification !== "recoverable") {
1712
+ try {
1713
+ const { autoImportMarkdownHierarchyIfDbMismatch } = await import("./migration-auto-check.js");
1714
+ const result = await autoImportMarkdownHierarchyIfDbMismatch(basePath);
1715
+ if (result.action === "imported") {
1716
+ ctx.ui.notify(`Recovered migrated planning state into gsd.db (${result.reason}): ${result.afterDb.milestones} milestone(s), ${result.afterDb.slices} slice(s), ${result.afterDb.tasks} task(s).`, "info");
1717
+ }
1718
+ }
1719
+ catch (err) {
1720
+ const message = err instanceof Error ? err.message : String(err);
1721
+ ctx.ui.notify(`GSD could not auto-import existing planning state into gsd.db: ${message}`, "warning");
1722
+ logWarning("guided", `planning state auto-import failed: ${message}`, { file: "guided-flow.ts" });
1723
+ }
1724
+ }
1658
1725
  // Always derive from the project root — the assessment may have derived
1659
1726
  // state from a worktree path that was cleaned up in the stale branch above.
1660
1727
  const state = await deriveState(basePath);
@@ -1676,8 +1743,8 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1676
1743
  // standard wizard below.
1677
1744
  {
1678
1745
  const prefs = loadEffectiveGSDPreferences(basePath)?.preferences;
1679
- const { hasPendingDeepStage } = await import("./auto-dispatch.js");
1680
- if (hasPendingDeepStage(prefs, basePath)) {
1746
+ const { shouldRunDeepProjectSetup } = await import("./auto-dispatch.js");
1747
+ if (shouldRunDeepProjectSetup(state, prefs, basePath)) {
1681
1748
  await startDeepProjectSetupForeground(ctx, pi, basePath, stepMode);
1682
1749
  return;
1683
1750
  }
@@ -1740,16 +1807,24 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1740
1807
  title: "GSD — Get Shit Done",
1741
1808
  summary: ["No active milestone."],
1742
1809
  actions: [
1810
+ {
1811
+ id: "quick_task",
1812
+ label: "Quick task",
1813
+ description: "For small bounded work, run /gsd quick <task> or /gsd do <task>.",
1814
+ recommended: true,
1815
+ },
1743
1816
  {
1744
1817
  id: "new_milestone",
1745
1818
  label: "Create next milestone",
1746
- description: "Define what to build next.",
1747
- recommended: true,
1819
+ description: "Define a larger body of work with planning artifacts.",
1748
1820
  },
1749
1821
  ],
1750
1822
  notYetMessage: "Run /gsd when ready.",
1751
1823
  });
1752
- if (choice === "new_milestone") {
1824
+ if (choice === "quick_task") {
1825
+ await runQuickTaskChoice(ctx, pi);
1826
+ }
1827
+ else if (choice === "new_milestone") {
1753
1828
  setPendingAutoStart(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1754
1829
  await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
1755
1830
  }
@@ -1769,11 +1844,16 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1769
1844
  title: `GSD — ${milestoneId}: ${milestoneTitle}`,
1770
1845
  summary: ["All milestones complete."],
1771
1846
  actions: [
1847
+ {
1848
+ id: "quick_task",
1849
+ label: "Quick task",
1850
+ description: "Do a small bounded task without opening a milestone.",
1851
+ recommended: true,
1852
+ },
1772
1853
  {
1773
1854
  id: "new_milestone",
1774
1855
  label: "Start new milestone",
1775
1856
  description: "Define and plan the next milestone.",
1776
- recommended: true,
1777
1857
  },
1778
1858
  {
1779
1859
  id: "status",
@@ -1783,7 +1863,10 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1783
1863
  ],
1784
1864
  notYetMessage: "Run /gsd when ready.",
1785
1865
  });
1786
- if (choice === "new_milestone") {
1866
+ if (choice === "quick_task") {
1867
+ await runQuickTaskChoice(ctx, pi);
1868
+ }
1869
+ else if (choice === "new_milestone") {
1787
1870
  const milestoneIds = findMilestoneIds(basePath);
1788
1871
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
1789
1872
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds, basePath);
@@ -1876,13 +1959,18 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1876
1959
  const contextFile = resolveMilestoneFile(basePath, milestoneId, "CONTEXT");
1877
1960
  const hasContext = !!(contextFile && await loadFile(contextFile));
1878
1961
  const actions = [
1962
+ {
1963
+ id: "quick_task",
1964
+ label: "Quick task instead",
1965
+ description: "Use this when the work is small and should not become a milestone.",
1966
+ recommended: true,
1967
+ },
1879
1968
  {
1880
1969
  id: "plan",
1881
1970
  label: "Create roadmap",
1882
1971
  description: hasContext
1883
1972
  ? "Context captured. Decompose into slices with a boundary map."
1884
1973
  : "Decompose the milestone into slices with a boundary map.",
1885
- recommended: true,
1886
1974
  },
1887
1975
  ...(!hasContext ? [{
1888
1976
  id: "discuss",
@@ -1906,7 +1994,10 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1906
1994
  actions,
1907
1995
  notYetMessage: "Run /gsd when ready.",
1908
1996
  });
1909
- if (choice === "plan") {
1997
+ if (choice === "quick_task") {
1998
+ await runQuickTaskChoice(ctx, pi);
1999
+ }
2000
+ else if (choice === "plan") {
1910
2001
  setPendingAutoStart(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
1911
2002
  await dispatchWorkflow(pi, await buildPlanMilestonePrompt(milestoneId, milestoneTitle, basePath), "gsd-run", ctx, "plan-milestone");
1912
2003
  }
@@ -0,0 +1,70 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Runtime counters for telemetry-gated legacy compatibility paths.
3
+ import { mkdirSync, writeFileSync } from "node:fs";
4
+ import { dirname } from "node:path";
5
+ import { logWarning } from "./workflow-logger.js";
6
+ const COUNTERS = [
7
+ "legacy.markdownFallbackUsed",
8
+ "legacy.workflowEngineUsed",
9
+ "legacy.uokFallbackUsed",
10
+ "legacy.mcpAliasUsed",
11
+ "legacy.componentFormatUsed",
12
+ "legacy.providerDefaultUsed",
13
+ ];
14
+ const values = Object.fromEntries(COUNTERS.map((counter) => [counter, 0]));
15
+ const warnedCounters = new Set();
16
+ const DIAGNOSTICS = {
17
+ "legacy.markdownFallbackUsed": "Deprecated markdown state fallback used; migrate projects to DB-authoritative state before removing markdown derivation.",
18
+ "legacy.workflowEngineUsed": "Deprecated workflow engine path used; prefer auto-milestone workflow templates before removing legacy engines.",
19
+ "legacy.uokFallbackUsed": "Deprecated UOK fallback path used; resolve UOK kernel blockers before removing parity fallback wrappers.",
20
+ "legacy.mcpAliasUsed": "Deprecated MCP alias tool used; update callers to the canonical gsd_* tool name before alias removal.",
21
+ "legacy.componentFormatUsed": "Deprecated component format loaded; migrate skills/agents to component.yaml before removing legacy loaders.",
22
+ "legacy.providerDefaultUsed": "Provider-specific default fallback used without an explicit available model; configure provider-aware model preferences before removing defaults.",
23
+ };
24
+ process.once("beforeExit", persistLegacyTelemetry);
25
+ export function incrementLegacyTelemetry(counter, amount = 1) {
26
+ if (!Number.isFinite(amount) || amount <= 0)
27
+ return;
28
+ values[counter] += amount;
29
+ emitLegacyDiagnostic(counter);
30
+ persistLegacyTelemetry();
31
+ }
32
+ export function getLegacyTelemetry() {
33
+ return { ...values };
34
+ }
35
+ export function resetLegacyTelemetry() {
36
+ for (const counter of COUNTERS) {
37
+ values[counter] = 0;
38
+ }
39
+ warnedCounters.clear();
40
+ }
41
+ export function listLegacyTelemetryCounters() {
42
+ return [...COUNTERS];
43
+ }
44
+ export function getLegacyTelemetryReport() {
45
+ return {
46
+ ts: new Date().toISOString(),
47
+ counters: getLegacyTelemetry(),
48
+ };
49
+ }
50
+ export function persistLegacyTelemetrySnapshot() {
51
+ persistLegacyTelemetry();
52
+ }
53
+ function emitLegacyDiagnostic(counter) {
54
+ if (warnedCounters.has(counter))
55
+ return;
56
+ warnedCounters.add(counter);
57
+ logWarning("migration", DIAGNOSTICS[counter], { counter });
58
+ }
59
+ function persistLegacyTelemetry() {
60
+ const outputPath = process.env.GSD_LEGACY_TELEMETRY_FILE?.trim();
61
+ if (!outputPath)
62
+ return;
63
+ try {
64
+ mkdirSync(dirname(outputPath), { recursive: true });
65
+ writeFileSync(outputPath, `${JSON.stringify(getLegacyTelemetryReport(), null, 2)}\n`, "utf-8");
66
+ }
67
+ catch {
68
+ // Legacy cleanup telemetry must never block runtime paths.
69
+ }
70
+ }
@@ -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.
@@ -15,6 +15,43 @@ import { fileURLToPath } from "node:url";
15
15
  import { showNextAction } from "../../shared/tui.js";
16
16
  import { validatePlanningDirectory, parsePlanningDirectory, transformToGSD, generatePreview, writeGSDDirectory, } from "./index.js";
17
17
  import { homedir } from "node:os";
18
+ import { ensureDbOpen } from "../bootstrap/dynamic-tools.js";
19
+ import { clearEngineHierarchy, transaction } from "../gsd-db.js";
20
+ import { migrateFromMarkdown } from "../md-importer.js";
21
+ import { invalidateStateCache } from "../state.js";
22
+ function assertMigrationImportMatchesPreview(imported, preview) {
23
+ const mismatches = [];
24
+ if (imported.hierarchy.milestones !== preview.milestoneCount) {
25
+ mismatches.push(`milestones ${imported.hierarchy.milestones}/${preview.milestoneCount}`);
26
+ }
27
+ if (imported.hierarchy.slices !== preview.totalSlices) {
28
+ mismatches.push(`slices ${imported.hierarchy.slices}/${preview.totalSlices}`);
29
+ }
30
+ if (imported.hierarchy.tasks !== preview.totalTasks) {
31
+ mismatches.push(`tasks ${imported.hierarchy.tasks}/${preview.totalTasks}`);
32
+ }
33
+ if (imported.requirements !== preview.requirements.total) {
34
+ mismatches.push(`requirements ${imported.requirements}/${preview.requirements.total}`);
35
+ }
36
+ if (mismatches.length > 0) {
37
+ throw new Error(`migration DB import verification failed: ${mismatches.join(", ")}`);
38
+ }
39
+ }
40
+ export async function importWrittenMigrationToDb(basePath, preview) {
41
+ const opened = await ensureDbOpen(basePath);
42
+ if (!opened) {
43
+ throw new Error(`failed to open or create the GSD database at ${basePath}`);
44
+ }
45
+ const counts = transaction(() => {
46
+ clearEngineHierarchy();
47
+ const imported = migrateFromMarkdown(basePath);
48
+ if (preview)
49
+ assertMigrationImportMatchesPreview(imported, preview);
50
+ return imported;
51
+ });
52
+ invalidateStateCache();
53
+ return counts;
54
+ }
18
55
  /** Format preview stats for embedding in the review prompt. */
19
56
  function formatPreviewStats(preview) {
20
57
  const lines = [
@@ -126,12 +163,14 @@ export async function handleMigrate(args, ctx, pi) {
126
163
  ctx.ui.notify("Writing .gsd directory…", "info");
127
164
  const result = await writeGSDDirectory(project, process.cwd());
128
165
  const gsdPath = gsdRoot(process.cwd());
129
- ctx.ui.notify(`✓ Migration complete ${result.paths.length} file(s) written to .gsd/`, "info");
166
+ const imported = await importWrittenMigrationToDb(process.cwd(), preview);
167
+ ctx.ui.notify(`✓ Migration complete — ${result.paths.length} file(s) written to .gsd/ and ${imported.hierarchy.milestones}M/${imported.hierarchy.slices}S/${imported.hierarchy.tasks}T imported to the database`, "info");
130
168
  // ── Post-write review offer ────────────────────────────────────────────────
131
169
  const reviewChoice = await showNextAction(ctx, {
132
170
  title: "Migration written",
133
171
  summary: [
134
172
  `${result.paths.length} files written to .gsd/`,
173
+ `${imported.hierarchy.milestones} milestone(s), ${imported.hierarchy.slices} slice(s), and ${imported.hierarchy.tasks} task(s) imported to gsd.db`,
135
174
  "",
136
175
  "The agent can now review the migrated output against GSD-2 standards —",
137
176
  "checking structure, content quality, deriveState() round-trip, and",
@@ -0,0 +1,87 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
3
+ import { clearEngineHierarchy, getAllMilestones, getMilestoneSlices, getSliceTasks, isDbAvailable, transaction, } from "./gsd-db.js";
4
+ import { migrateHierarchyToDb } from "./md-importer.js";
5
+ import { parsePlan, parseRoadmap } from "./parsers-legacy.js";
6
+ import { milestonesDir, resolveMilestoneFile, resolveSliceFile, } from "./paths.js";
7
+ import { invalidateStateCache } from "./state.js";
8
+ function zeroCounts() {
9
+ return { milestones: 0, slices: 0, tasks: 0 };
10
+ }
11
+ function sameCounts(a, b) {
12
+ return a.milestones === b.milestones && a.slices === b.slices && a.tasks === b.tasks;
13
+ }
14
+ export function countMarkdownHierarchy(basePath) {
15
+ const root = milestonesDir(basePath);
16
+ if (!existsSync(root))
17
+ return zeroCounts();
18
+ const counts = zeroCounts();
19
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
20
+ if (!entry.isDirectory() || !/^M\d+/.test(entry.name))
21
+ continue;
22
+ counts.milestones++;
23
+ const roadmapPath = resolveMilestoneFile(basePath, entry.name, "ROADMAP");
24
+ if (!roadmapPath || !existsSync(roadmapPath))
25
+ continue;
26
+ const roadmap = parseRoadmap(readFileSync(roadmapPath, "utf-8"));
27
+ counts.slices += roadmap.slices.length;
28
+ for (const slice of roadmap.slices) {
29
+ const planPath = resolveSliceFile(basePath, entry.name, slice.id, "PLAN");
30
+ if (!planPath || !existsSync(planPath))
31
+ continue;
32
+ const plan = parsePlan(readFileSync(planPath, "utf-8"));
33
+ counts.tasks += plan.tasks.length;
34
+ }
35
+ }
36
+ return counts;
37
+ }
38
+ export function countDbHierarchy() {
39
+ if (!isDbAvailable())
40
+ return zeroCounts();
41
+ const counts = zeroCounts();
42
+ const milestones = getAllMilestones();
43
+ counts.milestones = milestones.length;
44
+ for (const milestone of milestones) {
45
+ const slices = getMilestoneSlices(milestone.id);
46
+ counts.slices += slices.length;
47
+ for (const slice of slices) {
48
+ counts.tasks += getSliceTasks(milestone.id, slice.id).length;
49
+ }
50
+ }
51
+ return counts;
52
+ }
53
+ export async function autoImportMarkdownHierarchyIfDbMismatch(basePath) {
54
+ const markdown = countMarkdownHierarchy(basePath);
55
+ if (sameCounts(markdown, zeroCounts())) {
56
+ return {
57
+ action: "none",
58
+ reason: "no-markdown",
59
+ markdown,
60
+ beforeDb: zeroCounts(),
61
+ afterDb: zeroCounts(),
62
+ };
63
+ }
64
+ const opened = await ensureDbOpen(basePath);
65
+ if (!opened || !isDbAvailable()) {
66
+ throw new Error(`failed to open or create the GSD database at ${basePath}`);
67
+ }
68
+ const beforeDb = countDbHierarchy();
69
+ if (sameCounts(markdown, beforeDb)) {
70
+ return { action: "none", reason: "in-sync", markdown, beforeDb, afterDb: beforeDb };
71
+ }
72
+ const reason = sameCounts(beforeDb, zeroCounts()) ? "db-empty" : "count-mismatch";
73
+ const imported = transaction(() => {
74
+ clearEngineHierarchy();
75
+ return migrateHierarchyToDb(basePath);
76
+ });
77
+ invalidateStateCache();
78
+ const afterDb = {
79
+ milestones: imported.milestones,
80
+ slices: imported.slices,
81
+ tasks: imported.tasks,
82
+ };
83
+ if (!sameCounts(markdown, afterDb)) {
84
+ throw new Error(`migration auto-import verification failed: markdown ${markdown.milestones}M/${markdown.slices}S/${markdown.tasks}T, db ${afterDb.milestones}M/${afterDb.slices}S/${afterDb.tasks}T`);
85
+ }
86
+ return { action: "imported", reason, markdown, beforeDb, afterDb };
87
+ }
@@ -1,9 +1,9 @@
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
  import { tierOrdinal } from "./complexity-classifier.js";
5
4
  import { getProviderCapabilities } from "@gsd/pi-ai";
6
5
  import { getToolCompatibility } from "@gsd/pi-coding-agent";
6
+ import { incrementLegacyTelemetry } from "./legacy-telemetry.js";
7
7
  // ─── Known Model Tiers ───────────────────────────────────────────────────────
8
8
  // Maps known model IDs to their capability tier. Used when tier_models is not
9
9
  // explicitly configured to pick the best available model for each tier.
@@ -474,13 +474,16 @@ export function resolveModelForTier(tier, availableModelIds, routingConfigOrCros
474
474
  : crossProvider ?? routingConfig.cross_provider !== false;
475
475
  // No available models known — return canonical fallback
476
476
  if (availableModelIds.length === 0) {
477
+ incrementLegacyTelemetry("legacy.providerDefaultUsed");
477
478
  return canonicalModelForTier(tier);
478
479
  }
479
480
  // Cross-provider tier search
480
481
  const resolved = findModelForTier(tier, routingConfig, availableModelIds, allowCrossProvider);
481
- return resolved
482
- ? normalizeResolvedTierModelId(resolved, tier, routingConfig)
483
- : canonicalModelForTier(tier);
482
+ if (resolved) {
483
+ return normalizeResolvedTierModelId(resolved, tier, routingConfig);
484
+ }
485
+ incrementLegacyTelemetry("legacy.providerDefaultUsed");
486
+ return canonicalModelForTier(tier);
484
487
  }
485
488
  // ─── Internal ────────────────────────────────────────────────────────────────
486
489
  /**
@@ -21,14 +21,32 @@ export function buildNotificationWidgetLines() {
21
21
  return chip ? [` ${chip}`] : [];
22
22
  }
23
23
  const REFRESH_INTERVAL_MS = 30_000;
24
+ let notificationWidgetCleanup;
24
25
  export function initNotificationWidget(ctx) {
26
+ notificationWidgetCleanup?.();
27
+ notificationWidgetCleanup = undefined;
25
28
  if (!ctx.hasUI)
26
- return;
29
+ return () => { };
27
30
  const push = () => {
28
31
  const chip = buildNotificationChip();
29
32
  ctx.ui.setStatus(STATUS_KEY, chip.length > 0 ? chip : undefined);
30
33
  };
31
34
  push();
32
- onNotificationStoreChange(push);
33
- setInterval(push, REFRESH_INTERVAL_MS).unref?.();
35
+ const unsubscribe = onNotificationStoreChange(push);
36
+ const interval = setInterval(push, REFRESH_INTERVAL_MS);
37
+ interval.unref?.();
38
+ const cleanup = () => {
39
+ unsubscribe();
40
+ clearInterval(interval);
41
+ if (notificationWidgetCleanup === cleanup) {
42
+ ctx.ui.setStatus(STATUS_KEY, undefined);
43
+ notificationWidgetCleanup = undefined;
44
+ }
45
+ };
46
+ notificationWidgetCleanup = cleanup;
47
+ return cleanup;
48
+ }
49
+ export function _resetNotificationWidgetForTests() {
50
+ notificationWidgetCleanup?.();
51
+ notificationWidgetCleanup = undefined;
34
52
  }
@@ -177,8 +177,12 @@ export function resolveDir(parentDir, idPrefix) {
177
177
  const exact = entries.find(e => e.isDirectory() && e.name === idPrefix);
178
178
  if (exact)
179
179
  return exact.name;
180
+ const idLower = idPrefix.toLowerCase();
181
+ const exactCaseInsensitive = entries.find(e => e.isDirectory() && e.name.toLowerCase() === idLower);
182
+ if (exactCaseInsensitive)
183
+ return exactCaseInsensitive.name;
180
184
  // Prefix match for legacy descriptor dirs: M001-SOMETHING
181
- const prefixed = entries.find(e => e.isDirectory() && e.name.startsWith(idPrefix + "-"));
185
+ const prefixed = entries.find(e => e.isDirectory() && e.name.toLowerCase().startsWith(idLower + "-"));
182
186
  return prefixed ? prefixed.name : null;
183
187
  }
184
188
  catch {
@@ -0,0 +1,26 @@
1
+ import { isAbsolute, relative, resolve } from "node:path";
2
+ import { normalizePlannedFileReference } from "./files.js";
3
+ function isInsideBase(basePath, candidate) {
4
+ const base = resolve(basePath);
5
+ const abs = resolve(candidate);
6
+ const rel = relative(base, abs);
7
+ return rel === "" || (!!rel && !rel.startsWith("..") && !isAbsolute(rel));
8
+ }
9
+ /**
10
+ * Planning IO fields are execution contracts. Absolute paths are only safe when
11
+ * they stay inside the active working directory; in worktree mode, an absolute
12
+ * path to the original checkout makes executors edit the wrong tree.
13
+ */
14
+ export function validatePlanningPathScope(basePath, fields) {
15
+ for (const { field, values } of fields) {
16
+ for (const raw of values) {
17
+ const candidate = normalizePlannedFileReference(raw);
18
+ if (!isAbsolute(candidate))
19
+ continue;
20
+ if (isInsideBase(basePath, candidate))
21
+ continue;
22
+ return `${field} contains absolute path outside working directory: ${candidate}. Use a path relative to ${basePath}.`;
23
+ }
24
+ }
25
+ return null;
26
+ }
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Post-execution validation checks for completed GSD task output.
1
3
  /**
2
4
  * Post-Execution Checks — Validate task output after execution completes.
3
5
  *
@@ -96,12 +98,25 @@ export function resolveImportPath(importPath, sourceFile, basePath) {
96
98
  if (existsSync(directPath)) {
97
99
  return { exists: true, resolvedPath: directPath };
98
100
  }
99
- // Only .js/.jsx/.mjs/.cjs imports legitimately fall through for the TS
100
- // ESM convention (.js .ts). Any other explicit extension (.css, .json,
101
- // .svg, images, fonts, .ts, .tsx, …) must stay unresolved when the direct
102
- // path is missing — otherwise a stray `./missing.css.ts` could shadow a
103
- // genuinely missing `./missing.css` import.
104
- if (![".js", ".jsx", ".mjs", ".cjs"].includes(explicitExt)) {
101
+ // Known concrete extensions that should NOT fall through to code-shadow
102
+ // probing when missing. This preserves the "missing.css must stay missing"
103
+ // guarantee while still allowing dotted module stems like ./route.server
104
+ // to resolve as ./route.server.ts.
105
+ const nonFallbackExtensions = new Set([
106
+ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
107
+ ".json", ".css", ".scss", ".sass", ".less", ".styl",
108
+ ".svg", ".png", ".jpg", ".jpeg", ".gif", ".webp", ".avif", ".ico", ".bmp",
109
+ ".woff", ".woff2", ".ttf", ".otf", ".eot",
110
+ ]);
111
+ const runtimeFallbackExtensions = new Set([".js", ".jsx", ".mjs", ".cjs"]);
112
+ const dottedStemFallbackExtensions = new Set([".server", ".client", ".webhook"]);
113
+ if (explicitExt !== "" &&
114
+ !runtimeFallbackExtensions.has(explicitExt) &&
115
+ !nonFallbackExtensions.has(explicitExt) &&
116
+ !dottedStemFallbackExtensions.has(explicitExt)) {
117
+ return { exists: false, resolvedPath: null };
118
+ }
119
+ if (nonFallbackExtensions.has(explicitExt) && !runtimeFallbackExtensions.has(explicitExt)) {
105
120
  return { exists: false, resolvedPath: null };
106
121
  }
107
122
  }
@@ -163,6 +178,12 @@ export function checkImportResolution(taskRow, _priorTasks, basePath) {
163
178
  }
164
179
  const imports = extractRelativeImports(source);
165
180
  for (const { importPath, lineNum } of imports) {
181
+ // React Router generated +types modules may not exist on disk during
182
+ // post-exec checks (generated during framework build). Don't block task
183
+ // completion on these imports.
184
+ if (/^\.{1,2}\/\+types\//.test(importPath)) {
185
+ continue;
186
+ }
166
187
  const resolution = resolveImportPath(importPath, file, basePath);
167
188
  if (!resolution.exists) {
168
189
  results.push({