gsd-pi 2.77.0-dev.538325aea → 2.77.0-dev.eaa4973bc

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 (874) hide show
  1. package/dist/cli-web-branch.d.ts +1 -0
  2. package/dist/cli-web-branch.js +3 -0
  3. package/dist/cli.js +59 -15
  4. package/dist/extension-discovery.d.ts +6 -0
  5. package/dist/extension-discovery.js +37 -0
  6. package/dist/extension-registry.d.ts +3 -0
  7. package/dist/extension-registry.js +1 -1
  8. package/dist/extension-sort.d.ts +18 -0
  9. package/dist/extension-sort.js +114 -0
  10. package/dist/extension-validator.d.ts +47 -0
  11. package/dist/extension-validator.js +127 -0
  12. package/dist/headless-ui.d.ts +1 -1
  13. package/dist/headless.js +4 -2
  14. package/dist/loader.js +36 -7
  15. package/dist/onboarding.js +5 -5
  16. package/dist/provider-migrations.d.ts +20 -2
  17. package/dist/provider-migrations.js +15 -2
  18. package/dist/remote-questions-config.js +1 -1
  19. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  20. package/dist/resources/extensions/aws-auth/index.js +1 -2
  21. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +9 -6
  22. package/dist/resources/extensions/bg-shell/process-manager.js +1 -2
  23. package/dist/resources/extensions/browser-tools/index.js +1 -0
  24. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  25. package/dist/resources/extensions/claude-code-cli/partial-builder.js +17 -106
  26. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +71 -57
  27. package/dist/resources/extensions/cmux/index.js +20 -0
  28. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  29. package/dist/resources/extensions/google-search/index.js +2 -375
  30. package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
  31. package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
  32. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -2
  33. package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
  34. package/dist/resources/extensions/gsd/auto-dispatch.js +24 -0
  35. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  36. package/dist/resources/extensions/gsd/auto-post-unit.js +31 -0
  37. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
  38. package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
  39. package/dist/resources/extensions/gsd/auto-worktree.js +58 -8
  40. package/dist/resources/extensions/gsd/auto.js +31 -14
  41. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
  42. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
  43. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
  44. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
  45. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  46. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  47. package/dist/resources/extensions/gsd/file-lock.js +49 -9
  48. package/dist/resources/extensions/gsd/git-service.js +1 -0
  49. package/dist/resources/extensions/gsd/gitignore.js +1 -0
  50. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
  51. package/dist/resources/extensions/gsd/guided-flow.js +1 -1
  52. package/dist/resources/extensions/gsd/journal.js +17 -2
  53. package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
  54. package/dist/resources/extensions/gsd/notifications.js +30 -16
  55. package/dist/resources/extensions/gsd/reports.js +5 -4
  56. package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
  57. package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
  58. package/dist/resources/extensions/gsd/uok/audit.js +18 -2
  59. package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
  60. package/dist/resources/extensions/gsd/worktree-manager.js +1 -0
  61. package/dist/resources/extensions/mcp-client/auth.js +10 -1
  62. package/dist/resources/extensions/mcp-client/index.js +119 -10
  63. package/dist/resources/extensions/ollama/index.js +2 -1
  64. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  65. package/dist/resources/extensions/remote-questions/config.js +1 -12
  66. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  67. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  68. package/dist/resources/extensions/universal-config/index.js +1 -1
  69. package/dist/resources/skills/create-skill/SKILL.md +2 -2
  70. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  71. package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  72. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  73. package/dist/security-overrides.d.ts +1 -4
  74. package/dist/security-overrides.js +3 -16
  75. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  76. package/dist/web/standalone/.next/BUILD_ID +1 -1
  77. package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
  78. package/dist/web/standalone/.next/build-manifest.json +3 -3
  79. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  80. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  81. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  82. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  85. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  90. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  99. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  101. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  103. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  105. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  107. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  109. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  111. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  113. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  115. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  117. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  119. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  121. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  123. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  125. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  127. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  129. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  131. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  133. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  137. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  139. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  141. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  145. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/index.html +1 -1
  164. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  165. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  166. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  167. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  169. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  170. package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
  171. package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
  172. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  173. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  175. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  177. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  178. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  179. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  180. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-2e68521d7c82f7c2.js} +1 -1
  181. package/dist/web-mode.js +1 -1
  182. package/dist/welcome-screen.js +20 -19
  183. package/dist/wizard.js +5 -2
  184. package/package.json +16 -32
  185. package/packages/mcp-server/README.md +3 -3
  186. package/packages/mcp-server/dist/env-writer.d.ts +1 -0
  187. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
  188. package/packages/mcp-server/dist/env-writer.js +74 -6
  189. package/packages/mcp-server/dist/env-writer.js.map +1 -1
  190. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  191. package/packages/mcp-server/dist/server.js +36 -17
  192. package/packages/mcp-server/dist/server.js.map +1 -1
  193. package/packages/mcp-server/package.json +5 -0
  194. package/packages/mcp-server/src/env-writer.test.ts +79 -1
  195. package/packages/mcp-server/src/env-writer.ts +76 -6
  196. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  197. package/packages/mcp-server/src/server.ts +45 -19
  198. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  199. package/packages/native/package.json +5 -0
  200. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  201. package/packages/native/tsconfig.json +1 -2
  202. package/packages/native/tsconfig.tsbuildinfo +1 -0
  203. package/packages/pi-agent-core/package.json +5 -0
  204. package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
  205. package/packages/pi-ai/package.json +5 -0
  206. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  207. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  208. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  209. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  210. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  211. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  212. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  213. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  214. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  215. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  216. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  217. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
  218. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  219. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
  220. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  221. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
  222. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
  223. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
  224. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
  225. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  226. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  228. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  229. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  230. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  231. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  232. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  233. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  234. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  235. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  236. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  237. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
  238. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  239. package/packages/pi-coding-agent/dist/core/extensions/loader.js +24 -8
  240. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  241. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +7 -0
  242. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  243. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +11 -0
  245. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  246. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
  247. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  249. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
  251. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  252. package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
  253. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  254. package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
  255. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  256. package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
  257. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  259. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
  261. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  264. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  265. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
  266. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
  268. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
  270. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  271. package/packages/pi-coding-agent/package.json +5 -0
  272. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  273. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  274. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  275. package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
  276. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
  277. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  278. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  279. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  280. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  281. package/packages/pi-coding-agent/src/core/extensions/loader.ts +24 -11
  282. package/packages/pi-coding-agent/src/core/extensions/types.ts +8 -0
  283. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
  284. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
  285. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  286. package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
  287. package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
  288. package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
  289. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  290. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
  291. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
  292. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
  293. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
  294. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  295. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
  296. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  297. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +19 -0
  298. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  299. package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
  300. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  301. package/packages/pi-tui/dist/stdin-buffer.js +20 -0
  302. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  303. package/packages/pi-tui/package.json +5 -0
  304. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
  305. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +25 -0
  306. package/packages/pi-tui/src/stdin-buffer.ts +26 -0
  307. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  308. package/packages/rpc-client/package.json +5 -0
  309. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  310. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  311. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  312. package/pkg/dist/core/export-html/index.d.ts +1 -1
  313. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  314. package/pkg/dist/core/export-html/index.js +5 -39
  315. package/pkg/dist/core/export-html/index.js.map +1 -1
  316. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  317. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  318. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  319. package/scripts/ensure-workspace-builds.cjs +0 -2
  320. package/scripts/lib/workspace-manifest.cjs +86 -0
  321. package/scripts/link-workspace-packages.cjs +5 -19
  322. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  323. package/src/resources/extensions/aws-auth/index.ts +1 -2
  324. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  325. package/src/resources/extensions/bg-shell/index.ts +1 -2
  326. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  327. package/src/resources/extensions/browser-tools/index.ts +1 -2
  328. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  329. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  330. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +81 -61
  331. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +91 -22
  332. package/src/resources/extensions/cmux/index.ts +35 -10
  333. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  334. package/src/resources/extensions/google-search/index.ts +8 -470
  335. package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
  336. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
  337. package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
  338. package/src/resources/extensions/gsd/auto/run-unit.ts +16 -2
  339. package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
  340. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  341. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -0
  342. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  343. package/src/resources/extensions/gsd/auto-post-unit.ts +30 -0
  344. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
  345. package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
  346. package/src/resources/extensions/gsd/auto-worktree.ts +60 -5
  347. package/src/resources/extensions/gsd/auto.ts +37 -18
  348. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
  349. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
  350. package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
  351. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
  352. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  353. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  354. package/src/resources/extensions/gsd/file-lock.ts +84 -11
  355. package/src/resources/extensions/gsd/git-service.ts +1 -0
  356. package/src/resources/extensions/gsd/gitignore.ts +1 -0
  357. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
  358. package/src/resources/extensions/gsd/guided-flow.ts +1 -1
  359. package/src/resources/extensions/gsd/journal.ts +27 -2
  360. package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
  361. package/src/resources/extensions/gsd/notifications.ts +27 -15
  362. package/src/resources/extensions/gsd/reports.ts +5 -4
  363. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +11 -2
  364. package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
  365. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  366. package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
  367. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +121 -0
  368. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
  369. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
  370. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
  371. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  372. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  373. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  374. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
  375. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
  376. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
  377. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
  378. package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
  379. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
  380. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
  381. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
  382. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  383. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  384. package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
  385. package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
  386. package/src/resources/extensions/gsd/uok/audit.ts +20 -2
  387. package/src/resources/extensions/gsd/workflow-logger.ts +22 -3
  388. package/src/resources/extensions/gsd/worktree-manager.ts +1 -0
  389. package/src/resources/extensions/mcp-client/auth.ts +12 -1
  390. package/src/resources/extensions/mcp-client/index.ts +130 -11
  391. package/src/resources/extensions/ollama/index.ts +3 -3
  392. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  393. package/src/resources/extensions/remote-questions/config.ts +4 -15
  394. package/src/resources/extensions/search-the-web/index.ts +1 -2
  395. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  396. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  397. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  398. package/src/resources/extensions/universal-config/index.ts +1 -1
  399. package/src/resources/skills/create-skill/SKILL.md +2 -2
  400. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  401. package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  402. package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  403. package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
  404. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  405. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  406. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  407. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  408. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  409. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  410. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  411. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  412. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  413. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  414. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  415. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  416. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  417. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  418. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  419. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  420. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  421. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  422. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  423. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  424. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  425. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  426. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  427. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  428. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  429. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  430. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  431. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  432. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  433. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  434. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  435. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  436. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  437. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  438. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  439. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  440. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  441. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  442. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  443. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  444. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  445. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  446. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  447. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  448. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  449. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  450. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  451. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  452. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  453. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  454. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  455. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  456. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  457. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  458. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  459. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  460. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  461. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  462. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  463. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  464. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  465. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  466. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  467. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  468. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  469. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  470. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  471. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  472. package/packages/gsd-agent-core/dist/index.js +0 -19
  473. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  474. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  475. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  476. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  477. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  478. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  479. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  480. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  481. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  482. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  483. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  484. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  485. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  486. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  487. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  488. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  489. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  490. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  491. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  492. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  493. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  494. package/packages/gsd-agent-core/package.json +0 -25
  495. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  496. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  497. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  498. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  499. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  500. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  501. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  502. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  503. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  504. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  505. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  506. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  507. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  508. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  509. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  510. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  511. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  512. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  513. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  514. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  515. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  516. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  517. package/packages/gsd-agent-core/src/index.ts +0 -68
  518. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  519. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  520. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  521. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  522. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  523. package/packages/gsd-agent-core/tsconfig.json +0 -28
  524. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  525. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  526. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  527. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  528. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  529. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  530. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  531. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  532. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  533. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  534. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  535. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  536. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  537. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  538. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  539. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  540. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  541. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  542. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  543. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  544. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  545. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  546. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  547. package/packages/gsd-agent-modes/dist/index.js +0 -7
  548. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  549. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  550. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  551. package/packages/gsd-agent-modes/dist/main.js +0 -491
  552. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  553. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  554. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  555. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  556. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  557. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  558. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  559. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  560. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  562. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  564. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  565. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  566. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  567. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  568. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  570. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  572. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  573. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  574. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  575. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  576. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  577. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  578. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  579. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  580. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  581. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  582. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  583. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  584. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  585. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  586. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  587. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  588. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  589. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  590. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  591. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  592. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  593. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  594. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  595. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  596. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  597. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  598. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  599. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  600. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  601. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  602. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  603. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  604. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  605. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  606. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  607. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  608. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  609. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  610. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  611. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  612. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  613. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  614. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  615. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  616. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  617. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  618. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  619. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  620. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  621. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  622. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  623. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  624. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  625. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  626. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  627. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  628. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  629. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  630. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  631. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  632. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  633. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  634. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  635. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  636. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  637. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  638. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  639. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  640. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  641. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  642. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  643. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  644. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  645. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  646. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  647. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  648. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  649. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  650. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  651. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  652. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  653. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  654. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  655. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  656. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  657. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  658. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  659. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  660. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  661. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  662. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  663. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  664. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  665. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  666. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  667. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  668. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  669. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  670. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  671. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  672. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  673. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  674. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  675. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  676. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  677. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  678. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  679. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  680. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  681. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  682. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  683. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  684. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  685. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  686. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  687. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  688. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  689. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  690. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  691. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  692. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  693. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  694. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  695. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  696. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  697. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  698. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  699. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  700. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  701. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  702. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  703. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  704. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  705. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  706. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  707. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  708. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  709. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  710. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  711. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  712. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  713. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  714. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  715. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  716. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  717. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  718. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  719. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  720. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  721. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  722. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  723. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  724. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  725. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  726. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  727. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  728. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  729. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  730. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  731. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  732. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  733. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  734. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  735. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  736. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  737. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  738. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  739. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  740. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  741. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  742. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  743. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  744. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  745. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  746. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  747. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  748. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  749. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  750. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  751. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  752. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  753. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  754. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  755. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  756. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  757. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  758. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  759. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  760. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  761. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  762. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  763. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  764. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  765. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  766. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  767. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  768. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  769. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  770. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  771. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  772. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  773. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  774. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  775. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  776. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  777. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  778. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  779. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  780. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  781. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  782. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  783. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  784. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  785. package/packages/gsd-agent-modes/package.json +0 -23
  786. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  787. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  788. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  789. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  790. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  791. package/packages/gsd-agent-modes/src/index.ts +0 -6
  792. package/packages/gsd-agent-modes/src/main.ts +0 -614
  793. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  794. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  795. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  796. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  797. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  798. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  799. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  800. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  801. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  802. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  803. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  804. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  805. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  806. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  807. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  808. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  809. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  810. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  811. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  812. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  813. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  814. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  815. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  816. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  817. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  818. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  819. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  820. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  821. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  822. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  823. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  824. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  825. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  826. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  827. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  828. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  829. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  830. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  831. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  832. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  833. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  834. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  835. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  836. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  837. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  838. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  839. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  840. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  841. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  842. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  843. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  844. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  845. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  846. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  847. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  848. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  849. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  850. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  851. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  852. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  853. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  854. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  855. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  856. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  857. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  858. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  859. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  860. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  861. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  862. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  863. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  864. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  865. package/packages/gsd-agent-types/dist/index.js +0 -24
  866. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  867. package/packages/gsd-agent-types/package.json +0 -24
  868. package/packages/gsd-agent-types/src/index.ts +0 -206
  869. package/packages/gsd-agent-types/tsconfig.json +0 -25
  870. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  871. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  872. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  873. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_buildManifest.js +0 -0
  874. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_ssgManifest.js +0 -0
