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
@@ -48,45 +48,30 @@ function getClaudePath() {
48
48
  return cachedClaudePath;
49
49
  }
50
50
  // ---------------------------------------------------------------------------
51
- // Prompt construction
51
+ // Prompt extraction
52
52
  // ---------------------------------------------------------------------------
53
53
  /**
54
- * Extract text content from a single message regardless of content shape.
54
+ * Extract the last user prompt text from GSD's context messages.
55
+ * The SDK manages its own conversation history — we only send
56
+ * the latest user message as the prompt.
55
57
  */
56
- function extractMessageText(msg) {
57
- if (typeof msg.content === "string")
58
- return msg.content;
59
- if (Array.isArray(msg.content)) {
60
- const textParts = msg.content
61
- .filter((part) => part.type === "text")
62
- .map((part) => part.text ?? part.thinking ?? "");
63
- if (textParts.length > 0)
64
- return textParts.join("\n");
58
+ function extractLastUserPrompt(context) {
59
+ for (let i = context.messages.length - 1; i >= 0; i--) {
60
+ const msg = context.messages[i];
61
+ if (msg.role === "user") {
62
+ if (typeof msg.content === "string")
63
+ return msg.content;
64
+ if (Array.isArray(msg.content)) {
65
+ const textParts = msg.content
66
+ .filter((part) => part.type === "text")
67
+ .map((part) => part.text);
68
+ if (textParts.length > 0)
69
+ return textParts.join("\n");
70
+ }
71
+ }
65
72
  }
66
73
  return "";
67
74
  }
68
- /**
69
- * Build a full conversational prompt from GSD's context messages.
70
- *
71
- * Previous behaviour sent only the last user message, making every SDK
72
- * call effectively stateless. This version serialises the complete
73
- * conversation history (system prompt + all user/assistant turns) so
74
- * Claude Code has full context for multi-turn continuity.
75
- */
76
- export function buildPromptFromContext(context) {
77
- const parts = [];
78
- if (context.systemPrompt) {
79
- parts.push(`[System]\n${context.systemPrompt}`);
80
- }
81
- for (const msg of context.messages) {
82
- const text = extractMessageText(msg);
83
- if (!text)
84
- continue;
85
- const label = msg.role === "user" ? "User" : msg.role === "assistant" ? "Assistant" : "System";
86
- parts.push(`[${label}]\n${text}`);
87
- }
88
- return parts.join("\n\n");
89
- }
90
75
  // ---------------------------------------------------------------------------
91
76
  // Error helper
92
77
  // ---------------------------------------------------------------------------
@@ -117,29 +102,6 @@ export function makeStreamExhaustedErrorMessage(model, lastTextContent) {
117
102
  return message;
118
103
  }
119
104
  // ---------------------------------------------------------------------------
120
- // SDK options builder
121
- // ---------------------------------------------------------------------------
122
- /**
123
- * Build the options object passed to the Claude Agent SDK's `query()` call.
124
- *
125
- * Extracted for testability — callers can verify session persistence,
126
- * beta flags, and other configuration without mocking the full SDK.
127
- */
128
- export function buildSdkOptions(modelId, prompt) {
129
- return {
130
- pathToClaudeCodeExecutable: getClaudePath(),
131
- model: modelId,
132
- includePartialMessages: true,
133
- persistSession: true,
134
- cwd: process.cwd(),
135
- permissionMode: "bypassPermissions",
136
- allowDangerouslySkipPermissions: true,
137
- settingSources: ["project"],
138
- systemPrompt: { type: "preset", preset: "claude_code" },
139
- betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
140
- };
141
- }
142
- // ---------------------------------------------------------------------------
143
105
  // streamSimple implementation
144
106
  // ---------------------------------------------------------------------------
145
107
  /**
@@ -171,13 +133,21 @@ async function pumpSdkMessages(model, context, options, stream) {
171
133
  if (options?.signal) {
172
134
  options.signal.addEventListener("abort", () => controller.abort(), { once: true });
173
135
  }
174
- const prompt = buildPromptFromContext(context);
175
- const sdkOpts = buildSdkOptions(modelId, prompt);
136
+ const prompt = extractLastUserPrompt(context);
176
137
  const queryResult = sdk.query({
177
138
  prompt,
178
139
  options: {
179
- ...sdkOpts,
140
+ pathToClaudeCodeExecutable: getClaudePath(),
141
+ model: modelId,
142
+ includePartialMessages: true,
143
+ persistSession: false,
180
144
  abortController: controller,
145
+ cwd: process.cwd(),
146
+ permissionMode: "bypassPermissions",
147
+ allowDangerouslySkipPermissions: true,
148
+ settingSources: ["project"],
149
+ systemPrompt: { type: "preset", preset: "claude_code" },
150
+ betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
181
151
  },
182
152
  });
183
153
  // Emit start with an empty partial
@@ -204,6 +174,8 @@ async function pumpSdkMessages(model, context, options, stream) {
204
174
  // -- Streaming partial messages --
205
175
  case "stream_event": {
206
176
  const partial = msg;
177
+ if (partial.parent_tool_use_id !== null)
178
+ break; // skip subagent
207
179
  const event = partial.event;
208
180
  // New assistant turn starts with message_start
209
181
  if (event.type === "message_start") {
@@ -228,6 +200,8 @@ async function pumpSdkMessages(model, context, options, stream) {
228
200
  // -- Complete assistant message (non-streaming fallback) --
229
201
  case "assistant": {
230
202
  const sdkAssistant = msg;
203
+ if (sdkAssistant.parent_tool_use_id !== null)
204
+ break;
231
205
  // Capture text content from complete messages
232
206
  for (const block of sdkAssistant.message.content) {
233
207
  if (block.type === "text") {
@@ -241,6 +215,9 @@ async function pumpSdkMessages(model, context, options, stream) {
241
215
  }
242
216
  // -- User message (synthetic tool result — signals turn boundary) --
243
217
  case "user": {
218
+ const userMsg = msg;
219
+ if (userMsg.parent_tool_use_id !== null)
220
+ break;
244
221
  // Capture content from the completed turn before resetting
245
222
  if (builder) {
246
223
  for (const block of builder.message.content) {
@@ -7,6 +7,6 @@
7
7
  "requires": { "platform": ">=2.29.0" },
8
8
  "provides": {
9
9
  "tools": ["resolve_library", "get_library_docs"],
10
- "hooks": ["session_start", "session_shutdown"]
10
+ "hooks": ["session_start"]
11
11
  }
12
12
  }
@@ -31,9 +31,6 @@ function hydrateProcessEnv(key, value) {
31
31
  process.env[key] = value;
32
32
  }
33
33
  async function writeEnvKey(filePath, key, value) {
34
- if (typeof value !== "string") {
35
- throw new TypeError(`writeEnvKey expects a string value for key "${key}", got ${typeof value}`);
36
- }
37
34
  let content = "";
38
35
  try {
39
36
  content = await readFile(filePath, "utf8");
@@ -337,19 +334,19 @@ export async function collectSecretsFromManifest(base, milestoneId, ctx) {
337
334
  for (const { key, value } of collected) {
338
335
  const entry = manifest.entries.find((e) => e.key === key);
339
336
  if (entry) {
340
- entry.status = value != null ? "collected" : "skipped";
337
+ entry.status = value !== null ? "collected" : "skipped";
341
338
  }
342
339
  }
343
340
  // (i) Write manifest back to disk
344
341
  await writeFile(manifestPath, formatSecretsManifest(manifest), "utf8");
345
342
  // (j) Apply collected values to destination
346
- const provided = collected.filter((c) => c.value != null);
343
+ const provided = collected.filter((c) => c.value !== null);
347
344
  const { applied } = await applySecrets(provided, destination, {
348
345
  envFilePath: resolve(ctx.cwd, ".env"),
349
346
  });
350
347
  const skipped = [
351
348
  ...alreadySkipped,
352
- ...collected.filter((c) => c.value == null).map((c) => c.key),
349
+ ...collected.filter((c) => c.value === null).map((c) => c.key),
353
350
  ];
354
351
  return { applied, skipped, existingSkipped };
355
352
  }
@@ -406,8 +403,8 @@ export default function secureEnv(pi) {
406
403
  const value = await collectOneSecret(ctx, i, params.keys.length, item.key, item.hint, item.guidance);
407
404
  collected.push({ key: item.key, value });
408
405
  }
409
- const provided = collected.filter((c) => c.value != null);
410
- const skipped = collected.filter((c) => c.value == null).map((c) => c.key);
406
+ const provided = collected.filter((c) => c.value !== null);
407
+ const skipped = collected.filter((c) => c.value === null).map((c) => c.key);
411
408
  // Apply to destination via shared helper
412
409
  const { applied, errors } = await applySecrets(provided, destination, {
413
410
  envFilePath: resolve(ctx.cwd, params.envFilePath ?? ".env"),
@@ -7,6 +7,6 @@
7
7
  "requires": { "platform": ">=2.29.0" },
8
8
  "provides": {
9
9
  "tools": ["google_search"],
10
- "hooks": ["session_start", "session_shutdown"]
10
+ "hooks": ["session_start"]
11
11
  }
12
12
  }
@@ -26,7 +26,7 @@ async function getClient() {
26
26
  */
27
27
  async function searchWithOAuth(query, accessToken, projectId, signal) {
28
28
  const model = process.env.GEMINI_SEARCH_MODEL || "gemini-2.5-flash";
29
- const url = `https://cloudcode-pa.googleapis.com/v1internal:streamGenerateContent?alt=sse`;
29
+ const url = `https://cloudcode-pa.googleapis.com/v1internal:streamGenerateContent`;
30
30
  const GEMINI_CLI_HEADERS = {
31
31
  ideType: "IDE_UNSPECIFIED",
32
32
  platform: "PLATFORM_UNSPECIFIED",
@@ -49,7 +49,6 @@ async function searchWithOAuth(query, accessToken, projectId, signal) {
49
49
  contents: [{ parts: [{ text: query }] }],
50
50
  tools: [{ googleSearch: {} }],
51
51
  },
52
- userAgent: "pi-coding-agent",
53
52
  }),
54
53
  signal,
55
54
  });
