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
@@ -4,7 +4,7 @@ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
4
4
  import { join } from "node:path";
5
5
  import { tmpdir } from "node:os";
6
6
 
7
- import { resolvePreferredModelConfig, resolveModelId } from "../auto-model-selection.js";
7
+ import { resolvePreferredModelConfig } from "../auto-model-selection.js";
8
8
 
9
9
  function makeTempDir(prefix: string): string {
10
10
  return mkdtempSync(join(tmpdir(), prefix));
@@ -137,73 +137,3 @@ test("resolvePreferredModelConfig keeps explicit phase models as the ceiling", (
137
137
  rmSync(tempGsdHome, { recursive: true, force: true });
138
138
  }
139
139
  });
140
-
141
- // ─── resolveModelId tests ─────────────────────────────────────────────────
142
-
143
- test("resolveModelId: bare ID resolves to anthropic over claude-code when session is claude-code (#2905)", () => {
144
- const availableModels = [
145
- { id: "claude-sonnet-4-6", provider: "anthropic" },
146
- { id: "claude-sonnet-4-6", provider: "claude-code" },
147
- ];
148
-
149
- // Bug: when currentProvider is "claude-code", bare ID "claude-sonnet-4-6"
150
- // resolves to claude-code/claude-sonnet-4-6 instead of anthropic/claude-sonnet-4-6
151
- const result = resolveModelId("claude-sonnet-4-6", availableModels, "claude-code");
152
- assert.ok(result, "should resolve a model");
153
- assert.equal(result.provider, "anthropic", "bare ID must resolve to anthropic, not claude-code");
154
- });
155
-
156
- test("resolveModelId: bare ID still prefers current provider when it is a first-class API provider", () => {
157
- const availableModels = [
158
- { id: "claude-sonnet-4-6", provider: "anthropic" },
159
- { id: "claude-sonnet-4-6", provider: "bedrock" },
160
- ];
161
-
162
- const result = resolveModelId("claude-sonnet-4-6", availableModels, "bedrock");
163
- assert.ok(result, "should resolve a model");
164
- assert.equal(result.provider, "bedrock", "bare ID should prefer current provider when it is a real API provider");
165
- });
166
-
167
- test("resolveModelId: explicit provider/model format still resolves to claude-code when specified", () => {
168
- const availableModels = [
169
- { id: "claude-sonnet-4-6", provider: "anthropic" },
170
- { id: "claude-sonnet-4-6", provider: "claude-code" },
171
- ];
172
-
173
- const result = resolveModelId("claude-code/claude-sonnet-4-6", availableModels, "anthropic");
174
- assert.ok(result, "should resolve a model");
175
- assert.equal(result.provider, "claude-code", "explicit provider prefix must be respected");
176
- });
177
-
178
- test("resolveModelId: bare ID with only one provider works normally", () => {
179
- const availableModels = [
180
- { id: "claude-sonnet-4-6", provider: "anthropic" },
181
- ];
182
-
183
- const result = resolveModelId("claude-sonnet-4-6", availableModels, "anthropic");
184
- assert.ok(result, "should resolve a model");
185
- assert.equal(result.provider, "anthropic");
186
- });
187
-
188
- test("resolveModelId: bare ID with claude-code as only provider still resolves", () => {
189
- const availableModels = [
190
- { id: "claude-sonnet-4-6", provider: "claude-code" },
191
- ];
192
-
193
- // If claude-code is the ONLY provider for this model, it should still resolve
194
- const result = resolveModelId("claude-sonnet-4-6", availableModels, "claude-code");
195
- assert.ok(result, "should resolve even when only available via claude-code");
196
- assert.equal(result.provider, "claude-code");
197
- });
198
-
199
- test("resolveModelId: anthropic wins over claude-code regardless of list order", () => {
200
- const availableModels = [
201
- { id: "claude-sonnet-4-6", provider: "claude-code" },
202
- { id: "claude-sonnet-4-6", provider: "anthropic" },
203
- ];
204
-
205
- // Even when claude-code appears first in the list, anthropic should win
206
- const result = resolveModelId("claude-sonnet-4-6", availableModels, "claude-code");
207
- assert.ok(result, "should resolve a model");
208
- assert.equal(result.provider, "anthropic", "anthropic must win over claude-code regardless of list order");
209
- });
@@ -19,11 +19,8 @@ import {
19
19
  appendCapture,
20
20
  loadAllCaptures,
21
21
  loadPendingCaptures,
22
- loadActionableCaptures,
23
22
  hasPendingCaptures,
24
23
  markCaptureResolved,
25
- markCaptureExecuted,
26
- stampCaptureMilestone,
27
24
  resolveCapturesPath,
28
25
  parseTriageOutput,
29
26
  } from "../captures.ts";
