gsd-pi 2.76.0-dev.fe143342a → 2.77.0-dev.538325aea

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 (802) hide show
  1. package/README.md +17 -35
  2. package/dist/claude-cli-check.js +32 -3
  3. package/dist/cli.js +13 -21
  4. package/dist/extension-registry.js +1 -1
  5. package/dist/headless-ui.d.ts +1 -1
  6. package/dist/headless.js +2 -4
  7. package/dist/loader.js +0 -1
  8. package/dist/onboarding.js +50 -5
  9. package/dist/provider-migrations.d.ts +2 -2
  10. package/dist/provider-migrations.js +2 -1
  11. package/dist/remote-questions-config.js +1 -1
  12. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  13. package/dist/resources/extensions/aws-auth/index.js +2 -1
  14. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +6 -9
  15. package/dist/resources/extensions/bg-shell/process-manager.js +2 -1
  16. package/dist/resources/extensions/browser-tools/index.js +0 -1
  17. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  18. package/dist/resources/extensions/claude-code-cli/partial-builder.js +106 -17
  19. package/dist/resources/extensions/claude-code-cli/readiness.js +4 -3
  20. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +28 -23
  21. package/dist/resources/extensions/gsd/auto/loop.js +9 -0
  22. package/dist/resources/extensions/gsd/auto/phases.js +54 -4
  23. package/dist/resources/extensions/gsd/auto/run-unit.js +38 -2
  24. package/dist/resources/extensions/gsd/auto/session.js +18 -1
  25. package/dist/resources/extensions/gsd/auto-dispatch.js +56 -17
  26. package/dist/resources/extensions/gsd/auto-model-selection.js +1 -1
  27. package/dist/resources/extensions/gsd/auto-post-unit.js +59 -2
  28. package/dist/resources/extensions/gsd/auto-prompts.js +14 -0
  29. package/dist/resources/extensions/gsd/auto-recovery.js +69 -1
  30. package/dist/resources/extensions/gsd/auto-start.js +35 -38
  31. package/dist/resources/extensions/gsd/auto-worktree.js +51 -53
  32. package/dist/resources/extensions/gsd/auto.js +55 -16
  33. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +17 -1
  34. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +17 -6
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +34 -2
  36. package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
  37. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
  38. package/dist/resources/extensions/gsd/dispatch-guard.js +44 -3
  39. package/dist/resources/extensions/gsd/gitignore.js +1 -0
  40. package/dist/resources/extensions/gsd/gsd-db.js +90 -30
  41. package/dist/resources/extensions/gsd/guided-flow.js +191 -2
  42. package/dist/resources/extensions/gsd/health-widget.js +4 -1
  43. package/dist/resources/extensions/gsd/key-manager.js +22 -0
  44. package/dist/resources/extensions/gsd/model-router.js +36 -3
  45. package/dist/resources/extensions/gsd/pre-execution-checks.js +31 -6
  46. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
  47. package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
  48. package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  49. package/dist/resources/extensions/gsd/prompts/system.md +1 -0
  50. package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
  51. package/dist/resources/extensions/gsd/safety/file-change-validator.js +12 -4
  52. package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
  53. package/dist/resources/extensions/gsd/token-counter.js +22 -5
  54. package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
  55. package/dist/resources/extensions/gsd/uok/plan-v2.js +20 -3
  56. package/dist/resources/extensions/gsd/worktree-resolver.js +50 -10
  57. package/dist/resources/extensions/mcp-client/index.js +1 -1
  58. package/dist/resources/extensions/ollama/index.js +1 -2
  59. package/dist/resources/extensions/ollama/ollama-chat-provider.js +5 -15
  60. package/dist/resources/extensions/remote-questions/config.js +12 -1
  61. package/dist/resources/extensions/universal-config/index.js +1 -1
  62. package/dist/resources/skills/verify-before-complete/SKILL.md +2 -1
  63. package/dist/resources/skills/write-docs/SKILL.md +2 -1
  64. package/dist/security-overrides.d.ts +4 -1
  65. package/dist/security-overrides.js +16 -3
  66. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  67. package/dist/web/standalone/.next/BUILD_ID +1 -1
  68. package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
  69. package/dist/web/standalone/.next/build-manifest.json +3 -3
  70. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  71. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  72. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  73. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  74. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  75. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  76. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  77. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  80. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  81. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  82. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  84. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  85. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  91. package/dist/web/standalone/.next/server/app/index.html +1 -1
  92. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
  99. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  100. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  102. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  103. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  104. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  105. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  106. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +9 -0
  107. package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-1832629448831fdc.js} +1 -1
  108. package/dist/web-mode.js +1 -1
  109. package/dist/welcome-screen.js +19 -15
  110. package/dist/wizard.js +4 -5
  111. package/package.json +25 -7
  112. package/packages/daemon/package.json +2 -2
  113. package/packages/gsd-agent-core/dist/agent-session.d.ts +716 -0
  114. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -0
  115. package/packages/gsd-agent-core/dist/agent-session.js +2595 -0
  116. package/packages/gsd-agent-core/dist/agent-session.js.map +1 -0
  117. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +52 -0
  118. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +1 -0
  119. package/packages/gsd-agent-core/dist/artifact-manager.js +118 -0
  120. package/packages/gsd-agent-core/dist/artifact-manager.js.map +1 -0
  121. package/packages/gsd-agent-core/dist/bash-executor.d.ts +57 -0
  122. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +1 -0
  123. package/packages/gsd-agent-core/dist/bash-executor.js +282 -0
  124. package/packages/gsd-agent-core/dist/bash-executor.js.map +1 -0
  125. package/packages/gsd-agent-core/dist/blob-store.d.ts +39 -0
  126. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +1 -0
  127. package/packages/gsd-agent-core/dist/blob-store.js +151 -0
  128. package/packages/gsd-agent-core/dist/blob-store.js.map +1 -0
  129. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +90 -0
  130. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +1 -0
  131. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +207 -0
  132. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +1 -0
  133. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +137 -0
  134. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +1 -0
  135. package/packages/gsd-agent-core/dist/compaction/compaction.js +621 -0
  136. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +1 -0
  137. package/packages/gsd-agent-core/dist/compaction/index.d.ts +7 -0
  138. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +1 -0
  139. package/packages/gsd-agent-core/dist/compaction/index.js +7 -0
  140. package/packages/gsd-agent-core/dist/compaction/index.js.map +1 -0
  141. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +78 -0
  142. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +1 -0
  143. package/packages/gsd-agent-core/dist/compaction/utils.js +263 -0
  144. package/packages/gsd-agent-core/dist/compaction/utils.js.map +1 -0
  145. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +90 -0
  146. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +1 -0
  147. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +338 -0
  148. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +1 -0
  149. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +43 -0
  150. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +1 -0
  151. package/packages/gsd-agent-core/dist/contextual-tips.js +208 -0
  152. package/packages/gsd-agent-core/dist/contextual-tips.js.map +1 -0
  153. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +18 -0
  154. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +1 -0
  155. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +250 -0
  156. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +1 -0
  157. package/packages/gsd-agent-core/dist/export-html/index.d.ts +37 -0
  158. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +1 -0
  159. package/packages/gsd-agent-core/dist/export-html/index.js +257 -0
  160. package/packages/gsd-agent-core/dist/export-html/index.js.map +1 -0
  161. package/packages/gsd-agent-core/dist/export-html/template.css +971 -0
  162. package/packages/gsd-agent-core/dist/export-html/template.html +54 -0
  163. package/packages/gsd-agent-core/dist/export-html/template.js +1583 -0
  164. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +38 -0
  165. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +1 -0
  166. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +70 -0
  167. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +1 -0
  168. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +1213 -0
  169. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +6 -0
  170. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +75 -0
  171. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +1 -0
  172. package/packages/gsd-agent-core/dist/fallback-resolver.js +118 -0
  173. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +1 -0
  174. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +44 -0
  175. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +1 -0
  176. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +99 -0
  177. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +1 -0
  178. package/packages/gsd-agent-core/dist/index.d.ts +14 -0
  179. package/packages/gsd-agent-core/dist/index.d.ts.map +1 -0
  180. package/packages/gsd-agent-core/dist/index.js +19 -0
  181. package/packages/gsd-agent-core/dist/index.js.map +1 -0
  182. package/packages/gsd-agent-core/dist/keybindings.d.ts +47 -0
  183. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +1 -0
  184. package/packages/gsd-agent-core/dist/keybindings.js +156 -0
  185. package/packages/gsd-agent-core/dist/keybindings.js.map +1 -0
  186. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +42 -0
  187. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +1 -0
  188. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +204 -0
  189. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +1 -0
  190. package/packages/gsd-agent-core/dist/retry-handler.d.ts +128 -0
  191. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +1 -0
  192. package/packages/gsd-agent-core/dist/retry-handler.js +518 -0
  193. package/packages/gsd-agent-core/dist/retry-handler.js.map +1 -0
  194. package/packages/gsd-agent-core/dist/sdk.d.ts +159 -0
  195. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -0
  196. package/packages/gsd-agent-core/dist/sdk.js +375 -0
  197. package/packages/gsd-agent-core/dist/sdk.js.map +1 -0
  198. package/packages/gsd-agent-core/dist/system-prompt.d.ts +28 -0
  199. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +1 -0
  200. package/packages/gsd-agent-core/dist/system-prompt.js +201 -0
  201. package/packages/gsd-agent-core/dist/system-prompt.js.map +1 -0
  202. package/packages/gsd-agent-core/package.json +25 -0
  203. package/packages/gsd-agent-core/scripts/copy-assets.cjs +43 -0
  204. package/packages/gsd-agent-core/src/agent-session.test.ts +169 -0
  205. package/packages/gsd-agent-core/src/agent-session.ts +3358 -0
  206. package/packages/gsd-agent-core/src/artifact-manager.ts +126 -0
  207. package/packages/gsd-agent-core/src/bash-executor.ts +352 -0
  208. package/packages/gsd-agent-core/src/blob-store.ts +154 -0
  209. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +317 -0
  210. package/packages/gsd-agent-core/src/compaction/compaction.ts +855 -0
  211. package/packages/gsd-agent-core/src/compaction/index.ts +7 -0
  212. package/packages/gsd-agent-core/src/compaction/utils.ts +312 -0
  213. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +449 -0
  214. package/packages/gsd-agent-core/src/contextual-tips.ts +232 -0
  215. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +259 -0
  216. package/packages/gsd-agent-core/src/export-html/index.ts +345 -0
  217. package/packages/gsd-agent-core/src/export-html/template.css +971 -0
  218. package/packages/gsd-agent-core/src/export-html/template.html +54 -0
  219. package/packages/gsd-agent-core/src/export-html/template.js +1583 -0
  220. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +114 -0
  221. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +1213 -0
  222. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +6 -0
  223. package/packages/gsd-agent-core/src/fallback-resolver.ts +193 -0
  224. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +120 -0
  225. package/packages/gsd-agent-core/src/index.ts +68 -0
  226. package/packages/gsd-agent-core/src/keybindings.ts +220 -0
  227. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +284 -0
  228. package/packages/gsd-agent-core/src/retry-handler.ts +620 -0
  229. package/packages/gsd-agent-core/src/sdk.ts +550 -0
  230. package/packages/gsd-agent-core/src/system-prompt.ts +270 -0
  231. package/packages/gsd-agent-core/tsconfig.json +28 -0
  232. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +1 -0
  233. package/packages/gsd-agent-modes/dist/cli/args.d.ts +58 -0
  234. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +1 -0
  235. package/packages/gsd-agent-modes/dist/cli/args.js +324 -0
  236. package/packages/gsd-agent-modes/dist/cli/args.js.map +1 -0
  237. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +13 -0
  238. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +1 -0
  239. package/packages/gsd-agent-modes/dist/cli/config-selector.js +32 -0
  240. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +1 -0
  241. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +15 -0
  242. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +1 -0
  243. package/packages/gsd-agent-modes/dist/cli/file-processor.js +86 -0
  244. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +1 -0
  245. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +21 -0
  246. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +1 -0
  247. package/packages/gsd-agent-modes/dist/cli/list-models.js +114 -0
  248. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +1 -0
  249. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +10 -0
  250. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +1 -0
  251. package/packages/gsd-agent-modes/dist/cli/session-picker.js +37 -0
  252. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +1 -0
  253. package/packages/gsd-agent-modes/dist/index.d.ts +7 -0
  254. package/packages/gsd-agent-modes/dist/index.d.ts.map +1 -0
  255. package/packages/gsd-agent-modes/dist/index.js +7 -0
  256. package/packages/gsd-agent-modes/dist/index.js.map +1 -0
  257. package/packages/gsd-agent-modes/dist/main.d.ts +8 -0
  258. package/packages/gsd-agent-modes/dist/main.d.ts.map +1 -0
  259. package/packages/gsd-agent-modes/dist/main.js +491 -0
  260. package/packages/gsd-agent-modes/dist/main.js.map +1 -0
  261. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +34 -0
  262. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +1 -0
  263. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +330 -0
  264. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +1 -0
  265. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +29 -0
  266. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  267. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +141 -0
  268. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -0
  269. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +36 -0
  270. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  271. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +157 -0
  272. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -0
  273. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  274. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  275. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +48 -0
  276. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  277. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  278. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  279. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +43 -0
  280. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  281. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +11 -0
  282. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +1 -0
  283. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +47 -0
  284. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +1 -0
  285. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  286. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  287. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +44 -0
  288. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  289. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +71 -0
  290. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  291. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +474 -0
  292. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +1 -0
  293. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +15 -0
  294. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  295. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +32 -0
  296. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  297. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +22 -0
  298. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  299. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +70 -0
  300. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -0
  301. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +20 -0
  302. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  303. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +75 -0
  304. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +1 -0
  305. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  306. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  307. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +140 -0
  308. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +1 -0
  309. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +12 -0
  310. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +1 -0
  311. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +133 -0
  312. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +1 -0
  313. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +33 -0
  314. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  315. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +82 -0
  316. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  317. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  318. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  319. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +111 -0
  320. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +1 -0
  321. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +24 -0
  322. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  323. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +63 -0
  324. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +1 -0
  325. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +33 -0
  326. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  327. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +118 -0
  328. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +1 -0
  329. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +32 -0
  330. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -0
  331. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +230 -0
  332. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -0
  333. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +34 -0
  334. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +1 -0
  335. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +36 -0
  336. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +1 -0
  337. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +48 -0
  338. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  339. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +72 -0
  340. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  341. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +63 -0
  342. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  343. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +213 -0
  344. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -0
  345. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +86 -0
  346. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  347. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +536 -0
  348. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +1 -0
  349. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  350. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  351. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +93 -0
  352. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  353. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +30 -0
  354. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +1 -0
  355. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +169 -0
  356. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +1 -0
  357. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  358. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  359. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +267 -0
  360. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  361. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +21 -0
  362. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  363. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +155 -0
  364. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  365. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +97 -0
  366. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  367. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +810 -0
  368. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +1 -0
  369. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +71 -0
  370. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  371. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +320 -0
  372. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -0
  373. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  374. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  375. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +34 -0
  376. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  377. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  378. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  379. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +46 -0
  380. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  381. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  382. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  383. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +45 -0
  384. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +1 -0
  385. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  386. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  387. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +46 -0
  388. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  389. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +15 -0
  390. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +1 -0
  391. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +40 -0
  392. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +1 -0
  393. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +111 -0
  394. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  395. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +984 -0
  396. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -0
  397. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +44 -0
  398. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +1 -0
  399. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +61 -0
  400. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +1 -0
  401. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +109 -0
  402. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  403. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +1035 -0
  404. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +1 -0
  405. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  406. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  407. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +112 -0
  408. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  409. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +12 -0
  410. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  411. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +38 -0
  412. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -0
  413. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  414. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  415. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +33 -0
  416. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  417. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +27 -0
  418. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -0
  419. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +793 -0
  420. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -0
  421. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +4 -0
  422. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -0
  423. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +62 -0
  424. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -0
  425. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +22 -0
  426. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -0
  427. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +118 -0
  428. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -0
  429. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +7 -0
  430. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +1 -0
  431. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +68 -0
  432. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +1 -0
  433. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +50 -0
  434. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -0
  435. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +2 -0
  436. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -0
  437. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +358 -0
  438. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  439. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +3409 -0
  440. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -0
  441. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +77 -0
  442. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  443. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +529 -0
  444. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  445. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +6 -0
  446. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +1 -0
  447. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +15 -0
  448. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +1 -0
  449. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +28 -0
  450. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +1 -0
  451. package/packages/gsd-agent-modes/dist/modes/print-mode.js +84 -0
  452. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +1 -0
  453. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +17 -0
  454. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +1 -0
  455. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +49 -0
  456. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +1 -0
  457. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +37 -0
  458. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +1 -0
  459. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +84 -0
  460. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +1 -0
  461. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +243 -0
  462. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  463. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +464 -0
  464. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -0
  465. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +25 -0
  466. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  467. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +750 -0
  468. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -0
  469. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +511 -0
  470. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  471. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +8 -0
  472. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +1 -0
  473. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +19 -0
  474. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +1 -0
  475. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +45 -0
  476. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +1 -0
  477. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +22 -0
  478. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +1 -0
  479. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +21 -0
  480. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +1 -0
  481. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +4 -0
  482. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +1 -0
  483. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +3 -0
  484. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +1 -0
  485. package/packages/gsd-agent-modes/dist/theme.d.ts +15 -0
  486. package/packages/gsd-agent-modes/dist/theme.d.ts.map +1 -0
  487. package/packages/gsd-agent-modes/dist/theme.js +23 -0
  488. package/packages/gsd-agent-modes/dist/theme.js.map +1 -0
  489. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +16 -0
  490. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +1 -0
  491. package/packages/gsd-agent-modes/dist/utils/theme.js +11 -0
  492. package/packages/gsd-agent-modes/dist/utils/theme.js.map +1 -0
  493. package/packages/gsd-agent-modes/package.json +23 -0
  494. package/packages/gsd-agent-modes/src/cli/args.ts +350 -0
  495. package/packages/gsd-agent-modes/src/cli/config-selector.ts +54 -0
  496. package/packages/gsd-agent-modes/src/cli/file-processor.ts +107 -0
  497. package/packages/gsd-agent-modes/src/cli/list-models.ts +141 -0
  498. package/packages/gsd-agent-modes/src/cli/session-picker.ts +59 -0
  499. package/packages/gsd-agent-modes/src/index.ts +6 -0
  500. package/packages/gsd-agent-modes/src/main.ts +614 -0
  501. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +24 -0
  502. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +18 -0
  503. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +38 -0
  504. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +171 -0
  505. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +382 -0
  506. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +178 -0
  507. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +212 -0
  508. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +66 -0
  509. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +59 -0
  510. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +67 -0
  511. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +60 -0
  512. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +597 -0
  513. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +41 -0
  514. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +88 -0
  515. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +100 -0
  516. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +165 -0
  517. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +147 -0
  518. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +73 -0
  519. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +89 -0
  520. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +151 -0
  521. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +100 -0
  522. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +156 -0
  523. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +257 -0
  524. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +35 -0
  525. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +84 -0
  526. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +257 -0
  527. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +656 -0
  528. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +122 -0
  529. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +210 -0
  530. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +342 -0
  531. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +194 -0
  532. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +1011 -0
  533. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +452 -0
  534. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +45 -0
  535. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +56 -0
  536. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +63 -0
  537. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +64 -0
  538. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +48 -0
  539. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +1157 -0
  540. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +81 -0
  541. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +1208 -0
  542. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +145 -0
  543. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +44 -0
  544. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +50 -0
  545. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +1430 -0
  546. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +71 -0
  547. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +957 -0
  548. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +63 -0
  549. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +183 -0
  550. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +140 -0
  551. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +77 -0
  552. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +44 -0
  553. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +49 -0
  554. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +4195 -0
  555. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +670 -0
  556. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +14 -0
  557. package/packages/gsd-agent-modes/src/modes/print-mode.ts +106 -0
  558. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +58 -0
  559. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +109 -0
  560. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +572 -0
  561. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +902 -0
  562. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +971 -0
  563. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +335 -0
  564. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +53 -0
  565. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +42 -0
  566. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +4 -0
  567. package/packages/gsd-agent-modes/src/theme.ts +25 -0
  568. package/packages/gsd-agent-modes/src/utils/theme.ts +24 -0
  569. package/packages/gsd-agent-modes/tsconfig.json +28 -0
  570. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +1 -0
  571. package/packages/gsd-agent-types/dist/index.d.ts +176 -0
  572. package/packages/gsd-agent-types/dist/index.d.ts.map +1 -0
  573. package/packages/gsd-agent-types/dist/index.js +24 -0
  574. package/packages/gsd-agent-types/dist/index.js.map +1 -0
  575. package/packages/gsd-agent-types/package.json +24 -0
  576. package/packages/gsd-agent-types/src/index.ts +206 -0
  577. package/packages/gsd-agent-types/tsconfig.json +25 -0
  578. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +1 -0
  579. package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
  580. package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
  581. package/packages/mcp-server/dist/remote-questions.js +732 -0
  582. package/packages/mcp-server/dist/remote-questions.js.map +1 -0
  583. package/packages/mcp-server/dist/server.d.ts +7 -0
  584. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  585. package/packages/mcp-server/dist/server.js +77 -11
  586. package/packages/mcp-server/dist/server.js.map +1 -1
  587. package/packages/mcp-server/dist/session-manager.d.ts +14 -0
  588. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
  589. package/packages/mcp-server/dist/session-manager.js +49 -1
  590. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  591. package/packages/mcp-server/package.json +4 -3
  592. package/packages/mcp-server/src/mcp-server.test.ts +67 -0
  593. package/packages/mcp-server/src/remote-questions.test.ts +294 -0
  594. package/packages/mcp-server/src/remote-questions.ts +916 -0
  595. package/packages/mcp-server/src/server.ts +94 -18
  596. package/packages/mcp-server/src/session-manager.ts +43 -1
  597. package/packages/mcp-server/tsconfig.test.json +19 -0
  598. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  599. package/packages/native/dist/tsconfig.tsbuildinfo +1 -0
  600. package/packages/native/package.json +1 -1
  601. package/packages/native/tsconfig.json +2 -1
  602. package/packages/pi-agent-core/package.json +1 -1
  603. package/packages/pi-ai/dist/models/custom.d.ts +38 -0
  604. package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
  605. package/packages/pi-ai/dist/models/custom.js +41 -0
  606. package/packages/pi-ai/dist/models/custom.js.map +1 -1
  607. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
  608. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  609. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  610. package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
  611. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  612. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  613. package/packages/pi-ai/dist/providers/anthropic.js +8 -3
  614. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  615. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
  616. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
  617. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
  618. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
  619. package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
  620. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  621. package/packages/pi-ai/dist/providers/simple-options.js +16 -1
  622. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  623. package/packages/pi-ai/package.json +1 -1
  624. package/packages/pi-ai/src/models/custom.ts +42 -0
  625. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
  626. package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
  627. package/packages/pi-ai/src/providers/anthropic.ts +9 -3
  628. package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
  629. package/packages/pi-ai/src/providers/simple-options.ts +17 -1
  630. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  631. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +3 -2
  632. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  633. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
  634. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  635. package/packages/pi-coding-agent/dist/core/agent-session.js +7 -0
  636. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  637. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
  638. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  639. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  640. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +7 -0
  641. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  642. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  643. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
  644. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
  645. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
  646. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
  647. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  648. package/packages/pi-coding-agent/dist/core/model-registry.js +14 -0
  649. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  650. package/packages/pi-coding-agent/dist/core/session-manager.js +1 -1
  651. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  652. package/packages/pi-coding-agent/dist/core/session-manager.test.js +21 -1
  653. package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
  654. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  655. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +13 -1
  656. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  657. package/packages/pi-coding-agent/package.json +1 -1
  658. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +3 -2
  659. package/packages/pi-coding-agent/src/core/agent-session.ts +11 -0
  660. package/packages/pi-coding-agent/src/core/extensions/runner.ts +2 -0
  661. package/packages/pi-coding-agent/src/core/extensions/types.ts +7 -0
  662. package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
  663. package/packages/pi-coding-agent/src/core/model-registry.ts +16 -0
  664. package/packages/pi-coding-agent/src/core/session-manager.test.ts +30 -1
  665. package/packages/pi-coding-agent/src/core/session-manager.ts +1 -1
  666. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
  667. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  668. package/packages/pi-tui/package.json +1 -1
  669. package/packages/rpc-client/package.json +1 -1
  670. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  671. package/pkg/dist/core/export-html/ansi-to-html.js +1 -0
  672. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  673. package/pkg/dist/core/export-html/index.d.ts +1 -1
  674. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  675. package/pkg/dist/core/export-html/index.js +39 -5
  676. package/pkg/dist/core/export-html/index.js.map +1 -1
  677. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  678. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  679. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  680. package/pkg/package.json +1 -1
  681. package/scripts/ensure-workspace-builds.cjs +2 -0
  682. package/scripts/install.js +512 -0
  683. package/scripts/link-workspace-packages.cjs +2 -0
  684. package/scripts/postinstall.js +9 -178
  685. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  686. package/src/resources/extensions/aws-auth/index.ts +2 -1
  687. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +4 -7
  688. package/src/resources/extensions/bg-shell/index.ts +2 -1
  689. package/src/resources/extensions/bg-shell/process-manager.ts +2 -1
  690. package/src/resources/extensions/browser-tools/index.ts +2 -1
  691. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  692. package/src/resources/extensions/claude-code-cli/partial-builder.ts +115 -23
  693. package/src/resources/extensions/claude-code-cli/readiness.ts +4 -3
  694. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +30 -22
  695. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +27 -0
  696. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +39 -6
  697. package/src/resources/extensions/gsd/auto/loop-deps.ts +13 -0
  698. package/src/resources/extensions/gsd/auto/loop.ts +9 -0
  699. package/src/resources/extensions/gsd/auto/phases.ts +78 -4
  700. package/src/resources/extensions/gsd/auto/run-unit.ts +40 -2
  701. package/src/resources/extensions/gsd/auto/session.ts +28 -1
  702. package/src/resources/extensions/gsd/auto-dispatch.ts +59 -16
  703. package/src/resources/extensions/gsd/auto-model-selection.ts +1 -1
  704. package/src/resources/extensions/gsd/auto-post-unit.ts +62 -3
  705. package/src/resources/extensions/gsd/auto-prompts.ts +28 -1
  706. package/src/resources/extensions/gsd/auto-recovery.ts +62 -1
  707. package/src/resources/extensions/gsd/auto-start.ts +40 -52
  708. package/src/resources/extensions/gsd/auto-worktree.ts +62 -63
  709. package/src/resources/extensions/gsd/auto.ts +58 -16
  710. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +23 -1
  711. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +18 -6
  712. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +35 -2
  713. package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
  714. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
  715. package/src/resources/extensions/gsd/dispatch-guard.ts +44 -2
  716. package/src/resources/extensions/gsd/gitignore.ts +1 -1
  717. package/src/resources/extensions/gsd/gsd-db.ts +92 -32
  718. package/src/resources/extensions/gsd/guided-flow.ts +223 -2
  719. package/src/resources/extensions/gsd/health-widget.ts +3 -1
  720. package/src/resources/extensions/gsd/journal.ts +2 -1
  721. package/src/resources/extensions/gsd/key-manager.ts +22 -0
  722. package/src/resources/extensions/gsd/model-router.ts +42 -1
  723. package/src/resources/extensions/gsd/pre-execution-checks.ts +33 -7
  724. package/src/resources/extensions/gsd/preferences-types.ts +8 -0
  725. package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
  726. package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
  727. package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  728. package/src/resources/extensions/gsd/prompts/system.md +1 -0
  729. package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
  730. package/src/resources/extensions/gsd/safety/file-change-validator.ts +16 -3
  731. package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
  732. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +188 -2
  733. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
  734. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
  735. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
  736. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +63 -0
  737. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
  738. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
  739. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +15 -0
  740. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
  741. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  742. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  743. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
  744. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +9 -9
  745. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
  746. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +31 -0
  747. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +1 -1
  748. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +1 -1
  749. package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
  750. package/src/resources/extensions/gsd/tests/exec-history.test.ts +113 -0
  751. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +38 -0
  752. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +296 -1
  753. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +1 -0
  754. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
  755. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
  756. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
  757. package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
  758. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +2 -0
  759. package/src/resources/extensions/gsd/tests/key-manager.test.ts +2 -0
  760. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  761. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
  762. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  763. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
  764. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +19 -0
  765. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
  766. package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
  767. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +337 -0
  768. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
  769. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
  770. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +9 -3
  771. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
  772. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
  773. package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
  774. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
  775. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
  776. package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
  777. package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
  778. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +23 -0
  779. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +127 -5
  780. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
  781. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +35 -0
  782. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
  783. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
  784. package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
  785. package/src/resources/extensions/gsd/token-counter.ts +22 -5
  786. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  787. package/src/resources/extensions/gsd/uok/plan-v2.ts +26 -3
  788. package/src/resources/extensions/gsd/workflow-logger.ts +2 -1
  789. package/src/resources/extensions/gsd/worktree-resolver.ts +54 -9
  790. package/src/resources/extensions/mcp-client/index.ts +1 -1
  791. package/src/resources/extensions/ollama/index.ts +3 -3
  792. package/src/resources/extensions/ollama/ollama-chat-provider.ts +6 -18
  793. package/src/resources/extensions/remote-questions/config.ts +15 -4
  794. package/src/resources/extensions/search-the-web/index.ts +2 -1
  795. package/src/resources/extensions/shared/tests/format-utils.test.ts +5 -3
  796. package/src/resources/extensions/universal-config/index.ts +1 -1
  797. package/src/resources/skills/verify-before-complete/SKILL.md +2 -1
  798. package/src/resources/skills/write-docs/SKILL.md +2 -1
  799. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
  800. package/packages/native/tsconfig.tsbuildinfo +0 -1
  801. /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → gy6_foLMsEzdGBT19c3hr}/_buildManifest.js +0 -0
  802. /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → gy6_foLMsEzdGBT19c3hr}/_ssgManifest.js +0 -0
