@mariozechner/pi-web-ui 0.5.44

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 (265) hide show
  1. package/README.md +252 -0
  2. package/dist/ChatPanel.d.ts +23 -0
  3. package/dist/ChatPanel.d.ts.map +1 -0
  4. package/dist/ChatPanel.js +224 -0
  5. package/dist/ChatPanel.js.map +1 -0
  6. package/dist/app.css +2 -0
  7. package/dist/components/AgentInterface.d.ts +35 -0
  8. package/dist/components/AgentInterface.d.ts.map +1 -0
  9. package/dist/components/AgentInterface.js +308 -0
  10. package/dist/components/AgentInterface.js.map +1 -0
  11. package/dist/components/AttachmentTile.d.ts +12 -0
  12. package/dist/components/AttachmentTile.d.ts.map +1 -0
  13. package/dist/components/AttachmentTile.js +114 -0
  14. package/dist/components/AttachmentTile.js.map +1 -0
  15. package/dist/components/ConsoleBlock.d.ts +11 -0
  16. package/dist/components/ConsoleBlock.d.ts.map +1 -0
  17. package/dist/components/ConsoleBlock.js +77 -0
  18. package/dist/components/ConsoleBlock.js.map +1 -0
  19. package/dist/components/Input.d.ts +26 -0
  20. package/dist/components/Input.d.ts.map +1 -0
  21. package/dist/components/Input.js +56 -0
  22. package/dist/components/Input.js.map +1 -0
  23. package/dist/components/MessageEditor.d.ts +38 -0
  24. package/dist/components/MessageEditor.d.ts.map +1 -0
  25. package/dist/components/MessageEditor.js +296 -0
  26. package/dist/components/MessageEditor.js.map +1 -0
  27. package/dist/components/MessageList.d.ts +13 -0
  28. package/dist/components/MessageList.d.ts.map +1 -0
  29. package/dist/components/MessageList.js +88 -0
  30. package/dist/components/MessageList.js.map +1 -0
  31. package/dist/components/Messages.d.ts +53 -0
  32. package/dist/components/Messages.d.ts.map +1 -0
  33. package/dist/components/Messages.js +323 -0
  34. package/dist/components/Messages.js.map +1 -0
  35. package/dist/components/ProviderKeyInput.d.ts +16 -0
  36. package/dist/components/ProviderKeyInput.d.ts.map +1 -0
  37. package/dist/components/ProviderKeyInput.js +183 -0
  38. package/dist/components/ProviderKeyInput.js.map +1 -0
  39. package/dist/components/SandboxedIframe.d.ts +63 -0
  40. package/dist/components/SandboxedIframe.d.ts.map +1 -0
  41. package/dist/components/SandboxedIframe.js +435 -0
  42. package/dist/components/SandboxedIframe.js.map +1 -0
  43. package/dist/components/StreamingMessageContainer.d.ts +17 -0
  44. package/dist/components/StreamingMessageContainer.d.ts.map +1 -0
  45. package/dist/components/StreamingMessageContainer.js +114 -0
  46. package/dist/components/StreamingMessageContainer.js.map +1 -0
  47. package/dist/dialogs/ApiKeyPromptDialog.d.ts +15 -0
  48. package/dist/dialogs/ApiKeyPromptDialog.d.ts.map +1 -0
  49. package/dist/dialogs/ApiKeyPromptDialog.js +80 -0
  50. package/dist/dialogs/ApiKeyPromptDialog.js.map +1 -0
  51. package/dist/dialogs/AttachmentOverlay.d.ts +32 -0
  52. package/dist/dialogs/AttachmentOverlay.d.ts.map +1 -0
  53. package/dist/dialogs/AttachmentOverlay.js +575 -0
  54. package/dist/dialogs/AttachmentOverlay.js.map +1 -0
  55. package/dist/dialogs/ModelSelector.d.ts +27 -0
  56. package/dist/dialogs/ModelSelector.d.ts.map +1 -0
  57. package/dist/dialogs/ModelSelector.js +334 -0
  58. package/dist/dialogs/ModelSelector.js.map +1 -0
  59. package/dist/dialogs/SettingsDialog.d.ts +31 -0
  60. package/dist/dialogs/SettingsDialog.d.ts.map +1 -0
  61. package/dist/dialogs/SettingsDialog.js +228 -0
  62. package/dist/dialogs/SettingsDialog.js.map +1 -0
  63. package/dist/index.d.ts +46 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +51 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/state/agent-session.d.ts +58 -0
  68. package/dist/state/agent-session.d.ts.map +1 -0
  69. package/dist/state/agent-session.js +252 -0
  70. package/dist/state/agent-session.js.map +1 -0
  71. package/dist/state/transports/AppTransport.d.ts +13 -0
  72. package/dist/state/transports/AppTransport.d.ts.map +1 -0
  73. package/dist/state/transports/AppTransport.js +316 -0
  74. package/dist/state/transports/AppTransport.js.map +1 -0
  75. package/dist/state/transports/ProviderTransport.d.ts +12 -0
  76. package/dist/state/transports/ProviderTransport.d.ts.map +1 -0
  77. package/dist/state/transports/ProviderTransport.js +44 -0
  78. package/dist/state/transports/ProviderTransport.js.map +1 -0
  79. package/dist/state/transports/index.d.ts +4 -0
  80. package/dist/state/transports/index.d.ts.map +1 -0
  81. package/dist/state/transports/index.js +4 -0
  82. package/dist/state/transports/index.js.map +1 -0
  83. package/dist/state/transports/proxy-types.d.ts +48 -0
  84. package/dist/state/transports/proxy-types.d.ts.map +1 -0
  85. package/dist/state/transports/proxy-types.js +2 -0
  86. package/dist/state/transports/proxy-types.js.map +1 -0
  87. package/dist/state/transports/types.d.ts +11 -0
  88. package/dist/state/transports/types.d.ts.map +1 -0
  89. package/dist/state/transports/types.js +2 -0
  90. package/dist/state/transports/types.js.map +1 -0
  91. package/dist/state/types.d.ts +15 -0
  92. package/dist/state/types.d.ts.map +1 -0
  93. package/dist/state/types.js +2 -0
  94. package/dist/state/types.js.map +1 -0
  95. package/dist/storage/app-storage.d.ts +26 -0
  96. package/dist/storage/app-storage.d.ts.map +1 -0
  97. package/dist/storage/app-storage.js +44 -0
  98. package/dist/storage/app-storage.js.map +1 -0
  99. package/dist/storage/backends/chrome-storage-backend.d.ts +18 -0
  100. package/dist/storage/backends/chrome-storage-backend.d.ts.map +1 -0
  101. package/dist/storage/backends/chrome-storage-backend.js +67 -0
  102. package/dist/storage/backends/chrome-storage-backend.js.map +1 -0
  103. package/dist/storage/backends/indexeddb-backend.d.ts +20 -0
  104. package/dist/storage/backends/indexeddb-backend.d.ts.map +1 -0
  105. package/dist/storage/backends/indexeddb-backend.js +89 -0
  106. package/dist/storage/backends/indexeddb-backend.js.map +1 -0
  107. package/dist/storage/backends/local-storage-backend.d.ts +18 -0
  108. package/dist/storage/backends/local-storage-backend.d.ts.map +1 -0
  109. package/dist/storage/backends/local-storage-backend.js +69 -0
  110. package/dist/storage/backends/local-storage-backend.js.map +1 -0
  111. package/dist/storage/repositories/provider-keys-repository.d.ts +34 -0
  112. package/dist/storage/repositories/provider-keys-repository.d.ts.map +1 -0
  113. package/dist/storage/repositories/provider-keys-repository.js +50 -0
  114. package/dist/storage/repositories/provider-keys-repository.js.map +1 -0
  115. package/dist/storage/repositories/settings-repository.d.ts +34 -0
  116. package/dist/storage/repositories/settings-repository.d.ts.map +1 -0
  117. package/dist/storage/repositories/settings-repository.js +46 -0
  118. package/dist/storage/repositories/settings-repository.js.map +1 -0
  119. package/dist/storage/types.d.ts +43 -0
  120. package/dist/storage/types.d.ts.map +1 -0
  121. package/dist/storage/types.js +2 -0
  122. package/dist/storage/types.js.map +1 -0
  123. package/dist/tools/artifacts/ArtifactElement.d.ts +10 -0
  124. package/dist/tools/artifacts/ArtifactElement.d.ts.map +1 -0
  125. package/dist/tools/artifacts/ArtifactElement.js +12 -0
  126. package/dist/tools/artifacts/ArtifactElement.js.map +1 -0
  127. package/dist/tools/artifacts/HtmlArtifact.d.ts +30 -0
  128. package/dist/tools/artifacts/HtmlArtifact.d.ts.map +1 -0
  129. package/dist/tools/artifacts/HtmlArtifact.js +217 -0
  130. package/dist/tools/artifacts/HtmlArtifact.js.map +1 -0
  131. package/dist/tools/artifacts/MarkdownArtifact.d.ts +20 -0
  132. package/dist/tools/artifacts/MarkdownArtifact.d.ts.map +1 -0
  133. package/dist/tools/artifacts/MarkdownArtifact.js +84 -0
  134. package/dist/tools/artifacts/MarkdownArtifact.js.map +1 -0
  135. package/dist/tools/artifacts/SvgArtifact.d.ts +19 -0
  136. package/dist/tools/artifacts/SvgArtifact.d.ts.map +1 -0
  137. package/dist/tools/artifacts/SvgArtifact.js +80 -0
  138. package/dist/tools/artifacts/SvgArtifact.js.map +1 -0
  139. package/dist/tools/artifacts/TextArtifact.d.ts +20 -0
  140. package/dist/tools/artifacts/TextArtifact.d.ts.map +1 -0
  141. package/dist/tools/artifacts/TextArtifact.js +147 -0
  142. package/dist/tools/artifacts/TextArtifact.js.map +1 -0
  143. package/dist/tools/artifacts/artifacts.d.ts +67 -0
  144. package/dist/tools/artifacts/artifacts.d.ts.map +1 -0
  145. package/dist/tools/artifacts/artifacts.js +836 -0
  146. package/dist/tools/artifacts/artifacts.js.map +1 -0
  147. package/dist/tools/artifacts/index.d.ts +7 -0
  148. package/dist/tools/artifacts/index.d.ts.map +1 -0
  149. package/dist/tools/artifacts/index.js +7 -0
  150. package/dist/tools/artifacts/index.js.map +1 -0
  151. package/dist/tools/index.d.ts +14 -0
  152. package/dist/tools/index.d.ts.map +1 -0
  153. package/dist/tools/index.js +29 -0
  154. package/dist/tools/index.js.map +1 -0
  155. package/dist/tools/javascript-repl.d.ts +43 -0
  156. package/dist/tools/javascript-repl.d.ts.map +1 -0
  157. package/dist/tools/javascript-repl.js +252 -0
  158. package/dist/tools/javascript-repl.js.map +1 -0
  159. package/dist/tools/renderer-registry.d.ts +11 -0
  160. package/dist/tools/renderer-registry.d.ts.map +1 -0
  161. package/dist/tools/renderer-registry.js +15 -0
  162. package/dist/tools/renderer-registry.js.map +1 -0
  163. package/dist/tools/renderers/BashRenderer.d.ts +12 -0
  164. package/dist/tools/renderers/BashRenderer.d.ts.map +1 -0
  165. package/dist/tools/renderers/BashRenderer.js +35 -0
  166. package/dist/tools/renderers/BashRenderer.js.map +1 -0
  167. package/dist/tools/renderers/CalculateRenderer.d.ts +12 -0
  168. package/dist/tools/renderers/CalculateRenderer.d.ts.map +1 -0
  169. package/dist/tools/renderers/CalculateRenderer.js +38 -0
  170. package/dist/tools/renderers/CalculateRenderer.js.map +1 -0
  171. package/dist/tools/renderers/DefaultRenderer.d.ts +8 -0
  172. package/dist/tools/renderers/DefaultRenderer.d.ts.map +1 -0
  173. package/dist/tools/renderers/DefaultRenderer.js +31 -0
  174. package/dist/tools/renderers/DefaultRenderer.js.map +1 -0
  175. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts +12 -0
  176. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -0
  177. package/dist/tools/renderers/GetCurrentTimeRenderer.js +30 -0
  178. package/dist/tools/renderers/GetCurrentTimeRenderer.js.map +1 -0
  179. package/dist/tools/types.d.ts +7 -0
  180. package/dist/tools/types.d.ts.map +1 -0
  181. package/dist/tools/types.js +2 -0
  182. package/dist/tools/types.js.map +1 -0
  183. package/dist/utils/attachment-utils.d.ts +19 -0
  184. package/dist/utils/attachment-utils.d.ts.map +1 -0
  185. package/dist/utils/attachment-utils.js +415 -0
  186. package/dist/utils/attachment-utils.js.map +1 -0
  187. package/dist/utils/auth-token.d.ts +3 -0
  188. package/dist/utils/auth-token.d.ts.map +1 -0
  189. package/dist/utils/auth-token.js +19 -0
  190. package/dist/utils/auth-token.js.map +1 -0
  191. package/dist/utils/format.d.ts +6 -0
  192. package/dist/utils/format.d.ts.map +1 -0
  193. package/dist/utils/format.js +47 -0
  194. package/dist/utils/format.js.map +1 -0
  195. package/dist/utils/i18n.d.ts +111 -0
  196. package/dist/utils/i18n.d.ts.map +1 -0
  197. package/dist/utils/i18n.js +224 -0
  198. package/dist/utils/i18n.js.map +1 -0
  199. package/dist/utils/test-sessions.d.ts +347 -0
  200. package/dist/utils/test-sessions.d.ts.map +1 -0
  201. package/dist/utils/test-sessions.js +2215 -0
  202. package/dist/utils/test-sessions.js.map +1 -0
  203. package/example/README.md +61 -0
  204. package/example/index.html +13 -0
  205. package/example/package-lock.json +1965 -0
  206. package/example/package.json +22 -0
  207. package/example/src/app.css +1 -0
  208. package/example/src/main.ts +57 -0
  209. package/example/src/test-sessions.ts +104 -0
  210. package/example/tsconfig.json +15 -0
  211. package/example/vite.config.ts +6 -0
  212. package/package.json +45 -0
  213. package/src/ChatPanel.ts +214 -0
  214. package/src/app.css +44 -0
  215. package/src/components/AgentInterface.ts +316 -0
  216. package/src/components/AttachmentTile.ts +112 -0
  217. package/src/components/ConsoleBlock.ts +67 -0
  218. package/src/components/Input.ts +112 -0
  219. package/src/components/MessageEditor.ts +272 -0
  220. package/src/components/MessageList.ts +82 -0
  221. package/src/components/Messages.ts +310 -0
  222. package/src/components/ProviderKeyInput.ts +170 -0
  223. package/src/components/SandboxedIframe.ts +525 -0
  224. package/src/components/StreamingMessageContainer.ts +101 -0
  225. package/src/dialogs/ApiKeyPromptDialog.ts +76 -0
  226. package/src/dialogs/AttachmentOverlay.ts +635 -0
  227. package/src/dialogs/ModelSelector.ts +324 -0
  228. package/src/dialogs/SettingsDialog.ts +223 -0
  229. package/src/index.ts +63 -0
  230. package/src/state/agent-session.ts +311 -0
  231. package/src/state/transports/AppTransport.ts +363 -0
  232. package/src/state/transports/ProviderTransport.ts +49 -0
  233. package/src/state/transports/index.ts +3 -0
  234. package/src/state/transports/proxy-types.ts +15 -0
  235. package/src/state/transports/types.ts +16 -0
  236. package/src/state/types.ts +11 -0
  237. package/src/storage/app-storage.ts +53 -0
  238. package/src/storage/backends/chrome-storage-backend.ts +82 -0
  239. package/src/storage/backends/indexeddb-backend.ts +107 -0
  240. package/src/storage/backends/local-storage-backend.ts +74 -0
  241. package/src/storage/repositories/provider-keys-repository.ts +55 -0
  242. package/src/storage/repositories/settings-repository.ts +51 -0
  243. package/src/storage/types.ts +48 -0
  244. package/src/tools/artifacts/ArtifactElement.ts +15 -0
  245. package/src/tools/artifacts/HtmlArtifact.ts +221 -0
  246. package/src/tools/artifacts/MarkdownArtifact.ts +81 -0
  247. package/src/tools/artifacts/SvgArtifact.ts +77 -0
  248. package/src/tools/artifacts/TextArtifact.ts +148 -0
  249. package/src/tools/artifacts/artifacts.ts +888 -0
  250. package/src/tools/artifacts/index.ts +6 -0
  251. package/src/tools/index.ts +35 -0
  252. package/src/tools/javascript-repl.ts +309 -0
  253. package/src/tools/renderer-registry.ts +18 -0
  254. package/src/tools/renderers/BashRenderer.ts +45 -0
  255. package/src/tools/renderers/CalculateRenderer.ts +49 -0
  256. package/src/tools/renderers/DefaultRenderer.ts +36 -0
  257. package/src/tools/renderers/GetCurrentTimeRenderer.ts +39 -0
  258. package/src/tools/types.ts +7 -0
  259. package/src/utils/attachment-utils.ts +472 -0
  260. package/src/utils/auth-token.ts +22 -0
  261. package/src/utils/format.ts +42 -0
  262. package/src/utils/i18n.ts +343 -0
  263. package/src/utils/test-sessions.ts +2247 -0
  264. package/tsconfig.build.json +20 -0
  265. package/tsconfig.json +7 -0
