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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/dist/{cli-web-branch.d.ts → cli/cli-web-branch.d.ts} +1 -1
  2. package/dist/{cli-web-branch.js → cli/cli-web-branch.js} +3 -3
  3. package/dist/{cli.js → cli/cli.js} +25 -25
  4. package/dist/{web-mode.js → cli/web-mode.js} +3 -3
  5. package/dist/{extension-registry.js → extension-runtime/extension-registry.js} +1 -1
  6. package/dist/{headless-query.d.ts → headless/headless-query.d.ts} +1 -1
  7. package/dist/{headless-query.js → headless/headless-query.js} +3 -2
  8. package/dist/{headless-recover.js → headless/headless-recover.js} +3 -2
  9. package/dist/{headless.js → headless/headless.js} +3 -3
  10. package/dist/loader.js +10 -10
  11. package/dist/{onboarding.js → onboarding/onboarding.js} +8 -8
  12. package/dist/{welcome-screen.js → onboarding/welcome-screen.js} +1 -1
  13. package/dist/{models-resolver.js → providers/models-resolver.js} +1 -1
  14. package/dist/{remote-questions-config.js → providers/remote-questions-config.js} +1 -1
  15. package/dist/{resource-loader.d.ts → resource-runtime/resource-loader.d.ts} +1 -1
  16. package/dist/{resource-loader.js → resource-runtime/resource-loader.js} +6 -6
  17. package/dist/resources/.managed-resources-content-hash +1 -1
  18. package/dist/resources/extensions/github-sync/templates.js +55 -70
  19. package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
  20. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  21. package/dist/resources/extensions/gsd/auto/loop.js +362 -523
  22. package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
  23. package/dist/resources/extensions/gsd/auto/phases.js +55 -6
  24. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  29. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  30. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  31. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  32. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  33. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  34. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  35. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  36. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  37. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  38. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  39. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  40. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  41. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  42. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  43. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  44. package/dist/resources/extensions/gsd/auto-dashboard.js +3 -0
  45. package/dist/resources/extensions/gsd/auto-prompts.js +168 -3
  46. package/dist/resources/extensions/gsd/auto-recovery.js +45 -52
  47. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  48. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  49. package/dist/resources/extensions/gsd/auto-worktree.js +85 -38
  50. package/dist/resources/extensions/gsd/auto.js +162 -5
  51. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +9 -1
  52. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  53. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -5
  54. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  55. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  56. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  57. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  58. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  59. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  60. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  61. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  62. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  63. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  64. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  65. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  66. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  67. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  68. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  69. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  70. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  71. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  72. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  73. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  74. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  75. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  76. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  77. package/dist/resources/extensions/gsd/escalation.js +2 -0
  78. package/dist/resources/extensions/gsd/graph.js +9 -3
  79. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  80. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  81. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  82. package/dist/resources/extensions/gsd/model-router.js +9 -6
  83. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  84. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  85. package/dist/resources/extensions/gsd/pr-evidence.js +76 -0
  86. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  87. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  88. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  89. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  90. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  91. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  92. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  93. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  94. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  95. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  96. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  97. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  98. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  99. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  100. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  101. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  102. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  103. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  104. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  105. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  106. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  107. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  108. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  109. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  110. package/dist/resources/extensions/gsd/state.js +4 -0
  111. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  112. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  113. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +6 -1
  114. package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
  115. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  116. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  117. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  118. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  119. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  120. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  121. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  122. package/dist/{security-overrides.js → security/security-overrides.js} +1 -1
  123. package/dist/{startup-model-validation.js → startup/startup-model-validation.js} +1 -1
  124. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  125. package/dist/{update-check.js → update/update-check.js} +1 -1
  126. package/dist/web/standalone/.next/BUILD_ID +1 -1
  127. package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
  128. package/dist/web/standalone/.next/build-manifest.json +2 -2
  129. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  130. package/dist/web/standalone/.next/required-server-files.json +1 -1
  131. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  132. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  140. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  146. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  147. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  154. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  155. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  169. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  175. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  180. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  186. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  190. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  192. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  193. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  194. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  196. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  198. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  200. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  202. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  204. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  205. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  206. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  207. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  208. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +3 -3
  209. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  210. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  212. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  215. package/dist/web/standalone/.next/server/app/index.html +1 -1
  216. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  217. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  218. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  219. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  220. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  221. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  222. package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
  223. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  224. package/dist/web/standalone/.next/server/chunks/7020.js +12 -0
  225. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  226. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  227. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  228. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  229. package/dist/web/standalone/package.json +1 -0
  230. package/dist/web/standalone/server.js +1 -1
  231. package/dist/{worktree-cli.js → worktrees/worktree-cli.js} +3 -2
  232. package/package.json +12 -5
  233. package/packages/contracts/dist/index.d.ts +3 -0
  234. package/packages/contracts/dist/index.d.ts.map +1 -0
  235. package/packages/contracts/dist/index.js +5 -0
  236. package/packages/contracts/dist/index.js.map +1 -0
  237. package/packages/contracts/dist/rpc.d.ts +549 -0
  238. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  239. package/packages/contracts/dist/rpc.js +53 -0
  240. package/packages/contracts/dist/rpc.js.map +1 -0
  241. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  242. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  243. package/packages/contracts/dist/rpc.test.js +47 -0
  244. package/packages/contracts/dist/rpc.test.js.map +1 -0
  245. package/packages/contracts/dist/workflow.d.ts +180 -0
  246. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  247. package/packages/contracts/dist/workflow.js +201 -0
  248. package/packages/contracts/dist/workflow.js.map +1 -0
  249. package/packages/contracts/package.json +39 -0
  250. package/packages/contracts/src/index.ts +5 -0
  251. package/packages/contracts/src/rpc.test.ts +72 -0
  252. package/packages/contracts/src/rpc.ts +286 -0
  253. package/packages/contracts/src/workflow.ts +213 -0
  254. package/packages/contracts/tsconfig.json +25 -0
  255. package/packages/daemon/package.json +3 -2
  256. package/packages/daemon/src/event-bridge.test.ts +2 -1
  257. package/packages/daemon/src/event-bridge.ts +1 -1
  258. package/packages/daemon/src/event-formatter.test.ts +1 -2
  259. package/packages/daemon/src/event-formatter.ts +1 -2
  260. package/packages/daemon/src/session-manager.ts +2 -2
  261. package/packages/daemon/src/types.ts +3 -18
  262. package/packages/mcp-server/dist/server.d.ts +13 -0
  263. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  264. package/packages/mcp-server/dist/server.js +77 -0
  265. package/packages/mcp-server/dist/server.js.map +1 -1
  266. package/packages/mcp-server/dist/session-manager.js +1 -1
  267. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  268. package/packages/mcp-server/dist/types.d.ts +3 -11
  269. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  270. package/packages/mcp-server/dist/types.js.map +1 -1
  271. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  272. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  273. package/packages/mcp-server/dist/workflow-tools.js +2 -40
  274. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  275. package/packages/mcp-server/package.json +3 -2
  276. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  277. package/packages/mcp-server/src/server.ts +99 -1
  278. package/packages/mcp-server/src/session-manager.ts +2 -2
  279. package/packages/mcp-server/src/types.ts +7 -18
  280. package/packages/mcp-server/src/workflow-tools.ts +2 -40
  281. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  282. package/packages/native/package.json +1 -1
  283. package/packages/pi-agent-core/package.json +1 -1
  284. package/packages/pi-ai/package.json +1 -1
  285. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +14 -0
  286. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  287. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  288. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  289. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  290. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -1
  291. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  292. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +9 -1
  293. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +31 -10
  295. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  297. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  299. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  300. package/packages/pi-coding-agent/package.json +2 -1
  301. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +23 -2
  302. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  303. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +6 -1
  304. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -9
  305. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  306. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  307. package/packages/pi-tui/dist/__tests__/tui.test.js +25 -3
  308. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  309. package/packages/pi-tui/dist/tui.d.ts +3 -1
  310. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  311. package/packages/pi-tui/dist/tui.js +3 -1
  312. package/packages/pi-tui/dist/tui.js.map +1 -1
  313. package/packages/pi-tui/package.json +1 -1
  314. package/packages/pi-tui/src/__tests__/tui.test.ts +30 -3
  315. package/packages/pi-tui/src/tui.ts +3 -1
  316. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  317. package/packages/rpc-client/README.md +3 -3
  318. package/packages/rpc-client/dist/index.d.ts +1 -1
  319. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  320. package/packages/rpc-client/dist/index.js.map +1 -1
  321. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  322. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  323. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  324. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  325. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  326. package/packages/rpc-client/dist/rpc-types.js +3 -11
  327. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  328. package/packages/rpc-client/package.json +4 -1
  329. package/packages/rpc-client/src/index.ts +1 -1
  330. package/packages/rpc-client/src/rpc-client.ts +3 -6
  331. package/packages/rpc-client/src/rpc-types.ts +3 -398
  332. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  333. package/pkg/package.json +1 -1
  334. package/src/resources/extensions/github-sync/templates.ts +59 -84
  335. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  336. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  337. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  338. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  339. package/src/resources/extensions/gsd/auto/loop.ts +414 -598
  340. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  341. package/src/resources/extensions/gsd/auto/phases.ts +82 -8
  342. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  343. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  344. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  345. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  346. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  347. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  348. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  349. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  350. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  351. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  352. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  353. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  354. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  355. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  356. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  357. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  358. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  359. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  360. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  361. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  362. package/src/resources/extensions/gsd/auto-dashboard.ts +4 -0
  363. package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
  364. package/src/resources/extensions/gsd/auto-recovery.ts +42 -50
  365. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  366. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  367. package/src/resources/extensions/gsd/auto-worktree.ts +83 -36
  368. package/src/resources/extensions/gsd/auto.ts +170 -4
  369. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +14 -1
  370. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  371. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +13 -5
  372. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  373. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  374. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  375. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  376. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  377. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  378. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  379. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  380. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  381. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  382. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  383. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  384. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  385. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  386. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  387. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  388. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  389. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  390. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  391. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  392. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  393. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  394. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  395. package/src/resources/extensions/gsd/escalation.ts +3 -1
  396. package/src/resources/extensions/gsd/graph.ts +12 -5
  397. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  398. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  399. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  400. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  401. package/src/resources/extensions/gsd/model-router.ts +10 -6
  402. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  403. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  404. package/src/resources/extensions/gsd/pr-evidence.ts +124 -0
  405. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  406. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  407. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  408. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  409. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  410. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  411. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  412. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  413. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  414. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  415. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  416. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  417. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  418. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  419. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  420. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  421. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  422. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  423. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  424. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  425. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  426. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  427. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  428. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  429. package/src/resources/extensions/gsd/state.ts +6 -3
  430. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +32 -0
  431. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +65 -0
  432. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +38 -0
  433. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  434. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  435. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  436. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  437. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  438. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  439. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  440. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  441. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  442. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  443. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  444. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  445. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  446. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  447. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  448. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  449. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  450. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  451. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  452. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  453. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  454. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  455. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  456. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  457. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  458. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  459. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  460. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  461. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  462. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  463. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  464. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  465. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  466. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  467. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  468. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  469. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  470. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  471. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  472. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +1 -1
  473. package/src/resources/extensions/gsd/tests/headless-query.test.ts +2 -2
  474. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  475. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  476. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  477. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  478. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  479. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  480. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  481. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  482. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  483. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  484. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  485. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  486. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  487. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  488. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  489. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  490. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  491. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  492. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  493. package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +1 -1
  494. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  495. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +6 -6
  496. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  497. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  498. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  499. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  500. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  501. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  502. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  503. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  504. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  505. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  506. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  507. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  508. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  509. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -7
  510. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  511. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  512. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  513. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  514. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  515. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  516. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +32 -0
  517. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  518. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  519. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  520. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +18 -34
  521. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  522. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  523. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +6 -1
  524. package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
  525. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  526. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  527. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  528. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  529. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  530. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  531. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  532. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  533. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  534. package/dist/web/standalone/.next/server/chunks/6897.js +0 -12
  535. /package/dist/{app-paths.d.ts → app/app-paths.d.ts} +0 -0
  536. /package/dist/{app-paths.js → app/app-paths.js} +0 -0
  537. /package/dist/{project-sessions.d.ts → app/project-sessions.d.ts} +0 -0
  538. /package/dist/{project-sessions.js → app/project-sessions.js} +0 -0
  539. /package/dist/{tool-bootstrap.d.ts → app/tool-bootstrap.d.ts} +0 -0
  540. /package/dist/{tool-bootstrap.js → app/tool-bootstrap.js} +0 -0
  541. /package/dist/{cli-auto-routing.d.ts → cli/cli-auto-routing.d.ts} +0 -0
  542. /package/dist/{cli-auto-routing.js → cli/cli-auto-routing.js} +0 -0
  543. /package/dist/{cli-policy.d.ts → cli/cli-policy.d.ts} +0 -0
  544. /package/dist/{cli-policy.js → cli/cli-policy.js} +0 -0
  545. /package/dist/{cli.d.ts → cli/cli.d.ts} +0 -0
  546. /package/dist/{help-text.d.ts → cli/help-text.d.ts} +0 -0
  547. /package/dist/{help-text.js → cli/help-text.js} +0 -0
  548. /package/dist/{logo.d.ts → cli/logo.d.ts} +0 -0
  549. /package/dist/{logo.js → cli/logo.js} +0 -0
  550. /package/dist/{web-mode.d.ts → cli/web-mode.d.ts} +0 -0
  551. /package/dist/{bundled-extension-paths.d.ts → extension-runtime/bundled-extension-paths.d.ts} +0 -0
  552. /package/dist/{bundled-extension-paths.js → extension-runtime/bundled-extension-paths.js} +0 -0
  553. /package/dist/{bundled-resource-path.d.ts → extension-runtime/bundled-resource-path.d.ts} +0 -0
  554. /package/dist/{bundled-resource-path.js → extension-runtime/bundled-resource-path.js} +0 -0
  555. /package/dist/{extension-discovery.d.ts → extension-runtime/extension-discovery.d.ts} +0 -0
  556. /package/dist/{extension-discovery.js → extension-runtime/extension-discovery.js} +0 -0
  557. /package/dist/{extension-registry.d.ts → extension-runtime/extension-registry.d.ts} +0 -0
  558. /package/dist/{extension-sort.d.ts → extension-runtime/extension-sort.d.ts} +0 -0
  559. /package/dist/{extension-sort.js → extension-runtime/extension-sort.js} +0 -0
  560. /package/dist/{extension-validator.d.ts → extension-runtime/extension-validator.d.ts} +0 -0
  561. /package/dist/{extension-validator.js → extension-runtime/extension-validator.js} +0 -0
  562. /package/dist/{headless-answers.d.ts → headless/headless-answers.d.ts} +0 -0
  563. /package/dist/{headless-answers.js → headless/headless-answers.js} +0 -0
  564. /package/dist/{headless-context.d.ts → headless/headless-context.d.ts} +0 -0
  565. /package/dist/{headless-context.js → headless/headless-context.js} +0 -0
  566. /package/dist/{headless-events.d.ts → headless/headless-events.d.ts} +0 -0
  567. /package/dist/{headless-events.js → headless/headless-events.js} +0 -0
  568. /package/dist/{headless-recover.d.ts → headless/headless-recover.d.ts} +0 -0
  569. /package/dist/{headless-types.d.ts → headless/headless-types.d.ts} +0 -0
  570. /package/dist/{headless-types.js → headless/headless-types.js} +0 -0
  571. /package/dist/{headless-ui.d.ts → headless/headless-ui.d.ts} +0 -0
  572. /package/dist/{headless-ui.js → headless/headless-ui.js} +0 -0
  573. /package/dist/{headless.d.ts → headless/headless.d.ts} +0 -0
  574. /package/dist/{mcp-server.d.ts → mcp/mcp-server.d.ts} +0 -0
  575. /package/dist/{mcp-server.js → mcp/mcp-server.js} +0 -0
  576. /package/dist/{onboarding.d.ts → onboarding/onboarding.d.ts} +0 -0
  577. /package/dist/{welcome-screen.d.ts → onboarding/welcome-screen.d.ts} +0 -0
  578. /package/dist/{wizard.d.ts → onboarding/wizard.d.ts} +0 -0
  579. /package/dist/{wizard.js → onboarding/wizard.js} +0 -0
  580. /package/dist/{models-resolver.d.ts → providers/models-resolver.d.ts} +0 -0
  581. /package/dist/{pi-migration.d.ts → providers/pi-migration.d.ts} +0 -0
  582. /package/dist/{pi-migration.js → providers/pi-migration.js} +0 -0
  583. /package/dist/{provider-migrations.d.ts → providers/provider-migrations.d.ts} +0 -0
  584. /package/dist/{provider-migrations.js → providers/provider-migrations.js} +0 -0
  585. /package/dist/{remote-questions-config.d.ts → providers/remote-questions-config.d.ts} +0 -0
  586. /package/dist/{rtk-shared.d.ts → rtk/rtk-shared.d.ts} +0 -0
  587. /package/dist/{rtk-shared.js → rtk/rtk-shared.js} +0 -0
  588. /package/dist/{rtk.d.ts → rtk/rtk.d.ts} +0 -0
  589. /package/dist/{rtk.js → rtk/rtk.js} +0 -0
  590. /package/dist/{security-overrides.d.ts → security/security-overrides.d.ts} +0 -0
  591. /package/dist/{claude-cli-check.d.ts → startup/claude-cli-check.d.ts} +0 -0
  592. /package/dist/{claude-cli-check.js → startup/claude-cli-check.js} +0 -0
  593. /package/dist/{runtime-checks.d.ts → startup/runtime-checks.d.ts} +0 -0
  594. /package/dist/{runtime-checks.js → startup/runtime-checks.js} +0 -0
  595. /package/dist/{startup-model-validation.d.ts → startup/startup-model-validation.d.ts} +0 -0
  596. /package/dist/{startup-timings.d.ts → startup/startup-timings.d.ts} +0 -0
  597. /package/dist/{startup-timings.js → startup/startup-timings.js} +0 -0
  598. /package/dist/{update-check.d.ts → update/update-check.d.ts} +0 -0
  599. /package/dist/{update-cmd.d.ts → update/update-cmd.d.ts} +0 -0
  600. /package/dist/{update-cmd.js → update/update-cmd.js} +0 -0
  601. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → -WDXZiiJHGZDbYH75Mu6f}/_buildManifest.js +0 -0
  602. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → -WDXZiiJHGZDbYH75Mu6f}/_ssgManifest.js +0 -0
  603. /package/dist/{worktree-cli.d.ts → worktrees/worktree-cli.d.ts} +0 -0
  604. /package/dist/{worktree-name-gen.d.ts → worktrees/worktree-name-gen.d.ts} +0 -0
  605. /package/dist/{worktree-name-gen.js → worktrees/worktree-name-gen.js} +0 -0
  606. /package/dist/{worktree-status-banner.d.ts → worktrees/worktree-status-banner.d.ts} +0 -0
  607. /package/dist/{worktree-status-banner.js → worktrees/worktree-status-banner.js} +0 -0
