gsd-pi 2.77.0-dev.538325aea → 2.77.0

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 (709) hide show
  1. package/README.md +35 -17
  2. package/dist/cli.js +21 -13
  3. package/dist/extension-registry.js +1 -1
  4. package/dist/headless-ui.d.ts +1 -1
  5. package/dist/headless.js +4 -2
  6. package/dist/loader.js +1 -0
  7. package/dist/onboarding.js +5 -5
  8. package/dist/provider-migrations.d.ts +2 -2
  9. package/dist/provider-migrations.js +1 -2
  10. package/dist/remote-questions-config.js +1 -1
  11. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  12. package/dist/resources/extensions/aws-auth/index.js +1 -2
  13. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +9 -6
  14. package/dist/resources/extensions/bg-shell/process-manager.js +1 -2
  15. package/dist/resources/extensions/browser-tools/index.js +1 -0
  16. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  17. package/dist/resources/extensions/claude-code-cli/partial-builder.js +17 -106
  18. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +10 -17
  19. package/dist/resources/extensions/gsd/auto-dispatch.js +14 -40
  20. package/dist/resources/extensions/gsd/auto-post-unit.js +0 -34
  21. package/dist/resources/extensions/gsd/auto-recovery.js +1 -38
  22. package/dist/resources/extensions/gsd/auto-start.js +2 -16
  23. package/dist/resources/extensions/gsd/dispatch-guard.js +3 -44
  24. package/dist/resources/extensions/gsd/guided-flow.js +1 -1
  25. package/dist/resources/extensions/gsd/prompts/system.md +0 -1
  26. package/dist/resources/extensions/mcp-client/index.js +1 -1
  27. package/dist/resources/extensions/ollama/index.js +2 -1
  28. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  29. package/dist/resources/extensions/remote-questions/config.js +1 -12
  30. package/dist/resources/extensions/universal-config/index.js +1 -1
  31. package/dist/security-overrides.d.ts +1 -4
  32. package/dist/security-overrides.js +3 -16
  33. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  34. package/dist/web/standalone/.next/BUILD_ID +1 -1
  35. package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
  36. package/dist/web/standalone/.next/build-manifest.json +4 -4
  37. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  38. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  39. package/dist/web/standalone/.next/required-server-files.json +3 -3
  40. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  41. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  42. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  43. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  44. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  46. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  47. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  48. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  51. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  52. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  53. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  54. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  55. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  56. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  57. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  58. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  59. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  60. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  61. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  62. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  63. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  64. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  65. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  66. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  67. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  68. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  69. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  70. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  71. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  72. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  73. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  74. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  75. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  77. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  78. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  79. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  85. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  99. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  109. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  115. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  129. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  131. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  133. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  135. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/index.html +1 -1
  145. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  146. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  147. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  148. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  149. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  150. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  151. package/dist/web/standalone/.next/server/app/page.js +2 -2
  152. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
  154. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  155. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  156. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  158. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/middleware.js +2 -2
  160. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  162. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  163. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  164. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  165. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +9 -0
  166. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  167. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  168. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
  169. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  170. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  171. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-5fc74f13a25fa1bb.js} +1 -1
  172. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  173. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  174. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  175. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  176. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  177. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  178. package/dist/web/standalone/server.js +1 -1
  179. package/dist/web-mode.js +1 -1
  180. package/dist/welcome-screen.js +20 -19
  181. package/dist/wizard.js +5 -2
  182. package/package.json +7 -25
  183. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  184. package/packages/mcp-server/dist/server.js +11 -15
  185. package/packages/mcp-server/dist/server.js.map +1 -1
  186. package/packages/mcp-server/src/server.ts +16 -17
  187. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  188. package/packages/native/tsconfig.json +1 -2
  189. package/packages/native/tsconfig.tsbuildinfo +1 -0
  190. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  191. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  192. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  193. package/pkg/dist/core/export-html/index.d.ts +1 -1
  194. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  195. package/pkg/dist/core/export-html/index.js +5 -39
  196. package/pkg/dist/core/export-html/index.js.map +1 -1
  197. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  198. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  199. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  200. package/scripts/ensure-workspace-builds.cjs +0 -2
  201. package/scripts/link-workspace-packages.cjs +0 -2
  202. package/scripts/postinstall.js +178 -9
  203. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  204. package/src/resources/extensions/aws-auth/index.ts +1 -2
  205. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  206. package/src/resources/extensions/bg-shell/index.ts +1 -2
  207. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  208. package/src/resources/extensions/browser-tools/index.ts +1 -2
  209. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  210. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  211. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +9 -19
  212. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +3 -27
  213. package/src/resources/extensions/gsd/auto-dispatch.ts +13 -43
  214. package/src/resources/extensions/gsd/auto-post-unit.ts +0 -33
  215. package/src/resources/extensions/gsd/auto-recovery.ts +1 -37
  216. package/src/resources/extensions/gsd/auto-start.ts +6 -20
  217. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -44
  218. package/src/resources/extensions/gsd/guided-flow.ts +1 -1
  219. package/src/resources/extensions/gsd/prompts/system.md +0 -1
  220. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -73
  221. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -15
  222. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +9 -9
  223. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +0 -11
  224. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
  225. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +5 -127
  226. package/src/resources/extensions/mcp-client/index.ts +1 -1
  227. package/src/resources/extensions/ollama/index.ts +3 -3
  228. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  229. package/src/resources/extensions/remote-questions/config.ts +4 -15
  230. package/src/resources/extensions/search-the-web/index.ts +1 -2
  231. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  232. package/src/resources/extensions/universal-config/index.ts +1 -1
  233. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  234. package/dist/web/standalone/.next/static/chunks/app/page-5b113fd32bc2a1c3.js +0 -1
  235. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  236. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  237. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  238. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  239. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  240. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  241. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  242. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  243. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  244. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  245. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  246. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  247. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  248. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  249. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  250. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  251. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  252. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  253. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  254. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  255. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  256. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  257. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  258. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  259. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  260. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  261. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  262. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  263. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  264. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  265. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  266. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  267. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  268. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  269. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  270. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  271. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  272. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  273. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  274. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  275. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  276. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  277. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  278. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  279. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  280. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  281. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  282. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  283. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  284. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  285. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  286. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  287. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  288. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  289. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  290. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  291. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  292. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  293. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  294. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  295. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  296. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  297. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  298. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  299. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  300. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  301. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  302. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  303. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  304. package/packages/gsd-agent-core/dist/index.js +0 -19
  305. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  306. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  307. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  308. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  309. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  310. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  311. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  312. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  313. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  314. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  315. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  316. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  317. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  318. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  319. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  320. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  321. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  322. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  323. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  324. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  325. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  326. package/packages/gsd-agent-core/package.json +0 -25
  327. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  328. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  329. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  330. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  331. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  332. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  333. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  334. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  335. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  336. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  337. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  338. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  339. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  340. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  341. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  342. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  343. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  344. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  345. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  346. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  347. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  348. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  349. package/packages/gsd-agent-core/src/index.ts +0 -68
  350. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  351. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  352. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  353. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  354. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  355. package/packages/gsd-agent-core/tsconfig.json +0 -28
  356. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  357. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  358. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  359. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  360. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  361. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  362. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  363. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  364. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  365. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  366. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  367. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  368. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  369. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  370. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  371. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  372. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  373. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  374. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  375. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  376. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  377. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  378. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  379. package/packages/gsd-agent-modes/dist/index.js +0 -7
  380. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  381. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  382. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  383. package/packages/gsd-agent-modes/dist/main.js +0 -491
  384. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  385. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  386. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  387. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  388. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  389. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  390. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  391. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  392. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  393. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  394. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  395. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  396. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  397. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  398. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  399. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  400. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  401. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  402. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  403. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  404. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  405. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  406. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  407. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  408. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  409. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  410. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  411. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  412. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  413. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  414. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  415. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  416. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  417. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  418. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  419. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  420. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  421. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  422. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  423. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  424. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  425. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  426. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  427. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  428. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  429. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  430. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  431. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  432. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  433. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  434. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  435. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  436. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  437. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  438. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  439. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  440. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  441. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  442. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  443. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  444. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  445. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  446. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  447. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  448. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  449. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  450. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  451. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  452. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  453. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  454. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  455. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  456. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  457. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  458. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  459. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  460. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  461. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  462. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  463. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  464. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  465. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  466. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  467. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  468. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  469. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  470. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  471. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  472. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  473. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  474. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  475. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  476. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  477. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  478. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  479. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  480. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  481. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  482. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  483. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  484. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  485. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  486. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  487. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  488. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  489. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  490. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  491. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  492. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  493. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  494. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  495. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  496. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  497. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  498. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  499. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  500. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  501. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  502. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  503. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  504. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  505. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  506. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  507. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  508. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  509. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  510. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  511. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  512. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  513. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  514. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  515. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  516. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  517. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  518. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  519. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  520. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  521. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  522. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  523. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  524. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  525. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  526. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  527. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  528. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  529. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  530. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  531. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  532. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  533. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  534. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  535. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  536. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  537. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  538. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  539. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  540. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  541. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  542. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  543. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  544. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  545. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  546. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  547. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  548. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  549. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  550. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  551. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  552. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  553. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  554. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  555. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  556. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  557. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  558. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  559. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  560. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  562. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  564. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  565. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  566. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  567. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  568. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  570. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  572. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  573. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  574. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  575. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  576. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  577. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  578. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  579. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  580. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  581. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  582. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  583. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  584. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  585. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  586. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  587. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  588. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  589. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  590. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  591. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  592. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  593. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  594. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  595. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  596. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  597. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  598. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  599. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  600. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  601. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  602. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  603. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  604. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  605. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  606. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  607. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  608. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  609. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  610. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  611. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  612. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  613. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  614. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  615. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  616. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  617. package/packages/gsd-agent-modes/package.json +0 -23
  618. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  619. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  620. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  621. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  622. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  623. package/packages/gsd-agent-modes/src/index.ts +0 -6
  624. package/packages/gsd-agent-modes/src/main.ts +0 -614
  625. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  626. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  627. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  628. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  629. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  630. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  631. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  632. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  633. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  634. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  635. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  636. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  637. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  638. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  639. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  640. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  641. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  642. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  643. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  644. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  645. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  646. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  647. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  648. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  649. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  650. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  651. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  652. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  653. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  654. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  655. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  656. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  657. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  658. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  659. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  660. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  661. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  662. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  663. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  664. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  665. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  666. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  667. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  668. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  669. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  670. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  671. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  672. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  673. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  674. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  675. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  676. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  677. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  678. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  679. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  680. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  681. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  682. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  683. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  684. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  685. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  686. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  687. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  688. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  689. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  690. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  691. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  692. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  693. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  694. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  695. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  696. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  697. package/packages/gsd-agent-types/dist/index.js +0 -24
  698. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  699. package/packages/gsd-agent-types/package.json +0 -24
  700. package/packages/gsd-agent-types/src/index.ts +0 -206
  701. package/packages/gsd-agent-types/tsconfig.json +0 -25
  702. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  703. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  704. package/scripts/install.js +0 -512
  705. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  706. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +0 -63
  707. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +0 -77
  708. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → pV-mPo7rYGb5JBC09C8GG}/_buildManifest.js +0 -0
  709. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → pV-mPo7rYGb5JBC09C8GG}/_ssgManifest.js +0 -0