@@ -0,0 +1,31 @@
1
+ import { html } from "@mariozechner/mini-lit";
2
+ import { i18n } from "../../utils/i18n.js";
3
+ export class DefaultRenderer {
4
+ renderParams(params, isStreaming) {
5
+ let text;
6
+ let isJson = false;
7
+ try {
8
+ text = JSON.stringify(JSON.parse(params), null, 2);
9
+ isJson = true;
10
+ }
11
+ catch {
12
+ try {
13
+ text = JSON.stringify(params, null, 2);
14
+ isJson = true;
15
+ }
16
+ catch {
17
+ text = String(params);
18
+ }
19
+ }
20
+ if (isStreaming && (!text || text === "{}" || text === "null")) {
21
+ return html `<div class="text-sm text-muted-foreground">${i18n("Preparing tool parameters...")}</div>`;
22
+ }
23
+ return html `<console-block .content=${text}></console-block>`;
24
+ }
25
+ renderResult(_params, result) {
26
+ // Just show the output field - that's what was sent to the LLM
27
+ const text = result.output || i18n("(no output)");
28
+ return html `<div class="text-sm text-muted-foreground whitespace-pre-wrap font-mono">${text}</div>`;
29
+ }
30
+ }
31
+ //# sourceMappingURL=DefaultRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultRenderer.js","sourceRoot":"","sources":["../../../src/tools/renderers/DefaultRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAuB,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C,MAAM,OAAO,eAAe;IAC3B,YAAY,CAAC,MAAW,EAAE,WAAqB;QAC9C,IAAI,IAAY,CAAC;QACjB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC;YACJ,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,IAAI,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC;gBACJ,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACvC,MAAM,GAAG,IAAI,CAAC;YACf,CAAC;YAAC,MAAM,CAAC;gBACR,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACF,CAAC;QAED,IAAI,WAAW,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAA,8CAA8C,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC;QACvG,CAAC;QAED,OAAO,IAAI,CAAA,2BAA2B,IAAI,mBAAmB,CAAC;IAC/D,CAAC;IAED,YAAY,CAAC,OAAY,EAAE,MAAyB;QACnD,+DAA+D;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QAElD,OAAO,IAAI,CAAA,4EAA4E,IAAI,QAAQ,CAAC;IACrG,CAAC;CACD"}
@@ -0,0 +1,12 @@
1
+ import { type TemplateResult } from "@mariozechner/mini-lit";
2
+ import type { ToolResultMessage } from "@mariozechner/pi-ai";
3
+ import type { ToolRenderer } from "../types.js";
4
+ interface GetCurrentTimeParams {
5
+ timezone?: string;
6
+ }
7
+ export declare class GetCurrentTimeRenderer implements ToolRenderer<GetCurrentTimeParams, undefined> {
8
+ renderParams(params: GetCurrentTimeParams, isStreaming?: boolean): TemplateResult;
9
+ renderResult(_params: GetCurrentTimeParams, result: ToolResultMessage<undefined>): TemplateResult;
10
+ }
11
+ export {};
12
+ //# sourceMappingURL=GetCurrentTimeRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetCurrentTimeRenderer.d.ts","sourceRoot":"","sources":["../../../src/tools/renderers/GetCurrentTimeRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,UAAU,oBAAoB;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,qBAAa,sBAAuB,YAAW,YAAY,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAC3F,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,cAAc;IAgBjF,YAAY,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,cAAc;CAWjG"}
@@ -0,0 +1,30 @@
1
+ import { html } from "@mariozechner/mini-lit";
2
+ import { i18n } from "../../utils/i18n.js";
3
+ // GetCurrentTime tool has undefined details (only uses output)
4
+ export class GetCurrentTimeRenderer {
5
+ renderParams(params, isStreaming) {
6
+ if (params.timezone) {
7
+ return html `
8
+ <div class="text-sm text-muted-foreground">
9
+ <span>${i18n("Getting current time in")}</span>
10
+ <code class="mx-1 px-1.5 py-0.5 bg-muted rounded text-xs font-mono">${params.timezone}</code>
11
+ </div>
12
+ `;
13
+ }
14
+ return html `
15
+ <div class="text-sm text-muted-foreground">
16
+ <span>${i18n("Getting current date and time")}${isStreaming ? "..." : ""}</span>
17
+ </div>
18
+ `;
19
+ }
20
+ renderResult(_params, result) {
21
+ const output = result.output || "";
22
+ const isError = result.isError === true;
23
+ if (isError) {
24
+ return html `<div class="text-sm text-destructive">${output}</div>`;
25
+ }
26
+ // Display the date/time result
27
+ return html `<div class="text-sm font-mono text-foreground">${output}</div>`;
28
+ }
29
+ }
30
+ //# sourceMappingURL=GetCurrentTimeRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetCurrentTimeRenderer.js","sourceRoot":"","sources":["../../../src/tools/renderers/GetCurrentTimeRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAuB,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAO3C,+DAA+D;AAC/D,MAAM,OAAO,sBAAsB;IAClC,YAAY,CAAC,MAA4B,EAAE,WAAqB;QAC/D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,IAAI,CAAA;;aAED,IAAI,CAAC,yBAAyB,CAAC;2EAC+B,MAAM,CAAC,QAAQ;;IAEtF,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;;YAED,IAAI,CAAC,+BAA+B,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;GAEzE,CAAC;IACH,CAAC;IAED,YAAY,CAAC,OAA6B,EAAE,MAAoC;QAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;QAExC,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAA,yCAAyC,MAAM,QAAQ,CAAC;QACpE,CAAC;QAED,+BAA+B;QAC/B,OAAO,IAAI,CAAA,kDAAkD,MAAM,QAAQ,CAAC;IAC7E,CAAC;CACD"}
@@ -0,0 +1,7 @@
1
+ import type { ToolResultMessage } from "@mariozechner/pi-ai";
2
+ import type { TemplateResult } from "lit";
3
+ export interface ToolRenderer<TParams = any, TDetails = any> {
4
+ renderParams(params: TParams, isStreaming?: boolean): TemplateResult;
5
+ renderResult(params: TParams, result: ToolResultMessage<TDetails>): TemplateResult;
6
+ }
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAE1C,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG;IAC1D,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IACrE,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;CACnF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ export interface Attachment {
2
+ id: string;
3
+ type: "image" | "document";
4
+ fileName: string;
5
+ mimeType: string;
6
+ size: number;
7
+ content: string;
8
+ extractedText?: string;
9
+ preview?: string;
10
+ }
11
+ /**
12
+ * Load an attachment from various sources
13
+ * @param source - URL string, File, Blob, or ArrayBuffer
14
+ * @param fileName - Optional filename override
15
+ * @returns Promise<Attachment>
16
+ * @throws Error if loading fails
17
+ */
18
+ export declare function loadAttachment(source: string | File | Blob | ArrayBuffer, fileName?: string): Promise<Attachment>;
19
+ //# sourceMappingURL=attachment-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-utils.d.ts","sourceRoot":"","sources":["../../src/utils/attachment-utils.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,WAAW,EAC1C,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAyKrB"}
@@ -0,0 +1,415 @@
1
+ import { parseAsync } from "docx-preview";
2
+ import JSZip from "jszip";
3
+ import * as pdfjsLib from "pdfjs-dist";
4
+ import * as XLSX from "xlsx";
5
+ import { i18n } from "./i18n.js";
6
+ // Configure PDF.js worker - we'll need to bundle this
7
+ pdfjsLib.GlobalWorkerOptions.workerSrc = new URL("pdfjs-dist/build/pdf.worker.min.mjs", import.meta.url).toString();
8
+ /**
9
+ * Load an attachment from various sources
10
+ * @param source - URL string, File, Blob, or ArrayBuffer
11
+ * @param fileName - Optional filename override
12
+ * @returns Promise<Attachment>
13
+ * @throws Error if loading fails
14
+ */
15
+ export async function loadAttachment(source, fileName) {
16
+ let arrayBuffer;
17
+ let detectedFileName = fileName || "unnamed";
18
+ let mimeType = "application/octet-stream";
19
+ let size = 0;
20
+ // Convert source to ArrayBuffer
21
+ if (typeof source === "string") {
22
+ // It's a URL - fetch it
23
+ const response = await fetch(source);
24
+ if (!response.ok) {
25
+ throw new Error(i18n("Failed to fetch file"));
26
+ }
27
+ arrayBuffer = await response.arrayBuffer();
28
+ size = arrayBuffer.byteLength;
29
+ mimeType = response.headers.get("content-type") || mimeType;
30
+ if (!fileName) {
31
+ // Try to extract filename from URL
32
+ const urlParts = source.split("/");
33
+ detectedFileName = urlParts[urlParts.length - 1] || "document";
34
+ }
35
+ }
36
+ else if (source instanceof File) {
37
+ arrayBuffer = await source.arrayBuffer();
38
+ size = source.size;
39
+ mimeType = source.type || mimeType;
40
+ detectedFileName = fileName || source.name;
41
+ }
42
+ else if (source instanceof Blob) {
43
+ arrayBuffer = await source.arrayBuffer();
44
+ size = source.size;
45
+ mimeType = source.type || mimeType;
46
+ }
47
+ else if (source instanceof ArrayBuffer) {
48
+ arrayBuffer = source;
49
+ size = source.byteLength;
50
+ }
51
+ else {
52
+ throw new Error(i18n("Invalid source type"));
53
+ }
54
+ // Convert ArrayBuffer to base64 - handle large files properly
55
+ const uint8Array = new Uint8Array(arrayBuffer);
56
+ let binary = "";
57
+ const chunkSize = 0x8000; // Process in 32KB chunks to avoid stack overflow
58
+ for (let i = 0; i < uint8Array.length; i += chunkSize) {
59
+ const chunk = uint8Array.slice(i, i + chunkSize);
60
+ binary += String.fromCharCode(...chunk);
61
+ }
62
+ const base64Content = btoa(binary);
63
+ // Detect type and process accordingly
64
+ const id = `${detectedFileName}_${Date.now()}_${Math.random()}`;
65
+ // Check if it's a PDF
66
+ if (mimeType === "application/pdf" || detectedFileName.toLowerCase().endsWith(".pdf")) {
67
+ const { extractedText, preview } = await processPdf(arrayBuffer, detectedFileName);
68
+ return {
69
+ id,
70
+ type: "document",
71
+ fileName: detectedFileName,
72
+ mimeType: "application/pdf",
73
+ size,
74
+ content: base64Content,
75
+ extractedText,
76
+ preview,
77
+ };
78
+ }
79
+ // Check if it's a DOCX file
80
+ if (mimeType === "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
81
+ detectedFileName.toLowerCase().endsWith(".docx")) {
82
+ const { extractedText } = await processDocx(arrayBuffer, detectedFileName);
83
+ return {
84
+ id,
85
+ type: "document",
86
+ fileName: detectedFileName,
87
+ mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
88
+ size,
89
+ content: base64Content,
90
+ extractedText,
91
+ };
92
+ }
93
+ // Check if it's a PPTX file
94
+ if (mimeType === "application/vnd.openxmlformats-officedocument.presentationml.presentation" ||
95
+ detectedFileName.toLowerCase().endsWith(".pptx")) {
96
+ const { extractedText } = await processPptx(arrayBuffer, detectedFileName);
97
+ return {
98
+ id,
99
+ type: "document",
100
+ fileName: detectedFileName,
101
+ mimeType: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
102
+ size,
103
+ content: base64Content,
104
+ extractedText,
105
+ };
106
+ }
107
+ // Check if it's an Excel file (XLSX/XLS)
108
+ const excelMimeTypes = [
109
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
110
+ "application/vnd.ms-excel",
111
+ ];
112
+ if (excelMimeTypes.includes(mimeType) ||
113
+ detectedFileName.toLowerCase().endsWith(".xlsx") ||
114
+ detectedFileName.toLowerCase().endsWith(".xls")) {
115
+ const { extractedText } = await processExcel(arrayBuffer, detectedFileName);
116
+ return {
117
+ id,
118
+ type: "document",
119
+ fileName: detectedFileName,
120
+ mimeType: mimeType.startsWith("application/vnd")
121
+ ? mimeType
122
+ : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
123
+ size,
124
+ content: base64Content,
125
+ extractedText,
126
+ };
127
+ }
128
+ // Check if it's an image
129
+ if (mimeType.startsWith("image/")) {
130
+ return {
131
+ id,
132
+ type: "image",
133
+ fileName: detectedFileName,
134
+ mimeType,
135
+ size,
136
+ content: base64Content,
137
+ preview: base64Content, // For images, preview is the same as content
138
+ };
139
+ }
140
+ // Check if it's a text document
141
+ const textExtensions = [
142
+ ".txt",
143
+ ".md",
144
+ ".json",
145
+ ".xml",
146
+ ".html",
147
+ ".css",
148
+ ".js",
149
+ ".ts",
150
+ ".jsx",
151
+ ".tsx",
152
+ ".yml",
153
+ ".yaml",
154
+ ];
155
+ const isTextFile = mimeType.startsWith("text/") || textExtensions.some((ext) => detectedFileName.toLowerCase().endsWith(ext));
156
+ if (isTextFile) {
157
+ const decoder = new TextDecoder();
158
+ const text = decoder.decode(arrayBuffer);
159
+ return {
160
+ id,
161
+ type: "document",
162
+ fileName: detectedFileName,
163
+ mimeType: mimeType.startsWith("text/") ? mimeType : "text/plain",
164
+ size,
165
+ content: base64Content,
166
+ extractedText: text,
167
+ };
168
+ }
169
+ throw new Error(`Unsupported file type: ${mimeType}`);
170
+ }
171
+ async function processPdf(arrayBuffer, fileName) {
172
+ let pdf = null;
173
+ try {
174
+ pdf = await pdfjsLib.getDocument({ data: arrayBuffer }).promise;
175
+ // Extract text with page structure
176
+ let extractedText = `<pdf filename="${fileName}">`;
177
+ for (let i = 1; i <= pdf.numPages; i++) {
178
+ const page = await pdf.getPage(i);
179
+ const textContent = await page.getTextContent();
180
+ const pageText = textContent.items
181
+ .map((item) => item.str)
182
+ .filter((str) => str.trim())
183
+ .join(" ");
184
+ extractedText += `\n<page number="${i}">\n${pageText}\n</page>`;
185
+ }
186
+ extractedText += "\n</pdf>";
187
+ // Generate preview from first page
188
+ const preview = await generatePdfPreview(pdf);
189
+ return { extractedText, preview };
190
+ }
191
+ catch (error) {
192
+ console.error("Error processing PDF:", error);
193
+ throw new Error(`Failed to process PDF: ${String(error)}`);
194
+ }
195
+ finally {
196
+ // Clean up PDF resources
197
+ if (pdf) {
198
+ pdf.destroy();
199
+ }
200
+ }
201
+ }
202
+ async function generatePdfPreview(pdf) {
203
+ try {
204
+ const page = await pdf.getPage(1);
205
+ const viewport = page.getViewport({ scale: 1.0 });
206
+ // Create canvas with reasonable size for thumbnail (160x160 max)
207
+ const scale = Math.min(160 / viewport.width, 160 / viewport.height);
208
+ const scaledViewport = page.getViewport({ scale });
209
+ const canvas = document.createElement("canvas");
210
+ const context = canvas.getContext("2d");
211
+ if (!context) {
212
+ return undefined;
213
+ }
214
+ canvas.height = scaledViewport.height;
215
+ canvas.width = scaledViewport.width;
216
+ const renderContext = {
217
+ canvasContext: context,
218
+ viewport: scaledViewport,
219
+ canvas: canvas,
220
+ };
221
+ await page.render(renderContext).promise;
222
+ // Return base64 without data URL prefix
223
+ return canvas.toDataURL("image/png").split(",")[1];
224
+ }
225
+ catch (error) {
226
+ console.error("Error generating PDF preview:", error);
227
+ return undefined;
228
+ }
229
+ }
230
+ async function processDocx(arrayBuffer, fileName) {
231
+ try {
232
+ // Parse document structure
233
+ const wordDoc = await parseAsync(arrayBuffer);
234
+ // Extract structured text from document body
235
+ let extractedText = `<docx filename="${fileName}">\n<page number="1">\n`;
236
+ const body = wordDoc.documentPart?.body;
237
+ if (body?.children) {
238
+ // Walk through document elements and extract text
239
+ const texts = [];
240
+ for (const element of body.children) {
241
+ const text = extractTextFromElement(element);
242
+ if (text) {
243
+ texts.push(text);
244
+ }
245
+ }
246
+ extractedText += texts.join("\n");
247
+ }
248
+ extractedText += `\n</page>\n</docx>`;
249
+ return { extractedText };
250
+ }
251
+ catch (error) {
252
+ console.error("Error processing DOCX:", error);
253
+ throw new Error(`Failed to process DOCX: ${String(error)}`);
254
+ }
255
+ }
256
+ function extractTextFromElement(element) {
257
+ let text = "";
258
+ // Check type with lowercase
259
+ const elementType = element.type?.toLowerCase() || "";
260
+ // Handle paragraphs
261
+ if (elementType === "paragraph" && element.children) {
262
+ for (const child of element.children) {
263
+ const childType = child.type?.toLowerCase() || "";
264
+ if (childType === "run" && child.children) {
265
+ for (const textChild of child.children) {
266
+ const textType = textChild.type?.toLowerCase() || "";
267
+ if (textType === "text") {
268
+ text += textChild.text || "";
269
+ }
270
+ }
271
+ }
272
+ else if (childType === "text") {
273
+ text += child.text || "";
274
+ }
275
+ }
276
+ }
277
+ // Handle tables
278
+ else if (elementType === "table") {
279
+ if (element.children) {
280
+ const tableTexts = [];
281
+ for (const row of element.children) {
282
+ const rowType = row.type?.toLowerCase() || "";
283
+ if (rowType === "tablerow" && row.children) {
284
+ const rowTexts = [];
285
+ for (const cell of row.children) {
286
+ const cellType = cell.type?.toLowerCase() || "";
287
+ if (cellType === "tablecell" && cell.children) {
288
+ const cellTexts = [];
289
+ for (const cellElement of cell.children) {
290
+ const cellText = extractTextFromElement(cellElement);
291
+ if (cellText)
292
+ cellTexts.push(cellText);
293
+ }
294
+ if (cellTexts.length > 0)
295
+ rowTexts.push(cellTexts.join(" "));
296
+ }
297
+ }
298
+ if (rowTexts.length > 0)
299
+ tableTexts.push(rowTexts.join(" | "));
300
+ }
301
+ }
302
+ if (tableTexts.length > 0) {
303
+ text = "\n[Table]\n" + tableTexts.join("\n") + "\n[/Table]\n";
304
+ }
305
+ }
306
+ }
307
+ // Recursively handle other container elements
308
+ else if (element.children && Array.isArray(element.children)) {
309
+ const childTexts = [];
310
+ for (const child of element.children) {
311
+ const childText = extractTextFromElement(child);
312
+ if (childText)
313
+ childTexts.push(childText);
314
+ }
315
+ text = childTexts.join(" ");
316
+ }
317
+ return text.trim();
318
+ }
319
+ async function processPptx(arrayBuffer, fileName) {
320
+ try {
321
+ // Load the PPTX file as a ZIP
322
+ const zip = await JSZip.loadAsync(arrayBuffer);
323
+ // PPTX slides are stored in ppt/slides/slide[n].xml
324
+ let extractedText = `<pptx filename="${fileName}">`;
325
+ // Get all slide files and sort them numerically
326
+ const slideFiles = Object.keys(zip.files)
327
+ .filter((name) => name.match(/ppt\/slides\/slide\d+\.xml$/))
328
+ .sort((a, b) => {
329
+ const numA = Number.parseInt(a.match(/slide(\d+)\.xml$/)?.[1] || "0", 10);
330
+ const numB = Number.parseInt(b.match(/slide(\d+)\.xml$/)?.[1] || "0", 10);
331
+ return numA - numB;
332
+ });
333
+ // Extract text from each slide
334
+ for (let i = 0; i < slideFiles.length; i++) {
335
+ const slideFile = zip.file(slideFiles[i]);
336
+ if (slideFile) {
337
+ const slideXml = await slideFile.async("text");
338
+ // Extract text from XML (simple regex approach)
339
+ // Looking for <a:t> tags which contain text in PPTX
340
+ const textMatches = slideXml.match(/<a:t[^>]*>([^<]+)<\/a:t>/g);
341
+ if (textMatches) {
342
+ extractedText += `\n<slide number="${i + 1}">`;
343
+ const slideTexts = textMatches
344
+ .map((match) => {
345
+ const textMatch = match.match(/<a:t[^>]*>([^<]+)<\/a:t>/);
346
+ return textMatch ? textMatch[1] : "";
347
+ })
348
+ .filter((t) => t.trim());
349
+ if (slideTexts.length > 0) {
350
+ extractedText += "\n" + slideTexts.join("\n");
351
+ }
352
+ extractedText += "\n</slide>";
353
+ }
354
+ }
355
+ }
356
+ // Also try to extract text from notes
357
+ const notesFiles = Object.keys(zip.files)
358
+ .filter((name) => name.match(/ppt\/notesSlides\/notesSlide\d+\.xml$/))
359
+ .sort((a, b) => {
360
+ const numA = Number.parseInt(a.match(/notesSlide(\d+)\.xml$/)?.[1] || "0", 10);
361
+ const numB = Number.parseInt(b.match(/notesSlide(\d+)\.xml$/)?.[1] || "0", 10);
362
+ return numA - numB;
363
+ });
364
+ if (notesFiles.length > 0) {
365
+ extractedText += "\n<notes>";
366
+ for (const noteFile of notesFiles) {
367
+ const file = zip.file(noteFile);
368
+ if (file) {
369
+ const noteXml = await file.async("text");
370
+ const textMatches = noteXml.match(/<a:t[^>]*>([^<]+)<\/a:t>/g);
371
+ if (textMatches) {
372
+ const noteTexts = textMatches
373
+ .map((match) => {
374
+ const textMatch = match.match(/<a:t[^>]*>([^<]+)<\/a:t>/);
375
+ return textMatch ? textMatch[1] : "";
376
+ })
377
+ .filter((t) => t.trim());
378
+ if (noteTexts.length > 0) {
379
+ const slideNum = noteFile.match(/notesSlide(\d+)\.xml$/)?.[1];
380
+ extractedText += `\n[Slide ${slideNum} notes]: ${noteTexts.join(" ")}`;
381
+ }
382
+ }
383
+ }
384
+ }
385
+ extractedText += "\n</notes>";
386
+ }
387
+ extractedText += "\n</pptx>";
388
+ return { extractedText };
389
+ }
390
+ catch (error) {
391
+ console.error("Error processing PPTX:", error);
392
+ throw new Error(`Failed to process PPTX: ${String(error)}`);
393
+ }
394
+ }
395
+ async function processExcel(arrayBuffer, fileName) {
396
+ try {
397
+ // Read the workbook
398
+ const workbook = XLSX.read(arrayBuffer, { type: "array" });
399
+ let extractedText = `<excel filename="${fileName}">`;
400
+ // Process each sheet
401
+ for (const [index, sheetName] of workbook.SheetNames.entries()) {
402
+ const worksheet = workbook.Sheets[sheetName];
403
+ // Extract text as CSV for the extractedText field
404
+ const csvText = XLSX.utils.sheet_to_csv(worksheet);
405
+ extractedText += `\n<sheet name="${sheetName}" index="${index + 1}">\n${csvText}\n</sheet>`;
406
+ }
407
+ extractedText += "\n</excel>";
408
+ return { extractedText };
409
+ }
410
+ catch (error) {
411
+ console.error("Error processing Excel:", error);
412
+ throw new Error(`Failed to process Excel: ${String(error)}`);
413
+ }
414
+ }
415
+ //# sourceMappingURL=attachment-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-utils.js","sourceRoot":"","sources":["../../src/utils/attachment-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getAuthToken(): Promise<string | undefined>;
2
+ export declare function clearAuthToken(): Promise<void>;
3
+ //# sourceMappingURL=auth-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-token.d.ts","sourceRoot":"","sources":["../../src/utils/auth-token.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAchE;AAED,wBAAsB,cAAc,kBAEnC"}
@@ -0,0 +1,19 @@
1
+ import { PromptDialog } from "@mariozechner/mini-lit";
2
+ import { i18n } from "./i18n.js";
3
+ export async function getAuthToken() {
4
+ let authToken = localStorage.getItem(`auth-token`) || "";
5
+ if (authToken)
6
+ return authToken;
7
+ while (true) {
8
+ authToken = (await PromptDialog.ask(i18n("Enter Auth Token"), i18n("Please enter your auth token."), "", true))?.trim();
9
+ if (authToken) {
10
+ localStorage.setItem(`auth-token`, authToken);
11
+ break;
12
+ }
13
+ }
14
+ return authToken?.trim() || undefined;
15
+ }
16
+ export async function clearAuthToken() {
17
+ localStorage.removeItem(`auth-token`);
18
+ }
19
+ //# sourceMappingURL=auth-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-token.js","sourceRoot":"","sources":["../../src/utils/auth-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,IAAI,SAAS,GAAuB,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC7E,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,OAAO,IAAI,EAAE,CAAC;QACb,SAAS,GAAG,CACX,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,+BAA+B,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CACjG,EAAE,IAAI,EAAE,CAAC;QACV,IAAI,SAAS,EAAE,CAAC;YACf,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM;QACP,CAAC;IACF,CAAC;IACD,OAAO,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IACnC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Usage } from "@mariozechner/pi-ai";
2
+ export declare function formatCost(cost: number): string;
3
+ export declare function formatModelCost(cost: any): string;
4
+ export declare function formatUsage(usage: Usage): string;
5
+ export declare function formatTokenCount(count: number): string;
6
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAejD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,UAWvC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD"}