gsd-pi 2.78.1-dev.84a383f51 → 2.78.1

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 (474) hide show
  1. package/README.md +7 -7
  2. package/dist/cli.js +55 -95
  3. package/dist/headless-query.d.ts +0 -22
  4. package/dist/headless-query.js +4 -24
  5. package/dist/headless.d.ts +0 -10
  6. package/dist/headless.js +1 -16
  7. package/dist/loader.js +10 -7
  8. package/dist/onboarding.d.ts +0 -10
  9. package/dist/onboarding.js +2 -2
  10. package/dist/provider-migrations.d.ts +2 -2
  11. package/dist/provider-migrations.js +2 -5
  12. package/dist/resource-loader.d.ts +2 -5
  13. package/dist/resource-loader.js +5 -28
  14. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +601 -0
  15. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +651 -0
  16. package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +91 -0
  17. package/dist/resources/extensions/gsd/auto/loop.js +0 -23
  18. package/dist/resources/extensions/gsd/auto/phases.js +2 -2
  19. package/dist/resources/extensions/gsd/auto/run-unit.js +1 -3
  20. package/dist/resources/extensions/gsd/auto/session.js +0 -3
  21. package/dist/resources/extensions/gsd/auto-recovery.js +4 -43
  22. package/dist/resources/extensions/gsd/auto-start.js +1 -1
  23. package/dist/resources/extensions/gsd/auto-tool-tracking.js +2 -2
  24. package/dist/resources/extensions/gsd/auto-worktree.js +0 -30
  25. package/dist/resources/extensions/gsd/auto.js +5 -14
  26. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -14
  27. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +5 -7
  28. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  29. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +4 -5
  30. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +31 -94
  31. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +6 -11
  32. package/dist/resources/extensions/gsd/bootstrap/system-context.js +8 -34
  33. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +2 -38
  34. package/dist/resources/extensions/gsd/commands/catalog.js +5 -69
  35. package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -22
  36. package/dist/resources/extensions/gsd/commands-mcp-status.js +1 -3
  37. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -10
  38. package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
  39. package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -4
  40. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +1 -39
  41. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  42. package/dist/resources/extensions/gsd/forensics.js +2 -2
  43. package/dist/resources/extensions/gsd/git-service.js +5 -12
  44. package/dist/resources/extensions/gsd/gsd-db.js +2 -11
  45. package/dist/resources/extensions/gsd/guided-flow.js +23 -23
  46. package/dist/resources/extensions/gsd/memory-store.js +31 -66
  47. package/dist/resources/extensions/gsd/model-router.js +9 -114
  48. package/dist/resources/extensions/gsd/native-git-bridge.js +1 -7
  49. package/dist/resources/extensions/gsd/preferences-models.js +15 -91
  50. package/dist/resources/extensions/gsd/preferences-types.js +0 -2
  51. package/dist/resources/extensions/gsd/preferences-validation.js +0 -32
  52. package/dist/resources/extensions/gsd/preferences.js +3 -5
  53. package/dist/resources/extensions/gsd/prompt-loader.js +12 -23
  54. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -9
  55. package/dist/resources/extensions/gsd/state.js +0 -42
  56. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
  57. package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +53 -0
  58. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +112 -0
  59. package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +23 -0
  60. package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +5 -0
  61. package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -18
  62. package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
  63. package/dist/resources/extensions/gsd/watch/header-renderer.js +1 -3
  64. package/dist/resources/extensions/gsd/worktree-command.js +46 -26
  65. package/dist/resources/extensions/mcp-client/index.js +3 -6
  66. package/dist/resources/extensions/slash-commands/create-extension.js +22 -36
  67. package/dist/resources/skills/create-gsd-extension/SKILL.md +5 -9
  68. package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  69. package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  70. package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  71. package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  72. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  73. package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  74. package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  75. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
  76. package/dist/resources/skills/github-workflows/references/gh/tests/__init__.py +0 -0
  77. package/dist/resources/skills/github-workflows/references/gh/tests/test_github_project_setup.py +608 -0
  78. package/dist/rtk-shared.d.ts +0 -3
  79. package/dist/rtk-shared.js +0 -17
  80. package/dist/rtk.d.ts +5 -2
  81. package/dist/rtk.js +20 -3
  82. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  83. package/dist/web/standalone/.next/BUILD_ID +1 -1
  84. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  85. package/dist/web/standalone/.next/build-manifest.json +4 -4
  86. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  87. package/dist/web/standalone/.next/react-loadable-manifest.json +4 -44
  88. package/dist/web/standalone/.next/required-server-files.json +3 -3
  89. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  90. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  100. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  103. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  104. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  105. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  106. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  107. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  108. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  109. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  116. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  128. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  148. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  158. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -4
  164. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  178. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  180. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  182. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  184. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/index.html +1 -1
  194. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  195. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  196. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  197. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  199. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  200. package/dist/web/standalone/.next/server/app/page.js +2 -2
  201. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  203. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  204. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  205. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  206. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  207. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/middleware.js +2 -2
  209. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  210. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  211. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  212. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  213. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  214. package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
  215. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  216. package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +20 -0
  217. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  218. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  219. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
  220. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  221. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  222. package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.js +1 -0
  223. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  224. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  225. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  226. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  227. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  228. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  229. package/dist/web/standalone/package.json +1 -2
  230. package/dist/web/standalone/server.js +1 -1
  231. package/package.json +1 -1
  232. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  233. package/packages/mcp-server/dist/workflow-tools.js +46 -74
  234. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  235. package/packages/mcp-server/src/workflow-tools.test.ts +0 -26
  236. package/packages/mcp-server/src/workflow-tools.ts +58 -93
  237. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  238. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  239. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  240. package/packages/pi-ai/dist/providers/anthropic-shared.js +19 -48
  241. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  242. package/packages/pi-ai/dist/types.d.ts +0 -13
  243. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  244. package/packages/pi-ai/dist/types.js.map +1 -1
  245. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -1
  246. package/packages/pi-ai/dist/utils/repair-tool-json.js +3 -24
  247. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -1
  248. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -26
  249. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
  250. package/packages/pi-ai/src/providers/anthropic-shared.ts +20 -52
  251. package/packages/pi-ai/src/types.ts +0 -13
  252. package/packages/pi-ai/src/utils/repair-tool-json.ts +3 -24
  253. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -32
  254. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  255. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  256. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -6
  257. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  259. package/packages/pi-coding-agent/dist/core/messages.js +0 -4
  260. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  261. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -19
  262. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  263. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -10
  264. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  265. package/packages/pi-coding-agent/dist/core/model-registry.js +0 -18
  266. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +0 -13
  268. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/system-prompt.js +16 -20
  270. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  271. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +1 -1
  272. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -14
  274. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  275. package/packages/pi-coding-agent/src/core/agent-session.ts +0 -7
  276. package/packages/pi-coding-agent/src/core/messages.ts +0 -4
  277. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -32
  278. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -21
  279. package/packages/pi-coding-agent/src/core/system-prompt.ts +15 -33
  280. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -17
  281. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
  282. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  283. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +3 -17
  284. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  285. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +3 -20
  286. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  287. package/src/resources/extensions/gsd/auto/loop.ts +2 -24
  288. package/src/resources/extensions/gsd/auto/phases.ts +3 -3
  289. package/src/resources/extensions/gsd/auto/run-unit.ts +1 -3
  290. package/src/resources/extensions/gsd/auto/session.ts +0 -3
  291. package/src/resources/extensions/gsd/auto/types.ts +0 -1
  292. package/src/resources/extensions/gsd/auto-recovery.ts +8 -46
  293. package/src/resources/extensions/gsd/auto-start.ts +1 -1
  294. package/src/resources/extensions/gsd/auto-tool-tracking.ts +4 -2
  295. package/src/resources/extensions/gsd/auto-worktree.ts +0 -38
  296. package/src/resources/extensions/gsd/auto.ts +4 -14
  297. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +13 -15
  298. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +7 -8
  299. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  300. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +9 -10
  301. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +31 -102
  302. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +6 -12
  303. package/src/resources/extensions/gsd/bootstrap/system-context.ts +8 -39
  304. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +11 -39
  305. package/src/resources/extensions/gsd/commands/catalog.ts +5 -75
  306. package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -22
  307. package/src/resources/extensions/gsd/commands-mcp-status.ts +1 -3
  308. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -15
  309. package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
  310. package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -4
  311. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +1 -39
  312. package/src/resources/extensions/gsd/doctor-types.ts +1 -3
  313. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  314. package/src/resources/extensions/gsd/forensics.ts +2 -2
  315. package/src/resources/extensions/gsd/git-service.ts +5 -13
  316. package/src/resources/extensions/gsd/gsd-db.ts +2 -12
  317. package/src/resources/extensions/gsd/guided-flow.ts +25 -25
  318. package/src/resources/extensions/gsd/memory-store.ts +28 -81
  319. package/src/resources/extensions/gsd/model-router.ts +9 -172
  320. package/src/resources/extensions/gsd/native-git-bridge.ts +1 -7
  321. package/src/resources/extensions/gsd/preferences-models.ts +15 -101
  322. package/src/resources/extensions/gsd/preferences-types.ts +0 -6
  323. package/src/resources/extensions/gsd/preferences-validation.ts +0 -35
  324. package/src/resources/extensions/gsd/preferences.ts +2 -16
  325. package/src/resources/extensions/gsd/prompt-loader.ts +12 -26
  326. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +3 -9
  327. package/src/resources/extensions/gsd/state.ts +0 -42
  328. package/src/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
  329. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1 -178
  330. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -58
  331. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +5 -9
  332. package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +4 -21
  333. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +1 -1
  334. package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +211 -138
  335. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +59 -142
  336. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +4 -7
  337. package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +32 -89
  338. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +22 -0
  339. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +23 -41
  340. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +43 -3
  341. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +3 -5
  342. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +87 -22
  343. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +118 -7
  344. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +47 -0
  345. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +60 -18
  346. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +76 -14
  347. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +75 -0
  348. package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +83 -22
  349. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +63 -1
  350. package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +1 -26
  351. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +0 -30
  352. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +4 -14
  353. package/src/resources/extensions/gsd/tests/health-widget.test.ts +12 -22
  354. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +1 -64
  355. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -22
  356. package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +23 -0
  357. package/src/resources/extensions/gsd/tests/memory-store.test.ts +0 -128
  358. package/src/resources/extensions/gsd/tests/memory-tools.test.ts +1 -33
  359. package/src/resources/extensions/gsd/tests/model-router.test.ts +8 -169
  360. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +0 -8
  361. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +43 -32
  362. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +10 -4
  363. package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -127
  364. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +0 -16
  365. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -7
  366. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
  367. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +19 -168
  368. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +1 -7
  369. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -23
  370. package/src/resources/extensions/gsd/tests/token-profile.test.ts +4 -51
  371. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +16 -7
  372. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +7 -5
  373. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +1 -15
  374. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
  375. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +0 -15
  376. package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -17
  377. package/src/resources/extensions/gsd/unit-context-manifest.ts +8 -8
  378. package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
  379. package/src/resources/extensions/gsd/watch/header-renderer.ts +1 -3
  380. package/src/resources/extensions/gsd/workflow-logger.ts +0 -1
  381. package/src/resources/extensions/gsd/worktree-command.ts +44 -31
  382. package/src/resources/extensions/mcp-client/index.ts +3 -6
  383. package/src/resources/extensions/slash-commands/create-extension.ts +24 -38
  384. package/src/resources/skills/create-gsd-extension/SKILL.md +5 -9
  385. package/src/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  386. package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  387. package/src/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  388. package/src/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  389. package/src/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  390. package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  391. package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  392. package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +2 -2
  393. package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +3 -3
  394. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
  395. package/dist/cli-policy.d.ts +0 -13
  396. package/dist/cli-policy.js +0 -17
  397. package/dist/resources/.managed-resources-content-hash +0 -1
  398. package/dist/resources/extensions/gsd/auto-runtime-state.js +0 -31
  399. package/dist/resources/extensions/gsd/milestone-id-reservation.js +0 -36
  400. package/dist/resources/extensions/gsd/worktree-session-state.js +0 -33
  401. package/dist/runtime-checks.d.ts +0 -27
  402. package/dist/runtime-checks.js +0 -38
  403. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
  404. package/dist/web/standalone/.next/static/chunks/2824.08296bc2f9654698.js +0 -1
  405. package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +0 -1
  406. package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +0 -1
  407. package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +0 -1
  408. package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +0 -1
  409. package/dist/web/standalone/.next/static/chunks/8336.31b019697882acfb.js +0 -10
  410. package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +0 -2
  411. package/dist/web/standalone/.next/static/chunks/9058.01ef3a463bda88f1.js +0 -20
  412. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
  413. package/dist/web/standalone/.next/static/chunks/app/page-9bf2e0c50fb2ca05.js +0 -1
  414. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  415. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  416. package/dist/web/standalone/.next/static/chunks/webpack-f9f0dc45e4f3ac10.js +0 -1
  417. package/dist/worktree-status-banner.d.ts +0 -1
  418. package/dist/worktree-status-banner.js +0 -132
  419. package/packages/mcp-server/dist/alias-telemetry.d.ts +0 -8
  420. package/packages/mcp-server/dist/alias-telemetry.d.ts.map +0 -1
  421. package/packages/mcp-server/dist/alias-telemetry.js +0 -30
  422. package/packages/mcp-server/dist/alias-telemetry.js.map +0 -1
  423. package/packages/mcp-server/src/alias-telemetry.test.ts +0 -78
  424. package/packages/mcp-server/src/alias-telemetry.ts +0 -30
  425. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +0 -2
  426. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +0 -1
  427. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +0 -231
  428. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +0 -1
  429. package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +0 -289
  430. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +0 -37
  431. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +0 -1
  432. package/packages/pi-coding-agent/dist/core/token-telemetry.js +0 -49
  433. package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +0 -1
  434. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +0 -2
  435. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +0 -1
  436. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +0 -133
  437. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +0 -1
  438. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +0 -2
  439. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +0 -1
  440. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +0 -78
  441. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +0 -1
  442. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +0 -2
  443. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +0 -1
  444. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +0 -181
  445. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +0 -1
  446. package/packages/pi-coding-agent/src/core/token-telemetry.ts +0 -77
  447. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +0 -212
  448. package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +0 -102
  449. package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +0 -200
  450. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +0 -2
  451. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +0 -1
  452. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +0 -161
  453. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +0 -1
  454. package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +0 -219
  455. package/src/resources/extensions/gsd/auto-runtime-state.ts +0 -51
  456. package/src/resources/extensions/gsd/milestone-id-reservation.ts +0 -47
  457. package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +0 -116
  458. package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +0 -100
  459. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +0 -93
  460. package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +0 -47
  461. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +0 -63
  462. package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +0 -81
  463. package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +0 -57
  464. package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +0 -145
  465. package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +0 -124
  466. package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +0 -152
  467. package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +0 -50
  468. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +0 -93
  469. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +0 -101
  470. package/src/resources/extensions/gsd/worktree-session-state.ts +0 -35
  471. package/src/resources/extensions/mcp-client/tests/global-config.test.ts +0 -91
  472. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +0 -58
  473. /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_buildManifest.js +0 -0
  474. /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_ssgManifest.js +0 -0
