@astralyn/pi 0.85.3 → 0.86.1

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 (335) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/bundle/chunks/anthropic-messages-R2LYJUDD.js +6 -0
  3. package/dist/bundle/chunks/azure-openai-responses-HS35BQV6.js +2 -0
  4. package/dist/bundle/chunks/bedrock-converse-stream.js +36 -32
  5. package/dist/bundle/chunks/{chunk-S2DJQQI2.js → chunk-2IO5GDBS.js} +10 -1
  6. package/dist/bundle/chunks/chunk-DAEM5JIZ.js +2 -0
  7. package/dist/bundle/chunks/{chunk-LB4P77SH.js → chunk-GTBMYBFG.js} +777 -762
  8. package/dist/bundle/chunks/{chunk-7LO5Z4WE.js → chunk-I5IVW2WS.js} +1 -1
  9. package/dist/bundle/chunks/chunk-JI4WGISU.js +2 -0
  10. package/dist/bundle/chunks/chunk-LPQCB2VJ.js +44 -0
  11. package/dist/bundle/chunks/chunk-NW5FIDD7.js +11 -0
  12. package/dist/bundle/chunks/chunk-PJVFYVHE.js +42 -0
  13. package/dist/bundle/chunks/github-copilot.js +1 -1
  14. package/dist/bundle/chunks/google-generative-ai-NOVAJBFC.js +2 -0
  15. package/dist/bundle/chunks/google-vertex-4VHCZJV5.js +2 -0
  16. package/dist/bundle/chunks/https-proxy-agent-JOOPB4RE.js +16 -0
  17. package/dist/bundle/chunks/jiti-loader-BFSSLU7G.js +21 -0
  18. package/dist/bundle/chunks/jiti-static-loader-CLT3YR3B.js +2 -0
  19. package/dist/bundle/chunks/mistral-conversations-WC6A2WCJ.js +5 -0
  20. package/dist/bundle/chunks/{node-G4XOIDPH.js → node-CXWYTK2I.js} +1 -1
  21. package/dist/bundle/chunks/openai-codex-responses-XCDG75W2.js +10 -0
  22. package/dist/bundle/chunks/openai-completions-6SMWQWQN.js +7 -0
  23. package/dist/bundle/chunks/openai-responses-UT6XFKC7.js +2 -0
  24. package/dist/bundle/chunks/{pi-messages-PE6B42TG.js → pi-messages-MQMPIPNC.js} +1 -1
  25. package/dist/bundle/chunks/virtual-modules-OHUZ2T7X.js +2 -0
  26. package/dist/bundle/cli.js +1 -1
  27. package/dist/bundle/index.js +1 -1
  28. package/dist/bundle/rpc-entry.js +1 -1
  29. package/dist/cli/args.d.ts.map +1 -1
  30. package/dist/cli/args.js +1 -0
  31. package/dist/cli/args.js.map +1 -1
  32. package/dist/cli/session-picker.d.ts +1 -1
  33. package/dist/cli/session-picker.d.ts.map +1 -1
  34. package/dist/cli/session-picker.js +13 -11
  35. package/dist/cli/session-picker.js.map +1 -1
  36. package/dist/config.js +1 -1
  37. package/dist/config.js.map +1 -1
  38. package/dist/core/agent-session.d.ts +56 -14
  39. package/dist/core/agent-session.d.ts.map +1 -1
  40. package/dist/core/agent-session.js +305 -176
  41. package/dist/core/agent-session.js.map +1 -1
  42. package/dist/core/bug-report-upload.d.ts +12 -0
  43. package/dist/core/bug-report-upload.d.ts.map +1 -0
  44. package/dist/core/bug-report-upload.js +22 -0
  45. package/dist/core/bug-report-upload.js.map +1 -0
  46. package/dist/core/bug-report.d.ts +176 -0
  47. package/dist/core/bug-report.d.ts.map +1 -0
  48. package/dist/core/bug-report.js +292 -0
  49. package/dist/core/bug-report.js.map +1 -0
  50. package/dist/core/cache-stats.d.ts.map +1 -1
  51. package/dist/core/cache-stats.js +12 -1
  52. package/dist/core/cache-stats.js.map +1 -1
  53. package/dist/core/cache-warmer.d.ts +102 -0
  54. package/dist/core/cache-warmer.d.ts.map +1 -0
  55. package/dist/core/cache-warmer.js +333 -0
  56. package/dist/core/cache-warmer.js.map +1 -0
  57. package/dist/core/compaction/branch-summarization.js +2 -2
  58. package/dist/core/compaction/branch-summarization.js.map +1 -1
  59. package/dist/core/compaction/compaction.d.ts +14 -9
  60. package/dist/core/compaction/compaction.d.ts.map +1 -1
  61. package/dist/core/compaction/compaction.js +30 -23
  62. package/dist/core/compaction/compaction.js.map +1 -1
  63. package/dist/core/compaction/settings.d.ts +17 -20
  64. package/dist/core/compaction/settings.d.ts.map +1 -1
  65. package/dist/core/compaction/settings.js +19 -26
  66. package/dist/core/compaction/settings.js.map +1 -1
  67. package/dist/core/context-snapshot.d.ts +16 -5
  68. package/dist/core/context-snapshot.d.ts.map +1 -1
  69. package/dist/core/context-snapshot.js +20 -10
  70. package/dist/core/context-snapshot.js.map +1 -1
  71. package/dist/core/crash-log.d.ts +22 -0
  72. package/dist/core/crash-log.d.ts.map +1 -0
  73. package/dist/core/crash-log.js +71 -0
  74. package/dist/core/crash-log.js.map +1 -0
  75. package/dist/core/experimental.d.ts +0 -4
  76. package/dist/core/experimental.d.ts.map +1 -1
  77. package/dist/core/experimental.js +0 -4
  78. package/dist/core/experimental.js.map +1 -1
  79. package/dist/core/extensions/index.d.ts +1 -1
  80. package/dist/core/extensions/index.d.ts.map +1 -1
  81. package/dist/core/extensions/index.js.map +1 -1
  82. package/dist/core/extensions/jiti-loader.d.ts +2 -0
  83. package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
  84. package/dist/core/extensions/jiti-loader.js +4 -0
  85. package/dist/core/extensions/jiti-loader.js.map +1 -0
  86. package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
  87. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
  88. package/dist/core/extensions/jiti-static-loader.js +4 -0
  89. package/dist/core/extensions/jiti-static-loader.js.map +1 -0
  90. package/dist/core/extensions/loader.d.ts.map +1 -1
  91. package/dist/core/extensions/loader.js +38 -51
  92. package/dist/core/extensions/loader.js.map +1 -1
  93. package/dist/core/extensions/runner.d.ts +10 -7
  94. package/dist/core/extensions/runner.d.ts.map +1 -1
  95. package/dist/core/extensions/runner.js +85 -67
  96. package/dist/core/extensions/runner.js.map +1 -1
  97. package/dist/core/extensions/types.d.ts +60 -50
  98. package/dist/core/extensions/types.d.ts.map +1 -1
  99. package/dist/core/extensions/types.js.map +1 -1
  100. package/dist/core/extensions/virtual-modules.d.ts +3 -0
  101. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  102. package/dist/core/extensions/virtual-modules.js +39 -0
  103. package/dist/core/extensions/virtual-modules.js.map +1 -0
  104. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  105. package/dist/core/extensions/wrapper.js +1 -20
  106. package/dist/core/extensions/wrapper.js.map +1 -1
  107. package/dist/core/index.d.ts +2 -1
  108. package/dist/core/index.d.ts.map +1 -1
  109. package/dist/core/index.js.map +1 -1
  110. package/dist/core/keybindings.d.ts +1 -1
  111. package/dist/core/keybindings.js +1 -1
  112. package/dist/core/keybindings.js.map +1 -1
  113. package/dist/core/messages.d.ts.map +1 -1
  114. package/dist/core/messages.js +1 -0
  115. package/dist/core/messages.js.map +1 -1
  116. package/dist/core/model-config.d.ts +101 -20
  117. package/dist/core/model-config.d.ts.map +1 -1
  118. package/dist/core/model-config.js +25 -18
  119. package/dist/core/model-config.js.map +1 -1
  120. package/dist/core/model-registry.d.ts +5 -1
  121. package/dist/core/model-registry.d.ts.map +1 -1
  122. package/dist/core/model-registry.js +8 -0
  123. package/dist/core/model-registry.js.map +1 -1
  124. package/dist/core/model-resolver.d.ts.map +1 -1
  125. package/dist/core/model-resolver.js +2 -1
  126. package/dist/core/model-resolver.js.map +1 -1
  127. package/dist/core/model-runtime.d.ts.map +1 -1
  128. package/dist/core/model-runtime.js +5 -3
  129. package/dist/core/model-runtime.js.map +1 -1
  130. package/dist/core/provider-composer.d.ts +3 -2
  131. package/dist/core/provider-composer.d.ts.map +1 -1
  132. package/dist/core/provider-composer.js +2 -0
  133. package/dist/core/provider-composer.js.map +1 -1
  134. package/dist/core/radius.d.ts +3 -0
  135. package/dist/core/radius.d.ts.map +1 -1
  136. package/dist/core/radius.js +6 -0
  137. package/dist/core/radius.js.map +1 -1
  138. package/dist/core/sdk.d.ts.map +1 -1
  139. package/dist/core/sdk.js +46 -18
  140. package/dist/core/sdk.js.map +1 -1
  141. package/dist/core/session-export.d.ts +6 -2
  142. package/dist/core/session-export.d.ts.map +1 -1
  143. package/dist/core/session-export.js +14 -13
  144. package/dist/core/session-export.js.map +1 -1
  145. package/dist/core/session-manager.d.ts +29 -6
  146. package/dist/core/session-manager.d.ts.map +1 -1
  147. package/dist/core/session-manager.js +159 -96
  148. package/dist/core/session-manager.js.map +1 -1
  149. package/dist/core/settings-manager.d.ts +31 -4
  150. package/dist/core/settings-manager.d.ts.map +1 -1
  151. package/dist/core/settings-manager.js +65 -8
  152. package/dist/core/settings-manager.js.map +1 -1
  153. package/dist/core/slash-commands.d.ts.map +1 -1
  154. package/dist/core/slash-commands.js +1 -0
  155. package/dist/core/slash-commands.js.map +1 -1
  156. package/dist/core/system-prompt.d.ts +49 -6
  157. package/dist/core/system-prompt.d.ts.map +1 -1
  158. package/dist/core/system-prompt.js +121 -92
  159. package/dist/core/system-prompt.js.map +1 -1
  160. package/dist/core/tools/bash.d.ts +2 -1
  161. package/dist/core/tools/bash.d.ts.map +1 -1
  162. package/dist/core/tools/bash.js +6 -3
  163. package/dist/core/tools/bash.js.map +1 -1
  164. package/dist/core/tools/edit.d.ts.map +1 -1
  165. package/dist/core/tools/edit.js +1 -2
  166. package/dist/core/tools/edit.js.map +1 -1
  167. package/dist/core/tools/read.d.ts.map +1 -1
  168. package/dist/core/tools/read.js +1 -2
  169. package/dist/core/tools/read.js.map +1 -1
  170. package/dist/core/tools/shell-execution.js +2 -2
  171. package/dist/core/tools/shell-execution.js.map +1 -1
  172. package/dist/core/tools/write.d.ts.map +1 -1
  173. package/dist/core/tools/write.js +1 -2
  174. package/dist/core/tools/write.js.map +1 -1
  175. package/dist/core/usage-totals.d.ts +1 -1
  176. package/dist/core/usage-totals.d.ts.map +1 -1
  177. package/dist/core/usage-totals.js +4 -1
  178. package/dist/core/usage-totals.js.map +1 -1
  179. package/dist/extensions/background/schema.d.ts +1 -1
  180. package/dist/extensions/btw/agent.d.ts.map +1 -1
  181. package/dist/extensions/btw/agent.js +3 -2
  182. package/dist/extensions/btw/agent.js.map +1 -1
  183. package/dist/extensions/llama/client.d.ts +2 -0
  184. package/dist/extensions/llama/client.d.ts.map +1 -1
  185. package/dist/extensions/llama/client.js +7 -3
  186. package/dist/extensions/llama/client.js.map +1 -1
  187. package/dist/extensions/llama/provider.d.ts.map +1 -1
  188. package/dist/extensions/llama/provider.js +20 -5
  189. package/dist/extensions/llama/provider.js.map +1 -1
  190. package/dist/extensions/provider/compat-fields.d.ts.map +1 -1
  191. package/dist/extensions/provider/compat-fields.js +5 -2
  192. package/dist/extensions/provider/compat-fields.js.map +1 -1
  193. package/dist/extensions/provider/ui/app.js +2 -2
  194. package/dist/extensions/provider/ui/app.js.map +1 -1
  195. package/dist/extensions/todo/schema.d.ts +1 -1
  196. package/dist/index.d.ts +3 -2
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js.map +1 -1
  199. package/dist/main.d.ts.map +1 -1
  200. package/dist/main.js +13 -9
  201. package/dist/main.js.map +1 -1
  202. package/dist/migrations.d.ts.map +1 -1
  203. package/dist/migrations.js +2 -2
  204. package/dist/migrations.js.map +1 -1
  205. package/dist/modes/interactive/bug-report.d.ts +16 -0
  206. package/dist/modes/interactive/bug-report.d.ts.map +1 -0
  207. package/dist/modes/interactive/bug-report.js +206 -0
  208. package/dist/modes/interactive/bug-report.js.map +1 -0
  209. package/dist/modes/interactive/chat-viewport.js +1 -1
  210. package/dist/modes/interactive/chat-viewport.js.map +1 -1
  211. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  212. package/dist/modes/interactive/components/armin.js +0 -5
  213. package/dist/modes/interactive/components/armin.js.map +1 -1
  214. package/dist/modes/interactive/components/bash-execution.d.ts +0 -1
  215. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  216. package/dist/modes/interactive/components/bash-execution.js +2 -3
  217. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  218. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  219. package/dist/modes/interactive/components/branch-summary-message.js +12 -5
  220. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  221. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  222. package/dist/modes/interactive/components/compaction-summary-message.js +12 -5
  223. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  224. package/dist/modes/interactive/components/countdown-timer.d.ts +6 -13
  225. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  226. package/dist/modes/interactive/components/countdown-timer.js +15 -51
  227. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  228. package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
  229. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  230. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  231. package/dist/modes/interactive/components/extension-editor.d.ts +4 -1
  232. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  233. package/dist/modes/interactive/components/extension-editor.js +7 -2
  234. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  235. package/dist/modes/interactive/components/extension-input.d.ts +2 -0
  236. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  237. package/dist/modes/interactive/components/extension-input.js +6 -0
  238. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  239. package/dist/modes/interactive/components/extension-selector.d.ts +1 -2
  240. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  241. package/dist/modes/interactive/components/extension-selector.js +4 -2
  242. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  243. package/dist/modes/interactive/components/session-selector.d.ts +5 -8
  244. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  245. package/dist/modes/interactive/components/session-selector.js +72 -95
  246. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  247. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  248. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  249. package/dist/modes/interactive/components/settings-selector.js +11 -0
  250. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  251. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  252. package/dist/modes/interactive/components/skill-invocation-message.js +11 -4
  253. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  254. package/dist/modes/interactive/components/status-indicator.d.ts +2 -2
  255. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  256. package/dist/modes/interactive/components/status-indicator.js +7 -7
  257. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  258. package/dist/modes/interactive/components/tool-chrome.d.ts.map +1 -1
  259. package/dist/modes/interactive/components/tool-chrome.js +4 -1
  260. package/dist/modes/interactive/components/tool-chrome.js.map +1 -1
  261. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  262. package/dist/modes/interactive/components/tool-execution.js +4 -3
  263. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  264. package/dist/modes/interactive/components/tree-selector.d.ts +1 -10
  265. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  266. package/dist/modes/interactive/components/tree-selector.js +4 -51
  267. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  268. package/dist/modes/interactive/interactive-mode.d.ts +15 -2
  269. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  270. package/dist/modes/interactive/interactive-mode.js +234 -91
  271. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  272. package/dist/modes/interactive/session-share.d.ts +2 -0
  273. package/dist/modes/interactive/session-share.d.ts.map +1 -1
  274. package/dist/modes/interactive/session-share.js +8 -4
  275. package/dist/modes/interactive/session-share.js.map +1 -1
  276. package/dist/modes/interactive/tui-renderer.js +2 -2
  277. package/dist/modes/interactive/tui-renderer.js.map +1 -1
  278. package/dist/modes/rpc/rpc-mode.js +2 -2
  279. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  280. package/dist/utils/clipboard-command.d.ts +7 -0
  281. package/dist/utils/clipboard-command.d.ts.map +1 -0
  282. package/dist/utils/clipboard-command.js +45 -0
  283. package/dist/utils/clipboard-command.js.map +1 -0
  284. package/dist/utils/clipboard-image.d.ts.map +1 -1
  285. package/dist/utils/clipboard-image.js +53 -81
  286. package/dist/utils/clipboard-image.js.map +1 -1
  287. package/dist/utils/clipboard.d.ts.map +1 -1
  288. package/dist/utils/clipboard.js +111 -121
  289. package/dist/utils/clipboard.js.map +1 -1
  290. package/dist/utils/wsl.d.ts +3 -0
  291. package/dist/utils/wsl.d.ts.map +1 -0
  292. package/dist/utils/wsl.js +15 -0
  293. package/dist/utils/wsl.js.map +1 -0
  294. package/dist/utils/zip.d.ts +7 -0
  295. package/dist/utils/zip.d.ts.map +1 -0
  296. package/dist/utils/zip.js +60 -0
  297. package/dist/utils/zip.js.map +1 -0
  298. package/docs/compaction.md +32 -11
  299. package/docs/custom-provider.md +19 -8
  300. package/docs/environment-variables.md +1 -0
  301. package/docs/extensions.md +50 -34
  302. package/docs/models.md +38 -3
  303. package/docs/providers.md +9 -1
  304. package/docs/sdk.md +4 -2
  305. package/docs/session-format.md +63 -24
  306. package/docs/sessions.md +28 -1
  307. package/docs/settings.md +58 -4
  308. package/docs/termux.md +0 -1
  309. package/docs/tui.md +2 -0
  310. package/docs/usage.md +1 -0
  311. package/examples/extensions/README.md +0 -1
  312. package/examples/extensions/custom-provider-anthropic/index.ts +18 -12
  313. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  314. package/examples/extensions/prompt-customizer.ts +19 -67
  315. package/npm-shrinkwrap.json +275 -1028
  316. package/package.json +17 -23
  317. package/dist/bundle/chunks/anthropic-messages-IHRRITCV.js +0 -6
  318. package/dist/bundle/chunks/azure-openai-responses-QXBIDYXO.js +0 -2
  319. package/dist/bundle/chunks/chunk-JSJPY26N.js +0 -2
  320. package/dist/bundle/chunks/chunk-KI6LC764.js +0 -42
  321. package/dist/bundle/chunks/chunk-OWESLY5T.js +0 -11
  322. package/dist/bundle/chunks/chunk-RRBI7OUG.js +0 -50
  323. package/dist/bundle/chunks/chunk-YZJWMPUI.js +0 -2
  324. package/dist/bundle/chunks/google-generative-ai-NBOR3IQR.js +0 -2
  325. package/dist/bundle/chunks/google-vertex-VTHX3SUB.js +0 -2
  326. package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +0 -13
  327. package/dist/bundle/chunks/mistral-conversations-NO4ANAA5.js +0 -5
  328. package/dist/bundle/chunks/openai-codex-responses-5S3T3HMA.js +0 -10
  329. package/dist/bundle/chunks/openai-completions-CXRRTRWE.js +0 -7
  330. package/dist/bundle/chunks/openai-responses-CV3MH6VP.js +0 -2
  331. package/dist/utils/clipboard-native.d.ts +0 -11
  332. package/dist/utils/clipboard-native.d.ts.map +0 -1
  333. package/dist/utils/clipboard-native.js +0 -20
  334. package/dist/utils/clipboard-native.js.map +0 -1
  335. package/examples/extensions/kimi-deferred-tools.ts +0 -61
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype Component,\n\tContainer,\n\tgetCapabilities,\n\tImage,\n\tMouseRegion,\n\tSpacer,\n\tText,\n\ttype TUI,\n\ttype TuiMouseEvent,\n} from \"@earendil-works/pi-tui\";\nimport type { ToolDefinition, ToolRenderContext, ToolRenderResultOptions } from \"../../../core/extensions/types.ts\";\nimport type { Theme } from \"../theme/theme.ts\";\n\n/**\n * What this component needs from a tool: how to draw it. It neither executes tools nor reads their\n * parameter schemas, so a definition and a bare renderer pair are equally acceptable.\n *\n * The renderer parameters are `any` on purpose: a `ToolDefinition` types them from its schema, and\n * narrowing them here would make those definitions unassignable.\n */\nexport interface ToolRenderers {\n\trenderShell?: \"default\" | \"self\";\n\ttoolGroup?: string;\n\trenderCall?: (args: any, theme: Theme, context: ToolRenderContext<any, any>) => Component;\n\trenderResult?: (\n\t\tresult: AgentToolResult<any>,\n\t\toptions: ToolRenderResultOptions,\n\t\ttheme: Theme,\n\t\tcontext: ToolRenderContext<any, any>,\n\t) => Component;\n}\n\nimport { getTextOutput as getRenderedTextOutput } from \"../../../core/tools/render-utils.ts\";\nimport { convertToPng } from \"../../../utils/image-convert.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { FallbackResultComponent, formatElapsed, formatFallbackArgs, ToolChromeComponent } from \"./tool-chrome.ts\";\n\nexport interface ToolExecutionOptions {\n\tshowImages?: boolean;\n\timageWidthCells?: number;\n\t/** Long-running foreground cards advertise backgrounding. Absent means no hint (e.g. hosts without background execution). */\n\tdetachHint?: {\n\t\tisDetachable(toolName: string): boolean;\n\t\t/** Current key label; empty string means unbound and hides the hint. */\n\t\tkeyLabel(): string;\n\t};\n}\n\ninterface ConvertedImage {\n\tsourceData: string;\n\tsourceMimeType: string;\n\tdata: string;\n\tmimeType: string;\n}\n\ninterface PendingImageConversion {\n\tsourceData: string;\n\tsourceMimeType: string;\n}\n\nconst PROGRESS_THRESHOLD_MS = 2000;\nconst PROGRESS_REFRESH_INTERVAL_MS = 1000;\n/** Delay before a long-running detachable card advertises backgrounding. */\nconst DETACH_HINT_DELAY_MS = 10_000;\n\nexport class ToolExecutionComponent extends Container {\n\tprivate contentContainer: Container;\n\tprivate selfRenderContainer: Container;\n\tprivate selfRenderHeight = 0;\n\tprivate callRendererComponent?: Component;\n\tprivate resultRendererComponent?: Component;\n\tprivate rendererState: any = {};\n\tprivate imageComponents: Image[] = [];\n\tprivate imageSpacers: Spacer[] = [];\n\tprivate toolName: string;\n\tprivate toolCallId: string;\n\tprivate args: any;\n\tprivate expanded = false;\n\tprivate showImages: boolean;\n\tprivate imageWidthCells: number;\n\tprivate isPartial = true;\n\tprivate toolDefinition?: ToolRenderers;\n\treadonly toolGroup: string | undefined;\n\tprivate ui: TUI;\n\tprivate cwd: string;\n\tprivate executionStarted = false;\n\tprivate argsComplete = false;\n\tprivate result?: {\n\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\tisError: boolean;\n\t\tdetails?: any;\n\t};\n\tprivate convertedImages = new Map<number, ConvertedImage>();\n\tprivate pendingImageConversions = new Map<number, PendingImageConversion>();\n\tprivate hideComponent = false;\n\tprivate progressStartedAt?: number;\n\tprivate refreshTimer?: NodeJS.Timeout;\n\tprivate readonly detachHint?: ToolExecutionOptions[\"detachHint\"];\n\tprivate disposed = false;\n\n\tconstructor(\n\t\ttoolName: string,\n\t\ttoolCallId: string,\n\t\targs: any,\n\t\toptions: ToolExecutionOptions = {},\n\t\ttoolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined,\n\t\tui: TUI,\n\t\tcwd: string,\n\t) {\n\t\tsuper();\n\t\tthis.toolName = toolName;\n\t\tthis.toolCallId = toolCallId;\n\t\tthis.args = args;\n\t\tthis.toolDefinition = toolDefinition;\n\t\tthis.toolGroup = this.getRenderShell() === \"self\" ? undefined : this.toolDefinition?.toolGroup;\n\t\tthis.showImages = options.showImages ?? true;\n\t\tthis.imageWidthCells = options.imageWidthCells ?? 60;\n\t\tthis.detachHint = options.detachHint;\n\t\tthis.ui = ui;\n\t\tthis.cwd = cwd;\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.contentContainer = new Container();\n\t\tthis.selfRenderContainer = new Container();\n\t\tthis.addChild(this.getRenderShell() === \"self\" ? this.selfRenderContainer : this.contentContainer);\n\n\t\tthis.updateDisplay();\n\t}\n\n\tprivate getCallRenderer(): ToolDefinition<any, any>[\"renderCall\"] | undefined {\n\t\treturn this.toolDefinition?.renderCall;\n\t}\n\n\tprivate getResultRenderer(): ToolDefinition<any, any>[\"renderResult\"] | undefined {\n\t\treturn this.toolDefinition?.renderResult;\n\t}\n\n\tprivate hasRendererDefinition(): boolean {\n\t\treturn this.toolDefinition !== undefined;\n\t}\n\n\tprivate getRenderShell(): \"default\" | \"self\" {\n\t\treturn this.toolDefinition?.renderShell ?? \"default\";\n\t}\n\n\tprivate shouldRenderGenericProgress(): boolean {\n\t\treturn this.toolName === \"bash\" && this.getRenderShell() !== \"self\";\n\t}\n\n\tprivate shouldRenderDetachHint(): boolean {\n\t\treturn this.getRenderShell() !== \"self\" && this.detachHint?.isDetachable(this.toolName) === true;\n\t}\n\n\t/** The hint label, or undefined when the hint is unavailable or the key is unbound. */\n\tprivate detachHintText(): string | undefined {\n\t\tif (!this.shouldRenderDetachHint()) return undefined;\n\t\tconst key = this.detachHint?.keyLabel();\n\t\treturn key ? `Press ${key} to run in background, /bg to manage` : undefined;\n\t}\n\n\tprivate getRenderContext(lastComponent: Component | undefined, toolGroupSummary = false): ToolRenderContext {\n\t\treturn {\n\t\t\targs: this.args,\n\t\t\ttoolCallId: this.toolCallId,\n\t\t\tinvalidate: () => {\n\t\t\t\tif (this.disposed) return;\n\t\t\t\tthis.invalidate();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t\tlastComponent,\n\t\t\tstate: this.rendererState,\n\t\t\tcwd: this.cwd,\n\t\t\texecutionStarted: this.executionStarted,\n\t\t\targsComplete: this.argsComplete,\n\t\t\tisPartial: this.isPartial,\n\t\t\texpanded: this.expanded,\n\t\t\tshowImages: this.showImages,\n\t\t\tisError: this.result?.isError ?? false,\n\t\t\tresult: this.result\n\t\t\t\t? {\n\t\t\t\t\t\tcontent: this.result.content as AgentToolResult<unknown>[\"content\"],\n\t\t\t\t\t\tdetails: this.result.details,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\ttoolGroupSummary,\n\t\t};\n\t}\n\n\tprivate createCallFallback(): Component {\n\t\tconst args = formatFallbackArgs(this.args);\n\t\tconst suffix = args ? theme.fg(\"dim\", `(${args})`) : \"\";\n\t\treturn new Text(`${theme.fg(\"toolTitle\", theme.bold(this.toolName))}${suffix}`, 0, 0);\n\t}\n\n\tprivate wrapCall(component: Component): Component {\n\t\tconst color = this.isPartial ? \"warning\" : this.result?.isError ? \"error\" : \"success\";\n\t\t// Continuation lines share the result rail so the whole block reads as one\n\t\t// unit hanging off the dot instead of an indented island above a lone rail.\n\t\tconst rail = theme.fg(\"dim\", \"│ \");\n\t\treturn new ToolChromeComponent(component, `${theme.fg(color, \"●\")} `, {\n\t\t\tcontinuationPrefix: rail,\n\t\t\tblankLinePrefix: theme.fg(\"dim\", \"│\"),\n\t\t});\n\t}\n\n\tprivate wrapResult(component: Component): Component {\n\t\tconst rail = theme.fg(\"dim\", \"│ \");\n\t\treturn new ToolChromeComponent(component, rail, {\n\t\t\ttrimLeadingBlankLines: true,\n\t\t\tcontinuationPrefix: rail,\n\t\t\tblankLinePrefix: theme.fg(\"dim\", \"│\"),\n\t\t});\n\t}\n\n\tprivate createResultFallback(): Component | undefined {\n\t\tconst output = this.getTextOutput();\n\t\tif (!output) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new FallbackResultComponent(output, this.expanded);\n\t}\n\n\tprivate createResultRegion(component: Component): MouseRegion {\n\t\treturn new MouseRegion(component, (event) => {\n\t\t\tif (!this.result || event.type !== \"click\" || event.button !== \"left\") return undefined;\n\t\t\tthis.setExpanded(!this.expanded);\n\t\t\treturn { handled: true };\n\t\t});\n\t}\n\n\tupdateArgs(args: any): void {\n\t\tthis.args = args;\n\t\tthis.updateDisplay();\n\t}\n\n\tmarkExecutionStarted(): void {\n\t\tif (this.disposed) return;\n\t\tthis.executionStarted = true;\n\t\tif (this.shouldRenderGenericProgress() || this.shouldRenderDetachHint()) {\n\t\t\tif (this.progressStartedAt === undefined) {\n\t\t\t\tthis.progressStartedAt = Date.now();\n\t\t\t}\n\t\t\tif (this.refreshTimer === undefined) {\n\t\t\t\tthis.refreshTimer = setInterval(() => {\n\t\t\t\t\tif (this.disposed || !this.isPartial) {\n\t\t\t\t\t\tthis.clearRefreshTimer();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.invalidate();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}, PROGRESS_REFRESH_INTERVAL_MS);\n\t\t\t\tthis.refreshTimer.unref?.();\n\t\t\t}\n\t\t}\n\t\tthis.updateDisplay();\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate clearRefreshTimer(): void {\n\t\tif (this.refreshTimer) {\n\t\t\tclearInterval(this.refreshTimer);\n\t\t\tthis.refreshTimer = undefined;\n\t\t}\n\t}\n\n\tsetArgsComplete(): void {\n\t\tthis.argsComplete = true;\n\t\tthis.updateDisplay();\n\t\tthis.ui.requestRender();\n\t}\n\n\tupdateResult(\n\t\tresult: {\n\t\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\t\tdetails?: any;\n\t\t\tisError: boolean;\n\t\t},\n\t\tisPartial = false,\n\t): void {\n\t\tthis.result = result;\n\t\tthis.isPartial = isPartial;\n\t\tif (!isPartial) this.clearRefreshTimer();\n\t\tthis.updateDisplay();\n\t\tthis.maybeConvertImagesForKitty();\n\t}\n\n\tprivate maybeConvertImagesForKitty(): void {\n\t\tconst caps = getCapabilities();\n\t\tif (caps.images !== \"kitty\") return;\n\t\tif (!this.result) return;\n\n\t\tconst imageBlocks = this.result.content.filter((content) => content.type === \"image\");\n\t\tconst sourceMatches = (\n\t\t\timage: { data?: string; mimeType?: string } | undefined,\n\t\t\tentry: PendingImageConversion | undefined,\n\t\t): boolean => image?.data === entry?.sourceData && image?.mimeType === entry?.sourceMimeType;\n\t\tfor (const [index, converted] of this.convertedImages) {\n\t\t\tif (!sourceMatches(imageBlocks[index], converted)) this.convertedImages.delete(index);\n\t\t}\n\t\tfor (const [index, pending] of this.pendingImageConversions) {\n\t\t\tif (!sourceMatches(imageBlocks[index], pending)) this.pendingImageConversions.delete(index);\n\t\t}\n\n\t\tfor (let i = 0; i < imageBlocks.length; i++) {\n\t\t\tconst image = imageBlocks[i];\n\t\t\tif (!image.data || !image.mimeType || image.mimeType === \"image/png\") continue;\n\t\t\tif (sourceMatches(image, this.convertedImages.get(i))) continue;\n\t\t\tif (sourceMatches(image, this.pendingImageConversions.get(i))) continue;\n\n\t\t\tconst index = i;\n\t\t\tconst sourceData = image.data;\n\t\t\tconst sourceMimeType = image.mimeType;\n\t\t\tthis.pendingImageConversions.set(index, { sourceData, sourceMimeType });\n\t\t\tvoid convertToPng(sourceData, sourceMimeType)\n\t\t\t\t.then((converted) => {\n\t\t\t\t\tconst pending = this.pendingImageConversions.get(index);\n\t\t\t\t\tif (pending?.sourceData !== sourceData || pending.sourceMimeType !== sourceMimeType) return;\n\t\t\t\t\tthis.pendingImageConversions.delete(index);\n\t\t\t\t\tif (this.disposed) return;\n\t\t\t\t\tconst currentImage = this.result?.content.filter((content) => content.type === \"image\")[index];\n\t\t\t\t\tif (currentImage?.data !== sourceData || currentImage.mimeType !== sourceMimeType) return;\n\t\t\t\t\tif (converted) {\n\t\t\t\t\t\tthis.convertedImages.set(index, { sourceData, sourceMimeType, ...converted });\n\t\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tconst pending = this.pendingImageConversions.get(index);\n\t\t\t\t\tif (pending?.sourceData === sourceData && pending.sourceMimeType === sourceMimeType) {\n\t\t\t\t\t\tthis.pendingImageConversions.delete(index);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tthis.expanded = expanded;\n\t\tthis.updateDisplay();\n\t}\n\n\tsetShowImages(show: boolean): void {\n\t\tthis.showImages = show;\n\t\tthis.updateDisplay();\n\t}\n\n\tsetImageWidthCells(width: number): void {\n\t\tthis.imageWidthCells = Math.max(1, Math.floor(width));\n\t\tthis.updateDisplay();\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tthis.updateDisplay();\n\t}\n\n\tgetFinalErrorSummary(): string | undefined {\n\t\tif (this.isPartial || !this.result?.isError) return undefined;\n\t\tconst summary = this.getTextOutput().replace(/\\s+/gu, \" \").trim();\n\t\treturn summary || undefined;\n\t}\n\n\trenderCallSummary(width: number): string[] {\n\t\tconst callRenderer = this.getCallRenderer();\n\t\tlet component: Component;\n\t\tif (!callRenderer) {\n\t\t\tcomponent = this.createCallFallback();\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tcomponent = callRenderer(this.args, theme, this.getRenderContext(undefined, true));\n\t\t\t} catch {\n\t\t\t\tcomponent = this.createCallFallback();\n\t\t\t}\n\t\t}\n\t\treturn this.wrapCall(component).render(width);\n\t}\n\n\toverride render(width: number): string[] {\n\t\tif (this.hideComponent) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (this.getRenderShell() === \"self\") {\n\t\t\tconst contentLines = this.selfRenderContainer.render(width);\n\t\t\tthis.selfRenderHeight = contentLines.length;\n\t\t\tif (contentLines.length === 0 && this.imageComponents.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst lines: string[] = [];\n\t\t\tif (contentLines.length > 0) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tlines.push(...contentLines);\n\t\t\t}\n\t\t\tfor (let i = 0; i < this.imageComponents.length; i++) {\n\t\t\t\tconst spacer = this.imageSpacers[i];\n\t\t\t\tif (spacer) {\n\t\t\t\t\tlines.push(...spacer.render(width));\n\t\t\t\t}\n\t\t\t\tconst imageComponent = this.imageComponents[i];\n\t\t\t\tif (imageComponent) {\n\t\t\t\t\tlines.push(...imageComponent.render(width));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lines;\n\t\t}\n\n\t\treturn super.render(width);\n\t}\n\n\toverride handleMouse(event: TuiMouseEvent): ReturnType<Container[\"handleMouse\"]> {\n\t\tif (!this.hasRendererDefinition() || this.getRenderShell() !== \"self\") return super.handleMouse(event);\n\t\tif (event.y <= 0 || event.y > this.selfRenderHeight) return undefined;\n\t\treturn this.selfRenderContainer.handleMouse({\n\t\t\t...event,\n\t\t\ty: event.y - 1,\n\t\t\theight: this.selfRenderHeight,\n\t\t});\n\t}\n\n\tprivate updateDisplay(): void {\n\t\tlet hasContent = false;\n\t\tthis.hideComponent = false;\n\t\tconst selfRendered = this.getRenderShell() === \"self\";\n\t\tconst renderContainer = selfRendered ? this.selfRenderContainer : this.contentContainer;\n\t\trenderContainer.clear();\n\n\t\tconst addCall = (component: Component) => {\n\t\t\trenderContainer.addChild(selfRendered ? component : this.createResultRegion(this.wrapCall(component)));\n\t\t\thasContent = true;\n\t\t};\n\t\tconst addResult = (component: Component) => {\n\t\t\trenderContainer.addChild(selfRendered ? component : this.createResultRegion(this.wrapResult(component)));\n\t\t\thasContent = true;\n\t\t};\n\n\t\tconst callRenderer = this.getCallRenderer();\n\t\tif (!callRenderer) {\n\t\t\taddCall(this.createCallFallback());\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tconst component = callRenderer(this.args, theme, this.getRenderContext(this.callRendererComponent));\n\t\t\t\tthis.callRendererComponent = component;\n\t\t\t\taddCall(component);\n\t\t\t} catch {\n\t\t\t\tthis.callRendererComponent = undefined;\n\t\t\t\taddCall(this.createCallFallback());\n\t\t\t}\n\t\t}\n\n\t\tif (this.result) {\n\t\t\tconst resultRenderer = this.getResultRenderer();\n\t\t\tif (!resultRenderer) {\n\t\t\t\tconst component = this.createResultFallback();\n\t\t\t\tif (component) addResult(component);\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tconst component = resultRenderer(\n\t\t\t\t\t\t{ content: this.result.content as any, details: this.result.details },\n\t\t\t\t\t\t{ expanded: this.expanded, isPartial: this.isPartial },\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tthis.getRenderContext(this.resultRendererComponent),\n\t\t\t\t\t);\n\t\t\t\t\tthis.resultRendererComponent = component;\n\t\t\t\t\taddResult(component);\n\t\t\t\t} catch {\n\t\t\t\t\tthis.resultRendererComponent = undefined;\n\t\t\t\t\tconst component = this.createResultFallback();\n\t\t\t\t\tif (component) addResult(component);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.executionStarted && this.isPartial && this.progressStartedAt !== undefined) {\n\t\t\tconst elapsedMs = Date.now() - this.progressStartedAt;\n\t\t\tif (this.shouldRenderGenericProgress() && elapsedMs >= PROGRESS_THRESHOLD_MS) {\n\t\t\t\taddResult(new Text(theme.fg(\"muted\", `Running… (${formatElapsed(elapsedMs)})`), 0, 0));\n\t\t\t}\n\t\t\tif (elapsedMs >= DETACH_HINT_DELAY_MS) {\n\t\t\t\tconst hint = this.detachHintText();\n\t\t\t\tif (hint) addResult(new Text(theme.fg(\"dim\", hint), 0, 0));\n\t\t\t}\n\t\t}\n\n\t\tfor (const img of this.imageComponents) {\n\t\t\tthis.removeChild(img);\n\t\t}\n\t\tthis.imageComponents = [];\n\t\tfor (const spacer of this.imageSpacers) {\n\t\t\tthis.removeChild(spacer);\n\t\t}\n\t\tthis.imageSpacers = [];\n\n\t\tif (this.result) {\n\t\t\tconst imageBlocks = this.result.content.filter((c) => c.type === \"image\");\n\t\t\tconst caps = getCapabilities();\n\t\t\tfor (let i = 0; i < imageBlocks.length; i++) {\n\t\t\t\tconst img = imageBlocks[i];\n\t\t\t\tif (caps.images && this.showImages && img.data && img.mimeType) {\n\t\t\t\t\tconst converted = this.convertedImages.get(i);\n\t\t\t\t\tconst imageData = converted?.sourceData === img.data ? converted.data : img.data;\n\t\t\t\t\tconst imageMimeType = converted?.sourceMimeType === img.mimeType ? converted.mimeType : img.mimeType;\n\t\t\t\t\tif (caps.images === \"kitty\" && imageMimeType !== \"image/png\") continue;\n\n\t\t\t\t\tconst spacer = new Spacer(1);\n\t\t\t\t\tthis.addChild(spacer);\n\t\t\t\t\tthis.imageSpacers.push(spacer);\n\t\t\t\t\tconst imageComponent = new Image(\n\t\t\t\t\t\timageData,\n\t\t\t\t\t\timageMimeType,\n\t\t\t\t\t\t{ fallbackColor: (s: string) => theme.fg(\"toolOutput\", s) },\n\t\t\t\t\t\t{ maxWidthCells: this.imageWidthCells },\n\t\t\t\t\t);\n\t\t\t\t\tthis.imageComponents.push(imageComponent);\n\t\t\t\t\tthis.addChild(imageComponent);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!hasContent && this.imageComponents.length === 0) {\n\t\t\tthis.hideComponent = true;\n\t\t}\n\t}\n\n\tprivate getTextOutput(): string {\n\t\treturn getRenderedTextOutput(this.result, this.showImages);\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.clearRefreshTimer();\n\t\t(this.rendererState as { dispose?: () => void }).dispose?.();\n\t\tthis.pendingImageConversions.clear();\n\t}\n}\n"]}
1
+ {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype Component,\n\tContainer,\n\tgetCapabilities,\n\tImage,\n\tMouseRegion,\n\tSpacer,\n\tText,\n\ttype TUI,\n\ttype TuiMouseEvent,\n} from \"@earendil-works/pi-tui\";\nimport type { ToolDefinition, ToolRenderContext, ToolRenderResultOptions } from \"../../../core/extensions/types.ts\";\nimport type { Theme } from \"../theme/theme.ts\";\n\n/**\n * What this component needs from a tool: how to draw it. It neither executes tools nor reads their\n * parameter schemas, so a definition and a bare renderer pair are equally acceptable.\n *\n * The renderer parameters are `any` on purpose: a `ToolDefinition` types them from its schema, and\n * narrowing them here would make those definitions unassignable.\n */\nexport interface ToolRenderers {\n\trenderShell?: \"default\" | \"self\";\n\ttoolGroup?: string;\n\trenderCall?: (args: any, theme: Theme, context: ToolRenderContext<any, any>) => Component;\n\trenderResult?: (\n\t\tresult: AgentToolResult<any>,\n\t\toptions: ToolRenderResultOptions,\n\t\ttheme: Theme,\n\t\tcontext: ToolRenderContext<any, any>,\n\t) => Component;\n}\n\nimport { getTextOutput as getRenderedTextOutput } from \"../../../core/tools/render-utils.ts\";\nimport { convertToPng } from \"../../../utils/image-convert.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { FallbackResultComponent, formatElapsed, formatFallbackArgs, ToolChromeComponent } from \"./tool-chrome.ts\";\n\nexport interface ToolExecutionOptions {\n\tshowImages?: boolean;\n\timageWidthCells?: number;\n\t/** Long-running foreground cards advertise backgrounding. Absent means no hint (e.g. hosts without background execution). */\n\tdetachHint?: {\n\t\tisDetachable(toolName: string): boolean;\n\t\t/** Current key label; empty string means unbound and hides the hint. */\n\t\tkeyLabel(): string;\n\t};\n}\n\ninterface ConvertedImage {\n\tsourceData: string;\n\tsourceMimeType: string;\n\tdata: string;\n\tmimeType: string;\n}\n\ninterface PendingImageConversion {\n\tsourceData: string;\n\tsourceMimeType: string;\n}\n\nconst PROGRESS_THRESHOLD_MS = 2000;\nconst PROGRESS_REFRESH_INTERVAL_MS = 1000;\n/** Delay before a long-running detachable card advertises backgrounding. */\nconst DETACH_HINT_DELAY_MS = 10_000;\n\nexport class ToolExecutionComponent extends Container {\n\tprivate contentContainer: Container;\n\tprivate selfRenderContainer: Container;\n\tprivate selfRenderHeight = 0;\n\tprivate callRendererComponent?: Component;\n\tprivate resultRendererComponent?: Component;\n\tprivate rendererState: any = {};\n\tprivate imageComponents: Image[] = [];\n\tprivate imageSpacers: Spacer[] = [];\n\tprivate toolName: string;\n\tprivate toolCallId: string;\n\tprivate args: any;\n\tprivate expanded = false;\n\tprivate showImages: boolean;\n\tprivate imageWidthCells: number;\n\tprivate isPartial = true;\n\tprivate toolDefinition?: ToolRenderers;\n\treadonly toolGroup: string | undefined;\n\tprivate ui: TUI;\n\tprivate cwd: string;\n\tprivate executionStarted = false;\n\tprivate argsComplete = false;\n\tprivate result?: {\n\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\tisError: boolean;\n\t\tdetails?: any;\n\t};\n\tprivate convertedImages = new Map<number, ConvertedImage>();\n\tprivate pendingImageConversions = new Map<number, PendingImageConversion>();\n\tprivate hideComponent = false;\n\tprivate progressStartedAt?: number;\n\tprivate refreshTimer?: NodeJS.Timeout;\n\tprivate readonly detachHint?: ToolExecutionOptions[\"detachHint\"];\n\tprivate disposed = false;\n\n\tconstructor(\n\t\ttoolName: string,\n\t\ttoolCallId: string,\n\t\targs: any,\n\t\toptions: ToolExecutionOptions = {},\n\t\ttoolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined,\n\t\tui: TUI,\n\t\tcwd: string,\n\t) {\n\t\tsuper();\n\t\tthis.toolName = toolName;\n\t\tthis.toolCallId = toolCallId;\n\t\tthis.args = args;\n\t\tthis.toolDefinition = toolDefinition;\n\t\tthis.toolGroup = this.getRenderShell() === \"self\" ? undefined : this.toolDefinition?.toolGroup;\n\t\tthis.showImages = options.showImages ?? true;\n\t\tthis.imageWidthCells = options.imageWidthCells ?? 60;\n\t\tthis.detachHint = options.detachHint;\n\t\tthis.ui = ui;\n\t\tthis.cwd = cwd;\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.contentContainer = new Container();\n\t\tthis.selfRenderContainer = new Container();\n\t\tthis.addChild(this.getRenderShell() === \"self\" ? this.selfRenderContainer : this.contentContainer);\n\n\t\tthis.updateDisplay();\n\t}\n\n\tprivate getCallRenderer(): ToolDefinition<any, any>[\"renderCall\"] | undefined {\n\t\treturn this.toolDefinition?.renderCall;\n\t}\n\n\tprivate getResultRenderer(): ToolDefinition<any, any>[\"renderResult\"] | undefined {\n\t\treturn this.toolDefinition?.renderResult;\n\t}\n\n\tprivate hasRendererDefinition(): boolean {\n\t\treturn this.toolDefinition !== undefined;\n\t}\n\n\tprivate getRenderShell(): \"default\" | \"self\" {\n\t\treturn this.toolDefinition?.renderShell ?? \"default\";\n\t}\n\n\tprivate shouldRenderGenericProgress(): boolean {\n\t\treturn this.toolName === \"bash\" && this.getRenderShell() !== \"self\";\n\t}\n\n\tprivate shouldRenderDetachHint(): boolean {\n\t\treturn this.getRenderShell() !== \"self\" && this.detachHint?.isDetachable(this.toolName) === true;\n\t}\n\n\t/** The hint label, or undefined when the hint is unavailable or the key is unbound. */\n\tprivate detachHintText(): string | undefined {\n\t\tif (!this.shouldRenderDetachHint()) return undefined;\n\t\tconst key = this.detachHint?.keyLabel();\n\t\treturn key ? `Press ${key} to run in background, /bg to manage` : undefined;\n\t}\n\n\tprivate getRenderContext(lastComponent: Component | undefined, toolGroupSummary = false): ToolRenderContext {\n\t\treturn {\n\t\t\targs: this.args,\n\t\t\ttoolCallId: this.toolCallId,\n\t\t\tinvalidate: () => {\n\t\t\t\tif (this.disposed) return;\n\t\t\t\tthis.invalidate();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t\tlastComponent,\n\t\t\tstate: this.rendererState,\n\t\t\tcwd: this.cwd,\n\t\t\texecutionStarted: this.executionStarted,\n\t\t\targsComplete: this.argsComplete,\n\t\t\tisPartial: this.isPartial,\n\t\t\texpanded: this.expanded,\n\t\t\tshowImages: this.showImages,\n\t\t\tisError: this.result?.isError ?? false,\n\t\t\tresult: this.result\n\t\t\t\t? {\n\t\t\t\t\t\tcontent: this.result.content as AgentToolResult<unknown>[\"content\"],\n\t\t\t\t\t\tdetails: this.result.details,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\ttoolGroupSummary,\n\t\t};\n\t}\n\n\tprivate createCallFallback(): Component {\n\t\tconst args = formatFallbackArgs(this.args);\n\t\tconst suffix = args ? theme.fg(\"dim\", `(${args})`) : \"\";\n\t\treturn new Text(`${theme.fg(\"toolTitle\", theme.bold(this.toolName))}${suffix}`, 0, 0);\n\t}\n\n\tprivate wrapCall(component: Component): Component {\n\t\tconst color = this.isPartial ? \"warning\" : this.result?.isError ? \"error\" : \"success\";\n\t\t// Continuation lines share the result rail so the whole block reads as one\n\t\t// unit hanging off the dot instead of an indented island above a lone rail.\n\t\tconst rail = theme.fg(\"dim\", \"│ \");\n\t\treturn new ToolChromeComponent(component, `${theme.fg(color, \"●\")} `, {\n\t\t\tcontinuationPrefix: rail,\n\t\t\tblankLinePrefix: theme.fg(\"dim\", \"│\"),\n\t\t});\n\t}\n\n\tprivate wrapResult(component: Component): Component {\n\t\tconst rail = theme.fg(\"dim\", \"│ \");\n\t\treturn new ToolChromeComponent(component, rail, {\n\t\t\ttrimLeadingBlankLines: true,\n\t\t\tcontinuationPrefix: rail,\n\t\t\tblankLinePrefix: theme.fg(\"dim\", \"│\"),\n\t\t});\n\t}\n\n\tprivate createResultFallback(): Component | undefined {\n\t\tconst output = this.getTextOutput();\n\t\tif (!output) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new FallbackResultComponent(output, this.expanded);\n\t}\n\n\tprivate createResultRegion(component: Component): MouseRegion {\n\t\treturn new MouseRegion(component, (event) => {\n\t\t\tif (!this.result || event.type !== \"click\" || event.button !== \"left\") return undefined;\n\t\t\tthis.setExpanded(!this.expanded);\n\t\t\treturn { handled: true };\n\t\t});\n\t}\n\n\tupdateArgs(args: any): void {\n\t\tthis.args = args;\n\t\tthis.updateDisplay();\n\t}\n\n\tmarkExecutionStarted(): void {\n\t\tif (this.disposed) return;\n\t\tthis.executionStarted = true;\n\t\tif (this.shouldRenderGenericProgress() || this.shouldRenderDetachHint()) {\n\t\t\tif (this.progressStartedAt === undefined) {\n\t\t\t\tthis.progressStartedAt = Date.now();\n\t\t\t}\n\t\t\tif (this.refreshTimer === undefined) {\n\t\t\t\tthis.refreshTimer = setInterval(() => {\n\t\t\t\t\tif (this.disposed || !this.isPartial) {\n\t\t\t\t\t\tthis.clearRefreshTimer();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.invalidate();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}, PROGRESS_REFRESH_INTERVAL_MS);\n\t\t\t\tthis.refreshTimer.unref?.();\n\t\t\t}\n\t\t}\n\t\tthis.updateDisplay();\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate clearRefreshTimer(): void {\n\t\tif (this.refreshTimer) {\n\t\t\tclearInterval(this.refreshTimer);\n\t\t\tthis.refreshTimer = undefined;\n\t\t}\n\t}\n\n\tsetArgsComplete(): void {\n\t\tthis.argsComplete = true;\n\t\tthis.updateDisplay();\n\t\tthis.ui.requestRender();\n\t}\n\n\tupdateResult(\n\t\tresult: {\n\t\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\t\tdetails?: any;\n\t\t\tisError: boolean;\n\t\t},\n\t\tisPartial = false,\n\t): void {\n\t\tthis.result = result;\n\t\tthis.isPartial = isPartial;\n\t\tif (!isPartial) this.clearRefreshTimer();\n\t\tthis.updateDisplay();\n\t\tthis.maybeConvertImagesForKitty();\n\t}\n\n\tprivate maybeConvertImagesForKitty(): void {\n\t\tconst caps = getCapabilities();\n\t\tif (caps.images !== \"kitty\") return;\n\t\tif (!this.result) return;\n\n\t\tconst imageBlocks = this.result.content.filter((content) => content.type === \"image\");\n\t\tconst sourceMatches = (\n\t\t\timage: { data?: string; mimeType?: string } | undefined,\n\t\t\tentry: PendingImageConversion | undefined,\n\t\t): boolean => image?.data === entry?.sourceData && image?.mimeType === entry?.sourceMimeType;\n\t\tfor (const [index, converted] of this.convertedImages) {\n\t\t\tif (!sourceMatches(imageBlocks[index], converted)) this.convertedImages.delete(index);\n\t\t}\n\t\tfor (const [index, pending] of this.pendingImageConversions) {\n\t\t\tif (!sourceMatches(imageBlocks[index], pending)) this.pendingImageConversions.delete(index);\n\t\t}\n\n\t\tfor (let i = 0; i < imageBlocks.length; i++) {\n\t\t\tconst image = imageBlocks[i];\n\t\t\tif (!image.data || !image.mimeType || image.mimeType === \"image/png\") continue;\n\t\t\tif (sourceMatches(image, this.convertedImages.get(i))) continue;\n\t\t\tif (sourceMatches(image, this.pendingImageConversions.get(i))) continue;\n\n\t\t\tconst index = i;\n\t\t\tconst sourceData = image.data;\n\t\t\tconst sourceMimeType = image.mimeType;\n\t\t\tthis.pendingImageConversions.set(index, { sourceData, sourceMimeType });\n\t\t\tvoid convertToPng(sourceData, sourceMimeType)\n\t\t\t\t.then((converted) => {\n\t\t\t\t\tconst pending = this.pendingImageConversions.get(index);\n\t\t\t\t\tif (pending?.sourceData !== sourceData || pending.sourceMimeType !== sourceMimeType) return;\n\t\t\t\t\tthis.pendingImageConversions.delete(index);\n\t\t\t\t\tif (this.disposed) return;\n\t\t\t\t\tconst currentImage = this.result?.content.filter((content) => content.type === \"image\")[index];\n\t\t\t\t\tif (currentImage?.data !== sourceData || currentImage.mimeType !== sourceMimeType) return;\n\t\t\t\t\tif (converted) {\n\t\t\t\t\t\tthis.convertedImages.set(index, { sourceData, sourceMimeType, ...converted });\n\t\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tconst pending = this.pendingImageConversions.get(index);\n\t\t\t\t\tif (pending?.sourceData === sourceData && pending.sourceMimeType === sourceMimeType) {\n\t\t\t\t\t\tthis.pendingImageConversions.delete(index);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tthis.expanded = expanded;\n\t\tthis.updateDisplay();\n\t}\n\n\tsetShowImages(show: boolean): void {\n\t\tthis.showImages = show;\n\t\tthis.updateDisplay();\n\t}\n\n\tsetImageWidthCells(width: number): void {\n\t\tthis.imageWidthCells = Math.max(1, Math.floor(width));\n\t\tthis.updateDisplay();\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tthis.updateDisplay();\n\t}\n\n\tgetFinalErrorSummary(): string | undefined {\n\t\tif (this.isPartial || !this.result?.isError) return undefined;\n\t\tconst summary = this.getTextOutput().replace(/\\s+/gu, \" \").trim();\n\t\treturn summary || undefined;\n\t}\n\n\trenderCallSummary(width: number): string[] {\n\t\tconst callRenderer = this.getCallRenderer();\n\t\tlet component: Component;\n\t\tif (!callRenderer) {\n\t\t\tcomponent = this.createCallFallback();\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tcomponent = callRenderer(this.args, theme, this.getRenderContext(undefined, true));\n\t\t\t} catch {\n\t\t\t\tcomponent = this.createCallFallback();\n\t\t\t}\n\t\t}\n\t\treturn this.wrapCall(component).render(width);\n\t}\n\n\toverride render(width: number): string[] {\n\t\tif (this.hideComponent) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (this.getRenderShell() === \"self\") {\n\t\t\tconst contentLines = this.selfRenderContainer.render(width);\n\t\t\tthis.selfRenderHeight = contentLines.length;\n\t\t\tif (contentLines.length === 0 && this.imageComponents.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst lines: string[] = [];\n\t\t\tif (contentLines.length > 0) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tlines.push(...contentLines);\n\t\t\t}\n\t\t\tfor (let i = 0; i < this.imageComponents.length; i++) {\n\t\t\t\tconst spacer = this.imageSpacers[i];\n\t\t\t\tif (spacer) {\n\t\t\t\t\tlines.push(...spacer.render(width));\n\t\t\t\t}\n\t\t\t\tconst imageComponent = this.imageComponents[i];\n\t\t\t\tif (imageComponent) {\n\t\t\t\t\tlines.push(...imageComponent.render(width));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lines;\n\t\t}\n\n\t\treturn super.render(width);\n\t}\n\n\toverride handleMouse(event: TuiMouseEvent): ReturnType<Container[\"handleMouse\"]> {\n\t\tif (!this.hasRendererDefinition() || this.getRenderShell() !== \"self\") return super.handleMouse(event);\n\t\tif (event.y <= 0 || event.y > this.selfRenderHeight) return undefined;\n\t\treturn this.selfRenderContainer.handleMouse({\n\t\t\t...event,\n\t\t\ty: event.y - 1,\n\t\t\theight: this.selfRenderHeight,\n\t\t});\n\t}\n\n\tprivate updateDisplay(): void {\n\t\tlet hasContent = false;\n\t\tthis.hideComponent = false;\n\t\tconst selfRendered = this.getRenderShell() === \"self\";\n\t\tconst renderContainer = selfRendered ? this.selfRenderContainer : this.contentContainer;\n\t\trenderContainer.clear();\n\n\t\tconst addCall = (component: Component) => {\n\t\t\trenderContainer.addChild(selfRendered ? component : this.createResultRegion(this.wrapCall(component)));\n\t\t\thasContent = true;\n\t\t};\n\t\tconst addResult = (component: Component) => {\n\t\t\trenderContainer.addChild(selfRendered ? component : this.createResultRegion(this.wrapResult(component)));\n\t\t\thasContent = true;\n\t\t};\n\n\t\tconst callRenderer = this.getCallRenderer();\n\t\tif (!callRenderer) {\n\t\t\taddCall(this.createCallFallback());\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tconst component = callRenderer(this.args, theme, this.getRenderContext(this.callRendererComponent));\n\t\t\t\tthis.callRendererComponent = component;\n\t\t\t\taddCall(component);\n\t\t\t} catch {\n\t\t\t\tthis.callRendererComponent = undefined;\n\t\t\t\taddCall(this.createCallFallback());\n\t\t\t}\n\t\t}\n\n\t\tif (this.result) {\n\t\t\tconst resultRenderer = this.getResultRenderer();\n\t\t\tif (!resultRenderer) {\n\t\t\t\tconst component = this.createResultFallback();\n\t\t\t\tif (component) addResult(component);\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tconst component = resultRenderer(\n\t\t\t\t\t\t{ content: this.result.content as any, details: this.result.details },\n\t\t\t\t\t\t{ expanded: this.expanded, isPartial: this.isPartial },\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tthis.getRenderContext(this.resultRendererComponent),\n\t\t\t\t\t);\n\t\t\t\t\tthis.resultRendererComponent = component;\n\t\t\t\t\taddResult(component);\n\t\t\t\t} catch {\n\t\t\t\t\tthis.resultRendererComponent = undefined;\n\t\t\t\t\tconst component = this.createResultFallback();\n\t\t\t\t\tif (component) addResult(component);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.executionStarted && this.isPartial && this.progressStartedAt !== undefined) {\n\t\t\tconst elapsedMs = Date.now() - this.progressStartedAt;\n\t\t\tif (this.shouldRenderGenericProgress() && elapsedMs >= PROGRESS_THRESHOLD_MS) {\n\t\t\t\taddResult(new Text(theme.fg(\"muted\", `Running… (${formatElapsed(elapsedMs)})`), 0, 0));\n\t\t\t}\n\t\t\tif (elapsedMs >= DETACH_HINT_DELAY_MS) {\n\t\t\t\tconst hint = this.detachHintText();\n\t\t\t\tif (hint) addResult(new Text(theme.fg(\"dim\", hint), 0, 0));\n\t\t\t}\n\t\t}\n\n\t\tfor (const img of this.imageComponents) {\n\t\t\tthis.removeChild(img);\n\t\t}\n\t\tthis.imageComponents = [];\n\t\tfor (const spacer of this.imageSpacers) {\n\t\t\tthis.removeChild(spacer);\n\t\t}\n\t\tthis.imageSpacers = [];\n\n\t\tif (this.result) {\n\t\t\tconst imageBlocks = this.result.content.filter((c) => c.type === \"image\");\n\t\t\tconst caps = getCapabilities();\n\t\t\tfor (let i = 0; i < imageBlocks.length; i++) {\n\t\t\t\tconst img = imageBlocks[i];\n\t\t\t\tif (caps.images && this.showImages && img.data && img.mimeType) {\n\t\t\t\t\tconst cached = this.convertedImages.get(i);\n\t\t\t\t\tconst converted =\n\t\t\t\t\t\tcached?.sourceData === img.data && cached.sourceMimeType === img.mimeType ? cached : undefined;\n\t\t\t\t\tconst imageData = converted?.data ?? img.data;\n\t\t\t\t\tconst imageMimeType = converted?.mimeType ?? img.mimeType;\n\t\t\t\t\tif (caps.images === \"kitty\" && imageMimeType !== \"image/png\") continue;\n\n\t\t\t\t\tconst spacer = new Spacer(1);\n\t\t\t\t\tthis.addChild(spacer);\n\t\t\t\t\tthis.imageSpacers.push(spacer);\n\t\t\t\t\tconst imageComponent = new Image(\n\t\t\t\t\t\timageData,\n\t\t\t\t\t\timageMimeType,\n\t\t\t\t\t\t{ fallbackColor: (s: string) => theme.fg(\"toolOutput\", s) },\n\t\t\t\t\t\t{ maxWidthCells: this.imageWidthCells },\n\t\t\t\t\t);\n\t\t\t\t\tthis.imageComponents.push(imageComponent);\n\t\t\t\t\tthis.addChild(imageComponent);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!hasContent && this.imageComponents.length === 0) {\n\t\t\tthis.hideComponent = true;\n\t\t}\n\t}\n\n\tprivate getTextOutput(): string {\n\t\treturn getRenderedTextOutput(this.result, this.showImages);\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.clearRefreshTimer();\n\t\t(this.rendererState as { dispose?: () => void }).dispose?.();\n\t\tthis.pendingImageConversions.clear();\n\t}\n}\n"]}
@@ -22,7 +22,6 @@ declare class TreeList implements Component {
22
22
  onCancel?: () => void;
23
23
  onCopy?: (text: string | undefined) => void;
24
24
  onLabelEdit?: (entryId: string, currentLabel: string | undefined) => void;
25
- onLabelTimestampVisibilityChange?: (visible: boolean) => void;
26
25
  constructor(tree: SessionTreeNode[], currentLeafId: string | null, maxVisibleLines: number, initialSelectedId?: string, initialFilterMode?: FilterMode);
27
26
  /**
28
27
  * Find the index of the nearest visible entry, walking up the parent chain if needed.
@@ -45,7 +44,6 @@ declare class TreeList implements Component {
45
44
  invalidate(): void;
46
45
  getSearchQuery(): string;
47
46
  getSelectedNode(): SessionTreeNode | undefined;
48
- isShowingLabelTimestamps(): boolean;
49
47
  copySelected(): void;
50
48
  updateNodeLabel(entryId: string, label: string | undefined, labelTimestamp?: string): void;
51
49
  private getStatusLabels;
@@ -82,22 +80,15 @@ export declare class TreeSelectorComponent extends Container implements Focusabl
82
80
  private labelInputContainer;
83
81
  private treeContainer;
84
82
  private onLabelChangeCallback?;
85
- private readonly requestRender;
86
- private midnightTimeout;
87
- private emptyTreeTimeout;
88
- private disposed;
89
83
  onCopy?: (text: string | undefined) => void;
90
84
  private _focused;
91
85
  get focused(): boolean;
92
86
  set focused(value: boolean);
93
- constructor(tree: SessionTreeNode[], currentLeafId: string | null, terminalHeight: number, onSelect: (entryId: string) => void, onCancel: () => void, onLabelChange?: (entryId: string, label: string | undefined) => void, initialSelectedId?: string, initialFilterMode?: FilterMode, requestRender?: () => void);
94
- private clearMidnightRefresh;
95
- private scheduleMidnightRefresh;
87
+ constructor(tree: SessionTreeNode[], currentLeafId: string | null, terminalHeight: number, onSelect: (entryId: string) => void, onCancel: () => void, onLabelChange?: (entryId: string, label: string | undefined) => void, initialSelectedId?: string, initialFilterMode?: FilterMode);
96
88
  private showLabelInput;
97
89
  private hideLabelInput;
98
90
  handleInput(keyData: string): void;
99
91
  getTreeList(): TreeList;
100
- dispose(): void;
101
92
  }
102
93
  export {};
103
94
  //# sourceMappingURL=tree-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tree-selector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tree-selector.ts"],"names":[],"mappings":"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"}
@@ -233,6 +233,8 @@ class TreeList {
233
233
  const searchTokens = this.searchQuery.toLowerCase().split(/\s+/).filter(Boolean);
234
234
  this.filteredNodes = this.flatNodes.filter((flatNode) => {
235
235
  const entry = flatNode.node.entry;
236
+ if (entry.type === "usage")
237
+ return false;
236
238
  const isCurrentLeaf = entry.id === this.currentLeafId;
237
239
  // Skip assistant messages with only tool calls (no text) unless error/aborted
238
240
  // Always show current leaf so active position is visible
@@ -487,9 +489,6 @@ class TreeList {
487
489
  getSelectedNode() {
488
490
  return this.filteredNodes[this.selectedIndex]?.node;
489
491
  }
490
- isShowingLabelTimestamps() {
491
- return this.showLabelTimestamps;
492
- }
493
492
  copySelected() {
494
493
  const node = this.getSelectedNode();
495
494
  this.onCopy?.(node ? this.getEntryCopyText(node) : undefined);
@@ -944,7 +943,6 @@ class TreeList {
944
943
  }
945
944
  else if (kb.matches(keyData, "app.tree.toggleLabelTimestamp")) {
946
945
  this.showLabelTimestamps = !this.showLabelTimestamps;
947
- this.onLabelTimestampVisibilityChange?.(this.showLabelTimestamps);
948
946
  }
949
947
  else {
950
948
  const hasControlChars = [...keyData].some((ch) => {
@@ -1168,26 +1166,18 @@ export class TreeSelectorComponent extends Container {
1168
1166
  this.labelInput.focused = value;
1169
1167
  }
1170
1168
  }
1171
- constructor(tree, currentLeafId, terminalHeight, onSelect, onCancel, onLabelChange, initialSelectedId, initialFilterMode, requestRender = () => { }) {
1169
+ constructor(tree, currentLeafId, terminalHeight, onSelect, onCancel, onLabelChange, initialSelectedId, initialFilterMode) {
1172
1170
  super();
1173
1171
  this.labelInput = null;
1174
- this.disposed = false;
1175
1172
  // Focusable implementation - propagate to labelInput when active for IME cursor positioning
1176
1173
  this._focused = false;
1177
1174
  this.onLabelChangeCallback = onLabelChange;
1178
- this.requestRender = requestRender;
1179
1175
  const maxVisibleLines = Math.max(5, Math.floor(terminalHeight / 2));
1180
1176
  this.treeList = new TreeList(tree, currentLeafId, maxVisibleLines, initialSelectedId, initialFilterMode);
1181
1177
  this.treeList.onSelect = onSelect;
1182
1178
  this.treeList.onCancel = onCancel;
1183
1179
  this.treeList.onCopy = (text) => this.onCopy?.(text);
1184
1180
  this.treeList.onLabelEdit = (entryId, currentLabel) => this.showLabelInput(entryId, currentLabel);
1185
- this.treeList.onLabelTimestampVisibilityChange = (visible) => {
1186
- if (visible)
1187
- this.scheduleMidnightRefresh();
1188
- else
1189
- this.clearMidnightRefresh();
1190
- };
1191
1181
  this.treeContainer = new Container();
1192
1182
  this.treeContainer.addChild(this.treeList);
1193
1183
  this.labelInputContainer = new Container();
@@ -1203,36 +1193,9 @@ export class TreeSelectorComponent extends Container {
1203
1193
  this.addChild(new Spacer(1));
1204
1194
  this.addChild(new DynamicBorder());
1205
1195
  if (tree.length === 0) {
1206
- this.emptyTreeTimeout = setTimeout(() => {
1207
- this.emptyTreeTimeout = undefined;
1208
- if (!this.disposed)
1209
- onCancel();
1210
- }, 100);
1211
- this.emptyTreeTimeout.unref?.();
1212
- }
1213
- }
1214
- clearMidnightRefresh() {
1215
- if (this.midnightTimeout !== undefined) {
1216
- clearTimeout(this.midnightTimeout);
1217
- this.midnightTimeout = undefined;
1196
+ setTimeout(() => onCancel(), 100);
1218
1197
  }
1219
1198
  }
1220
- scheduleMidnightRefresh() {
1221
- this.clearMidnightRefresh();
1222
- if (this.disposed || !this.treeList.isShowingLabelTimestamps())
1223
- return;
1224
- const nextMidnight = new Date();
1225
- nextMidnight.setHours(24, 0, 0, 0);
1226
- const delayMs = Math.max(1, nextMidnight.getTime() - Date.now());
1227
- this.midnightTimeout = setTimeout(() => {
1228
- this.midnightTimeout = undefined;
1229
- if (this.disposed)
1230
- return;
1231
- this.requestRender();
1232
- this.scheduleMidnightRefresh();
1233
- }, delayMs);
1234
- this.midnightTimeout.unref?.();
1235
- }
1236
1199
  showLabelInput(entryId, currentLabel) {
1237
1200
  this.labelInput = new LabelInput(entryId, currentLabel);
1238
1201
  this.labelInput.onSubmit = (id, label) => {
@@ -1264,15 +1227,5 @@ export class TreeSelectorComponent extends Container {
1264
1227
  getTreeList() {
1265
1228
  return this.treeList;
1266
1229
  }
1267
- dispose() {
1268
- if (this.disposed)
1269
- return;
1270
- this.disposed = true;
1271
- this.clearMidnightRefresh();
1272
- if (this.emptyTreeTimeout !== undefined) {
1273
- clearTimeout(this.emptyTreeTimeout);
1274
- this.emptyTreeTimeout = undefined;
1275
- }
1276
- }
1277
1230
  }
1278
1231
  //# sourceMappingURL=tree-selector.js.map