@draht/web-ui 2026.3.2-2

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 (372) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/README.md +601 -0
  3. package/dist/ChatPanel.d.ts +28 -0
  4. package/dist/ChatPanel.d.ts.map +1 -0
  5. package/dist/ChatPanel.js +193 -0
  6. package/dist/ChatPanel.js.map +1 -0
  7. package/dist/app.css +2 -0
  8. package/dist/components/AgentInterface.d.ts +39 -0
  9. package/dist/components/AgentInterface.d.ts.map +1 -0
  10. package/dist/components/AgentInterface.js +384 -0
  11. package/dist/components/AgentInterface.js.map +1 -0
  12. package/dist/components/AttachmentTile.d.ts +12 -0
  13. package/dist/components/AttachmentTile.d.ts.map +1 -0
  14. package/dist/components/AttachmentTile.js +110 -0
  15. package/dist/components/AttachmentTile.js.map +1 -0
  16. package/dist/components/ConsoleBlock.d.ts +12 -0
  17. package/dist/components/ConsoleBlock.d.ts.map +1 -0
  18. package/dist/components/ConsoleBlock.js +81 -0
  19. package/dist/components/ConsoleBlock.js.map +1 -0
  20. package/dist/components/CustomProviderCard.d.ts +17 -0
  21. package/dist/components/CustomProviderCard.d.ts.map +1 -0
  22. package/dist/components/CustomProviderCard.js +112 -0
  23. package/dist/components/CustomProviderCard.js.map +1 -0
  24. package/dist/components/ExpandableSection.d.ts +15 -0
  25. package/dist/components/ExpandableSection.d.ts.map +1 -0
  26. package/dist/components/ExpandableSection.js +61 -0
  27. package/dist/components/ExpandableSection.js.map +1 -0
  28. package/dist/components/Input.d.ts +26 -0
  29. package/dist/components/Input.d.ts.map +1 -0
  30. package/dist/components/Input.js +57 -0
  31. package/dist/components/Input.js.map +1 -0
  32. package/dist/components/MessageEditor.d.ts +44 -0
  33. package/dist/components/MessageEditor.d.ts.map +1 -0
  34. package/dist/components/MessageEditor.js +418 -0
  35. package/dist/components/MessageEditor.js.map +1 -0
  36. package/dist/components/MessageList.d.ts +14 -0
  37. package/dist/components/MessageList.d.ts.map +1 -0
  38. package/dist/components/MessageList.js +104 -0
  39. package/dist/components/MessageList.js.map +1 -0
  40. package/dist/components/Messages.d.ts +95 -0
  41. package/dist/components/Messages.d.ts.map +1 -0
  42. package/dist/components/Messages.js +363 -0
  43. package/dist/components/Messages.js.map +1 -0
  44. package/dist/components/ProviderKeyInput.d.ts +16 -0
  45. package/dist/components/ProviderKeyInput.d.ts.map +1 -0
  46. package/dist/components/ProviderKeyInput.js +168 -0
  47. package/dist/components/ProviderKeyInput.js.map +1 -0
  48. package/dist/components/SandboxedIframe.d.ts +85 -0
  49. package/dist/components/SandboxedIframe.d.ts.map +1 -0
  50. package/dist/components/SandboxedIframe.js +518 -0
  51. package/dist/components/SandboxedIframe.js.map +1 -0
  52. package/dist/components/StreamingMessageContainer.d.ts +19 -0
  53. package/dist/components/StreamingMessageContainer.d.ts.map +1 -0
  54. package/dist/components/StreamingMessageContainer.js +117 -0
  55. package/dist/components/StreamingMessageContainer.js.map +1 -0
  56. package/dist/components/ThinkingBlock.d.ts +11 -0
  57. package/dist/components/ThinkingBlock.d.ts.map +1 -0
  58. package/dist/components/ThinkingBlock.js +56 -0
  59. package/dist/components/ThinkingBlock.js.map +1 -0
  60. package/dist/components/message-renderer-registry.d.ts +12 -0
  61. package/dist/components/message-renderer-registry.d.ts.map +1 -0
  62. package/dist/components/message-renderer-registry.js +12 -0
  63. package/dist/components/message-renderer-registry.js.map +1 -0
  64. package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts +35 -0
  65. package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts.map +1 -0
  66. package/dist/components/sandbox/ArtifactsRuntimeProvider.js +192 -0
  67. package/dist/components/sandbox/ArtifactsRuntimeProvider.js.map +1 -0
  68. package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts +17 -0
  69. package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts.map +1 -0
  70. package/dist/components/sandbox/AttachmentsRuntimeProvider.js +65 -0
  71. package/dist/components/sandbox/AttachmentsRuntimeProvider.js.map +1 -0
  72. package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts +42 -0
  73. package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts.map +1 -0
  74. package/dist/components/sandbox/ConsoleRuntimeProvider.js +159 -0
  75. package/dist/components/sandbox/ConsoleRuntimeProvider.js.map +1 -0
  76. package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts +30 -0
  77. package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts.map +1 -0
  78. package/dist/components/sandbox/FileDownloadRuntimeProvider.js +95 -0
  79. package/dist/components/sandbox/FileDownloadRuntimeProvider.js.map +1 -0
  80. package/dist/components/sandbox/RuntimeMessageBridge.d.ts +19 -0
  81. package/dist/components/sandbox/RuntimeMessageBridge.d.ts.map +1 -0
  82. package/dist/components/sandbox/RuntimeMessageBridge.js +74 -0
  83. package/dist/components/sandbox/RuntimeMessageBridge.js.map +1 -0
  84. package/dist/components/sandbox/RuntimeMessageRouter.d.ts +65 -0
  85. package/dist/components/sandbox/RuntimeMessageRouter.d.ts.map +1 -0
  86. package/dist/components/sandbox/RuntimeMessageRouter.js +166 -0
  87. package/dist/components/sandbox/RuntimeMessageRouter.js.map +1 -0
  88. package/dist/components/sandbox/SandboxRuntimeProvider.d.ts +48 -0
  89. package/dist/components/sandbox/SandboxRuntimeProvider.d.ts.map +1 -0
  90. package/dist/components/sandbox/SandboxRuntimeProvider.js +2 -0
  91. package/dist/components/sandbox/SandboxRuntimeProvider.js.map +1 -0
  92. package/dist/dialogs/ApiKeyPromptDialog.d.ts +15 -0
  93. package/dist/dialogs/ApiKeyPromptDialog.d.ts.map +1 -0
  94. package/dist/dialogs/ApiKeyPromptDialog.js +77 -0
  95. package/dist/dialogs/ApiKeyPromptDialog.js.map +1 -0
  96. package/dist/dialogs/AttachmentOverlay.d.ts +32 -0
  97. package/dist/dialogs/AttachmentOverlay.d.ts.map +1 -0
  98. package/dist/dialogs/AttachmentOverlay.js +576 -0
  99. package/dist/dialogs/AttachmentOverlay.js.map +1 -0
  100. package/dist/dialogs/CustomProviderDialog.d.ts +25 -0
  101. package/dist/dialogs/CustomProviderDialog.d.ts.map +1 -0
  102. package/dist/dialogs/CustomProviderDialog.js +270 -0
  103. package/dist/dialogs/CustomProviderDialog.js.map +1 -0
  104. package/dist/dialogs/ModelSelector.d.ts +27 -0
  105. package/dist/dialogs/ModelSelector.d.ts.map +1 -0
  106. package/dist/dialogs/ModelSelector.js +320 -0
  107. package/dist/dialogs/ModelSelector.js.map +1 -0
  108. package/dist/dialogs/PersistentStorageDialog.d.ts +17 -0
  109. package/dist/dialogs/PersistentStorageDialog.d.ts.map +1 -0
  110. package/dist/dialogs/PersistentStorageDialog.js +144 -0
  111. package/dist/dialogs/PersistentStorageDialog.js.map +1 -0
  112. package/dist/dialogs/ProvidersModelsTab.d.ts +20 -0
  113. package/dist/dialogs/ProvidersModelsTab.d.ts.map +1 -0
  114. package/dist/dialogs/ProvidersModelsTab.js +188 -0
  115. package/dist/dialogs/ProvidersModelsTab.js.map +1 -0
  116. package/dist/dialogs/SessionListDialog.d.ts +19 -0
  117. package/dist/dialogs/SessionListDialog.d.ts.map +1 -0
  118. package/dist/dialogs/SessionListDialog.js +152 -0
  119. package/dist/dialogs/SessionListDialog.js.map +1 -0
  120. package/dist/dialogs/SettingsDialog.d.ts +30 -0
  121. package/dist/dialogs/SettingsDialog.d.ts.map +1 -0
  122. package/dist/dialogs/SettingsDialog.js +222 -0
  123. package/dist/dialogs/SettingsDialog.js.map +1 -0
  124. package/dist/index.d.ts +67 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +70 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/prompts/prompts.d.ts +11 -0
  129. package/dist/prompts/prompts.d.ts.map +1 -0
  130. package/dist/prompts/prompts.js +272 -0
  131. package/dist/prompts/prompts.js.map +1 -0
  132. package/dist/storage/app-storage.d.ts +33 -0
  133. package/dist/storage/app-storage.d.ts.map +1 -0
  134. package/dist/storage/app-storage.js +43 -0
  135. package/dist/storage/app-storage.js.map +1 -0
  136. package/dist/storage/backends/indexeddb-storage-backend.d.ts +27 -0
  137. package/dist/storage/backends/indexeddb-storage-backend.d.ts.map +1 -0
  138. package/dist/storage/backends/indexeddb-storage-backend.js +167 -0
  139. package/dist/storage/backends/indexeddb-storage-backend.js.map +1 -0
  140. package/dist/storage/store.d.ts +23 -0
  141. package/dist/storage/store.d.ts.map +1 -0
  142. package/dist/storage/store.js +24 -0
  143. package/dist/storage/store.js.map +1 -0
  144. package/dist/storage/stores/custom-providers-store.d.ts +25 -0
  145. package/dist/storage/stores/custom-providers-store.d.ts.map +1 -0
  146. package/dist/storage/stores/custom-providers-store.js +35 -0
  147. package/dist/storage/stores/custom-providers-store.js.map +1 -0
  148. package/dist/storage/stores/provider-keys-store.d.ts +14 -0
  149. package/dist/storage/stores/provider-keys-store.d.ts.map +1 -0
  150. package/dist/storage/stores/provider-keys-store.js +27 -0
  151. package/dist/storage/stores/provider-keys-store.js.map +1 -0
  152. package/dist/storage/stores/sessions-store.d.ts +32 -0
  153. package/dist/storage/stores/sessions-store.d.ts.map +1 -0
  154. package/dist/storage/stores/sessions-store.js +113 -0
  155. package/dist/storage/stores/sessions-store.js.map +1 -0
  156. package/dist/storage/stores/settings-store.d.ts +14 -0
  157. package/dist/storage/stores/settings-store.d.ts.map +1 -0
  158. package/dist/storage/stores/settings-store.js +28 -0
  159. package/dist/storage/stores/settings-store.js.map +1 -0
  160. package/dist/storage/types.d.ts +176 -0
  161. package/dist/storage/types.d.ts.map +1 -0
  162. package/dist/storage/types.js +2 -0
  163. package/dist/storage/types.js.map +1 -0
  164. package/dist/tools/artifacts/ArtifactElement.d.ts +9 -0
  165. package/dist/tools/artifacts/ArtifactElement.d.ts.map +1 -0
  166. package/dist/tools/artifacts/ArtifactElement.js +8 -0
  167. package/dist/tools/artifacts/ArtifactElement.js.map +1 -0
  168. package/dist/tools/artifacts/ArtifactPill.d.ts +4 -0
  169. package/dist/tools/artifacts/ArtifactPill.d.ts.map +1 -0
  170. package/dist/tools/artifacts/ArtifactPill.js +23 -0
  171. package/dist/tools/artifacts/ArtifactPill.js.map +1 -0
  172. package/dist/tools/artifacts/Console.d.ts +18 -0
  173. package/dist/tools/artifacts/Console.d.ts.map +1 -0
  174. package/dist/tools/artifacts/Console.js +92 -0
  175. package/dist/tools/artifacts/Console.js.map +1 -0
  176. package/dist/tools/artifacts/DocxArtifact.d.ts +22 -0
  177. package/dist/tools/artifacts/DocxArtifact.d.ts.map +1 -0
  178. package/dist/tools/artifacts/DocxArtifact.js +205 -0
  179. package/dist/tools/artifacts/DocxArtifact.js.map +1 -0
  180. package/dist/tools/artifacts/ExcelArtifact.d.ts +24 -0
  181. package/dist/tools/artifacts/ExcelArtifact.d.ts.map +1 -0
  182. package/dist/tools/artifacts/ExcelArtifact.js +213 -0
  183. package/dist/tools/artifacts/ExcelArtifact.js.map +1 -0
  184. package/dist/tools/artifacts/GenericArtifact.d.ts +19 -0
  185. package/dist/tools/artifacts/GenericArtifact.d.ts.map +1 -0
  186. package/dist/tools/artifacts/GenericArtifact.js +114 -0
  187. package/dist/tools/artifacts/GenericArtifact.js.map +1 -0
  188. package/dist/tools/artifacts/HtmlArtifact.d.ts +27 -0
  189. package/dist/tools/artifacts/HtmlArtifact.d.ts.map +1 -0
  190. package/dist/tools/artifacts/HtmlArtifact.js +187 -0
  191. package/dist/tools/artifacts/HtmlArtifact.js.map +1 -0
  192. package/dist/tools/artifacts/ImageArtifact.d.ts +20 -0
  193. package/dist/tools/artifacts/ImageArtifact.d.ts.map +1 -0
  194. package/dist/tools/artifacts/ImageArtifact.js +117 -0
  195. package/dist/tools/artifacts/ImageArtifact.js.map +1 -0
  196. package/dist/tools/artifacts/MarkdownArtifact.d.ts +19 -0
  197. package/dist/tools/artifacts/MarkdownArtifact.d.ts.map +1 -0
  198. package/dist/tools/artifacts/MarkdownArtifact.js +79 -0
  199. package/dist/tools/artifacts/MarkdownArtifact.js.map +1 -0
  200. package/dist/tools/artifacts/PdfArtifact.d.ts +25 -0
  201. package/dist/tools/artifacts/PdfArtifact.d.ts.map +1 -0
  202. package/dist/tools/artifacts/PdfArtifact.js +181 -0
  203. package/dist/tools/artifacts/PdfArtifact.js.map +1 -0
  204. package/dist/tools/artifacts/SvgArtifact.d.ts +18 -0
  205. package/dist/tools/artifacts/SvgArtifact.d.ts.map +1 -0
  206. package/dist/tools/artifacts/SvgArtifact.js +75 -0
  207. package/dist/tools/artifacts/SvgArtifact.js.map +1 -0
  208. package/dist/tools/artifacts/TextArtifact.d.ts +19 -0
  209. package/dist/tools/artifacts/TextArtifact.d.ts.map +1 -0
  210. package/dist/tools/artifacts/TextArtifact.js +141 -0
  211. package/dist/tools/artifacts/TextArtifact.js.map +1 -0
  212. package/dist/tools/artifacts/artifacts-tool-renderer.d.ts +11 -0
  213. package/dist/tools/artifacts/artifacts-tool-renderer.d.ts.map +1 -0
  214. package/dist/tools/artifacts/artifacts-tool-renderer.js +273 -0
  215. package/dist/tools/artifacts/artifacts-tool-renderer.js.map +1 -0
  216. package/dist/tools/artifacts/artifacts.d.ts +63 -0
  217. package/dist/tools/artifacts/artifacts.d.ts.map +1 -0
  218. package/dist/tools/artifacts/artifacts.js +664 -0
  219. package/dist/tools/artifacts/artifacts.js.map +1 -0
  220. package/dist/tools/artifacts/index.d.ts +8 -0
  221. package/dist/tools/artifacts/index.d.ts.map +1 -0
  222. package/dist/tools/artifacts/index.js +8 -0
  223. package/dist/tools/artifacts/index.js.map +1 -0
  224. package/dist/tools/extract-document.d.ts +24 -0
  225. package/dist/tools/extract-document.d.ts.map +1 -0
  226. package/dist/tools/extract-document.js +216 -0
  227. package/dist/tools/extract-document.js.map +1 -0
  228. package/dist/tools/index.d.ts +16 -0
  229. package/dist/tools/index.d.ts.map +1 -0
  230. package/dist/tools/index.js +33 -0
  231. package/dist/tools/index.js.map +1 -0
  232. package/dist/tools/javascript-repl.d.ts +44 -0
  233. package/dist/tools/javascript-repl.d.ts.map +1 -0
  234. package/dist/tools/javascript-repl.js +224 -0
  235. package/dist/tools/javascript-repl.js.map +1 -0
  236. package/dist/tools/renderer-registry.d.ts +23 -0
  237. package/dist/tools/renderer-registry.d.ts.map +1 -0
  238. package/dist/tools/renderer-registry.js +107 -0
  239. package/dist/tools/renderer-registry.js.map +1 -0
  240. package/dist/tools/renderers/BashRenderer.d.ts +10 -0
  241. package/dist/tools/renderers/BashRenderer.d.ts.map +1 -0
  242. package/dist/tools/renderers/BashRenderer.js +42 -0
  243. package/dist/tools/renderers/BashRenderer.js.map +1 -0
  244. package/dist/tools/renderers/CalculateRenderer.d.ts +10 -0
  245. package/dist/tools/renderers/CalculateRenderer.d.ts.map +1 -0
  246. package/dist/tools/renderers/CalculateRenderer.js +45 -0
  247. package/dist/tools/renderers/CalculateRenderer.js.map +1 -0
  248. package/dist/tools/renderers/DefaultRenderer.d.ts +6 -0
  249. package/dist/tools/renderers/DefaultRenderer.d.ts.map +1 -0
  250. package/dist/tools/renderers/DefaultRenderer.js +94 -0
  251. package/dist/tools/renderers/DefaultRenderer.js.map +1 -0
  252. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts +10 -0
  253. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -0
  254. package/dist/tools/renderers/GetCurrentTimeRenderer.js +72 -0
  255. package/dist/tools/renderers/GetCurrentTimeRenderer.js.map +1 -0
  256. package/dist/tools/types.d.ts +10 -0
  257. package/dist/tools/types.d.ts.map +1 -0
  258. package/dist/tools/types.js +2 -0
  259. package/dist/tools/types.js.map +1 -0
  260. package/dist/utils/attachment-utils.d.ts +19 -0
  261. package/dist/utils/attachment-utils.d.ts.map +1 -0
  262. package/dist/utils/attachment-utils.js +415 -0
  263. package/dist/utils/attachment-utils.js.map +1 -0
  264. package/dist/utils/auth-token.d.ts +3 -0
  265. package/dist/utils/auth-token.d.ts.map +1 -0
  266. package/dist/utils/auth-token.js +19 -0
  267. package/dist/utils/auth-token.js.map +1 -0
  268. package/dist/utils/format.d.ts +6 -0
  269. package/dist/utils/format.d.ts.map +1 -0
  270. package/dist/utils/format.js +47 -0
  271. package/dist/utils/format.js.map +1 -0
  272. package/dist/utils/i18n.d.ts +636 -0
  273. package/dist/utils/i18n.d.ts.map +1 -0
  274. package/dist/utils/i18n.js +418 -0
  275. package/dist/utils/i18n.js.map +1 -0
  276. package/dist/utils/model-discovery.d.ts +38 -0
  277. package/dist/utils/model-discovery.d.ts.map +1 -0
  278. package/dist/utils/model-discovery.js +243 -0
  279. package/dist/utils/model-discovery.js.map +1 -0
  280. package/dist/utils/proxy-utils.d.ts +45 -0
  281. package/dist/utils/proxy-utils.d.ts.map +1 -0
  282. package/dist/utils/proxy-utils.js +116 -0
  283. package/dist/utils/proxy-utils.js.map +1 -0
  284. package/dist/utils/test-sessions.d.ts +359 -0
  285. package/dist/utils/test-sessions.d.ts.map +1 -0
  286. package/dist/utils/test-sessions.js +2325 -0
  287. package/dist/utils/test-sessions.js.map +1 -0
  288. package/example/README.md +61 -0
  289. package/example/index.html +13 -0
  290. package/example/package.json +25 -0
  291. package/example/src/app.css +1 -0
  292. package/example/src/custom-messages.ts +99 -0
  293. package/example/src/env.d.ts +1 -0
  294. package/example/src/main.ts +421 -0
  295. package/example/tsconfig.json +23 -0
  296. package/example/vite.config.ts +6 -0
  297. package/package.json +53 -0
  298. package/scripts/count-prompt-tokens.ts +88 -0
  299. package/src/ChatPanel.ts +207 -0
  300. package/src/app.css +68 -0
  301. package/src/components/AgentInterface.ts +388 -0
  302. package/src/components/AttachmentTile.ts +107 -0
  303. package/src/components/ConsoleBlock.ts +72 -0
  304. package/src/components/CustomProviderCard.ts +100 -0
  305. package/src/components/ExpandableSection.ts +46 -0
  306. package/src/components/Input.ts +113 -0
  307. package/src/components/MessageEditor.ts +400 -0
  308. package/src/components/MessageList.ts +95 -0
  309. package/src/components/Messages.ts +383 -0
  310. package/src/components/ProviderKeyInput.ts +153 -0
  311. package/src/components/SandboxedIframe.ts +626 -0
  312. package/src/components/StreamingMessageContainer.ts +103 -0
  313. package/src/components/ThinkingBlock.ts +43 -0
  314. package/src/components/message-renderer-registry.ts +28 -0
  315. package/src/components/sandbox/ArtifactsRuntimeProvider.ts +219 -0
  316. package/src/components/sandbox/AttachmentsRuntimeProvider.ts +66 -0
  317. package/src/components/sandbox/ConsoleRuntimeProvider.ts +186 -0
  318. package/src/components/sandbox/FileDownloadRuntimeProvider.ts +110 -0
  319. package/src/components/sandbox/RuntimeMessageBridge.ts +82 -0
  320. package/src/components/sandbox/RuntimeMessageRouter.ts +216 -0
  321. package/src/components/sandbox/SandboxRuntimeProvider.ts +52 -0
  322. package/src/dialogs/ApiKeyPromptDialog.ts +75 -0
  323. package/src/dialogs/AttachmentOverlay.ts +636 -0
  324. package/src/dialogs/CustomProviderDialog.ts +274 -0
  325. package/src/dialogs/ModelSelector.ts +313 -0
  326. package/src/dialogs/PersistentStorageDialog.ts +144 -0
  327. package/src/dialogs/ProvidersModelsTab.ts +212 -0
  328. package/src/dialogs/SessionListDialog.ts +150 -0
  329. package/src/dialogs/SettingsDialog.ts +214 -0
  330. package/src/index.ts +119 -0
  331. package/src/prompts/prompts.ts +282 -0
  332. package/src/storage/app-storage.ts +60 -0
  333. package/src/storage/backends/indexeddb-storage-backend.ts +193 -0
  334. package/src/storage/store.ts +33 -0
  335. package/src/storage/stores/custom-providers-store.ts +62 -0
  336. package/src/storage/stores/provider-keys-store.ts +33 -0
  337. package/src/storage/stores/sessions-store.ts +136 -0
  338. package/src/storage/stores/settings-store.ts +34 -0
  339. package/src/storage/types.ts +206 -0
  340. package/src/tools/artifacts/ArtifactElement.ts +14 -0
  341. package/src/tools/artifacts/ArtifactPill.ts +26 -0
  342. package/src/tools/artifacts/Console.ts +93 -0
  343. package/src/tools/artifacts/DocxArtifact.ts +213 -0
  344. package/src/tools/artifacts/ExcelArtifact.ts +231 -0
  345. package/src/tools/artifacts/GenericArtifact.ts +117 -0
  346. package/src/tools/artifacts/HtmlArtifact.ts +195 -0
  347. package/src/tools/artifacts/ImageArtifact.ts +116 -0
  348. package/src/tools/artifacts/MarkdownArtifact.ts +82 -0
  349. package/src/tools/artifacts/PdfArtifact.ts +201 -0
  350. package/src/tools/artifacts/SvgArtifact.ts +78 -0
  351. package/src/tools/artifacts/TextArtifact.ts +148 -0
  352. package/src/tools/artifacts/artifacts-tool-renderer.ts +310 -0
  353. package/src/tools/artifacts/artifacts.ts +713 -0
  354. package/src/tools/artifacts/index.ts +7 -0
  355. package/src/tools/extract-document.ts +275 -0
  356. package/src/tools/index.ts +46 -0
  357. package/src/tools/javascript-repl.ts +293 -0
  358. package/src/tools/renderer-registry.ts +130 -0
  359. package/src/tools/renderers/BashRenderer.ts +52 -0
  360. package/src/tools/renderers/CalculateRenderer.ts +58 -0
  361. package/src/tools/renderers/DefaultRenderer.ts +103 -0
  362. package/src/tools/renderers/GetCurrentTimeRenderer.ts +92 -0
  363. package/src/tools/types.ts +15 -0
  364. package/src/utils/attachment-utils.ts +472 -0
  365. package/src/utils/auth-token.ts +22 -0
  366. package/src/utils/format.ts +42 -0
  367. package/src/utils/i18n.ts +653 -0
  368. package/src/utils/model-discovery.ts +277 -0
  369. package/src/utils/proxy-utils.ts +134 -0
  370. package/src/utils/test-sessions.ts +2357 -0
  371. package/tsconfig.build.json +20 -0
  372. package/tsconfig.json +7 -0