@@ -365,8 +365,9 @@ async function promptElicitationWithDialogs(request, questions, ui, signal) {
365
365
  for (const question of questions) {
366
366
  const title = buildElicitationPromptTitle(request, question);
367
367
  if (question.allowMultiple) {
368
+ // allowMultiple removed from ExtensionUIDialogOptions in pi 0.67.2;
369
+ // fall back to single-select (result is wrapped in array below)
368
370
  const selected = await ui.select(title, question.options.map((option) => option.label), {
369
- allowMultiple: true,
370
371
  signal,
371
372
  });
372
373
  if (Array.isArray(selected)) {
@@ -484,25 +485,33 @@ export function makeAbortedMessage(model, lastTextContent) {
484
485
  /**
485
486
  * Resolve the Claude Code permission mode for the current run.
486
487
  *
487
- * GSD subagents run underneath a host Claude Code session the user has
488
- * already consented to, and their work (edits, shell inspection, MCP calls)
489
- * spans the full workflow toolset. Defaulting the inner SDK to
490
- * `bypassPermissions` avoids per-tool approval prompts that offer no
491
- * meaningful safety beyond what the host session and the subagent prompts
492
- * already enforce. `GSD_CLAUDE_CODE_PERMISSION_MODE` lets security-conscious
493
- * users opt into a stricter mode (`acceptEdits`, `default`, `plan`).
488
+ * Defaults to `acceptEdits`, which auto-approves file reads/edits but
489
+ * surfaces a permission dialog for dangerous operations (e.g. general Bash,
490
+ * Agent, WebFetch). This prevents tools outside the allowlist from being
491
+ * silently denied the SDK emits an `extension_ui_request` event so the
492
+ * user sees a prompt instead of a silent refusal that Claude Code mistakes
493
+ * for user rejection (#4383).
494
+ *
495
+ * Set `GSD_CLAUDE_CODE_PERMISSION_MODE` to `bypassPermissions` to restore
496
+ * the old always-approve behaviour, or to `default` / `plan` for stricter
497
+ * modes.
494
498
  *
495
- * Tradeoff: bypass means a prompt-injection payload read from an untrusted
496
- * file could trigger tool calls without a second gate. Accepted for GSD
497
- * because the workflow is explicit user intent and the alternative
498
- * (#4099) is continuous approval fatigue that blocks real work.
499
+ * When `GSD_HEADLESS=1` is set (auto-mode / non-interactive runs), the
500
+ * default flips to `bypassPermissions` because there is no UI to approve
501
+ * permission dialogs `acceptEdits` would hang verification commands like
502
+ * `npx tsc --noEmit` or `npx vitest run` indefinitely (#4657). Explicit
503
+ * overrides still win, so users can opt back into `acceptEdits` in headless.
499
504
  */
500
505
  export async function resolveClaudePermissionMode(env = process.env) {
501
506
  const override = env.GSD_CLAUDE_CODE_PERMISSION_MODE?.trim();
502
507
  if (override === "bypassPermissions" || override === "acceptEdits" || override === "default" || override === "plan") {
503
508
  return override;
504
509
  }
505
- return "bypassPermissions";
510
+ if (env.GSD_HEADLESS === "1") {
511
+ console.warn("[claude-code-cli] Headless mode detected (GSD_HEADLESS=1): defaulting permissionMode to 'bypassPermissions' so verification Bash commands can run. Set GSD_CLAUDE_CODE_PERMISSION_MODE=acceptEdits to opt out.");
512
+ return "bypassPermissions";
513
+ }
514
+ return "acceptEdits";
506
515
  }
507
516
  // NOTE: These helpers intentionally mirror @gsd/pi-ai anthropic-shared
508
517
  // behavior so this extension remains typecheck-stable even when the published
@@ -554,7 +563,7 @@ function mapThinkingLevelToAnthropicEffort(level, modelId) {
554
563
  export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
555
564
  const { reasoning, ...sdkExtraOptions } = extraOptions;
556
565
  const mcpServers = buildWorkflowMcpServers();
557
- const permissionMode = overrides?.permissionMode ?? "bypassPermissions";
566
+ const permissionMode = overrides?.permissionMode ?? "acceptEdits";
558
567
  const disallowedTools = ["AskUserQuestion"];
559
568
  // Pre-authorize the safe built-ins and every registered workflow MCP
560
569
  // server's tools. `acceptEdits` mode (the interactive default) only
@@ -747,7 +756,8 @@ export function extractToolResultsFromSdkUserMessage(message) {
747
756
  /** Attach external tool results from the SDK synthetic user message to their corresponding tool-call blocks by ID. */
748
757
  function attachExternalResultsToToolBlocks(toolBlocks, toolResultsById) {
749
758
  for (const block of toolBlocks) {
750
- if (block.type !== "toolCall" && block.type !== "serverToolUse")
759
+ // serverToolUse removed from AssistantMessage content in pi 0.67.2
760
+ if (block.type !== "toolCall")
751
761
  continue;
752
762
  const externalResult = toolResultsById.get(block.id);
753
763
  if (!externalResult)
@@ -900,8 +910,9 @@ async function pumpSdkMessages(model, context, options, stream) {
900
910
  else if (block.type === "thinking" && block.thinking) {
901
911
  lastThinkingContent = block.thinking;
902
912
  }
903
- else if (block.type === "toolCall" || block.type === "serverToolUse") {
913
+ else if (block.type === "toolCall") {
904
914
  // Collect tool blocks for externalToolExecution rendering
915
+ // (serverToolUse removed from pi-ai content types in pi 0.67.2)
905
916
  intermediateToolBlocks.push(block);
906
917
  }
907
918
  }
@@ -933,13 +944,7 @@ async function pumpSdkMessages(model, context, options, stream) {
933
944
  partial: builder.message,
934
945
  });
935
946
  }
936
- else if (block.type === "serverToolUse") {
937
- stream.push({
938
- type: "server_tool_use",
939
- contentIndex,
940
- partial: builder.message,
941
- });
942
- }
947
+ // serverToolUse/server_tool_use removed from pi-ai in pi 0.67.2
943
948
  }
944
949
  }
945
950
  builder = null;
@@ -30,6 +30,13 @@ function stuckStatePath(basePath) {
30
30
  function loadStuckState(basePath) {
31
31
  try {
32
32
  const data = JSON.parse(readFileSync(stuckStatePath(basePath), "utf-8"));
33
+ // Only load state written by a DIFFERENT process (real session restart).
34
+ // If the PID matches the current process, this state was written by an earlier
35
+ // autoLoop call in the same process (e.g., a test that completed before this
36
+ // one), not by a crashed session — skip it to prevent test state pollution.
37
+ if (data.pid === process.pid) {
38
+ return { recentUnits: [], stuckRecoveryAttempts: 0 };
39
+ }
33
40
  return {
34
41
  recentUnits: Array.isArray(data.recentUnits) ? data.recentUnits : [],
35
42
  stuckRecoveryAttempts: typeof data.stuckRecoveryAttempts === "number" ? data.stuckRecoveryAttempts : 0,
@@ -45,6 +52,7 @@ function saveStuckState(basePath, state) {
45
52
  const filePath = stuckStatePath(basePath);
46
53
  mkdirSync(join(gsdRoot(basePath), "runtime"), { recursive: true });
47
54
  writeFileSync(filePath, JSON.stringify({
55
+ pid: process.pid,
48
56
  recentUnits: state.recentUnits.slice(-20), // keep last 20 entries
49
57
  stuckRecoveryAttempts: state.stuckRecoveryAttempts,
50
58
  updatedAt: new Date().toISOString(),
@@ -497,6 +505,7 @@ export async function autoLoop(ctx, pi, s, deps, options) {
497
505
  consecutiveCooldowns = 0;
498
506
  recentErrorMessages.length = 0;
499
507
  deps.emitJournalEvent({ ts: new Date().toISOString(), flowId, seq: nextSeq(), eventType: "iteration-end", data: { iteration } });
508
+ saveStuckState(s.basePath, loopState); // persist across session restarts (#4382)
500
509
  debugLog("autoLoop", { phase: "iteration-complete", iteration });
501
510
  finishTurn("completed");
502
511
  }
@@ -30,7 +30,8 @@ import { isDbAvailable, getMilestoneSlices } from "../gsd-db.js";
30
30
  import { ensurePlanV2Graph } from "../uok/plan-v2.js";
31
31
  import { resolveUokFlags } from "../uok/flags.js";
32
32
  import { UokGateRunner } from "../uok/gate-runner.js";
33
- import { resetEvidence } from "../safety/evidence-collector.js";
33
+ import { resetEvidence, loadEvidenceFromDisk } from "../safety/evidence-collector.js";
34
+ import { parseUnitId } from "../unit-id.js";
34
35
  import { createCheckpoint, cleanupCheckpoint, rollbackToCheckpoint } from "../safety/git-checkpoint.js";
35
36
  import { resolveSafetyHarnessConfig } from "../safety/safety-harness.js";
36
37
  import { getWorkflowTransportSupportError, getRequiredWorkflowToolsForAutoUnit, supportsStructuredQuestions, } from "../workflow-mcp.js";
@@ -47,7 +48,11 @@ export function resetSessionTimeoutState() {
47
48
  * Exported for testing as _resolveReportBasePath.
48
49
  */
49
50
  export function _resolveReportBasePath(s) {
50
- return s.originalBasePath || s.basePath;
51
+ // Strip /.gsd/worktrees/ suffix when basePath is itself a worktree path and
52
+ // originalBasePath is falsy — prevents reports landing in the worktree (#3729).
53
+ const resolved = s.originalBasePath || s.basePath;
54
+ const markerIdx = resolved.indexOf("/.gsd/worktrees/");
55
+ return markerIdx !== -1 ? resolved.slice(0, markerIdx) : resolved;
51
56
  }
52
57
  /**
53
58
  * Resolve the authoritative project base for dispatch guards.
@@ -55,7 +60,12 @@ export function _resolveReportBasePath(s) {
55
60
  * unit is running inside an auto worktree.
56
61
  */
57
62
  export function _resolveDispatchGuardBasePath(s) {
58
- return s.originalBasePath || s.basePath;
63
+ // Strip /.gsd/worktrees/ suffix when basePath is itself a worktree path and
64
+ // originalBasePath is falsy — prevents guard checks running against the
65
+ // worktree instead of the project root (#3729).
66
+ const resolved = s.originalBasePath || s.basePath;
67
+ const markerIdx = resolved.indexOf("/.gsd/worktrees/");
68
+ return markerIdx !== -1 ? resolved.slice(0, markerIdx) : resolved;
59
69
  }
60
70
  const PLAN_V2_GATE_PHASES = new Set([
61
71
  "executing",
@@ -295,7 +305,7 @@ export async function runPreDispatch(ic, loopState) {
295
305
  findings: reason,
296
306
  milestoneId: state.activeMilestone?.id ?? undefined,
297
307
  });
298
- ctx.ui.notify(`Plan gate failed-closed: ${reason}`, "error");
308
+ ctx.ui.notify(`Plan gate failed-closed: ${reason}\n\nIf this keeps happening, try: /gsd doctor heal`, "error");
299
309
  await deps.pauseAuto(ctx, pi);
300
310
  return { action: "break", reason: "plan-v2-gate-failed" };
301
311
  }
@@ -389,6 +399,8 @@ export async function runPreDispatch(ic, loopState) {
389
399
  loopState.recentUnits.length = 0;
390
400
  loopState.stuckRecoveryAttempts = 0;
391
401
  // Worktree lifecycle on milestone transition — merge current, enter next
402
+ // #2909: preflight — warn + stash dirty working tree before merge
403
+ const preflightTransition = deps.preflightCleanRoot(s.originalBasePath || s.basePath, s.currentMilestoneId, ctx.ui.notify.bind(ctx.ui));
392
404
  try {
393
405
  deps.resolver.mergeAndExit(s.currentMilestoneId, ctx.ui);
394
406
  }
@@ -405,6 +417,10 @@ export async function runPreDispatch(ic, loopState) {
405
417
  await deps.stopAuto(ctx, pi, `Merge error on milestone ${s.currentMilestoneId}: ${String(mergeErr)}`);
406
418
  return { action: "break", reason: "merge-failed" };
407
419
  }
420
+ // #2909: postflight — restore stashed changes after successful merge
421
+ if (preflightTransition.stashPushed) {
422
+ deps.postflightPopStash(s.originalBasePath || s.basePath, s.currentMilestoneId, ctx.ui.notify.bind(ctx.ui));
423
+ }
408
424
  // PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
409
425
  deps.invalidateAllCaches();
410
426
  state = await deps.deriveState(s.basePath);
@@ -459,6 +475,8 @@ export async function runPreDispatch(ic, loopState) {
459
475
  if (incomplete.length === 0 && state.registry.length > 0) {
460
476
  // All milestones complete — merge milestone branch before stopping
461
477
  if (s.currentMilestoneId) {
478
+ // #2909: preflight — warn + stash dirty working tree before merge
479
+ const preflightAllComplete = deps.preflightCleanRoot(s.originalBasePath || s.basePath, s.currentMilestoneId, ctx.ui.notify.bind(ctx.ui));
462
480
  try {
463
481
  deps.resolver.mergeAndExit(s.currentMilestoneId, ctx.ui);
464
482
  // Prevent stopAuto from attempting the same merge (#2645)
@@ -475,6 +493,10 @@ export async function runPreDispatch(ic, loopState) {
475
493
  await deps.stopAuto(ctx, pi, `Merge error on milestone ${s.currentMilestoneId}: ${String(mergeErr)}`);
476
494
  return { action: "break", reason: "merge-failed" };
477
495
  }
496
+ // #2909: postflight — restore stashed changes after successful merge
497
+ if (preflightAllComplete.stashPushed) {
498
+ deps.postflightPopStash(s.originalBasePath || s.basePath, s.currentMilestoneId, ctx.ui.notify.bind(ctx.ui));
499
+ }
478
500
  // PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
479
501
  }
480
502
  deps.sendDesktopNotification("GSD", "All milestones complete!", "success", "milestone", basename(s.originalBasePath || s.basePath));
@@ -539,6 +561,8 @@ export async function runPreDispatch(ic, loopState) {
539
561
  if (state.phase === "complete") {
540
562
  // Milestone merge on complete (before closeout so branch state is clean)
541
563
  if (s.currentMilestoneId) {
564
+ // #2909: preflight — warn + stash dirty working tree before merge
565
+ const preflightComplete = deps.preflightCleanRoot(s.originalBasePath || s.basePath, s.currentMilestoneId, ctx.ui.notify.bind(ctx.ui));
542
566
  try {
543
567
  deps.resolver.mergeAndExit(s.currentMilestoneId, ctx.ui);
544
568
  // Prevent stopAuto from attempting the same merge (#2645)
@@ -555,6 +579,10 @@ export async function runPreDispatch(ic, loopState) {
555
579
  await deps.stopAuto(ctx, pi, `Merge error on milestone ${s.currentMilestoneId}: ${String(mergeErr)}`);
556
580
  return { action: "break", reason: "merge-failed" };
557
581
  }
582
+ // #2909: postflight — restore stashed changes after successful merge
583
+ if (preflightComplete.stashPushed) {
584
+ deps.postflightPopStash(s.originalBasePath || s.basePath, s.currentMilestoneId, ctx.ui.notify.bind(ctx.ui));
585
+ }
558
586
  // PR creation (auto_pr) is handled inside mergeMilestoneToMain (#2302)
559
587
  }
560
588
  deps.sendDesktopNotification("GSD", `Milestone ${mid} complete!`, "success", "milestone", basename(s.originalBasePath || s.basePath));
@@ -1028,6 +1056,14 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
1028
1056
  const safetyConfig = resolveSafetyHarnessConfig(prefs?.safety_harness);
1029
1057
  if (safetyConfig.enabled && safetyConfig.evidence_collection) {
1030
1058
  resetEvidence();
1059
+ // Restore persisted evidence so session-restart resumes don't produce
1060
+ // false-positive "no bash calls" warnings (Bug #4385).
1061
+ if (s.basePath && unitType === "execute-task") {
1062
+ const { milestone: eMid, slice: eSid, task: eTid } = parseUnitId(unitId);
1063
+ if (eMid && eSid && eTid) {
1064
+ loadEvidenceFromDisk(s.basePath, eMid, eSid, eTid);
1065
+ }
1066
+ }
1031
1067
  }
1032
1068
  // Only checkpoint code-executing units (not lifecycle/planning units)
1033
1069
  if (safetyConfig.enabled && safetyConfig.checkpoints && unitType === "execute-task") {
@@ -1430,6 +1466,20 @@ export async function runFinalize(ic, iterData, loopState, sidecarItem) {
1430
1466
  }
1431
1467
  else {
1432
1468
  // s.pendingVerificationRetry was set by postUnitPreVerification.
1469
+ // Emit a dedicated journal event so forensics can distinguish bounded
1470
+ // verification retries from genuine stuck-loop dispatch repetitions (#4540).
1471
+ const retryInfo = s.pendingVerificationRetry;
1472
+ deps.emitJournalEvent({
1473
+ ts: new Date().toISOString(),
1474
+ flowId: ic.flowId,
1475
+ seq: ic.nextSeq(),
1476
+ eventType: "artifact-verification-retry",
1477
+ data: {
1478
+ unitType: preUnitSnapshot?.type,
1479
+ unitId: retryInfo?.unitId,
1480
+ attempt: retryInfo?.attempt,
1481
+ },
1482
+ });
1433
1483
  // Continue the loop — next iteration will inject the retry context into the prompt.
1434
1484
  debugLog("autoLoop", { phase: "artifact-verification-retry", iteration: ic.iteration });
1435
1485
  return { action: "continue" };
@@ -26,15 +26,24 @@ export async function runUnit(ctx, pi, s, unitType, unitId, prompt) {
26
26
  let sessionResult;
27
27
  let sessionTimeoutHandle;
28
28
  const mySessionSwitchGeneration = ++sessionSwitchGeneration;
29
+ // #3731: Cancellation controller for newSession(). When the session-creation
30
+ // timeout fires, we abort this controller so that the still-in-flight
31
+ // newSession() discards itself after await this.abort() completes, preventing
32
+ // it from capturing the (now-root) process.cwd() and rebuilding the tool
33
+ // runtime with the wrong cwd.
34
+ const sessionAbortController = new AbortController();
29
35
  _setSessionSwitchInFlight(true);
30
36
  try {
31
- const sessionPromise = s.cmdCtx.newSession().finally(() => {
37
+ const sessionPromise = s.cmdCtx.newSession({ abortSignal: sessionAbortController.signal }).finally(() => {
32
38
  if (sessionSwitchGeneration === mySessionSwitchGeneration) {
33
39
  _setSessionSwitchInFlight(false);
34
40
  }
35
41
  });
36
42
  const timeoutPromise = new Promise((resolve) => {
37
- sessionTimeoutHandle = setTimeout(() => resolve({ cancelled: true }), NEW_SESSION_TIMEOUT_MS);
43
+ sessionTimeoutHandle = setTimeout(() => {
44
+ sessionAbortController.abort();
45
+ resolve({ cancelled: true });
46
+ }, NEW_SESSION_TIMEOUT_MS);
38
47
  });
39
48
  sessionResult = await Promise.race([sessionPromise, timeoutPromise]);
40
49
  }
@@ -92,6 +101,33 @@ export async function runUnit(ctx, pi, s, unitType, unitId, prompt) {
92
101
  catch (e) {
93
102
  logWarning("engine", "Failed to chdir to basePath before dispatch", { basePath: s.basePath, error: String(e) });
94
103
  }
104
+ // ── Provider request-readiness pre-check (#4555) ──
105
+ // Verify the provider can accept requests before dispatching. If the token
106
+ // has expired since bootstrap, return cancelled immediately so the unit is
107
+ // not wasted on a guaranteed 401.
108
+ {
109
+ const provider = s.currentUnitModel?.provider ?? ctx.model?.provider;
110
+ const registry = ctx.modelRegistry;
111
+ if (provider && registry != null && typeof registry.isProviderRequestReady === "function") {
112
+ let ready = false;
113
+ try {
114
+ ready = registry.isProviderRequestReady(provider);
115
+ }
116
+ catch {
117
+ ready = false;
118
+ }
119
+ if (!ready) {
120
+ return {
121
+ status: "cancelled",
122
+ errorContext: {
123
+ message: `Provider ${provider} is not request-ready (login/token expired)`,
124
+ category: "provider",
125
+ isTransient: false,
126
+ },
127
+ };
128
+ }
129
+ }
130
+ }
95
131
  // ── Send the prompt ──
96
132
  debugLog("runUnit", { phase: "send-message", unitType, unitId });
97
133
  pi.sendMessage({ customType: "gsd-auto", content: prompt, display: s.verbose }, { triggerTurn: true });
@@ -79,6 +79,17 @@ export class AutoSession {
79
79
  lastStateRebuildAt = 0;
80
80
  // ── Sidecar queue ─────────────────────────────────────────────────────
81
81
  sidecarQueue = [];
82
+ // ── Pre-exec gate failure context (#4551) ───────────────────────────
83
+ /**
84
+ * Persisted when a pre-execution gate fails on a plan-slice or refine-slice
85
+ * unit. The planning → plan-slice dispatch rule reads this field and injects
86
+ * the failure details into the next re-dispatch prompt so the LLM can fix the
87
+ * specific issues instead of producing an identical plan.
88
+ *
89
+ * Cleared after it has been consumed (injected into the prompt) to avoid
90
+ * stale context bleeding into unrelated slices.
91
+ */
92
+ lastPreExecFailure = null;
82
93
  // ── Tool invocation errors (#2883) ──────────────────────────────────
83
94
  /** Set when a GSD tool execution ends with isError due to malformed/truncated
84
95
  * JSON arguments. Checked by postUnitPreVerification to break retry loops. */
@@ -139,7 +150,12 @@ export class AutoSession {
139
150
  this.unitLifetimeDispatches.clear();
140
151
  }
141
152
  get lockBasePath() {
142
- return this.originalBasePath || this.basePath;
153
+ // Prefer originalBasePath (project root); fall back to basePath.
154
+ // Strip /.gsd/worktrees/ suffix if basePath is itself a worktree path
155
+ // to avoid reading/writing the lock inside the worktree (#3729).
156
+ const resolved = this.originalBasePath || this.basePath;
157
+ const markerIdx = resolved.indexOf("/.gsd/worktrees/");
158
+ return markerIdx !== -1 ? resolved.slice(0, markerIdx) : resolved;
143
159
  }
144
160
  reset() {
145
161
  this.clearTimers();
@@ -199,6 +215,7 @@ export class AutoSession {
199
215
  this.sidecarQueue = [];
200
216
  this.rewriteAttemptCount = 0;
201
217
  this.consecutiveCompleteBootstraps = 0;
218
+ this.lastPreExecFailure = null;
202
219
  this.lastToolInvocationError = null;
203
220
  this.lastGitActionFailure = null;
204
221
  this.lastGitActionStatus = null;
@@ -17,7 +17,7 @@ import { parseRoadmap } from "./parsers-legacy.js";
17
17
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
18
18
  import { logWarning, logError } from "./workflow-logger.js";
19
19
  import { join } from "node:path";
20
- import { hasImplementationArtifacts } from "./auto-recovery.js";
20
+ import { hasImplementationArtifacts, classifyMilestoneSummaryContent } from "./auto-recovery.js";
21
21
  import { buildDiscussMilestonePrompt, buildResearchMilestonePrompt, buildPlanMilestonePrompt, buildResearchSlicePrompt, buildPlanSlicePrompt, buildRefineSlicePrompt, buildExecuteTaskPrompt, buildCompleteSlicePrompt, buildCompleteMilestonePrompt, buildValidateMilestonePrompt, buildReplanSlicePrompt, buildRunUatPrompt, buildReassessRoadmapPrompt, buildRewriteDocsPrompt, buildReactiveExecutePrompt, buildGateEvaluatePrompt, buildParallelResearchSlicesPrompt, checkNeedsReassessment, checkNeedsRunUat, } from "./auto-prompts.js";
22
22
  import { resolveModelWithFallbacksForUnit } from "./preferences-models.js";
23
23
  import { resolveUokFlags } from "./uok/flags.js";
@@ -451,18 +451,31 @@ export const DISPATCH_RULES = [
451
451
  },
452
452
  {
453
453
  name: "planning → plan-slice",
454
- match: async ({ state, mid, midTitle, basePath, sessionContextWindow, modelRegistry }) => {
454
+ match: async ({ state, mid, midTitle, basePath, sessionContextWindow, modelRegistry, session }) => {
455
455
  if (state.phase !== "planning")
456
456
  return null;
457
457
  if (!state.activeSlice)
458
458
  return missingSliceStop(mid, state.phase);
459
459
  const sid = state.activeSlice.id;
460
460
  const sTitle = state.activeSlice.title;
461
+ // #4551: Consume any persisted pre-exec failure for this slice so the
462
+ // re-dispatched prompt includes the exact blocked references. Clear the
463
+ // field immediately after reading to prevent stale context leaking into
464
+ // a later, unrelated plan-slice run.
465
+ const unitId = `${mid}/${sid}`;
466
+ let priorPreExecFailure;
467
+ if (session?.lastPreExecFailure?.unitId === unitId) {
468
+ priorPreExecFailure = {
469
+ blockingFindings: session.lastPreExecFailure.blockingFindings,
470
+ verdictExcerpt: session.lastPreExecFailure.verdictExcerpt,
471
+ };
472
+ session.lastPreExecFailure = null;
473
+ }
461
474
  return {
462
475
  action: "dispatch",
463
476
  unitType: "plan-slice",
464
- unitId: `${mid}/${sid}`,
465
- prompt: await buildPlanSlicePrompt(mid, midTitle, sid, sTitle, basePath, undefined, { sessionContextWindow, modelRegistry }),
477
+ unitId,
478
+ prompt: await buildPlanSlicePrompt(mid, midTitle, sid, sTitle, basePath, undefined, { sessionContextWindow, modelRegistry, priorPreExecFailure }),
466
479
  };
467
480
  },
468
481
  },
@@ -689,22 +702,13 @@ export const DISPATCH_RULES = [
689
702
  return { action: "skip" };
690
703
  }
691
704
  }
692
- // Reconciliation guard (#4324): when the SUMMARY file already exists
693
- // on disk but the DB says the milestone is not complete, the DB is
694
- // out of sync (e.g. journal reset, partial merge, crash recovery).
695
- // Reconcile the DB status directly instead of re-dispatching the
696
- // tool, which would overwrite the richer on-disk SUMMARY with a
697
- // thinner regenerated version — causing silent data loss.
698
705
  const existingSummary = resolveMilestoneFile(basePath, mid, "SUMMARY");
706
+ let summaryOutcome = "unknown";
699
707
  if (existingSummary && isDbAvailable()) {
700
- try {
701
- updateMilestoneStatus(mid, "complete", new Date().toISOString());
702
- logWarning("dispatch", `Milestone ${mid} has SUMMARY on disk but DB status was not complete — reconciled DB to complete (#4324)`);
703
- }
704
- catch (err) {
705
- logWarning("dispatch", `Failed to reconcile milestone ${mid} status: ${err instanceof Error ? err.message : String(err)}`);
708
+ const summaryContent = await loadFile(existingSummary);
709
+ if (summaryContent) {
710
+ summaryOutcome = classifyMilestoneSummaryContent(summaryContent);
706
711
  }
707
- return { action: "skip" };
708
712
  }
709
713
  // Safety guard (#2675): block completion when VALIDATION verdict is
710
714
  // needs-remediation. The state machine treats needs-remediation as
@@ -782,6 +786,41 @@ export const DISPATCH_RULES = [
782
786
  catch (err) { /* fall through — don't block on DB errors */
783
787
  logWarning("dispatch", `verification class check failed: ${err instanceof Error ? err.message : String(err)}`);
784
788
  }
789
+ // Disk/DB mismatch handling (#4658): SUMMARY presence alone is not enough.
790
+ // Apply post-gate policy:
791
+ // - success summary: reconcile DB and skip re-dispatch
792
+ // - failure summary: pause/fail-closed
793
+ // - unknown summary: pause/fail-closed
794
+ if (existingSummary && isDbAvailable()) {
795
+ const milestone = getMilestone(mid);
796
+ const status = milestone?.status ?? "missing";
797
+ if (summaryOutcome === "success") {
798
+ try {
799
+ updateMilestoneStatus(mid, "complete", new Date().toISOString());
800
+ logWarning("dispatch", `Milestone ${mid} SUMMARY indicates completion while DB status was "${status}" — reconciled DB to complete (#4658)`);
801
+ return { action: "skip" };
802
+ }
803
+ catch (err) {
804
+ return {
805
+ action: "stop",
806
+ level: "warning",
807
+ reason: `Milestone ${mid} SUMMARY indicates completion but DB reconciliation failed (${err instanceof Error ? err.message : String(err)}). Auto-mode paused for manual review.`,
808
+ };
809
+ }
810
+ }
811
+ if (summaryOutcome === "failure") {
812
+ return {
813
+ action: "stop",
814
+ level: "warning",
815
+ reason: `Milestone ${mid} has a failure-path SUMMARY while DB status is "${status}". Auto-mode will not promote completion from failure artifacts. Re-run complete-milestone only after blockers are resolved and verification passes.`,
816
+ };
817
+ }
818
+ return {
819
+ action: "stop",
820
+ level: "warning",
821
+ reason: `Milestone ${mid} has an ambiguous SUMMARY while DB status is "${status}". Auto-mode paused instead of promoting completion from file presence alone.`,
822
+ };
823
+ }
785
824
  return {
786
825
  action: "dispatch",
787
826
  unitType: "complete-milestone",
@@ -291,7 +291,7 @@ autoModeStartThinkingLevel) {
291
291
  // ADR-005: Adjust active tool set for the selected model's provider capabilities.
292
292
  // Hard-filter incompatible tools, then let extensions override via adjust_tool_set hook.
293
293
  const activeToolNames = pi.getActiveTools();
294
- const { toolNames: compatibleTools, removedTools } = adjustToolSet(activeToolNames, model.api);
294
+ const { toolNames: compatibleTools, removedTools } = adjustToolSet(activeToolNames, model.api, model.provider);
295
295
  let finalToolNames = compatibleTools;
296
296
  // Fire adjust_tool_set hook — extensions can override the filtered tool set
297
297
  if (routingConfig.hooks !== false) {
@@ -30,7 +30,7 @@ import { checkPostUnitHooks, isRetryPending, consumeRetryTrigger, persistHookSta
30
30
  import { hasPendingCaptures, loadPendingCaptures, revertExecutorResolvedCaptures } from "./captures.js";
31
31
  import { debugLog } from "./debug-logger.js";
32
32
  import { runSafely } from "./auto-utils.js";
33
- import { getEvidence } from "./safety/evidence-collector.js";
33
+ import { getEvidence, clearEvidenceFromDisk } from "./safety/evidence-collector.js";
34
34
  import { validateFileChanges } from "./safety/file-change-validator.js";
35
35
  // crossReferenceEvidence available for future use when verification_evidence is stored in DB
36
36
  // import { crossReferenceEvidence, type ClaimedEvidence } from "./safety/evidence-cross-ref.js";
@@ -45,8 +45,23 @@ import { ensureCodebaseMapFresh } from "./codebase-generator.js";
45
45
  import { resolveUokFlags } from "./uok/flags.js";
46
46
  import { UokGateRunner } from "./uok/gate-runner.js";
47
47
  import { writeTurnGitTransaction } from "./uok/gitops.js";
48
+ import { isClosedStatus } from "./status-guards.js";
48
49
  /** Maximum verification retry attempts before escalating to blocker placeholder (#2653). */
49
50
  const MAX_VERIFICATION_RETRIES = 3;
51
+ const COMPLETE_MILESTONE_DB_SETTLE_MS = 1500;
52
+ const COMPLETE_MILESTONE_DB_SETTLE_POLL_MS = 100;
53
+ async function waitForMilestoneDbClose(mid) {
54
+ const deadline = Date.now() + COMPLETE_MILESTONE_DB_SETTLE_MS;
55
+ while (Date.now() < deadline) {
56
+ if (!isDbAvailable())
57
+ return false;
58
+ const milestone = getMilestone(mid);
59
+ if (milestone && isClosedStatus(milestone.status))
60
+ return true;
61
+ await new Promise((resolve) => setTimeout(resolve, COMPLETE_MILESTONE_DB_SETTLE_POLL_MS));
62
+ }
63
+ return false;
64
+ }
50
65
  /** Enqueue a sidecar item (hook, triage, or quick-task) for the main loop to
51
66
  * drain via runUnit. Logs the enqueue event and notifies the UI. */
52
67
  function enqueueSidecar(s, ctx, entry, debugExtra, notification) {
@@ -535,7 +550,7 @@ export async function postUnitPreVerification(pctx, opts) {
535
550
  if (taskRow) {
536
551
  const expectedOutput = taskRow.expected_output ?? [];
537
552
  const plannedFiles = taskRow.files ?? [];
538
- const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles);
553
+ const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles, safetyConfig.file_change_allowlist);
539
554
  if (audit && audit.violations.length > 0) {
540
555
  const warnings = audit.violations.filter(v => v.severity === "warning");
541
556
  for (const v of warnings) {
@@ -588,6 +603,16 @@ export async function postUnitPreVerification(pctx, opts) {
588
603
  debugLog("postUnit", { phase: "safety-content-validation", error: String(e) });
589
604
  }
590
605
  }
606
+ // Clear persisted evidence file now that post-unit processing is complete
607
+ // (Bug #4385 — prevents stale evidence from affecting retries of same unit ID).
608
+ if (safetyConfig.evidence_collection && s.currentUnit.type === "execute-task" && sMid && sSid && sTid) {
609
+ try {
610
+ clearEvidenceFromDisk(s.basePath, sMid, sSid, sTid);
611
+ }
612
+ catch (e) {
613
+ debugLog("postUnit", { phase: "safety-evidence-clear", error: String(e) });
614
+ }
615
+ }
591
616
  }
592
617
  }
593
618
  catch (e) {
@@ -607,6 +632,25 @@ export async function postUnitPreVerification(pctx, opts) {
607
632
  }
608
633
  // If verification failed, attempt to regenerate missing projection files
609
634
  // from DB data before giving up (e.g. research-slice produces PLAN from engine).
635
+ if (!triggerArtifactVerified) {
636
+ if (s.currentUnit.type === "complete-milestone") {
637
+ try {
638
+ const { milestone: mid } = parseUnitId(s.currentUnit.id);
639
+ if (mid) {
640
+ const settled = await waitForMilestoneDbClose(mid);
641
+ if (settled) {
642
+ triggerArtifactVerified = verifyExpectedArtifact(s.currentUnit.type, s.currentUnit.id, s.basePath);
643
+ if (triggerArtifactVerified) {
644
+ invalidateAllCaches();
645
+ }
646
+ }
647
+ }
648
+ }
649
+ catch (e) {
650
+ debugLog("postUnit", { phase: "artifact-verify-settle-db", error: String(e) });
651
+ }
652
+ }
653
+ }
610
654
  if (!triggerArtifactVerified) {
611
655
  try {
612
656
  const { milestone: mid, slice: sid } = parseUnitId(s.currentUnit.id);
@@ -950,12 +994,25 @@ export async function postUnitPostVerification(pctx) {
950
994
  const suffix = blockingChecks.length > 3 ? `\n \u2022 ...and ${blockingChecks.length - 3} more` : "";
951
995
  const evidenceNote = `\nSee ${sid}-PRE-EXEC-VERIFY.json for full details.`;
952
996
  ctx.ui.notify(`Pre-execution checks failed: ${blockingCount} blocking issue${blockingCount === 1 ? "" : "s"} found\n${details}${suffix}${evidenceNote}`, "error");
997
+ // Persist failure context so the next plan-slice re-dispatch can inject
998
+ // it into the prompt and break the infinite loop (#4551).
999
+ s.lastPreExecFailure = {
1000
+ unitId: currentUnit.id,
1001
+ blockingFindings: blockingChecks.map(c => `[${c.category}] ${c.target}: ${c.message}`),
1002
+ verdictExcerpt: `status=${result.status}; ${blockingCount} blocking issue${blockingCount === 1 ? "" : "s"} detected`,
1003
+ };
953
1004
  preExecPauseNeeded = true;
954
1005
  }
955
1006
  else if (result.status === "warn") {
956
1007
  ctx.ui.notify(`Pre-execution checks passed with warnings`, "warning");
957
1008
  // Strict mode: treat warnings as blocking
958
1009
  if (prefs?.enhanced_verification_strict === true) {
1010
+ const warnChecks = result.checks.filter(c => !c.passed);
1011
+ s.lastPreExecFailure = {
1012
+ unitId: currentUnit.id,
1013
+ blockingFindings: warnChecks.map(c => `[${c.category}] ${c.target}: ${c.message}`),
1014
+ verdictExcerpt: `status=${result.status} (strict mode); ${warnChecks.length} warning${warnChecks.length === 1 ? "" : "s"} treated as blocking`,
1015
+ };
959
1016
  preExecPauseNeeded = true;
960
1017
  }
961
1018
  }
@@ -1223,6 +1223,20 @@ export async function buildPlanSlicePrompt(mid, _midTitle, sid, sTitle, base, le
1223
1223
  prependBlocks.push(`## Prior Sketch Scope (soft hint — non-binding)\n\n${options.softScopeHint.trim()}\n\n` +
1224
1224
  `This scope was captured during an earlier progressive-planning pass that was later disabled. Treat it as context only — you may plan beyond it if the work genuinely requires more scope. Do NOT treat this as a hard boundary.`);
1225
1225
  }
1226
+ // #4551: inject pre-exec failure context so the re-dispatched plan-slice
1227
+ // addresses the exact blocked references rather than reproducing the same plan.
1228
+ if (options?.priorPreExecFailure) {
1229
+ const { blockingFindings, verdictExcerpt } = options.priorPreExecFailure;
1230
+ const findingsList = blockingFindings.length > 0
1231
+ ? blockingFindings.map(f => `- ${f}`).join("\n")
1232
+ : "- (no specific findings recorded)";
1233
+ prependBlocks.push(`## Fix these specific issues from the prior pre-exec check\n\n` +
1234
+ `The previous plan-slice attempt was blocked by pre-execution validation.\n` +
1235
+ `Gate verdict: ${verdictExcerpt}\n\n` +
1236
+ `Blocked references that must be resolved in this plan:\n${findingsList}\n\n` +
1237
+ `Revise the plan so that every reference listed above is satisfied before execution begins. ` +
1238
+ `Do not reproduce the same file paths, package names, or task ordering that caused these failures.`);
1239
+ }
1226
1240
  return renderSlicePrompt({
1227
1241
  mid, sid, sTitle, base,
1228
1242
  level: level ?? resolveInlineLevel(),