@@ -1,957 +0,0 @@
1
- import { Loader, Markdown, type MarkdownTheme, Spacer, Text } from "@gsd/pi-tui";
2
- import type { ToolDefinition } from "@gsd/agent-types";
3
-
4
- import type { InteractiveModeEvent, InteractiveModeStateHost } from "../interactive-mode-state.js";
5
- import { theme } from "../../../theme.js";
6
- import { AssistantMessageComponent } from "../components/assistant-message.js";
7
- import { ToolExecutionComponent } from "../components/tool-execution.js";
8
- import { DynamicBorder } from "../components/dynamic-border.js";
9
- import { appKey } from "../components/keybinding-hints.js";
10
-
11
- // vendor-seam: dual-module-path -- Markdown from pi-tui exposes maxLines at runtime
12
- // but the pi-tui type declarations don't include it.
13
- interface GSDMarkdownExtension {
14
- maxLines?: number;
15
- }
16
-
17
- // Tracks the last processed content index to avoid re-scanning all blocks on every message_update
18
- let lastProcessedContentIndex = 0;
19
-
20
- // Tracks the previous content[] length so we can detect when an adapter resets
21
- // the assistant content array for a new provider sub-turn within one lifecycle.
22
- let lastContentLength = 0;
23
-
24
- // --- Segment walker state (per streaming assistant turn) ---
25
- type RenderedSegment =
26
- | {
27
- kind: "text-run";
28
- startIndex: number;
29
- endIndex: number;
30
- contentType: "text" | "thinking";
31
- component: AssistantMessageComponent;
32
- }
33
- | { kind: "tool"; contentIndex: number; component: ToolExecutionComponent };
34
-
35
- let renderedSegments: RenderedSegment[] = [];
36
- // When providers reuse one assistant lifecycle across internal sub-turns,
37
- // a content[] shrink resets renderedSegments. Keep the displaced segments so
38
- // claude-code MCP pruning can remove stale provisional text later.
39
- let orphanedSegments: RenderedSegment[] = [];
40
-
41
- // Content block shape used for runtime narrowing. AssistantMessage["content"] is typed as
42
- // (TextContent | ThinkingContent | ToolCall)[] but pi-coding-agent appends serverToolUse/webSearchResult
43
- // blocks at runtime. Using a structural supertype avoids dual-module-path as-any casts.
44
- type RuntimeContentBlock = { type: string; [key: string]: unknown };
45
-
46
- function hasVisibleAssistantContent(message: { content: Array<unknown> }): boolean {
47
- return message.content.some(
48
- (c) => {
49
- const block = c as RuntimeContentBlock;
50
- return (
51
- (block.type === "text" && typeof block["text"] === "string" && (block["text"] as string).trim().length > 0)
52
- || (block.type === "thinking" && typeof block["thinking"] === "string" && (block["thinking"] as string).trim().length > 0)
53
- );
54
- },
55
- );
56
- }
57
-
58
- function hasAssistantToolBlocks(message: { content: Array<unknown> }): boolean {
59
- return message.content.some((c) => {
60
- const block = c as RuntimeContentBlock;
61
- return block.type === "toolCall" || block.type === "serverToolUse";
62
- });
63
- }
64
-
65
- // Pick the latest non-empty text block that appears strictly before the most
66
- // recent tool call. Text blocks that come after the last tool call are still
67
- // streaming live into the chat container, so mirroring them into the pinned
68
- // "Latest Output" zone would render the same tokens twice.
69
- export function findLatestPinnableText(contentBlocks: Array<unknown>): string {
70
- let lastToolIdx = -1;
71
- for (let i = contentBlocks.length - 1; i >= 0; i--) {
72
- const c = contentBlocks[i] as RuntimeContentBlock;
73
- if (c?.type === "toolCall" || c?.type === "serverToolUse") {
74
- lastToolIdx = i;
75
- break;
76
- }
77
- }
78
- for (let i = lastToolIdx - 1; i >= 0; i--) {
79
- const c = contentBlocks[i] as RuntimeContentBlock;
80
- if (c?.type === "text" && typeof c["text"] === "string" && (c["text"] as string).trim()) {
81
- return (c["text"] as string).trim();
82
- }
83
- }
84
- return "";
85
- }
86
-
87
- // Tracks the latest assistant text for the pinned message zone
88
- let lastPinnedText = "";
89
- // Whether any tool execution has been added in this assistant turn (triggers pinned display)
90
- let hasToolsInTurn = false;
91
- // Reference to the pinned border so we can toggle its label between working/idle
92
- let pinnedBorder: DynamicBorder | undefined;
93
- // Reference to the pinned markdown component below the border
94
- let pinnedTextComponent: Markdown | undefined;
95
-
96
- export async function handleAgentEvent(host: InteractiveModeStateHost & {
97
- init: () => Promise<void>;
98
- getMarkdownThemeWithSettings: () => MarkdownTheme;
99
- addMessageToChat: (message: unknown, options?: { populateHistory?: boolean }) => void;
100
- formatWebSearchResult: (content: unknown) => string;
101
- getRegisteredToolDefinition: (toolName: string) => ToolDefinition | undefined;
102
- checkShutdownRequested: () => Promise<void>;
103
- rebuildChatFromMessages: () => void;
104
- flushCompactionQueue: (options?: { willRetry?: boolean }) => Promise<void>;
105
- showStatus: (message: string) => void;
106
- showError: (message: string) => void;
107
- updatePendingMessagesDisplay: () => void;
108
- updateTerminalTitle: () => void;
109
- updateEditorBorderColor: () => void;
110
- pendingMessagesContainer: { clear: () => void };
111
- }, event: InteractiveModeEvent): Promise<void> {
112
- if (!host.isInitialized) {
113
- await host.init();
114
- }
115
-
116
- host.footer.invalidate();
117
- const timestampFormat = host.settingsManager.getTimestampFormat();
118
-
119
- // Reset content index tracker and pinned state when a new assistant message starts
120
- if (event.type === "message_start" && event.message.role === "assistant") {
121
- lastProcessedContentIndex = 0;
122
- lastContentLength = 0;
123
- lastPinnedText = "";
124
- hasToolsInTurn = false;
125
- renderedSegments = [];
126
- orphanedSegments = [];
127
- if (pinnedBorder) pinnedBorder.stopSpinner();
128
- pinnedBorder = undefined;
129
- pinnedTextComponent = undefined;
130
- host.pinnedMessageContainer.clear();
131
- }
132
-
133
- switch (event.type) {
134
- case "session_state_changed":
135
- switch (event.reason) {
136
- case "new_session":
137
- case "switch_session":
138
- case "fork":
139
- host.streamingComponent = undefined;
140
- host.streamingMessage = undefined;
141
- host.pendingTools.clear();
142
- host.pendingMessagesContainer.clear();
143
- host.pinnedMessageContainer.clear();
144
- lastPinnedText = "";
145
- hasToolsInTurn = false;
146
- renderedSegments = [];
147
- orphanedSegments = [];
148
- lastContentLength = 0;
149
- if (pinnedBorder) pinnedBorder.stopSpinner();
150
- pinnedBorder = undefined;
151
- pinnedTextComponent = undefined;
152
- host.compactionQueuedMessages = [];
153
- host.rebuildChatFromMessages();
154
- host.updatePendingMessagesDisplay();
155
- host.updateTerminalTitle();
156
- host.updateEditorBorderColor();
157
- host.ui.requestRender();
158
- return;
159
- case "set_session_name":
160
- host.updateTerminalTitle();
161
- host.ui.requestRender();
162
- return;
163
- case "set_model":
164
- case "set_thinking_level":
165
- host.updateEditorBorderColor();
166
- host.ui.requestRender();
167
- return;
168
- case "set_steering_mode":
169
- case "set_follow_up_mode":
170
- case "set_auto_compaction":
171
- case "set_auto_retry":
172
- case "abort_retry":
173
- default:
174
- host.ui.requestRender();
175
- return;
176
- }
177
- case "agent_start":
178
- if (host.retryEscapeHandler) {
179
- host.defaultEditor.onEscape = host.retryEscapeHandler;
180
- host.retryEscapeHandler = undefined;
181
- }
182
- if (host.retryLoader) {
183
- host.retryLoader.stop();
184
- host.retryLoader = undefined;
185
- }
186
- if (host.loadingAnimation) {
187
- host.loadingAnimation.stop();
188
- }
189
- host.statusContainer.clear();
190
- host.loadingAnimation = new Loader(
191
- host.ui,
192
- (spinner) => theme.fg("accent", spinner),
193
- (text) => theme.fg("muted", text),
194
- host.defaultWorkingMessage,
195
- );
196
- host.statusContainer.addChild(host.loadingAnimation);
197
- if (host.pendingWorkingMessage !== undefined) {
198
- if (host.pendingWorkingMessage) {
199
- host.loadingAnimation.setMessage(host.pendingWorkingMessage);
200
- }
201
- host.pendingWorkingMessage = undefined;
202
- }
203
- host.ui.requestRender();
204
- break;
205
-
206
- case "message_start":
207
- if (event.message.role === "custom") {
208
- host.addMessageToChat(event.message);
209
- host.ui.requestRender();
210
- } else if (event.message.role === "user") {
211
- host.addMessageToChat(event.message);
212
- host.updatePendingMessagesDisplay();
213
- host.ui.requestRender();
214
- } else if (event.message.role === "assistant") {
215
- host.streamingMessage = event.message;
216
- // External-tool providers can stream multiple assistant turns through
217
- // one response. Delay component creation until visible assistant text
218
- // arrives so tool outputs keep chronological ordering.
219
- host.ui.requestRender();
220
- }
221
- break;
222
-
223
- case "message_update":
224
- if (event.message.role === "assistant") {
225
- host.streamingMessage = event.message;
226
- const innerEvent = event.assistantMessageEvent;
227
-
228
- let externalToolResult:
229
- | { toolCallId: string; content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>; details: Record<string, unknown>; isError: boolean }
230
- | undefined;
231
- if (innerEvent.type === "toolcall_end" && innerEvent.toolCall) {
232
- const tc = innerEvent.toolCall as unknown as Record<string, unknown>;
233
- const ext = tc["externalResult"] as Record<string, unknown> | undefined;
234
- if (ext) {
235
- externalToolResult = {
236
- toolCallId: tc["id"] as string,
237
- content: (ext["content"] as Array<{ type: string; text?: string; data?: string; mimeType?: string }>) ?? [{ type: "text", text: "" }],
238
- details: (ext["details"] as Record<string, unknown>) ?? {},
239
- isError: (ext["isError"] as boolean) ?? false,
240
- };
241
- }
242
- } else if ("type" in innerEvent && (innerEvent as { type: string }).type === "server_tool_use") {
243
- const innerExt = innerEvent as unknown as Record<string, unknown>;
244
- const idx = typeof innerExt["contentIndex"] === "number" ? (innerExt["contentIndex"] as number) : -1;
245
- const block = idx >= 0 ? (host.streamingMessage.content[idx] as unknown as Record<string, unknown>) : undefined;
246
- const ext = block?.["externalResult"] as Record<string, unknown> | undefined;
247
- if (block?.["id"] && ext) {
248
- externalToolResult = {
249
- toolCallId: block["id"] as string,
250
- content: (ext["content"] as Array<{ type: string; text?: string; data?: string; mimeType?: string }>) ?? [{ type: "text", text: "" }],
251
- details: (ext["details"] as Record<string, unknown>) ?? {},
252
- isError: (ext["isError"] as boolean) ?? false,
253
- };
254
- }
255
- }
256
-
257
- const contentBlocks = host.streamingMessage.content;
258
- // Some adapters (notably claude-code) reuse a single assistant
259
- // lifecycle while internally spanning multiple provider sub-turns.
260
- // When a new sub-turn starts, content[] length shrinks back to 0/1.
261
- // The scan loop needs its index reset, AND the segment walker's
262
- // renderedSegments map must be cleared so existing text-run
263
- // components don't get overwritten in place with new sub-turn
264
- // content (#4144 regression). Prior sub-turn children stay in
265
- // chatContainer as frozen history; new segments append after them.
266
- if (contentBlocks.length < lastContentLength) {
267
- // Accumulate across successive shrinks — overwriting would drop
268
- // segments displaced by an earlier shrink, leaving them stranded
269
- // in chatContainer once the prune pass finally runs.
270
- orphanedSegments = [...orphanedSegments, ...renderedSegments];
271
- renderedSegments = [];
272
- lastPinnedText = "";
273
- lastProcessedContentIndex = 0;
274
- } else if (lastProcessedContentIndex >= contentBlocks.length) {
275
- lastProcessedContentIndex = 0;
276
- }
277
- lastContentLength = contentBlocks.length;
278
- for (let i = lastProcessedContentIndex; i < contentBlocks.length; i++) {
279
- const content = contentBlocks[i];
280
- if (content.type === "toolCall") {
281
- if (!host.pendingTools.has(content.id)) {
282
- const component = new ToolExecutionComponent(
283
- content.name,
284
- content.arguments,
285
- { showImages: host.settingsManager.getShowImages() },
286
- host.getRegisteredToolDefinition(content.name),
287
- host.ui,
288
- );
289
- component.setExpanded(host.toolOutputExpanded);
290
- host.chatContainer.addChild(component);
291
- host.pendingTools.set(content.id, component);
292
- } else {
293
- host.pendingTools.get(content.id)?.updateArgs(content.arguments);
294
- }
295
- } else if (content.type === "serverToolUse") {
296
- if (!host.pendingTools.has(content.id)) {
297
- const component = new ToolExecutionComponent(
298
- content.name,
299
- (content.input ?? {}) as Record<string, unknown>,
300
- { showImages: host.settingsManager.getShowImages() },
301
- undefined,
302
- host.ui,
303
- );
304
- component.setExpanded(host.toolOutputExpanded);
305
- host.chatContainer.addChild(component);
306
- host.pendingTools.set(content.id, component);
307
- }
308
- } else if (content.type === "webSearchResult") {
309
- const component = host.pendingTools.get(content.toolUseId);
310
- if (component) {
311
- if (process.env.PI_OFFLINE === "1") {
312
- component.updateResult({
313
- content: [{ type: "text", text: "Web search disabled (offline mode)" }],
314
- isError: false,
315
- });
316
- } else {
317
- const searchContent = content.content;
318
- const isError = searchContent && typeof searchContent === "object" && "type" in searchContent && (searchContent as { type: unknown }).type === "web_search_tool_result_error";
319
- component.updateResult({
320
- content: [{ type: "text", text: host.formatWebSearchResult(searchContent) }],
321
- isError: !!isError,
322
- });
323
- }
324
- }
325
- }
326
- }
327
-
328
- // When the stream adapter signals a completed tool call with an
329
- // external result (from Claude Code SDK), update the pending
330
- // ToolExecutionComponent immediately so output is visible in
331
- // real-time instead of waiting for the session to end.
332
- if (externalToolResult) {
333
- const component = host.pendingTools.get(externalToolResult.toolCallId);
334
- if (component) {
335
- component.updateResult({
336
- content: externalToolResult.content,
337
- details: externalToolResult.details,
338
- isError: externalToolResult.isError,
339
- });
340
- }
341
- }
342
-
343
- // Segment walker: render content blocks in stream order, append-only.
344
- // Build desired segment plan from content[].
345
- {
346
- // vendor-seam: dual-module-path -- AssistantMessage.content is typed as (TextContent | ThinkingContent | ToolCall)[]
347
- // but pi-coding-agent adapter appends serverToolUse/webSearchResult blocks at runtime.
348
- const blocks = host.streamingMessage.content as unknown as Array<Record<string, unknown>>;
349
- const isClaudeCodeProvider = host.streamingMessage.provider === "claude-code";
350
- const hasMcpToolBlock = blocks.some((b) => {
351
- if (b?.["type"] === "toolCall") {
352
- return typeof b?.["mcpServer"] === "string" || String(b?.["name"] ?? "").startsWith("mcp__");
353
- }
354
- if (b?.["type"] === "serverToolUse") {
355
- return typeof b?.["mcpServer"] === "string" || String(b?.["name"] ?? "").startsWith("mcp__");
356
- }
357
- return false;
358
- });
359
- const firstToolIdx = blocks.findIndex((b) => b["type"] === "toolCall" || b["type"] === "serverToolUse");
360
- const hasPostToolText = firstToolIdx >= 0
361
- && blocks.some(
362
- (b, idx) => (
363
- idx > firstToolIdx
364
- && b?.["type"] === "text"
365
- && typeof b?.["text"] === "string"
366
- && (b["text"] as string).trim().length > 0
367
- ),
368
- );
369
- // Only prune provisional pre-tool prose after post-tool prose exists,
370
- // so MCP tool-only windows do not blank the assistant content.
371
- const shouldDropPreToolProse = isClaudeCodeProvider && hasMcpToolBlock && hasPostToolText;
372
- type DesiredSegment =
373
- | { kind: "text-run"; startIndex: number; endIndex: number; contentType: "text" | "thinking" }
374
- | { kind: "tool"; contentIndex: number; toolId: string };
375
- const desired: DesiredSegment[] = [];
376
- let runStart = -1;
377
- let runEnd = -1;
378
- let runType: "text" | "thinking" | undefined;
379
- const closeRun = (): void => {
380
- if (runStart !== -1 && runType) {
381
- desired.push({ kind: "text-run", startIndex: runStart, endIndex: runEnd, contentType: runType });
382
- runStart = -1;
383
- runEnd = -1;
384
- runType = undefined;
385
- }
386
- };
387
- for (let i = 0; i < blocks.length; i++) {
388
- const b = blocks[i];
389
- const bType = b["type"];
390
- const blockType = bType === "text" || bType === "thinking" ? bType : undefined;
391
- const isTextLike = blockType === "text" || blockType === "thinking";
392
- const isTool = bType === "toolCall" || bType === "serverToolUse";
393
- // For Claude Code MCP turns, prune only pre-tool prose, never thinking.
394
- const textValue = blockType === "text" && typeof b?.["text"] === "string" ? (b["text"] as string) : "";
395
- const isLikelyQuestion = blockType === "text" && typeof textValue === "string" && /\?\s*$/.test(textValue.trim());
396
- const shouldSkipProse = shouldDropPreToolProse
397
- && firstToolIdx >= 0
398
- && i < firstToolIdx
399
- && blockType === "text"
400
- && !isLikelyQuestion;
401
- if (shouldSkipProse) {
402
- closeRun();
403
- continue;
404
- }
405
- if (isTextLike) {
406
- if (runStart === -1) {
407
- runStart = i;
408
- runEnd = i;
409
- runType = blockType;
410
- } else if (runType !== blockType) {
411
- closeRun();
412
- runStart = i;
413
- runEnd = i;
414
- runType = blockType;
415
- } else {
416
- runEnd = i;
417
- }
418
- } else {
419
- closeRun();
420
- if (isTool) {
421
- desired.push({ kind: "tool", contentIndex: i, toolId: b["id"] as string });
422
- }
423
- }
424
- }
425
- closeRun();
426
-
427
- // Claude Code MCP can emit provisional pre-tool prose that gets
428
- // superseded by post-tool output. Prune stale text-run segments so
429
- // the final assistant output remains below tool output.
430
- if (shouldDropPreToolProse && firstToolIdx >= 0) {
431
- if (orphanedSegments.length > 0) {
432
- const remainingOrphans: RenderedSegment[] = [];
433
- for (const orphan of orphanedSegments) {
434
- if (orphan.kind === "text-run" && orphan.contentType === "text") {
435
- host.chatContainer.removeChild(orphan.component);
436
- if (host.streamingComponent === orphan.component) {
437
- host.streamingComponent = undefined;
438
- }
439
- continue;
440
- }
441
- remainingOrphans.push(orphan);
442
- }
443
- orphanedSegments = remainingOrphans;
444
- }
445
- const desiredTextKeys = new Set(
446
- desired
447
- .filter((seg): seg is Extract<DesiredSegment, { kind: "text-run" }> => seg.kind === "text-run")
448
- .map((seg) => `${seg.contentType}:${seg.startIndex}`),
449
- );
450
- const desiredToolIndices = new Set(
451
- desired
452
- .filter((seg): seg is Extract<DesiredSegment, { kind: "tool" }> => seg.kind === "tool")
453
- .map((seg) => seg.contentIndex),
454
- );
455
- const nextRendered: RenderedSegment[] = [];
456
- for (const seg of renderedSegments) {
457
- if (
458
- seg.kind === "text-run"
459
- && seg.contentType === "text"
460
- && !desiredTextKeys.has(`${seg.contentType}:${seg.startIndex}`)
461
- ) {
462
- host.chatContainer.removeChild(seg.component);
463
- if (host.streamingComponent === seg.component) {
464
- host.streamingComponent = undefined;
465
- }
466
- continue;
467
- }
468
- if (seg.kind === "tool" && !desiredToolIndices.has(seg.contentIndex)) {
469
- continue;
470
- }
471
- nextRendered.push(seg);
472
- }
473
- renderedSegments = nextRendered;
474
- }
475
-
476
- // Append any newly needed segments (never reorder existing ones).
477
- for (const seg of desired) {
478
- if (seg.kind === "tool") {
479
- // Tool segments are already handled above via pendingTools; just
480
- // register them in renderedSegments if not yet tracked.
481
- const existing = renderedSegments.find(
482
- (s) => s.kind === "tool" && s.contentIndex === seg.contentIndex,
483
- );
484
- if (!existing) {
485
- const comp = host.pendingTools.get(seg.toolId);
486
- if (comp) {
487
- renderedSegments.push({ kind: "tool", contentIndex: seg.contentIndex, component: comp });
488
- }
489
- }
490
- } else {
491
- // text-run segment
492
- const existing = renderedSegments.find(
493
- (s) => s.kind === "text-run" && s.startIndex === seg.startIndex && s.contentType === seg.contentType,
494
- );
495
- if (!existing) {
496
- const comp = new AssistantMessageComponent(
497
- undefined,
498
- host.hideThinkingBlock,
499
- host.getMarkdownThemeWithSettings(),
500
- timestampFormat,
501
- { startIndex: seg.startIndex, endIndex: seg.endIndex },
502
- );
503
- host.chatContainer.addChild(comp);
504
- renderedSegments.push({
505
- kind: "text-run",
506
- startIndex: seg.startIndex,
507
- endIndex: seg.endIndex,
508
- contentType: seg.contentType,
509
- component: comp,
510
- });
511
- host.streamingComponent = comp;
512
- }
513
- }
514
- }
515
-
516
- // Update all trailing text-run segments with the latest message so
517
- // streaming text grows in place.
518
- for (const seg of renderedSegments) {
519
- if (seg.kind === "text-run") {
520
- // Find corresponding desired segment to get current endIndex
521
- const d = desired.find(
522
- (ds) => ds.kind === "text-run" && ds.startIndex === seg.startIndex && ds.contentType === seg.contentType,
523
- );
524
- if (d && d.kind === "text-run" && d.endIndex !== seg.endIndex) {
525
- seg.endIndex = d.endIndex;
526
- seg.component.setRange({ startIndex: seg.startIndex, endIndex: seg.endIndex });
527
- }
528
- seg.component.updateContent(host.streamingMessage);
529
- }
530
- }
531
-
532
- // Keep streamingComponent pointing at the last text-run for message_end compatibility.
533
- const lastTextSeg = [...renderedSegments].reverse().find((s) => s.kind === "text-run");
534
- if (lastTextSeg && lastTextSeg.kind === "text-run") {
535
- host.streamingComponent = lastTextSeg.component;
536
- }
537
- }
538
-
539
- // Update index: fully processed blocks won't need re-scanning.
540
- // Keep the last block's index (it may still be accumulating data),
541
- // so we re-check it next time but skip all earlier ones.
542
- if (contentBlocks.length > 0) {
543
- lastProcessedContentIndex = Math.max(0, contentBlocks.length - 1);
544
- }
545
-
546
- // Pinned message: mirror the latest assistant text above the editor
547
- // when tool executions push it out of the viewport.
548
- const hasTools = (contentBlocks as unknown as Array<Record<string, unknown>>).some(
549
- (c) => c["type"] === "toolCall" || c["type"] === "serverToolUse",
550
- );
551
- if (hasTools) hasToolsInTurn = true;
552
-
553
- if (hasToolsInTurn) {
554
- const latestText = findLatestPinnableText(contentBlocks);
555
-
556
- if (latestText && latestText !== lastPinnedText) {
557
- lastPinnedText = latestText;
558
-
559
- if (!pinnedBorder) {
560
- // First time: create border + text component
561
- host.pinnedMessageContainer.clear();
562
- pinnedBorder = new DynamicBorder(
563
- (str: string) => theme.fg("dim", str),
564
- "Working · Latest Output",
565
- );
566
- pinnedBorder.startSpinner(host.ui, (str: string) => theme.fg("accent", str));
567
- host.pinnedMessageContainer.addChild(pinnedBorder);
568
- pinnedTextComponent = new Markdown(latestText, 1, 0, host.getMarkdownThemeWithSettings());
569
- // Cap pinned content to ~40% of terminal height so tall output
570
- // doesn't exceed the viewport and cause render flashing.
571
- (pinnedTextComponent as unknown as GSDMarkdownExtension).maxLines = Math.max(3, Math.floor(host.ui.terminal.rows * 0.4));
572
- host.pinnedMessageContainer.addChild(pinnedTextComponent);
573
- // Hide the separate status loader — the pinned zone replaces it
574
- if (host.loadingAnimation) {
575
- host.loadingAnimation.stop();
576
- host.loadingAnimation = undefined;
577
- }
578
- host.statusContainer.clear();
579
- } else {
580
- // Update existing markdown component in-place
581
- pinnedTextComponent?.setText(latestText);
582
- // Refresh maxLines in case terminal was resized
583
- if (pinnedTextComponent) {
584
- (pinnedTextComponent as unknown as GSDMarkdownExtension).maxLines = Math.max(3, Math.floor(host.ui.terminal.rows * 0.4));
585
- }
586
- }
587
- }
588
- }
589
-
590
- host.ui.requestRender();
591
- }
592
- break;
593
-
594
- case "message_end":
595
- if (event.message.role === "user") break;
596
- if (event.message.role === "assistant") {
597
- host.streamingMessage = event.message;
598
- let errorMessage: string | undefined;
599
- if (host.streamingMessage.stopReason === "aborted") {
600
- const retryAttempt = host.session.retryAttempt;
601
- errorMessage = retryAttempt > 0
602
- ? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? "s" : ""}`
603
- : "Operation aborted";
604
- host.streamingMessage.errorMessage = errorMessage;
605
- }
606
-
607
- const shouldRenderAssistant = hasVisibleAssistantContent(host.streamingMessage)
608
- || (
609
- (host.streamingMessage.stopReason === "aborted" || host.streamingMessage.stopReason === "error")
610
- && !hasAssistantToolBlocks(host.streamingMessage)
611
- );
612
-
613
- // The final message_end payload can contain additional text/thinking
614
- // blocks that never arrived via message_update (e.g. SDK result
615
- // aggregation). Rebuild this in-flight turn from final content so
616
- // ranges/components don't keep stale partial indices.
617
- if (renderedSegments.length > 0) {
618
- // vendor-seam: dual-module-path -- finalBlocks is AssistantMessage["content"] typed as
619
- // (TextContent | ThinkingContent | ToolCall)[] but runtime includes serverToolUse blocks.
620
- const finalBlocks = host.streamingMessage.content as unknown as Array<Record<string, unknown>>;
621
- type DesiredSegment =
622
- | { kind: "text-run"; startIndex: number; endIndex: number; contentType: "text" | "thinking" }
623
- | { kind: "tool"; contentIndex: number; toolId: string };
624
- const desired: DesiredSegment[] = [];
625
- let runStart = -1;
626
- let runEnd = -1;
627
- let runType: "text" | "thinking" | undefined;
628
- const closeRun = (): void => {
629
- if (runStart !== -1 && runType) {
630
- desired.push({ kind: "text-run", startIndex: runStart, endIndex: runEnd, contentType: runType });
631
- runStart = -1;
632
- runEnd = -1;
633
- runType = undefined;
634
- }
635
- };
636
-
637
- for (let i = 0; i < finalBlocks.length; i++) {
638
- const block = finalBlocks[i];
639
- const bType = block?.["type"];
640
- const blockType = bType === "text" || bType === "thinking" ? bType : undefined;
641
- const isTextLike = blockType === "text" || blockType === "thinking";
642
- const isTool = bType === "toolCall" || bType === "serverToolUse";
643
-
644
- if (isTextLike) {
645
- if (runStart === -1) {
646
- runStart = i;
647
- runEnd = i;
648
- runType = blockType;
649
- } else if (runType !== blockType) {
650
- closeRun();
651
- runStart = i;
652
- runEnd = i;
653
- runType = blockType;
654
- } else {
655
- runEnd = i;
656
- }
657
- } else {
658
- closeRun();
659
- if (isTool) {
660
- desired.push({ kind: "tool", contentIndex: i, toolId: block["id"] as string });
661
- }
662
- }
663
- }
664
- closeRun();
665
-
666
- const toolComponentsById = new Map<string, ToolExecutionComponent>();
667
- for (const [toolId, component] of host.pendingTools.entries()) {
668
- toolComponentsById.set(toolId, component);
669
- }
670
-
671
- for (const seg of renderedSegments) {
672
- host.chatContainer.removeChild(seg.component);
673
- if (seg.kind === "tool") {
674
- const priorBlock = finalBlocks[seg.contentIndex];
675
- if (priorBlock?.["id"] && !toolComponentsById.has(priorBlock["id"] as string)) {
676
- toolComponentsById.set(priorBlock["id"] as string, seg.component);
677
- }
678
- }
679
- }
680
- renderedSegments = [];
681
- host.streamingComponent = undefined;
682
-
683
- for (const seg of desired) {
684
- if (seg.kind === "tool") {
685
- const finalBlock = finalBlocks[seg.contentIndex];
686
- let component = toolComponentsById.get(seg.toolId);
687
- if (!component && finalBlock?.["id"]) {
688
- component = host.pendingTools.get(finalBlock["id"] as string);
689
- }
690
- if (!component && finalBlock?.["type"] === "toolCall") {
691
- component = new ToolExecutionComponent(
692
- finalBlock["name"] as string,
693
- (finalBlock["arguments"] as Record<string, unknown>) ?? {},
694
- { showImages: host.settingsManager.getShowImages() },
695
- host.getRegisteredToolDefinition(finalBlock["name"] as string),
696
- host.ui,
697
- );
698
- component.setExpanded(host.toolOutputExpanded);
699
- host.pendingTools.set(finalBlock["id"] as string, component);
700
- toolComponentsById.set(finalBlock["id"] as string, component);
701
- } else if (!component && finalBlock?.["type"] === "serverToolUse") {
702
- component = new ToolExecutionComponent(
703
- finalBlock["name"] as string,
704
- (finalBlock["input"] as Record<string, unknown>) ?? {},
705
- { showImages: host.settingsManager.getShowImages() },
706
- undefined,
707
- host.ui,
708
- );
709
- component.setExpanded(host.toolOutputExpanded);
710
- host.pendingTools.set(finalBlock["id"] as string, component);
711
- toolComponentsById.set(finalBlock["id"] as string, component);
712
- }
713
- if (component) {
714
- host.chatContainer.addChild(component);
715
- renderedSegments.push({ kind: "tool", contentIndex: seg.contentIndex, component });
716
- }
717
- continue;
718
- }
719
-
720
- const comp = new AssistantMessageComponent(
721
- undefined,
722
- host.hideThinkingBlock,
723
- host.getMarkdownThemeWithSettings(),
724
- timestampFormat,
725
- { startIndex: seg.startIndex, endIndex: seg.endIndex },
726
- );
727
- comp.updateContent(host.streamingMessage);
728
- host.chatContainer.addChild(comp);
729
- renderedSegments.push({
730
- kind: "text-run",
731
- startIndex: seg.startIndex,
732
- endIndex: seg.endIndex,
733
- contentType: seg.contentType,
734
- component: comp,
735
- });
736
- host.streamingComponent = comp;
737
- }
738
- }
739
-
740
- if (!host.streamingComponent && shouldRenderAssistant) {
741
- host.streamingComponent = new AssistantMessageComponent(
742
- undefined,
743
- host.hideThinkingBlock,
744
- host.getMarkdownThemeWithSettings(),
745
- timestampFormat,
746
- );
747
- host.chatContainer.addChild(host.streamingComponent);
748
- }
749
- if (host.streamingComponent) {
750
- host.streamingComponent.setShowMetadata(true);
751
- host.streamingComponent.updateContent(host.streamingMessage);
752
- }
753
-
754
- if (host.streamingMessage.stopReason === "aborted" || host.streamingMessage.stopReason === "error") {
755
- if (!errorMessage) {
756
- errorMessage = host.streamingMessage.errorMessage || "Error";
757
- }
758
- const pendingComponents = Array.from(host.pendingTools.values());
759
- if (pendingComponents.length > 0) {
760
- const [first, ...rest] = pendingComponents;
761
- first.completeWithError(errorMessage);
762
- for (const component of rest) {
763
- component.completeWithError();
764
- }
765
- }
766
- host.pendingTools.clear();
767
- } else {
768
- for (const [, component] of host.pendingTools.entries()) {
769
- component.setArgsComplete();
770
- }
771
- }
772
- host.streamingComponent = undefined;
773
- host.streamingMessage = undefined;
774
- renderedSegments = [];
775
- orphanedSegments = [];
776
- lastContentLength = 0;
777
- // Clear pinned output once the message is finalized in the chat
778
- // container — prevents duplicate display when the agent continues
779
- // (e.g. form elicitation) after the assistant message ends.
780
- if (pinnedBorder) pinnedBorder.stopSpinner();
781
- host.pinnedMessageContainer.clear();
782
- lastPinnedText = "";
783
- hasToolsInTurn = false;
784
- pinnedBorder = undefined;
785
- pinnedTextComponent = undefined;
786
- host.footer.invalidate();
787
- }
788
- host.ui.requestRender();
789
- break;
790
-
791
- case "tool_execution_start":
792
- if (!host.pendingTools.has(event.toolCallId)) {
793
- const component = new ToolExecutionComponent(
794
- event.toolName,
795
- event.args,
796
- { showImages: host.settingsManager.getShowImages() },
797
- host.getRegisteredToolDefinition(event.toolName),
798
- host.ui,
799
- );
800
- component.setExpanded(host.toolOutputExpanded);
801
- host.chatContainer.addChild(component);
802
- host.pendingTools.set(event.toolCallId, component);
803
- host.ui.requestRender();
804
- }
805
- break;
806
-
807
- case "tool_execution_update": {
808
- const component = host.pendingTools.get(event.toolCallId);
809
- if (component) {
810
- component.updateResult({ ...event.partialResult, isError: false }, true);
811
- host.ui.requestRender();
812
- }
813
- break;
814
- }
815
-
816
- case "tool_execution_end": {
817
- const component = host.pendingTools.get(event.toolCallId);
818
- if (component) {
819
- component.updateResult({ ...event.result, isError: event.isError });
820
- host.pendingTools.delete(event.toolCallId);
821
- host.ui.requestRender();
822
- }
823
- break;
824
- }
825
-
826
- case "agent_end":
827
- if (host.loadingAnimation) {
828
- host.loadingAnimation.stop();
829
- host.loadingAnimation = undefined;
830
- host.statusContainer.clear();
831
- }
832
- if (host.streamingComponent && host.streamingMessage) {
833
- host.streamingComponent.setShowMetadata(true);
834
- host.streamingComponent.updateContent(host.streamingMessage);
835
- }
836
- host.streamingComponent = undefined;
837
- host.streamingMessage = undefined;
838
- renderedSegments = [];
839
- orphanedSegments = [];
840
- lastContentLength = 0;
841
- host.pendingTools.clear();
842
- // Pinned output is only useful while work is actively streaming.
843
- // Keep chat history as the single source after completion.
844
- if (pinnedBorder) {
845
- pinnedBorder.stopSpinner();
846
- }
847
- host.pinnedMessageContainer.clear();
848
- lastPinnedText = "";
849
- hasToolsInTurn = false;
850
- pinnedBorder = undefined;
851
- pinnedTextComponent = undefined;
852
- await host.checkShutdownRequested();
853
- host.ui.requestRender();
854
- break;
855
-
856
- case "auto_compaction_start":
857
- host.autoCompactionEscapeHandler = host.defaultEditor.onEscape;
858
- host.defaultEditor.onEscape = () => host.session.abortCompaction();
859
- host.statusContainer.clear();
860
- host.autoCompactionLoader = new Loader(
861
- host.ui,
862
- (spinner) => theme.fg("accent", spinner),
863
- (text) => theme.fg("muted", text),
864
- `${event.reason === "overflow" ? "Context overflow detected, " : ""}Auto-compacting... (${appKey(host.keybindings, "interrupt")} to cancel)`,
865
- );
866
- host.statusContainer.addChild(host.autoCompactionLoader);
867
- host.ui.requestRender();
868
- break;
869
-
870
- case "auto_compaction_end":
871
- if (host.autoCompactionEscapeHandler) {
872
- host.defaultEditor.onEscape = host.autoCompactionEscapeHandler;
873
- host.autoCompactionEscapeHandler = undefined;
874
- }
875
- if (host.autoCompactionLoader) {
876
- host.autoCompactionLoader.stop();
877
- host.autoCompactionLoader = undefined;
878
- host.statusContainer.clear();
879
- }
880
- if (event.aborted) {
881
- host.showStatus("Auto-compaction cancelled");
882
- } else if (event.result) {
883
- host.chatContainer.clear();
884
- host.rebuildChatFromMessages();
885
- host.addMessageToChat({
886
- role: "compactionSummary",
887
- tokensBefore: event.result.tokensBefore,
888
- summary: event.result.summary,
889
- timestamp: Date.now(),
890
- });
891
- host.footer.invalidate();
892
- } else if (event.errorMessage) {
893
- host.chatContainer.addChild(new Spacer(1));
894
- host.chatContainer.addChild(new Text(theme.fg("error", event.errorMessage), 1, 0));
895
- }
896
- void host.flushCompactionQueue({ willRetry: event.willRetry });
897
- host.ui.requestRender();
898
- break;
899
-
900
- case "auto_retry_start":
901
- host.retryEscapeHandler = host.defaultEditor.onEscape;
902
- host.defaultEditor.onEscape = () => host.session.abortRetry();
903
- host.statusContainer.clear();
904
- host.retryLoader = new Loader(
905
- host.ui,
906
- (spinner) => theme.fg("warning", spinner),
907
- (text) => theme.fg("muted", text),
908
- `Retrying (${event.attempt}/${event.maxAttempts}) in ${Math.round(event.delayMs / 1000)}s... (${appKey(host.keybindings, "interrupt")} to cancel)`,
909
- );
910
- host.statusContainer.addChild(host.retryLoader);
911
- host.ui.requestRender();
912
- break;
913
-
914
- case "auto_retry_end":
915
- if (host.retryEscapeHandler) {
916
- host.defaultEditor.onEscape = host.retryEscapeHandler;
917
- host.retryEscapeHandler = undefined;
918
- }
919
- if (host.retryLoader) {
920
- host.retryLoader.stop();
921
- host.retryLoader = undefined;
922
- host.statusContainer.clear();
923
- }
924
- if (!event.success) {
925
- host.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || "Unknown error"}`);
926
- }
927
- host.ui.requestRender();
928
- break;
929
-
930
- case "fallback_provider_switch":
931
- host.showStatus(`Switched from ${event.from} → ${event.to} (${event.reason})`);
932
- host.ui.requestRender();
933
- break;
934
-
935
- case "fallback_provider_restored":
936
- host.showStatus(`Restored to ${event.provider}`);
937
- host.ui.requestRender();
938
- break;
939
-
940
- case "fallback_chain_exhausted":
941
- host.showError(event.reason);
942
- host.ui.requestRender();
943
- break;
944
-
945
- case "image_overflow_recovery":
946
- host.showStatus(
947
- `Removed ${event.strippedCount} older image(s) to comply with API limits. Retrying...`,
948
- );
949
- host.ui.requestRender();
950
- break;
951
-
952
- case "turn_start":
953
- case "turn_end":
954
- // No UI action needed for turn lifecycle events
955
- break;
956
- }
957
- }