@@ -193,8 +193,6 @@ export class AutoSession {
193
193
  lastPromptCharCount: number | undefined;
194
194
  lastBaselineCharCount: number | undefined;
195
195
  pendingQuickTasks: CaptureEntry[] = [];
196
- /** Timestamp of the last LLM request dispatch (ms since epoch). Used for proactive rate limiting. */
197
- lastRequestTimestamp = 0;
198
196
 
199
197
  // ── Safety harness ───────────────────────────────────────────────────────
200
198
  /** SHA of the pre-unit git checkpoint ref. Cleared on success or rollback. */
@@ -296,7 +294,6 @@ export class AutoSession {
296
294
  this.lastPromptCharCount = undefined;
297
295
  this.lastBaselineCharCount = undefined;
298
296
  this.pendingQuickTasks = [];
299
- this.lastRequestTimestamp = 0;
300
297
  this.sidecarQueue = [];
301
298
  this.rewriteAttemptCount = 0;
302
299
  this.consecutiveCompleteBootstraps = 0;
@@ -66,7 +66,6 @@ export interface UnitResult {
66
66
  status: "completed" | "cancelled" | "error";
67
67
  event?: AgentEndEvent;
68
68
  errorContext?: ErrorContext;
69
- requestDispatchedAt?: number;
70
69
  }
71
70
 
72
71
  // ─── Phase pipeline types ────────────────────────────────────────────────────
@@ -9,7 +9,6 @@
9
9
 
10
10
  import type { ExtensionContext } from "@gsd/pi-coding-agent";
11
11
  import { parseUnitId } from "./unit-id.js";
12
- import { MILESTONE_ID_RE } from "./milestone-ids.js";
13
12
  import { appendEvent } from "./workflow-events.js";
14
13
  import { atomicWriteSync } from "./atomic-write.js";
15
14
  import { clearParseCache } from "./files.js";
@@ -214,40 +213,13 @@ function getChangedFilesSinceBranch(basePath: string, targetBranch: string): { o
214
213
  function getChangedFilesFromMilestoneTaggedCommits(
215
214
  basePath: string,
216
215
  milestoneId: string,
217
- ): { ok: boolean; matched: boolean; files: string[] } {
218
- // Primary: path-scoped log against .gsd/milestones/<id>. Fast and unbounded
219
- // by depth when .gsd/ is tracked in git.
220
- const scoped = scanGsdTaggedCommits(basePath, milestoneId, [
221
- "log", "--format=%H%x1f%B%x1e", "HEAD", "--", `.gsd/milestones/${milestoneId}`,
222
- ]);
223
- if (!scoped.ok) return scoped;
224
- if (scoped.matched) return scoped;
225
-
226
- // Fallback (#5033): when .gsd/ is gitignored / external / untracked, the
227
- // path-scoped scan matches no commits even though GSD-tagged commits
228
- // referencing the milestone exist on the integration branch. Re-scan all
229
- // of HEAD's history and rely on commitMatchesMilestone to bind by
230
- // explicit milestone mention in the message body.
231
- //
232
- // Intentionally unbounded — symmetric with the primary scan, and avoids
233
- // reintroducing the rolling-depth failure class removed in #4699 where
234
- // milestone evidence aged out behind unrelated activity.
235
- return scanGsdTaggedCommits(basePath, milestoneId, [
236
- "log", "--format=%H%x1f%B%x1e", "HEAD",
237
- ]);
238
- }
239
-
240
- function scanGsdTaggedCommits(
241
- basePath: string,
242
- milestoneId: string,
243
- gitArgs: readonly string[],
244
216
  ): { ok: boolean; matched: boolean; files: string[] } {
245
217
  try {
246
- const logOutput = execFileSync("git", [...gitArgs], {
247
- cwd: basePath,
248
- stdio: ["ignore", "pipe", "pipe"],
249
- encoding: "utf-8",
250
- });
218
+ const logOutput = execFileSync(
219
+ "git",
220
+ ["log", "--format=%H%x1f%B%x1e", "HEAD", "--", `.gsd/milestones/${milestoneId}`],
221
+ { cwd: basePath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
222
+ );
251
223
  const records = logOutput
252
224
  .split("\x1e")
253
225
  .map((record) => record.trim())
@@ -298,25 +270,15 @@ function commitMatchesMilestone(message: string, milestoneId: string, files: rea
298
270
  if (commitTrailerStartsWithMilestone(message, milestoneId)) return true;
299
271
 
300
272
  // Meaningful execute-task commits currently store task scope as Sxx/Tyy
301
- // rather than Mxx/Sxx/Tyy. Bind those commits back to the milestone when
302
- // either the commit touched this milestone's artifacts, or — for projects
303
- // where .gsd/ is gitignored/external (#5033) — the message explicitly
304
- // names the milestone.
273
+ // rather than Mxx/Sxx/Tyy. Bind those commits back to the milestone only
274
+ // when the commit also touched this milestone's artifacts.
305
275
  if (/^GSD-Task:\s*S[^/\s]+\/T\S+/m.test(message)) {
306
- if (files.some((file) => isMilestoneArtifactPath(file, milestoneId))) return true;
307
- if (commitMessageMentionsMilestone(message, milestoneId)) return true;
276
+ return files.some((file) => isMilestoneArtifactPath(file, milestoneId));
308
277
  }
309
278
 
310
279
  return false;
311
280
  }
312
281
 
313
- function commitMessageMentionsMilestone(message: string, milestoneId: string): boolean {
314
- if (!MILESTONE_ID_RE.test(milestoneId)) return false;
315
-
316
- const escapedMilestone = milestoneId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
317
- return new RegExp(`\\b${escapedMilestone}\\b`).test(message);
318
- }
319
-
320
282
  function commitTrailerStartsWithMilestone(message: string, milestoneId: string): boolean {
321
283
  const escapedMilestone = milestoneId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
322
284
  const trailerPattern = new RegExp(
@@ -315,7 +315,7 @@ export function auditOrphanedMilestoneBranches(
315
315
  // Branch is NOT merged — preserve for safety, warn the user
316
316
  warnings.push(
317
317
  `Branch ${branch} exists for completed milestone ${milestoneId} but is NOT merged into ${mainBranch}. ` +
318
- `This may contain unmerged work. Merge manually or run \`/gsd doctor fix\` to resolve.`,
318
+ `This may contain unmerged work. Merge manually or run \`/gsd health --fix\` to resolve.`,
319
319
  );
320
320
 
321
321
  // #4764 telemetry
@@ -151,6 +151,8 @@ export const DETERMINISTIC_POLICY_ERROR_STRINGS = [
151
151
  */
152
152
  export function isDeterministicPolicyError(errorMsg: string): boolean {
153
153
  if (!errorMsg) return false;
154
- return DETERMINISTIC_POLICY_ERROR_RE.test(errorMsg)
155
- || DETERMINISTIC_POLICY_ERROR_STRINGS.some(s => errorMsg.includes(s));
154
+ return (
155
+ DETERMINISTIC_POLICY_ERROR_RE.test(errorMsg) ||
156
+ DETERMINISTIC_POLICY_ERROR_STRINGS.some(s => errorMsg.includes(s))
157
+ );
156
158
  }
@@ -990,12 +990,6 @@ export function autoWorktreeBranch(milestoneId: string): string {
990
990
  return `milestone/${milestoneId}`;
991
991
  }
992
992
 
993
- function normalizeLocalBranchRef(branch: string): string {
994
- return branch.startsWith("refs/heads/")
995
- ? branch.slice("refs/heads/".length)
996
- : branch;
997
- }
998
-
999
993
  // ─── Branch-mode Entry ─────────────────────────────────────────────────────
1000
994
 
1001
995
  /**
@@ -1202,16 +1196,6 @@ export function createAutoWorktree(
1202
1196
  basePath: string,
1203
1197
  milestoneId: string,
1204
1198
  ): string {
1205
- // Check if repo has commits — git worktree requires a valid HEAD
1206
- try {
1207
- execFileSync("git", ["rev-parse", "--verify", "HEAD"], { cwd: basePath, stdio: "pipe" });
1208
- } catch {
1209
- throw new GSDError(
1210
- GSD_GIT_ERROR,
1211
- `Cannot create worktree: repository has no commits yet. Worktree isolation requires at least one commit.`,
1212
- );
1213
- }
1214
-
1215
1199
  const branch = autoWorktreeBranch(milestoneId);
1216
1200
 
1217
1201
  // Check if the milestone branch already exists — it survives auto-mode
@@ -1652,10 +1636,6 @@ export function mergeMilestoneToMain(
1652
1636
  }
1653
1637
 
1654
1638
  // 3. chdir to original base
1655
- // Note: previousCwd captures the cwd at this point — i.e. the worktree cwd
1656
- // entering the function. Subsequent throws restore to previousCwd, leaving
1657
- // the caller in worktree-cwd; callers (worktree-resolver) are responsible
1658
- // for any further cwd movement on the error path.
1659
1639
  const previousCwd = process.cwd();
1660
1640
  process.chdir(originalBasePath_);
1661
1641
 
@@ -1676,24 +1656,6 @@ export function mergeMilestoneToMain(
1676
1656
  const mainBranch =
1677
1657
  integrationBranch ?? validatedPrefBranch ?? nativeDetectMainBranch(originalBasePath_);
1678
1658
 
1679
- // Fail closed when the resolved integration branch is the milestone branch
1680
- // itself (#5024). Stale or corrupt metadata (e.g. integrationBranch recorded
1681
- // as "milestone/<MID>") would otherwise let the squash merge resolve to a
1682
- // self-merge: nothing-to-commit + empty self-diff in the post-merge safety
1683
- // check (#1792) collapse to a false success, and the worktree-resolver
1684
- // emits worktree-merged for work that never landed on a distinct
1685
- // integration branch.
1686
- if (normalizeLocalBranchRef(mainBranch) === milestoneBranch) {
1687
- process.chdir(previousCwd);
1688
- throw new GSDError(
1689
- GSD_GIT_ERROR,
1690
- `Resolved integration branch "${mainBranch}" is the same ref as milestone branch ` +
1691
- `"${milestoneBranch}" — refusing to self-merge. Integration branch metadata is invalid; ` +
1692
- `set a distinct main_branch in GSD preferences or repair the milestone integration record ` +
1693
- `before retrying milestone completion.`,
1694
- );
1695
- }
1696
-
1697
1659
  // Remove transient project-root state files before any branch or merge
1698
1660
  // operation. Untracked milestone metadata can otherwise block squash merges.
1699
1661
  clearProjectRootStateFiles(originalBasePath_, milestoneId);
@@ -232,6 +232,7 @@ import { reorderForCaching } from "./prompt-ordering.js";
232
232
  // ─── Session State ─────────────────────────────────────────────────────────
233
233
 
234
234
  import {
235
+ AutoSession,
235
236
  STUB_RECOVERY_THRESHOLD,
236
237
  NEW_SESSION_TIMEOUT_MS,
237
238
  } from "./auto/session.js";
@@ -249,12 +250,11 @@ export type {
249
250
  UnitRouting,
250
251
  StartModel,
251
252
  } from "./auto/session.js";
252
- import { autoSession as s } from "./auto-runtime-state.js";
253
253
 
254
254
  // ── ENCAPSULATION INVARIANT ─────────────────────────────────────────────────
255
255
  // ALL mutable auto-mode state lives in the AutoSession class (auto/session.ts).
256
256
  // This file must NOT declare module-level `let` or `var` variables for state.
257
- // The single shared `s` instance below is the only mutable AutoSession binding.
257
+ // The single `s` instance below is the only mutable module-level binding.
258
258
  //
259
259
  // When adding features or fixing bugs:
260
260
  // - New mutable state → add a property to AutoSession, not a module-level variable
@@ -263,6 +263,7 @@ import { autoSession as s } from "./auto-runtime-state.js";
263
263
  //
264
264
  // Tests in auto-session-encapsulation.test.ts enforce this invariant.
265
265
  // ─────────────────────────────────────────────────────────────────────────────
266
+ const s = new AutoSession();
266
267
 
267
268
  /** Throttle STATE.md rebuilds — at most once per 30 seconds */
268
269
  const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
@@ -1811,7 +1812,7 @@ const widgetStateAccessors: WidgetStateAccessors = {
1811
1812
  * Ensure directories, branches, and other prerequisites exist before
1812
1813
  * dispatching a unit. The LLM should never need to mkdir or git checkout.
1813
1814
  */
1814
- export function ensurePreconditions(
1815
+ function ensurePreconditions(
1815
1816
  unitType: string,
1816
1817
  unitId: string,
1817
1818
  base: string,
@@ -1821,17 +1822,6 @@ export function ensurePreconditions(
1821
1822
 
1822
1823
  const mDir = resolveMilestonePath(base, mid);
1823
1824
  if (!mDir) {
1824
- // Fix #4996: When dispatching a slice unit against an unrecognised milestone,
1825
- // only create the directory if the milestone has a DB row.
1826
- // Without this guard, forward-referenced unit IDs (e.g. from REQUIREMENTS.md)
1827
- // silently scaffold empty stub directories that later skew nextMilestoneId.
1828
- if (sid !== undefined) {
1829
- const hasDbRow = isDbAvailable() && getMilestone(mid) != null;
1830
- if (!hasDbRow) {
1831
- logWarning("engine", `ensurePreconditions: skipping mkdir for unrecognised milestone ${mid} referenced by slice unit ${unitId} — no DB row exists`, { file: "auto.ts" });
1832
- return;
1833
- }
1834
- }
1835
1825
  const newDir = join(milestonesDir(base), mid);
1836
1826
  mkdirSync(join(newDir, "slices"), { recursive: true });
1837
1827
  }
@@ -2,15 +2,24 @@ import { Type } from "@sinclair/typebox";
2
2
  import type { ExtensionAPI } from "@gsd/pi-coding-agent";
3
3
  import { Text } from "@gsd/pi-tui";
4
4
 
5
+ import { findMilestoneIds, nextMilestoneId, claimReservedId, getReservedMilestoneIds } from "../guided-flow.js";
5
6
  import { loadEffectiveGSDPreferences } from "../preferences.js";
6
7
  import { ensureDbOpen } from "./dynamic-tools.js";
7
8
  import { StringEnum } from "@gsd/pi-ai";
8
9
  import { logError } from "../workflow-logger.js";
9
10
  import { getErrorMessage } from "../error-utils.js";
10
-
11
- async function loadWorkflowExecutors(): Promise<typeof import("../tools/workflow-tool-executors.js")> {
12
- return import("../tools/workflow-tool-executors.js");
13
- }
11
+ import {
12
+ executeCompleteMilestone,
13
+ executePlanMilestone,
14
+ executePlanSlice,
15
+ executeReplanSlice,
16
+ executeReassessRoadmap,
17
+ executeSaveGateResult,
18
+ executeSliceComplete,
19
+ executeSummarySave,
20
+ executeTaskComplete,
21
+ executeValidateMilestone,
22
+ } from "../tools/workflow-tool-executors.js";
14
23
 
15
24
  /**
16
25
  * Register an alias tool that shares the same execute function as its canonical counterpart.
@@ -293,7 +302,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
293
302
  // ─── gsd_summary_save (formerly gsd_save_summary) ──────────────────────
294
303
 
295
304
  const summarySaveExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
296
- const { executeSummarySave } = await loadWorkflowExecutors();
297
305
  return executeSummarySave(params, process.cwd());
298
306
  };
299
307
 
@@ -346,7 +354,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
346
354
  try {
347
355
  // Claim a reserved ID if the guided-flow already previewed one to the user.
348
356
  // This guarantees the ID shown in the UI matches the one materialised on disk.
349
- const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId } = await import("../guided-flow.js");
350
357
  const reserved = claimReservedId();
351
358
  if (reserved) {
352
359
  await ensureMilestoneDbRow(reserved);
@@ -428,7 +435,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
428
435
  // ─── gsd_plan_milestone (gsd_milestone_plan alias) ─────────────────────
429
436
 
430
437
  const planMilestoneExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
431
- const { executePlanMilestone } = await loadWorkflowExecutors();
432
438
  return executePlanMilestone(params, process.cwd());
433
439
  };
434
440
 
@@ -498,7 +504,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
498
504
  // ─── gsd_plan_slice (gsd_slice_plan alias) ─────────────────────────────
499
505
 
500
506
  const planSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
501
- const { executePlanSlice } = await loadWorkflowExecutors();
502
507
  return executePlanSlice(params, process.cwd());
503
508
  };
504
509
 
@@ -621,7 +626,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
621
626
  // ─── gsd_task_complete (gsd_complete_task alias) ────────────────────────
622
627
 
623
628
  const taskCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
624
- const { executeTaskComplete } = await loadWorkflowExecutors();
625
629
  return executeTaskComplete(params, process.cwd());
626
630
  };
627
631
 
@@ -692,7 +696,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
692
696
  // ─── gsd_slice_complete (gsd_complete_slice alias) ─────────────────────
693
697
 
694
698
  const sliceCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
695
- const { executeSliceComplete } = await loadWorkflowExecutors();
696
699
  return executeSliceComplete(params, process.cwd());
697
700
  };
698
701
 
@@ -885,7 +888,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
885
888
  // ─── gsd_complete_milestone ────────────────────────────────────────────
886
889
 
887
890
  const milestoneCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
888
- const { executeCompleteMilestone } = await loadWorkflowExecutors();
889
891
  return executeCompleteMilestone(params, process.cwd());
890
892
  };
891
893
 
@@ -931,7 +933,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
931
933
  // ─── gsd_validate_milestone (gsd_milestone_validate alias) ─────────────
932
934
 
933
935
  const milestoneValidateExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
934
- const { executeValidateMilestone } = await loadWorkflowExecutors();
935
936
  return executeValidateMilestone(params, process.cwd());
936
937
  };
937
938
 
@@ -969,7 +970,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
969
970
  // ─── gsd_replan_slice (gsd_slice_replan alias) ─────────────────────────
970
971
 
971
972
  const replanSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
972
- const { executeReplanSlice } = await loadWorkflowExecutors();
973
973
  return executeReplanSlice(params, process.cwd());
974
974
  };
975
975
 
@@ -1020,7 +1020,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
1020
1020
  // ─── gsd_reassess_roadmap (gsd_roadmap_reassess alias) ─────────────────
1021
1021
 
1022
1022
  const reassessRoadmapExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
1023
- const { executeReassessRoadmap } = await loadWorkflowExecutors();
1024
1023
  return executeReassessRoadmap(params, process.cwd());
1025
1024
  };
1026
1025
 
@@ -1276,7 +1275,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
1276
1275
  // ─── gsd_save_gate_result ──────────────────────────────────────────────
1277
1276
 
1278
1277
  const saveGateResultExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
1279
- const { executeSaveGateResult } = await loadWorkflowExecutors();
1280
1278
  return executeSaveGateResult(params, process.cwd());
1281
1279
  };
1282
1280
 
@@ -6,6 +6,12 @@
6
6
  import { Type } from "@sinclair/typebox";
7
7
  import type { ExtensionAPI } from "@gsd/pi-coding-agent";
8
8
 
9
+ import { executeGsdExec } from "../tools/exec-tool.js";
10
+ import { executeExecSearch } from "../tools/exec-search-tool.js";
11
+ import { executeResume } from "../tools/resume-tool.js";
12
+ import { loadEffectiveGSDPreferences } from "../preferences.js";
13
+ import { logWarning } from "../workflow-logger.js";
14
+
9
15
  export function registerExecTools(pi: ExtensionAPI): void {
10
16
  pi.registerTool({
11
17
  name: "gsd_exec",
@@ -40,12 +46,7 @@ export function registerExecTools(pi: ExtensionAPI): void {
40
46
  ),
41
47
  }),
42
48
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
43
- const [{ executeGsdExec }, { loadEffectiveGSDPreferences }, { logWarning }] = await Promise.all([
44
- import("../tools/exec-tool.js"),
45
- import("../preferences.js"),
46
- import("../workflow-logger.js"),
47
- ]);
48
- let prefs: ReturnType<typeof loadEffectiveGSDPreferences> | null = null;
49
+ let prefs: Awaited<ReturnType<typeof loadEffectiveGSDPreferences>> | null = null;
49
50
  try {
50
51
  prefs = loadEffectiveGSDPreferences();
51
52
  } catch (err) {
@@ -80,7 +81,6 @@ export function registerExecTools(pi: ExtensionAPI): void {
80
81
  limit: Type.Optional(Type.Number({ description: "Max results (default 20, cap 200)", minimum: 1, maximum: 200 })),
81
82
  }),
82
83
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
83
- const { executeExecSearch } = await import("../tools/exec-search-tool.js");
84
84
  return executeExecSearch(params as Parameters<typeof executeExecSearch>[0], {
85
85
  baseDir: process.cwd(),
86
86
  });
@@ -101,7 +101,6 @@ export function registerExecTools(pi: ExtensionAPI): void {
101
101
  ],
102
102
  parameters: Type.Object({}),
103
103
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
104
- const { executeResume } = await import("../tools/resume-tool.js");
105
104
  return executeResume(params as Parameters<typeof executeResume>[0], {
106
105
  baseDir: process.cwd(),
107
106
  });
@@ -3,6 +3,8 @@
3
3
  import { Type } from "@sinclair/typebox";
4
4
  import type { ExtensionAPI } from "@gsd/pi-coding-agent";
5
5
  import { ensureDbOpen } from "./dynamic-tools.js";
6
+ import { executeMilestoneStatus } from "../tools/workflow-tool-executors.js";
7
+ import { checkpointDatabase } from "../gsd-db.js";
6
8
 
7
9
  export function registerQueryTools(pi: ExtensionAPI): void {
8
10
  pi.registerTool({
@@ -27,7 +29,6 @@ export function registerQueryTools(pi: ExtensionAPI): void {
27
29
  details: { operation: "milestone_status", error: "db_unavailable" },
28
30
  };
29
31
  }
30
- const { executeMilestoneStatus } = await import("../tools/workflow-tool-executors.js");
31
32
  return executeMilestoneStatus(params);
32
33
  },
33
34
  });
@@ -54,7 +55,6 @@ export function registerQueryTools(pi: ExtensionAPI): void {
54
55
  details: { operation: "checkpoint_db", error: "db_unavailable" },
55
56
  };
56
57
  }
57
- const { checkpointDatabase } = await import("../gsd-db.js");
58
58
  checkpointDatabase();
59
59
  return {
60
60
  content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
@@ -3,8 +3,9 @@
3
3
  import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
4
4
 
5
5
  import { registerExitCommand } from "../exit-command.js";
6
- import { registerLazyWorktreeCommands } from "../worktree-command-bootstrap.js";
6
+ import { registerWorktreeCommand } from "../worktree-command.js";
7
7
  import type { GSDEcosystemBeforeAgentStartHandler } from "../ecosystem/gsd-extension-api.js";
8
+ import { loadEcosystemExtensions } from "../ecosystem/loader.js";
8
9
  import { registerDbTools } from "./db-tools.js";
9
10
  import { registerDynamicTools } from "./dynamic-tools.js";
10
11
  import { registerExecTools } from "./exec-tools.js";
@@ -70,7 +71,7 @@ function installEpipeGuard(): void {
70
71
  export function registerGsdExtension(pi: ExtensionAPI): void {
71
72
  // Note: registerGSDCommand is called by index.ts before this function,
72
73
  // so we intentionally skip it here to avoid double-registration.
73
- registerLazyWorktreeCommands(pi);
74
+ registerWorktreeCommand(pi);
74
75
  registerExitCommand(pi);
75
76
 
76
77
  // Wire the Layer 2 event emitter bridge so deeply-nested GSD code can emit
@@ -115,14 +116,12 @@ export function registerGsdExtension(pi: ExtensionAPI): void {
115
116
  ["cmux-events", () => initCmuxEventListeners(pi.events)],
116
117
  ["hooks", () => registerHooks(pi, ecosystemHandlers)],
117
118
  ["ecosystem", () => {
118
- void import("../ecosystem/loader.js")
119
- .then(({ loadEcosystemExtensions }) => loadEcosystemExtensions(pi, ecosystemHandlers))
120
- .catch((err) => {
121
- logWarning(
122
- "ecosystem",
123
- `loader failed: ${err instanceof Error ? err.message : String(err)}`,
124
- );
125
- });
119
+ void loadEcosystemExtensions(pi, ecosystemHandlers).catch((err) => {
120
+ logWarning(
121
+ "ecosystem",
122
+ `loader failed: ${err instanceof Error ? err.message : String(err)}`,
123
+ );
124
+ });
126
125
  }],
127
126
  ];
128
127