@astralyn/pi 0.99.0 → 1.0.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 (569) hide show
  1. package/CHANGELOG.md +58 -3
  2. package/dist/bundle/chunks/anthropic-messages-YET4T7BO.js +6 -0
  3. package/dist/bundle/chunks/anthropic.js +2 -2
  4. package/dist/bundle/chunks/azure-openai-responses-SBLL5YN3.js +2 -0
  5. package/dist/bundle/chunks/bedrock-converse-stream.js +3 -3
  6. package/dist/bundle/chunks/chunk-4TT2QGFL.js +2 -0
  7. package/dist/bundle/chunks/chunk-GIG5IHES.js +2 -0
  8. package/dist/bundle/chunks/{chunk-VW2P3X6P.js → chunk-H2N2THAO.js} +436 -668
  9. package/dist/bundle/chunks/{chunk-A576H74Y.js → chunk-IZ3S3GDX.js} +1 -1
  10. package/dist/bundle/chunks/{chunk-ABVRAYXT.js → chunk-NY3CWK44.js} +2 -2
  11. package/dist/bundle/chunks/chunk-SVJ7OGEB.js +2 -0
  12. package/dist/bundle/chunks/chunk-TRHTWM3C.js +2 -0
  13. package/dist/bundle/chunks/{chunk-DEWXBB6W.js → chunk-V66VGGOM.js} +1 -1
  14. package/dist/bundle/chunks/chunk-XDYM2567.js +20 -0
  15. package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-ZYSAFXXL.js → cloudflare-workers-ai-system-one-QI46LUZ6.js} +1 -1
  16. package/dist/bundle/chunks/codemode-worker.js +90 -10
  17. package/dist/bundle/chunks/github-copilot.js +1 -1
  18. package/dist/bundle/chunks/{google-generative-ai-SDNQVVXA.js → google-generative-ai-YTZCSHQN.js} +1 -1
  19. package/dist/bundle/chunks/{google-vertex-LZXOLBIO.js → google-vertex-OTFZJJXQ.js} +1 -1
  20. package/dist/bundle/chunks/{llama-cpp-classify-7IYGGPND.js → llama-cpp-classify-R7DQLTQN.js} +1 -1
  21. package/dist/bundle/chunks/{mistral-conversations-VYKPSSAM.js → mistral-conversations-ELH4V4TY.js} +1 -1
  22. package/dist/bundle/chunks/node-USQQ7C6M.js +16 -0
  23. package/dist/bundle/chunks/openai-chatgpt.js +2 -2
  24. package/dist/bundle/chunks/{openai-codex-responses-HZ4VUDXD.js → openai-codex-responses-OLVTU4UA.js} +1 -1
  25. package/dist/bundle/chunks/openai-codex.js +1 -1
  26. package/dist/bundle/chunks/openai-completions-53M2KJ67.js +7 -0
  27. package/dist/bundle/chunks/openai-responses-4ABDEL4Z.js +3 -0
  28. package/dist/bundle/chunks/{openrouter-images-5524IQHX.js → openrouter-images-YP3YVB54.js} +1 -1
  29. package/dist/bundle/chunks/openrouter.js +1 -1
  30. package/dist/bundle/chunks/radius.js +1 -1
  31. package/dist/bundle/chunks/{typesafe-system-one-Z2CDLKEY.js → typesafe-system-one-RREJAKWB.js} +1 -1
  32. package/dist/bundle/chunks/virtual-modules-YFKU7JZF.js +2 -0
  33. package/dist/bundle/cli.js +1 -1
  34. package/dist/bundle/index.js +1 -1
  35. package/dist/bundle/rpc-entry.js +1 -1
  36. package/dist/cli/args.d.ts.map +1 -1
  37. package/dist/cli/args.js +5 -2
  38. package/dist/cli/args.js.map +1 -1
  39. package/dist/config.d.ts +5 -8
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +19 -13
  42. package/dist/config.js.map +1 -1
  43. package/dist/core/agent-session.d.ts +21 -1
  44. package/dist/core/agent-session.d.ts.map +1 -1
  45. package/dist/core/agent-session.js +65 -12
  46. package/dist/core/agent-session.js.map +1 -1
  47. package/dist/core/export-html/tool-renderer.d.ts +3 -3
  48. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  49. package/dist/core/export-html/tool-renderer.js +3 -3
  50. package/dist/core/export-html/tool-renderer.js.map +1 -1
  51. package/dist/core/extensions/index.d.ts +2 -2
  52. package/dist/core/extensions/index.d.ts.map +1 -1
  53. package/dist/core/extensions/index.js.map +1 -1
  54. package/dist/core/extensions/loader.d.ts.map +1 -1
  55. package/dist/core/extensions/loader.js +18 -1
  56. package/dist/core/extensions/loader.js.map +1 -1
  57. package/dist/core/extensions/runner.d.ts +3 -1
  58. package/dist/core/extensions/runner.d.ts.map +1 -1
  59. package/dist/core/extensions/runner.js +6 -0
  60. package/dist/core/extensions/runner.js.map +1 -1
  61. package/dist/core/extensions/types.d.ts +15 -1
  62. package/dist/core/extensions/types.d.ts.map +1 -1
  63. package/dist/core/extensions/types.js.map +1 -1
  64. package/dist/core/keybindings.d.ts +51 -11
  65. package/dist/core/keybindings.d.ts.map +1 -1
  66. package/dist/core/keybindings.js +11 -3
  67. package/dist/core/keybindings.js.map +1 -1
  68. package/dist/core/mcp-servers.d.ts +40 -7
  69. package/dist/core/mcp-servers.d.ts.map +1 -1
  70. package/dist/core/mcp-servers.js +63 -11
  71. package/dist/core/mcp-servers.js.map +1 -1
  72. package/dist/core/model-config.d.ts +36 -0
  73. package/dist/core/model-config.d.ts.map +1 -1
  74. package/dist/core/model-config.js +14 -2
  75. package/dist/core/model-config.js.map +1 -1
  76. package/dist/core/model-registry.d.ts +3 -1
  77. package/dist/core/model-registry.d.ts.map +1 -1
  78. package/dist/core/model-registry.js +4 -0
  79. package/dist/core/model-registry.js.map +1 -1
  80. package/dist/core/model-resolver.js +1 -1
  81. package/dist/core/model-resolver.js.map +1 -1
  82. package/dist/core/model-runtime.d.ts +6 -0
  83. package/dist/core/model-runtime.d.ts.map +1 -1
  84. package/dist/core/model-runtime.js +22 -18
  85. package/dist/core/model-runtime.js.map +1 -1
  86. package/dist/core/provider-composer.d.ts +2 -1
  87. package/dist/core/provider-composer.d.ts.map +1 -1
  88. package/dist/core/provider-composer.js +13 -0
  89. package/dist/core/provider-composer.js.map +1 -1
  90. package/dist/core/radius.d.ts +2 -0
  91. package/dist/core/radius.d.ts.map +1 -1
  92. package/dist/core/radius.js +2 -0
  93. package/dist/core/radius.js.map +1 -1
  94. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  95. package/dist/core/remote-catalog-provider.js +4 -9
  96. package/dist/core/remote-catalog-provider.js.map +1 -1
  97. package/dist/core/sdk.d.ts.map +1 -1
  98. package/dist/core/sdk.js +1 -0
  99. package/dist/core/sdk.js.map +1 -1
  100. package/dist/core/settings-manager.d.ts +7 -5
  101. package/dist/core/settings-manager.d.ts.map +1 -1
  102. package/dist/core/settings-manager.js +2 -1
  103. package/dist/core/settings-manager.js.map +1 -1
  104. package/dist/core/system-prompt.js +1 -1
  105. package/dist/core/system-prompt.js.map +1 -1
  106. package/dist/core/tasks/format.d.ts +7 -0
  107. package/dist/core/tasks/format.d.ts.map +1 -0
  108. package/dist/core/tasks/format.js +14 -0
  109. package/dist/core/tasks/format.js.map +1 -0
  110. package/dist/core/tasks/history.d.ts.map +1 -1
  111. package/dist/core/tasks/history.js +0 -19
  112. package/dist/core/tasks/history.js.map +1 -1
  113. package/dist/core/tasks/output.d.ts +8 -0
  114. package/dist/core/tasks/output.d.ts.map +1 -1
  115. package/dist/core/tasks/output.js +19 -0
  116. package/dist/core/tasks/output.js.map +1 -1
  117. package/dist/core/tasks/presentation.d.ts +1 -3
  118. package/dist/core/tasks/presentation.d.ts.map +1 -1
  119. package/dist/core/tasks/presentation.js +79 -166
  120. package/dist/core/tasks/presentation.js.map +1 -1
  121. package/dist/core/tasks/runtime.d.ts +16 -9
  122. package/dist/core/tasks/runtime.d.ts.map +1 -1
  123. package/dist/core/tasks/runtime.js +89 -106
  124. package/dist/core/tasks/runtime.js.map +1 -1
  125. package/dist/core/tasks/session.d.ts.map +1 -1
  126. package/dist/core/tasks/session.js +13 -4
  127. package/dist/core/tasks/session.js.map +1 -1
  128. package/dist/core/tasks/store.d.ts +20 -6
  129. package/dist/core/tasks/store.d.ts.map +1 -1
  130. package/dist/core/tasks/store.js +45 -18
  131. package/dist/core/tasks/store.js.map +1 -1
  132. package/dist/core/tasks/types.d.ts +14 -54
  133. package/dist/core/tasks/types.d.ts.map +1 -1
  134. package/dist/core/tasks/types.js +1 -5
  135. package/dist/core/tasks/types.js.map +1 -1
  136. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  137. package/dist/core/tools/renderers/bash.js +11 -34
  138. package/dist/core/tools/renderers/bash.js.map +1 -1
  139. package/dist/core/tools/renderers/index.d.ts +2 -2
  140. package/dist/core/tools/renderers/index.d.ts.map +1 -1
  141. package/dist/core/tools/renderers/index.js.map +1 -1
  142. package/dist/core/tools/shell-execution.d.ts +0 -1
  143. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  144. package/dist/core/tools/shell-execution.js +3 -10
  145. package/dist/core/tools/shell-execution.js.map +1 -1
  146. package/dist/core/tools/shell-tool.d.ts.map +1 -1
  147. package/dist/core/tools/shell-tool.js +2 -4
  148. package/dist/core/tools/shell-tool.js.map +1 -1
  149. package/dist/core/tools/tasks/actions.d.ts +1 -1
  150. package/dist/core/tools/tasks/actions.d.ts.map +1 -1
  151. package/dist/core/tools/tasks/actions.js +26 -12
  152. package/dist/core/tools/tasks/actions.js.map +1 -1
  153. package/dist/core/tools/tasks/constants.d.ts +2 -6
  154. package/dist/core/tools/tasks/constants.d.ts.map +1 -1
  155. package/dist/core/tools/tasks/constants.js +2 -6
  156. package/dist/core/tools/tasks/constants.js.map +1 -1
  157. package/dist/core/tools/tasks/schema.d.ts +1 -1
  158. package/dist/core/tools/tasks/schema.d.ts.map +1 -1
  159. package/dist/core/tools/tasks/schema.js +8 -7
  160. package/dist/core/tools/tasks/schema.js.map +1 -1
  161. package/dist/core/tools/tasks/types.d.ts +8 -38
  162. package/dist/core/tools/tasks/types.d.ts.map +1 -1
  163. package/dist/core/tools/tasks/types.js +6 -11
  164. package/dist/core/tools/tasks/types.js.map +1 -1
  165. package/dist/core/virtual-models.d.ts +2 -0
  166. package/dist/core/virtual-models.d.ts.map +1 -1
  167. package/dist/core/virtual-models.js +19 -12
  168. package/dist/core/virtual-models.js.map +1 -1
  169. package/dist/extensions/btw/agent.d.ts +17 -8
  170. package/dist/extensions/btw/agent.d.ts.map +1 -1
  171. package/dist/extensions/btw/agent.js +74 -76
  172. package/dist/extensions/btw/agent.js.map +1 -1
  173. package/dist/extensions/btw/controller.d.ts +0 -1
  174. package/dist/extensions/btw/controller.d.ts.map +1 -1
  175. package/dist/extensions/btw/controller.js +26 -33
  176. package/dist/extensions/btw/controller.js.map +1 -1
  177. package/dist/extensions/btw/panel.d.ts +13 -14
  178. package/dist/extensions/btw/panel.d.ts.map +1 -1
  179. package/dist/extensions/btw/panel.js +38 -29
  180. package/dist/extensions/btw/panel.js.map +1 -1
  181. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  182. package/dist/extensions/codemode/execute.js +197 -51
  183. package/dist/extensions/codemode/execute.js.map +1 -1
  184. package/dist/extensions/codemode/renderer.d.ts.map +1 -1
  185. package/dist/extensions/codemode/renderer.js +43 -25
  186. package/dist/extensions/codemode/renderer.js.map +1 -1
  187. package/dist/extensions/codemode/tool.d.ts +12 -11
  188. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  189. package/dist/extensions/codemode/tool.js +73 -129
  190. package/dist/extensions/codemode/tool.js.map +1 -1
  191. package/dist/extensions/codemode/worker.d.ts +1 -1
  192. package/dist/extensions/codemode/worker.js +1 -1
  193. package/dist/extensions/codemode/worker.js.map +1 -1
  194. package/dist/extensions/deepwiki/schema.d.ts +1 -1
  195. package/dist/extensions/index.d.ts.map +1 -1
  196. package/dist/extensions/index.js +0 -2
  197. package/dist/extensions/index.js.map +1 -1
  198. package/dist/extensions/mcp/cli.d.ts.map +1 -1
  199. package/dist/extensions/mcp/cli.js +23 -5
  200. package/dist/extensions/mcp/cli.js.map +1 -1
  201. package/dist/extensions/mcp/config.d.ts +19 -5
  202. package/dist/extensions/mcp/config.d.ts.map +1 -1
  203. package/dist/extensions/mcp/config.js +60 -12
  204. package/dist/extensions/mcp/config.js.map +1 -1
  205. package/dist/extensions/mcp/index.d.ts +36 -9
  206. package/dist/extensions/mcp/index.d.ts.map +1 -1
  207. package/dist/extensions/mcp/index.js +309 -100
  208. package/dist/extensions/mcp/index.js.map +1 -1
  209. package/dist/extensions/mcp/oauth.d.ts +14 -8
  210. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  211. package/dist/extensions/mcp/oauth.js +105 -36
  212. package/dist/extensions/mcp/oauth.js.map +1 -1
  213. package/dist/extensions/mcp/runtime.d.ts +2 -0
  214. package/dist/extensions/mcp/runtime.d.ts.map +1 -1
  215. package/dist/extensions/mcp/runtime.js +17 -9
  216. package/dist/extensions/mcp/runtime.js.map +1 -1
  217. package/dist/extensions/mcp/tools.d.ts +8 -5
  218. package/dist/extensions/mcp/tools.d.ts.map +1 -1
  219. package/dist/extensions/mcp/tools.js +50 -26
  220. package/dist/extensions/mcp/tools.js.map +1 -1
  221. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  222. package/dist/extensions/mcp/ui.js +7 -1
  223. package/dist/extensions/mcp/ui.js.map +1 -1
  224. package/dist/extensions/provider/catalog.d.ts +8 -1
  225. package/dist/extensions/provider/catalog.d.ts.map +1 -1
  226. package/dist/extensions/provider/catalog.js +31 -0
  227. package/dist/extensions/provider/catalog.js.map +1 -1
  228. package/dist/extensions/provider/connection.d.ts +4 -1
  229. package/dist/extensions/provider/connection.d.ts.map +1 -1
  230. package/dist/extensions/provider/connection.js +1 -5
  231. package/dist/extensions/provider/connection.js.map +1 -1
  232. package/dist/extensions/provider/editing.d.ts +36 -0
  233. package/dist/extensions/provider/editing.d.ts.map +1 -0
  234. package/dist/extensions/provider/editing.js +99 -0
  235. package/dist/extensions/provider/editing.js.map +1 -0
  236. package/dist/extensions/provider/json-fields.d.ts +5 -0
  237. package/dist/extensions/provider/json-fields.d.ts.map +1 -0
  238. package/dist/extensions/provider/json-fields.js +31 -0
  239. package/dist/extensions/provider/json-fields.js.map +1 -0
  240. package/dist/extensions/provider/store.d.ts +1 -4
  241. package/dist/extensions/provider/store.d.ts.map +1 -1
  242. package/dist/extensions/provider/store.js +2 -30
  243. package/dist/extensions/provider/store.js.map +1 -1
  244. package/dist/extensions/provider/ui/builtin-data.d.ts +0 -2
  245. package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
  246. package/dist/extensions/provider/ui/builtin-data.js +14 -79
  247. package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
  248. package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
  249. package/dist/extensions/provider/ui/compat.js +6 -9
  250. package/dist/extensions/provider/ui/compat.js.map +1 -1
  251. package/dist/extensions/provider/ui/controls.d.ts +48 -0
  252. package/dist/extensions/provider/ui/controls.d.ts.map +1 -0
  253. package/dist/extensions/provider/ui/controls.js +108 -0
  254. package/dist/extensions/provider/ui/controls.js.map +1 -0
  255. package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
  256. package/dist/extensions/provider/ui/dictionary.js +6 -9
  257. package/dist/extensions/provider/ui/dictionary.js.map +1 -1
  258. package/dist/extensions/provider/ui/editor.d.ts +3 -3
  259. package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
  260. package/dist/extensions/provider/ui/editor.js +35 -140
  261. package/dist/extensions/provider/ui/editor.js.map +1 -1
  262. package/dist/extensions/provider/ui/fetch-models.d.ts +0 -3
  263. package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
  264. package/dist/extensions/provider/ui/fetch-models.js +49 -44
  265. package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
  266. package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
  267. package/dist/extensions/provider/ui/model-fields.js +11 -14
  268. package/dist/extensions/provider/ui/model-fields.js.map +1 -1
  269. package/dist/extensions/provider/ui/model-options.d.ts +4 -34
  270. package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
  271. package/dist/extensions/provider/ui/model-options.js +90 -271
  272. package/dist/extensions/provider/ui/model-options.js.map +1 -1
  273. package/dist/extensions/provider/ui/pane.d.ts +4 -18
  274. package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
  275. package/dist/extensions/provider/ui/pane.js.map +1 -1
  276. package/dist/extensions/provider/ui/provider-fields.d.ts +2 -19
  277. package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
  278. package/dist/extensions/provider/ui/provider-fields.js +58 -171
  279. package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
  280. package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
  281. package/dist/extensions/provider/ui/thinking-map.js +6 -9
  282. package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
  283. package/dist/extensions/question/detail-pane.d.ts +7 -2
  284. package/dist/extensions/question/detail-pane.d.ts.map +1 -1
  285. package/dist/extensions/question/detail-pane.js +16 -5
  286. package/dist/extensions/question/detail-pane.js.map +1 -1
  287. package/dist/extensions/question/dialog-view.d.ts +41 -0
  288. package/dist/extensions/question/dialog-view.d.ts.map +1 -0
  289. package/dist/extensions/question/dialog-view.js +329 -0
  290. package/dist/extensions/question/dialog-view.js.map +1 -0
  291. package/dist/extensions/question/dialog.d.ts +3 -3
  292. package/dist/extensions/question/dialog.d.ts.map +1 -1
  293. package/dist/extensions/question/dialog.js +220 -634
  294. package/dist/extensions/question/dialog.js.map +1 -1
  295. package/dist/extensions/question/index.d.ts.map +1 -1
  296. package/dist/extensions/question/index.js +2 -3
  297. package/dist/extensions/question/index.js.map +1 -1
  298. package/dist/extensions/question/render.d.ts.map +1 -1
  299. package/dist/extensions/question/render.js +22 -32
  300. package/dist/extensions/question/render.js.map +1 -1
  301. package/dist/extensions/question/results.d.ts.map +1 -1
  302. package/dist/extensions/question/results.js +56 -12
  303. package/dist/extensions/question/results.js.map +1 -1
  304. package/dist/extensions/question/schema.d.ts +21 -6
  305. package/dist/extensions/question/schema.d.ts.map +1 -1
  306. package/dist/extensions/question/schema.js.map +1 -1
  307. package/dist/extensions/question/state.d.ts +9 -7
  308. package/dist/extensions/question/state.d.ts.map +1 -1
  309. package/dist/extensions/question/state.js +63 -54
  310. package/dist/extensions/question/state.js.map +1 -1
  311. package/dist/extensions/question/types.d.ts +41 -18
  312. package/dist/extensions/question/types.d.ts.map +1 -1
  313. package/dist/extensions/question/types.js.map +1 -1
  314. package/dist/extensions/statusline/index.d.ts +4 -0
  315. package/dist/extensions/statusline/index.d.ts.map +1 -1
  316. package/dist/extensions/statusline/index.js +18 -355
  317. package/dist/extensions/statusline/index.js.map +1 -1
  318. package/dist/extensions/statusline/render.d.ts +19 -0
  319. package/dist/extensions/statusline/render.d.ts.map +1 -0
  320. package/dist/extensions/statusline/render.js +163 -0
  321. package/dist/extensions/statusline/render.js.map +1 -0
  322. package/dist/extensions/statusline/usage.d.ts +12 -0
  323. package/dist/extensions/statusline/usage.d.ts.map +1 -0
  324. package/dist/extensions/statusline/usage.js +36 -0
  325. package/dist/extensions/statusline/usage.js.map +1 -0
  326. package/dist/extensions/tool-search/tool.d.ts +5 -4
  327. package/dist/extensions/tool-search/tool.d.ts.map +1 -1
  328. package/dist/extensions/tool-search/tool.js +7 -28
  329. package/dist/extensions/tool-search/tool.js.map +1 -1
  330. package/dist/extensions/web-search/execute.d.ts +1 -5
  331. package/dist/extensions/web-search/execute.d.ts.map +1 -1
  332. package/dist/extensions/web-search/execute.js +4 -9
  333. package/dist/extensions/web-search/execute.js.map +1 -1
  334. package/dist/extensions/web-search/format.d.ts +12 -3
  335. package/dist/extensions/web-search/format.d.ts.map +1 -1
  336. package/dist/extensions/web-search/format.js +33 -25
  337. package/dist/extensions/web-search/format.js.map +1 -1
  338. package/dist/extensions/web-search/index.d.ts.map +1 -1
  339. package/dist/extensions/web-search/index.js +6 -29
  340. package/dist/extensions/web-search/index.js.map +1 -1
  341. package/dist/extensions/web-search/providers/deepseek.d.ts.map +1 -1
  342. package/dist/extensions/web-search/providers/deepseek.js +0 -1
  343. package/dist/extensions/web-search/providers/deepseek.js.map +1 -1
  344. package/dist/extensions/web-search/providers/http.d.ts +1 -1
  345. package/dist/extensions/web-search/providers/http.d.ts.map +1 -1
  346. package/dist/extensions/web-search/providers/http.js.map +1 -1
  347. package/dist/extensions/web-search/providers/minimax.d.ts.map +1 -1
  348. package/dist/extensions/web-search/providers/minimax.js +0 -1
  349. package/dist/extensions/web-search/providers/minimax.js.map +1 -1
  350. package/dist/extensions/web-search/render.d.ts +7 -2
  351. package/dist/extensions/web-search/render.d.ts.map +1 -1
  352. package/dist/extensions/web-search/render.js +32 -4
  353. package/dist/extensions/web-search/render.js.map +1 -1
  354. package/dist/extensions/web-search/results.d.ts.map +1 -1
  355. package/dist/extensions/web-search/results.js +3 -8
  356. package/dist/extensions/web-search/results.js.map +1 -1
  357. package/dist/extensions/web-search/types.d.ts +4 -2
  358. package/dist/extensions/web-search/types.d.ts.map +1 -1
  359. package/dist/extensions/web-search/types.js.map +1 -1
  360. package/dist/index.d.ts +3 -5
  361. package/dist/index.d.ts.map +1 -1
  362. package/dist/index.js +0 -1
  363. package/dist/index.js.map +1 -1
  364. package/dist/main.d.ts.map +1 -1
  365. package/dist/main.js +6 -0
  366. package/dist/main.js.map +1 -1
  367. package/dist/modes/interactive/components/armin.d.ts +3 -0
  368. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  369. package/dist/modes/interactive/components/armin.js +7 -5
  370. package/dist/modes/interactive/components/armin.js.map +1 -1
  371. package/dist/modes/interactive/components/auth-url.d.ts +14 -0
  372. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  373. package/dist/modes/interactive/components/auth-url.js +34 -0
  374. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  375. package/dist/modes/interactive/components/easter-egg-3d.d.ts +104 -0
  376. package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
  377. package/dist/modes/interactive/components/easter-egg-3d.js +1123 -0
  378. package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
  379. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
  380. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
  381. package/dist/modes/interactive/components/easter-egg-3d.lazy.js +24 -0
  382. package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
  383. package/dist/modes/interactive/components/index.d.ts +0 -1
  384. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  385. package/dist/modes/interactive/components/index.js +0 -1
  386. package/dist/modes/interactive/components/index.js.map +1 -1
  387. package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
  388. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  389. package/dist/modes/interactive/components/login-dialog.js +9 -5
  390. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  391. package/dist/modes/interactive/components/oauth-selector.d.ts +8 -2
  392. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  393. package/dist/modes/interactive/components/oauth-selector.js +24 -21
  394. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  395. package/dist/modes/interactive/components/pi-logo.d.ts +7 -0
  396. package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -1
  397. package/dist/modes/interactive/components/pi-logo.js +13 -1
  398. package/dist/modes/interactive/components/pi-logo.js.map +1 -1
  399. package/dist/modes/interactive/components/radius-login-selector.d.ts +15 -0
  400. package/dist/modes/interactive/components/radius-login-selector.d.ts.map +1 -0
  401. package/dist/modes/interactive/components/radius-login-selector.js +83 -0
  402. package/dist/modes/interactive/components/radius-login-selector.js.map +1 -0
  403. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  404. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  405. package/dist/modes/interactive/components/settings-selector.js +5 -5
  406. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  407. package/dist/modes/interactive/components/status-marker.d.ts +0 -2
  408. package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
  409. package/dist/modes/interactive/components/status-marker.js +0 -4
  410. package/dist/modes/interactive/components/status-marker.js.map +1 -1
  411. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  412. package/dist/modes/interactive/components/user-message.js +5 -4
  413. package/dist/modes/interactive/components/user-message.js.map +1 -1
  414. package/dist/modes/interactive/components/visual-truncate.d.ts +27 -3
  415. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  416. package/dist/modes/interactive/components/visual-truncate.js +36 -6
  417. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  418. package/dist/modes/interactive/interactive-mode.d.ts +12 -2
  419. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  420. package/dist/modes/interactive/interactive-mode.js +180 -55
  421. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  422. package/dist/modes/interactive/tasks/completion-render.d.ts +1 -1
  423. package/dist/modes/interactive/tasks/completion-render.d.ts.map +1 -1
  424. package/dist/modes/interactive/tasks/completion-render.js +28 -82
  425. package/dist/modes/interactive/tasks/completion-render.js.map +1 -1
  426. package/dist/modes/interactive/tasks/index.d.ts.map +1 -1
  427. package/dist/modes/interactive/tasks/index.js +18 -13
  428. package/dist/modes/interactive/tasks/index.js.map +1 -1
  429. package/dist/modes/interactive/tasks/inspector.d.ts +35 -0
  430. package/dist/modes/interactive/tasks/inspector.d.ts.map +1 -0
  431. package/dist/modes/interactive/tasks/inspector.js +93 -0
  432. package/dist/modes/interactive/tasks/inspector.js.map +1 -0
  433. package/dist/modes/interactive/tasks/layout.d.ts +40 -0
  434. package/dist/modes/interactive/tasks/layout.d.ts.map +1 -0
  435. package/dist/modes/interactive/tasks/layout.js +212 -0
  436. package/dist/modes/interactive/tasks/layout.js.map +1 -0
  437. package/dist/modes/interactive/tasks/list.d.ts +21 -0
  438. package/dist/modes/interactive/tasks/list.d.ts.map +1 -0
  439. package/dist/modes/interactive/tasks/list.js +96 -0
  440. package/dist/modes/interactive/tasks/list.js.map +1 -0
  441. package/dist/modes/interactive/tasks/manager.d.ts +29 -36
  442. package/dist/modes/interactive/tasks/manager.d.ts.map +1 -1
  443. package/dist/modes/interactive/tasks/manager.js +315 -315
  444. package/dist/modes/interactive/tasks/manager.js.map +1 -1
  445. package/dist/modes/interactive/tasks/model.d.ts +21 -0
  446. package/dist/modes/interactive/tasks/model.d.ts.map +1 -0
  447. package/dist/modes/interactive/tasks/model.js +41 -0
  448. package/dist/modes/interactive/tasks/model.js.map +1 -0
  449. package/dist/modes/interactive/tasks/render.d.ts +5 -19
  450. package/dist/modes/interactive/tasks/render.d.ts.map +1 -1
  451. package/dist/modes/interactive/tasks/render.js +18 -102
  452. package/dist/modes/interactive/tasks/render.js.map +1 -1
  453. package/dist/modes/interactive/tasks/task-view.d.ts +8 -48
  454. package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -1
  455. package/dist/modes/interactive/tasks/task-view.js +11 -51
  456. package/dist/modes/interactive/tasks/task-view.js.map +1 -1
  457. package/dist/modes/interactive/tasks/text.d.ts +1 -7
  458. package/dist/modes/interactive/tasks/text.d.ts.map +1 -1
  459. package/dist/modes/interactive/tasks/text.js +6 -29
  460. package/dist/modes/interactive/tasks/text.js.map +1 -1
  461. package/dist/modes/interactive/tasks/viewport.d.ts +2 -0
  462. package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -1
  463. package/dist/modes/interactive/tasks/viewport.js +17 -7
  464. package/dist/modes/interactive/tasks/viewport.js.map +1 -1
  465. package/dist/modes/interactive/tasks/views.d.ts +9 -0
  466. package/dist/modes/interactive/tasks/views.d.ts.map +1 -0
  467. package/dist/modes/interactive/tasks/views.js +42 -0
  468. package/dist/modes/interactive/tasks/views.js.map +1 -0
  469. package/dist/modes/interactive/theme/system-theme.d.ts +2 -1
  470. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -1
  471. package/dist/modes/interactive/theme/system-theme.js +16 -5
  472. package/dist/modes/interactive/theme/system-theme.js.map +1 -1
  473. package/dist/modes/interactive/tool-view/tool-execution.d.ts +4 -19
  474. package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -1
  475. package/dist/modes/interactive/tool-view/tool-execution.js +23 -67
  476. package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -1
  477. package/dist/utils/image-convert.d.ts +12 -0
  478. package/dist/utils/image-convert.d.ts.map +1 -1
  479. package/dist/utils/image-convert.js +45 -6
  480. package/dist/utils/image-convert.js.map +1 -1
  481. package/docs/bundled/README.md +0 -1
  482. package/docs/bundled/extensions/question.md +2 -2
  483. package/docs/bundled/extensions/statusline.md +24 -15
  484. package/docs/bundled/tasks.md +34 -48
  485. package/docs/codemode.md +207 -0
  486. package/docs/docs.json +4 -4
  487. package/docs/environment-variables.md +1 -1
  488. package/docs/extensions.md +11 -9
  489. package/docs/keybindings.md +14 -7
  490. package/docs/mcp.md +164 -82
  491. package/docs/models.md +51 -3
  492. package/docs/providers.md +8 -0
  493. package/docs/sdk.md +2 -2
  494. package/docs/session-format.md +12 -22
  495. package/docs/settings.md +4 -2
  496. package/docs/tui.md +1 -1
  497. package/docs/usage.md +6 -16
  498. package/examples/README.md +1 -1
  499. package/examples/extensions/README.md +1 -2
  500. package/examples/extensions/built-in-tool-renderer.ts +16 -40
  501. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  502. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  503. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  504. package/examples/extensions/gondolin/package-lock.json +2 -2
  505. package/examples/extensions/gondolin/package.json +1 -1
  506. package/examples/extensions/minimal-mode.ts +24 -96
  507. package/examples/extensions/sandbox/package-lock.json +2 -2
  508. package/examples/extensions/sandbox/package.json +1 -1
  509. package/examples/extensions/with-deps/package-lock.json +2 -2
  510. package/examples/extensions/with-deps/package.json +1 -1
  511. package/examples/sdk/14-codemode-mcp.ts +2 -2
  512. package/npm-shrinkwrap.json +73 -62
  513. package/package.json +11 -10
  514. package/dist/bundle/chunks/anthropic-messages-KIXY7EDT.js +0 -6
  515. package/dist/bundle/chunks/azure-openai-responses-RPBERDXD.js +0 -2
  516. package/dist/bundle/chunks/chunk-CLLDCO64.js +0 -2
  517. package/dist/bundle/chunks/chunk-PJVFYVHE.js +0 -42
  518. package/dist/bundle/chunks/chunk-UUSTLCVC.js +0 -2
  519. package/dist/bundle/chunks/chunk-VWCWZD6E.js +0 -2
  520. package/dist/bundle/chunks/node-CXWYTK2I.js +0 -16
  521. package/dist/bundle/chunks/openai-completions-SKDGF6OE.js +0 -7
  522. package/dist/bundle/chunks/openai-responses-FPML4SSG.js +0 -3
  523. package/dist/bundle/chunks/virtual-modules-TQRORWJQ.js +0 -2
  524. package/dist/core/tasks/view-data.d.ts +0 -8
  525. package/dist/core/tasks/view-data.d.ts.map +0 -1
  526. package/dist/core/tasks/view-data.js +0 -61
  527. package/dist/core/tasks/view-data.js.map +0 -1
  528. package/dist/core/tasks/view.d.ts +0 -30
  529. package/dist/core/tasks/view.d.ts.map +0 -1
  530. package/dist/core/tasks/view.js +0 -50
  531. package/dist/core/tasks/view.js.map +0 -1
  532. package/dist/core/tools/renderers/shell-task.d.ts +0 -4
  533. package/dist/core/tools/renderers/shell-task.d.ts.map +0 -1
  534. package/dist/core/tools/renderers/shell-task.js +0 -35
  535. package/dist/core/tools/renderers/shell-task.js.map +0 -1
  536. package/dist/extensions/todo/constants.d.ts +0 -16
  537. package/dist/extensions/todo/constants.d.ts.map +0 -1
  538. package/dist/extensions/todo/constants.js +0 -30
  539. package/dist/extensions/todo/constants.js.map +0 -1
  540. package/dist/extensions/todo/index.d.ts +0 -3
  541. package/dist/extensions/todo/index.d.ts.map +0 -1
  542. package/dist/extensions/todo/index.js +0 -98
  543. package/dist/extensions/todo/index.js.map +0 -1
  544. package/dist/extensions/todo/schema.d.ts +0 -60
  545. package/dist/extensions/todo/schema.d.ts.map +0 -1
  546. package/dist/extensions/todo/schema.js +0 -56
  547. package/dist/extensions/todo/schema.js.map +0 -1
  548. package/dist/extensions/todo/state.d.ts +0 -34
  549. package/dist/extensions/todo/state.d.ts.map +0 -1
  550. package/dist/extensions/todo/state.js +0 -425
  551. package/dist/extensions/todo/state.js.map +0 -1
  552. package/dist/extensions/todo/view.d.ts +0 -36
  553. package/dist/extensions/todo/view.d.ts.map +0 -1
  554. package/dist/extensions/todo/view.js +0 -580
  555. package/dist/extensions/todo/view.js.map +0 -1
  556. package/dist/extensions/todo/widget.d.ts +0 -15
  557. package/dist/extensions/todo/widget.d.ts.map +0 -1
  558. package/dist/extensions/todo/widget.js +0 -50
  559. package/dist/extensions/todo/widget.js.map +0 -1
  560. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  561. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  562. package/dist/modes/interactive/components/daxnuts.js +0 -138
  563. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  564. package/dist/modes/interactive/tasks/fallback-view.d.ts +0 -4
  565. package/dist/modes/interactive/tasks/fallback-view.d.ts.map +0 -1
  566. package/dist/modes/interactive/tasks/fallback-view.js +0 -27
  567. package/dist/modes/interactive/tasks/fallback-view.js.map +0 -1
  568. package/docs/bundled/extensions/todo.md +0 -104
  569. package/examples/extensions/todo.ts +0 -297
