gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c

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 (628) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +35 -49
  3. package/dist/headless-ui.d.ts +0 -17
  4. package/dist/headless-ui.js +3 -97
  5. package/dist/headless.js +6 -67
  6. package/dist/help-text.js +0 -1
  7. package/dist/onboarding.js +0 -44
  8. package/dist/resource-loader.js +1 -16
  9. package/dist/resources/agents/researcher.md +1 -1
  10. package/dist/resources/extensions/ask-user-questions.js +3 -16
  11. package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
  12. package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
  13. package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
  14. package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
  15. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
  16. package/dist/resources/extensions/context7/extension-manifest.json +1 -1
  17. package/dist/resources/extensions/get-secrets-from-user.js +5 -8
  18. package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
  19. package/dist/resources/extensions/google-search/index.js +1 -2
  20. package/dist/resources/extensions/gsd/auto/phases.js +21 -25
  21. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  22. package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
  23. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
  26. package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
  27. package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
  28. package/dist/resources/extensions/gsd/auto-start.js +22 -35
  29. package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
  30. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
  33. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
  34. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
  36. package/dist/resources/extensions/gsd/captures.js +4 -56
  37. package/dist/resources/extensions/gsd/db-writer.js +8 -116
  38. package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
  39. package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
  40. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
  41. package/dist/resources/extensions/gsd/doctor.js +1 -3
  42. package/dist/resources/extensions/gsd/error-classifier.js +10 -13
  43. package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
  44. package/dist/resources/extensions/gsd/forensics.js +20 -123
  45. package/dist/resources/extensions/gsd/git-service.js +1 -23
  46. package/dist/resources/extensions/gsd/gitignore.js +0 -33
  47. package/dist/resources/extensions/gsd/gsd-db.js +9 -36
  48. package/dist/resources/extensions/gsd/guided-flow.js +44 -106
  49. package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
  50. package/dist/resources/extensions/gsd/health-widget.js +0 -17
  51. package/dist/resources/extensions/gsd/index.js +1 -1
  52. package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
  53. package/dist/resources/extensions/gsd/migrate-external.js +1 -8
  54. package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
  55. package/dist/resources/extensions/gsd/model-router.js +1 -35
  56. package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
  57. package/dist/resources/extensions/gsd/notifications.js +1 -16
  58. package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
  59. package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
  60. package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
  61. package/dist/resources/extensions/gsd/paths.js +0 -43
  62. package/dist/resources/extensions/gsd/preferences-models.js +1 -14
  63. package/dist/resources/extensions/gsd/preferences-types.js +1 -2
  64. package/dist/resources/extensions/gsd/preferences.js +16 -13
  65. package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
  66. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  67. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  68. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  69. package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
  70. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
  71. package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
  72. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  73. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  74. package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  75. package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
  76. package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  77. package/dist/resources/extensions/gsd/repo-identity.js +11 -205
  78. package/dist/resources/extensions/gsd/rethink.js +0 -5
  79. package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
  80. package/dist/resources/extensions/gsd/state.js +27 -85
  81. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  82. package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
  83. package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
  84. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
  85. package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
  86. package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
  87. package/dist/resources/extensions/gsd/undo.js +2 -2
  88. package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
  89. package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
  90. package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
  91. package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
  92. package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
  93. package/dist/resources/extensions/gsd/workspace-index.js +0 -24
  94. package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
  95. package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
  96. package/dist/resources/extensions/mcp-client/index.js +7 -11
  97. package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
  98. package/dist/resources/extensions/shared/interview-ui.js +1 -11
  99. package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
  100. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  101. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  102. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  103. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  104. package/dist/web/standalone/.next/BUILD_ID +1 -1
  105. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  106. package/dist/web/standalone/.next/build-manifest.json +3 -3
  107. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  108. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  109. package/dist/web/standalone/.next/required-server-files.json +1 -1
  110. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  112. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  121. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  128. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/index.html +1 -1
  183. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  184. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  186. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  187. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  188. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  189. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  191. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  192. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  195. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  196. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  197. package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
  198. package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
  199. package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
  200. package/dist/web/standalone/server.js +1 -1
  201. package/dist/web-mode.js +1 -2
  202. package/package.json +2 -2
  203. package/packages/native/dist/ast/index.js +5 -9
  204. package/packages/native/dist/ast/types.js +1 -2
  205. package/packages/native/dist/clipboard/index.js +7 -12
  206. package/packages/native/dist/clipboard/types.js +1 -2
  207. package/packages/native/dist/diff/index.js +7 -12
  208. package/packages/native/dist/diff/types.js +1 -2
  209. package/packages/native/dist/fd/index.js +3 -6
  210. package/packages/native/dist/fd/types.js +1 -2
  211. package/packages/native/dist/glob/index.js +5 -9
  212. package/packages/native/dist/glob/types.js +1 -2
  213. package/packages/native/dist/grep/index.js +5 -9
  214. package/packages/native/dist/grep/types.js +1 -2
  215. package/packages/native/dist/gsd-parser/index.js +11 -18
  216. package/packages/native/dist/gsd-parser/types.js +1 -2
  217. package/packages/native/dist/highlight/index.js +7 -12
  218. package/packages/native/dist/highlight/types.js +1 -2
  219. package/packages/native/dist/html/index.js +3 -6
  220. package/packages/native/dist/html/types.js +1 -2
  221. package/packages/native/dist/image/index.js +5 -10
  222. package/packages/native/dist/image/types.js +4 -7
  223. package/packages/native/dist/index.js +17 -70
  224. package/packages/native/dist/json-parse/index.js +8 -13
  225. package/packages/native/dist/native.js +10 -47
  226. package/packages/native/dist/ps/index.js +9 -15
  227. package/packages/native/dist/ps/types.js +1 -2
  228. package/packages/native/dist/stream-process/index.js +7 -12
  229. package/packages/native/dist/text/index.js +14 -24
  230. package/packages/native/dist/text/types.js +2 -5
  231. package/packages/native/dist/truncate/index.js +7 -12
  232. package/packages/native/dist/ttsr/index.js +7 -12
  233. package/packages/native/dist/ttsr/types.js +1 -2
  234. package/packages/native/dist/xxhash/index.js +5 -9
  235. package/packages/native/package.json +19 -19
  236. package/packages/native/src/native.ts +8 -9
  237. package/packages/pi-agent-core/dist/agent-loop.js +2 -3
  238. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  239. package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
  240. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  241. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  242. package/packages/pi-agent-core/src/agent-loop.ts +2 -3
  243. package/packages/pi-agent-core/src/proxy.ts +1 -1
  244. package/packages/pi-ai/dist/env-api-keys.js +0 -1
  245. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  246. package/packages/pi-ai/dist/index.d.ts +0 -1
  247. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  248. package/packages/pi-ai/dist/index.js +0 -1
  249. package/packages/pi-ai/dist/index.js.map +1 -1
  250. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  251. package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
  252. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  253. package/packages/pi-ai/dist/types.d.ts +3 -3
  254. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  255. package/packages/pi-ai/dist/types.js.map +1 -1
  256. package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
  257. package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  258. package/packages/pi-ai/dist/utils/json-parse.js +1 -24
  259. package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
  260. package/packages/pi-ai/src/env-api-keys.ts +0 -1
  261. package/packages/pi-ai/src/index.ts +0 -1
  262. package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
  263. package/packages/pi-ai/src/types.ts +2 -3
  264. package/packages/pi-ai/src/utils/json-parse.ts +1 -28
  265. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
  266. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
  268. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
  270. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
  272. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/exec.js +1 -3
  275. package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
  277. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
  279. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
  281. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
  283. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
  285. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/index.js +1 -1
  287. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
  290. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  291. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
  293. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/messages.js +2 -31
  296. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
  299. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
  301. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
  303. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
  305. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
  307. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
  310. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
  313. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  315. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/index.js +1 -1
  317. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
  322. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
  323. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
  324. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
  325. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
  326. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
  327. package/packages/pi-coding-agent/src/core/exec.ts +1 -3
  328. package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
  329. package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
  330. package/packages/pi-coding-agent/src/core/index.ts +0 -6
  331. package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
  332. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
  333. package/packages/pi-coding-agent/src/core/messages.ts +2 -29
  334. package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
  335. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
  336. package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
  337. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
  338. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
  339. package/packages/pi-coding-agent/src/index.ts +0 -6
  340. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
  341. package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
  342. package/packages/pi-tui/dist/terminal.d.ts +0 -2
  343. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  344. package/packages/pi-tui/dist/terminal.js +0 -9
  345. package/packages/pi-tui/dist/terminal.js.map +1 -1
  346. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  347. package/packages/pi-tui/dist/tui.js +0 -9
  348. package/packages/pi-tui/dist/tui.js.map +1 -1
  349. package/packages/pi-tui/src/terminal.ts +0 -14
  350. package/packages/pi-tui/src/tui.ts +0 -8
  351. package/scripts/ensure-workspace-builds.cjs +14 -45
  352. package/src/resources/agents/researcher.md +1 -1
  353. package/src/resources/extensions/ask-user-questions.ts +3 -21
  354. package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
  355. package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
  356. package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
  357. package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
  358. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
  359. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
  360. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
  361. package/src/resources/extensions/context7/extension-manifest.json +1 -1
  362. package/src/resources/extensions/get-secrets-from-user.ts +5 -8
  363. package/src/resources/extensions/google-search/extension-manifest.json +1 -1
  364. package/src/resources/extensions/google-search/index.ts +1 -2
  365. package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
  366. package/src/resources/extensions/gsd/auto/phases.ts +34 -43
  367. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  368. package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
  369. package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
  370. package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
  371. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
  372. package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
  373. package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
  374. package/src/resources/extensions/gsd/auto-start.ts +26 -35
  375. package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
  376. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
  377. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
  378. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
  379. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
  380. package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
  381. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
  382. package/src/resources/extensions/gsd/captures.ts +3 -63
  383. package/src/resources/extensions/gsd/db-writer.ts +7 -140
  384. package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
  385. package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
  386. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
  387. package/src/resources/extensions/gsd/doctor.ts +1 -3
  388. package/src/resources/extensions/gsd/error-classifier.ts +11 -14
  389. package/src/resources/extensions/gsd/extension-manifest.json +1 -16
  390. package/src/resources/extensions/gsd/forensics.ts +20 -144
  391. package/src/resources/extensions/gsd/git-service.ts +3 -26
  392. package/src/resources/extensions/gsd/gitignore.ts +0 -33
  393. package/src/resources/extensions/gsd/gsd-db.ts +7 -43
  394. package/src/resources/extensions/gsd/guided-flow.ts +45 -114
  395. package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
  396. package/src/resources/extensions/gsd/health-widget.ts +0 -17
  397. package/src/resources/extensions/gsd/index.ts +0 -1
  398. package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
  399. package/src/resources/extensions/gsd/migrate-external.ts +1 -9
  400. package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
  401. package/src/resources/extensions/gsd/model-router.ts +1 -35
  402. package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
  403. package/src/resources/extensions/gsd/notifications.ts +0 -16
  404. package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
  405. package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
  406. package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
  407. package/src/resources/extensions/gsd/paths.ts +0 -42
  408. package/src/resources/extensions/gsd/preferences-models.ts +1 -14
  409. package/src/resources/extensions/gsd/preferences-types.ts +1 -2
  410. package/src/resources/extensions/gsd/preferences.ts +15 -13
  411. package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
  412. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  413. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  414. package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  415. package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
  416. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
  417. package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
  418. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  419. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  420. package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  421. package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
  422. package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  423. package/src/resources/extensions/gsd/repo-identity.ts +11 -186
  424. package/src/resources/extensions/gsd/rethink.ts +0 -6
  425. package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
  426. package/src/resources/extensions/gsd/state.ts +32 -84
  427. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
  428. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
  429. package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
  430. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
  431. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
  432. package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
  433. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
  434. package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
  435. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
  436. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  437. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
  438. package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
  439. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
  440. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
  441. package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
  442. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
  443. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
  444. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
  445. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
  446. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
  447. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
  448. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
  449. package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
  450. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
  451. package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
  452. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
  453. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
  454. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
  455. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
  456. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
  457. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
  458. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
  459. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
  460. package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
  461. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
  462. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
  463. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
  464. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
  465. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
  466. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
  467. package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
  468. package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
  469. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
  470. package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
  471. package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
  472. package/src/resources/extensions/gsd/types.ts +2 -4
  473. package/src/resources/extensions/gsd/undo.ts +2 -2
  474. package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
  475. package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
  476. package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
  477. package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
  478. package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
  479. package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
  480. package/src/resources/extensions/gsd/workspace-index.ts +0 -30
  481. package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
  482. package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
  483. package/src/resources/extensions/mcp-client/index.ts +7 -13
  484. package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
  485. package/src/resources/extensions/shared/interview-ui.ts +1 -12
  486. package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
  487. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  488. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  489. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  490. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  491. package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
  492. package/dist/resources/extensions/ollama/index.js +0 -112
  493. package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
  494. package/dist/resources/extensions/ollama/ollama-client.js +0 -168
  495. package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
  496. package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
  497. package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
  498. package/dist/resources/extensions/ollama/types.js +0 -2
  499. package/dist/startup-model-validation.d.ts +0 -39
  500. package/dist/startup-model-validation.js +0 -50
  501. package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
  502. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  503. package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
  504. package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
  505. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
  506. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
  507. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
  508. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
  509. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
  510. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
  511. package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
  512. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
  513. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
  514. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
  515. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
  516. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
  517. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
  518. package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
  519. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
  520. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
  521. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
  522. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
  523. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
  524. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
  525. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
  526. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
  527. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
  528. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
  529. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
  530. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
  531. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
  532. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
  533. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
  534. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
  535. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
  536. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
  537. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
  538. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
  539. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
  540. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
  541. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
  542. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
  543. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
  544. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
  545. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
  546. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
  547. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
  548. package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
  549. package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
  550. package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
  551. package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
  552. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
  553. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
  554. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
  555. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
  556. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
  557. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
  558. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
  559. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
  560. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
  561. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
  562. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
  563. package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
  564. package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
  565. package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
  566. package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
  567. package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
  568. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
  569. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
  570. package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
  571. package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
  572. package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
  573. package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
  574. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
  575. package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
  576. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
  577. package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
  578. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
  579. package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
  580. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
  581. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  582. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
  583. package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
  584. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
  585. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
  586. package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
  587. package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
  588. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
  589. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
  590. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
  591. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
  592. package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
  593. package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
  594. package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
  595. package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
  596. package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
  597. package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
  598. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
  599. package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
  600. package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
  601. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
  602. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
  603. package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
  604. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
  605. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
  606. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
  607. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
  608. package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
  609. package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
  610. package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
  611. package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
  612. package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
  613. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
  614. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
  615. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
  616. package/src/resources/extensions/ollama/index.ts +0 -130
  617. package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
  618. package/src/resources/extensions/ollama/ollama-client.ts +0 -196
  619. package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
  620. package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
  621. package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
  622. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
  623. package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
  624. package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
  625. package/src/resources/extensions/ollama/types.ts +0 -130
  626. package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
  627. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
  628. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
