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
@@ -30,7 +30,7 @@ import {
30
30
  formatInterruptedSessionRunningMessage,
31
31
  formatInterruptedSessionSummary,
32
32
  } from "./interrupted-session.js";
33
- import { listUnitRuntimeRecords, clearUnitRuntimeRecord } from "./unit-runtime.js";
33
+ import { listUnitRuntimeRecords, clearUnitRuntimeRecord, isInFlightRuntimePhase } from "./unit-runtime.js";
34
34
  import { resolveExpectedArtifactPath } from "./auto.js";
35
35
  import { gsdHome } from "./gsd-home.js";
36
36
  import {
@@ -70,6 +70,7 @@ import {
70
70
  } from "./preparation.js";
71
71
  import { verifyExpectedArtifact } from "./auto-recovery.js";
72
72
  import { createWorkspace, scopeMilestone, type MilestoneScope } from "./workspace.js";
73
+ import { getPendingGate, extractDepthVerificationMilestoneId } from "./bootstrap/write-gate.js";
73
74
 
74
75
  // ─── Re-exports (preserve public API for existing importers) ────────────────
75
76
  export {
@@ -117,6 +118,22 @@ export function resolveExpectedArtifactPathForScope(
117
118
  return resolveExpectedArtifactPath(unitType, unitId, scope.workspace.projectRoot);
118
119
  }
119
120
 
121
+ async function runQuickTaskChoice(ctx: ExtensionCommandContext, pi: ExtensionAPI): Promise<void> {
122
+ if (!ctx.hasUI) {
123
+ ctx.ui.notify("Run /gsd quick <task> for small bounded work, or /gsd do <task> for natural-language routing.", "info");
124
+ return;
125
+ }
126
+
127
+ const task = (await ctx.ui.input("Quick task", "Describe the small task to run with /gsd quick"))?.trim();
128
+ if (!task) {
129
+ ctx.ui.notify("Quick task cancelled.", "info");
130
+ return;
131
+ }
132
+
133
+ const { handleQuick } = await import("./quick.js");
134
+ await handleQuick(task, ctx, pi);
135
+ }
136
+
120
137
  /**
121
138
  * Scope-based overload of isGhostMilestone.
122
139
  * Binds basePath and milestoneId from the scope, ensuring path resolution
@@ -410,6 +427,15 @@ export async function checkDeepProjectSetupAfterTurn(
410
427
  }
411
428
  }
412
429
 
430
+ // R2: a depth-verification gate is still pending — the LLM emitted the
431
+ // confirmation question (via ask_user_questions or plain chat) but the user
432
+ // has not approved yet. Returning false keeps the entry in the
433
+ // pendingDeepProjectSetupMap so the next user message can resume.
434
+ const pendingGateId = getPendingGate(entry.basePath);
435
+ if (pendingGateId) {
436
+ return false;
437
+ }
438
+
413
439
  return dispatchNextDeepProjectSetupStage(entry);
414
440
  }
415
441
 
@@ -494,6 +520,25 @@ export function checkAutoStartAfterDiscuss(): boolean {
494
520
  const roadmapFile = existsSync(roadmapFilePath) ? roadmapFilePath : null;
495
521
  if (!contextFile && !roadmapFile) return false; // neither artifact yet — keep waiting
496
522
 
523
+ // Gate 1a: a depth-verification gate is still pending for THIS milestone — the
524
+ // LLM emitted the confirmation question (via ask_user_questions or plain chat)
525
+ // but the user has not answered yet. Advancing now would skip the gate and
526
+ // race ahead with unverified context.
527
+ const basePathForGate = entry.scope.workspace.projectRoot;
528
+ const pendingGateId = getPendingGate(basePathForGate);
529
+ if (pendingGateId) {
530
+ const pendingMilestoneId = extractDepthVerificationMilestoneId(pendingGateId);
531
+ // Block advancement if the gate is for THIS milestone, OR if it's a
532
+ // project/requirements gate (no milestone id encoded) for the deep setup flow.
533
+ const isProjectGate =
534
+ pendingGateId === "depth_verification_project_confirm" ||
535
+ pendingGateId === "depth_verification_requirements_confirm" ||
536
+ pendingGateId === "depth_verification_research_decision_confirm";
537
+ if (pendingMilestoneId === milestoneId || isProjectGate) {
538
+ return false;
539
+ }
540
+ }
541
+
497
542
  // Gate 1b: Discriminate plan-blocked from discuss-incomplete when the DB row is queued.
498
543
  // If the DB is available and the row is still "queued" but CONTEXT.md already exists on
499
544
  // disk, the discuss phase completed but gsd_plan_milestone was hard-blocked by the
@@ -628,6 +673,24 @@ export function checkAutoStartAfterDiscuss(): boolean {
628
673
  try { unlinkSync(manifestPath); } catch (e) { logWarning("guided", `manifest unlink failed: ${(e as Error).message}`); }
629
674
  }
630
675
 
676
+ // R3b: belt-and-suspenders for silent registration failure. The discuss flow
677
+ // finished and STATE.md exists, but the milestone may never have landed in
678
+ // the DB. Without this guard, the user sees "Milestone M001 ready." and then
679
+ // /gsd reports "No Active Milestone".
680
+ if (isDbAvailable()) {
681
+ const milestoneRow = getMilestone(milestoneId);
682
+ if (!milestoneRow) {
683
+ ctx.ui.notify(
684
+ `Milestone ${milestoneId}: discuss artifacts on disk but no DB row exists. ` +
685
+ `PROJECT.md may have failed to register milestones. ` +
686
+ `Re-save PROJECT.md with canonical "- [ ] M001: Title — One-liner" lines, ` +
687
+ `then re-run /gsd to recover.`,
688
+ "error",
689
+ );
690
+ return false;
691
+ }
692
+ }
693
+
631
694
  pendingAutoStartMap.delete(basePath);
632
695
  ctx.ui.notify(`Milestone ${milestoneId} ready.`, "success");
633
696
  startAutoDetached(ctx, pi, basePath, false, { step });
@@ -1739,8 +1802,8 @@ function selfHealRuntimeRecords(basePath: string, ctx: ExtensionContext): { clea
1739
1802
  cleared++;
1740
1803
  continue;
1741
1804
  }
1742
- // Clear records stuck in dispatched or timeout phase (process died mid-unit)
1743
- if (phase === "dispatched" || phase === "timeout") {
1805
+ // Clear records stuck in an in-flight phase (process died mid-unit).
1806
+ if (isInFlightRuntimePhase(phase)) {
1744
1807
  clearUnitRuntimeRecord(basePath, unitType, unitId);
1745
1808
  cleared++;
1746
1809
  }
@@ -1995,6 +2058,23 @@ export async function showSmartEntry(
1995
2058
  }
1996
2059
  }
1997
2060
 
2061
+ if (interrupted.classification !== "recoverable") {
2062
+ try {
2063
+ const { autoImportMarkdownHierarchyIfDbMismatch } = await import("./migration-auto-check.js");
2064
+ const result = await autoImportMarkdownHierarchyIfDbMismatch(basePath);
2065
+ if (result.action === "imported") {
2066
+ ctx.ui.notify(
2067
+ `Recovered migrated planning state into gsd.db (${result.reason}): ${result.afterDb.milestones} milestone(s), ${result.afterDb.slices} slice(s), ${result.afterDb.tasks} task(s).`,
2068
+ "info",
2069
+ );
2070
+ }
2071
+ } catch (err) {
2072
+ const message = err instanceof Error ? err.message : String(err);
2073
+ ctx.ui.notify(`GSD could not auto-import existing planning state into gsd.db: ${message}`, "warning");
2074
+ logWarning("guided", `planning state auto-import failed: ${message}`, { file: "guided-flow.ts" });
2075
+ }
2076
+ }
2077
+
1998
2078
  // Always derive from the project root — the assessment may have derived
1999
2079
  // state from a worktree path that was cleaned up in the stale branch above.
2000
2080
  const state = await deriveState(basePath);
@@ -2017,8 +2097,8 @@ export async function showSmartEntry(
2017
2097
  // standard wizard below.
2018
2098
  {
2019
2099
  const prefs = loadEffectiveGSDPreferences(basePath)?.preferences;
2020
- const { hasPendingDeepStage } = await import("./auto-dispatch.js");
2021
- if (hasPendingDeepStage(prefs, basePath)) {
2100
+ const { shouldRunDeepProjectSetup } = await import("./auto-dispatch.js");
2101
+ if (shouldRunDeepProjectSetup(state, prefs, basePath)) {
2022
2102
  await startDeepProjectSetupForeground(ctx, pi, basePath, stepMode);
2023
2103
  return;
2024
2104
  }
@@ -2087,17 +2167,24 @@ export async function showSmartEntry(
2087
2167
  title: "GSD — Get Shit Done",
2088
2168
  summary: ["No active milestone."],
2089
2169
  actions: [
2170
+ {
2171
+ id: "quick_task",
2172
+ label: "Quick task",
2173
+ description: "For small bounded work, run /gsd quick <task> or /gsd do <task>.",
2174
+ recommended: true,
2175
+ },
2090
2176
  {
2091
2177
  id: "new_milestone",
2092
2178
  label: "Create next milestone",
2093
- description: "Define what to build next.",
2094
- recommended: true,
2179
+ description: "Define a larger body of work with planning artifacts.",
2095
2180
  },
2096
2181
  ],
2097
2182
  notYetMessage: "Run /gsd when ready.",
2098
2183
  });
2099
2184
 
2100
- if (choice === "new_milestone") {
2185
+ if (choice === "quick_task") {
2186
+ await runQuickTaskChoice(ctx, pi);
2187
+ } else if (choice === "new_milestone") {
2101
2188
  setPendingAutoStart(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
2102
2189
  await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId,
2103
2190
  `New milestone ${nextId}.`,
@@ -2134,11 +2221,16 @@ export async function showSmartEntry(
2134
2221
  title: `GSD — ${milestoneId}: ${milestoneTitle}`,
2135
2222
  summary: ["All milestones complete."],
2136
2223
  actions: [
2224
+ {
2225
+ id: "quick_task",
2226
+ label: "Quick task",
2227
+ description: "Do a small bounded task without opening a milestone.",
2228
+ recommended: true,
2229
+ },
2137
2230
  {
2138
2231
  id: "new_milestone",
2139
2232
  label: "Start new milestone",
2140
2233
  description: "Define and plan the next milestone.",
2141
- recommended: true,
2142
2234
  },
2143
2235
  {
2144
2236
  id: "status",
@@ -2149,7 +2241,9 @@ export async function showSmartEntry(
2149
2241
  notYetMessage: "Run /gsd when ready.",
2150
2242
  });
2151
2243
 
2152
- if (choice === "new_milestone") {
2244
+ if (choice === "quick_task") {
2245
+ await runQuickTaskChoice(ctx, pi);
2246
+ } else if (choice === "new_milestone") {
2153
2247
  const milestoneIds = findMilestoneIds(basePath);
2154
2248
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
2155
2249
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds, basePath);
@@ -2253,13 +2347,18 @@ export async function showSmartEntry(
2253
2347
  const hasContext = !!(contextFile && await loadFile(contextFile));
2254
2348
 
2255
2349
  const actions = [
2350
+ {
2351
+ id: "quick_task",
2352
+ label: "Quick task instead",
2353
+ description: "Use this when the work is small and should not become a milestone.",
2354
+ recommended: true,
2355
+ },
2256
2356
  {
2257
2357
  id: "plan",
2258
2358
  label: "Create roadmap",
2259
2359
  description: hasContext
2260
2360
  ? "Context captured. Decompose into slices with a boundary map."
2261
2361
  : "Decompose the milestone into slices with a boundary map.",
2262
- recommended: true,
2263
2362
  },
2264
2363
  ...(!hasContext ? [{
2265
2364
  id: "discuss",
@@ -2285,7 +2384,9 @@ export async function showSmartEntry(
2285
2384
  notYetMessage: "Run /gsd when ready.",
2286
2385
  });
2287
2386
 
2288
- if (choice === "plan") {
2387
+ if (choice === "quick_task") {
2388
+ await runQuickTaskChoice(ctx, pi);
2389
+ } else if (choice === "plan") {
2289
2390
  setPendingAutoStart(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
2290
2391
  await dispatchWorkflow(
2291
2392
  pi,
@@ -37,6 +37,7 @@ export interface PausedSessionMetadata {
37
37
  activeRunDir?: string | null;
38
38
  autoStartTime?: number;
39
39
  milestoneLock?: string | null;
40
+ pauseReason?: string;
40
41
  }
41
42
 
42
43
  export interface InterruptedSessionAssessment {
@@ -0,0 +1,99 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Runtime counters for telemetry-gated legacy compatibility paths.
3
+
4
+ import { mkdirSync, writeFileSync } from "node:fs";
5
+ import { dirname } from "node:path";
6
+
7
+ import { logWarning } from "./workflow-logger.js";
8
+
9
+ export type LegacyTelemetryCounter =
10
+ | "legacy.markdownFallbackUsed"
11
+ | "legacy.workflowEngineUsed"
12
+ | "legacy.uokFallbackUsed"
13
+ | "legacy.mcpAliasUsed"
14
+ | "legacy.componentFormatUsed"
15
+ | "legacy.providerDefaultUsed";
16
+
17
+ export type LegacyTelemetrySnapshot = Record<LegacyTelemetryCounter, number>;
18
+
19
+ export interface LegacyTelemetryReport {
20
+ ts: string;
21
+ counters: LegacyTelemetrySnapshot;
22
+ }
23
+
24
+ const COUNTERS: LegacyTelemetryCounter[] = [
25
+ "legacy.markdownFallbackUsed",
26
+ "legacy.workflowEngineUsed",
27
+ "legacy.uokFallbackUsed",
28
+ "legacy.mcpAliasUsed",
29
+ "legacy.componentFormatUsed",
30
+ "legacy.providerDefaultUsed",
31
+ ];
32
+
33
+ const values: LegacyTelemetrySnapshot = Object.fromEntries(
34
+ COUNTERS.map((counter) => [counter, 0]),
35
+ ) as LegacyTelemetrySnapshot;
36
+
37
+ const warnedCounters = new Set<LegacyTelemetryCounter>();
38
+
39
+ const DIAGNOSTICS: Record<LegacyTelemetryCounter, string> = {
40
+ "legacy.markdownFallbackUsed": "Deprecated markdown state fallback used; migrate projects to DB-authoritative state before removing markdown derivation.",
41
+ "legacy.workflowEngineUsed": "Deprecated workflow engine path used; prefer auto-milestone workflow templates before removing legacy engines.",
42
+ "legacy.uokFallbackUsed": "Deprecated UOK fallback path used; resolve UOK kernel blockers before removing parity fallback wrappers.",
43
+ "legacy.mcpAliasUsed": "Deprecated MCP alias tool used; update callers to the canonical gsd_* tool name before alias removal.",
44
+ "legacy.componentFormatUsed": "Deprecated component format loaded; migrate skills/agents to component.yaml before removing legacy loaders.",
45
+ "legacy.providerDefaultUsed": "Provider-specific default fallback used without an explicit available model; configure provider-aware model preferences before removing defaults.",
46
+ };
47
+
48
+ process.once("beforeExit", persistLegacyTelemetry);
49
+
50
+ export function incrementLegacyTelemetry(counter: LegacyTelemetryCounter, amount = 1): void {
51
+ if (!Number.isFinite(amount) || amount <= 0) return;
52
+ values[counter] += amount;
53
+ emitLegacyDiagnostic(counter);
54
+ persistLegacyTelemetry();
55
+ }
56
+
57
+ export function getLegacyTelemetry(): LegacyTelemetrySnapshot {
58
+ return { ...values };
59
+ }
60
+
61
+ export function resetLegacyTelemetry(): void {
62
+ for (const counter of COUNTERS) {
63
+ values[counter] = 0;
64
+ }
65
+ warnedCounters.clear();
66
+ }
67
+
68
+ export function listLegacyTelemetryCounters(): LegacyTelemetryCounter[] {
69
+ return [...COUNTERS];
70
+ }
71
+
72
+ export function getLegacyTelemetryReport(): LegacyTelemetryReport {
73
+ return {
74
+ ts: new Date().toISOString(),
75
+ counters: getLegacyTelemetry(),
76
+ };
77
+ }
78
+
79
+ export function persistLegacyTelemetrySnapshot(): void {
80
+ persistLegacyTelemetry();
81
+ }
82
+
83
+ function emitLegacyDiagnostic(counter: LegacyTelemetryCounter): void {
84
+ if (warnedCounters.has(counter)) return;
85
+ warnedCounters.add(counter);
86
+ logWarning("migration", DIAGNOSTICS[counter], { counter });
87
+ }
88
+
89
+ function persistLegacyTelemetry(): void {
90
+ const outputPath = process.env.GSD_LEGACY_TELEMETRY_FILE?.trim();
91
+ if (!outputPath) return;
92
+
93
+ try {
94
+ mkdirSync(dirname(outputPath), { recursive: true });
95
+ writeFileSync(outputPath, `${JSON.stringify(getLegacyTelemetryReport(), null, 2)}\n`, "utf-8");
96
+ } catch {
97
+ // Legacy cleanup telemetry must never block runtime paths.
98
+ }
99
+ }
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Markdown projection renderer for GSD workflow database rows.
1
3
  // GSD Markdown Renderer — DB → Markdown file generation
2
4
  //
3
5
  // Transforms DB state into correct markdown files on disk.
@@ -23,7 +25,8 @@ import {
23
25
  insertArtifact,
24
26
  getGateResults,
25
27
  } from "./gsd-db.js";
26
- import type { MilestoneRow, SliceRow, TaskRow, ArtifactRow } from "./gsd-db.js";
28
+ import type { MilestoneRow, ArtifactRow } from "./db-milestone-artifact-rows.js";
29
+ import type { SliceRow, TaskRow } from "./db-task-slice-rows.js";
27
30
  import type { GateRow } from "./types.js";
28
31
  import {
29
32
  resolveMilestoneFile,
@@ -25,6 +25,50 @@ import {
25
25
 
26
26
  import type { MigrationPreview } from "./writer.js";
27
27
  import { homedir } from "node:os";
28
+ import { ensureDbOpen } from "../bootstrap/dynamic-tools.js";
29
+ import { clearEngineHierarchy, transaction } from "../gsd-db.js";
30
+ import { migrateFromMarkdown } from "../md-importer.js";
31
+ import { invalidateStateCache } from "../state.js";
32
+
33
+ export type MigrationImportCounts = ReturnType<typeof migrateFromMarkdown>;
34
+
35
+ function assertMigrationImportMatchesPreview(imported: MigrationImportCounts, preview: MigrationPreview): void {
36
+ const mismatches: string[] = [];
37
+ if (imported.hierarchy.milestones !== preview.milestoneCount) {
38
+ mismatches.push(`milestones ${imported.hierarchy.milestones}/${preview.milestoneCount}`);
39
+ }
40
+ if (imported.hierarchy.slices !== preview.totalSlices) {
41
+ mismatches.push(`slices ${imported.hierarchy.slices}/${preview.totalSlices}`);
42
+ }
43
+ if (imported.hierarchy.tasks !== preview.totalTasks) {
44
+ mismatches.push(`tasks ${imported.hierarchy.tasks}/${preview.totalTasks}`);
45
+ }
46
+ if (imported.requirements !== preview.requirements.total) {
47
+ mismatches.push(`requirements ${imported.requirements}/${preview.requirements.total}`);
48
+ }
49
+ if (mismatches.length > 0) {
50
+ throw new Error(`migration DB import verification failed: ${mismatches.join(", ")}`);
51
+ }
52
+ }
53
+
54
+ export async function importWrittenMigrationToDb(
55
+ basePath: string,
56
+ preview?: MigrationPreview,
57
+ ): Promise<MigrationImportCounts> {
58
+ const opened = await ensureDbOpen(basePath);
59
+ if (!opened) {
60
+ throw new Error(`failed to open or create the GSD database at ${basePath}`);
61
+ }
62
+
63
+ const counts = transaction(() => {
64
+ clearEngineHierarchy();
65
+ const imported = migrateFromMarkdown(basePath);
66
+ if (preview) assertMigrationImportMatchesPreview(imported, preview);
67
+ return imported;
68
+ });
69
+ invalidateStateCache();
70
+ return counts;
71
+ }
28
72
 
29
73
  /** Format preview stats for embedding in the review prompt. */
30
74
  function formatPreviewStats(preview: MigrationPreview): string {
@@ -182,9 +226,10 @@ export async function handleMigrate(
182
226
 
183
227
  const result = await writeGSDDirectory(project, process.cwd());
184
228
  const gsdPath = gsdRoot(process.cwd());
229
+ const imported = await importWrittenMigrationToDb(process.cwd(), preview);
185
230
 
186
231
  ctx.ui.notify(
187
- `✓ Migration complete — ${result.paths.length} file(s) written to .gsd/`,
232
+ `✓ 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`,
188
233
  "info",
189
234
  );
190
235
 
@@ -193,6 +238,7 @@ export async function handleMigrate(
193
238
  title: "Migration written",
194
239
  summary: [
195
240
  `${result.paths.length} files written to .gsd/`,
241
+ `${imported.hierarchy.milestones} milestone(s), ${imported.hierarchy.slices} slice(s), and ${imported.hierarchy.tasks} task(s) imported to gsd.db`,
196
242
  "",
197
243
  "The agent can now review the migrated output against GSD-2 standards —",
198
244
  "checking structure, content quality, deriveState() round-trip, and",
@@ -0,0 +1,129 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+
3
+ import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
4
+ import {
5
+ clearEngineHierarchy,
6
+ getAllMilestones,
7
+ getMilestoneSlices,
8
+ getSliceTasks,
9
+ isDbAvailable,
10
+ transaction,
11
+ } from "./gsd-db.js";
12
+ import { migrateHierarchyToDb } from "./md-importer.js";
13
+ import { parsePlan, parseRoadmap } from "./parsers-legacy.js";
14
+ import {
15
+ milestonesDir,
16
+ resolveMilestoneFile,
17
+ resolveSliceFile,
18
+ } from "./paths.js";
19
+ import { invalidateStateCache } from "./state.js";
20
+
21
+ export interface HierarchyCounts {
22
+ milestones: number;
23
+ slices: number;
24
+ tasks: number;
25
+ }
26
+
27
+ export interface MigrationAutoCheckResult {
28
+ action: "none" | "imported";
29
+ reason: "no-markdown" | "in-sync" | "db-empty" | "count-mismatch";
30
+ markdown: HierarchyCounts;
31
+ beforeDb: HierarchyCounts;
32
+ afterDb: HierarchyCounts;
33
+ }
34
+
35
+ function zeroCounts(): HierarchyCounts {
36
+ return { milestones: 0, slices: 0, tasks: 0 };
37
+ }
38
+
39
+ function sameCounts(a: HierarchyCounts, b: HierarchyCounts): boolean {
40
+ return a.milestones === b.milestones && a.slices === b.slices && a.tasks === b.tasks;
41
+ }
42
+
43
+ export function countMarkdownHierarchy(basePath: string): HierarchyCounts {
44
+ const root = milestonesDir(basePath);
45
+ if (!existsSync(root)) return zeroCounts();
46
+
47
+ const counts = zeroCounts();
48
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
49
+ if (!entry.isDirectory() || !/^M\d+/.test(entry.name)) continue;
50
+ counts.milestones++;
51
+
52
+ const roadmapPath = resolveMilestoneFile(basePath, entry.name, "ROADMAP");
53
+ if (!roadmapPath || !existsSync(roadmapPath)) continue;
54
+
55
+ const roadmap = parseRoadmap(readFileSync(roadmapPath, "utf-8"));
56
+ counts.slices += roadmap.slices.length;
57
+
58
+ for (const slice of roadmap.slices) {
59
+ const planPath = resolveSliceFile(basePath, entry.name, slice.id, "PLAN");
60
+ if (!planPath || !existsSync(planPath)) continue;
61
+ const plan = parsePlan(readFileSync(planPath, "utf-8"));
62
+ counts.tasks += plan.tasks.length;
63
+ }
64
+ }
65
+
66
+ return counts;
67
+ }
68
+
69
+ export function countDbHierarchy(): HierarchyCounts {
70
+ if (!isDbAvailable()) return zeroCounts();
71
+ const counts = zeroCounts();
72
+ const milestones = getAllMilestones();
73
+ counts.milestones = milestones.length;
74
+
75
+ for (const milestone of milestones) {
76
+ const slices = getMilestoneSlices(milestone.id);
77
+ counts.slices += slices.length;
78
+ for (const slice of slices) {
79
+ counts.tasks += getSliceTasks(milestone.id, slice.id).length;
80
+ }
81
+ }
82
+
83
+ return counts;
84
+ }
85
+
86
+ export async function autoImportMarkdownHierarchyIfDbMismatch(
87
+ basePath: string,
88
+ ): Promise<MigrationAutoCheckResult> {
89
+ const markdown = countMarkdownHierarchy(basePath);
90
+ if (sameCounts(markdown, zeroCounts())) {
91
+ return {
92
+ action: "none",
93
+ reason: "no-markdown",
94
+ markdown,
95
+ beforeDb: zeroCounts(),
96
+ afterDb: zeroCounts(),
97
+ };
98
+ }
99
+
100
+ const opened = await ensureDbOpen(basePath);
101
+ if (!opened || !isDbAvailable()) {
102
+ throw new Error(`failed to open or create the GSD database at ${basePath}`);
103
+ }
104
+
105
+ const beforeDb = countDbHierarchy();
106
+ if (sameCounts(markdown, beforeDb)) {
107
+ return { action: "none", reason: "in-sync", markdown, beforeDb, afterDb: beforeDb };
108
+ }
109
+
110
+ const reason = sameCounts(beforeDb, zeroCounts()) ? "db-empty" : "count-mismatch";
111
+ const imported = transaction(() => {
112
+ clearEngineHierarchy();
113
+ return migrateHierarchyToDb(basePath);
114
+ });
115
+ invalidateStateCache();
116
+
117
+ const afterDb = {
118
+ milestones: imported.milestones,
119
+ slices: imported.slices,
120
+ tasks: imported.tasks,
121
+ };
122
+ if (!sameCounts(markdown, afterDb)) {
123
+ throw new Error(
124
+ `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`,
125
+ );
126
+ }
127
+
128
+ return { action: "imported", reason, markdown, beforeDb, afterDb };
129
+ }
@@ -1,6 +1,5 @@
1
- // GSD Extension — Dynamic Model Router
2
- // Maps complexity tiers to models, enforcing downgrade-only semantics.
3
- // The user's configured model is always the ceiling.
1
+ // Project/App: GSD-2
2
+ // File Purpose: Routes work to appropriate models while preserving configured ceilings.
4
3
 
5
4
  import type { ComplexityTier, ClassificationResult, TaskMetadata } from "./complexity-classifier.js";
6
5
  import { tierOrdinal } from "./complexity-classifier.js";
@@ -8,6 +7,7 @@ import type { ResolvedModelConfig } from "./preferences.js";
8
7
  import { getProviderCapabilities, type ProviderCapabilities } from "@gsd/pi-ai";
9
8
  import { getToolCompatibility, getAllToolCompatibility } from "@gsd/pi-coding-agent";
10
9
  import type { ToolCompatibility } from "@gsd/pi-coding-agent";
10
+ import { incrementLegacyTelemetry } from "./legacy-telemetry.js";
11
11
 
12
12
  // ─── Types ───────────────────────────────────────────────────────────────────
13
13
 
@@ -641,14 +641,18 @@ export function resolveModelForTier(
641
641
 
642
642
  // No available models known — return canonical fallback
643
643
  if (availableModelIds.length === 0) {
644
+ incrementLegacyTelemetry("legacy.providerDefaultUsed");
644
645
  return canonicalModelForTier(tier);
645
646
  }
646
647
 
647
648
  // Cross-provider tier search
648
649
  const resolved = findModelForTier(tier, routingConfig, availableModelIds, allowCrossProvider);
649
- return resolved
650
- ? normalizeResolvedTierModelId(resolved, tier, routingConfig)
651
- : canonicalModelForTier(tier);
650
+ if (resolved) {
651
+ return normalizeResolvedTierModelId(resolved, tier, routingConfig);
652
+ }
653
+
654
+ incrementLegacyTelemetry("legacy.providerDefaultUsed");
655
+ return canonicalModelForTier(tier);
652
656
  }
653
657
 
654
658
  // ─── Internal ────────────────────────────────────────────────────────────────
@@ -27,9 +27,13 @@ export function buildNotificationWidgetLines(): string[] {
27
27
  }
28
28
 
29
29
  const REFRESH_INTERVAL_MS = 30_000;
30
+ let notificationWidgetCleanup: (() => void) | undefined;
30
31
 
31
- export function initNotificationWidget(ctx: ExtensionContext): void {
32
- if (!ctx.hasUI) return;
32
+ export function initNotificationWidget(ctx: ExtensionContext): () => void {
33
+ notificationWidgetCleanup?.();
34
+ notificationWidgetCleanup = undefined;
35
+
36
+ if (!ctx.hasUI) return () => {};
33
37
 
34
38
  const push = () => {
35
39
  const chip = buildNotificationChip();
@@ -37,6 +41,23 @@ export function initNotificationWidget(ctx: ExtensionContext): void {
37
41
  };
38
42
  push();
39
43
 
40
- onNotificationStoreChange(push);
41
- setInterval(push, REFRESH_INTERVAL_MS).unref?.();
44
+ const unsubscribe = onNotificationStoreChange(push);
45
+ const interval = setInterval(push, REFRESH_INTERVAL_MS);
46
+ interval.unref?.();
47
+
48
+ const cleanup = () => {
49
+ unsubscribe();
50
+ clearInterval(interval);
51
+ if (notificationWidgetCleanup === cleanup) {
52
+ ctx.ui.setStatus(STATUS_KEY, undefined);
53
+ notificationWidgetCleanup = undefined;
54
+ }
55
+ };
56
+ notificationWidgetCleanup = cleanup;
57
+ return cleanup;
58
+ }
59
+
60
+ export function _resetNotificationWidgetForTests(): void {
61
+ notificationWidgetCleanup?.();
62
+ notificationWidgetCleanup = undefined;
42
63
  }
@@ -188,9 +188,14 @@ export function resolveDir(parentDir: string, idPrefix: string): string | null {
188
188
  // Exact match first (current convention: bare ID)
189
189
  const exact = entries.find(e => e.isDirectory() && e.name === idPrefix);
190
190
  if (exact) return exact.name;
191
+ const idLower = idPrefix.toLowerCase();
192
+ const exactCaseInsensitive = entries.find(
193
+ e => e.isDirectory() && e.name.toLowerCase() === idLower
194
+ );
195
+ if (exactCaseInsensitive) return exactCaseInsensitive.name;
191
196
  // Prefix match for legacy descriptor dirs: M001-SOMETHING
192
197
  const prefixed = entries.find(
193
- e => e.isDirectory() && e.name.startsWith(idPrefix + "-")
198
+ e => e.isDirectory() && e.name.toLowerCase().startsWith(idLower + "-")
194
199
  );
195
200
  return prefixed ? prefixed.name : null;
196
201
  } catch {