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
@@ -10,7 +10,6 @@ import type { ExtensionAPI, ExtensionContext, ExtensionCommandContext } from "@g
10
10
  import { showNextAction } from "../shared/tui.js";
11
11
  import { loadFile } from "./files.js";
12
12
  import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
13
- import { parseRoadmapSlices } from "./roadmap-slices.js";
14
13
  import { loadPrompt, inlineTemplate } from "./prompt-loader.js";
15
14
  import { buildSkillActivationBlock } from "./auto-prompts.js";
16
15
  import { deriveState } from "./state.js";
@@ -38,7 +37,7 @@ import { showConfirm } from "../shared/tui.js";
38
37
  import { debugLog } from "./debug-logger.js";
39
38
  import { findMilestoneIds, nextMilestoneId, reserveMilestoneId, getReservedMilestoneIds, clearReservedMilestoneIds } from "./milestone-ids.js";
40
39
  import { parkMilestone, discardMilestone } from "./milestone-actions.js";
41
- import { selectAndApplyModel } from "./auto-model-selection.js";
40
+ import { resolveModelWithFallbacksForUnit } from "./preferences-models.js";
42
41
 
43
42
  // ─── Re-exports (preserve public API for existing importers) ────────────────
44
43
  export {
@@ -76,72 +75,25 @@ function buildDocsCommitInstruction(_message: string): string {
76
75
 
77
76
  // ─── Auto-start after discuss ─────────────────────────────────────────────────
78
77
 
79
- /** Pending auto-start context, keyed by basePath for session isolation (#2985). */
80
- interface PendingAutoStartEntry {
78
+ /** Stashed context + flag for auto-starting after discuss phase completes */
79
+ let pendingAutoStart: {
81
80
  ctx: ExtensionCommandContext;
82
81
  pi: ExtensionAPI;
83
82
  basePath: string;
84
83
  milestoneId: string; // the milestone being discussed
85
84
  step?: boolean; // preserve step mode through discuss → auto transition
86
- }
87
-
88
- const pendingAutoStartMap = new Map<string, PendingAutoStartEntry>();
85
+ } | null = null;
89
86
 
90
- /**
91
- * Backward-compat bridge: returns a mutable reference to the entry matching
92
- * basePath, or the sole entry when only one session exists.
93
- * Internal use only — external code should use the Map directly.
94
- */
95
- function _getPendingAutoStart(basePath?: string): PendingAutoStartEntry | null {
96
- if (basePath) return pendingAutoStartMap.get(basePath) ?? null;
97
- if (pendingAutoStartMap.size === 1) return pendingAutoStartMap.values().next().value!;
98
- return null;
99
- }
100
-
101
- /**
102
- * Store pending auto-start state for a project.
103
- * Exported for testing (#2985).
104
- */
105
- export function setPendingAutoStart(basePath: string, entry: { basePath: string; milestoneId: string; ctx?: ExtensionCommandContext; pi?: ExtensionAPI; step?: boolean }): void {
106
- pendingAutoStartMap.set(basePath, entry as PendingAutoStartEntry);
107
- }
108
-
109
- /**
110
- * Clear pending auto-start state.
111
- * If basePath is given, clears only that project. Otherwise clears all.
112
- * Exported for testing (#2985).
113
- */
114
- export function clearPendingAutoStart(basePath?: string): void {
115
- if (basePath) {
116
- pendingAutoStartMap.delete(basePath);
117
- } else {
118
- pendingAutoStartMap.clear();
119
- }
120
- }
121
-
122
- /**
123
- * Returns the milestoneId being discussed for the given project.
124
- * When basePath is omitted and only one session is active, returns that
125
- * session's milestoneId for backward compatibility. Returns null when
126
- * multiple sessions exist and basePath is not specified (#2985 Bug 4).
127
- */
128
- export function getDiscussionMilestoneId(basePath?: string): string | null {
129
- if (basePath) {
130
- return pendingAutoStartMap.get(basePath)?.milestoneId ?? null;
131
- }
132
- // Backward compat: return the sole entry's milestoneId, or null if ambiguous
133
- if (pendingAutoStartMap.size === 1) {
134
- return pendingAutoStartMap.values().next().value!.milestoneId;
135
- }
136
- return null;
87
+ /** Returns the milestoneId being discussed, or null if no discussion is active */
88
+ export function getDiscussionMilestoneId(): string | null {
89
+ return pendingAutoStart?.milestoneId ?? null;
137
90
  }
138
91
 
139
92
  /** Called from agent_end to check if auto-mode should start after discuss */
140
93
  export function checkAutoStartAfterDiscuss(): boolean {
141
- const entry = _getPendingAutoStart();
142
- if (!entry) return false;
94
+ if (!pendingAutoStart) return false;
143
95
 
144
- const { ctx, pi, basePath, milestoneId, step } = entry;
96
+ const { ctx, pi, basePath, milestoneId, step } = pendingAutoStart;
145
97
 
146
98
  // Gate 1: Primary milestone must have CONTEXT.md or ROADMAP.md
147
99
  // The "discuss" path creates CONTEXT.md; the "plan" path creates ROADMAP.md.
@@ -225,7 +177,7 @@ export function checkAutoStartAfterDiscuss(): boolean {
225
177
  // Cleanup: remove discussion manifest after auto-start (only needed during discussion)
226
178
  try { unlinkSync(manifestPath); } catch { /* may not exist for single-milestone */ }
227
179
 
228
- pendingAutoStartMap.delete(basePath);
180
+ pendingAutoStart = null;
229
181
  ctx.ui.notify(`Milestone ${milestoneId} ready.`, "info");
230
182
  startAuto(ctx, pi, basePath, false, { step }).catch((err) => {
231
183
  ctx.ui.notify(`Auto-start failed: ${getErrorMessage(err)}`, "error");
@@ -271,20 +223,24 @@ async function dispatchWorkflow(
271
223
  ctx?: ExtensionContext,
272
224
  unitType?: string,
273
225
  ): Promise<void> {
274
- // Route through the dynamic routing pipeline (complexity classification,
275
- // tier downgrade, fallback chains) — same path as auto-mode dispatches (#2958).
226
+ // Apply model preference for this unit type (if configured)
276
227
  if (ctx && unitType) {
277
- const prefs = loadEffectiveGSDPreferences()?.preferences;
278
- const result = await selectAndApplyModel(
279
- ctx, pi, unitType, /* unitId */ "", /* basePath */ process.cwd(),
280
- prefs, /* verbose */ false, /* autoModeStartModel */ null,
281
- );
282
- if (result.appliedModel) {
283
- debugLog("guided-flow-model-applied", {
284
- unitType,
285
- model: `${result.appliedModel.provider}/${result.appliedModel.id}`,
286
- routing: result.routing,
287
- });
228
+ const modelConfig = resolveModelWithFallbacksForUnit(unitType);
229
+ if (modelConfig) {
230
+ const availableModels = ctx.modelRegistry.getAvailable();
231
+ const modelsToTry = [modelConfig.primary, ...modelConfig.fallbacks];
232
+
233
+ for (const modelId of modelsToTry) {
234
+ // Resolve model from available models (same logic as auto-model-selection)
235
+ const model = resolveAvailableModel(modelId, availableModels, ctx.model?.provider);
236
+ if (!model) continue;
237
+
238
+ const ok = await pi.setModel(model, { persist: false });
239
+ if (ok) {
240
+ debugLog("guided-flow-model-applied", { unitType, model: `${model.provider}/${model.id}` });
241
+ break;
242
+ }
243
+ }
288
244
  }
289
245
  }
290
246
 
@@ -437,7 +393,7 @@ export async function showHeadlessMilestoneCreation(
437
393
  const prompt = buildHeadlessDiscussPrompt(nextId, seedContext, basePath);
438
394
 
439
395
  // Set pending auto start (auto-mode triggers on "Milestone X ready." via checkAutoStartAfterDiscuss)
440
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId });
396
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId };
441
397
 
442
398
  // Dispatch — headless milestone creation is a planning activity
443
399
  await dispatchWorkflow(pi, prompt, "gsd-run", ctx, "plan-milestone");
@@ -617,12 +573,12 @@ export async function showDiscuss(
617
573
  const seed = draftContent
618
574
  ? `${basePrompt}\n\n## Prior Discussion (Draft Seed)\n\n${draftContent}`
619
575
  : basePrompt;
620
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: mid, step: false });
576
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: mid, step: false };
621
577
  await dispatchWorkflow(pi, seed, "gsd-discuss", ctx, "discuss-milestone");
622
578
  } else if (choice === "discuss_fresh") {
623
579
  const discussMilestoneTemplates = inlineTemplate("context", "Context");
624
580
  const structuredQuestionsAvailable = pi.getActiveTools().includes("ask_user_questions") ? "true" : "false";
625
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: mid, step: false });
581
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: mid, step: false };
626
582
  await dispatchWorkflow(pi, loadPrompt("guided-discuss-milestone", {
627
583
  milestoneId: mid, milestoneTitle, inlinedTemplates: discussMilestoneTemplates, structuredQuestionsAvailable,
628
584
  commitInstruction: buildDocsCommitInstruction(`docs(${mid}): milestone context from discuss`),
@@ -631,7 +587,7 @@ export async function showDiscuss(
631
587
  const milestoneIds = findMilestoneIds(basePath);
632
588
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
633
589
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
634
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: false });
590
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: false };
635
591
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
636
592
  }
637
593
  return;
@@ -661,21 +617,9 @@ export async function showDiscuss(
661
617
  } else {
662
618
  normSlices = [];
663
619
  }
664
- // DB is open but returned zero slices despite a roadmap existing —
665
- // the DB may be empty due to WAL loss or truncation (see #2815, #2892).
666
- // Fall back to roadmap parsing to prevent false "all complete" exit.
667
- if (normSlices.length === 0 && roadmapContent) {
668
- normSlices = parseRoadmapSlices(roadmapContent).map(s => ({ id: s.id, done: s.done, title: s.title }));
669
- }
670
620
  const pendingSlices = normSlices.filter(s => !s.done);
671
621
 
672
622
  if (pendingSlices.length === 0) {
673
- // All slices complete — but queued milestones may still need discussion (#3150)
674
- const pendingMilestones = state.registry.filter(m => m.status === "pending");
675
- if (pendingMilestones.length > 0) {
676
- await showDiscussQueuedMilestone(ctx, pi, basePath, pendingMilestones);
677
- return;
678
- }
679
623
  ctx.ui.notify("All slices are complete — nothing to discuss.", "info");
680
624
  return;
681
625
  }
@@ -692,14 +636,9 @@ export async function showDiscuss(
692
636
  discussedMap.set(s.id, !!contextFile);
693
637
  }
694
638
 
695
- // If all pending slices are discussed, check for queued milestones before exiting (#3150)
639
+ // If all pending slices are discussed, notify and exit instead of looping
696
640
  const allDiscussed = pendingSlices.every(s => discussedMap.get(s.id));
697
641
  if (allDiscussed) {
698
- const pendingMilestones = state.registry.filter(m => m.status === "pending");
699
- if (pendingMilestones.length > 0) {
700
- await showDiscussQueuedMilestone(ctx, pi, basePath, pendingMilestones);
701
- return;
702
- }
703
642
  const lockData = readSessionLockData(basePath);
704
643
  const remoteAutoRunning = lockData && lockData.pid !== process.pid && isSessionLockProcessAlive(lockData);
705
644
  const nextStep = remoteAutoRunning
@@ -993,7 +932,7 @@ async function handleMilestoneActions(
993
932
  const milestoneIds = findMilestoneIds(basePath);
994
933
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
995
934
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
996
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
935
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
997
936
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
998
937
  `New milestone ${nextId}.`,
999
938
  basePath
@@ -1035,15 +974,7 @@ export async function showSmartEntry(
1035
974
  }
1036
975
 
1037
976
  // ── Detection preamble — run before any bootstrap ────────────────────
1038
- // Check bootstrap completeness, not just .gsd/ directory existence.
1039
- // A zombie .gsd/ state (symlink exists but missing PREFERENCES.md and
1040
- // milestones/) must trigger the init wizard, not skip it (#2942).
1041
- const gsdPath = gsdRoot(basePath);
1042
- const hasBootstrapArtifacts = existsSync(gsdPath)
1043
- && (existsSync(join(gsdPath, "PREFERENCES.md"))
1044
- || existsSync(join(gsdPath, "milestones")));
1045
-
1046
- if (!hasBootstrapArtifacts) {
977
+ if (!existsSync(gsdRoot(basePath))) {
1047
978
  const detection = detectProjectState(basePath);
1048
979
 
1049
980
  // v1 .planning/ detected — offer migration before anything else
@@ -1058,7 +989,7 @@ export async function showSmartEntry(
1058
989
  // "fresh" — fall through to init wizard
1059
990
  }
1060
991
 
1061
- // No .gsd/ or zombie .gsd/ — run the project init wizard
992
+ // No .gsd/ — run the project init wizard
1062
993
  const result = await showProjectInit(ctx, pi, basePath, detection);
1063
994
  if (!result.completed) return; // User cancelled
1064
995
 
@@ -1117,9 +1048,9 @@ export async function showSmartEntry(
1117
1048
  if (!state.activeMilestone?.id) {
1118
1049
  // Guard: if a discuss session is already in flight, don't re-inject the prompt.
1119
1050
  // Both /gsd and /gsd auto reach this branch when no milestone exists yet.
1120
- // Without this guard, every subsequent /gsd call overwrites the pending auto-start
1051
+ // Without this guard, every subsequent /gsd call overwrites pendingAutoStart
1121
1052
  // and fires another dispatchWorkflow, resetting the conversation mid-interview.
1122
- if (pendingAutoStartMap.has(basePath)) {
1053
+ if (pendingAutoStart) {
1123
1054
  ctx.ui.notify("Discussion already in progress — answer the question above to continue.", "info");
1124
1055
  return;
1125
1056
  }
@@ -1152,7 +1083,7 @@ export async function showSmartEntry(
1152
1083
 
1153
1084
  if (isFirst) {
1154
1085
  // First ever — skip wizard, just ask directly
1155
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1086
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1156
1087
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
1157
1088
  `New project, milestone ${nextId}. Do NOT read or explore .gsd/ — it's empty scaffolding.`,
1158
1089
  basePath
@@ -1173,7 +1104,7 @@ export async function showSmartEntry(
1173
1104
  });
1174
1105
 
1175
1106
  if (choice === "new_milestone") {
1176
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1107
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1177
1108
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
1178
1109
  `New milestone ${nextId}.`,
1179
1110
  basePath
@@ -1212,7 +1143,7 @@ export async function showSmartEntry(
1212
1143
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
1213
1144
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
1214
1145
 
1215
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1146
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1216
1147
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
1217
1148
  `New milestone ${nextId}.`,
1218
1149
  basePath
@@ -1263,12 +1194,12 @@ export async function showSmartEntry(
1263
1194
  const seed = draftContent
1264
1195
  ? `${basePrompt}\n\n## Prior Discussion (Draft Seed)\n\n${draftContent}`
1265
1196
  : basePrompt;
1266
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
1197
+ pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
1267
1198
  await dispatchWorkflow(pi, seed, "gsd-discuss", ctx, "discuss-milestone");
1268
1199
  } else if (choice === "discuss_fresh") {
1269
1200
  const discussMilestoneTemplates = inlineTemplate("context", "Context");
1270
1201
  const structuredQuestionsAvailable = pi.getActiveTools().includes("ask_user_questions") ? "true" : "false";
1271
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
1202
+ pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
1272
1203
  await dispatchWorkflow(pi, loadPrompt("guided-discuss-milestone", {
1273
1204
  milestoneId, milestoneTitle, inlinedTemplates: discussMilestoneTemplates, structuredQuestionsAvailable,
1274
1205
  commitInstruction: buildDocsCommitInstruction(`docs(${milestoneId}): milestone context from discuss`),
@@ -1277,7 +1208,7 @@ export async function showSmartEntry(
1277
1208
  const milestoneIds = findMilestoneIds(basePath);
1278
1209
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
1279
1210
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
1280
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1211
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1281
1212
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
1282
1213
  `New milestone ${nextId}.`,
1283
1214
  basePath
@@ -1330,7 +1261,7 @@ export async function showSmartEntry(
1330
1261
  });
1331
1262
 
1332
1263
  if (choice === "plan") {
1333
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId, step: stepMode });
1264
+ pendingAutoStart = { ctx, pi, basePath, milestoneId, step: stepMode };
1334
1265
  const planMilestoneTemplates = [
1335
1266
  inlineTemplate("roadmap", "Roadmap"),
1336
1267
  inlineTemplate("plan", "Slice Plan"),
@@ -1361,7 +1292,7 @@ export async function showSmartEntry(
1361
1292
  const milestoneIds = findMilestoneIds(basePath);
1362
1293
  const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
1363
1294
  const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
1364
- pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode });
1295
+ pendingAutoStart = { ctx, pi, basePath, milestoneId: nextId, step: stepMode };
1365
1296
  await dispatchWorkflow(pi, buildDiscussPrompt(nextId,
1366
1297
  `New milestone ${nextId}.`,
1367
1298
  basePath
@@ -18,10 +18,6 @@ export interface HealthWidgetData {
18
18
  providerIssue: string | null;
19
19
  environmentErrorCount: number;
20
20
  environmentWarningCount: number;
21
- /** Unix epoch (seconds) of the last commit, or null if unavailable. */
22
- lastCommitEpoch: number | null;
23
- /** Subject line of the last commit, or null if unavailable. */
24
- lastCommitMessage: string | null;
25
21
  lastRefreshed: number;
26
22
  }
27
23
 
@@ -36,29 +32,6 @@ function formatCost(n: number): string {
36
32
  return n >= 1 ? `$${n.toFixed(2)}` : `${(n * 100).toFixed(1)}¢`;
37
33
  }
38
34
 
39
- /**
40
- * Format a Unix epoch (seconds) as a human-readable relative time string.
41
- * Returns "just now" for <1m, "Xm ago" for <1h, "Xh ago" for <24h, "Xd ago" otherwise.
42
- */
43
- export function formatRelativeTime(epochSeconds: number): string {
44
- const diffSeconds = Math.floor(Date.now() / 1000) - epochSeconds;
45
- if (diffSeconds < 60) return "just now";
46
- const minutes = Math.floor(diffSeconds / 60);
47
- if (minutes < 60) return `${minutes}m ago`;
48
- const hours = Math.floor(minutes / 60);
49
- if (hours < 24) return `${hours}h ago`;
50
- const days = Math.floor(hours / 24);
51
- return `${days}d ago`;
52
- }
53
-
54
- /**
55
- * Truncate a commit message to fit the widget, appending "…" if needed.
56
- */
57
- function truncateMessage(msg: string, maxLen: number): string {
58
- if (msg.length <= maxLen) return msg;
59
- return msg.slice(0, maxLen - 1) + "…";
60
- }
61
-
62
35
  /**
63
36
  * Build compact health lines for the widget.
64
37
  * Returns a string array suitable for setWidget().
@@ -100,12 +73,5 @@ export function buildHealthLines(data: HealthWidgetData): string[] {
100
73
  parts.push(`Env: ${data.environmentWarningCount} warning${data.environmentWarningCount > 1 ? "s" : ""}`);
101
74
  }
102
75
 
103
- // Always-on last commit display — shows relative time + truncated message
104
- if (data.lastCommitEpoch !== null && data.lastCommitEpoch > 0) {
105
- const relTime = formatRelativeTime(data.lastCommitEpoch);
106
- const msg = data.lastCommitMessage ? ` — ${truncateMessage(data.lastCommitMessage, 50)}` : "";
107
- parts.push(`Last commit: ${relTime}${msg}`);
108
- }
109
-
110
76
  return [` ${parts.join(" │ ")}`];
111
77
  }
@@ -13,7 +13,6 @@ import type { GSDState } from "./types.js";
13
13
  import { runProviderChecks, summariseProviderIssues } from "./doctor-providers.js";
14
14
  import { runEnvironmentChecks } from "./doctor-environment.js";
15
15
  import { loadEffectiveGSDPreferences } from "./preferences.js";
16
- import { nativeIsRepo, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeCommitSubject } from "./native-git-bridge.js";
17
16
  import { loadLedgerFromDisk, getProjectTotals } from "./metrics.js";
18
17
  import { describeNextUnit, estimateTimeRemaining, updateSliceProgressCache } from "./auto-dashboard.js";
19
18
  import { projectRoot } from "./commands/context.js";
@@ -32,8 +31,6 @@ function loadHealthWidgetData(basePath: string): HealthWidgetData {
32
31
  let providerIssue: string | null = null;
33
32
  let environmentErrorCount = 0;
34
33
  let environmentWarningCount = 0;
35
- let lastCommitEpoch: number | null = null;
36
- let lastCommitMessage: string | null = null;
37
34
 
38
35
  const projectState = detectHealthWidgetProjectState(basePath);
39
36
 
@@ -61,18 +58,6 @@ function loadHealthWidgetData(basePath: string): HealthWidgetData {
61
58
  }
62
59
  } catch { /* non-fatal */ }
63
60
 
64
- // ── Last commit info ──
65
- try {
66
- if (nativeIsRepo(basePath)) {
67
- const branch = nativeGetCurrentBranch(basePath);
68
- const epoch = nativeLastCommitEpoch(basePath, branch || "HEAD");
69
- if (epoch > 0) {
70
- lastCommitEpoch = epoch;
71
- lastCommitMessage = nativeCommitSubject(basePath, branch || "HEAD") || null;
72
- }
73
- }
74
- } catch { /* non-fatal */ }
75
-
76
61
  return {
77
62
  projectState,
78
63
  budgetCeiling,
@@ -80,8 +65,6 @@ function loadHealthWidgetData(basePath: string): HealthWidgetData {
80
65
  providerIssue,
81
66
  environmentErrorCount,
82
67
  environmentWarningCount,
83
- lastCommitEpoch,
84
- lastCommitMessage,
85
68
  lastRefreshed: Date.now(),
86
69
  };
87
70
  }
@@ -5,7 +5,6 @@ export {
5
5
  isQueuePhaseActive,
6
6
  setQueuePhaseActive,
7
7
  shouldBlockContextWrite,
8
- shouldBlockQueueExecution,
9
8
  } from "./bootstrap/write-gate.js";
10
9
 
11
10
  export default async function registerExtension(pi: ExtensionAPI) {
@@ -87,22 +87,14 @@ export function buildMemoryLLMCall(ctx: ExtensionContext): LLMCallFn | null {
87
87
 
88
88
  const selectedModel = model as Model<Api>;
89
89
 
90
- // Resolve API key via modelRegistry so OAuth tokens (auth.json) are used.
91
- // Without this, streamSimpleAnthropic only checks env vars via getEnvApiKey,
92
- // which returns undefined for OAuth users (Claude Max / Claude Pro).
93
- // See: https://github.com/gsd-build/gsd-2/issues/2959
94
- const resolvedKeyPromise = ctx.modelRegistry.getApiKey(selectedModel).catch(() => undefined);
95
-
96
90
  return async (system: string, user: string): Promise<string> => {
97
91
  const { completeSimple } = await import('@gsd/pi-ai');
98
- const resolvedApiKey = await resolvedKeyPromise;
99
92
  const result: AssistantMessage = await completeSimple(selectedModel, {
100
93
  systemPrompt: system,
101
94
  messages: [{ role: 'user', content: [{ type: 'text', text: user }], timestamp: Date.now() }],
102
95
  }, {
103
96
  maxTokens: 2048,
104
97
  temperature: 0,
105
- ...(resolvedApiKey ? { apiKey: resolvedApiKey } : {}),
106
98
  });
107
99
 
108
100
  // Extract text from response
@@ -9,7 +9,7 @@
9
9
  import { execFileSync } from "node:child_process";
10
10
  import { existsSync, lstatSync, mkdirSync, readdirSync, realpathSync, renameSync, cpSync, rmSync, symlinkSync } from "node:fs";
11
11
  import { join } from "node:path";
12
- import { externalGsdRoot, isInsideWorktree } from "./repo-identity.js";
12
+ import { externalGsdRoot } from "./repo-identity.js";
13
13
  import { getErrorMessage } from "./error-utils.js";
14
14
  import { hasGitTrackedGsdFiles } from "./gitignore.js";
15
15
  import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
@@ -34,14 +34,6 @@ export interface MigrationResult {
34
34
  * 3. On failure: rename `.gsd.migrating` back to `.gsd` (rollback)
35
35
  */
36
36
  export function migrateToExternalState(basePath: string): MigrationResult {
37
- // Worktrees get their .gsd via syncGsdStateToWorktree(), not migration.
38
- // Migration inside a worktree would compute the same external hash as the
39
- // main repo (externalGsdRoot hashes remoteUrl + gitRoot), creating a broken
40
- // junction and orphaning .gsd.migrating (#2970).
41
- if (isInsideWorktree(basePath)) {
42
- return { migrated: false };
43
- }
44
-
45
37
  const localGsd = join(basePath, ".gsd");
46
38
 
47
39
  // Skip if doesn't exist
@@ -33,29 +33,10 @@ export const BUNDLED_COST_TABLE: ModelCostEntry[] = [
33
33
  // OpenAI
34
34
  { id: "gpt-4o", inputPer1k: 0.0025, outputPer1k: 0.01, updatedAt: "2025-03-15" },
35
35
  { id: "gpt-4o-mini", inputPer1k: 0.00015, outputPer1k: 0.0006, updatedAt: "2025-03-15" },
36
- { id: "gpt-4.1", inputPer1k: 0.002, outputPer1k: 0.008, updatedAt: "2026-03-29" },
37
- { id: "gpt-4.1-mini", inputPer1k: 0.0004, outputPer1k: 0.0016, updatedAt: "2026-03-29" },
38
- { id: "gpt-4.1-nano", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2026-03-29" },
39
- { id: "gpt-5", inputPer1k: 0.01, outputPer1k: 0.04, updatedAt: "2026-03-29" },
40
- { id: "gpt-5-mini", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
41
- { id: "gpt-5-nano", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2026-03-29" },
42
- { id: "gpt-5-pro", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2026-03-29" },
43
36
  { id: "o1", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2025-03-15" },
44
37
  { id: "o3", inputPer1k: 0.015, outputPer1k: 0.06, updatedAt: "2025-03-15" },
45
- { id: "o4-mini", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
46
- { id: "o4-mini-deep-research", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
47
38
  { id: "gpt-4-turbo", inputPer1k: 0.01, outputPer1k: 0.03, updatedAt: "2025-03-15" },
48
39
 
49
- // OpenAI Codex
50
- { id: "gpt-5.1", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
51
- { id: "gpt-5.1-codex-max", inputPer1k: 0.003, outputPer1k: 0.012, updatedAt: "2026-03-29" },
52
- { id: "gpt-5.1-codex-mini", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
53
- { id: "gpt-5.2", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
54
- { id: "gpt-5.2-codex", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
55
- { id: "gpt-5.3-codex", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
56
- { id: "gpt-5.3-codex-spark", inputPer1k: 0.0003, outputPer1k: 0.0012, updatedAt: "2026-03-29" },
57
- { id: "gpt-5.4", inputPer1k: 0.005, outputPer1k: 0.02, updatedAt: "2026-03-29" },
58
-
59
40
  // Google
60
41
  { id: "gemini-2.0-flash", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2025-03-15" },
61
42
  { id: "gemini-flash-2.0", inputPer1k: 0.0001, outputPer1k: 0.0004, updatedAt: "2025-03-15" },
@@ -44,12 +44,6 @@ const MODEL_CAPABILITY_TIER: Record<string, ComplexityTier> = {
44
44
  "claude-3-5-haiku-latest": "light",
45
45
  "claude-3-haiku-20240307": "light",
46
46
  "gpt-4o-mini": "light",
47
- "gpt-4.1-mini": "light",
48
- "gpt-4.1-nano": "light",
49
- "gpt-5-mini": "light",
50
- "gpt-5-nano": "light",
51
- "gpt-5.1-codex-mini": "light",
52
- "gpt-5.3-codex-spark": "light",
53
47
  "gemini-2.0-flash": "light",
54
48
  "gemini-flash-2.0": "light",
55
49
 
@@ -58,8 +52,6 @@ const MODEL_CAPABILITY_TIER: Record<string, ComplexityTier> = {
58
52
  "claude-sonnet-4-5-20250514": "standard",
59
53
  "claude-3-5-sonnet-latest": "standard",
60
54
  "gpt-4o": "standard",
61
- "gpt-4.1": "standard",
62
- "gpt-5.1-codex-max": "standard",
63
55
  "gemini-2.5-pro": "standard",
64
56
  "deepseek-chat": "standard",
65
57
 
@@ -67,17 +59,8 @@ const MODEL_CAPABILITY_TIER: Record<string, ComplexityTier> = {
67
59
  "claude-opus-4-6": "heavy",
68
60
  "claude-3-opus-latest": "heavy",
69
61
  "gpt-4-turbo": "heavy",
70
- "gpt-5": "heavy",
71
- "gpt-5-pro": "heavy",
72
- "gpt-5.1": "heavy",
73
- "gpt-5.2": "heavy",
74
- "gpt-5.2-codex": "heavy",
75
- "gpt-5.3-codex": "heavy",
76
- "gpt-5.4": "heavy",
77
62
  "o1": "heavy",
78
63
  "o3": "heavy",
79
- "o4-mini": "heavy",
80
- "o4-mini-deep-research": "heavy",
81
64
  };
82
65
 
83
66
  // ─── Cost Table (per 1K input tokens, approximate USD) ───────────────────────
@@ -92,23 +75,6 @@ const MODEL_COST_PER_1K_INPUT: Record<string, number> = {
92
75
  "claude-opus-4-6": 0.015,
93
76
  "gpt-4o-mini": 0.00015,
94
77
  "gpt-4o": 0.0025,
95
- "gpt-4.1": 0.002,
96
- "gpt-4.1-mini": 0.0004,
97
- "gpt-4.1-nano": 0.0001,
98
- "gpt-5": 0.01,
99
- "gpt-5-mini": 0.0003,
100
- "gpt-5-nano": 0.0001,
101
- "gpt-5-pro": 0.015,
102
- "gpt-5.1": 0.005,
103
- "gpt-5.1-codex-max": 0.003,
104
- "gpt-5.1-codex-mini": 0.0003,
105
- "gpt-5.2": 0.005,
106
- "gpt-5.2-codex": 0.005,
107
- "gpt-5.3-codex": 0.005,
108
- "gpt-5.3-codex-spark": 0.0003,
109
- "gpt-5.4": 0.005,
110
- "o4-mini": 0.005,
111
- "o4-mini-deep-research": 0.005,
112
78
  "gemini-2.0-flash": 0.0001,
113
79
  "gemini-2.5-pro": 0.00125,
114
80
  "deepseek-chat": 0.00014,
@@ -225,7 +191,7 @@ export function escalateTier(currentTier: ComplexityTier): ComplexityTier | null
225
191
  */
226
192
  export function defaultRoutingConfig(): DynamicRoutingConfig {
227
193
  return {
228
- enabled: true,
194
+ enabled: false,
229
195
  escalate_on_failure: true,
230
196
  budget_pressure: true,
231
197
  cross_provider: true,
@@ -931,23 +931,6 @@ export function nativeResetHard(basePath: string): void {
931
931
  execSync("git reset --hard HEAD", { cwd: basePath, stdio: "pipe" });
932
932
  }
933
933
 
934
- /**
935
- * Get the subject line of a commit (git log -1 --format=%s <ref>).
936
- * Returns empty string if the ref doesn't exist.
937
- */
938
- export function nativeCommitSubject(basePath: string, ref: string): string {
939
- try {
940
- return execFileSync("git", ["log", "-1", "--format=%s", ref], {
941
- cwd: basePath,
942
- stdio: ["ignore", "pipe", "pipe"],
943
- encoding: "utf-8",
944
- env: GIT_NO_PROMPT_ENV,
945
- }).trim();
946
- } catch {
947
- return "";
948
- }
949
- }
950
-
951
934
  /**
952
935
  * Delete a branch.
953
936
  * Native: libgit2 branch delete.
@@ -23,13 +23,7 @@ export function sendDesktopNotification(
23
23
  message: string,
24
24
  level: NotifyLevel = "info",
25
25
  kind: NotificationKind = "complete",
26
- projectName?: string,
27
26
  ): void {
28
- // When a projectName is provided and the title is the default "GSD",
29
- // replace it with a project-qualified title for multi-project clarity.
30
- if (projectName && title === "GSD") {
31
- title = formatNotificationTitle(projectName);
32
- }
33
27
  const loaded = loadEffectiveGSDPreferences()?.preferences;
34
28
  if (!shouldSendDesktopNotification(kind, loaded?.notifications)) return;
35
29
 
@@ -70,16 +64,6 @@ export function shouldSendDesktopNotification(
70
64
  }
71
65
  }
72
66
 
73
- /**
74
- * Format a notification title that includes the project name for context.
75
- * Returns "GSD — projectName" when a project name is available, otherwise "GSD".
76
- */
77
- export function formatNotificationTitle(projectName?: string): string {
78
- const trimmed = projectName?.trim();
79
- if (trimmed) return `GSD — ${trimmed}`;
80
- return "GSD";
81
- }
82
-
83
67
  export function buildDesktopNotificationCommand(
84
68
  platform: NodeJS.Platform,
85
69
  title: string,