@@ -8,7 +8,6 @@ import { createRequire } from "node:module";
8
8
  import { existsSync, copyFileSync, mkdirSync, realpathSync } from "node:fs";
9
9
  import { dirname } from "node:path";
10
10
  import { GSDError, GSD_STALE_STATE } from "./errors.js";
11
- import { logError } from "./workflow-logger.js";
12
11
  const _require = createRequire(import.meta.url);
13
12
  let providerName = null;
14
13
  let providerModule = null;
@@ -698,29 +697,11 @@ export function openDatabase(path) {
698
697
  initSchema(adapter, fileBacked);
699
698
  }
700
699
  catch (err) {
701
- // Corrupt freelist: DDL fails with "malformed" but VACUUM can rebuild.
702
- // Attempt VACUUM recovery before giving up (see #2519).
703
- if (fileBacked && err instanceof Error && err.message?.includes("malformed")) {
704
- try {
705
- adapter.exec("VACUUM");
706
- initSchema(adapter, fileBacked);
707
- process.stderr.write("gsd-db: recovered corrupt database via VACUUM\n");
708
- }
709
- catch (retryErr) {
710
- try {
711
- adapter.close();
712
- }
713
- catch { /* swallow */ }
714
- throw retryErr;
715
- }
716
- }
717
- else {
718
- try {
719
- adapter.close();
720
- }
721
- catch { /* swallow */ }
722
- throw err;
700
+ try {
701
+ adapter.close();
723
702
  }
703
+ catch { /* swallow */ }
704
+ throw err;
724
705
  }
725
706
  currentDb = adapter;
726
707
  currentPath = path;
@@ -1009,11 +990,10 @@ export function insertMilestone(m) {
1009
990
  ":boundary_map_markdown": m.planning?.boundaryMapMarkdown ?? "",
1010
991
  });