@@ -422,103 +419,3 @@ test("triage: parseTriageOutput preserves affectedFiles and targetSlice", () =>
422
419
  assert.strictEqual(results[1].targetSlice, "S04");
423
420
  assert.strictEqual(results[1].affectedFiles, undefined);
424
421
  });
425
-
426
- // ─── Stale Quick-Task Captures (#2872) ────────────────────────────────────────
427
-
428
- test("captures: markCaptureResolved stores milestone ID when provided", (t) => {
429
- const tmp = makeTempDir("cap-milestone");
430
- t.after(() => rmSync(tmp, { recursive: true, force: true }));
431
-
432
- const id = appendCapture(tmp, "fix dialog width");
433
- markCaptureResolved(tmp, id, "quick-task", "widen the dialog", "small fix", "M003");
434
-
435
- const all = loadAllCaptures(tmp);
436
- assert.strictEqual(all.length, 1);
437
- assert.strictEqual(all[0].resolvedInMilestone, "M003", "should store milestone ID");
438
- });
439
-
440
- test("captures: loadActionableCaptures excludes captures resolved in prior milestones", (t) => {
441
- const tmp = makeTempDir("cap-stale-filter");
442
- t.after(() => rmSync(tmp, { recursive: true, force: true }));
443
-
444
- // Capture resolved in M003 (prior milestone)
445
- const id1 = appendCapture(tmp, "dialog too narrow");
446
- markCaptureResolved(tmp, id1, "quick-task", "widen it", "small fix", "M003");
447
-
448
- // Capture resolved in M004 (current milestone)
449
- const id2 = appendCapture(tmp, "button misaligned");
450
- markCaptureResolved(tmp, id2, "quick-task", "fix alignment", "css fix", "M004");
451
-
452
- // Capture resolved without milestone context (legacy)
453
- const id3 = appendCapture(tmp, "typo in label");
454
- markCaptureResolved(tmp, id3, "quick-task", "fix typo", "trivial");
455
-
456
- // When loading for M004, only M004 and no-milestone captures should be returned
457
- const actionable = loadActionableCaptures(tmp, "M004");
458
- const ids = actionable.map(c => c.id);
459
-
460
- assert.ok(!ids.includes(id1), "should exclude capture resolved in M003");
461
- assert.ok(ids.includes(id2), "should include capture resolved in M004");
462
- assert.ok(ids.includes(id3), "should include capture with no milestone (legacy)");
463
- });
464
-
465
- test("captures: loadActionableCaptures without milestone returns all actionable", (t) => {
466
- const tmp = makeTempDir("cap-no-milestone-filter");
467
- t.after(() => rmSync(tmp, { recursive: true, force: true }));
468
-
469
- const id1 = appendCapture(tmp, "issue one");
470
- markCaptureResolved(tmp, id1, "quick-task", "fix it", "small", "M003");
471
-
472
- const id2 = appendCapture(tmp, "issue two");
473
- markCaptureResolved(tmp, id2, "inject", "inject it", "needed", "M004");
474
-
475
- // Without milestone filter, all actionable captures are returned (backward compat)
476
- const actionable = loadActionableCaptures(tmp);
477
- assert.strictEqual(actionable.length, 2, "should return all actionable without filter");
478
- });
479
-
480
- test("captures: loadActionableCaptures excludes already-executed captures", (t) => {
481
- const tmp = makeTempDir("cap-executed-filter");
482
- t.after(() => rmSync(tmp, { recursive: true, force: true }));
483
-
484
- const id1 = appendCapture(tmp, "already done");
485
- markCaptureResolved(tmp, id1, "quick-task", "fix it", "small", "M004");
486
- markCaptureExecuted(tmp, id1);
487
-
488
- const id2 = appendCapture(tmp, "still pending");
489
- markCaptureResolved(tmp, id2, "quick-task", "fix it too", "small", "M004");
490
-
491
- const actionable = loadActionableCaptures(tmp, "M004");
492
- assert.strictEqual(actionable.length, 1, "should exclude executed capture");
493
- assert.strictEqual(actionable[0].id, id2);
494
- });
495
-
496
- test("captures: stampCaptureMilestone adds milestone to capture missing it", (t) => {
497
- const tmp = makeTempDir("cap-stamp-milestone");
498
- t.after(() => rmSync(tmp, { recursive: true, force: true }));
499
-
500
- const id = appendCapture(tmp, "fix alignment");
501
- markCaptureResolved(tmp, id, "quick-task", "fix it", "small");
502
-
503
- // Before stamping, no milestone
504
- let all = loadAllCaptures(tmp);
505
- assert.strictEqual(all[0].resolvedInMilestone, undefined, "should have no milestone initially");
506
-
507
- stampCaptureMilestone(tmp, id, "M004");
508
-
509
- all = loadAllCaptures(tmp);
510
- assert.strictEqual(all[0].resolvedInMilestone, "M004", "should have milestone after stamping");
511
- });
512
-
513
- test("captures: stampCaptureMilestone is no-op if milestone already present", (t) => {
514
- const tmp = makeTempDir("cap-stamp-noop");
515
- t.after(() => rmSync(tmp, { recursive: true, force: true }));
516
-
517
- const id = appendCapture(tmp, "fix alignment");
518
- markCaptureResolved(tmp, id, "quick-task", "fix it", "small", "M003");
519
-
520
- stampCaptureMilestone(tmp, id, "M004");
521
-
522
- const all = loadAllCaptures(tmp);
523
- assert.strictEqual(all[0].resolvedInMilestone, "M003", "should keep original milestone");
524
- });
@@ -237,33 +237,6 @@ describe("complete-milestone", () => {
237
237
  }
238
238
  });
