@mariozechner/pi-web-ui 0.5.44 → 0.5.46

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 (346) hide show
  1. package/README.md +178 -99
  2. package/dist/ChatPanel.d.ts +15 -10
  3. package/dist/ChatPanel.d.ts.map +1 -1
  4. package/dist/ChatPanel.js +68 -100
  5. package/dist/ChatPanel.js.map +1 -1
  6. package/dist/{state/agent-session.d.ts → agent/agent.d.ts} +23 -19
  7. package/dist/agent/agent.d.ts.map +1 -0
  8. package/dist/{state/agent-session.js → agent/agent.js} +50 -32
  9. package/dist/agent/agent.js.map +1 -0
  10. package/dist/{state → agent}/transports/AppTransport.d.ts +1 -3
  11. package/dist/agent/transports/AppTransport.d.ts.map +1 -0
  12. package/dist/{state → agent}/transports/AppTransport.js +5 -4
  13. package/dist/{state → agent}/transports/AppTransport.js.map +1 -1
  14. package/dist/{state → agent}/transports/ProviderTransport.d.ts +1 -3
  15. package/dist/agent/transports/ProviderTransport.d.ts.map +1 -0
  16. package/dist/{state → agent}/transports/ProviderTransport.js +6 -7
  17. package/dist/agent/transports/ProviderTransport.js.map +1 -0
  18. package/dist/{state → agent}/transports/index.d.ts.map +1 -1
  19. package/dist/agent/transports/index.js.map +1 -0
  20. package/dist/{state → agent}/transports/proxy-types.d.ts.map +1 -1
  21. package/dist/agent/transports/proxy-types.js.map +1 -0
  22. package/dist/agent/transports/types.d.ts +12 -0
  23. package/dist/agent/transports/types.d.ts.map +1 -0
  24. package/dist/{state → agent}/transports/types.js.map +1 -1
  25. package/dist/{state → agent}/types.d.ts.map +1 -1
  26. package/dist/{state → agent}/types.js.map +1 -1
  27. package/dist/app.css +1 -1
  28. package/dist/components/AgentInterface.d.ts +7 -4
  29. package/dist/components/AgentInterface.d.ts.map +1 -1
  30. package/dist/components/AgentInterface.js +29 -17
  31. package/dist/components/AgentInterface.js.map +1 -1
  32. package/dist/components/ConsoleBlock.d.ts +1 -0
  33. package/dist/components/ConsoleBlock.d.ts.map +1 -1
  34. package/dist/components/ConsoleBlock.js +7 -1
  35. package/dist/components/ConsoleBlock.js.map +1 -1
  36. package/dist/components/ExpandableSection.d.ts +15 -0
  37. package/dist/components/ExpandableSection.d.ts.map +1 -0
  38. package/dist/components/ExpandableSection.js +63 -0
  39. package/dist/components/ExpandableSection.js.map +1 -0
  40. package/dist/components/MessageEditor.d.ts +8 -1
  41. package/dist/components/MessageEditor.d.ts.map +1 -1
  42. package/dist/components/MessageEditor.js +149 -6
  43. package/dist/components/MessageEditor.js.map +1 -1
  44. package/dist/components/MessageList.d.ts +3 -2
  45. package/dist/components/MessageList.d.ts.map +1 -1
  46. package/dist/components/MessageList.js +14 -1
  47. package/dist/components/MessageList.js.map +1 -1
  48. package/dist/components/Messages.d.ts +15 -6
  49. package/dist/components/Messages.d.ts.map +1 -1
  50. package/dist/components/Messages.js +17 -83
  51. package/dist/components/Messages.js.map +1 -1
  52. package/dist/components/ProviderKeyInput.d.ts.map +1 -1
  53. package/dist/components/ProviderKeyInput.js +6 -5
  54. package/dist/components/ProviderKeyInput.js.map +1 -1
  55. package/dist/components/SandboxedIframe.d.ts +29 -7
  56. package/dist/components/SandboxedIframe.d.ts.map +1 -1
  57. package/dist/components/SandboxedIframe.js +350 -282
  58. package/dist/components/SandboxedIframe.js.map +1 -1
  59. package/dist/components/message-renderer-registry.d.ts +12 -0
  60. package/dist/components/message-renderer-registry.d.ts.map +1 -0
  61. package/dist/components/message-renderer-registry.js +12 -0
  62. package/dist/components/message-renderer-registry.js.map +1 -0
  63. package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts +35 -0
  64. package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts.map +1 -0
  65. package/dist/components/sandbox/ArtifactsRuntimeProvider.js +189 -0
  66. package/dist/components/sandbox/ArtifactsRuntimeProvider.js.map +1 -0
  67. package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts +17 -0
  68. package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts.map +1 -0
  69. package/dist/components/sandbox/AttachmentsRuntimeProvider.js +64 -0
  70. package/dist/components/sandbox/AttachmentsRuntimeProvider.js.map +1 -0
  71. package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts +42 -0
  72. package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts.map +1 -0
  73. package/dist/components/sandbox/ConsoleRuntimeProvider.js +161 -0
  74. package/dist/components/sandbox/ConsoleRuntimeProvider.js.map +1 -0
  75. package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts +30 -0
  76. package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts.map +1 -0
  77. package/dist/components/sandbox/FileDownloadRuntimeProvider.js +97 -0
  78. package/dist/components/sandbox/FileDownloadRuntimeProvider.js.map +1 -0
  79. package/dist/components/sandbox/RuntimeMessageBridge.d.ts +19 -0
  80. package/dist/components/sandbox/RuntimeMessageBridge.d.ts.map +1 -0
  81. package/dist/components/sandbox/RuntimeMessageBridge.js +74 -0
  82. package/dist/components/sandbox/RuntimeMessageBridge.js.map +1 -0
  83. package/dist/components/sandbox/RuntimeMessageRouter.d.ts +65 -0
  84. package/dist/components/sandbox/RuntimeMessageRouter.d.ts.map +1 -0
  85. package/dist/components/sandbox/RuntimeMessageRouter.js +168 -0
  86. package/dist/components/sandbox/RuntimeMessageRouter.js.map +1 -0
  87. package/dist/components/sandbox/SandboxRuntimeProvider.d.ts +33 -0
  88. package/dist/components/sandbox/SandboxRuntimeProvider.d.ts.map +1 -0
  89. package/dist/components/sandbox/SandboxRuntimeProvider.js +2 -0
  90. package/dist/components/sandbox/SandboxRuntimeProvider.js.map +1 -0
  91. package/dist/dialogs/ApiKeyPromptDialog.d.ts.map +1 -1
  92. package/dist/dialogs/ApiKeyPromptDialog.js +2 -5
  93. package/dist/dialogs/ApiKeyPromptDialog.js.map +1 -1
  94. package/dist/dialogs/ModelSelector.js.map +1 -1
  95. package/dist/dialogs/PersistentStorageDialog.d.ts +17 -0
  96. package/dist/dialogs/PersistentStorageDialog.d.ts.map +1 -0
  97. package/dist/dialogs/PersistentStorageDialog.js +144 -0
  98. package/dist/dialogs/PersistentStorageDialog.js.map +1 -0
  99. package/dist/dialogs/SessionListDialog.d.ts +19 -0
  100. package/dist/dialogs/SessionListDialog.d.ts.map +1 -0
  101. package/dist/dialogs/SessionListDialog.js +152 -0
  102. package/dist/dialogs/SessionListDialog.js.map +1 -0
  103. package/dist/dialogs/SettingsDialog.d.ts.map +1 -1
  104. package/dist/dialogs/SettingsDialog.js +1 -0
  105. package/dist/dialogs/SettingsDialog.js.map +1 -1
  106. package/dist/index.d.ts +34 -16
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +32 -14
  109. package/dist/index.js.map +1 -1
  110. package/dist/prompts/prompts.d.ts +11 -0
  111. package/dist/prompts/prompts.d.ts.map +1 -0
  112. package/dist/prompts/prompts.js +272 -0
  113. package/dist/prompts/prompts.js.map +1 -0
  114. package/dist/storage/app-storage.d.ts +17 -12
  115. package/dist/storage/app-storage.d.ts.map +1 -1
  116. package/dist/storage/app-storage.js +13 -20
  117. package/dist/storage/app-storage.js.map +1 -1
  118. package/dist/storage/backends/indexeddb-storage-backend.d.ts +27 -0
  119. package/dist/storage/backends/indexeddb-storage-backend.d.ts.map +1 -0
  120. package/dist/storage/backends/indexeddb-storage-backend.js +166 -0
  121. package/dist/storage/backends/indexeddb-storage-backend.js.map +1 -0
  122. package/dist/storage/store.d.ts +23 -0
  123. package/dist/storage/store.d.ts.map +1 -0
  124. package/dist/storage/store.js +26 -0
  125. package/dist/storage/store.js.map +1 -0
  126. package/dist/storage/stores/provider-keys-store.d.ts +14 -0
  127. package/dist/storage/stores/provider-keys-store.d.ts.map +1 -0
  128. package/dist/storage/stores/provider-keys-store.js +27 -0
  129. package/dist/storage/stores/provider-keys-store.js.map +1 -0
  130. package/dist/storage/stores/sessions-store.d.ts +31 -0
  131. package/dist/storage/stores/sessions-store.d.ts.map +1 -0
  132. package/dist/storage/stores/sessions-store.js +113 -0
  133. package/dist/storage/stores/sessions-store.js.map +1 -0
  134. package/dist/storage/stores/settings-store.d.ts +14 -0
  135. package/dist/storage/stores/settings-store.d.ts.map +1 -0
  136. package/dist/storage/stores/settings-store.js +28 -0
  137. package/dist/storage/stores/settings-store.js.map +1 -0
  138. package/dist/storage/types.d.ts +156 -22
  139. package/dist/storage/types.d.ts.map +1 -1
  140. package/dist/tools/artifacts/ArtifactElement.d.ts +0 -1
  141. package/dist/tools/artifacts/ArtifactElement.d.ts.map +1 -1
  142. package/dist/tools/artifacts/ArtifactElement.js +0 -1
  143. package/dist/tools/artifacts/ArtifactElement.js.map +1 -1
  144. package/dist/tools/artifacts/ArtifactPill.d.ts +4 -0
  145. package/dist/tools/artifacts/ArtifactPill.d.ts.map +1 -0
  146. package/dist/tools/artifacts/ArtifactPill.js +22 -0
  147. package/dist/tools/artifacts/ArtifactPill.js.map +1 -0
  148. package/dist/tools/artifacts/Console.d.ts +18 -0
  149. package/dist/tools/artifacts/Console.d.ts.map +1 -0
  150. package/dist/tools/artifacts/Console.js +95 -0
  151. package/dist/tools/artifacts/Console.js.map +1 -0
  152. package/dist/tools/artifacts/DocxArtifact.d.ts +22 -0
  153. package/dist/tools/artifacts/DocxArtifact.d.ts.map +1 -0
  154. package/dist/tools/artifacts/DocxArtifact.js +208 -0
  155. package/dist/tools/artifacts/DocxArtifact.js.map +1 -0
  156. package/dist/tools/artifacts/ExcelArtifact.d.ts +24 -0
  157. package/dist/tools/artifacts/ExcelArtifact.d.ts.map +1 -0
  158. package/dist/tools/artifacts/ExcelArtifact.js +216 -0
  159. package/dist/tools/artifacts/ExcelArtifact.js.map +1 -0
  160. package/dist/tools/artifacts/GenericArtifact.d.ts +19 -0
  161. package/dist/tools/artifacts/GenericArtifact.d.ts.map +1 -0
  162. package/dist/tools/artifacts/GenericArtifact.js +117 -0
  163. package/dist/tools/artifacts/GenericArtifact.js.map +1 -0
  164. package/dist/tools/artifacts/HtmlArtifact.d.ts +8 -11
  165. package/dist/tools/artifacts/HtmlArtifact.d.ts.map +1 -1
  166. package/dist/tools/artifacts/HtmlArtifact.js +56 -88
  167. package/dist/tools/artifacts/HtmlArtifact.js.map +1 -1
  168. package/dist/tools/artifacts/ImageArtifact.d.ts +20 -0
  169. package/dist/tools/artifacts/ImageArtifact.d.ts.map +1 -0
  170. package/dist/tools/artifacts/ImageArtifact.js +120 -0
  171. package/dist/tools/artifacts/ImageArtifact.js.map +1 -0
  172. package/dist/tools/artifacts/MarkdownArtifact.d.ts +0 -1
  173. package/dist/tools/artifacts/MarkdownArtifact.d.ts.map +1 -1
  174. package/dist/tools/artifacts/MarkdownArtifact.js +0 -4
  175. package/dist/tools/artifacts/MarkdownArtifact.js.map +1 -1
  176. package/dist/tools/artifacts/PdfArtifact.d.ts +25 -0
  177. package/dist/tools/artifacts/PdfArtifact.d.ts.map +1 -0
  178. package/dist/tools/artifacts/PdfArtifact.js +184 -0
  179. package/dist/tools/artifacts/PdfArtifact.js.map +1 -0
  180. package/dist/tools/artifacts/SvgArtifact.d.ts +0 -1
  181. package/dist/tools/artifacts/SvgArtifact.d.ts.map +1 -1
  182. package/dist/tools/artifacts/SvgArtifact.js +0 -4
  183. package/dist/tools/artifacts/SvgArtifact.js.map +1 -1
  184. package/dist/tools/artifacts/TextArtifact.d.ts +0 -1
  185. package/dist/tools/artifacts/TextArtifact.d.ts.map +1 -1
  186. package/dist/tools/artifacts/TextArtifact.js +0 -4
  187. package/dist/tools/artifacts/TextArtifact.js.map +1 -1
  188. package/dist/tools/artifacts/artifacts-tool-renderer.d.ts +11 -0
  189. package/dist/tools/artifacts/artifacts-tool-renderer.d.ts.map +1 -0
  190. package/dist/tools/artifacts/artifacts-tool-renderer.js +262 -0
  191. package/dist/tools/artifacts/artifacts-tool-renderer.js.map +1 -0
  192. package/dist/tools/artifacts/artifacts.d.ts +10 -13
  193. package/dist/tools/artifacts/artifacts.d.ts.map +1 -1
  194. package/dist/tools/artifacts/artifacts.js +166 -344
  195. package/dist/tools/artifacts/artifacts.js.map +1 -1
  196. package/dist/tools/artifacts/index.d.ts +1 -0
  197. package/dist/tools/artifacts/index.d.ts.map +1 -1
  198. package/dist/tools/artifacts/index.js +1 -0
  199. package/dist/tools/artifacts/index.js.map +1 -1
  200. package/dist/tools/extract-document.d.ts +24 -0
  201. package/dist/tools/extract-document.d.ts.map +1 -0
  202. package/dist/tools/extract-document.js +193 -0
  203. package/dist/tools/extract-document.js.map +1 -0
  204. package/dist/tools/index.d.ts +9 -7
  205. package/dist/tools/index.d.ts.map +1 -1
  206. package/dist/tools/index.js +17 -13
  207. package/dist/tools/index.js.map +1 -1
  208. package/dist/tools/javascript-repl.d.ts +16 -15
  209. package/dist/tools/javascript-repl.d.ts.map +1 -1
  210. package/dist/tools/javascript-repl.js +101 -133
  211. package/dist/tools/javascript-repl.js.map +1 -1
  212. package/dist/tools/renderer-registry.d.ts +12 -0
  213. package/dist/tools/renderer-registry.d.ts.map +1 -1
  214. package/dist/tools/renderer-registry.js +78 -0
  215. package/dist/tools/renderer-registry.js.map +1 -1
  216. package/dist/tools/renderers/BashRenderer.d.ts +2 -4
  217. package/dist/tools/renderers/BashRenderer.d.ts.map +1 -1
  218. package/dist/tools/renderers/BashRenderer.js +30 -26
  219. package/dist/tools/renderers/BashRenderer.js.map +1 -1
  220. package/dist/tools/renderers/CalculateRenderer.d.ts +2 -4
  221. package/dist/tools/renderers/CalculateRenderer.d.ts.map +1 -1
  222. package/dist/tools/renderers/CalculateRenderer.js +32 -28
  223. package/dist/tools/renderers/CalculateRenderer.js.map +1 -1
  224. package/dist/tools/renderers/DefaultRenderer.d.ts +2 -4
  225. package/dist/tools/renderers/DefaultRenderer.d.ts.map +1 -1
  226. package/dist/tools/renderers/DefaultRenderer.js +78 -18
  227. package/dist/tools/renderers/DefaultRenderer.js.map +1 -1
  228. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts +2 -4
  229. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -1
  230. package/dist/tools/renderers/GetCurrentTimeRenderer.js +57 -21
  231. package/dist/tools/renderers/GetCurrentTimeRenderer.js.map +1 -1
  232. package/dist/tools/types.d.ts +5 -2
  233. package/dist/tools/types.d.ts.map +1 -1
  234. package/dist/utils/i18n.d.ts +424 -1
  235. package/dist/utils/i18n.d.ts.map +1 -1
  236. package/dist/utils/i18n.js +131 -7
  237. package/dist/utils/i18n.js.map +1 -1
  238. package/example/package.json +2 -1
  239. package/example/src/custom-messages.ts +112 -0
  240. package/example/src/main.ts +391 -38
  241. package/package.json +48 -43
  242. package/scripts/count-prompt-tokens.ts +88 -0
  243. package/src/ChatPanel.ts +93 -101
  244. package/src/{state/agent-session.ts → agent/agent.ts} +80 -55
  245. package/src/{state → agent}/transports/AppTransport.ts +6 -6
  246. package/src/{state → agent}/transports/ProviderTransport.ts +13 -7
  247. package/src/{state → agent}/transports/types.ts +8 -2
  248. package/src/components/AgentInterface.ts +32 -16
  249. package/src/components/ConsoleBlock.ts +5 -1
  250. package/src/components/ExpandableSection.ts +46 -0
  251. package/src/components/MessageEditor.ts +159 -5
  252. package/src/components/MessageList.ts +18 -3
  253. package/src/components/Messages.ts +48 -89
  254. package/src/components/ProviderKeyInput.ts +6 -5
  255. package/src/components/SandboxedIframe.ts +412 -321
  256. package/src/components/message-renderer-registry.ts +28 -0
  257. package/src/components/sandbox/ArtifactsRuntimeProvider.ts +219 -0
  258. package/src/components/sandbox/AttachmentsRuntimeProvider.ts +66 -0
  259. package/src/components/sandbox/ConsoleRuntimeProvider.ts +187 -0
  260. package/src/components/sandbox/FileDownloadRuntimeProvider.ts +110 -0
  261. package/src/components/sandbox/RuntimeMessageBridge.ts +82 -0
  262. package/src/components/sandbox/RuntimeMessageRouter.ts +216 -0
  263. package/src/components/sandbox/SandboxRuntimeProvider.ts +35 -0
  264. package/src/dialogs/ApiKeyPromptDialog.ts +2 -5
  265. package/src/dialogs/ModelSelector.ts +2 -2
  266. package/src/dialogs/PersistentStorageDialog.ts +141 -0
  267. package/src/dialogs/SessionListDialog.ts +148 -0
  268. package/src/dialogs/SettingsDialog.ts +1 -0
  269. package/src/index.ts +61 -20
  270. package/src/prompts/prompts.ts +282 -0
  271. package/src/storage/app-storage.ts +27 -24
  272. package/src/storage/backends/indexeddb-storage-backend.ts +193 -0
  273. package/src/storage/store.ts +33 -0
  274. package/src/storage/stores/provider-keys-store.ts +33 -0
  275. package/src/storage/stores/sessions-store.ts +130 -0
  276. package/src/storage/stores/settings-store.ts +34 -0
  277. package/src/storage/types.ts +182 -22
  278. package/src/tools/artifacts/ArtifactElement.ts +0 -1
  279. package/src/tools/artifacts/ArtifactPill.ts +25 -0
  280. package/src/tools/artifacts/Console.ts +93 -0
  281. package/src/tools/artifacts/DocxArtifact.ts +213 -0
  282. package/src/tools/artifacts/ExcelArtifact.ts +231 -0
  283. package/src/tools/artifacts/GenericArtifact.ts +117 -0
  284. package/src/tools/artifacts/HtmlArtifact.ts +64 -94
  285. package/src/tools/artifacts/ImageArtifact.ts +116 -0
  286. package/src/tools/artifacts/MarkdownArtifact.ts +0 -1
  287. package/src/tools/artifacts/PdfArtifact.ts +201 -0
  288. package/src/tools/artifacts/SvgArtifact.ts +0 -1
  289. package/src/tools/artifacts/TextArtifact.ts +0 -1
  290. package/src/tools/artifacts/artifacts-tool-renderer.ts +298 -0
  291. package/src/tools/artifacts/artifacts.ts +190 -366
  292. package/src/tools/artifacts/index.ts +1 -0
  293. package/src/tools/extract-document.ts +250 -0
  294. package/src/tools/index.ts +25 -14
  295. package/src/tools/javascript-repl.ts +138 -160
  296. package/src/tools/renderer-registry.ts +98 -0
  297. package/src/tools/renderers/BashRenderer.ts +33 -30
  298. package/src/tools/renderers/CalculateRenderer.ts +36 -31
  299. package/src/tools/renderers/DefaultRenderer.ts +84 -21
  300. package/src/tools/renderers/GetCurrentTimeRenderer.ts +68 -23
  301. package/src/tools/types.ts +10 -2
  302. package/src/utils/i18n.ts +203 -8
  303. package/dist/state/agent-session.d.ts.map +0 -1
  304. package/dist/state/agent-session.js.map +0 -1
  305. package/dist/state/transports/AppTransport.d.ts.map +0 -1
  306. package/dist/state/transports/ProviderTransport.d.ts.map +0 -1
  307. package/dist/state/transports/ProviderTransport.js.map +0 -1
  308. package/dist/state/transports/index.js.map +0 -1
  309. package/dist/state/transports/proxy-types.js.map +0 -1
  310. package/dist/state/transports/types.d.ts +0 -11
  311. package/dist/state/transports/types.d.ts.map +0 -1
  312. package/dist/storage/backends/chrome-storage-backend.d.ts +0 -18
  313. package/dist/storage/backends/chrome-storage-backend.d.ts.map +0 -1
  314. package/dist/storage/backends/chrome-storage-backend.js +0 -67
  315. package/dist/storage/backends/chrome-storage-backend.js.map +0 -1
  316. package/dist/storage/backends/indexeddb-backend.d.ts +0 -20
  317. package/dist/storage/backends/indexeddb-backend.d.ts.map +0 -1
  318. package/dist/storage/backends/indexeddb-backend.js +0 -89
  319. package/dist/storage/backends/indexeddb-backend.js.map +0 -1
  320. package/dist/storage/backends/local-storage-backend.d.ts +0 -18
  321. package/dist/storage/backends/local-storage-backend.d.ts.map +0 -1
  322. package/dist/storage/backends/local-storage-backend.js +0 -69
  323. package/dist/storage/backends/local-storage-backend.js.map +0 -1
  324. package/dist/storage/repositories/provider-keys-repository.d.ts +0 -34
  325. package/dist/storage/repositories/provider-keys-repository.d.ts.map +0 -1
  326. package/dist/storage/repositories/provider-keys-repository.js +0 -50
  327. package/dist/storage/repositories/provider-keys-repository.js.map +0 -1
  328. package/dist/storage/repositories/settings-repository.d.ts +0 -34
  329. package/dist/storage/repositories/settings-repository.d.ts.map +0 -1
  330. package/dist/storage/repositories/settings-repository.js +0 -46
  331. package/dist/storage/repositories/settings-repository.js.map +0 -1
  332. package/src/storage/backends/chrome-storage-backend.ts +0 -82
  333. package/src/storage/backends/indexeddb-backend.ts +0 -107
  334. package/src/storage/backends/local-storage-backend.ts +0 -74
  335. package/src/storage/repositories/provider-keys-repository.ts +0 -55
  336. package/src/storage/repositories/settings-repository.ts +0 -51
  337. /package/dist/{state → agent}/transports/index.d.ts +0 -0
  338. /package/dist/{state → agent}/transports/index.js +0 -0
  339. /package/dist/{state → agent}/transports/proxy-types.d.ts +0 -0
  340. /package/dist/{state → agent}/transports/proxy-types.js +0 -0
  341. /package/dist/{state → agent}/transports/types.js +0 -0
  342. /package/dist/{state → agent}/types.d.ts +0 -0
  343. /package/dist/{state → agent}/types.js +0 -0
  344. /package/src/{state → agent}/transports/index.ts +0 -0
  345. /package/src/{state → agent}/transports/proxy-types.ts +0 -0
  346. /package/src/{state → agent}/types.ts +0 -0