1011
992
  }
1012
- export function upsertMilestonePlanning(milestoneId, planning, title) {
993
+ export function upsertMilestonePlanning(milestoneId, planning) {
1013
994
  if (!currentDb)
1014
995
  throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
1015
996
  currentDb.prepare(`UPDATE milestones SET
1016
- title = COALESCE(:title, title),
1017
997
  vision = COALESCE(:vision, vision),
1018
998
  success_criteria = COALESCE(:success_criteria, success_criteria),
1019
999
  key_risks = COALESCE(:key_risks, key_risks),
@@ -1027,7 +1007,6 @@ export function upsertMilestonePlanning(milestoneId, planning, title) {
1027
1007
  boundary_map_markdown = COALESCE(:boundary_map_markdown, boundary_map_markdown)
1028
1008
  WHERE id = :id`).run({
1029
1009
  ":id": milestoneId,
1030
- ":title": title ?? null,
1031
1010
  ":vision": planning.vision ?? null,
1032
1011
  ":success_criteria": planning.successCriteria ? JSON.stringify(planning.successCriteria) : null,
1033
1012
  ":key_risks": planning.keyRisks ? JSON.stringify(planning.keyRisks) : null,
@@ -1297,12 +1276,6 @@ export function insertVerificationEvidence(e) {
1297
1276
  ":created_at": new Date().toISOString(),
1298
1277
  });
1299
1278
  }
1300
- export function getVerificationEvidence(milestoneId, sliceId, taskId) {
1301
- if (!currentDb)
1302
- return [];
1303
- const rows = currentDb.prepare("SELECT * FROM verification_evidence WHERE milestone_id = :mid AND slice_id = :sid AND task_id = :tid ORDER BY id").all({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
1304
- return rows;
1305
- }
1306
1279
  function rowToMilestone(row) {
1307
1280
  return {
1308
1281
  id: row["id"],
@@ -1474,7 +1447,7 @@ export function copyWorktreeDb(srcDbPath, destDbPath) {
1474
1447
  return true;
1475
1448
  }
1476
1449
  catch (err) {
1477
- logError("db", "failed to copy DB to worktree", { error: err.message });
1450
+ process.stderr.write(`gsd-db: failed to copy DB to worktree: ${err.message}\n`);
1478
1451
  return false;
1479
1452
  }
1480
1453
  }
@@ -1493,13 +1466,13 @@ export function reconcileWorktreeDb(mainDbPath, worktreeDbPath) {
1493
1466
  // ATTACH DATABASE doesn't support parameterized paths in all providers,
1494
1467
  // so we use strict allowlist validation instead.
1495
1468
  if (/['";\x00]/.test(worktreeDbPath)) {
1496
- logError("db", "worktree DB reconciliation failed: path contains unsafe characters");
1469
+ process.stderr.write("gsd-db: worktree DB reconciliation failed: path contains unsafe characters\n");
1497
1470
  return zero;
1498
1471
  }
1499
1472
  if (!currentDb) {
1500
1473
  const opened = openDatabase(mainDbPath);
1501
1474
  if (!opened) {
1502
- logError("db", "worktree DB reconciliation failed: cannot open main DB");
1475
+ process.stderr.write("gsd-db: worktree DB reconciliation failed: cannot open main DB\n");
1503
1476
  return zero;
1504
1477
  }
1505
1478
  }
@@ -1623,7 +1596,7 @@ export function reconcileWorktreeDb(mainDbPath, worktreeDbPath) {
1623
1596
  }
1624
1597
  }
1625
1598
  catch (err) {
1626
- logError("db", "worktree DB reconciliation failed", { error: err.message });
1599
+ process.stderr.write(`gsd-db: worktree DB reconciliation failed: ${err.message}\n`);
1627
1600
  return { ...zero, conflicts };
1628
1601
  }
1629
1602
  }
@@ -8,7 +8,6 @@
8
8
  import { showNextAction } from "../shared/tui.js";
9
9
  import { loadFile } from "./files.js";
10
10
  import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
11
- import { parseRoadmapSlices } from "./roadmap-slices.js";
12
11
  import { loadPrompt, inlineTemplate } from "./prompt-loader.js";
13
12
  import { buildSkillActivationBlock } from "./auto-prompts.js";
14
13
  import { deriveState } from "./state.js";
@@ -32,7 +31,7 @@ import { showConfirm } from "../shared/tui.js";
32
31
  import { debugLog } from "./debug-logger.js";
33
32
  import { findMilestoneIds, nextMilestoneId, reserveMilestoneId, getReservedMilestoneIds, clearReservedMilestoneIds } from "./milestone-ids.js";
34
33
  import { parkMilestone, discardMilestone } from "./milestone-actions.js";
35
- import { selectAndApplyModel } from "./auto-model-selection.js";
34
+ import { resolveModelWithFallbacksForUnit } from "./preferences-models.js";
36
35
  // ─── Re-exports (preserve public API for existing importers) ────────────────
37
36
  export { MILESTONE_ID_RE, generateMilestoneSuffix, nextMilestoneId, extractMilestoneSeq, parseMilestoneId, milestoneIdSort, maxMilestoneNum, findMilestoneIds, reserveMilestoneId, claimReservedId, getReservedMilestoneIds, clearReservedMilestoneIds, } from "./milestone-ids.js";
38
37
  export { showQueue, handleQueueReorder, showQueueAdd, buildExistingMilestonesContext, } from "./guided-flow-queue.js";
@@ -54,61 +53,18 @@ function nextMilestoneIdReserved(existingIds, uniqueEnabled) {
54
53
  function buildDocsCommitInstruction(_message) {
55
54
  return "Do not commit planning artifacts — .gsd/ is managed externally.";
56
55
  }
57
- const pendingAutoStartMap = new Map();
58
- /**
59
- * Backward-compat bridge: returns a mutable reference to the entry matching
60
- * basePath, or the sole entry when only one session exists.
61
- * Internal use only — external code should use the Map directly.
62
- */
63
- function _getPendingAutoStart(basePath) {
64
- if (basePath)
65
- return pendingAutoStartMap.get(basePath) ?? null;
66
- if (pendingAutoStartMap.size === 1)
67
- return pendingAutoStartMap.values().next().value;
68
- return null;
69
- }
70
- /**
71
- * Store pending auto-start state for a project.
72
- * Exported for testing (#2985).
73
- */
74
- export function setPendingAutoStart(basePath, entry) {
75
- pendingAutoStartMap.set(basePath, entry);
76
- }
77
- /**
78
- * Clear pending auto-start state.
79
- * If basePath is given, clears only that project. Otherwise clears all.
80
- * Exported for testing (#2985).
81
- */
82
- export function clearPendingAutoStart(basePath) {
83
- if (basePath) {
84
- pendingAutoStartMap.delete(basePath);
85
- }
86
- else {
87
- pendingAutoStartMap.clear();
88
- }
89
- }
90
- /**
91
- * Returns the milestoneId being discussed for the given project.
92
- * When basePath is omitted and only one session is active, returns that
93
- * session's milestoneId for backward compatibility. Returns null when
94
- * multiple sessions exist and basePath is not specified (#2985 Bug 4).
95
- */
96
- export function getDiscussionMilestoneId(basePath) {
97
- if (basePath) {
98
- return pendingAutoStartMap.get(basePath)?.milestoneId ?? null;
99
- }
100
- // Backward compat: return the sole entry's milestoneId, or null if ambiguous
101
- if (pendingAutoStartMap.size === 1) {
102
- return pendingAutoStartMap.values().next().value.milestoneId;
103
- }
104
- return null;
56
+ // ─── Auto-start after discuss ─────────────────────────────────────────────────
57
+ /** Stashed context + flag for auto-starting after discuss phase completes */
58
+ let pendingAutoStart = null;
59
+ /** Returns the milestoneId being discussed, or null if no discussion is active */
60
+ export function getDiscussionMilestoneId() {
61
+ return pendingAutoStart?.milestoneId ?? null;
105
62
  }
106
63
  /** Called from agent_end to check if auto-mode should start after discuss */
107
64
  export function checkAutoStartAfterDiscuss() {
108
- const entry = _getPendingAutoStart();
109
- if (!entry)
65
+ if (!pendingAutoStart)
110
66
  return false;
111
- const { ctx, pi, basePath, milestoneId, step } = entry;
67
+ const { ctx, pi, basePath, milestoneId, step } = pendingAutoStart;
112
68
  // Gate 1: Primary milestone must have CONTEXT.md or ROADMAP.md
113
69
  // The "discuss" path creates CONTEXT.md; the "plan" path creates ROADMAP.md.
114
70
  const contextFile = resolveMilestoneFile(basePath, milestoneId, "CONTEXT");
@@ -186,7 +142,7 @@ export function checkAutoStartAfterDiscuss() {
186
142
  unlinkSync(manifestPath);
187
143
  }
188
144
  catch { /* may not exist for single-milestone */ }
189
- pendingAutoStartMap.delete(basePath);
145
+ pendingAutoStart = null;
190
146
  ctx.ui.notify(`Milestone ${milestoneId} ready.`, "info");
191
147
  startAuto(ctx, pi, basePath, false, { step }).catch((err) => {
192
148
  ctx.ui.notify(`Auto-start failed: ${getErrorMessage(err)}`, "error");
@@ -221,17 +177,23 @@ function parseMilestoneSequenceFromProject(content) {
221
177
  * per-phase model preferences that auto-mode uses.
222
178
  */
223
179
  async function dispatchWorkflow(pi, note, customType = "gsd-run", ctx, unitType) {
224
- // Route through the dynamic routing pipeline (complexity classification,
225
- // tier downgrade, fallback chains) — same path as auto-mode dispatches (#2958).
180
+ // Apply model preference for this unit type (if configured)
226
181
  if (ctx && unitType) {
227
- const prefs = loadEffectiveGSDPreferences()?.preferences;
228
- const result = await selectAndApplyModel(ctx, pi, unitType, /* unitId */ "", /* basePath */ process.cwd(), prefs, /* verbose */ false, /* autoModeStartModel */ null);
229
- if (result.appliedModel) {
230
- debugLog("guided-flow-model-applied", {
231
- unitType,
232
- model: `${result.appliedModel.provider}/${result.appliedModel.id}`,
233
- routing: result.routing,
234
- });
182
+ const modelConfig = resolveModelWithFallbacksForUnit(unitType);
183
+ if (modelConfig) {
184
+ const availableModels = ctx.modelRegistry.getAvailable();
185
+ const modelsToTry = [modelConfig.primary, ...modelConfig.fallbacks];
186
+ for (const modelId of modelsToTry) {
187
+ // Resolve model from available models (same logic as auto-model-selection)
188
+ const model = resolveAvailableModel(modelId, availableModels, ctx.model?.provider);
189
+ if (!model)
190
+ continue;
191
+ const ok = await pi.setModel(model, { persist: false });
192
+ if (ok) {
193
+ debugLog("guided-flow-model-applied", { unitType, model: `${model.provider}/${model.id}` });
194
+ break;
195
+ }
196
+ }
235
197
  }
236
198
  }
237
199
  const workflowPath = process.env.GSD_WORKFLOW_PATH ?? join(process.env.HOME ?? "~", ".gsd", "agent", "GSD-WORKFLOW.md");
@@ -349,7 +311,7 @@ export async function showHeadlessMilestoneCreation(ctx, pi, basePath, seedConte
349
311
  // Build and dispatch the headless discuss prompt
350
312
  const prompt = buildHeadlessDiscussPrompt(nextId, seedContext, basePath);
351
313
  // Set pending auto start (auto-mode triggers on "Milestone X ready." via checkAutoStartAfterDiscuss)
352
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId });
314
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId };
353
315
  // Dispatch — headless milestone creation is a planning activity
354
316
  await dispatchWorkflow(pi, prompt, "gsd-run", ctx, "plan-milestone");
355
317
  }
@@ -498,13 +460,13 @@ export async function showDiscuss(ctx, pi, basePath) {
498
460
  const seed = draftContent
499
461
  ? `${basePrompt}\n\n## Prior Discussion (Draft Seed)\n\n${draftContent}`
500
462
  : basePrompt;
501
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: mid, step: false });
463
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: mid, step: false };
502
464
  await dispatchWorkflow(pi, seed, "gsd-discuss", ctx, "discuss-milestone");
503
465
  }
504
466
  else if (choice === "discuss_fresh") {
505
467
  const discussMilestoneTemplates = inlineTemplate("context", "Context");
506
468
  const structuredQuestionsAvailable = pi.getActiveTools().includes("ask_user_questions") ? "true" : "false";
507
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: mid, step: false });
469
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: mid, step: false };
508
470
  await dispatchWorkflow(pi, loadPrompt("guided-discuss-milestone", {
509
471
  milestoneId: mid, milestoneTitle, inlinedTemplates: discussMilestoneTemplates, structuredQuestionsAvailable,
510
472
  commitInstruction: buildDocsCommitInstruction(`docs(${mid}): milestone context from discuss`),
@@ -514,7 +476,7 @@ export async function showDiscuss(ctx, pi, basePath) {
514
476
  const milestoneIds = findMilestoneIds(basePath);
515
477
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
516
478
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
517
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: false });
479
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: false };
518
480
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
519
481
  }
520
482
  return;
@@ -540,20 +502,8 @@ export async function showDiscuss(ctx, pi, basePath) {
540
502
  else {
541
503
  normSlices = [];
542
504
  }
543
- // DB is open but returned zero slices despite a roadmap existing —
544
- // the DB may be empty due to WAL loss or truncation (see #2815, #2892).
545
- // Fall back to roadmap parsing to prevent false "all complete" exit.
546
- if (normSlices.length === 0 && roadmapContent) {
547
- normSlices = parseRoadmapSlices(roadmapContent).map(s => ({ id: s.id, done: s.done, title: s.title }));
548
- }
549
505
  const pendingSlices = normSlices.filter(s => !s.done);
550
506
  if (pendingSlices.length === 0) {
551
- // All slices complete — but queued milestones may still need discussion (#3150)
552
- const pendingMilestones = state.registry.filter(m => m.status === "pending");
553
- if (pendingMilestones.length > 0) {
554
- await showDiscussQueuedMilestone(ctx, pi, basePath, pendingMilestones);
555
- return;
556
- }
557
507
  ctx.ui.notify("All slices are complete — nothing to discuss.", "info");
558
508
  return;
559
509
  }
@@ -567,14 +517,9 @@ export async function showDiscuss(ctx, pi, basePath) {
567
517
  const contextFile = resolveSliceFile(basePath, mid, s.id, "CONTEXT");
568
518
  discussedMap.set(s.id, !!contextFile);
569
519
  }
570
- // If all pending slices are discussed, check for queued milestones before exiting (#3150)
520
+ // If all pending slices are discussed, notify and exit instead of looping
571
521
  const allDiscussed = pendingSlices.every(s => discussedMap.get(s.id));
572
522
  if (allDiscussed) {
573
- const pendingMilestones = state.registry.filter(m => m.status === "pending");
574
- if (pendingMilestones.length > 0) {
575
- await showDiscussQueuedMilestone(ctx, pi, basePath, pendingMilestones);
576
- return;
577
- }
578
523
  const lockData = readSessionLockData(basePath);
579
524
  const remoteAutoRunning = lockData && lockData.pid !== process.pid && isSessionLockProcessAlive(lockData);
580
525
  const nextStep = remoteAutoRunning
@@ -829,7 +774,7 @@ async function handleMilestoneActions(ctx, pi, basePath, milestoneId, milestoneT
829
774
  const milestoneIds = findMilestoneIds(basePath);
830
775
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
831
776
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
832
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
777
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
833
778
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
834
779
  return true;
835
780
  }
@@ -859,14 +804,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
859
804
  return;
860
805
  }
861
806
  // ── Detection preamble — run before any bootstrap ────────────────────
862
- // Check bootstrap completeness, not just .gsd/ directory existence.
863
- // A zombie .gsd/ state (symlink exists but missing PREFERENCES.md and
864
- // milestones/) must trigger the init wizard, not skip it (#2942).
865
- const gsdPath = gsdRoot(basePath);
866
- const hasBootstrapArtifacts = existsSync(gsdPath)
867
- && (existsSync(join(gsdPath, "PREFERENCES.md"))
868
- || existsSync(join(gsdPath, "milestones")));
869
- if (!hasBootstrapArtifacts) {
807
+ if (!existsSync(gsdRoot(basePath))) {
870
808
  const detection = detectProjectState(basePath);
871
809
  // v1 .planning/ detected — offer migration before anything else
872
810
  if (detection.state === "v1-planning" && detection.v1) {
@@ -880,7 +818,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
880
818
  }
881
819
  // "fresh" — fall through to init wizard
882
820
  }
883
- // No .gsd/ or zombie .gsd/ — run the project init wizard
821
+ // No .gsd/ — run the project init wizard
884
822
  const result = await showProjectInit(ctx, pi, basePath, detection);
885
823
  if (!result.completed)
886
824
  return; // User cancelled
@@ -931,9 +869,9 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
931
869
  if (!state.activeMilestone?.id) {
932
870
  // Guard: if a discuss session is already in flight, don't re-inject the prompt.
933
871
  // Both /gsd and /gsd auto reach this branch when no milestone exists yet.
934
- // Without this guard, every subsequent /gsd call overwrites the pending auto-start
872
+ // Without this guard, every subsequent /gsd call overwrites pendingAutoStart
935
873
  // and fires another dispatchWorkflow, resetting the conversation mid-interview.
936
- if (pendingAutoStartMap.has(basePath)) {
874
+ if (pendingAutoStart) {
937
875
  ctx.ui.notify("Discussion already in progress — answer the question above to continue.", "info");
938
876
  return;
939
877
  }
@@ -960,7 +898,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
960
898
  const isFirst = milestoneIds.length === 0;
961
899
  if (isFirst) {
962
900
  // First ever — skip wizard, just ask directly
963
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
901
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
964
902
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New project, milestone ${nextId}. Do NOT read or explore .gsd/ — it's empty scaffolding.`, basePath), "gsd-run", ctx, "discuss-milestone");
965
903
  }
966
904
  else {
@@ -978,7 +916,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
978
916
  notYetMessage: "Run /gsd when ready.",
979
917
  });
980
918
  if (choice === "new_milestone") {
981
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
919
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
982
920
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
983
921
  }
984
922
  }
@@ -1010,7 +948,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1010
948
  const milestoneIds = findMilestoneIds(basePath);
1011
949
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
1012
950
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
1013
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
951
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1014
952
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
1015
953
  }
1016
954
  else if (choice === "status") {
@@ -1056,13 +994,13 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1056
994
  const seed = draftContent
1057
995
  ? `${basePrompt}\n\n## Prior Discussion (Draft Seed)\n\n${draftContent}`
1058
996
  : basePrompt;
1059
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
997
+ pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
1060
998
  await dispatchWorkflow(pi, seed, "gsd-discuss", ctx, "discuss-milestone");
1061
999
  }
1062
1000
  else if (choice === "discuss_fresh") {
1063
1001
  const discussMilestoneTemplates = inlineTemplate("context", "Context");
1064
1002
  const structuredQuestionsAvailable = pi.getActiveTools().includes("ask_user_questions") ? "true" : "false";
1065
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
1003
+ pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
1066
1004
  await dispatchWorkflow(pi, loadPrompt("guided-discuss-milestone", {
1067
1005
  milestoneId, milestoneTitle, inlinedTemplates: discussMilestoneTemplates, structuredQuestionsAvailable,
1068
1006
  commitInstruction: buildDocsCommitInstruction(`docs(${milestoneId}): milestone context from discuss`),
@@ -1072,7 +1010,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1072
1010
  const milestoneIds = findMilestoneIds(basePath);
1073
1011
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
1074
1012
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
1075
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1013
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1076
1014
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
1077
1015
  }
1078
1016
  return;
@@ -1117,7 +1055,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1117
1055
  notYetMessage: "Run /gsd when ready.",
1118
1056
  });
1119
1057
  if (choice === "plan") {
1120
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
1058
+ pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
1121
1059
  const planMilestoneTemplates = [
1122
1060
  inlineTemplate("roadmap", "Roadmap"),
1123
1061
  inlineTemplate("plan", "Slice Plan"),
@@ -1150,7 +1088,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
1150
1088
  const milestoneIds = findMilestoneIds(basePath);
1151
1089
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
1152
1090
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
1153
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1091
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1154
1092
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
1155
1093
  }
1156
1094
  else if (choice === "discard_milestone") {
@@ -16,31 +16,6 @@ export function detectHealthWidgetProjectState(basePath) {
16
16
  function formatCost(n) {
17
17
  return n >= 1 ? `$${n.toFixed(2)}` : `${(n * 100).toFixed(1)}¢`;
18
18
  }
19
- /**
20
- * Format a Unix epoch (seconds) as a human-readable relative time string.
21
- * Returns "just now" for <1m, "Xm ago" for <1h, "Xh ago" for <24h, "Xd ago" otherwise.
22
- */
23
- export function formatRelativeTime(epochSeconds) {
24
- const diffSeconds = Math.floor(Date.now() / 1000) - epochSeconds;
25
- if (diffSeconds < 60)
26
- return "just now";
27
- const minutes = Math.floor(diffSeconds / 60);
28
- if (minutes < 60)
29
- return `${minutes}m ago`;
30
- const hours = Math.floor(minutes / 60);
31
- if (hours < 24)
32
- return `${hours}h ago`;
33
- const days = Math.floor(hours / 24);
34
- return `${days}d ago`;
35
- }
36
- /**
37
- * Truncate a commit message to fit the widget, appending "…" if needed.
38
- */
39
- function truncateMessage(msg, maxLen) {
40
- if (msg.length <= maxLen)
41
- return msg;
42
- return msg.slice(0, maxLen - 1) + "…";
43
- }
44
19
  /**
45
20
  * Build compact health lines for the widget.
46
21
  * Returns a string array suitable for setWidget().
@@ -79,11 +54,5 @@ export function buildHealthLines(data) {
79
54
  else if (data.environmentWarningCount > 0) {
80
55
  parts.push(`Env: ${data.environmentWarningCount} warning${data.environmentWarningCount > 1 ? "s" : ""}`);
81
56
  }
82
- // Always-on last commit display — shows relative time + truncated message
83
- if (data.lastCommitEpoch !== null && data.lastCommitEpoch > 0) {
84
- const relTime = formatRelativeTime(data.lastCommitEpoch);
85
- const msg = data.lastCommitMessage ? ` — ${truncateMessage(data.lastCommitMessage, 50)}` : "";
86
- parts.push(`Last commit: ${relTime}${msg}`);
87
- }
88
57
  return [` ${parts.join(" │ ")}`];
89
58
  }
@@ -10,7 +10,6 @@
10
10
  import { runProviderChecks, summariseProviderIssues } from "./doctor-providers.js";
11
11
  import { runEnvironmentChecks } from "./doctor-environment.js";
12
12
  import { loadEffectiveGSDPreferences } from "./preferences.js";
13
- import { nativeIsRepo, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeCommitSubject } from "./native-git-bridge.js";
14
13
  import { loadLedgerFromDisk, getProjectTotals } from "./metrics.js";
15
14
  import { projectRoot } from "./commands/context.js";
16
15
  import { buildHealthLines, detectHealthWidgetProjectState, } from "./health-widget-core.js";
@@ -21,8 +20,6 @@ function loadHealthWidgetData(basePath) {
21
20
  let providerIssue = null;
22
21
  let environmentErrorCount = 0;
23
22
  let environmentWarningCount = 0;
24
- let lastCommitEpoch = null;
25
- let lastCommitMessage = null;
26
23
  const projectState = detectHealthWidgetProjectState(basePath);
27
24
  try {
28
25
  const prefs = loadEffectiveGSDPreferences();
@@ -49,18 +46,6 @@ function loadHealthWidgetData(basePath) {
49
46
  }
50
47
  }
51
48
  catch { /* non-fatal */ }
52
- // ── Last commit info ──
53
- try {
54
- if (nativeIsRepo(basePath)) {
55
- const branch = nativeGetCurrentBranch(basePath);
56
- const epoch = nativeLastCommitEpoch(basePath, branch || "HEAD");
57
- if (epoch > 0) {
58
- lastCommitEpoch = epoch;
59
- lastCommitMessage = nativeCommitSubject(basePath, branch || "HEAD") || null;
60
- }
61
- }
62
- }
63
- catch { /* non-fatal */ }
64
49
  return {
65
50
  projectState,
66
51
  budgetCeiling,
@@ -68,8 +53,6 @@ function loadHealthWidgetData(basePath) {
68
53
  providerIssue,
69
54
  environmentErrorCount,
70
55
  environmentWarningCount,
71
- lastCommitEpoch,
72
- lastCommitMessage,
73
56
  lastRefreshed: Date.now(),
74
57
  };
75
58
  }
@@ -1,4 +1,4 @@
1
- export { isDepthVerified, isQueuePhaseActive, setQueuePhaseActive, shouldBlockContextWrite, shouldBlockQueueExecution, } from "./bootstrap/write-gate.js";
1
+ export { isDepthVerified, isQueuePhaseActive, setQueuePhaseActive, shouldBlockContextWrite, } from "./bootstrap/write-gate.js";
2
2
  export default async function registerExtension(pi) {
3
3
  const { registerGsdExtension } = await import("./bootstrap/register-extension.js");
4
4
  registerGsdExtension(pi);
@@ -57,21 +57,14 @@ export function buildMemoryLLMCall(ctx) {
57
57
  if (!model)
58
58
  return null;
59
59
  const selectedModel = model;
60
- // Resolve API key via modelRegistry so OAuth tokens (auth.json) are used.
61
- // Without this, streamSimpleAnthropic only checks env vars via getEnvApiKey,
62
- // which returns undefined for OAuth users (Claude Max / Claude Pro).
63
- // See: https://github.com/gsd-build/gsd-2/issues/2959
64
- const resolvedKeyPromise = ctx.modelRegistry.getApiKey(selectedModel).catch(() => undefined);
65
60
  return async (system, user) => {
66
61
  const { completeSimple } = await import('@gsd/pi-ai');
67
- const resolvedApiKey = await resolvedKeyPromise;
68
62
  const result = await completeSimple(selectedModel, {
69
63
  systemPrompt: system,
70
64
  messages: [{ role: 'user', content: [{ type: 'text', text: user }], timestamp: Date.now() }],
71
65
  }, {
72
66
  maxTokens: 2048,
73
67
  temperature: 0,
74
- ...(resolvedApiKey ? { apiKey: resolvedApiKey } : {}),
75
68
  });
76
69
  // Extract text from response
77
70
  const textParts = result.content
@@ -8,7 +8,7 @@
8
8
  import { execFileSync } from "node:child_process";
9
9
  import { existsSync, lstatSync, mkdirSync, readdirSync, realpathSync, renameSync, cpSync, rmSync, symlinkSync } from "node:fs";
10
10
  import { join } from "node:path";
11
- import { externalGsdRoot, isInsideWorktree } from "./repo-identity.js";
11
+ import { externalGsdRoot } from "./repo-identity.js";
12
12
  import { getErrorMessage } from "./error-utils.js";
13
13
  import { hasGitTrackedGsdFiles } from "./gitignore.js";
14
14
  import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
@@ -27,13 +27,6 @@ import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
27
27
  * 3. On failure: rename `.gsd.migrating` back to `.gsd` (rollback)
28
28
  */
29
29
  export function migrateToExternalState(basePath) {
30
- // Worktrees get their .gsd via syncGsdStateToWorktree(), not migration.
31
- // Migration inside a worktree would compute the same external hash as the
32
- // main repo (externalGsdRoot hashes remoteUrl + gitRoot), creating a broken
33
- // junction and orphaning .gsd.migrating (#2970).
34
- if (isInsideWorktree(basePath)) {
35
- return { migrated: false };
36
- }
37
30
  const localGsd = join(basePath, ".gsd");
38
31
  // Skip if doesn't exist
39
32
  if (!existsSync(localGsd)) {
@@ -20,27 +20,9 @@ export const BUNDLED_COST_TABLE = [
20
20
  // OpenAI
21
21
  { id: "gpt-4o", inputPer1k: 0.0025, outputPer1k: 0.01, updatedAt: "2025-03-15" },
22
22
  { id: "gpt-4o-mini", inputPer1k: 0.00015, outputPer1k: 0.0006, updatedAt: "2025-03-15" },
23
- { id: "gpt-4.1", inputPer1k: 0.002, outputPer1k: 0.008, updatedAt: "2026-03-29" },
24
- { id: "gpt-4.1-mini", inputPer1k: 0.0004, outputPer1k: 0.0016, updatedAt: "2026-03-29" },
25
- { id: "gpt-4.1-nano", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2026-03-29" },
26
- { id: "gpt-5", inputPer1k: 0.01, outputPer1k: 0.04, updatedAt: "2026-03-29" },
27
- { id: "gpt-5-mini", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
28
- { id: "gpt-5-nano", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2026-03-29" },
29
- { id: "gpt-5-pro", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2026-03-29" },
30
23
  { id: "o1", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2025-03-15" },
31
24
  { id: "o3", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2025-03-15" },
32
- { id: "o4-mini", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
33
- { id: "o4-mini-deep-research", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
34
25
  { id: "gpt-4-turbo", inputPer1k: 0.01, outputPer1k: 0.03, updatedAt: "2025-03-15" },
35
- // OpenAI Codex
36
- { id: "gpt-5.1", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
37
- { id: "gpt-5.1-codex-max", inputPer1k: 0.003, outputPer1k: 0.012, updatedAt: "2026-03-29" },
38
- { id: "gpt-5.1-codex-mini", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
39
- { id: "gpt-5.2", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
40
- { id: "gpt-5.2-codex", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
41
- { id: "gpt-5.3-codex", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
42
- { id: "gpt-5.3-codex-spark", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
43
- { id: "gpt-5.4", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
44
26
  // Google
45
27
  { id: "gemini-2.0-flash", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2025-03-15" },
46
28
  { id: "gemini-flash-2.0", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2025-03-15" },