@@ -13,7 +13,7 @@ import { runUnit } from "./run-unit.js";
13
13
  import { debugLog } from "../debug-logger.js";
14
14
  import { PROJECT_FILES } from "../detection.js";
15
15
  import { MergeConflictError } from "../git-service.js";
16
- import { join, basename } from "node:path";
16
+ import { join } from "node:path";
17
17
  import { existsSync, cpSync } from "node:fs";
18
18
  import { logWarning, logError } from "../workflow-logger.js";
19
19
  import { gsdRoot } from "../paths.js";
@@ -146,7 +146,7 @@ export async function runPreDispatch(ic, loopState) {
146
146
  if (mid && s.currentMilestoneId && mid !== s.currentMilestoneId) {
147
147
  deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: ic.nextSeq(), eventType: "milestone-transition", data: { from: s.currentMilestoneId, to: mid } });
148
148
  ctx.ui.notify(`Milestone ${s.currentMilestoneId} complete. Advancing to ${mid}: ${midTitle}.`, "info");
149
- deps.sendDesktopNotification("GSD", `Milestone ${s.currentMilestoneId} complete!`, "success", "milestone", basename(s.originalBasePath || s.basePath));
149
+ deps.sendDesktopNotification("GSD", `Milestone ${s.currentMilestoneId} complete!`, "success", "milestone");
150
150
  deps.logCmuxEvent(prefs, `Milestone ${s.currentMilestoneId} complete. Advancing to ${mid}.`, "success");