@@ -1 +1 @@
1
- {"version":3,"file":"system-theme.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/system-theme.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The `system` theme: pi's colors derived from the terminal's own theme.\n *\n * Every token belongs to a color family (its hue) and has contrast rules: it must reach a contrast level\n * on the background and on the panels it is drawn on. Hue and saturation come from the terminal's palette\n * color for the family's ANSI slot, or from the family's own hue when the terminal reports no palette.\n * Lightness comes from the rules alone. Colors are built in OKHSL, whose saturation is relative to the\n * sRGB gamut, and fade toward gray near black and white.\n *\n * A contrast level is a target-lightness curve: the OKLab lightness a token needs, given the lightness of\n * the surface below it. The curves were fitted to the reference theme design from the \"Pi themes: system\n * and light/dark\" review. On dark backgrounds they aim for nearly fixed lightness; on light backgrounds the\n * required difference grows as the background darkens.\n *\n * Depending on what the terminal reports, the theme is generated in one of three tiers:\n * - background and palette: hues from the palette, lightness from the background;\n * - background only: the families' own hues, lightness from the background;\n * - nothing: ANSI palette indices and the default colors, which the terminal renders itself.\n */\n\nimport {\n\tcolorToOkhsl,\n\tcolorToOklch,\n\ttype OkhslChannels,\n\tokhslColor,\n\toklabToOkhslLightness,\n\ttype RgbColor,\n\trgbColor,\n} from \"@earendil-works/pi-tui\";\nimport type { ThemeAppearance, ThemeBg, ThemeColor, ThemeToken } from \"./theme.ts\";\n\nexport const SYSTEM_THEME_NAME = \"system\";\n\n// ============================================================================\n// Recipe: color families and their tokens\n// ============================================================================\n\n/** A family's OKHSL hue and saturation: `max` at mid lightness, falling toward `min` at black and white. */\ninterface Family {\n\thue: number;\n\tsaturation: { min: number; max: number };\n\t/** ANSI palette slot the family takes its hue and saturation from. */\n\tslot: number;\n}\n\nconst FAMILIES = {\n\tneutral: { hue: 231.49, saturation: { min: 0.02, max: 0.08 }, slot: 8 },\n\tblue: { hue: 231.49, saturation: { min: 0.1, max: 0.68 }, slot: 4 },\n\tgreen: { hue: 158.68, saturation: { min: 0.1, max: 0.76 }, slot: 2 },\n\tred: { hue: 20, saturation: { min: 0.1, max: 0.92 }, slot: 1 },\n\tyellow: { hue: 82.36, saturation: { min: 0.5, max: 1 }, slot: 3 },\n\torange: { hue: 52, saturation: { min: 0.12, max: 0.85 }, slot: 3 },\n\tviolet: { hue: 295, saturation: { min: 0.2, max: 0.6 }, slot: 5 },\n\tcalamine: { hue: 202.43, saturation: { min: 0.1, max: 0.74 }, slot: 6 },\n\tthinkingSlate: { hue: 231.49, saturation: { min: 0.08, max: 0.2 }, slot: 4 },\n\tthinkingBlue: { hue: 231.49, saturation: { min: 0.2, max: 0.45 }, slot: 4 },\n\tthinkingPeriwinkle: { hue: 263.25, saturation: { min: 0.3, max: 0.6 }, slot: 6 },\n\tthinkingViolet: { hue: 295, saturation: { min: 0.4, max: 0.75 }, slot: 5 },\n\tthinkingMagenta: { hue: 337.5, saturation: { min: 0.5, max: 0.85 }, slot: 13 },\n\tthinkingRed: { hue: 20, saturation: { min: 0.95, max: 1 }, slot: 1 },\n} satisfies Record<string, Family>;\n\ntype FamilyName = keyof typeof FAMILIES;\n\nconst TOKEN_FAMILIES: Record<ThemeToken, FamilyName> = {\n\tselectedBg: \"blue\",\n\tsearchMatchBg: \"orange\",\n\tuserMessageBg: \"blue\",\n\tcustomMessageBg: \"violet\",\n\ttoolPendingBg: \"neutral\",\n\ttoolSuccessBg: \"green\",\n\ttoolErrorBg: \"red\",\n\n\ttext: \"neutral\",\n\tuserMessageText: \"neutral\",\n\tcustomMessageText: \"neutral\",\n\ttoolTitle: \"neutral\",\n\tsyntaxOperator: \"neutral\",\n\tsyntaxPunctuation: \"neutral\",\n\tmuted: \"neutral\",\n\tdim: \"neutral\",\n\tthinkingText: \"neutral\",\n\ttoolOutput: \"neutral\",\n\tmdLinkUrl: \"neutral\",\n\tmdQuote: \"neutral\",\n\tmdQuoteBorder: \"neutral\",\n\tmdHr: \"neutral\",\n\tmdCodeBlockBorder: \"neutral\",\n\ttoolDiffContext: \"neutral\",\n\tsyntaxComment: \"neutral\",\n\tscrollbarTrack: \"neutral\",\n\tscrollbarThumb: \"neutral\",\n\tsearchMatchText: \"neutral\",\n\tborderMuted: \"neutral\",\n\n\taccent: \"violet\",\n\tborderAccent: \"violet\",\n\tcustomMessageLabel: \"violet\",\n\tmdCode: \"violet\",\n\tmdListBullet: \"violet\",\n\tsyntaxType: \"violet\",\n\tborder: \"blue\",\n\tmdLink: \"blue\",\n\tsyntaxKeyword: \"blue\",\n\tsyntaxVariable: \"calamine\",\n\tsuccess: \"green\",\n\tmdCodeBlock: \"green\",\n\ttoolDiffAdded: \"green\",\n\tbashMode: \"green\",\n\tsyntaxNumber: \"green\",\n\terror: \"red\",\n\ttoolDiffRemoved: \"red\",\n\twarning: \"yellow\",\n\tmdHeading: \"yellow\",\n\tsyntaxFunction: \"yellow\",\n\tsyntaxString: \"orange\",\n\n\tthinkingOff: \"neutral\",\n\tthinkingMinimal: \"thinkingSlate\",\n\tthinkingLow: \"thinkingBlue\",\n\tthinkingMedium: \"thinkingPeriwinkle\",\n\tthinkingHigh: \"thinkingViolet\",\n\tthinkingXhigh: \"thinkingMagenta\",\n\tthinkingMax: \"thinkingRed\",\n};\n\n/** Palette slots for tokens that would otherwise share a hue with a similar token. */\nconst TOKEN_SLOTS: Partial<Record<ThemeToken, number>> = { syntaxString: 2, syntaxNumber: 5, searchMatchBg: 3 };\n\n// ============================================================================\n// Contrast levels and rules\n// ============================================================================\n\n/**\n * Target-lightness curves: a polynomial in the surface's OKLab lightness giving the OKLab lightness a token\n * needs on it. `reachable` is the range of surface lightness where the level can be reached; beyond it the\n * level is relaxed.\n */\ninterface Curve {\n\tcoefficients: number[];\n\treachable: [number, number];\n}\n\nconst LEVELS = {\n\tpanel: {\n\t\tdark: { coefficients: [0.29131, -0.39746, 2.33185, -0.85524, -1.2076, 0.86276], reachable: [0, 0.979] },\n\t\tlight: { coefficients: [-3.74073, 27.94549, -78.44258, 112.6798, -79.60015, 22.11277], reachable: [0.348, 1] },\n\t},\n\ttrack: {\n\t\tdark: { coefficients: [0.39028, -0.23015, 0.83573, 2.43829, -4.38292, 2.01582], reachable: [0, 0.946] },\n\t\tlight: { coefficients: [-5.24921, 38.37322, -107.28833, 152.10005, -106.17127, 29.18061], reachable: [0.368, 1] },\n\t},\n\tthinking0: {\n\t\tdark: { coefficients: [0.52988, -0.05809, -0.30924, 4.63567, -6.52933, 2.89108], reachable: [0, 0.873] },\n\t\tlight: {\n\t\t\tcoefficients: [-28.27749, 182.85284, -469.62416, 603.15916, -384.59976, 97.35147],\n\t\t\treachable: [0.51, 1],\n\t\t},\n\t},\n\tthinking1: {\n\t\tdark: { coefficients: [0.55278, -0.03667, -0.45659, 4.95347, -6.90265, 3.0706], reachable: [0, 0.858] },\n\t\tlight: {\n\t\t\tcoefficients: [-37.10484, 235.86282, -596.62344, 754.3633, -474.00763, 118.3551],\n\t\t\treachable: [0.535, 1],\n\t\t},\n\t},\n\tthinking2: {\n\t\tdark: { coefficients: [0.57486, -0.01765, -0.58987, 5.25227, -7.27175, 3.25532], reachable: [0, 0.842] },\n\t\tlight: {\n\t\t\tcoefficients: [-59.89653, 377.05024, -945.07843, 1182.03145, -734.96375, 181.68658],\n\t\t\treachable: [0.556, 1],\n\t\t},\n\t},\n\tthinking3: {\n\t\tdark: { coefficients: [0.59621, -0.00062, -0.71148, 5.53588, -7.6392, 3.44606], reachable: [0, 0.827] },\n\t\tlight: {\n\t\t\tcoefficients: [-72.07122, 445.84082, -1099.57352, 1353.88793, -829.53392, 202.26164],\n\t\t\treachable: [0.58, 1],\n\t\t},\n\t},\n\tthinking4: {\n\t\tdark: { coefficients: [0.61691, 0.01462, -0.82288, 5.80651, -8.00641, 3.64333], reachable: [0, 0.811] },\n\t\tlight: {\n\t\t\tcoefficients: [-110.14338, 674.21488, -1645.75941, 2004.32367, -1215.15899, 293.3183],\n\t\t\treachable: [0.6, 1],\n\t\t},\n\t},\n\tthinking5: {\n\t\tdark: { coefficients: [0.63702, 0.02826, -0.92498, 6.06465, -8.37246, 3.84651], reachable: [0, 0.795] },\n\t\tlight: {\n\t\t\tcoefficients: [-175.47701, 1063.54495, -2570.70594, 3098.80776, -1860.15527, 444.76392],\n\t\t\treachable: [0.62, 1],\n\t\t},\n\t},\n\tthinking6: {\n\t\tdark: { coefficients: [0.65658, 0.04044, -1.01835, 6.30989, -8.73529, 4.05439], reachable: [0, 0.779] },\n\t\tlight: {\n\t\t\tcoefficients: [-183.81712, 1094.70055, -2602.68539, 3088.71276, -1826.91131, 430.75931],\n\t\t\treachable: [0.643, 1],\n\t\t},\n\t},\n\tsubtle: {\n\t\tdark: { coefficients: [0.56762, -0.02475, -0.5383, 5.12628, -7.10931, 3.17324], reachable: [0, 0.848] },\n\t\tlight: {\n\t\t\tcoefficients: [-232.85459, 1376.54473, -3249.11801, 3827.91186, -2248.29472, 526.55751],\n\t\t\treachable: [0.657, 1],\n\t\t},\n\t},\n\tthumb: {\n\t\tdark: { coefficients: [0.60323, 0.00278, -0.73328, 5.57157, -7.68067, 3.46933], reachable: [0, 0.823] },\n\t\tlight: {\n\t\t\tcoefficients: [-82.89897, 511.01355, -1255.98095, 1540.76821, -940.68087, 228.58523],\n\t\t\treachable: [0.586, 1],\n\t\t},\n\t},\n\treadable: {\n\t\tdark: { coefficients: [0.66937, 0.04704, -1.06871, 6.43941, -8.9332, 4.17229], reachable: [0, 0.77] },\n\t\tlight: {\n\t\t\tcoefficients: [-1554.52576, 8733.56817, -19604.93507, 21977.72696, -12300.99599, 2749.81288],\n\t\t\treachable: [0.751, 1],\n\t\t},\n\t},\n\temphasis: {\n\t\tdark: { coefficients: [0.7303, 0.07695, -1.31626, 7.1681, -10.14436, 4.92846], reachable: [0, 0.712] },\n\t\tlight: {\n\t\t\tcoefficients: [-4948.31942, 26870.91986, -58334.48399, 63280.17197, -34298.01053, 7430.30146],\n\t\t\treachable: [0.811, 1],\n\t\t},\n\t},\n\ttextOnPanel: {\n\t\tdark: { coefficients: [0.86713, 0.05232, -0.89428, 4.79014, -5.5432, 1.75023], reachable: [0, 0.542] },\n\t\tlight: {\n\t\t\tcoefficients: [-8570.89457, 43954.60805, -90084.00702, 92220.6791, -47152.15802, 9632.27113],\n\t\t\treachable: [0.867, 1],\n\t\t},\n\t},\n\ttext: {\n\t\tdark: { coefficients: [0.89242, 0.02311, -0.44862, 2.34417, -0.06084, -2.63844], reachable: [0, 0.5] },\n\t\tlight: {\n\t\t\tcoefficients: [-2004.67048, 6664.47299, -6060.70202, -1792.61209, 5133.82359, -1939.85583],\n\t\t\treachable: [0.894, 1],\n\t\t},\n\t},\n} satisfies Record<string, Record<ThemeAppearance, Curve>>;\n\ntype Level = keyof typeof LEVELS;\n\ntype Surface = ThemeBg | \"background\" | \"scrollbarTrack\";\n\ninterface Rule {\n\ttoken: ThemeToken;\n\ton: Surface[];\n\tlevel: Level;\n}\n\nconst TOOL_PANELS: Surface[] = [\"toolPendingBg\", \"toolSuccessBg\", \"toolErrorBg\"];\nconst MESSAGE_PANELS: Surface[] = [\"userMessageBg\", \"customMessageBg\"];\nconst PANELS: ThemeBg[] = [\n\t\"userMessageBg\",\n\t\"toolPendingBg\",\n\t\"toolSuccessBg\",\n\t\"toolErrorBg\",\n\t\"selectedBg\",\n\t\"searchMatchBg\",\n\t\"customMessageBg\",\n];\nconst THINKING: ThemeColor[] = [\n\t\"thinkingOff\",\n\t\"thinkingMinimal\",\n\t\"thinkingLow\",\n\t\"thinkingMedium\",\n\t\"thinkingHigh\",\n\t\"thinkingXhigh\",\n\t\"thinkingMax\",\n];\nconst THINKING_LEVELS: Level[] = [\n\t\"thinking0\",\n\t\"thinking1\",\n\t\"thinking2\",\n\t\"thinking3\",\n\t\"thinking4\",\n\t\"thinking5\",\n\t\"thinking6\",\n];\n\nconst each = (tokens: ThemeToken[], on: Surface[], level: Level): Rule[] =>\n\ttokens.map((token) => ({ token, on, level }));\n\nconst RULES: Rule[] = [\n\t...each(PANELS, [\"background\"], \"panel\"),\n\t{ token: \"text\", on: [\"background\"], level: \"text\" },\n\t{ token: \"text\", on: [\"selectedBg\"], level: \"textOnPanel\" },\n\t{ token: \"userMessageText\", on: [\"userMessageBg\"], level: \"textOnPanel\" },\n\t{ token: \"toolTitle\", on: TOOL_PANELS, level: \"textOnPanel\" },\n\t...each([\"accent\", \"success\", \"error\", \"warning\"], [\"background\", \"selectedBg\", ...TOOL_PANELS], \"readable\"),\n\t{ token: \"muted\", on: [\"background\", \"selectedBg\", \"customMessageBg\", ...TOOL_PANELS], level: \"readable\" },\n\t{ token: \"dim\", on: [\"background\", \"selectedBg\", \"customMessageBg\", ...TOOL_PANELS], level: \"subtle\" },\n\t{ token: \"thinkingText\", on: [\"background\"], level: \"readable\" },\n\t{ token: \"customMessageText\", on: [\"customMessageBg\", ...TOOL_PANELS], level: \"readable\" },\n\t{\n\t\ttoken: \"customMessageLabel\",\n\t\ton: [\"background\", \"customMessageBg\", \"selectedBg\", ...TOOL_PANELS],\n\t\tlevel: \"readable\",\n\t},\n\t{ token: \"toolOutput\", on: [\"background\", ...TOOL_PANELS], level: \"readable\" },\n\t...each(\n\t\t[\"mdHeading\", \"mdLink\", \"mdLinkUrl\", \"mdCode\", \"mdQuote\", \"mdCodeBlockBorder\", \"mdListBullet\"],\n\t\t[\"background\", ...MESSAGE_PANELS],\n\t\t\"readable\",\n\t),\n\t{ token: \"mdCodeBlock\", on: [\"background\", ...MESSAGE_PANELS, ...TOOL_PANELS], level: \"readable\" },\n\t...each([\"toolDiffAdded\", \"toolDiffRemoved\", \"toolDiffContext\"], [\"background\", ...TOOL_PANELS], \"readable\"),\n\t...each(\n\t\t[\n\t\t\t\"syntaxComment\",\n\t\t\t\"syntaxKeyword\",\n\t\t\t\"syntaxFunction\",\n\t\t\t\"syntaxVariable\",\n\t\t\t\"syntaxString\",\n\t\t\t\"syntaxNumber\",\n\t\t\t\"syntaxType\",\n\t\t\t\"syntaxOperator\",\n\t\t\t\"syntaxPunctuation\",\n\t\t],\n\t\t[\"background\", ...MESSAGE_PANELS, ...TOOL_PANELS],\n\t\t\"readable\",\n\t),\n\t{ token: \"searchMatchText\", on: [\"searchMatchBg\"], level: \"readable\" },\n\t...each([\"bashMode\", \"border\", \"borderAccent\"], [\"background\"], \"readable\"),\n\t{ token: \"borderMuted\", on: [\"background\"], level: \"subtle\" },\n\t...each([\"mdQuoteBorder\", \"mdHr\"], [\"background\", ...MESSAGE_PANELS, ...TOOL_PANELS], \"readable\"),\n\t{ token: \"scrollbarTrack\", on: [\"background\"], level: \"track\" },\n\t{ token: \"scrollbarThumb\", on: [\"scrollbarTrack\"], level: \"thumb\" },\n\t...THINKING.map((token, index): Rule => ({ token, on: [\"background\"], level: THINKING_LEVELS[index] })),\n];\n\n/** Relaxation compresses levels stronger than this one toward it before weakening all levels. */\nconst READABLE_FLOOR: Record<ThemeAppearance, Level> = { dark: \"readable\", light: \"subtle\" };\n\n/** Body text uses the terminal's foreground when it reaches this level, which is clearly stronger than muted. */\nconst FOREGROUND_LEVEL: Level = \"emphasis\";\n\n/** Text-level tokens that take the terminal's foreground. */\nconst FOREGROUND_TOKENS: ThemeColor[] = [\"text\", \"userMessageText\", \"toolTitle\"];\n\n/** WCAG 2 contrast ratio that body text must reach on the surfaces it is drawn on. */\nconst TEXT_MINIMUM_WCAG_CONTRAST = 4.5;\n\n/** Tokens in dependency order: every surface before the tokens drawn on it. */\nconst SOLVE_ORDER: ThemeToken[] = (() => {\n\tconst order: ThemeToken[] = [];\n\tconst visit = (token: ThemeToken): void => {\n\t\tif (order.includes(token)) return;\n\t\tfor (const rule of RULES) {\n\t\t\tif (rule.token !== token) continue;\n\t\t\tfor (const surface of rule.on) if (surface !== \"background\") visit(surface);\n\t\t}\n\t\torder.push(token);\n\t};\n\tfor (const rule of RULES) visit(rule.token);\n\treturn order;\n})();\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nexport interface SystemThemeInput {\n\tforeground?: RgbColor;\n\tbackground?: RgbColor;\n\t/** ANSI colors 0-15. */\n\tpalette?: RgbColor[];\n\t/** Saturation multiplier from 0 (grayscale) to 1. The first frame renders in grayscale until colors arrive. */\n\tsaturation?: number;\n\t/** Appearance when the terminal did not report its background, e.g. from its light/dark report or COLORFGBG. */\n\tappearanceHint?: ThemeAppearance;\n}\n\nexport interface SystemThemeColors {\n\t/** Hex colors, ANSI palette indices, or \"\" for the terminal default. */\n\tcolors: Record<ThemeToken, string | number>;\n\t/** Foreground tokens rendered faint (SGR 2), for terminals that did not report colors. */\n\tdim: ThemeColor[];\n\tappearance: ThemeAppearance | undefined;\n}\n\n/** OKLab lightness of an sRGB color, 0-1. */\nfunction oklabLightness(color: RgbColor): number {\n\treturn colorToOklch(rgbColor(color.r, color.g, color.b)).l;\n}\n\n/** WCAG 2 relative luminance. */\nexport function relativeLuminance({ r, g, b }: RgbColor): number {\n\tconst linear = (channel: number) => {\n\t\tconst value = channel / 255;\n\t\treturn value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;\n\t};\n\treturn 0.2126 * linear(r) + 0.7152 * linear(g) + 0.0722 * linear(b);\n}\n\n/** WCAG 2 contrast ratio, 1-21. */\nexport function wcagContrast(first: RgbColor, second: RgbColor): number {\n\tconst a = relativeLuminance(first);\n\tconst b = relativeLuminance(second);\n\treturn (Math.max(a, b) + 0.05) / (Math.min(a, b) + 0.05);\n}\n\n/**\n * Whether a terminal is dark or light, from its reported colors: the direction of its own foreground\n * when text can be readable that way, otherwise dark when white text has more contrast on the\n * background than black text.\n */\nexport function terminalAppearance(background: RgbColor, foreground?: RgbColor): ThemeAppearance {\n\tconst white = { r: 255, g: 255, b: 255 };\n\tconst black = { r: 0, g: 0, b: 0 };\n\tconst whiteContrast = wcagContrast(white, background);\n\tconst blackContrast = wcagContrast(black, background);\n\tif (foreground) {\n\t\tconst foregroundL = oklabLightness(foreground);\n\t\tconst backgroundL = oklabLightness(background);\n\t\tif (Math.abs(foregroundL - backgroundL) > 0.05) {\n\t\t\tconst appearance = foregroundL > backgroundL ? \"dark\" : \"light\";\n\t\t\tconst best = appearance === \"dark\" ? whiteContrast : blackContrast;\n\t\t\tif (best >= TEXT_MINIMUM_WCAG_CONTRAST) return appearance;\n\t\t}\n\t}\n\treturn whiteContrast >= blackContrast ? \"dark\" : \"light\";\n}\n\n// ============================================================================\n// Generation\n// ============================================================================\n\nconst clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\n\nfunction hexOf({ r, g, b }: RgbColor): string {\n\treturn `#${[r, g, b].map((channel) => Math.round(channel).toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\n/** Saturation weight at a lightness: a Gaussian (center 0.5, sigma 0.25), 0 at black and white, 1 in the middle. */\nfunction bellWeight(lightness: number): number {\n\tconst gaussian = (x: number): number => Math.exp(-((x - 0.5) ** 2) / (2 * 0.25 ** 2));\n\treturn (gaussian(lightness) - gaussian(0)) / (1 - gaussian(0));\n}\n\n/** A family's saturation curve relative to its maximum: 1 at mid lightness, `min / max` at black and white. */\nfunction saturationCurve({ saturation: { min, max } }: Family, lightness: number): number {\n\tconst floor = max > 0 ? min / max : 1;\n\treturn floor + (1 - floor) * bellWeight(lightness);\n}\n\n/** The target lightness for a level on a surface, or undefined where the level cannot be reached. */\nfunction levelTarget(level: Level, appearance: ThemeAppearance, surfaceL: number): number | undefined {\n\tconst curve: Curve = LEVELS[level][appearance];\n\tif (surfaceL < curve.reachable[0] || surfaceL > curve.reachable[1]) return undefined;\n\treturn curve.coefficients.reduce((sum, coefficient, power) => sum + coefficient * surfaceL ** power, 0);\n}\n\n/**\n * Generate the system theme's colors from the terminal's reported colors.\n */\nexport function generateSystemThemeColors(input: SystemThemeInput): SystemThemeColors {\n\tconst saturation = clamp(input.saturation ?? 1, 0, 1);\n\tconst { background, foreground } = input;\n\tif (!background) return indexedColors(saturation, input.appearanceHint);\n\tconst palette = input.palette?.length === 16 ? input.palette.map(okhslOf) : undefined;\n\n\tconst appearance = terminalAppearance(background, foreground);\n\tconst lighter = appearance === \"dark\";\n\tconst extreme = lighter ? 1 : 0;\n\tconst backgroundL = oklabLightness(background);\n\n\t/**\n\t * A token's color at an OKLab lightness. With a palette, the palette color's saturation applies at its\n\t * own lightness and falls off toward black and white along the family's curve, never rising above it.\n\t */\n\tconst paint = (token: ThemeToken, oklabL: number): RgbColor => {\n\t\tconst lightness = oklabToOkhslLightness(oklabL);\n\t\tconst family: Family = FAMILIES[TOKEN_FAMILIES[token]];\n\t\tif (!palette) {\n\t\t\tconst { min, max } = family.saturation;\n\t\t\treturn okhslColor(family.hue, (min + (max - min) * bellWeight(lightness)) * saturation, lightness);\n\t\t}\n\t\treturn anchored(palette[TOKEN_SLOTS[token] ?? family.slot], family, lightness, saturation);\n\t};\n\n\t/**\n\t * The lightness a rule needs on a surface, relaxed by `t`: from 0 to 1, levels stronger than the readable\n\t * floor move toward it; from 1 to 2, all levels move toward the surface itself.\n\t */\n\tconst target = (level: Level, surfaceL: number, t: number): number | undefined => {\n\t\tconst reached = levelTarget(level, appearance, surfaceL);\n\t\tif (reached === undefined && t === 0) return undefined;\n\t\tconst distance = (reached ?? extreme) - surfaceL;\n\t\tconst floor = (levelTarget(READABLE_FLOOR[appearance], appearance, surfaceL) ?? extreme) - surfaceL;\n\t\tconst compressed =\n\t\t\tMath.abs(distance) > Math.abs(floor) ? distance - (distance - floor) * Math.min(t, 1) : distance;\n\t\treturn surfaceL + compressed * (1 - Math.max(0, t - 1));\n\t};\n\n\t/**\n\t * Keep a panel light enough (or dark enough) that white (or black) text still reaches the body text\n\t * minimum on it. This only matters for backgrounds near mid-gray, where it barely does on the background.\n\t */\n\tconst extremeText = lighter ? { r: 255, g: 255, b: 255 } : { r: 0, g: 0, b: 0 };\n\tconst readable = (color: RgbColor) => wcagContrast(extremeText, color) >= TEXT_MINIMUM_WCAG_CONTRAST;\n\tconst limitPanel = (token: ThemeToken, l: number): RgbColor => {\n\t\tconst color = paint(token, l);\n\t\tif (readable(color)) return color;\n\t\tlet [low, high] = [backgroundL, l];\n\t\tfor (let index = 0; index < 20; index++) {\n\t\t\tconst middle = (low + high) / 2;\n\t\t\tif (readable(paint(token, middle))) low = middle;\n\t\t\telse high = middle;\n\t\t}\n\t\treturn paint(token, low);\n\t};\n\n\tconst solve = (t: number): Map<Surface | ThemeToken, RgbColor> | undefined => {\n\t\tconst colors = new Map<Surface | ThemeToken, RgbColor>([[\"background\", background]]);\n\t\tfor (const token of SOLVE_ORDER) {\n\t\t\tconst targets: number[] = [];\n\t\t\tfor (const rule of RULES) {\n\t\t\t\tif (rule.token !== token) continue;\n\t\t\t\tfor (const surface of rule.on) {\n\t\t\t\t\tconst value = target(rule.level, oklabLightness(colors.get(surface) ?? background), t);\n\t\t\t\t\tif (value === undefined || value < 0 || value > 1) return undefined;\n\t\t\t\t\ttargets.push(value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst l = lighter ? Math.max(...targets) : Math.min(...targets);\n\t\t\tcolors.set(token, PANELS.includes(token as ThemeBg) ? limitPanel(token, l) : paint(token, l));\n\t\t}\n\t\treturn colors;\n\t};\n\n\tlet relaxation = 0;\n\tlet colors = solve(0);\n\tif (!colors) {\n\t\t// Mid-gray backgrounds cannot fit every level: relax as little as possible. Full relaxation always fits.\n\t\tlet [low, high] = [0, 2];\n\t\tcolors = solve(high);\n\t\tfor (let index = 0; index < 20; index++) {\n\t\t\tconst middle = (low + high) / 2;\n\t\t\tconst attempt = solve(middle);\n\t\t\tif (attempt) [high, colors] = [middle, attempt];\n\t\t\telse low = middle;\n\t\t}\n\t\trelaxation = high;\n\t}\n\tconst solved = colors ?? new Map<Surface | ThemeToken, RgbColor>();\n\tconst surfacesOf = (token: ThemeToken) =>\n\t\tRULES.filter((rule) => rule.token === token).flatMap((rule) =>\n\t\t\trule.on.map((surface) => solved.get(surface) ?? background),\n\t\t);\n\n\tconst result = {} as Record<ThemeToken, string | number>;\n\tfor (const token of Object.keys(TOKEN_FAMILIES) as ThemeToken[]) {\n\t\tconst color = solved.get(token);\n\t\tresult[token] = color ? hexOf(color) : \"\";\n\t}\n\n\tfor (const token of FOREGROUND_TOKENS) {\n\t\tconst surfaces = surfacesOf(token);\n\t\t// Body text uses the terminal's own foreground where it is clearly stronger than muted text; otherwise\n\t\t// the foreground's hue at just enough lightness.\n\t\tlet text = solved.get(token);\n\t\tif (foreground) {\n\t\t\tconst targets = surfaces.map((surface) => target(FOREGROUND_LEVEL, oklabLightness(surface), relaxation));\n\t\t\tif (targets.every((value) => value !== undefined && value >= 0 && value <= 1)) {\n\t\t\t\tconst needed = lighter ? Math.max(...(targets as number[])) : Math.min(...(targets as number[]));\n\t\t\t\tconst foregroundL = oklabLightness(foreground);\n\t\t\t\tif (lighter ? foregroundL >= needed : foregroundL <= needed) {\n\t\t\t\t\tresult[token] = \"\";\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttext = anchored(okhslOf(foreground), FAMILIES.neutral, oklabToOkhslLightness(needed), saturation);\n\t\t\t}\n\t\t}\n\t\t// Body text keeps at least 4.5:1 on the surfaces it is drawn on, even on relaxed mid-gray backgrounds.\n\t\tif (text) result[token] = hexOf(withTextContrast(text, surfaces, lighter));\n\t}\n\treturn { colors: result, dim: [], appearance };\n}\n\nfunction okhslOf({ r, g, b }: RgbColor): OkhslChannels {\n\treturn colorToOkhsl(rgbColor(r, g, b));\n}\n\n/**\n * A source color's hue at another OKHSL lightness. Its saturation applies at its own lightness and falls off\n * toward black and white along the family's saturation curve, never rising above it.\n */\nfunction anchored(source: OkhslChannels, family: Family, lightness: number, saturation: number): RgbColor {\n\tconst anchor = saturationCurve(family, source.l);\n\tconst falloff = anchor > 0 ? Math.min(1, saturationCurve(family, lightness) / anchor) : 1;\n\treturn okhslColor(source.h, source.s * falloff * saturation, lightness);\n}\n\n/** Move a text color toward white or black until it reaches the WCAG minimum on every surface. */\nfunction withTextContrast(color: RgbColor, surfaces: RgbColor[], lighter: boolean): RgbColor {\n\tconst meets = (candidate: RgbColor) =>\n\t\tsurfaces.every((surface) => wcagContrast(candidate, surface) >= TEXT_MINIMUM_WCAG_CONTRAST);\n\tif (meets(color)) return color;\n\tconst { h, s, l } = okhslOf(color);\n\tconst at = (lightness: number) => okhslColor(h, s, lightness);\n\tconst extreme = lighter ? 1 : 0;\n\tif (!meets(at(extreme))) return at(extreme);\n\tlet [low, high] = [l, extreme];\n\tfor (let index = 0; index < 20; index++) {\n\t\tconst middle = (low + high) / 2;\n\t\tif (meets(at(middle))) high = middle;\n\t\telse low = middle;\n\t}\n\treturn at(high);\n}\n\n/**\n * Colors for terminals that reported nothing: the terminal renders ANSI indices 0-15 and the default\n * colors with its own theme, so they fit any background. Neutral tokens below body text are faint (SGR 2)\n * instead of bright black, which some themes make nearly invisible. Panels have no background.\n */\nfunction indexedColors(saturation: number, appearance: ThemeAppearance | undefined): SystemThemeColors {\n\tconst colors = {} as Record<ThemeToken, string | number>;\n\tconst dim: ThemeColor[] = [];\n\tfor (const [token, familyName] of Object.entries(TOKEN_FAMILIES) as [ThemeToken, FamilyName][]) {\n\t\tif (PANELS.includes(token as ThemeBg)) {\n\t\t\tcolors[token] = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tconst neutral = familyName === \"neutral\";\n\t\tcolors[token] = !neutral && saturation > 0 ? (TOKEN_SLOTS[token] ?? FAMILIES[familyName].slot) : \"\";\n\t\tif (neutral && !FOREGROUND_TOKENS.includes(token as ThemeColor)) dim.push(token as ThemeColor);\n\t}\n\treturn { colors, dim, appearance };\n}\n"]}
1
+ {"version":3,"file":"system-theme.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/system-theme.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The `system` theme: pi's colors derived from the terminal's own theme.\n *\n * Every token belongs to a color family (its hue) and has contrast rules: it must reach a contrast level\n * on the background and on the panels it is drawn on. Hue and saturation come from the terminal's palette\n * color for the family's ANSI slot, or from the family's own hue when the terminal reports no palette.\n * Lightness comes from the rules alone. Colors are built in OKHSL, whose saturation is relative to the\n * sRGB gamut, and fade toward gray near black and white. A palette color never gains OKLCH chroma when it\n * moves to another lightness, so pastel palettes stay pastel.\n *\n * A contrast level is a target-lightness curve: the OKLab lightness a token needs, given the lightness of\n * the surface below it. The curves were fitted to the reference theme design from the \"Pi themes: system\n * and light/dark\" review. On dark backgrounds they aim for nearly fixed lightness; on light backgrounds the\n * required difference grows as the background darkens.\n *\n * Depending on what the terminal reports, the theme is generated in one of three tiers:\n * - background and palette: hues from the palette, lightness from the background;\n * - background only: the families' own hues, lightness from the background;\n * - nothing: ANSI palette indices and the default colors, which the terminal renders itself.\n */\n\nimport {\n\tcolorToOkhsl,\n\tcolorToOklch,\n\tcolorToRgb,\n\ttype OkhslChannels,\n\tokhslColor,\n\toklabToOkhslLightness,\n\toklchColor,\n\ttype RgbColor,\n\trgbColor,\n} from \"@earendil-works/pi-tui\";\nimport type { ThemeAppearance, ThemeBg, ThemeColor, ThemeToken } from \"./theme.ts\";\n\nexport const SYSTEM_THEME_NAME = \"system\";\n\n// ============================================================================\n// Recipe: color families and their tokens\n// ============================================================================\n\n/** A family's OKHSL hue and saturation: `max` at mid lightness, falling toward `min` at black and white. */\ninterface Family {\n\thue: number;\n\tsaturation: { min: number; max: number };\n\t/** ANSI palette slot the family takes its hue and saturation from. */\n\tslot: number;\n}\n\nconst FAMILIES = {\n\tneutral: { hue: 231.49, saturation: { min: 0.02, max: 0.08 }, slot: 8 },\n\tblue: { hue: 231.49, saturation: { min: 0.1, max: 0.68 }, slot: 4 },\n\tgreen: { hue: 158.68, saturation: { min: 0.1, max: 0.76 }, slot: 2 },\n\tred: { hue: 20, saturation: { min: 0.1, max: 0.92 }, slot: 1 },\n\tyellow: { hue: 82.36, saturation: { min: 0.5, max: 1 }, slot: 3 },\n\torange: { hue: 52, saturation: { min: 0.12, max: 0.85 }, slot: 3 },\n\tviolet: { hue: 295, saturation: { min: 0.2, max: 0.6 }, slot: 5 },\n\tcalamine: { hue: 202.43, saturation: { min: 0.1, max: 0.74 }, slot: 6 },\n\tthinkingSlate: { hue: 231.49, saturation: { min: 0.08, max: 0.2 }, slot: 4 },\n\tthinkingBlue: { hue: 231.49, saturation: { min: 0.2, max: 0.45 }, slot: 4 },\n\tthinkingPeriwinkle: { hue: 263.25, saturation: { min: 0.3, max: 0.6 }, slot: 6 },\n\tthinkingViolet: { hue: 295, saturation: { min: 0.4, max: 0.75 }, slot: 5 },\n\tthinkingMagenta: { hue: 337.5, saturation: { min: 0.5, max: 0.85 }, slot: 13 },\n\tthinkingRed: { hue: 20, saturation: { min: 0.95, max: 1 }, slot: 1 },\n} satisfies Record<string, Family>;\n\ntype FamilyName = keyof typeof FAMILIES;\n\nconst TOKEN_FAMILIES: Record<ThemeToken, FamilyName> = {\n\tselectedBg: \"blue\",\n\tsearchMatchBg: \"orange\",\n\tuserMessageBg: \"blue\",\n\tcustomMessageBg: \"violet\",\n\ttoolPendingBg: \"neutral\",\n\ttoolSuccessBg: \"green\",\n\ttoolErrorBg: \"red\",\n\n\ttext: \"neutral\",\n\tuserMessageText: \"neutral\",\n\tcustomMessageText: \"neutral\",\n\ttoolTitle: \"neutral\",\n\tsyntaxOperator: \"neutral\",\n\tsyntaxPunctuation: \"neutral\",\n\tmuted: \"neutral\",\n\tdim: \"neutral\",\n\tthinkingText: \"neutral\",\n\ttoolOutput: \"neutral\",\n\tmdLinkUrl: \"neutral\",\n\tmdQuote: \"neutral\",\n\tmdQuoteBorder: \"neutral\",\n\tmdHr: \"neutral\",\n\tmdCodeBlockBorder: \"neutral\",\n\ttoolDiffContext: \"neutral\",\n\tsyntaxComment: \"neutral\",\n\tscrollbarTrack: \"neutral\",\n\tscrollbarThumb: \"neutral\",\n\tsearchMatchText: \"neutral\",\n\tborderMuted: \"neutral\",\n\n\taccent: \"violet\",\n\tborderAccent: \"violet\",\n\tcustomMessageLabel: \"violet\",\n\tmdCode: \"violet\",\n\tmdListBullet: \"violet\",\n\tsyntaxType: \"violet\",\n\tborder: \"blue\",\n\tmdLink: \"blue\",\n\tsyntaxKeyword: \"blue\",\n\tsyntaxVariable: \"calamine\",\n\tsuccess: \"green\",\n\tmdCodeBlock: \"green\",\n\ttoolDiffAdded: \"green\",\n\tbashMode: \"green\",\n\tsyntaxNumber: \"green\",\n\terror: \"red\",\n\ttoolDiffRemoved: \"red\",\n\twarning: \"yellow\",\n\tmdHeading: \"yellow\",\n\tsyntaxFunction: \"yellow\",\n\tsyntaxString: \"orange\",\n\n\tthinkingOff: \"neutral\",\n\tthinkingMinimal: \"thinkingSlate\",\n\tthinkingLow: \"thinkingBlue\",\n\tthinkingMedium: \"thinkingPeriwinkle\",\n\tthinkingHigh: \"thinkingViolet\",\n\tthinkingXhigh: \"thinkingMagenta\",\n\tthinkingMax: \"thinkingRed\",\n};\n\n/** Palette slots for tokens that would otherwise share a hue with a similar token. */\nconst TOKEN_SLOTS: Partial<Record<ThemeToken, number>> = { syntaxString: 2, syntaxNumber: 5, searchMatchBg: 3 };\n\n// ============================================================================\n// Contrast levels and rules\n// ============================================================================\n\n/**\n * Target-lightness curves: a polynomial in the surface's OKLab lightness giving the OKLab lightness a token\n * needs on it. `reachable` is the range of surface lightness where the level can be reached; beyond it the\n * level is relaxed.\n */\ninterface Curve {\n\tcoefficients: number[];\n\treachable: [number, number];\n}\n\nconst LEVELS = {\n\tpanel: {\n\t\tdark: { coefficients: [0.29131, -0.39746, 2.33185, -0.85524, -1.2076, 0.86276], reachable: [0, 0.979] },\n\t\tlight: { coefficients: [-3.74073, 27.94549, -78.44258, 112.6798, -79.60015, 22.11277], reachable: [0.348, 1] },\n\t},\n\ttrack: {\n\t\tdark: { coefficients: [0.39028, -0.23015, 0.83573, 2.43829, -4.38292, 2.01582], reachable: [0, 0.946] },\n\t\tlight: { coefficients: [-5.24921, 38.37322, -107.28833, 152.10005, -106.17127, 29.18061], reachable: [0.368, 1] },\n\t},\n\tthinking0: {\n\t\tdark: { coefficients: [0.52988, -0.05809, -0.30924, 4.63567, -6.52933, 2.89108], reachable: [0, 0.873] },\n\t\tlight: {\n\t\t\tcoefficients: [-28.27749, 182.85284, -469.62416, 603.15916, -384.59976, 97.35147],\n\t\t\treachable: [0.51, 1],\n\t\t},\n\t},\n\tthinking1: {\n\t\tdark: { coefficients: [0.55278, -0.03667, -0.45659, 4.95347, -6.90265, 3.0706], reachable: [0, 0.858] },\n\t\tlight: {\n\t\t\tcoefficients: [-37.10484, 235.86282, -596.62344, 754.3633, -474.00763, 118.3551],\n\t\t\treachable: [0.535, 1],\n\t\t},\n\t},\n\tthinking2: {\n\t\tdark: { coefficients: [0.57486, -0.01765, -0.58987, 5.25227, -7.27175, 3.25532], reachable: [0, 0.842] },\n\t\tlight: {\n\t\t\tcoefficients: [-59.89653, 377.05024, -945.07843, 1182.03145, -734.96375, 181.68658],\n\t\t\treachable: [0.556, 1],\n\t\t},\n\t},\n\tthinking3: {\n\t\tdark: { coefficients: [0.59621, -0.00062, -0.71148, 5.53588, -7.6392, 3.44606], reachable: [0, 0.827] },\n\t\tlight: {\n\t\t\tcoefficients: [-72.07122, 445.84082, -1099.57352, 1353.88793, -829.53392, 202.26164],\n\t\t\treachable: [0.58, 1],\n\t\t},\n\t},\n\tthinking4: {\n\t\tdark: { coefficients: [0.61691, 0.01462, -0.82288, 5.80651, -8.00641, 3.64333], reachable: [0, 0.811] },\n\t\tlight: {\n\t\t\tcoefficients: [-110.14338, 674.21488, -1645.75941, 2004.32367, -1215.15899, 293.3183],\n\t\t\treachable: [0.6, 1],\n\t\t},\n\t},\n\tthinking5: {\n\t\tdark: { coefficients: [0.63702, 0.02826, -0.92498, 6.06465, -8.37246, 3.84651], reachable: [0, 0.795] },\n\t\tlight: {\n\t\t\tcoefficients: [-175.47701, 1063.54495, -2570.70594, 3098.80776, -1860.15527, 444.76392],\n\t\t\treachable: [0.62, 1],\n\t\t},\n\t},\n\tthinking6: {\n\t\tdark: { coefficients: [0.65658, 0.04044, -1.01835, 6.30989, -8.73529, 4.05439], reachable: [0, 0.779] },\n\t\tlight: {\n\t\t\tcoefficients: [-183.81712, 1094.70055, -2602.68539, 3088.71276, -1826.91131, 430.75931],\n\t\t\treachable: [0.643, 1],\n\t\t},\n\t},\n\tsubtle: {\n\t\tdark: { coefficients: [0.56762, -0.02475, -0.5383, 5.12628, -7.10931, 3.17324], reachable: [0, 0.848] },\n\t\tlight: {\n\t\t\tcoefficients: [-232.85459, 1376.54473, -3249.11801, 3827.91186, -2248.29472, 526.55751],\n\t\t\treachable: [0.657, 1],\n\t\t},\n\t},\n\tthumb: {\n\t\tdark: { coefficients: [0.60323, 0.00278, -0.73328, 5.57157, -7.68067, 3.46933], reachable: [0, 0.823] },\n\t\tlight: {\n\t\t\tcoefficients: [-82.89897, 511.01355, -1255.98095, 1540.76821, -940.68087, 228.58523],\n\t\t\treachable: [0.586, 1],\n\t\t},\n\t},\n\treadable: {\n\t\tdark: { coefficients: [0.66937, 0.04704, -1.06871, 6.43941, -8.9332, 4.17229], reachable: [0, 0.77] },\n\t\tlight: {\n\t\t\tcoefficients: [-1554.52576, 8733.56817, -19604.93507, 21977.72696, -12300.99599, 2749.81288],\n\t\t\treachable: [0.751, 1],\n\t\t},\n\t},\n\temphasis: {\n\t\tdark: { coefficients: [0.7303, 0.07695, -1.31626, 7.1681, -10.14436, 4.92846], reachable: [0, 0.712] },\n\t\tlight: {\n\t\t\tcoefficients: [-4948.31942, 26870.91986, -58334.48399, 63280.17197, -34298.01053, 7430.30146],\n\t\t\treachable: [0.811, 1],\n\t\t},\n\t},\n\ttextOnPanel: {\n\t\tdark: { coefficients: [0.86713, 0.05232, -0.89428, 4.79014, -5.5432, 1.75023], reachable: [0, 0.542] },\n\t\tlight: {\n\t\t\tcoefficients: [-8570.89457, 43954.60805, -90084.00702, 92220.6791, -47152.15802, 9632.27113],\n\t\t\treachable: [0.867, 1],\n\t\t},\n\t},\n\ttext: {\n\t\tdark: { coefficients: [0.89242, 0.02311, -0.44862, 2.34417, -0.06084, -2.63844], reachable: [0, 0.5] },\n\t\tlight: {\n\t\t\tcoefficients: [-2004.67048, 6664.47299, -6060.70202, -1792.61209, 5133.82359, -1939.85583],\n\t\t\treachable: [0.894, 1],\n\t\t},\n\t},\n} satisfies Record<string, Record<ThemeAppearance, Curve>>;\n\ntype Level = keyof typeof LEVELS;\n\ntype Surface = ThemeBg | \"background\" | \"scrollbarTrack\";\n\ninterface Rule {\n\ttoken: ThemeToken;\n\ton: Surface[];\n\tlevel: Level;\n}\n\nconst TOOL_PANELS: Surface[] = [\"toolPendingBg\", \"toolSuccessBg\", \"toolErrorBg\"];\nconst MESSAGE_PANELS: Surface[] = [\"userMessageBg\", \"customMessageBg\"];\nconst PANELS: ThemeBg[] = [\n\t\"userMessageBg\",\n\t\"toolPendingBg\",\n\t\"toolSuccessBg\",\n\t\"toolErrorBg\",\n\t\"selectedBg\",\n\t\"searchMatchBg\",\n\t\"customMessageBg\",\n];\nconst THINKING: ThemeColor[] = [\n\t\"thinkingOff\",\n\t\"thinkingMinimal\",\n\t\"thinkingLow\",\n\t\"thinkingMedium\",\n\t\"thinkingHigh\",\n\t\"thinkingXhigh\",\n\t\"thinkingMax\",\n];\nconst THINKING_LEVELS: Level[] = [\n\t\"thinking0\",\n\t\"thinking1\",\n\t\"thinking2\",\n\t\"thinking3\",\n\t\"thinking4\",\n\t\"thinking5\",\n\t\"thinking6\",\n];\n\nconst each = (tokens: ThemeToken[], on: Surface[], level: Level): Rule[] =>\n\ttokens.map((token) => ({ token, on, level }));\n\nconst RULES: Rule[] = [\n\t...each(PANELS, [\"background\"], \"panel\"),\n\t{ token: \"text\", on: [\"background\"], level: \"text\" },\n\t{ token: \"text\", on: [\"selectedBg\"], level: \"textOnPanel\" },\n\t{ token: \"userMessageText\", on: [\"userMessageBg\"], level: \"textOnPanel\" },\n\t{ token: \"toolTitle\", on: TOOL_PANELS, level: \"textOnPanel\" },\n\t...each([\"accent\", \"success\", \"error\", \"warning\"], [\"background\", \"selectedBg\", ...TOOL_PANELS], \"readable\"),\n\t{ token: \"muted\", on: [\"background\", \"selectedBg\", \"customMessageBg\", ...TOOL_PANELS], level: \"readable\" },\n\t{ token: \"dim\", on: [\"background\", \"selectedBg\", \"customMessageBg\", ...TOOL_PANELS], level: \"subtle\" },\n\t{ token: \"thinkingText\", on: [\"background\"], level: \"readable\" },\n\t{ token: \"customMessageText\", on: [\"customMessageBg\", ...TOOL_PANELS], level: \"readable\" },\n\t{\n\t\ttoken: \"customMessageLabel\",\n\t\ton: [\"background\", \"customMessageBg\", \"selectedBg\", ...TOOL_PANELS],\n\t\tlevel: \"readable\",\n\t},\n\t{ token: \"toolOutput\", on: [\"background\", ...TOOL_PANELS], level: \"readable\" },\n\t...each(\n\t\t[\"mdHeading\", \"mdLink\", \"mdLinkUrl\", \"mdCode\", \"mdQuote\", \"mdCodeBlockBorder\", \"mdListBullet\"],\n\t\t[\"background\", ...MESSAGE_PANELS],\n\t\t\"readable\",\n\t),\n\t{ token: \"mdCodeBlock\", on: [\"background\", ...MESSAGE_PANELS, ...TOOL_PANELS], level: \"readable\" },\n\t...each([\"toolDiffAdded\", \"toolDiffRemoved\", \"toolDiffContext\"], [\"background\", ...TOOL_PANELS], \"readable\"),\n\t...each(\n\t\t[\n\t\t\t\"syntaxComment\",\n\t\t\t\"syntaxKeyword\",\n\t\t\t\"syntaxFunction\",\n\t\t\t\"syntaxVariable\",\n\t\t\t\"syntaxString\",\n\t\t\t\"syntaxNumber\",\n\t\t\t\"syntaxType\",\n\t\t\t\"syntaxOperator\",\n\t\t\t\"syntaxPunctuation\",\n\t\t],\n\t\t[\"background\", ...MESSAGE_PANELS, ...TOOL_PANELS],\n\t\t\"readable\",\n\t),\n\t{ token: \"searchMatchText\", on: [\"searchMatchBg\"], level: \"readable\" },\n\t...each([\"bashMode\", \"border\", \"borderAccent\"], [\"background\"], \"readable\"),\n\t{ token: \"borderMuted\", on: [\"background\"], level: \"subtle\" },\n\t...each([\"mdQuoteBorder\", \"mdHr\"], [\"background\", ...MESSAGE_PANELS, ...TOOL_PANELS], \"readable\"),\n\t{ token: \"scrollbarTrack\", on: [\"background\"], level: \"track\" },\n\t{ token: \"scrollbarThumb\", on: [\"scrollbarTrack\"], level: \"thumb\" },\n\t...THINKING.map((token, index): Rule => ({ token, on: [\"background\"], level: THINKING_LEVELS[index] })),\n];\n\n/** Relaxation compresses levels stronger than this one toward it before weakening all levels. */\nconst READABLE_FLOOR: Record<ThemeAppearance, Level> = { dark: \"readable\", light: \"subtle\" };\n\n/** Body text uses the terminal's foreground when it reaches this level, which is clearly stronger than muted. */\nconst FOREGROUND_LEVEL: Level = \"emphasis\";\n\n/** Text-level tokens that take the terminal's foreground. */\nconst FOREGROUND_TOKENS: ThemeColor[] = [\"text\", \"userMessageText\", \"toolTitle\"];\n\n/** WCAG 2 contrast ratio that body text must reach on the surfaces it is drawn on. */\nconst TEXT_MINIMUM_WCAG_CONTRAST = 4.5;\n\n/** Tokens in dependency order: every surface before the tokens drawn on it. */\nconst SOLVE_ORDER: ThemeToken[] = (() => {\n\tconst order: ThemeToken[] = [];\n\tconst visit = (token: ThemeToken): void => {\n\t\tif (order.includes(token)) return;\n\t\tfor (const rule of RULES) {\n\t\t\tif (rule.token !== token) continue;\n\t\t\tfor (const surface of rule.on) if (surface !== \"background\") visit(surface);\n\t\t}\n\t\torder.push(token);\n\t};\n\tfor (const rule of RULES) visit(rule.token);\n\treturn order;\n})();\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nexport interface SystemThemeInput {\n\tforeground?: RgbColor;\n\tbackground?: RgbColor;\n\t/** ANSI colors 0-15. */\n\tpalette?: RgbColor[];\n\t/** Saturation multiplier from 0 (grayscale) to 1. The first frame renders in grayscale until colors arrive. */\n\tsaturation?: number;\n\t/** Appearance when the terminal did not report its background, e.g. from its light/dark report or COLORFGBG. */\n\tappearanceHint?: ThemeAppearance;\n}\n\nexport interface SystemThemeColors {\n\t/** Hex colors, ANSI palette indices, or \"\" for the terminal default. */\n\tcolors: Record<ThemeToken, string | number>;\n\t/** Foreground tokens rendered faint (SGR 2), for terminals that did not report colors. */\n\tdim: ThemeColor[];\n\tappearance: ThemeAppearance | undefined;\n}\n\n/** OKLab lightness of an sRGB color, 0-1. */\nfunction oklabLightness(color: RgbColor): number {\n\treturn colorToOklch(rgbColor(color.r, color.g, color.b)).l;\n}\n\n/** WCAG 2 relative luminance. */\nexport function relativeLuminance({ r, g, b }: RgbColor): number {\n\tconst linear = (channel: number) => {\n\t\tconst value = channel / 255;\n\t\treturn value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;\n\t};\n\treturn 0.2126 * linear(r) + 0.7152 * linear(g) + 0.0722 * linear(b);\n}\n\n/** WCAG 2 contrast ratio, 1-21. */\nexport function wcagContrast(first: RgbColor, second: RgbColor): number {\n\tconst a = relativeLuminance(first);\n\tconst b = relativeLuminance(second);\n\treturn (Math.max(a, b) + 0.05) / (Math.min(a, b) + 0.05);\n}\n\n/**\n * Whether a terminal is dark or light, from its reported colors: the direction of its own foreground\n * when text can be readable that way, otherwise dark when white text has more contrast on the\n * background than black text.\n */\nexport function terminalAppearance(background: RgbColor, foreground?: RgbColor): ThemeAppearance {\n\tconst white = { r: 255, g: 255, b: 255 };\n\tconst black = { r: 0, g: 0, b: 0 };\n\tconst whiteContrast = wcagContrast(white, background);\n\tconst blackContrast = wcagContrast(black, background);\n\tif (foreground) {\n\t\tconst foregroundL = oklabLightness(foreground);\n\t\tconst backgroundL = oklabLightness(background);\n\t\tif (Math.abs(foregroundL - backgroundL) > 0.05) {\n\t\t\tconst appearance = foregroundL > backgroundL ? \"dark\" : \"light\";\n\t\t\tconst best = appearance === \"dark\" ? whiteContrast : blackContrast;\n\t\t\tif (best >= TEXT_MINIMUM_WCAG_CONTRAST) return appearance;\n\t\t}\n\t}\n\treturn whiteContrast >= blackContrast ? \"dark\" : \"light\";\n}\n\n// ============================================================================\n// Generation\n// ============================================================================\n\nconst clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\n\nfunction hexOf({ r, g, b }: RgbColor): string {\n\treturn `#${[r, g, b].map((channel) => Math.round(channel).toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\n/** Saturation weight at a lightness: a Gaussian (center 0.5, sigma 0.25), 0 at black and white, 1 in the middle. */\nfunction bellWeight(lightness: number): number {\n\tconst gaussian = (x: number): number => Math.exp(-((x - 0.5) ** 2) / (2 * 0.25 ** 2));\n\treturn (gaussian(lightness) - gaussian(0)) / (1 - gaussian(0));\n}\n\n/** A family's saturation curve relative to its maximum: 1 at mid lightness, `min / max` at black and white. */\nfunction saturationCurve({ saturation: { min, max } }: Family, lightness: number): number {\n\tconst floor = max > 0 ? min / max : 1;\n\treturn floor + (1 - floor) * bellWeight(lightness);\n}\n\n/** The target lightness for a level on a surface, or undefined where the level cannot be reached. */\nfunction levelTarget(level: Level, appearance: ThemeAppearance, surfaceL: number): number | undefined {\n\tconst curve: Curve = LEVELS[level][appearance];\n\tif (surfaceL < curve.reachable[0] || surfaceL > curve.reachable[1]) return undefined;\n\treturn curve.coefficients.reduce((sum, coefficient, power) => sum + coefficient * surfaceL ** power, 0);\n}\n\n/**\n * Generate the system theme's colors from the terminal's reported colors.\n */\nexport function generateSystemThemeColors(input: SystemThemeInput): SystemThemeColors {\n\tconst saturation = clamp(input.saturation ?? 1, 0, 1);\n\tconst { background, foreground } = input;\n\tif (!background) return indexedColors(saturation, input.appearanceHint);\n\tconst palette = input.palette?.length === 16 ? input.palette.map(sourceOf) : undefined;\n\n\tconst appearance = terminalAppearance(background, foreground);\n\tconst lighter = appearance === \"dark\";\n\tconst extreme = lighter ? 1 : 0;\n\tconst backgroundL = oklabLightness(background);\n\n\t/**\n\t * A token's color at an OKLab lightness. With a palette, the palette color's saturation applies at its\n\t * own lightness and falls off toward black and white along the family's curve, never rising above it.\n\t */\n\tconst paint = (token: ThemeToken, oklabL: number): RgbColor => {\n\t\tconst lightness = oklabToOkhslLightness(oklabL);\n\t\tconst family: Family = FAMILIES[TOKEN_FAMILIES[token]];\n\t\tif (!palette) {\n\t\t\tconst { min, max } = family.saturation;\n\t\t\treturn okhslColor(family.hue, (min + (max - min) * bellWeight(lightness)) * saturation, lightness);\n\t\t}\n\t\treturn anchored(palette[TOKEN_SLOTS[token] ?? family.slot], family, lightness, saturation);\n\t};\n\n\t/**\n\t * The lightness a rule needs on a surface, relaxed by `t`: from 0 to 1, levels stronger than the readable\n\t * floor move toward it; from 1 to 2, all levels move toward the surface itself.\n\t */\n\tconst target = (level: Level, surfaceL: number, t: number): number | undefined => {\n\t\tconst reached = levelTarget(level, appearance, surfaceL);\n\t\tif (reached === undefined && t === 0) return undefined;\n\t\tconst distance = (reached ?? extreme) - surfaceL;\n\t\tconst floor = (levelTarget(READABLE_FLOOR[appearance], appearance, surfaceL) ?? extreme) - surfaceL;\n\t\tconst compressed =\n\t\t\tMath.abs(distance) > Math.abs(floor) ? distance - (distance - floor) * Math.min(t, 1) : distance;\n\t\treturn surfaceL + compressed * (1 - Math.max(0, t - 1));\n\t};\n\n\t/**\n\t * Keep a panel light enough (or dark enough) that white (or black) text still reaches the body text\n\t * minimum on it. This only matters for backgrounds near mid-gray, where it barely does on the background.\n\t */\n\tconst extremeText = lighter ? { r: 255, g: 255, b: 255 } : { r: 0, g: 0, b: 0 };\n\tconst readable = (color: RgbColor) => wcagContrast(extremeText, color) >= TEXT_MINIMUM_WCAG_CONTRAST;\n\tconst limitPanel = (token: ThemeToken, l: number): RgbColor => {\n\t\tconst color = paint(token, l);\n\t\tif (readable(color)) return color;\n\t\tlet [low, high] = [backgroundL, l];\n\t\tfor (let index = 0; index < 20; index++) {\n\t\t\tconst middle = (low + high) / 2;\n\t\t\tif (readable(paint(token, middle))) low = middle;\n\t\t\telse high = middle;\n\t\t}\n\t\treturn paint(token, low);\n\t};\n\n\tconst solve = (t: number): Map<Surface | ThemeToken, RgbColor> | undefined => {\n\t\tconst colors = new Map<Surface | ThemeToken, RgbColor>([[\"background\", background]]);\n\t\tfor (const token of SOLVE_ORDER) {\n\t\t\tconst targets: number[] = [];\n\t\t\tfor (const rule of RULES) {\n\t\t\t\tif (rule.token !== token) continue;\n\t\t\t\tfor (const surface of rule.on) {\n\t\t\t\t\tconst value = target(rule.level, oklabLightness(colors.get(surface) ?? background), t);\n\t\t\t\t\tif (value === undefined || value < 0 || value > 1) return undefined;\n\t\t\t\t\ttargets.push(value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst l = lighter ? Math.max(...targets) : Math.min(...targets);\n\t\t\tcolors.set(token, PANELS.includes(token as ThemeBg) ? limitPanel(token, l) : paint(token, l));\n\t\t}\n\t\treturn colors;\n\t};\n\n\tlet relaxation = 0;\n\tlet colors = solve(0);\n\tif (!colors) {\n\t\t// Mid-gray backgrounds cannot fit every level: relax as little as possible. Full relaxation always fits.\n\t\tlet [low, high] = [0, 2];\n\t\tcolors = solve(high);\n\t\tfor (let index = 0; index < 20; index++) {\n\t\t\tconst middle = (low + high) / 2;\n\t\t\tconst attempt = solve(middle);\n\t\t\tif (attempt) [high, colors] = [middle, attempt];\n\t\t\telse low = middle;\n\t\t}\n\t\trelaxation = high;\n\t}\n\tconst solved = colors ?? new Map<Surface | ThemeToken, RgbColor>();\n\tconst surfacesOf = (token: ThemeToken) =>\n\t\tRULES.filter((rule) => rule.token === token).flatMap((rule) =>\n\t\t\trule.on.map((surface) => solved.get(surface) ?? background),\n\t\t);\n\n\tconst result = {} as Record<ThemeToken, string | number>;\n\tfor (const token of Object.keys(TOKEN_FAMILIES) as ThemeToken[]) {\n\t\tconst color = solved.get(token);\n\t\tresult[token] = color ? hexOf(color) : \"\";\n\t}\n\n\tfor (const token of FOREGROUND_TOKENS) {\n\t\tconst surfaces = surfacesOf(token);\n\t\t// Body text uses the terminal's own foreground where it is clearly stronger than muted text; otherwise\n\t\t// the foreground's hue at just enough lightness.\n\t\tlet text = solved.get(token);\n\t\tif (foreground) {\n\t\t\tconst targets = surfaces.map((surface) => target(FOREGROUND_LEVEL, oklabLightness(surface), relaxation));\n\t\t\tif (targets.every((value) => value !== undefined && value >= 0 && value <= 1)) {\n\t\t\t\tconst needed = lighter ? Math.max(...(targets as number[])) : Math.min(...(targets as number[]));\n\t\t\t\tconst foregroundL = oklabLightness(foreground);\n\t\t\t\tif (lighter ? foregroundL >= needed : foregroundL <= needed) {\n\t\t\t\t\tresult[token] = \"\";\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttext = anchored(sourceOf(foreground), FAMILIES.neutral, oklabToOkhslLightness(needed), saturation);\n\t\t\t}\n\t\t}\n\t\t// Body text keeps at least 4.5:1 on the surfaces it is drawn on, even on relaxed mid-gray backgrounds.\n\t\tif (text) result[token] = hexOf(withTextContrast(text, surfaces, lighter));\n\t}\n\treturn { colors: result, dim: [], appearance };\n}\n\nfunction okhslOf({ r, g, b }: RgbColor): OkhslChannels {\n\treturn colorToOkhsl(rgbColor(r, g, b));\n}\n\n/** A terminal color's OKHSL channels and its OKLCH chroma. */\ninterface SourceColor extends OkhslChannels {\n\tchroma: number;\n}\n\nfunction sourceOf(color: RgbColor): SourceColor {\n\treturn { ...okhslOf(color), chroma: colorToOklch(rgbColor(color.r, color.g, color.b)).c };\n}\n\n/**\n * A source color's hue at another OKHSL lightness. Its saturation applies at its own lightness and falls off\n * toward black and white along the family's saturation curve, never rising above it.\n *\n * OKHSL saturation is relative to the most chroma sRGB allows at a lightness, so the same saturation can mean\n * more chroma elsewhere: Catppuccin Frappe's pink #f4b8e4 (chroma 0.089) would become #eb76d1 (0.180) at the\n * lightness the accent needs. Chroma is therefore also capped at the source's, with the same falloff.\n */\nfunction anchored(source: SourceColor, family: Family, lightness: number, saturation: number): RgbColor {\n\tconst anchor = saturationCurve(family, source.l);\n\tconst falloff = anchor > 0 ? Math.min(1, saturationCurve(family, lightness) / anchor) : 1;\n\tconst color = okhslColor(source.h, source.s * falloff * saturation, lightness);\n\tconst cap = source.chroma * falloff * saturation;\n\tconst { l, c } = colorToOklch(color);\n\treturn c <= cap ? color : colorToRgb(oklchColor(l, cap, source.h));\n}\n\n/** Move a text color toward white or black until it reaches the WCAG minimum on every surface. */\nfunction withTextContrast(color: RgbColor, surfaces: RgbColor[], lighter: boolean): RgbColor {\n\tconst meets = (candidate: RgbColor) =>\n\t\tsurfaces.every((surface) => wcagContrast(candidate, surface) >= TEXT_MINIMUM_WCAG_CONTRAST);\n\tif (meets(color)) return color;\n\tconst { h, s, l } = okhslOf(color);\n\tconst at = (lightness: number) => okhslColor(h, s, lightness);\n\tconst extreme = lighter ? 1 : 0;\n\tif (!meets(at(extreme))) return at(extreme);\n\tlet [low, high] = [l, extreme];\n\tfor (let index = 0; index < 20; index++) {\n\t\tconst middle = (low + high) / 2;\n\t\tif (meets(at(middle))) high = middle;\n\t\telse low = middle;\n\t}\n\treturn at(high);\n}\n\n/**\n * Colors for terminals that reported nothing: the terminal renders ANSI indices 0-15 and the default\n * colors with its own theme, so they fit any background. Neutral tokens below body text are faint (SGR 2)\n * instead of bright black, which some themes make nearly invisible. Panels have no background.\n */\nfunction indexedColors(saturation: number, appearance: ThemeAppearance | undefined): SystemThemeColors {\n\tconst colors = {} as Record<ThemeToken, string | number>;\n\tconst dim: ThemeColor[] = [];\n\tfor (const [token, familyName] of Object.entries(TOKEN_FAMILIES) as [ThemeToken, FamilyName][]) {\n\t\tif (PANELS.includes(token as ThemeBg)) {\n\t\t\tcolors[token] = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tconst neutral = familyName === \"neutral\";\n\t\tcolors[token] = !neutral && saturation > 0 ? (TOKEN_SLOTS[token] ?? FAMILIES[familyName].slot) : \"\";\n\t\tif (neutral && !FOREGROUND_TOKENS.includes(token as ThemeColor)) dim.push(token as ThemeColor);\n\t}\n\treturn { colors, dim, appearance };\n}\n"]}
@@ -1,19 +1,6 @@
1
- import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
- import { type Component, Container, type TUI, type TuiMouseEvent } from "@earendil-works/pi-tui";
3
- import type { ToolDefinition, ToolRenderContext, ToolRenderResultOptions } from "../../../core/extensions/types.ts";
4
- import { type Theme } from "../theme/theme.ts";
5
- /**
6
- * What this component needs from a tool: how to draw it. It neither executes tools nor reads their
7
- * parameter schemas, so a definition and a bare renderer pair are equally acceptable.
8
- *
9
- * The renderer parameters are `any` on purpose: a `ToolDefinition` types them from its schema, and
10
- * narrowing them here would make those definitions unassignable.
11
- */
12
- export interface ToolRenderers {
13
- renderShell?: "default" | "self";
14
- renderCall?: (args: any, theme: Theme, context: ToolRenderContext<any, any>) => Component;
15
- renderResult?: (result: AgentToolResult<any>, options: ToolRenderResultOptions, theme: Theme, context: ToolRenderContext<any, any>) => Component;
16
- }
1
+ import { Container, type TUI, type TuiMouseEvent } from "@earendil-works/pi-tui";
2
+ import type { ToolDefinition, ToolRenderers } from "../../../core/extensions/types.ts";
3
+ export type { ToolRenderers };
17
4
  export interface ToolExecutionOptions {
18
5
  showImages?: boolean;
19
6
  imageWidthCells?: number;
@@ -31,6 +18,7 @@ export declare class ToolExecutionComponent extends Container {
31
18
  private resultRendererComponent?;
32
19
  private rendererState;
33
20
  private imageComponents;
21
+ private imageSources;
34
22
  private imageSpacers;
35
23
  private toolName;
36
24
  private toolCallId;
@@ -45,8 +33,6 @@ export declare class ToolExecutionComponent extends Container {
45
33
  private executionStarted;
46
34
  private argsComplete;
47
35
  private result?;
48
- private convertedImages;
49
- private pendingImageConversions;
50
36
  private hideComponent;
51
37
  private disposed;
52
38
  constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined, ui: TUI, cwd: string);
@@ -79,7 +65,6 @@ export declare class ToolExecutionComponent extends Container {
79
65
  details?: any;
80
66
  isError: boolean;
81
67
  }, isPartial?: boolean): void;
82
- private maybeConvertImagesForKitty;
83
68
  setExpanded(expanded: boolean): void;
84
69
  setShowImages(show: boolean): void;
85
70
  setImageWidthCells(width: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/tool-view/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EACN,KAAK,SAAS,EACd,SAAS,EAKT,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAIpH,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,mBAAmB,CAAC;AAItD;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC7B,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,SAAS,CAAC;IAC1F,YAAY,CAAC,EAAE,CACd,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,EAC5B,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,KAChC,SAAS,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAgBD;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,qBAAqB,CAAC,CAAY;IAC1C,OAAO,CAAC,uBAAuB,CAAC,CAAY;IAC5C,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAC,CAIb;IACF,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,uBAAuB,CAA6C;IAC5E,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;gBAGxB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,oBAAoB,YAAK,EAClC,cAAc,EAAE,aAAa,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EACzE,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,MAAM;IAsBZ,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,MAAM;IAId,+EAA+E;IAC/E,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,oBAAoB;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,kBAAkB;IAQ1B,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAK3B,oBAAoB,IAAI,IAAI;IAO5B,eAAe,IAAI,IAAI;IAMvB,YAAY,CACX,MAAM,EAAE;QACP,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;KACjB,EACD,SAAS,UAAQ,GACf,IAAI;IAOP,OAAO,CAAC,0BAA0B;IAkDlC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKpC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKlC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,UAAU,IAAI,IAAI;IAKlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAiC/B,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAUhF,OAAO,CAAC,aAAa;IA+FrB,OAAO,CAAC,aAAa;IAIrB,OAAO,IAAI,IAAI;CAMf"}
1
+ {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/tool-view/tool-execution.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Container, getCapabilities, Image, MouseRegion, Spacer, } from "@earendil-works/pi-tui";
2
2
  import { getTextOutput as getRenderedTextOutput } from "../../../core/tools/render-utils.js";
3
3
  import { createAllToolRenderers } from "../../../core/tools/renderers/index.js";
4
- import { convertToPng } from "../../../utils/image-convert.js";
4
+ import { ensurePngTranscoder } from "../../../utils/image-convert.js";
5
5
  import { theme } from "../theme/theme.js";
6
6
  import { createCallFallback, FallbackResultComponent } from "./fallback.js";
7
7
  import { FramedComponent, toolMarkerColor, toolStatus, toolStyle } from "./style.js";
@@ -16,13 +16,12 @@ export class ToolExecutionComponent extends Container {
16
16
  this.selfRenderHeight = 0;
17
17
  this.rendererState = {};
18
18
  this.imageComponents = [];
19
+ this.imageSources = [];
19
20
  this.imageSpacers = [];
20
21
  this.expanded = false;
21
22
  this.isPartial = true;
22
23
  this.executionStarted = false;
23
24
  this.argsComplete = false;
24
- this.convertedImages = new Map();
25
- this.pendingImageConversions = new Map();
26
25
  this.hideComponent = false;
27
26
  this.disposed = false;
28
27
  this.toolName = toolName;
@@ -133,60 +132,6 @@ export class ToolExecutionComponent extends Container {
133
132
  this.result = result;
134
133
  this.isPartial = isPartial;
135
134
  this.updateDisplay();
136
- this.maybeConvertImagesForKitty();
137
- }
138
- maybeConvertImagesForKitty() {
139
- const caps = getCapabilities();
140
- if (caps.images !== "kitty")
141
- return;
142
- if (!this.result)
143
- return;
144
- const imageBlocks = this.result.content.filter((content) => content.type === "image");
145
- const sourceMatches = (image, entry) => image?.data === entry?.sourceData && image?.mimeType === entry?.sourceMimeType;
146
- for (const [index, converted] of this.convertedImages) {
147
- if (!sourceMatches(imageBlocks[index], converted))
148
- this.convertedImages.delete(index);
149
- }
150
- for (const [index, pending] of this.pendingImageConversions) {
151
- if (!sourceMatches(imageBlocks[index], pending))
152
- this.pendingImageConversions.delete(index);
153
- }
154
- for (let i = 0; i < imageBlocks.length; i++) {
155
- const image = imageBlocks[i];
156
- if (!image.data || !image.mimeType || image.mimeType === "image/png")
157
- continue;
158
- if (sourceMatches(image, this.convertedImages.get(i)))
159
- continue;
160
- if (sourceMatches(image, this.pendingImageConversions.get(i)))
161
- continue;
162
- const index = i;
163
- const sourceData = image.data;
164
- const sourceMimeType = image.mimeType;
165
- this.pendingImageConversions.set(index, { sourceData, sourceMimeType });
166
- void convertToPng(sourceData, sourceMimeType)
167
- .then((converted) => {
168
- const pending = this.pendingImageConversions.get(index);
169
- if (pending?.sourceData !== sourceData || pending.sourceMimeType !== sourceMimeType)
170
- return;
171
- this.pendingImageConversions.delete(index);
172
- if (this.disposed)
173
- return;
174
- const currentImage = this.result?.content.filter((content) => content.type === "image")[index];
175
- if (currentImage?.data !== sourceData || currentImage.mimeType !== sourceMimeType)
176
- return;
177
- if (converted) {
178
- this.convertedImages.set(index, { sourceData, sourceMimeType, ...converted });
179
- this.updateDisplay();
180
- this.ui.requestRender();
181
- }
182
- })
183
- .catch(() => {
184
- const pending = this.pendingImageConversions.get(index);
185
- if (pending?.sourceData === sourceData && pending.sourceMimeType === sourceMimeType) {
186
- this.pendingImageConversions.delete(index);
187
- }
188
- });
189
- }
190
135
  }
191
136
  setExpanded(expanded) {
192
137
  this.expanded = expanded;
@@ -294,10 +239,13 @@ export class ToolExecutionComponent extends Container {
294
239
  }
295
240
  }
296
241
  }
242
+ const previousImages = this.imageComponents;
243
+ const previousSources = this.imageSources;
297
244
  for (const img of this.imageComponents) {
298
245
  this.removeChild(img);
299
246
  }
300
247
  this.imageComponents = [];
248
+ this.imageSources = [];
301
249
  for (const spacer of this.imageSpacers) {
302
250
  this.removeChild(spacer);
303
251
  }
@@ -305,20 +253,29 @@ export class ToolExecutionComponent extends Container {
305
253
  if (this.result) {
306
254
  const imageBlocks = this.result.content.filter((c) => c.type === "image");
307
255
  const caps = getCapabilities();
308
- for (let i = 0; i < imageBlocks.length; i++) {
309
- const img = imageBlocks[i];
256
+ for (const img of imageBlocks) {
310
257
  if (caps.images && this.showImages && img.data && img.mimeType) {
311
- const cached = this.convertedImages.get(i);
312
- const converted = cached?.sourceData === img.data && cached.sourceMimeType === img.mimeType ? cached : undefined;
313
- const imageData = converted?.data ?? img.data;
314
- const imageMimeType = converted?.mimeType ?? img.mimeType;
315
- if (caps.images === "kitty" && imageMimeType !== "image/png")
316
- continue;
317
258
  const spacer = new Spacer(1);
318
259
  this.addChild(spacer);
319
260
  this.imageSpacers.push(spacer);
320
- const imageComponent = new Image(imageData, imageMimeType, { fallbackColor: (s) => theme.fg("toolOutput", s) }, { maxWidthCells: this.imageWidthCells });
261
+ const source = { data: img.data, mimeType: img.mimeType, widthCells: this.imageWidthCells };
262
+ const index = this.imageComponents.length;
263
+ const previous = previousSources[index];
264
+ const imageComponent = previous?.data === source.data &&
265
+ previous.mimeType === source.mimeType &&
266
+ previous.widthCells === source.widthCells
267
+ ? previousImages[index]
268
+ : new Image(source.data, source.mimeType, { fallbackColor: (s) => theme.fg("toolOutput", s) }, { maxWidthCells: source.widthCells });
269
+ if (source.mimeType !== "image/png") {
270
+ ensurePngTranscoder(() => {
271
+ if (this.disposed)
272
+ return;
273
+ this.invalidate();
274
+ this.ui.requestRender();
275
+ });
276
+ }
321
277
  this.imageComponents.push(imageComponent);
278
+ this.imageSources.push(source);
322
279
  this.addChild(imageComponent);
323
280
  }
324
281
  }
@@ -335,7 +292,6 @@ export class ToolExecutionComponent extends Container {
335
292
  return;
336
293
  this.disposed = true;
337
294
  this.rendererState.dispose?.();
338
- this.pendingImageConversions.clear();
339
295
  }
340
296
  }
341
297
  //# sourceMappingURL=tool-execution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../../src/modes/interactive/tool-view/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\ttype TUI,\n\ttype TuiMouseEvent,\n} from \"@earendil-works/pi-tui\";\nimport type { ToolDefinition, ToolRenderContext, ToolRenderResultOptions } from \"../../../core/extensions/types.ts\";\nimport { getTextOutput as getRenderedTextOutput } from \"../../../core/tools/render-utils.ts\";\nimport { createAllToolRenderers } from \"../../../core/tools/renderers/index.ts\";\nimport { convertToPng } from \"../../../utils/image-convert.ts\";\nimport { type Theme, theme } from \"../theme/theme.ts\";\nimport { createCallFallback, FallbackResultComponent } from \"./fallback.ts\";\nimport { FramedComponent, type ToolStatus, toolMarkerColor, toolStatus, toolStyle } from \"./style.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\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\nexport interface ToolExecutionOptions {\n\tshowImages?: boolean;\n\timageWidthCells?: number;\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\nlet builtInRenderers: ReturnType<typeof createAllToolRenderers> | undefined;\n\n/**\n * One tool call in the transcript: a marker line for the call and a rail for its result.\n * `style.ts` owns how that looks; this class owns the call's lifecycle.\n */\nexport class ToolExecutionComponent extends Container {\n\tprivate gap: Spacer;\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\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 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.showImages = options.showImages ?? true;\n\t\tthis.imageWidthCells = options.imageWidthCells ?? 60;\n\t\tthis.ui = ui;\n\t\tthis.cwd = cwd;\n\n\t\tthis.gap = new Spacer(toolStyle.gap.afterOther);\n\t\tthis.addChild(this.gap);\n\n\t\tthis.contentContainer = new Container();\n\t\tthis.selfRenderContainer = new Container();\n\t\tthis.addChild(this.isSelfRendered() ? 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 isSelfRendered(): boolean {\n\t\treturn this.toolDefinition?.renderShell === \"self\";\n\t}\n\n\tprivate status(): ToolStatus {\n\t\treturn toolStatus({ isPartial: this.isPartial, isError: this.result?.isError ?? false });\n\t}\n\n\t/** Blank lines above this row; the chat sets it from what precedes the row. */\n\tsetLeadingGap(lines: number): void {\n\t\tthis.gap.setLines(lines);\n\t}\n\n\tprivate getRenderContext(lastComponent: Component | undefined): 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};\n\t}\n\n\tprivate frame(component: Component, kind: \"header\" | \"body\"): Component {\n\t\treturn new FramedComponent(component, kind, () => toolMarkerColor(this.status()));\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\t/**\n\t * A successful result of an explore tool stays hidden until expanded; a failure always shows.\n\t * Only the built-in result renderer is folded, so an extension that overrides the tool with its\n\t * own renderResult keeps control of what its row shows.\n\t */\n\tprivate hidesCollapsedResult(): boolean {\n\t\tif (this.expanded || this.result?.isError || !toolStyle.collapsed.headerOnly.has(this.toolName)) return false;\n\t\tbuiltInRenderers ??= createAllToolRenderers();\n\t\tconst builtIn = (builtInRenderers as Record<string, ToolRenderers>)[this.toolName];\n\t\treturn builtIn?.renderResult !== undefined && builtIn.renderResult === this.getResultRenderer();\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\tthis.updateDisplay();\n\t\tthis.ui.requestRender();\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\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\toverride render(width: number): string[] {\n\t\tif (this.hideComponent) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (this.isSelfRendered()) {\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.isSelfRendered()) 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.isSelfRendered();\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.frame(component, \"header\")));\n\t\t\thasContent = true;\n\t\t};\n\t\tconst addResult = (component: Component) => {\n\t\t\trenderContainer.addChild(selfRendered ? component : this.createResultRegion(this.frame(component, \"body\")));\n\t\t\thasContent = true;\n\t\t};\n\n\t\tconst callRenderer = this.getCallRenderer();\n\t\tif (!callRenderer) {\n\t\t\taddCall(createCallFallback(this.toolName, this.args, this.expanded));\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(createCallFallback(this.toolName, this.args, this.expanded));\n\t\t\t}\n\t\t}\n\n\t\tif (this.result && (selfRendered || !this.hidesCollapsedResult())) {\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\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\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/tool-view/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\ttype TUI,\n\ttype TuiMouseEvent,\n} from \"@earendil-works/pi-tui\";\nimport type { ToolDefinition, ToolRenderContext, ToolRenderers } from \"../../../core/extensions/types.ts\";\nimport { getTextOutput as getRenderedTextOutput } from \"../../../core/tools/render-utils.ts\";\nimport { createAllToolRenderers } from \"../../../core/tools/renderers/index.ts\";\nimport { ensurePngTranscoder } from \"../../../utils/image-convert.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { createCallFallback, FallbackResultComponent } from \"./fallback.ts\";\nimport { FramedComponent, type ToolStatus, toolMarkerColor, toolStatus, toolStyle } from \"./style.ts\";\n\nexport type { ToolRenderers };\n\nexport interface ToolExecutionOptions {\n\tshowImages?: boolean;\n\timageWidthCells?: number;\n}\n\nlet builtInRenderers: ReturnType<typeof createAllToolRenderers> | undefined;\n\n/**\n * One tool call in the transcript: a marker line for the call and a rail for its result.\n * `style.ts` owns how that looks; this class owns the call's lifecycle.\n */\nexport class ToolExecutionComponent extends Container {\n\tprivate gap: Spacer;\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 imageSources: Array<{ data: string; mimeType: string; widthCells: number }> = [];\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\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 hideComponent = false;\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.showImages = options.showImages ?? true;\n\t\tthis.imageWidthCells = options.imageWidthCells ?? 60;\n\t\tthis.ui = ui;\n\t\tthis.cwd = cwd;\n\n\t\tthis.gap = new Spacer(toolStyle.gap.afterOther);\n\t\tthis.addChild(this.gap);\n\n\t\tthis.contentContainer = new Container();\n\t\tthis.selfRenderContainer = new Container();\n\t\tthis.addChild(this.isSelfRendered() ? 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 isSelfRendered(): boolean {\n\t\treturn this.toolDefinition?.renderShell === \"self\";\n\t}\n\n\tprivate status(): ToolStatus {\n\t\treturn toolStatus({ isPartial: this.isPartial, isError: this.result?.isError ?? false });\n\t}\n\n\t/** Blank lines above this row; the chat sets it from what precedes the row. */\n\tsetLeadingGap(lines: number): void {\n\t\tthis.gap.setLines(lines);\n\t}\n\n\tprivate getRenderContext(lastComponent: Component | undefined): 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};\n\t}\n\n\tprivate frame(component: Component, kind: \"header\" | \"body\"): Component {\n\t\treturn new FramedComponent(component, kind, () => toolMarkerColor(this.status()));\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\t/**\n\t * A successful result of an explore tool stays hidden until expanded; a failure always shows.\n\t * Only the built-in result renderer is folded, so an extension that overrides the tool with its\n\t * own renderResult keeps control of what its row shows.\n\t */\n\tprivate hidesCollapsedResult(): boolean {\n\t\tif (this.expanded || this.result?.isError || !toolStyle.collapsed.headerOnly.has(this.toolName)) return false;\n\t\tbuiltInRenderers ??= createAllToolRenderers();\n\t\tconst builtIn = (builtInRenderers as Record<string, ToolRenderers>)[this.toolName];\n\t\treturn builtIn?.renderResult !== undefined && builtIn.renderResult === this.getResultRenderer();\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\tthis.updateDisplay();\n\t\tthis.ui.requestRender();\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\tthis.updateDisplay();\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\toverride render(width: number): string[] {\n\t\tif (this.hideComponent) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (this.isSelfRendered()) {\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.isSelfRendered()) 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.isSelfRendered();\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.frame(component, \"header\")));\n\t\t\thasContent = true;\n\t\t};\n\t\tconst addResult = (component: Component) => {\n\t\t\trenderContainer.addChild(selfRendered ? component : this.createResultRegion(this.frame(component, \"body\")));\n\t\t\thasContent = true;\n\t\t};\n\n\t\tconst callRenderer = this.getCallRenderer();\n\t\tif (!callRenderer) {\n\t\t\taddCall(createCallFallback(this.toolName, this.args, this.expanded));\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(createCallFallback(this.toolName, this.args, this.expanded));\n\t\t\t}\n\t\t}\n\n\t\tif (this.result && (selfRendered || !this.hidesCollapsedResult())) {\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\tconst previousImages = this.imageComponents;\n\t\tconst previousSources = this.imageSources;\n\t\tfor (const img of this.imageComponents) {\n\t\t\tthis.removeChild(img);\n\t\t}\n\t\tthis.imageComponents = [];\n\t\tthis.imageSources = [];\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 (const img of imageBlocks) {\n\t\t\t\tif (caps.images && this.showImages && img.data && img.mimeType) {\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 source = { data: img.data, mimeType: img.mimeType, widthCells: this.imageWidthCells };\n\t\t\t\t\tconst index = this.imageComponents.length;\n\t\t\t\t\tconst previous = previousSources[index];\n\t\t\t\t\tconst imageComponent =\n\t\t\t\t\t\tprevious?.data === source.data &&\n\t\t\t\t\t\tprevious.mimeType === source.mimeType &&\n\t\t\t\t\t\tprevious.widthCells === source.widthCells\n\t\t\t\t\t\t\t? previousImages[index]\n\t\t\t\t\t\t\t: new Image(\n\t\t\t\t\t\t\t\t\tsource.data,\n\t\t\t\t\t\t\t\t\tsource.mimeType,\n\t\t\t\t\t\t\t\t\t{ fallbackColor: (s: string) => theme.fg(\"toolOutput\", s) },\n\t\t\t\t\t\t\t\t\t{ maxWidthCells: source.widthCells },\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\tif (source.mimeType !== \"image/png\") {\n\t\t\t\t\t\tensurePngTranscoder(() => {\n\t\t\t\t\t\t\tif (this.disposed) return;\n\t\t\t\t\t\t\tthis.invalidate();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthis.imageComponents.push(imageComponent);\n\t\t\t\t\tthis.imageSources.push(source);\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\t(this.rendererState as { dispose?: () => void }).dispose?.();\n\t}\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { type ImageTranscoder } from "@earendil-works/pi-tui";
1
2
  export declare function convertImageBytesToPng(bytes: Uint8Array): Promise<Uint8Array | null>;
2
3
  /**
3
4
  * Convert image to PNG format for terminal display.
@@ -7,4 +8,15 @@ export declare function convertToPng(base64Data: string, mimeType: string): Prom
7
8
  data: string;
8
9
  mimeType: string;
9
10
  } | null>;
11
+ /**
12
+ * Load photon and return a synchronous PNG transcoder for pi-tui's Kitty image rendering.
13
+ * Returns undefined if photon cannot be loaded.
14
+ */
15
+ export declare function loadPngTranscoder(): Promise<ImageTranscoder | undefined>;
16
+ /**
17
+ * On Kitty-protocol terminals, register photon as pi-tui's image transcoder so non-PNG images render.
18
+ * Loads photon once. `onRegistered` runs after registration so callers can re-render images that
19
+ * showed text fallbacks; it is not called if the transcoder was already registered or cannot load.
20
+ */
21
+ export declare function ensurePngTranscoder(onRegistered: () => void): void;
10
22
  //# sourceMappingURL=image-convert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-convert.d.ts","sourceRoot":"","sources":["../../src/utils/image-convert.ts"],"names":[],"mappings":"AAGA,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAoB1F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgBpD"}
1
+ {"version":3,"file":"image-convert.d.ts","sourceRoot":"","sources":["../../src/utils/image-convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAsBnG,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAO1F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgBpD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAO9E;AAKD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,IAAI,GAAG,IAAI,CAWlE"}