@@ -0,0 +1,17 @@
1
+ import { DialogBase } from "@mariozechner/mini-lit/dist/DialogBase.js";
2
+ export declare class PersistentStorageDialog extends DialogBase {
3
+ private requesting;
4
+ private resolvePromise?;
5
+ protected modalWidth: string;
6
+ protected modalHeight: string;
7
+ /**
8
+ * Request persistent storage permission.
9
+ * Returns true if browser granted persistent storage, false otherwise.
10
+ */
11
+ static request(): Promise<boolean>;
12
+ private handleGrant;
13
+ private handleDeny;
14
+ close(): void;
15
+ protected renderContent(): import("lit").TemplateResult<1>;
16
+ }
17
+ //# sourceMappingURL=PersistentStorageDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistentStorageDialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/PersistentStorageDialog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAKvE,qBACa,uBAAwB,SAAQ,UAAU;IAC7C,OAAO,CAAC,UAAU,CAAS;IAEpC,OAAO,CAAC,cAAc,CAAC,CAAkC;IAEzD,SAAS,CAAC,UAAU,SAAsB;IAC1C,SAAS,CAAC,WAAW,SAAU;IAE/B;;;OAGG;IACH,OAAa,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAyCvC;IAED,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,UAAU;IAQT,KAAK,SAKb;IAED,UAAmB,aAAa,oCAwD/B;CACD"}
@@ -0,0 +1,144 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Button } from "@mariozechner/mini-lit/dist/Button.js";
8
+ import { DialogContent, DialogHeader } from "@mariozechner/mini-lit/dist/Dialog.js";
9
+ import { DialogBase } from "@mariozechner/mini-lit/dist/DialogBase.js";
10
+ import { html } from "lit";
11
+ import { customElement, state } from "lit/decorators.js";
12
+ import { i18n } from "../utils/i18n.js";
13
+ let PersistentStorageDialog = class PersistentStorageDialog extends DialogBase {
14
+ requesting = false;
15
+ resolvePromise;
16
+ modalWidth = "min(500px, 90vw)";
17
+ modalHeight = "auto";
18
+ /**
19
+ * Request persistent storage permission.
20
+ * Returns true if browser granted persistent storage, false otherwise.
21
+ */
22
+ static async request() {
23
+ // Check if already persisted
24
+ if (navigator.storage?.persisted) {
25
+ const alreadyPersisted = await navigator.storage.persisted();
26
+ if (alreadyPersisted) {
27
+ console.log("✓ Persistent storage already granted");
28
+ return true;
29
+ }
30
+ }
31
+ // Show dialog and wait for user response
32
+ const dialog = new PersistentStorageDialog();
33
+ dialog.open();
34
+ const userApproved = await new Promise((resolve) => {
35
+ dialog.resolvePromise = resolve;
36
+ });
37
+ if (!userApproved) {
38
+ console.warn("⚠ User declined persistent storage - sessions may be lost");
39
+ return false;
40
+ }
41
+ // User approved, request from browser
42
+ if (!navigator.storage?.persist) {
43
+ console.warn("⚠ Persistent storage API not available");
44
+ return false;
45
+ }
46
+ try {
47
+ const granted = await navigator.storage.persist();
48
+ if (granted) {
49
+ console.log("✓ Persistent storage granted - sessions will be preserved");
50
+ }
51
+ else {
52
+ console.warn("⚠ Browser denied persistent storage - sessions may be lost under storage pressure");
53
+ }
54
+ return granted;
55
+ }
56
+ catch (error) {
57
+ console.error("Failed to request persistent storage:", error);
58
+ return false;
59
+ }
60
+ }
61
+ handleGrant() {
62
+ if (this.resolvePromise) {
63
+ this.resolvePromise(true);
64
+ this.resolvePromise = undefined;
65
+ }
66
+ this.close();
67
+ }
68
+ handleDeny() {
69
+ if (this.resolvePromise) {
70
+ this.resolvePromise(false);
71
+ this.resolvePromise = undefined;
72
+ }
73
+ this.close();
74
+ }
75
+ close() {
76
+ super.close();
77
+ if (this.resolvePromise) {
78
+ this.resolvePromise(false);
79
+ }
80
+ }
81
+ renderContent() {
82
+ return html `
83
+ ${DialogContent({
84
+ children: html `
85
+ ${DialogHeader({
86
+ title: i18n("Storage Permission Required"),
87
+ description: i18n("This app needs persistent storage to save your conversations"),
88
+ })}
89
+
90
+ <div class="mt-4 flex flex-col gap-4">
91
+ <div class="flex gap-3 p-4 bg-warning/10 border border-warning/20 rounded-lg">
92
+ <div class="flex-shrink-0 text-warning">
93
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
94
+ <path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path>
95
+ <line x1="12" y1="9" x2="12" y2="13"></line>
96
+ <line x1="12" y1="17" x2="12.01" y2="17"></line>
97
+ </svg>
98
+ </div>
99
+ <div class="text-sm">
100
+ <p class="font-medium text-foreground mb-1">${i18n("Why is this needed?")}</p>
101
+ <p class="text-muted-foreground">
102
+ ${i18n("Without persistent storage, your browser may delete saved conversations when it needs disk space. Granting this permission ensures your chat history is preserved.")}
103
+ </p>
104
+ </div>
105
+ </div>
106
+
107
+ <div class="text-sm text-muted-foreground">
108
+ <p class="mb-2">${i18n("What this means:")}</p>
109
+ <ul class="list-disc list-inside space-y-1 ml-2">
110
+ <li>${i18n("Your conversations will be saved locally in your browser")}</li>
111
+ <li>${i18n("Data will not be deleted automatically to free up space")}</li>
112
+ <li>${i18n("You can still manually clear data at any time")}</li>
113
+ <li>${i18n("No data is sent to external servers")}</li>
114
+ </ul>
115
+ </div>
116
+ </div>
117
+
118
+ <div class="mt-6 flex gap-3 justify-end">
119
+ ${Button({
120
+ variant: "outline",
121
+ onClick: () => this.handleDeny(),
122
+ disabled: this.requesting,
123
+ children: i18n("Continue Anyway"),
124
+ })}
125
+ ${Button({
126
+ variant: "default",
127
+ onClick: () => this.handleGrant(),
128
+ disabled: this.requesting,
129
+ children: this.requesting ? i18n("Requesting...") : i18n("Grant Permission"),
130
+ })}
131
+ </div>
132
+ `,
133
+ })}
134
+ `;
135
+ }
136
+ };
137
+ __decorate([
138
+ state()
139
+ ], PersistentStorageDialog.prototype, "requesting", void 0);
140
+ PersistentStorageDialog = __decorate([
141
+ customElement("persistent-storage-dialog")
142
+ ], PersistentStorageDialog);
143
+ export { PersistentStorageDialog };
144
+ //# sourceMappingURL=PersistentStorageDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistentStorageDialog.js","sourceRoot":"","sources":["../../src/dialogs/PersistentStorageDialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type TemplateResult } from "lit";
2
+ import "../components/CustomProviderCard.js";
3
+ import "../components/ProviderKeyInput.js";
4
+ import { SettingsTab } from "./SettingsDialog.js";
5
+ export declare class ProvidersModelsTab extends SettingsTab {
6
+ private customProviders;
7
+ private providerStatus;
8
+ connectedCallback(): Promise<void>;
9
+ private loadCustomProviders;
10
+ getTabName(): string;
11
+ private checkProviderStatus;
12
+ private renderKnownProviders;
13
+ private renderCustomProviders;
14
+ private addCustomProvider;
15
+ private editProvider;
16
+ private refreshProvider;
17
+ private deleteProvider;
18
+ render(): TemplateResult;
19
+ }
20
+ //# sourceMappingURL=ProvidersModelsTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvidersModelsTab.d.ts","sourceRoot":"","sources":["../../src/dialogs/ProvidersModelsTab.ts"],"names":[],"mappings":"AAGA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAEhD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,mCAAmC,CAAC;AAS3C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBACa,kBAAmB,SAAQ,WAAW;IACzC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,cAAc,CAGjB;IAEC,iBAAiB,kBAG/B;YAEa,mBAAmB;IAqBjC,UAAU,IAAI,MAAM,CAEnB;YAEa,mBAAmB;IAkBjC,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,qBAAqB;YA0Df,iBAAiB;YAOjB,YAAY;YAOZ,eAAe;YAwBf,cAAc;IAe5B,MAAM,IAAI,cAAc,CAQvB;CACD"}
@@ -0,0 +1,188 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { getProviders } from "@draht/ai";
8
+ import { i18n } from "@mariozechner/mini-lit";
9
+ import { Select } from "@mariozechner/mini-lit/dist/Select.js";
10
+ import { html } from "lit";
11
+ import { customElement, state } from "lit/decorators.js";
12
+ import "../components/CustomProviderCard.js";
13
+ import "../components/ProviderKeyInput.js";
14
+ import { getAppStorage } from "../storage/app-storage.js";
15
+ import { discoverModels } from "../utils/model-discovery.js";
16
+ import { CustomProviderDialog } from "./CustomProviderDialog.js";
17
+ import { SettingsTab } from "./SettingsDialog.js";
18
+ let ProvidersModelsTab = class ProvidersModelsTab extends SettingsTab {
19
+ customProviders = [];
20
+ providerStatus = new Map();
21
+ async connectedCallback() {
22
+ super.connectedCallback();
23
+ await this.loadCustomProviders();
24
+ }
25
+ async loadCustomProviders() {
26
+ try {
27
+ const storage = getAppStorage();
28
+ this.customProviders = await storage.customProviders.getAll();
29
+ // Check status for auto-discovery providers
30
+ for (const provider of this.customProviders) {
31
+ const isAutoDiscovery = provider.type === "ollama" ||
32
+ provider.type === "llama.cpp" ||
33
+ provider.type === "vllm" ||
34
+ provider.type === "lmstudio";
35
+ if (isAutoDiscovery) {
36
+ this.checkProviderStatus(provider);
37
+ }
38
+ }
39
+ }
40
+ catch (error) {
41
+ console.error("Failed to load custom providers:", error);
42
+ }
43
+ }
44
+ getTabName() {
45
+ return "Providers & Models";
46
+ }
47
+ async checkProviderStatus(provider) {
48
+ this.providerStatus.set(provider.id, { modelCount: 0, status: "checking" });
49
+ this.requestUpdate();
50
+ try {
51
+ const models = await discoverModels(provider.type, provider.baseUrl, provider.apiKey);
52
+ this.providerStatus.set(provider.id, { modelCount: models.length, status: "connected" });
53
+ }
54
+ catch (_error) {
55
+ this.providerStatus.set(provider.id, { modelCount: 0, status: "disconnected" });
56
+ }
57
+ this.requestUpdate();
58
+ }
59
+ renderKnownProviders() {
60
+ const providers = getProviders();
61
+ return html `
62
+ <div class="flex flex-col gap-6">
63
+ <div>
64
+ <h3 class="text-sm font-semibold text-foreground mb-2">Cloud Providers</h3>
65
+ <p class="text-sm text-muted-foreground mb-4">
66
+ Cloud LLM providers with predefined models. API keys are stored locally in your browser.
67
+ </p>
68
+ </div>
69
+ <div class="flex flex-col gap-6">
70
+ ${providers.map((provider) => html ` <provider-key-input .provider=${provider}></provider-key-input> `)}
71
+ </div>
72
+ </div>
73
+ `;
74
+ }
75
+ renderCustomProviders() {
76
+ const isAutoDiscovery = (type) => type === "ollama" || type === "llama.cpp" || type === "vllm" || type === "lmstudio";
77
+ return html `
78
+ <div class="flex flex-col gap-6">
79
+ <div class="flex items-center justify-between">
80
+ <div>
81
+ <h3 class="text-sm font-semibold text-foreground mb-2">Custom Providers</h3>
82
+ <p class="text-sm text-muted-foreground">
83
+ User-configured servers with auto-discovered or manually defined models.
84
+ </p>
85
+ </div>
86
+ ${Select({
87
+ placeholder: i18n("Add Provider"),
88
+ options: [
89
+ { value: "ollama", label: "Ollama" },
90
+ { value: "llama.cpp", label: "llama.cpp" },
91
+ { value: "vllm", label: "vLLM" },
92
+ { value: "lmstudio", label: "LM Studio" },
93
+ { value: "openai-completions", label: i18n("OpenAI Completions Compatible") },
94
+ { value: "openai-responses", label: i18n("OpenAI Responses Compatible") },
95
+ { value: "anthropic-messages", label: i18n("Anthropic Messages Compatible") },
96
+ ],
97
+ onChange: (value) => this.addCustomProvider(value),
98
+ variant: "outline",
99
+ size: "sm",
100
+ })}
101
+ </div>
102
+
103
+ ${this.customProviders.length === 0
104
+ ? html `
105
+ <div class="text-sm text-muted-foreground text-center py-8">
106
+ No custom providers configured. Click 'Add Provider' to get started.
107
+ </div>
108
+ `
109
+ : html `
110
+ <div class="flex flex-col gap-4">
111
+ ${this.customProviders.map((provider) => html `
112
+ <custom-provider-card
113
+ .provider=${provider}
114
+ .isAutoDiscovery=${isAutoDiscovery(provider.type)}
115
+ .status=${this.providerStatus.get(provider.id)}
116
+ .onRefresh=${(p) => this.refreshProvider(p)}
117
+ .onEdit=${(p) => this.editProvider(p)}
118
+ .onDelete=${(p) => this.deleteProvider(p)}
119
+ ></custom-provider-card>
120
+ `)}
121
+ </div>
122
+ `}
123
+ </div>
124
+ `;
125
+ }
126
+ async addCustomProvider(type) {
127
+ await CustomProviderDialog.open(undefined, type, async () => {
128
+ await this.loadCustomProviders();
129
+ this.requestUpdate();
130
+ });
131
+ }
132
+ async editProvider(provider) {
133
+ await CustomProviderDialog.open(provider, undefined, async () => {
134
+ await this.loadCustomProviders();
135
+ this.requestUpdate();
136
+ });
137
+ }
138
+ async refreshProvider(provider) {
139
+ this.providerStatus.set(provider.id, { modelCount: 0, status: "checking" });
140
+ this.requestUpdate();
141
+ try {
142
+ const models = await discoverModels(provider.type, provider.baseUrl, provider.apiKey);
143
+ this.providerStatus.set(provider.id, { modelCount: models.length, status: "connected" });
144
+ this.requestUpdate();
145
+ console.log(`Refreshed ${models.length} models from ${provider.name}`);
146
+ }
147
+ catch (error) {
148
+ this.providerStatus.set(provider.id, { modelCount: 0, status: "disconnected" });
149
+ this.requestUpdate();
150
+ console.error(`Failed to refresh provider ${provider.name}:`, error);
151
+ alert(`Failed to refresh provider: ${error instanceof Error ? error.message : String(error)}`);
152
+ }
153
+ }
154
+ async deleteProvider(provider) {
155
+ if (!confirm("Are you sure you want to delete this provider?")) {
156
+ return;
157
+ }
158
+ try {
159
+ const storage = getAppStorage();
160
+ await storage.customProviders.delete(provider.id);
161
+ await this.loadCustomProviders();
162
+ this.requestUpdate();
163
+ }
164
+ catch (error) {
165
+ console.error("Failed to delete provider:", error);
166
+ }
167
+ }
168
+ render() {
169
+ return html `
170
+ <div class="flex flex-col gap-8">
171
+ ${this.renderKnownProviders()}
172
+ <div class="border-t border-border"></div>
173
+ ${this.renderCustomProviders()}
174
+ </div>
175
+ `;
176
+ }
177
+ };
178
+ __decorate([
179
+ state()
180
+ ], ProvidersModelsTab.prototype, "customProviders", void 0);
181
+ __decorate([
182
+ state()
183
+ ], ProvidersModelsTab.prototype, "providerStatus", void 0);
184
+ ProvidersModelsTab = __decorate([
185
+ customElement("providers-models-tab")
186
+ ], ProvidersModelsTab);
187
+ export { ProvidersModelsTab };
188
+ //# sourceMappingURL=ProvidersModelsTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvidersModelsTab.js","sourceRoot":"","sources":["../../src/dialogs/ProvidersModelsTab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { DialogBase } from "@mariozechner/mini-lit/dist/DialogBase.js";
2
+ export declare class SessionListDialog extends DialogBase {
3
+ private sessions;
4
+ private loading;
5
+ private onSelectCallback?;
6
+ private onDeleteCallback?;
7
+ private deletedSessions;
8
+ private closedViaSelection;
9
+ protected modalWidth: string;
10
+ protected modalHeight: string;
11
+ static open(onSelect: (sessionId: string) => void, onDelete?: (sessionId: string) => void): Promise<void>;
12
+ private loadSessions;
13
+ private handleDelete;
14
+ close(): void;
15
+ private handleSelect;
16
+ private formatDate;
17
+ protected renderContent(): import("lit").TemplateResult<1>;
18
+ }
19
+ //# sourceMappingURL=SessionListDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionListDialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/SessionListDialog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAQvE,qBACa,iBAAkB,SAAQ,UAAU;IACvC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAQ;IAEhC,OAAO,CAAC,gBAAgB,CAAC,CAA8B;IACvD,OAAO,CAAC,gBAAgB,CAAC,CAA8B;IACvD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,kBAAkB,CAAS;IAEnC,SAAS,CAAC,UAAU,SAAsB;IAC1C,SAAS,CAAC,WAAW,SAAsB;IAE3C,OAAa,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,iBAM9F;YAEa,YAAY;YAaZ,YAAY;IAqBjB,KAAK,SASb;IAED,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAiBlB,UAAmB,aAAa,oCAgD/B;CACD"}
@@ -0,0 +1,152 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { DialogContent, DialogHeader } from "@mariozechner/mini-lit/dist/Dialog.js";
8
+ import { DialogBase } from "@mariozechner/mini-lit/dist/DialogBase.js";
9
+ import { html } from "lit";
10
+ import { customElement, state } from "lit/decorators.js";
11
+ import { getAppStorage } from "../storage/app-storage.js";
12
+ import { formatUsage } from "../utils/format.js";
13
+ import { i18n } from "../utils/i18n.js";
14
+ let SessionListDialog = class SessionListDialog extends DialogBase {
15
+ sessions = [];
16
+ loading = true;
17
+ onSelectCallback;
18
+ onDeleteCallback;
19
+ deletedSessions = new Set();
20
+ closedViaSelection = false;
21
+ modalWidth = "min(600px, 90vw)";
22
+ modalHeight = "min(700px, 90vh)";
23
+ static async open(onSelect, onDelete) {
24
+ const dialog = new SessionListDialog();
25
+ dialog.onSelectCallback = onSelect;
26
+ dialog.onDeleteCallback = onDelete;
27
+ dialog.open();
28
+ await dialog.loadSessions();
29
+ }
30
+ async loadSessions() {
31
+ this.loading = true;
32
+ try {
33
+ const storage = getAppStorage();
34
+ this.sessions = await storage.sessions.getAllMetadata();
35
+ }
36
+ catch (err) {
37
+ console.error("Failed to load sessions:", err);
38
+ this.sessions = [];
39
+ }
40
+ finally {
41
+ this.loading = false;
42
+ }
43
+ }
44
+ async handleDelete(sessionId, event) {
45
+ event.stopPropagation();
46
+ if (!confirm(i18n("Delete this session?"))) {
47
+ return;
48
+ }
49
+ try {
50
+ const storage = getAppStorage();
51
+ if (!storage.sessions)
52
+ return;
53
+ await storage.sessions.deleteSession(sessionId);
54
+ await this.loadSessions();
55
+ // Track deleted session
56
+ this.deletedSessions.add(sessionId);
57
+ }
58
+ catch (err) {
59
+ console.error("Failed to delete session:", err);
60
+ }
61
+ }
62
+ close() {
63
+ super.close();
64
+ // Only notify about deleted sessions if dialog wasn't closed via selection
65
+ if (!this.closedViaSelection && this.onDeleteCallback && this.deletedSessions.size > 0) {
66
+ for (const sessionId of this.deletedSessions) {
67
+ this.onDeleteCallback(sessionId);
68
+ }
69
+ }
70
+ }
71
+ handleSelect(sessionId) {
72
+ this.closedViaSelection = true;
73
+ if (this.onSelectCallback) {
74
+ this.onSelectCallback(sessionId);
75
+ }
76
+ this.close();
77
+ }
78
+ formatDate(isoString) {
79
+ const date = new Date(isoString);
80
+ const now = new Date();
81
+ const diff = now.getTime() - date.getTime();
82
+ const days = Math.floor(diff / (1000 * 60 * 60 * 24));
83
+ if (days === 0) {
84
+ return i18n("Today");
85
+ }
86
+ else if (days === 1) {
87
+ return i18n("Yesterday");
88
+ }
89
+ else if (days < 7) {
90
+ return i18n("{days} days ago").replace("{days}", days.toString());
91
+ }
92
+ else {
93
+ return date.toLocaleDateString();
94
+ }
95
+ }
96
+ renderContent() {
97
+ return html `
98
+ ${DialogContent({
99
+ className: "h-full flex flex-col",
100
+ children: html `
101
+ ${DialogHeader({
102
+ title: i18n("Sessions"),
103
+ description: i18n("Load a previous conversation"),
104
+ })}
105
+
106
+ <div class="flex-1 overflow-y-auto mt-4 space-y-2">
107
+ ${this.loading
108
+ ? html `<div class="text-center py-8 text-muted-foreground">${i18n("Loading...")}</div>`
109
+ : this.sessions.length === 0
110
+ ? html `<div class="text-center py-8 text-muted-foreground">${i18n("No sessions yet")}</div>`
111
+ : this.sessions.map((session) => html `
112
+ <div
113
+ class="group flex items-start gap-3 p-3 rounded-lg border border-border hover:bg-secondary/50 cursor-pointer transition-colors"
114
+ @click=${() => this.handleSelect(session.id)}
115
+ >
116
+ <div class="flex-1 min-w-0">
117
+ <div class="font-medium text-sm text-foreground truncate">${session.title}</div>
118
+ <div class="text-xs text-muted-foreground mt-1">${this.formatDate(session.lastModified)}</div>
119
+ <div class="text-xs text-muted-foreground mt-1">
120
+ ${session.messageCount} ${i18n("messages")} · ${formatUsage(session.usage)}
121
+ </div>
122
+ </div>
123
+ <button
124
+ class="opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-destructive/10 text-destructive transition-opacity"
125
+ @click=${(e) => this.handleDelete(session.id, e)}
126
+ title=${i18n("Delete")}
127
+ >
128
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
129
+ <path d="M3 6h18"></path>
130
+ <path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path>
131
+ <path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path>
132
+ </svg>
133
+ </button>
134
+ </div>
135
+ `)}
136
+ </div>
137
+ `,
138
+ })}
139
+ `;
140
+ }
141
+ };
142
+ __decorate([
143
+ state()
144
+ ], SessionListDialog.prototype, "sessions", void 0);
145
+ __decorate([
146
+ state()
147
+ ], SessionListDialog.prototype, "loading", void 0);
148
+ SessionListDialog = __decorate([
149
+ customElement("session-list-dialog")
150
+ ], SessionListDialog);
151
+ export { SessionListDialog };
152
+ //# sourceMappingURL=SessionListDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionListDialog.js","sourceRoot":"","sources":["../../src/dialogs/SessionListDialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { LitElement, type TemplateResult } from "lit";
2
+ import "../components/ProviderKeyInput.js";
3
+ export declare abstract class SettingsTab extends LitElement {
4
+ abstract getTabName(): string;
5
+ protected createRenderRoot(): this;
6
+ }
7
+ export declare class ApiKeysTab extends SettingsTab {
8
+ getTabName(): string;
9
+ render(): TemplateResult;
10
+ }
11
+ export declare class ProxyTab extends SettingsTab {
12
+ private proxyEnabled;
13
+ private proxyUrl;
14
+ connectedCallback(): Promise<void>;
15
+ private saveProxySettings;
16
+ getTabName(): string;
17
+ render(): TemplateResult;
18
+ }
19
+ export declare class SettingsDialog extends LitElement {
20
+ tabs: SettingsTab[];
21
+ private isOpen;
22
+ private activeTabIndex;
23
+ protected createRenderRoot(): this;
24
+ static open(tabs: SettingsTab[]): Promise<void>;
25
+ private setActiveTab;
26
+ private renderSidebarItem;
27
+ private renderMobileTab;
28
+ render(): TemplateResult;
29
+ }
30
+ //# sourceMappingURL=SettingsDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsDialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/SettingsDialog.ts"],"names":[],"mappings":"AAMA,OAAO,EAAQ,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAE5D,OAAO,mCAAmC,CAAC;AAI3C,8BAAsB,WAAY,SAAQ,UAAU;IACnD,QAAQ,CAAC,UAAU,IAAI,MAAM,CAAC;IAE9B,SAAS,CAAC,gBAAgB,SAEzB;CACD;AAGD,qBACa,UAAW,SAAQ,WAAW;IAC1C,UAAU,IAAI,MAAM,CAEnB;IAED,MAAM,IAAI,cAAc,CAWvB;CACD;AAGD,qBACa,QAAS,SAAQ,WAAW;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAA2B;IAErC,iBAAiB,kBAa/B;YAEa,iBAAiB;IAU/B,UAAU,IAAI,MAAM,CAEnB;IAED,MAAM,IAAI,cAAc,CAmCvB;CACD;AAED,qBACa,cAAe,SAAQ,UAAU;IACA,IAAI,EAAE,WAAW,EAAE,CAAM;IAC7D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAK;IAEpC,SAAS,CAAC,gBAAgB,SAEzB;IAED,OAAa,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,iBAKpC;IAED,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,eAAe;IAcvB,MAAM,mBA+CL;CACD"}