151
151
  const vizPrefs = prefs;
152
152
  if (vizPrefs?.auto_visualize) {
@@ -255,7 +255,7 @@ export async function runPreDispatch(ic, loopState) {
255
255
  }
256
256
  // PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
257
257
  }
258
- deps.sendDesktopNotification("GSD", "All milestones complete!", "success", "milestone", basename(s.originalBasePath || s.basePath));
258
+ deps.sendDesktopNotification("GSD", "All milestones complete!", "success", "milestone");
259
259
  deps.logCmuxEvent(prefs, "All milestones complete.", "success");
260
260
  await deps.stopAuto(ctx, pi, "All milestones complete");
261
261
  }
@@ -269,7 +269,7 @@ export async function runPreDispatch(ic, loopState) {
269
269
  const blockerMsg = `Blocked: ${state.blockers.join(", ")}`;
270
270
  await deps.stopAuto(ctx, pi, blockerMsg);
271
271
  ctx.ui.notify(`${blockerMsg}. Fix and run /gsd auto.`, "warning");
272
- deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention", basename(s.originalBasePath || s.basePath));
272
+ deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention");
273
273
  deps.logCmuxEvent(prefs, blockerMsg, "error");
274
274
  }
275
275
  else {
@@ -326,7 +326,7 @@ export async function runPreDispatch(ic, loopState) {
326
326
  }
327
327
  // PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
328
328
  }
329
- deps.sendDesktopNotification("GSD", `Milestone ${mid} complete!`, "success", "milestone", basename(s.originalBasePath || s.basePath));
329
+ deps.sendDesktopNotification("GSD", `Milestone ${mid} complete!`, "success", "milestone");
330
330
  deps.logCmuxEvent(prefs, `Milestone ${mid} complete.`, "success");
331
331
  await closeoutAndStop(ctx, pi, s, deps, `Milestone ${mid} complete`);