239
239
 
240
- test("step 11 specifies write tool for PROJECT.md update (#2946)", () => {
241
- const prompt = loadPromptFromWorktree("complete-milestone", {
242
- workingDirectory: "/tmp/test-project",
243
- milestoneId: "M001",
244
- milestoneTitle: "Tool Guidance Test",
245
- roadmapPath: ".gsd/milestones/M001/M001-ROADMAP.md",
246
- inlinedContext: "context",
247
- milestoneSummaryPath: ".gsd/milestones/M001/M001-SUMMARY.md",
248
- skillActivation: "",
249
- });
250
-
251
- // Step 11 must explicitly name the `write` tool so the LLM doesn't
252
- // confuse it with `edit` (which requires path + oldText + newText).
253
- // See: https://github.com/gsd-build/gsd-2/issues/2946
254
- assert.ok(
255
- /PROJECT\.md.*\bwrite\b/i.test(prompt) || /\bwrite\b.*PROJECT\.md/i.test(prompt),
256
- "step 11 must name the `write` tool when updating PROJECT.md",
257
- );
258
-
259
- // The prompt must NOT leave tool choice ambiguous for PROJECT.md
260
- // Verify it mentions the required parameter (`content` or `path`)
261
- assert.ok(
262
- prompt.includes("`.gsd/PROJECT.md`") || prompt.includes('".gsd/PROJECT.md"'),
263
- "step 11 must reference the PROJECT.md path explicitly",
264
- );
265
- });
266
-
267
240
  test("deriveState completing-milestone integration", async () => {
268
241
  const { deriveState, isMilestoneComplete } = await import("../state.ts");
269
242
  const { invalidateAllCaches: invalidateAllCachesDynamic } = await import("../cache.ts");
@@ -406,27 +406,6 @@ console.log('\n=== complete-slice: handler with missing roadmap ===');
406
406
  cleanup(dbPath);
407
407
  }
408
408
 
409
- // ═══════════════════════════════════════════════════════════════════════════
410
- // complete-slice: step 13 specifies write tool for PROJECT.md (#2946)
411
- // ═══════════════════════════════════════════════════════════════════════════
412
-
413
- console.log('\n=== complete-slice: step 13 specifies write tool for PROJECT.md (#2946) ===');
414
- {
415
- const promptPath = path.join(
416
- path.dirname(new URL(import.meta.url).pathname),
417
- '..', 'prompts', 'complete-slice.md',
418
- );
419
- const prompt = fs.readFileSync(promptPath, 'utf-8');
420
-
421
- // Step 13 must explicitly name the `write` tool so the LLM doesn't
422
- // confuse it with `edit` (which requires path + oldText + newText).
423
- // See: https://github.com/gsd-build/gsd-2/issues/2946
424
- const mentionsWriteTool =
425
- /PROJECT\.md.*\bwrite\b/i.test(prompt) ||
426
- /\bwrite\b.*PROJECT\.md/i.test(prompt);
427
- assertTrue(mentionsWriteTool, 'step 13 must name the `write` tool when updating PROJECT.md');
428
- }
429
-
430
409
  // ═══════════════════════════════════════════════════════════════════════════
431
410
 
432
411
  report();
@@ -416,18 +416,23 @@ describe('db-writer', () => {
416
416
  }
417
417
  });