@@ -1,5 +1,6 @@
1
1
  export { ArtifactElement } from "./ArtifactElement.js";
2
2
  export { type Artifact, ArtifactsPanel, type ArtifactsParams } from "./artifacts.js";
3
+ export { ArtifactsToolRenderer } from "./artifacts-tool-renderer.js";
3
4
  export { HtmlArtifact } from "./HtmlArtifact.js";
4
5
  export { MarkdownArtifact } from "./MarkdownArtifact.js";
5
6
  export { SvgArtifact } from "./SvgArtifact.js";
@@ -0,0 +1,250 @@
1
+ import { html } from "@mariozechner/mini-lit";
2
+ import type { AgentTool, ToolResultMessage } from "@mariozechner/pi-ai";
3
+ import { type Static, Type } from "@sinclair/typebox";
4
+ import { createRef, ref } from "lit/directives/ref.js";
5
+ import { FileText } from "lucide";
6
+ import { EXTRACT_DOCUMENT_DESCRIPTION } from "../prompts/prompts.js";
7
+ import { loadAttachment } from "../utils/attachment-utils.js";
8
+ import { registerToolRenderer, renderCollapsibleHeader, renderHeader } from "./renderer-registry.js";
9
+ import type { ToolRenderer, ToolRenderResult } from "./types.js";
10
+
11
+ // ============================================================================
12
+ // TYPES
13
+ // ============================================================================
14
+
15
+ const extractDocumentSchema = Type.Object({
16
+ url: Type.String({
17
+ description: "URL of the document to extract text from (PDF, DOCX, XLSX, or PPTX)",
18
+ }),
19
+ });
20
+
21
+ export type ExtractDocumentParams = Static<typeof extractDocumentSchema>;
22
+
23
+ export interface ExtractDocumentResult {
24
+ extractedText: string;
25
+ format: string;
26
+ fileName: string;
27
+ size: number;
28
+ }
29
+
30
+ // ============================================================================
31
+ // TOOL
32
+ // ============================================================================
33
+
34
+ export function createExtractDocumentTool(): AgentTool<typeof extractDocumentSchema, ExtractDocumentResult> & {
35
+ corsProxyUrl?: string;
36
+ } {
37
+ return {
38
+ label: "Extract Document",
39
+ name: "extract_document",
40
+ corsProxyUrl: undefined, // Can be set by consumer (e.g., from user settings)
41
+ description: EXTRACT_DOCUMENT_DESCRIPTION,
42
+ parameters: extractDocumentSchema,
43
+ execute: async function (_toolCallId: string, args: ExtractDocumentParams, signal?: AbortSignal) {
44
+ if (signal?.aborted) {
45
+ throw new Error("Extract document aborted");
46
+ }
47
+
48
+ const url = args.url.trim();
49
+ if (!url) {
50
+ throw new Error("URL is required");
51
+ }
52
+
53
+ // Validate URL format
54
+ try {
55
+ new URL(url);
56
+ } catch {
57
+ throw new Error(`Invalid URL: ${url}`);
58
+ }
59
+
60
+ // Determine fetch URL (with or without CORS proxy)
61
+ let fetchUrl = url;
62
+ if (this.corsProxyUrl) {
63
+ fetchUrl = this.corsProxyUrl + encodeURIComponent(url);
64
+ }
65
+
66
+ // Size limit: 50MB
67
+ const MAX_SIZE = 50 * 1024 * 1024;
68
+
69
+ try {
70
+ // Attempt to fetch the document
71
+ const response = await fetch(fetchUrl, { signal });
72
+
73
+ if (!response.ok) {
74
+ throw new Error(
75
+ `TELL USER: Unable to download the document (${response.status} ${response.statusText}). The site likely blocks automated downloads.\n\n` +
76
+ `INSTRUCT USER: Please download the file manually and attach it to your message using the attachment button (paperclip icon) in the message input area. I can then extract the text from the attached file.`,
77
+ );
78
+ }
79
+
80
+ // Check size before downloading
81
+ const contentLength = response.headers.get("content-length");
82
+ if (contentLength) {
83
+ const size = Number.parseInt(contentLength, 10);
84
+ if (size > MAX_SIZE) {
85
+ throw new Error(
86
+ `Document is too large (${(size / 1024 / 1024).toFixed(1)}MB). Maximum supported size is 50MB.`,
87
+ );
88
+ }
89
+ }
90
+
91
+ // Download the document
92
+ const arrayBuffer = await response.arrayBuffer();
93
+ const size = arrayBuffer.byteLength;
94
+
95
+ if (size > MAX_SIZE) {
96
+ throw new Error(
97
+ `Document is too large (${(size / 1024 / 1024).toFixed(1)}MB). Maximum supported size is 50MB.`,
98
+ );
99
+ }
100
+
101
+ // Extract filename from URL
102
+ const urlParts = url.split("/");
103
+ const fileName = urlParts[urlParts.length - 1]?.split("?")[0] || "document";
104
+
105
+ // Use loadAttachment to process the document
106
+ const attachment = await loadAttachment(arrayBuffer, fileName);
107
+
108
+ if (!attachment.extractedText) {
109
+ const mimeType = response.headers.get("content-type") || "unknown";
110
+ throw new Error(
111
+ `Document format not supported. Supported formats:\n` +
112
+ `- PDF (.pdf)\n` +
113
+ `- Word (.docx)\n` +
114
+ `- Excel (.xlsx, .xls)\n` +
115
+ `- PowerPoint (.pptx)\n\n` +
116
+ `Detected: ${mimeType}`,
117
+ );
118
+ }
119
+
120
+ // Determine format from attachment
121
+ let format = "unknown";
122
+ if (attachment.mimeType.includes("pdf")) {
123
+ format = "pdf";
124
+ } else if (attachment.mimeType.includes("wordprocessingml")) {
125
+ format = "docx";
126
+ } else if (attachment.mimeType.includes("spreadsheetml") || attachment.mimeType.includes("ms-excel")) {
127
+ format = "xlsx";
128
+ } else if (attachment.mimeType.includes("presentationml")) {
129
+ format = "pptx";
130
+ }
131
+
132
+ return {
133
+ output: attachment.extractedText,
134
+ details: {
135
+ extractedText: attachment.extractedText,
136
+ format,
137
+ fileName: attachment.fileName,
138
+ size: attachment.size,
139
+ },
140
+ };
141
+ } catch (error: any) {
142
+ // Handle CORS errors specifically
143
+ if (error.name === "TypeError" && error.message.includes("Failed to fetch")) {
144
+ throw new Error(
145
+ `TELL USER: Unable to fetch the document due to CORS restrictions (the server blocks requests from browser extensions).\n\n` +
146
+ `To fix this, you need to configure a CORS proxy in Sitegeist settings:\n` +
147
+ `1. Open Sitegeist settings\n` +
148
+ `2. Find "CORS Proxy URL" setting\n` +
149
+ `3. Enter a proxy URL like: https://corsproxy.io/?\n` +
150
+ `4. Save and try again\n\n` +
151
+ `Would you like me to explain what a CORS proxy is and how to set one up?`,
152
+ );
153
+ }
154
+
155
+ // Re-throw other errors
156
+ throw error;
157
+ }
158
+ },
159
+ };
160
+ }
161
+
162
+ // Export a default instance
163
+ export const extractDocumentTool = createExtractDocumentTool();
164
+
165
+ // ============================================================================
166
+ // RENDERER
167
+ // ============================================================================
168
+
169
+ export const extractDocumentRenderer: ToolRenderer<ExtractDocumentParams, ExtractDocumentResult> = {
170
+ render(
171
+ params: ExtractDocumentParams | undefined,
172
+ result: ToolResultMessage<ExtractDocumentResult> | undefined,
173
+ isStreaming?: boolean,
174
+ ): ToolRenderResult {
175
+ // Determine status
176
+ const state = result ? (result.isError ? "error" : "complete") : isStreaming ? "inprogress" : "complete";
177
+
178
+ // Create refs for collapsible sections
179
+ const contentRef = createRef<HTMLDivElement>();
180
+ const chevronRef = createRef<HTMLSpanElement>();
181
+
182
+ // With result: show params + result
183
+ if (result && params) {
184
+ const details = result.details;
185
+ const title = details
186
+ ? result.isError
187
+ ? `Failed to extract ${details.fileName || "document"}`
188
+ : `Extracted text from ${details.fileName} (${details.format.toUpperCase()}, ${(details.size / 1024).toFixed(1)}KB)`
189
+ : result.isError
190
+ ? "Failed to extract document"
191
+ : "Extracted text from document";
192
+
193
+ const output = result.output || "";
194
+
195
+ return {
196
+ content: html`
197
+ <div>
198
+ ${renderCollapsibleHeader(state, FileText, title, contentRef, chevronRef, false)}
199
+ <div ${ref(contentRef)} class="max-h-0 overflow-hidden transition-all duration-300 space-y-3">
200
+ ${
201
+ params.url
202
+ ? html`<div class="text-sm text-gray-600 dark:text-gray-400">
203
+ <strong>URL:</strong> ${params.url}
204
+ </div>`
205
+ : ""
206
+ }
207
+ ${
208
+ output && !result.isError
209
+ ? html`<code-block .code=${output} language="plaintext"></code-block>`
210
+ : ""
211
+ }
212
+ ${
213
+ result.isError && output
214
+ ? html`<console-block .content=${output} .variant="error"></console-block>`
215
+ : ""
216
+ }
217
+ </div>
218
+ </div>
219
+ `,
220
+ isCustom: false,
221
+ };
222
+ }
223
+
224
+ // Just params (streaming or waiting for result)
225
+ if (params) {
226
+ const title = "Extracting document...";
227
+
228
+ return {
229
+ content: html`
230
+ <div>
231
+ ${renderCollapsibleHeader(state, FileText, title, contentRef, chevronRef, false)}
232
+ <div ${ref(contentRef)} class="max-h-0 overflow-hidden transition-all duration-300">
233
+ <div class="text-sm text-gray-600 dark:text-gray-400"><strong>URL:</strong> ${params.url}</div>
234
+ </div>
235
+ </div>
236
+ `,
237
+ isCustom: false,
238
+ };
239
+ }
240
+
241
+ // No params or result yet
242
+ return {
243
+ content: renderHeader(state, FileText, "Preparing extraction..."),
244
+ isCustom: false,
245
+ };
246
+ },
247
+ };
248
+
249
+ // Auto-register the renderer
250
+ registerToolRenderer("extract_document", extractDocumentRenderer);
@@ -1,35 +1,46 @@
1
- import type { TemplateResult } from "@mariozechner/mini-lit";
2
1
  import type { ToolResultMessage } from "@mariozechner/pi-ai";