332
332
  debugLog("autoLoop", { phase: "exit", reason: "milestone-complete" });
@@ -338,7 +338,7 @@ export async function runPreDispatch(ic, loopState) {
338
338
  const blockerMsg = `Blocked: ${state.blockers.join(", ")}`;
339
339
  await closeoutAndStop(ctx, pi, s, deps, blockerMsg);
340
340
  ctx.ui.notify(`${blockerMsg}. Fix and run /gsd auto.`, "warning");
341
- deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention", basename(s.originalBasePath || s.basePath));
341
+ deps.sendDesktopNotification("GSD", blockerMsg, "error", "attention");
342
342
  deps.logCmuxEvent(prefs, blockerMsg, "error");
343
343
  debugLog("autoLoop", { phase: "exit", reason: "blocked" });
344
344
  deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: ic.nextSeq(), eventType: "terminal", data: { reason: "blocked", blockers: state.blockers } });
@@ -520,28 +520,28 @@ export async function runGuards(ic, mid) {
520
520
  // 100% — special enforcement logic (halt/pause/warn)
521
521
  const msg = `Budget ceiling ${deps.formatCost(budgetCeiling)} reached (spent ${deps.formatCost(totalCost)}).`;
522
522
  if (budgetEnforcementAction === "halt") {
523
- deps.sendDesktopNotification("GSD", msg, "error", "budget", basename(s.originalBasePath || s.basePath));
523
+ deps.sendDesktopNotification("GSD", msg, "error", "budget");
524
524
  await deps.stopAuto(ctx, pi, "Budget ceiling reached");
525
525
  debugLog("autoLoop", { phase: "exit", reason: "budget-halt" });
526
526
  return { action: "break", reason: "budget-halt" };
527
527
  }
528
528
  if (budgetEnforcementAction === "pause") {
529
529
  ctx.ui.notify(`${msg} Pausing auto-mode — /gsd auto to override and continue.`, "warning");
530
- deps.sendDesktopNotification("GSD", msg, "warning", "budget", basename(s.originalBasePath || s.basePath));
530
+ deps.sendDesktopNotification("GSD", msg, "warning", "budget");
531
531
  deps.logCmuxEvent(prefs, msg, "warning");
532
532
  await deps.pauseAuto(ctx, pi);
533
533
  debugLog("autoLoop", { phase: "exit", reason: "budget-pause" });
534
534
  return { action: "break", reason: "budget-pause" };
535
535
  }
536
536
  ctx.ui.notify(`${msg} Continuing (enforcement: warn).`, "warning");
537
- deps.sendDesktopNotification("GSD", msg, "warning", "budget", basename(s.originalBasePath || s.basePath));
537
+ deps.sendDesktopNotification("GSD", msg, "warning", "budget");
538
538
  deps.logCmuxEvent(prefs, msg, "warning");
539
539
  }
540
540
  else if (threshold.pct < 100) {
541
541
  // Sub-100% — simple notification
542
542
  const msg = `${threshold.label}: ${deps.formatCost(totalCost)} / ${deps.formatCost(budgetCeiling)}`;
543
543
  ctx.ui.notify(msg, threshold.notifyLevel);
544
- deps.sendDesktopNotification("GSD", msg, threshold.notifyLevel, "budget", basename(s.originalBasePath || s.basePath));
544
+ deps.sendDesktopNotification("GSD", msg, threshold.notifyLevel, "budget");
545
545
  deps.logCmuxEvent(prefs, msg, threshold.cmuxLevel);
546
546
  }
547
547
  }
@@ -561,7 +561,7 @@ export async function runGuards(ic, mid) {
561
561
  contextUsage.percent >= contextThreshold) {
562
562
  const msg = `Context window at ${contextUsage.percent}% (threshold: ${contextThreshold}%). Pausing to prevent truncated output.`;
563
563
  ctx.ui.notify(`${msg} Run /gsd auto to continue (will start fresh session).`, "warning");
564
- deps.sendDesktopNotification("GSD", `Context ${contextUsage.percent}% — paused`, "warning", "attention", basename(s.originalBasePath || s.basePath));
564
+ deps.sendDesktopNotification("GSD", `Context ${contextUsage.percent}% — paused`, "warning", "attention");
565
565
  await deps.pauseAuto(ctx, pi);
566
566
  debugLog("autoLoop", { phase: "exit", reason: "context-window" });
567
567
  return { action: "break", reason: "context-window" };
@@ -646,12 +646,6 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
646
646
  lastProgressKind: "dispatch",
647
647
  recoveryAttempts: 0, // Reset so re-dispatched units get full recovery budget (#2322)
648
648
  });