418
418
 
419
- test('updateRequirementInDb — upserts when not found (#2919)', async () => {
419
+ test('updateRequirementInDb — not found', async () => {
420
420
  const tmpDir = makeTmpDir();
421
421
  const dbPath = path.join(tmpDir, '.gsd', 'gsd.db');
422
422
  openDatabase(dbPath);
423
423
 
424
424
  try {
425
- // Previously threw; now upserts a skeleton requirement with the provided updates
426
- await updateRequirementInDb('R999', { status: 'validated' }, tmpDir);
427
- const created = getRequirementById('R999');
428
- assert.ok(created !== null, 'R999 should be created by upsert');
429
- assert.deepStrictEqual(created!.status, 'validated', 'Upserted requirement should have validated status');
430
- assert.deepStrictEqual(created!.id, 'R999', 'Upserted requirement should keep the provided ID');
425
+ let threw = false;
426
+ try {
427
+ await updateRequirementInDb('R999', { status: 'validated' }, tmpDir);
428
+ } catch (err) {
429
+ threw = true;
430
+ assert.ok(
431
+ (err as Error).message.includes('R999'),
432
+ 'error message mentions the missing ID',
433
+ );
434
+ }
435
+ assert.ok(threw, 'throws when requirement not found');
431
436
  } finally {
432
437
  closeDatabase();
433
438
  cleanupDir(tmpDir);
@@ -4,7 +4,7 @@ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
4
4
  import { join } from 'node:path';
5
5
  import { tmpdir } from 'node:os';
6
6
 
7
- import { deriveState, invalidateStateCache, _deriveStateImpl, deriveStateFromDb, isGhostMilestone } from '../state.ts';
7
+ import { deriveState, invalidateStateCache, _deriveStateImpl, deriveStateFromDb } from '../state.ts';
8
8
  import {
9
9
  openDatabase,
10
10
  closeDatabase,
@@ -934,8 +934,8 @@ describe('derive-state-db', async () => {
934
934
  }
935
935
  });
936
936
 
937
- // ─── Test 21: Ghost milestone skipped (no DB row, no worktree) ─────────
938
- test('derive-state-db: ghost milestone skipped when no DB row and no worktree', async () => {
937
+ // ─── Test 21: Ghost milestone skipped ─────────────────────────────────
938
+ test('derive-state-db: ghost milestone skipped', async () => {
939
939
  const base = createFixtureBase();
940
940
  try {
941
941
  // Ghost: milestone dir exists with only META.json, no context/roadmap/summary
@@ -948,7 +948,8 @@ describe('derive-state-db', async () => {
948
948
  const fileState = await _deriveStateImpl(base);
949
949
 
950
950
  openDatabase(':memory:');
951
- // Only insert M002M001 has no DB row (simulates row loss / never inserted)
951
+ // Ghost milestone in DB — no slices, status active
952
+ insertMilestone({ id: 'M001', title: '', status: 'active' });
952
953
  insertMilestone({ id: 'M002', title: 'Real', status: 'active' });
953
954
 
954
955
  invalidateStateCache();
@@ -1050,78 +1051,4 @@ describe('derive-state-db', async () => {
1050
1051
  closeDatabase();
1051
1052
  }
1052
1053
  });
1053
-
1054
- // ─── Queued milestone with worktree not flagged as ghost (#2921) ──────
1055
- test('derive-state-db: queued milestone with worktree not flagged as ghost (#2921)', async () => {
1056
- const base = createFixtureBase();
1057
- try {
1058
- // M001: complete milestone with summary
1059
- writeFile(base, 'milestones/M001/M001-SUMMARY.md', '# M001 Summary\n\nDone.');
1060
-
1061
- // M002: queued milestone — directory + slices dir exists, but no content files.
1062
- // This is what happens when ensureMilestoneDbRow creates M002 but the DB row
1063
- // is lost during worktree teardown.
1064
- mkdirSync(join(base, '.gsd', 'milestones', 'M002', 'slices'), { recursive: true });
1065
-
1066
- // A worktree exists for M002, proving it's a legitimate milestone
1067
- mkdirSync(join(base, '.gsd', 'worktrees', 'M002'), { recursive: true });
1068
-
1069
- // isGhostMilestone should NOT treat M002 as ghost when worktree exists
1070
- assert.ok(!isGhostMilestone(base, 'M002'), 'ghost-wt: M002 with worktree is NOT a ghost');
1071
-
1072
- // DB has M001 complete but M002 row was lost
1073
- openDatabase(':memory:');
1074
- insertMilestone({ id: 'M001', title: 'First', status: 'complete' });
1075
- // No M002 row — simulates DB row loss during worktree teardown
1076
-
1077
- invalidateStateCache();
1078
- const dbState = await deriveStateFromDb(base);
1079
-
1080
- // M002 should be reconciled from disk (not skipped as ghost) and become active
1081
- const m002Entry = dbState.registry.find(e => e.id === 'M002');
1082
- assert.ok(m002Entry !== undefined, 'ghost-wt: M002 should be in registry');
1083
- assert.deepStrictEqual(dbState.activeMilestone?.id, 'M002', 'ghost-wt: M002 should be active');
1084
- // Should NOT be phase: complete
1085
- assert.notEqual(dbState.phase, 'complete', 'ghost-wt: phase should not be complete');
1086
-
1087
- closeDatabase();
1088
- } finally {
1089
- closeDatabase();
1090
- cleanup(base);
1091
- }
1092
- });
1093
-
1094
- // ─── Queued milestone with DB row not flagged as ghost (#2921) ────────
1095
- test('derive-state-db: queued milestone with DB row not flagged as ghost (#2921)', async () => {
1096
- const base = createFixtureBase();
1097
- try {
1098
- // M001: complete milestone with summary
1099
- writeFile(base, 'milestones/M001/M001-SUMMARY.md', '# M001 Summary\n\nDone.');
1100
-
1101
- // M002: queued milestone — directory exists, no content files, but has DB row
1102
- mkdirSync(join(base, '.gsd', 'milestones', 'M002', 'slices'), { recursive: true });
1103
-
1104
- // DB has both M001 complete and M002 queued
1105
- openDatabase(':memory:');
1106
- insertMilestone({ id: 'M001', title: 'First', status: 'complete' });
1107
- insertMilestone({ id: 'M002', title: 'Second', status: 'queued' });
1108
-
1109
- // isGhostMilestone should NOT treat M002 as ghost when DB row exists
1110
- assert.ok(!isGhostMilestone(base, 'M002'), 'ghost-dbrow: M002 with DB row is NOT a ghost');
1111
-
1112
- invalidateStateCache();
1113
- const dbState = await deriveStateFromDb(base);
1114
-
1115
- // M002 should not be skipped
1116
- const m002Entry = dbState.registry.find(e => e.id === 'M002');
1117
- assert.ok(m002Entry !== undefined, 'ghost-dbrow: M002 should be in registry');
1118
- assert.deepStrictEqual(dbState.activeMilestone?.id, 'M002', 'ghost-dbrow: M002 should be active');
1119
- assert.notEqual(dbState.phase, 'complete', 'ghost-dbrow: phase should not be complete');
1120
-
1121
- closeDatabase();
1122
- } finally {
1123
- closeDatabase();
1124
- cleanup(base);
1125
- }
1126
- });
1127
1054
  });
@@ -930,35 +930,6 @@ slice: S01
930
930
  }
931
931
  });
932
932
 
933
- // ─── Test: queued milestone with worktree not flagged as ghost (#2921) ──
934
- test('queued milestone with worktree not flagged as ghost (#2921)', async () => {
935
- const base = createFixtureBase();
936
- try {
937
- // Create a milestone directory with only an empty slices subdir — no content files.
938
- // This would normally be a ghost, but it has a worktree directory.
939
- const milestoneDir = join(base, '.gsd', 'milestones', 'M002');
940
- mkdirSync(join(milestoneDir, 'slices'), { recursive: true });
941
-
942
- // Create a worktree directory for M002, simulating an active worktree
943
- const worktreeDir = join(base, '.gsd', 'worktrees', 'M002');
944
- mkdirSync(worktreeDir, { recursive: true });
945
-
946
- // isGhostMilestone should return false because the worktree exists
947
- assert.ok(!isGhostMilestone(base, 'M002'), 'M002 with worktree should NOT be a ghost');
948
-
949
- // Also create a completed M001 so deriveState has something before M002
950
- writeMilestoneSummary(base, 'M001', '# M001 Summary\n\nDone.');
951
-
952
- const state = await deriveState(base);
953
- // M002 should appear in the registry (not filtered as ghost)
954
- const m002Entry = state.registry.find(e => e.id === 'M002');
955
- assert.ok(m002Entry !== undefined, 'M002 should be in registry when worktree exists');
956
- assert.deepStrictEqual(state.activeMilestone?.id, 'M002', 'M002 should be active milestone');
957
- } finally {
958
- cleanup(base);
959
- }
960
- });
961
-
962
933
  // ─── Test: zero-slice roadmap → pre-planning, not blocked (#1785) ────
963
934
  test('zero-slice roadmap → pre-planning, not blocked (#1785)', async () => {
964
935
  const base = createFixtureBase();
@@ -238,44 +238,4 @@ describe("discuss-queued-milestones (#2307)", () => {
238
238
  "queued milestone picker must label entries with [queued] to distinguish from active",
239
239
  );
240
240
  });
241
-
242
- // ─── #3150: allDiscussed early-return must not block queued milestone discussion ──
243
-
244
- test("12. allDiscussed path checks for pending milestones before returning (#3150)", () => {
245
- const source = readGuidedFlowSource();
246
-
247
- // Extract the allDiscussed block — the if (allDiscussed) { ... } body
248
- const allDiscussedMatch = source.match(
249
- /const allDiscussed = pendingSlices\.every\([\s\S]*?\n if \(allDiscussed\) \{([\s\S]*?)\n \}/,
250
- );
251
- assert.ok(!!allDiscussedMatch, "allDiscussed guard block must exist in showDiscuss()");
252
-
253
- if (allDiscussedMatch) {
254
- const body = allDiscussedMatch[1];
255
- // The fix must check for pending milestones and route to showDiscussQueuedMilestone
256
- assert.ok(
257
- body.includes("pending") && body.includes("showDiscussQueuedMilestone"),
258
- "allDiscussed block must check for pending milestones and call showDiscussQueuedMilestone before returning (#3150)",
259
- );
260
- }
261
- });
262
-
263
- test("13. pendingSlices.length===0 path checks for pending milestones before returning (#3150)", () => {
264
- const source = readGuidedFlowSource();
265
-
266
- // Find the pendingSlices.length === 0 guard block
267
- const zeroSlicesMatch = source.match(
268
- /if \(pendingSlices\.length === 0\) \{([\s\S]*?)\n \}/,
269
- );
270
- assert.ok(!!zeroSlicesMatch, "pendingSlices.length === 0 guard block must exist in showDiscuss()");
271
-
272
- if (zeroSlicesMatch) {
273
- const body = zeroSlicesMatch[1];
274
- // The fix must check for pending milestones and route to showDiscussQueuedMilestone
275
- assert.ok(
276
- body.includes("pending") && body.includes("showDiscussQueuedMilestone"),
277
- "pendingSlices.length===0 block must check for pending milestones and call showDiscussQueuedMilestone before returning (#3150)",
278
- );
279
- }
280
- });
281
241
  });
@@ -87,26 +87,7 @@ export function load(url, context, nextLoad) {
87
87
  emitDecoratorMetadata: true,
88
88
  },
89
89
  });
90
- // Inject CJS-compatible globals (__dirname, __filename, require) so that
91
- // workspace packages compiled as ESM can still use them. This avoids the
92
- // need for import.meta.url behind indirect invocation patterns that fail in
93
- // CJS and in dynamically-created scopes.
94
- // Only inject globals that the source file doesn't already declare itself.
95
- const preambleLines = [
96
- 'import { fileURLToPath as __preamble_fUTP } from "node:url";',
97
- 'import { dirname as __preamble_dn } from "node:path";',
98
- 'import { createRequire as __preamble_cR } from "node:module";',
99
- ];
100
- if (!outputText.includes('const __filename') && !outputText.includes('let __filename')) {
101
- preambleLines.push('const __filename = __preamble_fUTP(import.meta.url);');
102
- }
103
- if (!outputText.includes('const __dirname') && !outputText.includes('let __dirname')) {
104
- preambleLines.push('const __dirname = __preamble_dn(__preamble_fUTP(import.meta.url));');
105
- }
106
- if (!outputText.includes('const require') && !outputText.includes('let require')) {
107
- preambleLines.push('const require = __preamble_cR(import.meta.url);');
108
- }
109
- return { format: 'module', source: preambleLines.join('\n') + '\n' + outputText, shortCircuit: true };
90
+ return { format: 'module', source: outputText, shortCircuit: true };
110
91
  }
111
92
  return nextLoad(url, context);
112
93
  }
@@ -484,120 +484,3 @@ test("runProviderChecks uses object provider field for anthropic-vertex models",
484
484
  rmSync(repo, { recursive: true, force: true });
485
485
  rmSync(tmpHome, { recursive: true, force: true });
486
486
  });
487
-
488
- // ─── Cross-provider routing: Codex & Gemini CLI (#2922) ────────────────────
489
-
490
- test("runProviderChecks reports ok for Google via google-gemini-cli auth.json (#2922)", () => {
491
- const repo = realpathSync(mkdtempSync(join(tmpdir(), "gsd-providers-gemini-cli-repo-")));
492
- mkdirSync(join(repo, ".gsd"), { recursive: true });
493
- writeFileSync(
494
- join(repo, ".gsd", "PREFERENCES.md"),
495
- [
496
- "---",
497
- "models:",
498
- " execution: gemini-2.5-pro",
499
- "---",
500
- "",
501
- ].join("\n"),
502
- );
503
-
504
- const tmpHome = realpathSync(mkdtempSync(join(tmpdir(), "gsd-providers-gemini-cli-home-")));
505
- const agentDir = join(tmpHome, ".gsd", "agent");
506
- mkdirSync(agentDir, { recursive: true });
507
-
508
- // google-gemini-cli OAuth in auth.json (no google API key)
509
- const authData = {
510
- "google-gemini-cli": { type: "oauth", apiKey: "ya29.gemini-cli-token", expires: Date.now() + 3_600_000 },
511
- };
512
- writeFileSync(join(agentDir, "auth.json"), JSON.stringify(authData));
513
-
514
- withEnv({
515
- HOME: tmpHome,
516
- GEMINI_API_KEY: undefined,
517
- GOOGLE_API_KEY: undefined,
518
- }, () => {
519
- withCwd(repo, () => {
520
- const results = runProviderChecks();
521
- const google = results.find(r => r.name === "google");
522
- assert.ok(google, "google result should exist");
523
- assert.equal(google!.status, "ok", "should be ok when google-gemini-cli auth is available (#2922)");
524
- assert.ok(google!.message.includes("Google Gemini CLI"), "should mention Gemini CLI as the source (#2922)");
525
- });
526
- });
527
-
528
- rmSync(repo, { recursive: true, force: true });
529
- rmSync(tmpHome, { recursive: true, force: true });
530
- });
531
-
532
- test("runProviderChecks reports ok for OpenAI via openai-codex auth.json (#2922)", () => {
533
- const repo = realpathSync(mkdtempSync(join(tmpdir(), "gsd-providers-codex-repo-")));
534
- mkdirSync(join(repo, ".gsd"), { recursive: true });
535
- writeFileSync(
536
- join(repo, ".gsd", "PREFERENCES.md"),
537
- [
538
- "---",
539
- "models:",
540
- " execution: gpt-4o",
541
- "---",
542
- "",
543
- ].join("\n"),
544
- );
545
-
546
- const tmpHome = realpathSync(mkdtempSync(join(tmpdir(), "gsd-providers-codex-home-")));
547
- const agentDir = join(tmpHome, ".gsd", "agent");
548
- mkdirSync(agentDir, { recursive: true });
549
-
550
- // openai-codex OAuth in auth.json (no openai API key)
551
- const authData = {
552
- "openai-codex": { type: "oauth", apiKey: "codex-token", expires: Date.now() + 3_600_000 },
553
- };
554
- writeFileSync(join(agentDir, "auth.json"), JSON.stringify(authData));
555
-
556
- withEnv({
557
- HOME: tmpHome,
558
- OPENAI_API_KEY: undefined,
559
- // Clear Copilot env vars so it doesn't route through Copilot
560
- COPILOT_GITHUB_TOKEN: undefined,
561
- GH_TOKEN: undefined,
562
- GITHUB_TOKEN: undefined,
563
- }, () => {
564
- withCwd(repo, () => {
565
- const results = runProviderChecks();
566
- const openai = results.find(r => r.name === "openai");
567
- assert.ok(openai, "openai result should exist");
568
- assert.equal(openai!.status, "ok", "should be ok when openai-codex auth is available (#2922)");
569
- assert.ok(openai!.message.includes("Codex"), "should mention Codex as the source (#2922)");
570
- });
571
- });
572
-
573
- rmSync(repo, { recursive: true, force: true });
574
- rmSync(tmpHome, { recursive: true, force: true });
575
- });
576
-
577
- test("PROVIDER_ROUTES includes google-gemini-cli as route for google (#2922)", async () => {
578
- const { readFileSync: readFS } = await import("node:fs");
579
- const { dirname: dirn, join: joinPath } = await import("node:path");
580
- const { fileURLToPath: fileUrl } = await import("node:url");
581
- const __dir = dirn(fileUrl(import.meta.url));
582
- const src = readFS(joinPath(__dir, "..", "doctor-providers.ts"), "utf-8");
583
-
584
- // PROVIDER_ROUTES must map google -> [..., "google-gemini-cli"]
585
- assert.ok(
586
- src.includes('"google-gemini-cli"'),
587
- 'PROVIDER_ROUTES must include "google-gemini-cli" as a route (#2922)',
588
- );
589
- });
590
-
591
- test("PROVIDER_ROUTES includes openai-codex as route for openai (#2922)", async () => {
592
- const { readFileSync: readFS } = await import("node:fs");
593
- const { dirname: dirn, join: joinPath } = await import("node:path");
594
- const { fileURLToPath: fileUrl } = await import("node:url");
595
- const __dir = dirn(fileUrl(import.meta.url));
596
- const src = readFS(joinPath(__dir, "..", "doctor-providers.ts"), "utf-8");
597
-
598
- // PROVIDER_ROUTES must map openai -> [..., "openai-codex"]
599
- assert.ok(
600
- src.includes('"openai-codex"'),
601
- 'PROVIDER_ROUTES must include "openai-codex" as a route (#2922)',
602
- );
603
- });