@@ -1,1157 +0,0 @@
1
- import {
2
- Box,
3
- Container,
4
- getCapabilities,
5
- Image,
6
- type ImageDimensions,
7
- imageFallback,
8
- Spacer,
9
- Text,
10
- type TUI,
11
- truncateToWidth,
12
- } from "@gsd/pi-tui";
13
- import stripAnsi from "strip-ansi";
14
- import type { ToolDefinition } from "@gsd/agent-types";
15
- import type { EditDiffError, EditDiffResult } from "@gsd/agent-types";
16
- import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from "@gsd/pi-coding-agent";
17
- import { getLanguageFromPath, highlightCode } from "@gsd/pi-coding-agent";
18
- import { allTools, computeEditDiff, convertToPng, sanitizeBinaryOutput } from "../../../pi-coding-agent-compat.js";
19
- import { theme } from "../../../theme.js";
20
- import { shortenPath } from "../utils/shorten-path.js";
21
- import { renderDiff } from "./diff.js";
22
- import { keyHint } from "./keybinding-hints.js";
23
- import { truncateToVisualLines } from "./visual-truncate.js";
24
-
25
- // Preview line limit for bash when not expanded
26
- const BASH_PREVIEW_LINES = 5;
27
- // During partial write tool-call streaming, re-highlight the first N lines fully
28
- // to keep multiline tokenization mostly correct without re-highlighting the full file.
29
- const WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;
30
-
31
- /**
32
- * Replace tabs with spaces for consistent rendering
33
- */
34
- function replaceTabs(text: string): string {
35
- return text.replace(/\t/g, " ");
36
- }
37
-
38
- /**
39
- * Normalize control characters for terminal preview rendering.
40
- * Keep tool arguments unchanged, sanitize only display text.
41
- */
42
- function normalizeDisplayText(text: string): string {
43
- return text.replace(/\r/g, "");
44
- }
45
-
46
- /** Safely coerce value to string for display. Returns null if invalid type. */
47
- function str(value: unknown): string | null {
48
- if (typeof value === "string") return value;
49
- if (value == null) return "";
50
- return null; // Invalid type
51
- }
52
-
53
- /**
54
- * Split a Claude Code MCP tool name (`mcp__<server>__<tool>`) into its parts.
55
- * Returns null for non-prefixed names. Duplicated from the claude-code-cli
56
- * extension (parseMcpToolName) so this package doesn't have to import across
57
- * the resources/extensions boundary.
58
- */
59
- function parseMcpToolName(name: string): { server: string; tool: string } | null {
60
- if (!name.startsWith("mcp__")) return null;
61
- const rest = name.slice("mcp__".length);
62
- const delim = rest.indexOf("__");
63
- if (delim <= 0 || delim === rest.length - 2) return null;
64
- return { server: rest.slice(0, delim), tool: rest.slice(delim + 2) };
65
- }
66
-
67
- const COMPACT_ARG_VALUE_LIMIT = 60;
68
- const GENERIC_OUTPUT_PREVIEW_LINES = 10;
69
- const GENERIC_ARGS_JSON_PREVIEW_LINES = 10;
70
-
71
- /**
72
- * Format tool args for the generic-renderer fallback. Produces a one-line
73
- * `k=v, k=v` summary when every value is a primitive that fits inline; falls
74
- * back to a truncated JSON dump for structurally complex args.
75
- */
76
- function formatCompactArgs(args: unknown, expanded: boolean): string {
77
- if (args == null) return "";
78
- if (typeof args !== "object") return String(args);
79
-
80
- const entries = Object.entries(args as Record<string, unknown>);
81
- if (entries.length === 0) return "";
82
-
83
- const allPrimitive = entries.every(([, value]) => {
84
- const t = typeof value;
85
- if (t === "number" || t === "boolean") return true;
86
- if (t === "string") return (value as string).length <= COMPACT_ARG_VALUE_LIMIT;
87
- return value == null;
88
- });
89
-
90
- if (allPrimitive) {
91
- return entries
92
- .map(([key, value]) => {
93
- if (typeof value === "string") return `${key}=${JSON.stringify(value)}`;
94
- if (value == null) return `${key}=null`;
95
- return `${key}=${String(value)}`;
96
- })
97
- .join(", ");
98
- }
99
-
100
- // Complex args: show truncated JSON.
101
- const lines = JSON.stringify(args, null, 2).split("\n");
102
- const maxLines = expanded ? lines.length : GENERIC_ARGS_JSON_PREVIEW_LINES;
103
- if (lines.length <= maxLines) return lines.join("\n");
104
- return lines.slice(0, maxLines).join("\n") + "\n...";
105
- }
106
-
107
- export interface ToolExecutionOptions {
108
- showImages?: boolean; // default: true (only used if terminal supports images)
109
- }
110
-
111
- type WriteHighlightCache = {
112
- rawPath: string | null;
113
- lang: string;
114
- rawContent: string;
115
- normalizedLines: string[];
116
- highlightedLines: string[];
117
- };
118
-
119
- type ToolTruncationDetails = {
120
- truncated?: boolean;
121
- truncatedBy?: string;
122
- outputLines?: number;
123
- totalLines?: number;
124
- maxBytes?: number;
125
- maxLines?: number;
126
- firstLineExceedsLimit?: boolean;
127
- };
128
-
129
- type ToolResultDetails = {
130
- truncation?: ToolTruncationDetails;
131
- fullOutputPath?: string;
132
- firstChangedLine?: number;
133
- diff?: string;
134
- entryLimitReached?: number;
135
- resultLimitReached?: number;
136
- matchLimitReached?: number;
137
- linesTruncated?: boolean;
138
- [key: string]: unknown;
139
- };
140
-
141
- /**
142
- * Component that renders a tool call with its result (updateable)
143
- */
144
- export class ToolExecutionComponent extends Container {
145
- private contentBox: Box; // Used for custom tools and bash visual truncation
146
- private contentText: Text; // For built-in tools (with its own padding/bg)
147
- private imageComponents: Image[] = [];
148
- private imageSpacers: Spacer[] = [];
149
- private toolName: string;
150
- private args: Record<string, unknown>;
151
- private expanded = false;
152
- private showImages: boolean;
153
- private isPartial = true;
154
- private toolDefinition?: ToolDefinition;
155
- private ui: TUI;
156
- private cwd: string;
157
- private result?: {
158
- content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;
159
- isError: boolean;
160
- details?: ToolResultDetails;
161
- };
162
- // Cached edit diff preview (computed when args arrive, before tool executes)
163
- private editDiffPreview?: EditDiffResult | EditDiffError;
164
- private editDiffArgsKey?: string; // Track which args the preview is for
165
- // Cached converted images for Kitty protocol (which requires PNG), keyed by index
166
- private convertedImages: Map<number, { data: string; mimeType: string }> = new Map();
167
- // Cached resolved image dimensions to avoid re-triggering async parsing
168
- // when updateDisplay() recreates Image components (#3455).
169
- private resolvedImageDimensions: Map<number, ImageDimensions> = new Map();
170
- // Incremental syntax highlighting cache for write tool call args
171
- private writeHighlightCache?: WriteHighlightCache;
172
- // When true, this component intentionally renders no lines
173
- private hideComponent = false;
174
-
175
- private get normalizedToolName(): string {
176
- return typeof this.toolName === "string" ? this.toolName.toLowerCase() : "";
177
- }
178
-
179
- constructor(
180
- toolName: string,
181
- args: Record<string, unknown>,
182
- options: ToolExecutionOptions = {},
183
- toolDefinition: ToolDefinition | undefined,
184
- ui: TUI,
185
- cwd: string = process.cwd(),
186
- ) {
187
- super();
188
- this.toolName = toolName;
189
- this.args = args;
190
- this.showImages = options.showImages ?? true;
191
- this.toolDefinition = toolDefinition;
192
- this.ui = ui;
193
- this.cwd = cwd;
194
-
195
- this.addChild(new Spacer(1));
196
-
197
- // Always create both - contentBox for custom tools/bash, contentText for other built-ins
198
- this.contentBox = new Box(1, 1, (text: string) => theme.bg("toolPendingBg", text));
199
- this.contentText = new Text("", 1, 1, (text: string) => theme.bg("toolPendingBg", text));
200
-
201
- // Use contentBox for bash (visual truncation) or custom tools with custom renderers
202
- // Use contentText for built-in tools (including overrides without custom renderers)
203
- if (this.normalizedToolName === "bash" || (toolDefinition && !this.shouldUseBuiltInRenderer())) {
204
- this.addChild(this.contentBox);
205
- } else {
206
- this.addChild(this.contentText);
207
- }
208
-
209
- this.updateDisplay();
210
- }
211
-
212
- /**
213
- * Check if we should use built-in rendering for this tool.
214
- * Returns true if the tool name is a built-in AND either there's no toolDefinition
215
- * or the toolDefinition doesn't provide custom renderers.
216
- */
217
- private shouldUseBuiltInRenderer(): boolean {
218
- const normalizedToolName = this.normalizedToolName;
219
- const isBuiltInName = normalizedToolName in allTools;
220
- const hasCustomRenderers = this.toolDefinition?.renderCall || this.toolDefinition?.renderResult;
221
- return isBuiltInName && !hasCustomRenderers;
222
- }
223
-
224
- dispose(): void {
225
- this.convertedImages.clear();
226
- this.imageComponents = [];
227
- this.imageSpacers = [];
228
- this.editDiffPreview = undefined;
229
- this.writeHighlightCache = undefined;
230
- this.result = undefined;
231
- }
232
-
233
- updateArgs(args: Record<string, unknown>): void {
234
- this.args = args;
235
- if (this.normalizedToolName === "write" && this.isPartial) {
236
- this.updateWriteHighlightCacheIncremental();
237
- }
238
- this.updateDisplay();
239
- }
240
-
241
- private highlightSingleLine(line: string, lang: string): string {
242
- const highlighted = highlightCode(line, lang);
243
- return highlighted[0] ?? "";
244
- }
245
-
246
- private refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {
247
- const prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);
248
- if (prefixCount === 0) return;
249
-
250
- const prefixSource = cache.normalizedLines.slice(0, prefixCount).join("\n");
251
- const prefixHighlighted = highlightCode(prefixSource, cache.lang);
252
- for (let i = 0; i < prefixCount; i++) {
253
- cache.highlightedLines[i] =
254
- prefixHighlighted[i] ?? this.highlightSingleLine(cache.normalizedLines[i] ?? "", cache.lang);
255
- }
256
- }
257
-
258
- private rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): void {
259
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
260
- if (!lang) {
261
- this.writeHighlightCache = undefined;
262
- return;
263
- }
264
-
265
- const displayContent = normalizeDisplayText(fileContent);
266
- const normalized = replaceTabs(displayContent);
267
- this.writeHighlightCache = {
268
- rawPath,
269
- lang,
270
- rawContent: fileContent,
271
- normalizedLines: normalized.split("\n"),
272
- highlightedLines: highlightCode(normalized, lang),
273
- };
274
- }
275
-
276
- private updateWriteHighlightCacheIncremental(): void {
277
- const rawPath = str(this.args?.file_path ?? this.args?.path);
278
- const fileContent = str(this.args?.content);
279
- if (rawPath === null || fileContent === null) {
280
- this.writeHighlightCache = undefined;
281
- return;
282
- }
283
-
284
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
285
- if (!lang) {
286
- this.writeHighlightCache = undefined;
287
- return;
288
- }
289
-
290
- if (!this.writeHighlightCache) {
291
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
292
- return;
293
- }
294
-
295
- const cache = this.writeHighlightCache;
296
- if (cache.lang !== lang || cache.rawPath !== rawPath) {
297
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
298
- return;
299
- }
300
-
301
- if (!fileContent.startsWith(cache.rawContent)) {
302
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
303
- return;
304
- }
305
-
306
- if (fileContent.length === cache.rawContent.length) {
307
- return;
308
- }
309
-
310
- const deltaRaw = fileContent.slice(cache.rawContent.length);
311
- const deltaDisplay = normalizeDisplayText(deltaRaw);
312
- const deltaNormalized = replaceTabs(deltaDisplay);
313
- cache.rawContent = fileContent;
314
-
315
- if (cache.normalizedLines.length === 0) {
316
- cache.normalizedLines.push("");
317
- cache.highlightedLines.push("");
318
- }
319
-
320
- const segments = deltaNormalized.split("\n");
321
- const lastIndex = cache.normalizedLines.length - 1;
322
- cache.normalizedLines[lastIndex] += segments[0];
323
- cache.highlightedLines[lastIndex] = this.highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);
324
-
325
- for (let i = 1; i < segments.length; i++) {
326
- cache.normalizedLines.push(segments[i]);
327
- cache.highlightedLines.push(this.highlightSingleLine(segments[i], cache.lang));
328
- }
329
-
330
- this.refreshWriteHighlightPrefix(cache);
331
- }
332
-
333
- /**
334
- * Signal that args are complete (tool is about to execute).
335
- * This triggers diff computation for edit tool.
336
- */
337
- setArgsComplete(): void {
338
- if (this.toolName === "write") {
339
- const rawPath = str(this.args?.file_path ?? this.args?.path);
340
- const fileContent = str(this.args?.content);
341
- if (rawPath !== null && fileContent !== null) {
342
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
343
- }
344
- }
345
- this.maybeComputeEditDiff();
346
- }
347
-
348
- /**
349
- * Compute edit diff preview when we have complete args.
350
- * This runs async and updates display when done.
351
- * Handles both single-edit format (oldText/newText) and multi-edit format (edits[]).
352
- */
353
- private maybeComputeEditDiff(): void {
354
- if (this.toolName !== "edit") return;
355
-
356
- const path = str(this.args?.path);
357
-
358
- if (!path) return;
359
-
360
- const oldText = this.args?.oldText;
361
- const newText = this.args?.newText;
362
- const edits = this.args?.edits;
363
-
364
- if (typeof oldText === "string" && typeof newText === "string") {
365
- // Single-edit path: oldText + newText at top level
366
- const argsKey = JSON.stringify({ path, oldText, newText });
367
- if (this.editDiffArgsKey === argsKey) return;
368
- this.editDiffArgsKey = argsKey;
369
-
370
- computeEditDiff(path, oldText, newText, this.cwd).then((result) => {
371
- if (this.editDiffArgsKey === argsKey) {
372
- this.editDiffPreview = result;
373
- this.updateDisplay();
374
- this.ui.requestRender();
375
- }
376
- });
377
- } else if (Array.isArray(edits)) {
378
- // Multi-edit path: edits[] array format
379
- // Validate each element has oldText and newText strings before passing to computeEditDiff
380
- const firstValidEdit = edits.find(
381
- (e): e is { oldText: string; newText: string } =>
382
- e !== null &&
383
- typeof e === "object" &&
384
- typeof e.oldText === "string" &&
385
- typeof e.newText === "string",
386
- );
387
- if (!firstValidEdit) return;
388
-
389
- const argsKey = JSON.stringify({ path, edits });
390
- if (this.editDiffArgsKey === argsKey) return;
391
- this.editDiffArgsKey = argsKey;
392
-
393
- // Preview the first edit; subsequent edits will be reflected in the post-execution diff
394
- computeEditDiff(path, firstValidEdit.oldText, firstValidEdit.newText, this.cwd).then((result) => {
395
- if (this.editDiffArgsKey === argsKey) {
396
- this.editDiffPreview = result;
397
- this.updateDisplay();
398
- this.ui.requestRender();
399
- }
400
- });
401
- }
402
- }
403
-
404
- updateResult(
405
- result: {
406
- content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;
407
- details?: ToolResultDetails;
408
- isError: boolean;
409
- },
410
- isPartial = false,
411
- ): void {
412
- this.result = result;
413
- this.isPartial = isPartial;
414
- if (this.normalizedToolName === "write" && !isPartial) {
415
- const rawPath = str(this.args?.file_path ?? this.args?.path);
416
- const fileContent = str(this.args?.content);
417
- if (rawPath !== null && fileContent !== null) {
418
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
419
- }
420
- }
421
- this.updateDisplay();
422
- // Convert non-PNG images to PNG for Kitty protocol (async)
423
- this.maybeConvertImagesForKitty();
424
- }
425
-
426
- /**
427
- * Mark a pending tool call as finished with no result (e.g., squashed by compaction).
428
- * Stops the "Running" indicator without providing a result.
429
- */
430
- markHistoricalNoResult(): void {
431
- this.isPartial = false;
432
- this.updateDisplay();
433
- }
434
-
435
- /**
436
- * Finalize a pending tool call as failed/interrupted while preserving any streamed partial output.
437
- */
438
- completeWithError(message?: string): void {
439
- this.isPartial = false;
440
- if (this.result) {
441
- let content = this.result.content;
442
- if (message) {
443
- const alreadyHasMessage = content.some((block) => block.type === "text" && block.text === message);
444
- if (!alreadyHasMessage) {
445
- content = [...content, { type: "text", text: message }];
446
- }
447
- }
448
- this.result = { ...this.result, content, isError: true };
449
- } else {
450
- this.result = {
451
- content: message ? [{ type: "text", text: message }] : [],
452
- isError: true,
453
- };
454
- }
455
- this.updateDisplay();
456
- }
457
-
458
- /**
459
- * Convert non-PNG images to PNG for Kitty graphics protocol.
460
- * Kitty requires PNG format (f=100), so JPEG/GIF/WebP won't display.
461
- */
462
- private maybeConvertImagesForKitty(): void {
463
- const caps = getCapabilities();
464
- // Only needed for Kitty protocol
465
- if (caps.images !== "kitty") return;
466
- if (!this.result) return;
467
-
468
- const imageBlocks = this.result.content?.filter((c) => c.type === "image") || [];
469
-
470
- for (let i = 0; i < imageBlocks.length; i++) {
471
- const img = imageBlocks[i];
472
- if (!img.data || !img.mimeType) continue;
473
- // Skip if already PNG or already converted
474
- if (img.mimeType === "image/png") continue;
475
- if (this.convertedImages.has(i)) continue;
476
-
477
- // Convert async
478
- const index = i;
479
- convertToPng(img.data, img.mimeType).then((converted) => {
480
- if (converted) {
481
- this.convertedImages.set(index, converted);
482
- this.updateDisplay();
483
- this.ui.requestRender();
484
- }
485
- });
486
- }
487
- }
488
-
489
- setExpanded(expanded: boolean): void {
490
- this.expanded = expanded;
491
- this.updateDisplay();
492
- }
493
-
494
- setShowImages(show: boolean): void {
495
- this.showImages = show;
496
- this.updateDisplay();
497
- }
498
-
499
- override invalidate(): void {
500
- super.invalidate();
501
- this.updateDisplay();
502
- }
503
-
504
- override render(width: number): string[] {
505
- if (this.hideComponent) {
506
- return [];
507
- }
508
- return super.render(width);
509
- }
510
-
511
- private updateDisplay(): void {
512
- // Set background based on state
513
- const bgFn = this.isPartial
514
- ? (text: string) => theme.bg("toolPendingBg", text)
515
- : this.result?.isError
516
- ? (text: string) => theme.bg("toolErrorBg", text)
517
- : (text: string) => theme.bg("toolSuccessBg", text);
518
-
519
- const useBuiltInRenderer = this.shouldUseBuiltInRenderer();
520
- let customRendererHasContent = false;
521
- this.hideComponent = false;
522
-
523
- // Use built-in rendering for built-in tools (or overrides without custom renderers)
524
- if (useBuiltInRenderer) {
525
- if (this.normalizedToolName === "bash") {
526
- // Bash uses Box with visual line truncation
527
- this.contentBox.setBgFn(bgFn);
528
- this.contentBox.clear();
529
- this.renderBashContent();
530
- } else {
531
- // Other built-in tools: use Text directly with caching
532
- this.contentText.setCustomBgFn(bgFn);
533
- this.contentText.setText(this.formatToolExecution());
534
- }
535
- } else if (this.toolDefinition) {
536
- // Custom tools use Box for flexible component rendering
537
- this.contentBox.setBgFn(bgFn);
538
- this.contentBox.clear();
539
-
540
- // Render call component
541
- if (this.toolDefinition.renderCall) {
542
- try {
543
- const renderContext = {
544
- args: this.args,
545
- toolCallId: "",
546
- invalidate: () => this.updateDisplay(),
547
- lastComponent: undefined,
548
- state: undefined,
549
- cwd: this.cwd,
550
- executionStarted: !this.isPartial,
551
- argsComplete: true,
552
- isPartial: this.isPartial,
553
- expanded: this.expanded,
554
- showImages: this.showImages,
555
- isError: this.result?.isError ?? false,
556
- };
557
- // vendor-seam: dual-module-path -- ToolDefinition.renderCall signature diverges between pi dist and GSD usage
558
- const callComponent = (this.toolDefinition.renderCall as unknown as (...a: unknown[]) => Container | undefined)(this.args, theme, renderContext);
559
- if (callComponent !== undefined) {
560
- this.contentBox.addChild(callComponent);
561
- customRendererHasContent = true;
562
- }
563
- } catch {
564
- // Fall back to default on error
565
- this.contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.toolName)), 0, 0));
566
- customRendererHasContent = true;
567
- }
568
- } else {
569
- // No custom renderCall, show tool name
570
- this.contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.toolName)), 0, 0));
571
- customRendererHasContent = true;
572
- }
573
-
574
- // Render result component if we have a result
575
- if (this.result && this.toolDefinition.renderResult) {
576
- try {
577
- const renderContext = {
578
- args: this.args,
579
- toolCallId: "",
580
- invalidate: () => this.updateDisplay(),
581
- lastComponent: undefined,
582
- state: undefined,
583
- cwd: this.cwd,
584
- executionStarted: true,
585
- argsComplete: true,
586
- isPartial: this.isPartial,
587
- expanded: this.expanded,
588
- showImages: this.showImages,
589
- isError: this.result.isError,
590
- };
591
- // vendor-seam: dual-module-path -- ToolDefinition.renderResult signature diverges between pi dist and GSD usage
592
- const resultComponent = (this.toolDefinition.renderResult as unknown as (...a: unknown[]) => Container | undefined)(
593
- { content: this.result.content, details: this.result.details },
594
- { expanded: this.expanded, isPartial: this.isPartial },
595
- theme,
596
- renderContext,
597
- );
598
- if (resultComponent !== undefined) {
599
- this.contentBox.addChild(resultComponent);
600
- customRendererHasContent = true;
601
- }
602
- } catch {
603
- // Fall back to showing raw output on error
604
- const output = this.getTextOutput();
605
- if (output) {
606
- this.contentBox.addChild(new Text(theme.fg("toolOutput", output), 0, 0));
607
- customRendererHasContent = true;
608
- }
609
- }
610
- } else if (this.result) {
611
- // Has result but no custom renderResult
612
- const output = this.getTextOutput();
613
- if (output) {
614
- this.contentBox.addChild(new Text(theme.fg("toolOutput", output), 0, 0));
615
- customRendererHasContent = true;
616
- }
617
- }
618
- } else {
619
- // Unknown tool with no registered definition - show generic fallback
620
- this.contentText.setCustomBgFn(bgFn);
621
- this.contentText.setText(this.formatToolExecution());
622
- }
623
-
624
- // Handle images (same for both custom and built-in)
625
- for (const img of this.imageComponents) {
626
- this.removeChild(img);
627
- }
628
- this.imageComponents = [];
629
- for (const spacer of this.imageSpacers) {
630
- this.removeChild(spacer);
631
- }
632
- this.imageSpacers = [];
633
-
634
- if (this.result) {
635
- const imageBlocks = this.result.content?.filter((c) => c.type === "image") || [];
636
- const caps = getCapabilities();
637
-
638
- for (let i = 0; i < imageBlocks.length; i++) {
639
- const img = imageBlocks[i];
640
- if (caps.images && this.showImages && img.data && img.mimeType) {
641
- // Use converted PNG for Kitty protocol if available
642
- const converted = this.convertedImages.get(i);
643
- const imageData = converted?.data ?? img.data;
644
- const imageMimeType = converted?.mimeType ?? img.mimeType;
645
-
646
- // For Kitty, skip non-PNG images that haven't been converted yet
647
- if (caps.images === "kitty" && imageMimeType !== "image/png") {
648
- continue;
649
- }
650
-
651
- const spacer = new Spacer(1);
652
- this.addChild(spacer);
653
- this.imageSpacers.push(spacer);
654
- // Pass cached dimensions to avoid re-triggering async parsing
655
- // when updateDisplay() recreates Image components (#3455).
656
- const cachedDims = this.resolvedImageDimensions.get(i);
657
- const imageComponent = new Image(
658
- imageData,
659
- imageMimeType,
660
- { fallbackColor: (s: string) => theme.fg("toolOutput", s) },
661
- { maxWidthCells: 60 },
662
- cachedDims,
663
- );
664
- // setOnDimensionsResolved/getDimensions removed in pi-tui 0.67.2 —
665
- // dimensions are passed to the Image constructor and resolved synchronously.
666
- this.imageComponents.push(imageComponent);
667
- this.addChild(imageComponent);
668
- }
669
- }
670
- }
671
-
672
- if (!useBuiltInRenderer && this.toolDefinition) {
673
- this.hideComponent = !customRendererHasContent && this.imageComponents.length === 0;
674
- }
675
- }
676
-
677
- /**
678
- * Render bash content using visual line truncation (like bash-execution.ts)
679
- */
680
- private renderBashContent(): void {
681
- const command = str(this.args?.command);
682
- const timeout = this.args?.timeout as number | undefined;
683
-
684
- // Header
685
- const timeoutSuffix = timeout ? theme.fg("muted", ` (timeout ${timeout}s)`) : "";
686
- const commandDisplay =
687
- command === null ? theme.fg("error", "[invalid arg]") : command ? command : theme.fg("toolOutput", "...");
688
- this.contentBox.addChild(
689
- new Text(theme.fg("toolTitle", theme.bold(`$ ${commandDisplay}`)) + timeoutSuffix, 0, 0),
690
- );
691
-
692
- if (this.result) {
693
- const output = this.getTextOutput().trim();
694
-
695
- if (output) {
696
- // Style each line for the output
697
- const styledOutput = output
698
- .split("\n")
699
- .map((line) => theme.fg("toolOutput", line))
700
- .join("\n");
701
-
702
- if (this.expanded) {
703
- // Show all lines when expanded
704
- this.contentBox.addChild(new Text(`\n${styledOutput}`, 0, 0));
705
- } else {
706
- // Use visual line truncation when collapsed with width-aware caching
707
- let cachedWidth: number | undefined;
708
- let cachedLines: string[] | undefined;
709
- let cachedSkipped: number | undefined;
710
-
711
- this.contentBox.addChild({
712
- render: (width: number) => {
713
- if (cachedLines === undefined || cachedWidth !== width) {
714
- const result = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, width);
715
- cachedLines = result.visualLines;
716
- cachedSkipped = result.skippedCount;
717
- cachedWidth = width;
718
- }
719
- if (cachedSkipped && cachedSkipped > 0) {
720
- const hint =
721
- theme.fg("muted", `... (${cachedSkipped} earlier lines,`) +
722
- ` ${keyHint("expandTools", "to expand")})`;
723
- return ["", truncateToWidth(hint, width, "..."), ...cachedLines];
724
- }
725
- // Add blank line for spacing (matches expanded case)
726
- return ["", ...cachedLines];
727
- },
728
- invalidate: () => {
729
- cachedWidth = undefined;
730
- cachedLines = undefined;
731
- cachedSkipped = undefined;
732
- },
733
- });
734
- }
735
- }
736
-
737
- // Truncation warnings
738
- const truncation = this.result.details?.truncation;
739
- const fullOutputPath = this.result.details?.fullOutputPath;
740
- if (truncation?.truncated || fullOutputPath) {
741
- const warnings: string[] = [];
742
- if (fullOutputPath) {
743
- warnings.push(`Full output: ${fullOutputPath}`);
744
- }
745
- if (truncation?.truncated) {
746
- if (truncation.truncatedBy === "lines") {
747
- warnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);
748
- } else {
749
- warnings.push(
750
- `Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`,
751
- );
752
- }
753
- }
754
- this.contentBox.addChild(new Text(`\n${theme.fg("warning", `[${warnings.join(". ")}]`)}`, 0, 0));
755
- }
756
- }
757
- }
758
-
759
- private getTextOutput(): string {
760
- if (!this.result) return "";
761
-
762
- const textBlocks = this.result.content?.filter((c) => c.type === "text") || [];
763
- const imageBlocks = this.result.content?.filter((c) => c.type === "image") || [];
764
-
765
- let output = textBlocks
766
- .map((c) => {
767
- // Use sanitizeBinaryOutput to handle binary data that crashes string-width
768
- return sanitizeBinaryOutput(stripAnsi(c.text || "")).replace(/\r/g, "");
769
- })
770
- .join("\n");
771
-
772
- const caps = getCapabilities();
773
- if (imageBlocks.length > 0 && (!caps.images || !this.showImages)) {
774
- const imageIndicators = imageBlocks
775
- .map((img) => {
776
- return imageFallback(typeof img.mimeType === "string" ? img.mimeType : "image/unknown");
777
- })
778
- .join("\n");
779
- output = output ? `${output}\n${imageIndicators}` : imageIndicators;
780
- }
781
-
782
- return output;
783
- }
784
-
785
- private formatToolExecution(): string {
786
- let text: string;
787
- const invalidArg = theme.fg("error", "[invalid arg]");
788
- const normalizedToolName = this.normalizedToolName;
789
-
790
- if (normalizedToolName === "read") {
791
- const rawPath = str(this.args?.file_path ?? this.args?.path);
792
- const path = rawPath !== null ? shortenPath(rawPath) : null;
793
- const offset = typeof this.args?.offset === "number" ? this.args.offset : undefined;
794
- const limit = typeof this.args?.limit === "number" ? this.args.limit : undefined;
795
-
796
- let pathDisplay = path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "...");
797
- if (offset !== undefined || limit !== undefined) {
798
- const startLine = offset ?? 1;
799
- const endLine = limit !== undefined ? startLine + limit - 1 : "";
800
- pathDisplay += theme.fg("warning", `:${startLine}${endLine ? `-${endLine}` : ""}`);
801
- }
802
-
803
- text = `${theme.fg("toolTitle", theme.bold("read"))} ${pathDisplay}`;
804
-
805
- if (this.result) {
806
- if (this.result.isError) {
807
- const errorText = this.getTextOutput().trim() || "read failed";
808
- text += `\n\n${theme.fg("error", errorText)}`;
809
- return text;
810
- }
811
-
812
- const rawOutput = this.getTextOutput();
813
- // Strip hashline prefixes (e.g. "1#BQ:content") for TUI display
814
- const output = rawOutput.replace(/^(\s*)\d+#[ZPMQVRWSNKTXJBYH]{2}:/gm, "$1");
815
- const rawPath = str(this.args?.file_path ?? this.args?.path);
816
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
817
- const lines = lang ? highlightCode(replaceTabs(output), lang) : output.split("\n");
818
-
819
- const maxLines = this.expanded ? lines.length : 10;
820
- const displayLines = lines.slice(0, maxLines);
821
- const remaining = lines.length - maxLines;
822
-
823
- text +=
824
- "\n\n" +
825
- displayLines
826
- .map((line: string) => (lang ? replaceTabs(line) : theme.fg("toolOutput", replaceTabs(line))))
827
- .join("\n");
828
- if (remaining > 0) {
829
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
830
- }
831
-
832
- const truncation = this.result.details?.truncation;
833
- if (truncation?.truncated) {
834
- if (truncation.firstLineExceedsLimit) {
835
- text +=
836
- "\n" +
837
- theme.fg(
838
- "warning",
839
- `[First line exceeds ${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit]`,
840
- );
841
- } else if (truncation.truncatedBy === "lines") {
842
- text +=
843
- "\n" +
844
- theme.fg(
845
- "warning",
846
- `[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines (${truncation.maxLines ?? DEFAULT_MAX_LINES} line limit)]`,
847
- );
848
- } else {
849
- text +=
850
- "\n" +
851
- theme.fg(
852
- "warning",
853
- `[Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)]`,
854
- );
855
- }
856
- }
857
- }
858
- } else if (normalizedToolName === "write") {
859
- const rawPath = str(this.args?.file_path ?? this.args?.path);
860
- const fileContent = str(this.args?.content);
861
- const path = rawPath !== null ? shortenPath(rawPath) : null;
862
-
863
- text =
864
- theme.fg("toolTitle", theme.bold("write")) +
865
- " " +
866
- (path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "..."));
867
-
868
- if (fileContent === null) {
869
- text += `\n\n${theme.fg("error", "[invalid content arg - expected string]")}`;
870
- } else if (fileContent) {
871
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
872
-
873
- let lines: string[];
874
- if (lang) {
875
- const cache = this.writeHighlightCache;
876
- if (cache && cache.lang === lang && cache.rawPath === rawPath && cache.rawContent === fileContent) {
877
- lines = cache.highlightedLines;
878
- } else {
879
- const displayContent = normalizeDisplayText(fileContent);
880
- const normalized = replaceTabs(displayContent);
881
- lines = highlightCode(normalized, lang);
882
- this.writeHighlightCache = {
883
- rawPath,
884
- lang,
885
- rawContent: fileContent,
886
- normalizedLines: normalized.split("\n"),
887
- highlightedLines: lines,
888
- };
889
- }
890
- } else {
891
- lines = normalizeDisplayText(fileContent).split("\n");
892
- this.writeHighlightCache = undefined;
893
- }
894
-
895
- const totalLines = lines.length;
896
- const maxLines = this.expanded ? lines.length : 10;
897
- const displayLines = lines.slice(0, maxLines);
898
- const remaining = lines.length - maxLines;
899
-
900
- text +=
901
- "\n\n" +
902
- displayLines.map((line: string) => (lang ? line : theme.fg("toolOutput", replaceTabs(line)))).join("\n");
903
- if (remaining > 0) {
904
- text +=
905
- theme.fg("muted", `\n... (${remaining} more lines, ${totalLines} total,`) +
906
- ` ${keyHint("expandTools", "to expand")})`;
907
- }
908
- }
909
-
910
- // Show error if tool execution failed
911
- if (this.result?.isError) {
912
- const errorText = this.getTextOutput();
913
- if (errorText) {
914
- text += `\n\n${theme.fg("error", errorText)}`;
915
- }
916
- }
917
- } else if (normalizedToolName === "edit") {
918
- const rawPath = str(this.args?.file_path ?? this.args?.path);
919
- const path = rawPath !== null ? shortenPath(rawPath) : null;
920
-
921
- // Build path display, appending :line if we have diff info
922
- let pathDisplay = path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "...");
923
- const firstChangedLine =
924
- (this.editDiffPreview && "firstChangedLine" in this.editDiffPreview
925
- ? this.editDiffPreview.firstChangedLine
926
- : undefined) ||
927
- (this.result && !this.result.isError ? this.result.details?.firstChangedLine : undefined);
928
- if (firstChangedLine) {
929
- pathDisplay += theme.fg("warning", `:${firstChangedLine}`);
930
- }
931
-
932
- text = `${theme.fg("toolTitle", theme.bold("edit"))} ${pathDisplay}`;
933
-
934
- if (this.result?.isError) {
935
- // Show error from result
936
- const errorText = this.getTextOutput();
937
- if (errorText) {
938
- text += `\n\n${theme.fg("error", errorText)}`;
939
- }
940
- } else if (this.result?.details?.diff) {
941
- // Tool executed successfully - use the diff from result
942
- // This takes priority over editDiffPreview which may have a stale error
943
- // due to race condition (async preview computed after file was modified)
944
- text += `\n\n${renderDiff(this.result.details.diff, { filePath: rawPath ?? undefined })}`;
945
- } else if (this.editDiffPreview) {
946
- // Use cached diff preview (before tool executes)
947
- if ("error" in this.editDiffPreview) {
948
- text += `\n\n${theme.fg("error", this.editDiffPreview.error)}`;
949
- } else if (this.editDiffPreview.diff) {
950
- text += `\n\n${renderDiff(this.editDiffPreview.diff, { filePath: rawPath ?? undefined })}`;
951
- }
952
- }
953
- } else if (normalizedToolName === "ls") {
954
- const rawPath = str(this.args?.path);
955
- const path = rawPath !== null ? shortenPath(rawPath || ".") : null;
956
- const limit = this.args?.limit;
957
-
958
- text = `${theme.fg("toolTitle", theme.bold("ls"))} ${path === null ? invalidArg : theme.fg("accent", path)}`;
959
- if (limit !== undefined) {
960
- text += theme.fg("toolOutput", ` (limit ${limit})`);
961
- }
962
-
963
- if (this.result) {
964
- if (this.result.isError) {
965
- const errorText = this.getTextOutput().trim() || "ls failed";
966
- text += `\n\n${theme.fg("error", errorText)}`;
967
- return text;
968
- }
969
-
970
- const output = this.getTextOutput().trim();
971
- if (output) {
972
- const lines = output.split("\n");
973
- const maxLines = this.expanded ? lines.length : 20;
974
- const displayLines = lines.slice(0, maxLines);
975
- const remaining = lines.length - maxLines;
976
-
977
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
978
- if (remaining > 0) {
979
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
980
- }
981
- }
982
-
983
- const entryLimit = this.result.details?.entryLimitReached;
984
- const truncation = this.result.details?.truncation;
985
- if (entryLimit || truncation?.truncated) {
986
- const warnings: string[] = [];
987
- if (entryLimit) {
988
- warnings.push(`${entryLimit} entries limit`);
989
- }
990
- if (truncation?.truncated) {
991
- warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);
992
- }
993
- text += `\n${theme.fg("warning", `[Truncated: ${warnings.join(", ")}]`)}`;
994
- }
995
- }
996
- } else if (normalizedToolName === "find") {
997
- const pattern = str(this.args?.pattern);
998
- const rawPath = str(this.args?.path);
999
- const path = rawPath !== null ? shortenPath(rawPath || ".") : null;
1000
- const limit = this.args?.limit;
1001
-
1002
- text =
1003
- theme.fg("toolTitle", theme.bold("find")) +
1004
- " " +
1005
- (pattern === null ? invalidArg : theme.fg("accent", pattern || "")) +
1006
- theme.fg("toolOutput", ` in ${path === null ? invalidArg : path}`);
1007
- if (limit !== undefined) {
1008
- text += theme.fg("toolOutput", ` (limit ${limit})`);
1009
- }
1010
-
1011
- if (this.result) {
1012
- if (this.result.isError) {
1013
- const errorText = this.getTextOutput().trim() || "find failed";
1014
- text += `\n\n${theme.fg("error", errorText)}`;
1015
- return text;
1016
- }
1017
-
1018
- const output = this.getTextOutput().trim();
1019
- if (output) {
1020
- const lines = output.split("\n");
1021
- const maxLines = this.expanded ? lines.length : 20;
1022
- const displayLines = lines.slice(0, maxLines);
1023
- const remaining = lines.length - maxLines;
1024
-
1025
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1026
- if (remaining > 0) {
1027
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1028
- }
1029
- }
1030
-
1031
- const resultLimit = this.result.details?.resultLimitReached;
1032
- const truncation = this.result.details?.truncation;
1033
- if (resultLimit || truncation?.truncated) {
1034
- const warnings: string[] = [];
1035
- if (resultLimit) {
1036
- warnings.push(`${resultLimit} results limit`);
1037
- }
1038
- if (truncation?.truncated) {
1039
- warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);
1040
- }
1041
- text += `\n${theme.fg("warning", `[Truncated: ${warnings.join(", ")}]`)}`;
1042
- }
1043
- }
1044
- } else if (normalizedToolName === "grep") {
1045
- const pattern = str(this.args?.pattern);
1046
- const rawPath = str(this.args?.path);
1047
- const path = rawPath !== null ? shortenPath(rawPath || ".") : null;
1048
- const glob = str(this.args?.glob);
1049
- const limit = this.args?.limit;
1050
-
1051
- text =
1052
- theme.fg("toolTitle", theme.bold("grep")) +
1053
- " " +
1054
- (pattern === null ? invalidArg : theme.fg("accent", `/${pattern || ""}/`)) +
1055
- theme.fg("toolOutput", ` in ${path === null ? invalidArg : path}`);
1056
- if (glob) {
1057
- text += theme.fg("toolOutput", ` (${glob})`);
1058
- }
1059
- if (limit !== undefined) {
1060
- text += theme.fg("toolOutput", ` limit ${limit}`);
1061
- }
1062
-
1063
- if (this.result) {
1064
- if (this.result.isError) {
1065
- const errorText = this.getTextOutput().trim() || "grep failed";
1066
- text += `\n\n${theme.fg("error", errorText)}`;
1067
- return text;
1068
- }
1069
-
1070
- const output = this.getTextOutput().trim();
1071
- if (output) {
1072
- const lines = output.split("\n");
1073
- const maxLines = this.expanded ? lines.length : 15;
1074
- const displayLines = lines.slice(0, maxLines);
1075
- const remaining = lines.length - maxLines;
1076
-
1077
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1078
- if (remaining > 0) {
1079
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1080
- }
1081
- }
1082
-
1083
- const matchLimit = this.result.details?.matchLimitReached;
1084
- const truncation = this.result.details?.truncation;
1085
- const linesTruncated = this.result.details?.linesTruncated;
1086
- if (matchLimit || truncation?.truncated || linesTruncated) {
1087
- const warnings: string[] = [];
1088
- if (matchLimit) {
1089
- warnings.push(`${matchLimit} matches limit`);
1090
- }
1091
- if (truncation?.truncated) {
1092
- warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);
1093
- }
1094
- if (linesTruncated) {
1095
- warnings.push("some lines truncated");
1096
- }
1097
- text += `\n${theme.fg("warning", `[Truncated: ${warnings.join(", ")}]`)}`;
1098
- }
1099
- }
1100
- } else if (normalizedToolName === "web_search") {
1101
- // Server-side Anthropic web search
1102
- text = theme.fg("toolTitle", theme.bold("web search"));
1103
-
1104
- if (process.env.PI_OFFLINE === "1") {
1105
- text += "\n\n" + theme.fg("muted", "\u{1F50C} Offline \u{2014} web search unavailable");
1106
- } else if (this.result) {
1107
- const output = this.getTextOutput().trim();
1108
- if (output) {
1109
- const lines = output.split("\n");
1110
- const maxLines = this.expanded ? lines.length : 10;
1111
- const displayLines = lines.slice(0, maxLines);
1112
- const remaining = lines.length - maxLines;
1113
-
1114
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1115
- if (remaining > 0) {
1116
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1117
- }
1118
- }
1119
- }
1120
- } else {
1121
- // Generic tool / MCP tool without a registered renderer.
1122
- // MCP tool names from Claude Code arrive as `mcp__<server>__<tool>`;
1123
- // render the server prefix in muted style so the tool name reads
1124
- // cleanly. GSD-registered MCP tools have already had their prefix
1125
- // stripped upstream in partial-builder.ts and won't reach this branch.
1126
- const parsed = parseMcpToolName(this.toolName);
1127
- const displayName = parsed ? parsed.tool : this.toolName;
1128
- const serverPrefix = parsed ? theme.fg("muted", `${parsed.server}\u00b7`) : "";
1129
- text = serverPrefix + theme.fg("toolTitle", theme.bold(displayName));
1130
-
1131
- const argsText = formatCompactArgs(this.args, this.expanded);
1132
- if (argsText) {
1133
- if (argsText.includes("\n")) {
1134
- text += `\n\n${theme.fg("toolOutput", argsText)}`;
1135
- } else {
1136
- text += " " + theme.fg("toolOutput", argsText);
1137
- }
1138
- }
1139
-
1140
- if (this.result) {
1141
- const output = this.getTextOutput().trim();
1142
- if (output) {
1143
- const lines = output.split("\n");
1144
- const maxLines = this.expanded ? lines.length : GENERIC_OUTPUT_PREVIEW_LINES;
1145
- const displayLines = lines.slice(0, maxLines);
1146
- const remaining = lines.length - maxLines;
1147
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1148
- if (remaining > 0) {
1149
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1150
- }
1151
- }
1152
- }
1153
- }
1154
-
1155
- return text;
1156
- }
1157
- }