649
- // Select and apply model (with tier escalation on retry — normal units only)
650
- const modelResult = await deps.selectAndApplyModel(ctx, pi, unitType, unitId, s.basePath, prefs, s.verbose, s.autoModeStartModel, sidecarItem ? undefined : { isRetry, previousTier });
651
- s.currentUnitRouting =
652
- modelResult.routing;
653
- s.currentUnitModel =
654
- modelResult.appliedModel;
655
649
  // Status bar + progress widget
656
650
  ctx.ui.setStatus("gsd-auto", "auto");
657
651
  if (mid)
@@ -715,6 +709,12 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
715
709
  const msg = reorderErr instanceof Error ? reorderErr.message : String(reorderErr);
716
710
  logWarning("engine", "Prompt reorder failed", { error: msg });
717
711
  }
712
+ // Select and apply model (with tier escalation on retry — normal units only)
713
+ const modelResult = await deps.selectAndApplyModel(ctx, pi, unitType, unitId, s.basePath, prefs, s.verbose, s.autoModeStartModel, sidecarItem ? undefined : { isRetry, previousTier });
714
+ s.currentUnitRouting =
715
+ modelResult.routing;
716
+ s.currentUnitModel =
717
+ modelResult.appliedModel;
718
718
  // Apply sidecar/pre-dispatch hook model override (takes priority over standard model selection)
719
719
  const hookModelOverride = sidecarItem?.model ?? iterData.hookModelOverride;
720
720
  if (hookModelOverride) {
@@ -806,11 +806,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
806
806
  // ── Immediate unit closeout (metrics, activity log, memory) ────────
807
807
  // Run right after runUnit() returns so telemetry is never lost to a
808
808
  // crash between iterations.
809
- // Guard: stopAuto() may have nulled s.currentUnit via s.reset() while
810
- // this coroutine was suspended at `await runUnit(...)` (#2939).
811
- if (s.currentUnit) {
812
- await deps.closeoutUnit(ctx, s.basePath, unitType, unitId, s.currentUnit.startedAt, deps.buildSnapshotOpts(unitType, unitId));
813
- }
809
+ await deps.closeoutUnit(ctx, s.basePath, unitType, unitId, s.currentUnit.startedAt, deps.buildSnapshotOpts(unitType, unitId));
814
810
  // ── Zero tool-call guard (#1833) ──────────────────────────────────
815
811
  // An execute-task agent that completes with 0 tool calls made no
816
812
  // real changes — its summary is hallucinated. Treat as failed so
@@ -818,7 +814,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
818
814
  if (unitType === "execute-task") {
819
815
  const currentLedger = deps.getLedger();
820
816
  if (currentLedger?.units) {
821
- const lastUnit = [...currentLedger.units].reverse().find((u) => u.type === unitType && u.id === unitId && u.startedAt === s.currentUnit?.startedAt);
817
+ const lastUnit = [...currentLedger.units].reverse().find((u) => u.type === unitType && u.id === unitId && u.startedAt === s.currentUnit.startedAt);
822
818
  if (lastUnit && lastUnit.toolCalls === 0) {
823
819
  debugLog("runUnitPhase", {
824
820
  phase: "zero-tool-calls",
@@ -829,7 +825,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
829
825
  ctx.ui.notify(`${unitType} ${unitId} completed with 0 tool calls — hallucinated summary, will retry`, "warning");
830
826
  // Fall through to next iteration where dispatch will re-derive
831
827
  // and re-dispatch this task.
832
- return { action: "next", data: { unitStartedAt: s.currentUnit?.startedAt } };
828
+ return { action: "next", data: { unitStartedAt: s.currentUnit.startedAt } };
833
829
  }
834
830
  }
835
831
  }
@@ -844,7 +840,7 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
844
840
  s.unitRecoveryCount.delete(`${unitType}/${unitId}`);
845
841
  }
846
842
  deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: ic.nextSeq(), eventType: "unit-end", data: { unitType, unitId, status: unitResult.status, artifactVerified, ...(unitResult.errorContext ? { errorContext: unitResult.errorContext } : {}) }, causedBy: { flowId: ic.flowId, seq: unitStartSeq } });
847
- return { action: "next", data: { unitStartedAt: s.currentUnit?.startedAt } };
843
+ return { action: "next", data: { unitStartedAt: s.currentUnit.startedAt } };
848
844
  }
849
845
  // ─── runFinalize ──────────────────────────────────────────────────────────────