@@ -31,7 +31,7 @@ import { selectAndApplyModel, resolveModelId, clearToolBaseline } from "./auto-m
31
31
  import { resetRoutingHistory, recordOutcome } from "./routing-history.js";
32
32
  import { resetHookState, runPreDispatchHooks, restoreHookState, clearPersistedHookState, } from "./post-unit-hooks.js";
33
33
  import { runGSDDoctor, rebuildState } from "./doctor.js";
34
- import { preDispatchHealthGate, resetProactiveHealing, setLevelChangeCallback, } from "./doctor-proactive.js";
34
+ import { preDispatchHealthGate, recordHealthSnapshot, resetProactiveHealing, setLevelChangeCallback, } from "./doctor-proactive.js";
35
35
  import { clearSkillSnapshot } from "./skill-discovery.js";
36
36
  import { captureAvailableSkills, resetSkillTelemetry, } from "./skill-telemetry.js";
37
37
  import { getRtkSessionSavings } from "../shared/rtk-session-stats.js";
@@ -43,7 +43,7 @@ import { isAbsolute, join } from "node:path";
43
43
  import { pathToFileURL } from "node:url";
44
44
  import { readFileSync, existsSync, mkdirSync } from "node:fs";
45
45
  import { atomicWriteSync } from "./atomic-write.js";