2
+ import "./javascript-repl.js"; // Auto-registers the renderer
3
+ import "./extract-document.js"; // Auto-registers the renderer
3
4
  import { getToolRenderer, registerToolRenderer } from "./renderer-registry.js";
4
5
  import { BashRenderer } from "./renderers/BashRenderer.js";
5
6
  import { DefaultRenderer } from "./renderers/DefaultRenderer.js";
6
- import "./javascript-repl.js"; // Auto-registers the renderer
7
+ import type { ToolRenderResult } from "./types.js";
7
8
 
8
9
  // Register all built-in tool renderers
9
10
  registerToolRenderer("bash", new BashRenderer());
10
11
 
11
12
  const defaultRenderer = new DefaultRenderer();
12
13
 
14
+ // Global flag to force default JSON rendering for all tools
15
+ let showJsonMode = false;
16
+
13
17
  /**
14
- * Render tool call parameters
18
+ * Enable or disable show JSON mode
19
+ * When enabled, all tool renderers will use the default JSON renderer
15
20
  */
16
- export function renderToolParams(toolName: string, params: any, isStreaming?: boolean): TemplateResult {
17
- const renderer = getToolRenderer(toolName);
18
- if (renderer) {
19
- return renderer.renderParams(params, isStreaming);
20
- }
21
- return defaultRenderer.renderParams(params, isStreaming);
21
+ export function setShowJsonMode(enabled: boolean): void {
22
+ showJsonMode = enabled;
22
23
  }
23
24
 
24
25
  /**
25
- * Render tool result
26
+ * Render tool - unified function that handles params, result, and streaming state
26
27
  */
27
- export function renderToolResult(toolName: string, params: any, result: ToolResultMessage): TemplateResult {
28
+ export function renderTool(
29
+ toolName: string,
30
+ params: any | undefined,
31
+ result: ToolResultMessage | undefined,
32
+ isStreaming?: boolean,
33
+ ): ToolRenderResult {
34
+ // If showJsonMode is enabled, always use the default renderer
35
+ if (showJsonMode) {
36
+ return defaultRenderer.render(params, result, isStreaming);
37
+ }
38
+
28
39
  const renderer = getToolRenderer(toolName);
29
40
  if (renderer) {
30
- return renderer.renderResult(params, result);
41
+ return renderer.render(params, result, isStreaming);
31
42
  }
32
- return defaultRenderer.renderResult(params, result);
43
+ return defaultRenderer.render(params, result, isStreaming);
33
44
  }
34
45
 
35
- export { registerToolRenderer, getToolRenderer };
46
+ export { getToolRenderer, registerToolRenderer };