850
846
  /**
@@ -42,7 +42,7 @@ export function resolveExpectedArtifactPath(unitType, unitId, base) {
42
42
  }
43
43
  case "run-uat": {
44
44
  const dir = resolveSlicePath(base, mid, sid);
45
- return dir ? join(dir, buildSliceFileName(sid, "ASSESSMENT")) : null;
45
+ return dir ? join(dir, buildSliceFileName(sid, "UAT")) : null;
46
46
  }
47
47
  case "execute-task": {
48
48
  const dir = resolveSlicePath(base, mid, sid);
@@ -105,7 +105,7 @@ export function diagnoseExpectedArtifact(unitType, unitId, base) {
105
105
  case "reassess-roadmap":
106
106
  return `${relSliceFile(base, mid, sid, "ASSESSMENT")} (roadmap reassessment)`;
107
107
  case "run-uat":
108
- return `${relSliceFile(base, mid, sid, "ASSESSMENT")} (UAT assessment result)`;
108
+ return `${relSliceFile(base, mid, sid, "UAT")} (UAT result)`;
109
109
  case "validate-milestone":
110
110
  return `${relMilestoneFile(base, mid, "VALIDATION")} (milestone validation report)`;
111
111
  case "complete-milestone":
@@ -458,13 +458,6 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
458
458
  : theme.fg("dim", elapsed))
459
459
  : "";
460
460
  lines.push(rightAlign(headerLeft, headerRight, width));
461
- // Worktree/branch right-aligned below header
462
- if (worktreeName && cachedBranch) {
463
- lines.push(rightAlign("", theme.fg("dim", `${worktreeName} (${cachedBranch})`), width));
464
- }
465
- else if (cachedBranch) {
466
- lines.push(rightAlign("", theme.fg("dim", cachedBranch), width));
467
- }
468
461
  // Show health signal details when degraded (yellow/red)
469
462
  if (score.level !== "green" && score.signals.length > 0 && widgetMode !== "min") {
470
463
  // Show up to 3 most relevant signals in compact form
@@ -571,10 +564,10 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
571
564
  const hasContext = !!(mid || (slice && unitType !== "research-milestone" && unitType !== "plan-milestone"));
572
565
  if (mid) {
573
566
  const modelTag = modelDisplay ? theme.fg("muted", ` ${modelDisplay}`) : "";
574
- lines.push(truncateToWidth(`${pad}${theme.fg("dim", mid.title)}${modelTag}`, width, "…"));
567
+ lines.push(truncateToWidth(`${pad}${theme.fg("dim", mid.title)}${modelTag}`, width));
575
568
  }
576
569
  if (slice && unitType !== "research-milestone" && unitType !== "plan-milestone") {
577
- lines.push(truncateToWidth(`${pad}${theme.fg("text", theme.bold(`${slice.id}: ${slice.title}`))}`, width, "…"));
570
+ lines.push(truncateToWidth(`${pad}${theme.fg("text", theme.bold(`${slice.id}: ${slice.title}`))}`, width));
578
571
  }
579
572
  if (hasContext)
580
573
  lines.push("");
@@ -612,11 +605,6 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
612
605
  // Build right column: task checklist
613
606
  const rightLines = [];
614
607
  const maxVisibleTasks = 8;
615
- // Max visible chars for task title text (before ANSI theming)
616
- const maxTaskTitleLen = 45;
617
- function truncTitle(s) {
618
- return s.length > maxTaskTitleLen ? s.slice(0, maxTaskTitleLen - 1) + "…" : s;
619
- }
620
608
  function formatTaskLine(t, isCurrent) {
621
609
  const glyph = t.done
622
610
  ? theme.fg("success", "*")
@@ -628,12 +616,11 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
628
616
  : t.done
629
617
  ? theme.fg("muted", t.id)
630
618
  : theme.fg("dim", t.id);
631
- const short = truncTitle(t.title);
632
619
  const title = isCurrent
633
- ? theme.fg("text", short)
620
+ ? theme.fg("text", t.title)
634
621
  : t.done
635
- ? theme.fg("muted", short)
636
- : theme.fg("text", short);
622
+ ? theme.fg("muted", t.title)
623
+ : theme.fg("text", t.title);
637
624
  return `${glyph} ${id}: ${title}`;
638
625
  }
639
626
  if (useTwoCol && taskDetailsCol) {
@@ -655,7 +642,7 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
655
642
  if (maxRows > 0) {
656
643
  lines.push("");
657
644
  for (let i = 0; i < maxRows; i++) {
658
- const left = padToWidth(truncateToWidth(leftLines[i] ?? "", leftColWidth, "…"), leftColWidth);
645
+ const left = padToWidth(truncateToWidth(leftLines[i] ?? "", leftColWidth), leftColWidth);
659
646
  const right = rightLines[i] ?? "";
660
647
  lines.push(`${left}${right}`);
661
648
  }
@@ -665,7 +652,7 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
665
652
  if (leftLines.length > 0) {
666
653
  lines.push("");
667
654
  for (const l of leftLines)
668
- lines.push(truncateToWidth(l, width, "…"));
655
+ lines.push(truncateToWidth(l, width));
669
656
  }
670
657
  }
671
658
  // ── Footer: simplified stats + pwd + last commit + hints ────────
@@ -695,28 +682,24 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
695
682
  lines.push(rightAlign("", theme.fg("dim", cachedRtkLabel), width));
696
683
  }
697
684
  }
698
- // Last commit info
685
+ // PWD line with last commit info right-aligned
699
686
  const lastCommit = getLastCommit(accessors.getBasePath());
700
- const maxCommitLen = 65;
701
- const commitMsg = lastCommit
702
- ? lastCommit.message.length > maxCommitLen
703
- ? lastCommit.message.slice(0, maxCommitLen - 1) + "…"
704
- : lastCommit.message
705
- : "";
706
- // Hints line
707
- const hintParts = [];
708
- hintParts.push("esc pause");
709
- hintParts.push(process.platform === "darwin" ? "⌃⌥G dashboard" : "Ctrl+Alt+G dashboard");
710
- const hintStr = theme.fg("dim", hintParts.join(" | "));
711
687
  const commitStr = lastCommit
712
- ? theme.fg("dim", `${lastCommit.timeAgo} ago: ${commitMsg}`)
688
+ ? theme.fg("dim", `${lastCommit.timeAgo} ago: ${lastCommit.message}`)
713
689
  : "";
690
+ const pwdStr = theme.fg("dim", widgetPwd);
714
691
  if (commitStr) {
715
- lines.push(rightAlign(`${pad}${commitStr}`, hintStr, width));
692
+ lines.push(rightAlign(`${pad}${pwdStr}`, truncateToWidth(commitStr, Math.floor(width * 0.45)), width));
716
693
  }
717
694
  else {
718
- lines.push(rightAlign("", hintStr, width));
695
+ lines.push(`${pad}${pwdStr}`);
719
696
  }
697
+ // Hints line
698
+ const hintParts = [];
699
+ hintParts.push("esc pause");
700
+ hintParts.push(process.platform === "darwin" ? "⌃⌥G dashboard" : "Ctrl+Alt+G dashboard");
701
+ const hintStr = theme.fg("dim", hintParts.join(" | "));
702
+ lines.push(rightAlign("", hintStr, width));
720
703
  lines.push(...ui.bar());
721
704
  cachedLines = lines;
722
705
  cachedWidth = width;
@@ -740,12 +723,12 @@ function rightAlign(left, right, width) {
740
723
  const leftVis = visibleWidth(left);
741
724
  const rightVis = visibleWidth(right);
742
725
  const gap = Math.max(1, width - leftVis - rightVis);
743
- return truncateToWidth(left + " ".repeat(gap) + right, width, "…");
726
+ return truncateToWidth(left + " ".repeat(gap) + right, width);
744
727
  }
745
728
  /** Pad a string with trailing spaces to fill exactly `colWidth` (ANSI-aware). */