46
- import { autoCommitCurrentBranch, captureIntegrationBranch, detectWorktreeName, getCurrentBranch, getMainBranch, setActiveMilestoneId, } from "./worktree.js";
46
+ import { autoCommitCurrentBranch, captureIntegrationBranch, detectWorktreeName, getCurrentBranch, getMainBranch, setActiveMilestoneId, resolveProjectRoot, } from "./worktree.js";
47
47
  import { GitServiceImpl } from "./git-service.js";
48
48
  import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
49
49
  import { createAutoWorktree, enterAutoWorktree, enterBranchModeForMilestone, teardownAutoWorktree, isInAutoWorktree, getAutoWorktreePath, mergeMilestoneToMain, autoWorktreeBranch, syncWorktreeStateBack, syncProjectRootToWorktree, checkResourcesStale, escapeStaleWorktree, } from "./auto-worktree.js";
@@ -82,6 +82,7 @@ import { resolveAgentEnd, resolveAgentEndCancelled, _resetPendingResolve, isSess
82
82
  import { runAutoLoopWithUok } from "./uok/kernel.js";
83
83
  import { resolveUokFlags } from "./uok/flags.js";
84
84
  import { validateDirectory } from "./validate-directory.js";
85
+ import { createAutoOrchestrator } from "./auto/orchestrator.js";
85
86
  import { WorktreeResolver, } from "./worktree-resolver.js";
86
87
  import { reorderForCaching } from "./prompt-ordering.js";
87
88
  export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session.js";
@@ -904,6 +905,12 @@ export async function stopAuto(ctx, pi, reason) {
904
905
  // changes the user made between sessions (#4959 / CodeRabbit).
905
906
  if (pi)
906
907
  clearToolBaseline(pi);
908
+ try {
909
+ await s.orchestration?.stop(reason ?? "stop");
910
+ }
911
+ catch (err) {
912
+ debugLog("stop-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
913
+ }
907
914
  // Reset all session state in one call
908
915
  s.reset();
909
916
  }
@@ -953,6 +960,7 @@ export async function pauseAuto(ctx, _pi, _errorContext) {
953
960
  activeRunDir: s.activeRunDir,
954
961
  autoStartTime: s.autoStartTime,
955
962
  milestoneLock: s.sessionMilestoneLock ?? undefined,
963
+ pauseReason: _errorContext?.message,
956
964
  };
957
965
  setRuntimeKv("global", "", PAUSED_SESSION_KV_KEY, pausedMeta);
958
966
  }
@@ -992,6 +1000,12 @@ export async function pauseAuto(ctx, _pi, _errorContext) {
992
1000
  // Unblock pending unitPromise so autoLoop exits cleanly (#1799)
993
1001
  resolveAgentEnd({ messages: [] });
994
1002
  _resetPendingResolve();
1003
+ try {
1004
+ await s.orchestration?.stop("pause");
1005
+ }
1006
+ catch (err) {
1007
+ debugLog("pause-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
1008
+ }
995
1009
  s.active = false;
996
1010
  s.paused = true;
997
1011
  deactivateGSD();
@@ -1041,6 +1055,132 @@ function buildResolverDeps() {
1041
1055
  function buildResolver() {
1042
1056
  return new WorktreeResolver(s, buildResolverDeps());
1043
1057
  }
1058
+ /**
1059
+ * Thin entry glue for the new Auto Orchestration module.
1060
+ *
1061
+ * This intentionally wires only dispatch + error notification today, with
1062
+ * no behavior changes to the existing auto loop. It provides a concrete seam
1063
+ * the next refactor steps can adopt incrementally.
1064
+ */
1065
+ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, runtimeBasePath = resolveProjectRoot(dispatchBasePath)) {
1066
+ const flowId = `auto-orchestrator-${Date.now()}`;
1067
+ let seq = 0;
1068
+ const deps = {
1069
+ dispatch: {
1070
+ async decideNextUnit() {
1071
+ const state = await deriveState(dispatchBasePath);
1072
+ const active = state.activeMilestone;
1073
+ if (!active)
1074
+ return null;
1075
+ const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
1076
+ const action = await resolveDispatch({
1077
+ basePath: dispatchBasePath,
1078
+ mid: active.id,
1079
+ midTitle: active.title,
1080
+ state,
1081
+ prefs,
1082
+ });
1083
+ if (action.action !== "dispatch")
1084
+ return null;
1085
+ return {
1086
+ unitType: action.unitType,
1087
+ unitId: action.unitId,
1088
+ reason: action.matchedRule ?? "dispatch",
1089
+ preconditions: [],
1090
+ };
1091
+ },
1092
+ },
1093
+ recovery: {
1094
+ async classifyAndRecover(input) {
1095
+ const reason = input.error instanceof Error ? input.error.message : String(input.error ?? "unknown auto error");
1096
+ return { action: "escalate", reason };
1097
+ },
1098
+ },
1099
+ worktree: {
1100
+ async prepareForUnit() { },
1101
+ async syncAfterUnit() { },
1102
+ async cleanupOnStop() { },
1103
+ },
1104
+ health: {
1105
+ async preAdvanceGate() {
1106
+ const gate = await preDispatchHealthGate(dispatchBasePath);
1107
+ return {
1108
+ allow: gate.proceed,
1109
+ reason: gate.reason,
1110
+ };
1111
+ },
1112
+ async postAdvanceRecord(result) {
1113
+ if (result.kind === "error") {
1114
+ recordHealthSnapshot(1, 0, 0, [{
1115
+ code: "orchestration-error",
1116
+ message: result.reason ?? "orchestration error",
1117
+ severity: "error",
1118
+ unitId: "orchestration",
1119
+ }], [], "orchestration");
1120
+ }
1121
+ else if (result.kind === "blocked") {
1122
+ recordHealthSnapshot(0, 1, 0, [{
1123
+ code: "orchestration-blocked",
1124
+ message: result.reason ?? "orchestration blocked",
1125
+ severity: "warning",
1126
+ unitId: "orchestration",
1127
+ }], [], "orchestration");
1128
+ }
1129
+ },
1130
+ },
1131
+ runtime: {
1132
+ async ensureLockOwnership() {
1133
+ const status = getSessionLockStatus(runtimeBasePath);
1134
+ if (!status.valid || status.failureReason === "pid-mismatch") {
1135
+ throw new Error("session lock held by another process");
1136
+ }
1137
+ },
1138
+ async journalTransition(event) {
1139
+ const eventType = event.name === "start"
1140
+ ? "iteration-start"
1141
+ : event.name === "resume"
1142
+ ? "iteration-start"
1143
+ : event.name === "advance"
1144
+ ? "dispatch-match"
1145
+ : event.name === "advance-blocked"
1146
+ ? "guard-block"
1147
+ : event.name === "advance-stopped"
1148
+ ? "dispatch-stop"
1149
+ : event.name === "advance-error"
1150
+ ? "iteration-end"
1151
+ : event.name === "advance-paused" || event.name === "advance-retry"
1152
+ ? "guard-block"
1153
+ : event.name === "stop"
1154
+ ? "terminal"
1155
+ : "iteration-end";
1156
+ _emitJournalEvent(runtimeBasePath, {
1157
+ ts: new Date().toISOString(),
1158
+ flowId,
1159
+ seq: ++seq,
1160
+ eventType,
1161
+ data: {
1162
+ source: "auto-orchestrator",
1163
+ name: event.name,
1164
+ reason: event.reason,
1165
+ unitType: event.unitType,
1166
+ unitId: event.unitId,
1167
+ },
1168
+ });
1169
+ },
1170
+ },
1171
+ notifications: {
1172
+ async notifyLifecycle(event) {
1173
+ if (event.name === "error") {
1174
+ ctx.ui.notify(event.detail ?? "auto orchestration error", "error");
1175
+ }
1176
+ },
1177
+ },
1178
+ };
1179
+ return createAutoOrchestrator(deps);
1180
+ }
1181
+ function ensureOrchestrationModule(ctx, pi, basePath) {
1182
+ s.orchestration = createWiredAutoOrchestrationModule(ctx, pi, basePath, lockBase());
1183
+ }
1044
1184
  /**
1045
1185
  * Build the LoopDeps object from auto.ts private scope.
1046
1186
  * This bundles all private functions that autoLoop needs without exporting them.
@@ -1398,6 +1538,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1398
1538
  // s.basePath may have been updated to a worktree path by enterMilestone.
1399
1539
  rebuildScope(s.basePath, s.currentMilestoneId);
1400
1540
  }
1541
+ ensureOrchestrationModule(ctx, pi, s.basePath || base);
1401
1542
  registerSigtermHandler(lockBase());
1402
1543
  ctx.ui.setStatus("gsd-auto", s.stepMode ? "next" : "auto");
1403
1544
  ctx.ui.setWidget("gsd-health", undefined);
@@ -1406,15 +1547,15 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1406
1547
  // Re-sync managed resources on resume so long-lived auto sessions pick up
1407
1548
  // bundled extension updates before resume-time verification/state logic runs.
1408
1549
  // GSD_PKG_ROOT is set by loader.ts and points to the gsd-pi package root.
1409
- // The relative import ("../../../resource-loader.js") only works from the source
1550
+ // The relative import ("../../../resource-runtime/resource-loader.js") only works from the source
1410
1551
  // tree; deployed extensions live at ~/.gsd/agent/extensions/gsd/ where the
1411
1552
  // relative path resolves to ~/.gsd/agent/resource-loader.js which doesn't exist.
1412
1553
  // Using GSD_PKG_ROOT constructs a correct absolute path in both contexts (#3949).
1413
1554
  const agentDir = process.env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
1414
1555
  const pkgRoot = process.env.GSD_PKG_ROOT;
1415
1556
  const resourceLoaderPath = pkgRoot
1416
- ? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
1417
- : new URL("../../../resource-loader.js", import.meta.url).href;
1557
+ ? pathToFileURL(join(pkgRoot, "dist", "resource-runtime", "resource-loader.js")).href
1558
+ : new URL("../../../resource-runtime/resource-loader.js", import.meta.url).href;
1418
1559
  const { initResources } = await import(resourceLoaderPath);
1419
1560
  initResources(agentDir);
1420
1561
  // Open the project DB before rebuild/derive so resume uses DB-backed
@@ -1457,6 +1598,12 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1457
1598
  clearPausedSession("paused-session DB cleanup failed (resume activation)");
1458
1599
  }
1459
1600
  pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", level: "progress" });
1601
+ try {
1602
+ await s.orchestration?.resume();
1603
+ }
1604
+ catch (err) {
1605
+ debugLog("resume-orchestration-resume", { error: err instanceof Error ? err.message : String(err) });
1606
+ }
1460
1607
  startAutoCommandPolling(s.basePath);
1461
1608
  await runAutoLoopWithUok({
1462
1609
  ctx,
@@ -1482,6 +1629,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1482
1629
  // Build scope after bootstrap has populated s.basePath / s.originalBasePath /
1483
1630
  // s.currentMilestoneId (including worktree setup inside bootstrapAutoSession).
1484
1631
  rebuildScope(s.basePath, s.currentMilestoneId);
1632
+ ensureOrchestrationModule(ctx, pi, s.basePath || base);
1485
1633
  captureProjectRootEnv(s.originalBasePath || s.basePath);
1486
1634
  registerAutoWorkerForSession(s);
1487
1635
  try {
@@ -1492,6 +1640,12 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1492
1640
  logWarning("engine", `cmux sync failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1493
1641
  }
1494
1642
  pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: requestedStepMode ? "Step-mode started." : "Auto-mode started.", level: "progress" });
1643
+ try {
1644
+ await s.orchestration?.start({ basePath: s.basePath, trigger: "auto-loop" });
1645
+ }
1646
+ catch (err) {
1647
+ debugLog("start-orchestration-start", { error: err instanceof Error ? err.message : String(err) });
1648
+ }
1495
1649
  startAutoCommandPolling(s.basePath);
1496
1650
  // Dispatch the first unit
1497
1651
  await runAutoLoopWithUok({
@@ -1576,6 +1730,9 @@ export async function dispatchHookUnit(ctx, pi, hookName, triggerUnitType, trigg
1576
1730
  s.pendingQuickTasks = [];
1577
1731
  }
1578
1732
  s.basePath = targetBasePath;
1733
+ if (!s.orchestration) {
1734
+ ensureOrchestrationModule(ctx, pi, s.basePath);
1735
+ }
1579
1736
  const hookUnitType = `hook/${hookName}`;
1580
1737
  const hookStartedAt = Date.now();
1581
1738
  s.currentUnit = {
@@ -39,6 +39,14 @@ function resolveAgentEndBasePath() {
39
39
  return undefined;
40
40
  }
41
41
  }
42
+ export function _buildAbortedPauseContext(lastMsg) {
43
+ const hasErrorMessage = Object.prototype.hasOwnProperty.call(lastMsg, "errorMessage") && !!lastMsg.errorMessage;
44
+ return {
45
+ message: hasErrorMessage ? String(lastMsg.errorMessage) : "Operation aborted",
46
+ category: "aborted",
47
+ isTransient: true,
48
+ };
49
+ }
42
50
  async function pauseTransientWithBackoff(cls, pi, ctx, errorDetail, isRateLimit) {
43
51
  retryState.consecutiveTransientCount += 1;
44
52
  const baseRetryAfterMs = "retryAfterMs" in cls ? cls.retryAfterMs : 15_000;
@@ -134,7 +142,7 @@ export async function handleAgentEnd(pi, event, ctx) {
134
142
  }
135
143
  return;
136
144
  }
137
- await pauseAuto(ctx, pi);
145
+ await pauseAuto(ctx, pi, _buildAbortedPauseContext(lastMsg));
138
146
  return;
139
147
  }
140
148
  if (lastMsg && "stopReason" in lastMsg && lastMsg.stopReason === "error") {
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Registers DB-backed GSD workflow tools and compatibility aliases.
1
3
  import { Type } from "@sinclair/typebox";
2
4
  import { Text } from "@gsd/pi-tui";
3
5
  import { loadEffectiveGSDPreferences } from "../preferences.js";
@@ -5,6 +7,7 @@ import { ensureDbOpen } from "./dynamic-tools.js";
5
7
  import { loadWriteGateSnapshot, shouldBlockRootArtifactSaveInSnapshot } from "./write-gate.js";
6
8
  import { StringEnum } from "@gsd/pi-ai";
7
9
  import { logError } from "../workflow-logger.js";
10
+ import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
8
11
  async function loadWorkflowExecutors() {
9
12
  return import("../tools/workflow-tool-executors.js");
10
13
  }
@@ -14,11 +17,18 @@ async function loadWorkflowExecutors() {
14
17
  */
15
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but typing it fully requires generics
16
19
  function registerAlias(pi, toolDef, aliasName, canonicalName) {
20
+ const execute = typeof toolDef.execute === "function"
21
+ ? async (...args) => {
22
+ incrementLegacyTelemetry("legacy.mcpAliasUsed");
23
+ return toolDef.execute(...args);
24
+ }
25
+ : toolDef.execute;
17
26
  pi.registerTool({
18
27
  ...toolDef,
19
28
  name: aliasName,
20
29
  description: toolDef.description + ` (alias for ${canonicalName} — prefer the canonical name)`,
21
30
  promptGuidelines: [`Alias for ${canonicalName} — prefer the canonical name.`],
31
+ execute,
22
32
  });
23
33
  }
24
34
  function requirementRootWriteGuard(operation) {
@@ -16,6 +16,7 @@ import { logWarning as safetyLogWarning } from "../workflow-logger.js";
16
16
  import { installNotifyInterceptor } from "./notify-interceptor.js";
17
17
  import { initNotificationStore } from "../notification-store.js";
18
18
  import { initNotificationWidget } from "../notification-widget.js";
19
+ import { resolveWorktreeProjectRoot } from "../worktree-root.js";
19
20
  import { extractSubagentAgentClasses } from "./subagent-input.js";
20
21
  import { approvalGateIdForUnit, isExplicitApprovalResponse, shouldPauseForUserApprovalQuestion } from "../user-input-boundary.js";
21
22
  // Skip the welcome screen on the very first session_start — cli.ts already
@@ -51,6 +52,14 @@ async function applyDisabledModelProviderPolicy(ctx) {
51
52
  // Non-fatal: keep default provider visibility if preferences cannot be loaded.
52
53
  }
53
54
  }
55
+ export function resolveNotificationStoreBasePath(cwd = process.cwd()) {
56
+ return resolveWorktreeProjectRoot(cwd);
57
+ }
58
+ function initSessionNotifications(ctx) {
59
+ initNotificationStore(resolveNotificationStoreBasePath());
60
+ installNotifyInterceptor(ctx);
61
+ initNotificationWidget(ctx);
62
+ }
54
63
  async function writeContextModeCompactionSnapshot(basePath) {
55
64
  try {
56
65
  const { loadEffectiveGSDPreferences } = await import("../preferences.js");
@@ -81,9 +90,7 @@ async function writeContextModeCompactionSnapshot(basePath) {
81
90
  }
82
91
  export function registerHooks(pi, ecosystemHandlers) {
83
92
  pi.on("session_start", async (_event, ctx) => {
84
- initNotificationStore(process.cwd());
85
- installNotifyInterceptor(ctx);
86
- initNotificationWidget(ctx);
93
+ initSessionNotifications(ctx);
87
94
  if (!isAutoActive()) {
88
95
  const { initHealthWidget } = await import("../health-widget.js");
89
96
  initHealthWidget(ctx);
@@ -135,8 +142,7 @@ export function registerHooks(pi, ecosystemHandlers) {
135
142
  }
136
143
  });
137
144
  pi.on("session_switch", async (_event, ctx) => {
138
- initNotificationStore(process.cwd());
139
- installNotifyInterceptor(ctx);
145
+ initSessionNotifications(ctx);
140
146
  resetWriteGateState(process.cwd());
141
147
  resetToolCallLoopGuard();
142
148
  await resetAskUserQuestionsTurnCache();
@@ -1,9 +1,5 @@
1
- /**
2
- * GSD Command /gsd ship
3
- *
4
- * Creates a PR from milestone artifacts: generates title + body from
5
- * roadmap, slice summaries, and metrics, then opens via `gh pr create`.
6
- */
1
+ // Project/App: GSD-2
2
+ // File Purpose: Ship command for creating pull requests from GSD milestone evidence.
7
3
  import { execFileSync } from "node:child_process";
8
4
  import { existsSync, readFileSync, readdirSync } from "node:fs";
9
5
  import { readFile } from "node:fs/promises";
@@ -14,6 +10,7 @@ import { nativeGetCurrentBranch, nativeDetectMainBranch } from "./native-git-bri
14
10
  import { formatDuration } from "../shared/format-utils.js";
15
11
  import { parseEvalReviewFrontmatter } from "./eval-review-schema.js";
16
12
  import { currentDirectoryRoot } from "./commands/context.js";
13
+ import { buildPrEvidence } from "./pr-evidence.js";
17
14
  function git(basePath, args) {
18
15
  return execFileSync("git", args, { cwd: basePath, encoding: "utf-8" }).trim();
19
16
  }
@@ -114,66 +111,46 @@ export async function checkSliceEvalReview(basePath, milestoneId, sliceId) {
114
111
  };
115
112
  }
116
113
  function generatePRContent(basePath, milestoneId, milestoneTitle) {
117
- const title = `feat: ${milestoneTitle || milestoneId}`;
118
- const sections = [];
119
- // TL;DR
120
- sections.push("## TL;DR\n");
121
- sections.push(`**What:** Ship milestone ${milestoneId} — ${milestoneTitle || "(untitled)"}`);
122
- sections.push(`**Why:** Milestone work complete, ready for review.`);
123
- sections.push(`**How:** See slice summaries below.\n`);
124
- // What — slice summaries
125
114
  const summaries = collectSliceSummaries(basePath, milestoneId);
126
- if (summaries.length > 0) {
127
- sections.push("## What\n");
128
- sections.push(summaries.join("\n\n"));
129
- sections.push("");
130
- }
131
- // Roadmap status
115
+ const roadmapItems = [];
132
116
  const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
133
117
  if (roadmapPath && existsSync(roadmapPath)) {
134
118
  try {
135
119
  const roadmap = readFileSync(roadmapPath, "utf-8");
136
120
  const checkboxLines = roadmap.split("\n").filter((l) => /^\s*-\s*\[[ x]\]/.test(l));
137
- if (checkboxLines.length > 0) {
138
- sections.push("## Roadmap\n");
139
- sections.push(checkboxLines.join("\n"));
140
- sections.push("");
141
- }
121
+ roadmapItems.push(...checkboxLines);
142
122
  }
143
123
  catch {
144
124
  // non-fatal
145
125
  }
146
126
  }
147
- // Metrics
127
+ const metrics = [];
148
128
  const ledger = getLedger();
149
129
  const units = ledger?.units ?? loadLedgerFromDisk(basePath)?.units ?? [];
150
130
  if (units.length > 0) {
151
131
  const totals = getProjectTotals(units);
152
132
  const byModel = aggregateByModel(units);
153
- sections.push("## Metrics\n");
154
- sections.push(`- **Units executed:** ${units.length}`);
155
- sections.push(`- **Total cost:** ${formatCost(totals.cost)}`);
156
- sections.push(`- **Tokens:** ${formatTokenCount(totals.tokens.input)} input / ${formatTokenCount(totals.tokens.output)} output`);
133
+ metrics.push(`**Units executed:** ${units.length}`);
134
+ metrics.push(`**Total cost:** ${formatCost(totals.cost)}`);
135
+ metrics.push(`**Tokens:** ${formatTokenCount(totals.tokens.input)} input / ${formatTokenCount(totals.tokens.output)} output`);
157
136
  if (totals.duration > 0) {
158
- sections.push(`- **Duration:** ${formatDuration(totals.duration)}`);
137
+ metrics.push(`**Duration:** ${formatDuration(totals.duration)}`);
159
138
  }
160
139
  if (byModel.length > 0) {
161
- sections.push(`- **Models:** ${byModel.map((m) => `${m.model} (${m.units} units)`).join(", ")}`);
140
+ metrics.push(`**Models:** ${byModel.map((m) => `${m.model} (${m.units} units)`).join(", ")}`);
162
141
  }
163
- sections.push("");
164
- }
165
- // Change type checklist
166
- sections.push("## Change type\n");
167
- sections.push("- [x] `feat` — New feature or capability");
168
- sections.push("- [ ] `fix` — Bug fix");
169
- sections.push("- [ ] `refactor` — Code restructuring");
170
- sections.push("- [ ] `test` — Adding or updating tests");
171
- sections.push("- [ ] `docs` Documentation only");
172
- sections.push("- [ ] `chore` Build, CI, or tooling changes\n");
173
- // AI disclosure
174
- sections.push("---\n");
175
- sections.push("*This PR was prepared with AI assistance (GSD auto-mode).*");
176
- return { title, body: sections.join("\n") };
142
+ }
143
+ return buildPrEvidence({
144
+ milestoneId,
145
+ milestoneTitle,
146
+ changeType: "feat",
147
+ summaries,
148
+ roadmapItems,
149
+ metrics,
150
+ testsRun: ["Run `npm run verify:pr` before marking this PR ready."],
151
+ rollbackNotes: ["Revert the merge commit or close the PR before merge if review finds a regression."],
152
+ how: "Generated from GSD milestone slice summaries, roadmap status, and local metrics.",
153
+ });
177
154
  }
178
155
  export async function handleShip(args, ctx, _pi) {
179
156
  const basePath = currentDirectoryRoot();
@@ -1,12 +1,8 @@
1
- /**
2
- * GSD Workflow Template Commands /gsd start, /gsd templates
3
- *
4
- * Handles the `/gsd start [template] [description]` and `/gsd templates` commands.
5
- * Resolves templates by name or auto-detection, then dispatches the workflow prompt.
6
- */
1
+ // Project/App: GSD-2
2
+ // File Purpose: Workflow template commands for starting, listing, and dispatching workflows.
7
3
  import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
8
4
  import { join } from "node:path";
9
- import { resolveByName, autoDetect, listTemplates, getTemplateInfo, loadWorkflowTemplate, loadRegistry, } from "./workflow-templates.js";
5
+ import { resolveByName, autoDetect, listTemplates, getTemplateInfo, loadWorkflowTemplate, loadRegistry, isLegacyWorkflowMode, } from "./workflow-templates.js";
10
6
  import { loadPrompt } from "./prompt-loader.js";
11
7
  import { gsdRoot } from "./paths.js";
12
8
  import { createGitService, runGit } from "./git-service.js";
@@ -14,6 +10,8 @@ import { isAutoActive, isAutoPaused } from "./auto.js";
14
10
  import { getErrorMessage } from "./error-utils.js";
15
11
  import { resolvePlugin } from "./workflow-plugins.js";
16
12
  import { currentDirectoryRoot } from "./commands/context.js";
13
+ import { formatRecommendedProcessPaths } from "./process-task-path.js";
14
+ import { incrementLegacyTelemetry } from "./legacy-telemetry.js";
17
15
  // ─── Helpers ─────────────────────────────────────────────────────────────────
18
16
  /**
19
17
  * Generate a URL-friendly slug from text.
@@ -244,6 +242,9 @@ export async function handleStart(args, ctx, pi) {
244
242
  " /gsd start bugfix fix login button not responding\n" +
245
243
  " /gsd start spike evaluate auth libraries\n" +
246
244
  " /gsd start hotfix critical: API returns 500\n\n" +
245
+ "Recommended task paths:\n" +
246
+ formatRecommendedProcessPaths() +
247
+ "\n\n" +
247
248
  "Flags:\n" +
248
249
  " --dry-run Preview what would happen without executing\n" +
249
250
  " --issue <ref> Link to a GitHub issue\n\n" +
@@ -364,6 +365,9 @@ export async function handleStart(args, ctx, pi) {
364
365
  infoLines.push(`Artifacts: ${artifactDir}`);
365
366
  infoLines.push(`Branch: ${actualBranch}`);
366
367
  ctx.ui.notify(infoLines.join("\n"), "info");
368
+ if (isLegacyWorkflowMode(template.mode)) {
369
+ incrementLegacyTelemetry("legacy.workflowEngineUsed");
370
+ }
367
371
  const prompt = loadPrompt("workflow-start", {
368
372
  templateId,
369
373
  templateName: template.name,
@@ -491,6 +495,7 @@ export function dispatchMarkdownPhasePlugin(plugin, description, ctx, pi) {
491
495
  infoLines.push(`Artifacts: ${artifactDir}`);
492
496
  infoLines.push(`Branch: ${actualBranch}`);
493
497
  ctx.ui.notify(infoLines.join("\n"), "info");
498
+ incrementLegacyTelemetry("legacy.workflowEngineUsed");
494
499
  const prompt = loadPrompt("workflow-start", {
495
500
  templateId,
496
501
  templateName: plugin.meta.displayName,
@@ -1,18 +1,10 @@
1
- /**
2
- * Component Loader
3
- *
4
- * Multi-format loader that handles:
5
- * 1. New format: component.yaml + SKILL.md/AGENT.md
6
- * 2. Legacy skill format: SKILL.md with YAML frontmatter
7
- * 3. Legacy agent format: .md with YAML frontmatter (name, description, tools, model)
8
- *
9
- * Auto-detects format by checking for component.yaml first, then falling back
10
- * to legacy formats based on file naming conventions.
11
- */
1
+ // Project/App: GSD-2
2
+ // File Purpose: Loads modern component.yaml definitions and legacy skill/agent formats.
12
3
  import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
13
4
  import { basename, dirname, join } from 'node:path';
14
5
  import { parse as parseYaml } from 'yaml';
15
6
  import { parseFrontmatter } from '@gsd/pi-coding-agent';
7
+ import { incrementLegacyTelemetry } from './legacy-telemetry.js';
16
8
  import { validateComponentName, validateComponentDescription, computeComponentId, } from './component-types.js';
17
9
  const SUPPORTED_COMPONENT_KINDS = ['skill', 'agent'];
18
10
  const SUPPORTED_API_VERSIONS = ['gsd/v1'];
@@ -183,6 +175,7 @@ function loadFromLegacySkill(filePath, dir, source) {
183
175
  format: 'skill-md',
184
176
  enabled: true,
185
177
  };
178
+ incrementLegacyTelemetry('legacy.componentFormatUsed');
186
179
  return { component, diagnostics };
187
180
  }
188
181
  function loadFromLegacyAgent(filePath, source) {
@@ -235,6 +228,7 @@ function loadFromLegacyAgent(filePath, source) {
235
228
  format: 'agent-md',
236
229
  enabled: true,
237
230
  };
231
+ incrementLegacyTelemetry('legacy.componentFormatUsed');
238
232
  return { component, diagnostics };
239
233
  }
240
234
  // ============================================================================
@@ -13,13 +13,29 @@
13
13
  */
14
14
  import { readFileSync } from "node:fs";
15
15
  import { join } from "node:path";
16
- import { readGraph, writeGraph, getNextPendingStep, markStepActive, markStepComplete, expandIteration, } from "./graph.js";
16
+ import { readGraph, writeGraph, getNextPendingStep, markStepActive, markStepComplete, expandIteration, isTerminalStepStatus, } from "./graph.js";
17
17
  import { injectContext } from "./context-injector.js";
18
18
  import { readFrozenDefinition } from "./definition-io.js";
19
19
  import { parseUnitId } from "./unit-id.js";
20
20
  import { withFileLock } from "./file-lock.js";
21
21
  // Re-export for downstream consumers
22
22
  export { readFrozenDefinition } from "./definition-io.js";
23
+ function formatBlockedWorkflowReason(graph) {
24
+ const statusById = new Map(graph.steps.map((step) => [step.id, step.status]));
25
+ const blockedSteps = graph.steps
26
+ .filter((step) => step.status === "pending")
27
+ .map((step) => {
28
+ const blockers = step.dependsOn
29
+ .filter((depId) => !isTerminalStepStatus(statusById.get(depId)))
30
+ .map((depId) => `${depId} (${statusById.get(depId) ?? "missing"})`);
31
+ return blockers.length > 0
32
+ ? `${step.id} waiting on ${blockers.join(", ")}`
33
+ : `${step.id} has no runnable dependency path`;
34
+ });
35
+ return blockedSteps.length > 0
36
+ ? `Workflow blocked: no pending steps are ready. Blocked steps: ${blockedSteps.join("; ")}`
37
+ : "Workflow blocked: no pending steps are ready.";
38
+ }
23
39
  export class CustomWorkflowEngine {
24
40
  engineId = "custom";
25
41
  runDir;
@@ -78,6 +94,14 @@ export class CustomWorkflowEngine {
78
94
  }
79
95
  let next = getNextPendingStep(graph);
80
96
  if (!next) {
97
+ const allDone = graph.steps.every((step) => step.status === "complete" || step.status === "expanded");
98
+ if (!allDone) {
99
+ return {
100
+ action: "stop",
101
+ reason: formatBlockedWorkflowReason(graph),
102
+ level: "error",
103
+ };
104
+ }
81
105
  return {
82
106
  action: "stop",
83
107
  reason: "All steps complete",
@@ -0,0 +1,47 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Normalized SQLite adapter wrapper used by the GSD database facade.
3
+ export function normalizeDbRow(row) {
4
+ if (row == null)
5
+ return undefined;
6
+ if (Object.getPrototypeOf(row) === null) {
7
+ return { ...row };
8
+ }
9
+ return row;
10
+ }
11
+ export function normalizeDbRows(rows) {
12
+ return rows.map((row) => normalizeDbRow(row));
13
+ }
14
+ export function createDbAdapter(rawDb) {
15
+ const db = rawDb;
16
+ const stmtCache = new Map();
17
+ function wrapStmt(raw) {
18
+ return {
19
+ run(...params) {
20
+ return raw.run(...params);
21
+ },
22
+ get(...params) {
23
+ return normalizeDbRow(raw.get(...params));
24
+ },
25
+ all(...params) {
26
+ return normalizeDbRows(raw.all(...params));
27
+ },
28
+ };
29
+ }
30
+ return {
31
+ exec(sql) {
32
+ db.exec(sql);
33
+ },
34
+ prepare(sql) {
35
+ let cached = stmtCache.get(sql);
36
+ if (cached)
37
+ return cached;
38
+ cached = wrapStmt(db.prepare(sql));
39
+ stmtCache.set(sql, cached);
40
+ return cached;
41
+ },
42
+ close() {
43
+ stmtCache.clear();
44
+ db.close();
45
+ },
46
+ };
47
+ }