746
729
  function padToWidth(s, colWidth) {
747
730
  const vis = visibleWidth(s);
748
731
  if (vis >= colWidth)
749
- return truncateToWidth(s, colWidth, "…");
732
+ return truncateToWidth(s, colWidth);
750
733
  return s + " ".repeat(colWidth - vis);
751
734
  }
@@ -13,7 +13,6 @@ import { isDbAvailable, getMilestoneSlices, getPendingGates, markAllGatesOmitted
13
13
  import { extractVerdict, isAcceptableUatVerdict } from "./verdict-parser.js";
14
14
  import { gsdRoot, resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveTaskFile, relSliceFile, buildMilestoneFileName, } from "./paths.js";
15
15
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
- import { logError } from "./workflow-logger.js";
17
16
  import { join } from "node:path";
18
17
  import { hasImplementationArtifacts } from "./auto-recovery.js";
19
18
  import { buildDiscussMilestonePrompt, buildResearchMilestonePrompt, buildPlanMilestonePrompt, buildResearchSlicePrompt, buildPlanSlicePrompt, buildExecuteTaskPrompt, buildCompleteSlicePrompt, buildCompleteMilestonePrompt, buildValidateMilestonePrompt, buildReplanSlicePrompt, buildRunUatPrompt, buildReassessRoadmapPrompt, buildRewriteDocsPrompt, buildReactiveExecutePrompt, buildGateEvaluatePrompt, checkNeedsReassessment, checkNeedsRunUat, } from "./auto-prompts.js";
@@ -60,20 +59,6 @@ export function setRewriteCount(basePath, count) {
60
59
  mkdirSync(join(gsdRoot(basePath), "runtime"), { recursive: true });
61
60
  writeFileSync(filePath, JSON.stringify({ count, updatedAt: new Date().toISOString() }) + "\n");
62
61
  }
63
- // ─── Helpers ─────────────────────────────────────────────────────────────
64
- /**
65
- * Returns true when the verification_operational value indicates that no
66
- * operational verification is needed. Covers common phrasings the planning
67
- * agent may use: "None", "None required", "N/A", "Not applicable", etc.
68
- *
69
- * @see https://github.com/gsd-build/gsd-2/issues/2931
70
- */
71
- export function isVerificationNotApplicable(value) {
72
- const v = (value ?? "").toLowerCase().trim();
73
- if (!v || v === "none")
74
- return true;
75
- return /^(?:none[\s._-]*(?:required|needed|planned)?|n\/?a|not[\s._-]+(?:applicable|required|needed)|no[\s._-]+operational[\s\S]*)$/i.test(v);
76
- }
77
62
  // ─── Rules ────────────────────────────────────────────────────────────────
78
63
  export const DISPATCH_RULES = [
79
64
  {
@@ -398,7 +383,7 @@ export const DISPATCH_RULES = [
398
383
  }
399
384
  catch (err) {
400
385
  // Non-fatal — fall through to sequential execution
401
- logError("dispatch", "reactive graph derivation failed", { error: err.message });
386
+ process.stderr.write(`gsd-reactive: graph derivation failed: ${err.message}\n`);
402
387
  return null;
403
388
  }
404
389
  },
@@ -541,7 +526,7 @@ export const DISPATCH_RULES = [
541
526
  if (isDbAvailable()) {
542
527
  const milestone = getMilestone(mid);
543
528
  if (milestone?.verification_operational &&
544
- !isVerificationNotApplicable(milestone.verification_operational)) {
529
+ milestone.verification_operational.toLowerCase() !== "none") {
545
530
  const validationPath = resolveMilestoneFile(basePath, mid, "VALIDATION");
546
531
  if (validationPath) {
547
532
  const validationContent = await loadFile(validationPath);
@@ -163,30 +163,7 @@ export function resolveModelId(modelId, availableModels, currentProvider) {
163
163
  return availableModels.find(m => m.id.toLowerCase() === lower
164
164
  || `${m.provider}/${m.id}`.toLowerCase() === lower);
165
165
  }
166
- // Bare ID — resolve with provider precedence to avoid silent misrouting.
167
- // Extension providers (e.g. claude-code) expose the same model IDs as their
168
- // upstream API providers but route through a subprocess with different
169
- // context, tool visibility, and cost characteristics (#2905). Bare IDs in
170
- // PREFERENCES.md must resolve to the canonical API provider, not to an
171
- // extension wrapper that happens to be the current session provider.
172
- const candidates = availableModels.filter(m => m.id === modelId);
173
- if (candidates.length === 0)
174
- return undefined;
175
- if (candidates.length === 1)
176
- return candidates[0];
177
- // Extension / CLI-wrapper providers that should never win bare-ID resolution
178
- // when a first-class API provider also offers the same model.
179
- const EXTENSION_PROVIDERS = new Set(["claude-code"]);
180
- // Prefer currentProvider only when it is a first-class API provider
181
- if (currentProvider && !EXTENSION_PROVIDERS.has(currentProvider)) {
182
- const providerMatch = candidates.find(m => m.provider === currentProvider);
183
- if (providerMatch)
184
- return providerMatch;
185
- }
186
- // Prefer "anthropic" as the canonical provider for Anthropic models
187
- const anthropicMatch = candidates.find(m => m.provider === "anthropic");
188
- if (anthropicMatch)
189
- return anthropicMatch;
190
- // Fall back to first non-extension candidate, or any candidate
191
- return candidates.find(m => !EXTENSION_PROVIDERS.has(m.provider)) ?? candidates[0];
166
+ // Bare ID — prefer current provider, then first available
167
+ const exactProviderMatch = availableModels.find(m => m.id === modelId && m.provider === currentProvider);
168
+ return exactProviderMatch ?? availableModels.find(m => m.id === modelId);
192
169
  }