@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.
- package/README.md +178 -99
- package/dist/ChatPanel.d.ts +15 -10
- package/dist/ChatPanel.d.ts.map +1 -1
- package/dist/ChatPanel.js +68 -100
- package/dist/ChatPanel.js.map +1 -1
- package/dist/{state/agent-session.d.ts → agent/agent.d.ts} +23 -19
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/{state/agent-session.js → agent/agent.js} +50 -32
- package/dist/agent/agent.js.map +1 -0
- package/dist/{state → agent}/transports/AppTransport.d.ts +1 -3
- package/dist/agent/transports/AppTransport.d.ts.map +1 -0
- package/dist/{state → agent}/transports/AppTransport.js +5 -4
- package/dist/{state → agent}/transports/AppTransport.js.map +1 -1
- package/dist/{state → agent}/transports/ProviderTransport.d.ts +1 -3
- package/dist/agent/transports/ProviderTransport.d.ts.map +1 -0
- package/dist/{state → agent}/transports/ProviderTransport.js +6 -7
- package/dist/agent/transports/ProviderTransport.js.map +1 -0
- package/dist/{state → agent}/transports/index.d.ts.map +1 -1
- package/dist/agent/transports/index.js.map +1 -0
- package/dist/{state → agent}/transports/proxy-types.d.ts.map +1 -1
- package/dist/agent/transports/proxy-types.js.map +1 -0
- package/dist/agent/transports/types.d.ts +12 -0
- package/dist/agent/transports/types.d.ts.map +1 -0
- package/dist/{state → agent}/transports/types.js.map +1 -1
- package/dist/{state → agent}/types.d.ts.map +1 -1
- package/dist/{state → agent}/types.js.map +1 -1
- package/dist/app.css +1 -1
- package/dist/components/AgentInterface.d.ts +7 -4
- package/dist/components/AgentInterface.d.ts.map +1 -1
- package/dist/components/AgentInterface.js +29 -17
- package/dist/components/AgentInterface.js.map +1 -1
- package/dist/components/ConsoleBlock.d.ts +1 -0
- package/dist/components/ConsoleBlock.d.ts.map +1 -1
- package/dist/components/ConsoleBlock.js +7 -1
- package/dist/components/ConsoleBlock.js.map +1 -1
- package/dist/components/ExpandableSection.d.ts +15 -0
- package/dist/components/ExpandableSection.d.ts.map +1 -0
- package/dist/components/ExpandableSection.js +63 -0
- package/dist/components/ExpandableSection.js.map +1 -0
- package/dist/components/MessageEditor.d.ts +8 -1
- package/dist/components/MessageEditor.d.ts.map +1 -1
- package/dist/components/MessageEditor.js +149 -6
- package/dist/components/MessageEditor.js.map +1 -1
- package/dist/components/MessageList.d.ts +3 -2
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +14 -1
- package/dist/components/MessageList.js.map +1 -1
- package/dist/components/Messages.d.ts +15 -6
- package/dist/components/Messages.d.ts.map +1 -1
- package/dist/components/Messages.js +17 -83
- package/dist/components/Messages.js.map +1 -1
- package/dist/components/ProviderKeyInput.d.ts.map +1 -1
- package/dist/components/ProviderKeyInput.js +6 -5
- package/dist/components/ProviderKeyInput.js.map +1 -1
- package/dist/components/SandboxedIframe.d.ts +29 -7
- package/dist/components/SandboxedIframe.d.ts.map +1 -1
- package/dist/components/SandboxedIframe.js +350 -282
- package/dist/components/SandboxedIframe.js.map +1 -1
- package/dist/components/message-renderer-registry.d.ts +12 -0
- package/dist/components/message-renderer-registry.d.ts.map +1 -0
- package/dist/components/message-renderer-registry.js +12 -0
- package/dist/components/message-renderer-registry.js.map +1 -0
- package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts +35 -0
- package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts.map +1 -0
- package/dist/components/sandbox/ArtifactsRuntimeProvider.js +189 -0
- package/dist/components/sandbox/ArtifactsRuntimeProvider.js.map +1 -0
- package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts +17 -0
- package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts.map +1 -0
- package/dist/components/sandbox/AttachmentsRuntimeProvider.js +64 -0
- package/dist/components/sandbox/AttachmentsRuntimeProvider.js.map +1 -0
- package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts +42 -0
- package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts.map +1 -0
- package/dist/components/sandbox/ConsoleRuntimeProvider.js +161 -0
- package/dist/components/sandbox/ConsoleRuntimeProvider.js.map +1 -0
- package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts +30 -0
- package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts.map +1 -0
- package/dist/components/sandbox/FileDownloadRuntimeProvider.js +97 -0
- package/dist/components/sandbox/FileDownloadRuntimeProvider.js.map +1 -0
- package/dist/components/sandbox/RuntimeMessageBridge.d.ts +19 -0
- package/dist/components/sandbox/RuntimeMessageBridge.d.ts.map +1 -0
- package/dist/components/sandbox/RuntimeMessageBridge.js +74 -0
- package/dist/components/sandbox/RuntimeMessageBridge.js.map +1 -0
- package/dist/components/sandbox/RuntimeMessageRouter.d.ts +65 -0
- package/dist/components/sandbox/RuntimeMessageRouter.d.ts.map +1 -0
- package/dist/components/sandbox/RuntimeMessageRouter.js +168 -0
- package/dist/components/sandbox/RuntimeMessageRouter.js.map +1 -0
- package/dist/components/sandbox/SandboxRuntimeProvider.d.ts +33 -0
- package/dist/components/sandbox/SandboxRuntimeProvider.d.ts.map +1 -0
- package/dist/components/sandbox/SandboxRuntimeProvider.js +2 -0
- package/dist/components/sandbox/SandboxRuntimeProvider.js.map +1 -0
- package/dist/dialogs/ApiKeyPromptDialog.d.ts.map +1 -1
- package/dist/dialogs/ApiKeyPromptDialog.js +2 -5
- package/dist/dialogs/ApiKeyPromptDialog.js.map +1 -1
- package/dist/dialogs/ModelSelector.js.map +1 -1
- package/dist/dialogs/PersistentStorageDialog.d.ts +17 -0
- package/dist/dialogs/PersistentStorageDialog.d.ts.map +1 -0
- package/dist/dialogs/PersistentStorageDialog.js +144 -0
- package/dist/dialogs/PersistentStorageDialog.js.map +1 -0
- package/dist/dialogs/SessionListDialog.d.ts +19 -0
- package/dist/dialogs/SessionListDialog.d.ts.map +1 -0
- package/dist/dialogs/SessionListDialog.js +152 -0
- package/dist/dialogs/SessionListDialog.js.map +1 -0
- package/dist/dialogs/SettingsDialog.d.ts.map +1 -1
- package/dist/dialogs/SettingsDialog.js +1 -0
- package/dist/dialogs/SettingsDialog.js.map +1 -1
- package/dist/index.d.ts +34 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -14
- package/dist/index.js.map +1 -1
- package/dist/prompts/prompts.d.ts +11 -0
- package/dist/prompts/prompts.d.ts.map +1 -0
- package/dist/prompts/prompts.js +272 -0
- package/dist/prompts/prompts.js.map +1 -0
- package/dist/storage/app-storage.d.ts +17 -12
- package/dist/storage/app-storage.d.ts.map +1 -1
- package/dist/storage/app-storage.js +13 -20
- package/dist/storage/app-storage.js.map +1 -1
- package/dist/storage/backends/indexeddb-storage-backend.d.ts +27 -0
- package/dist/storage/backends/indexeddb-storage-backend.d.ts.map +1 -0
- package/dist/storage/backends/indexeddb-storage-backend.js +166 -0
- package/dist/storage/backends/indexeddb-storage-backend.js.map +1 -0
- package/dist/storage/store.d.ts +23 -0
- package/dist/storage/store.d.ts.map +1 -0
- package/dist/storage/store.js +26 -0
- package/dist/storage/store.js.map +1 -0
- package/dist/storage/stores/provider-keys-store.d.ts +14 -0
- package/dist/storage/stores/provider-keys-store.d.ts.map +1 -0
- package/dist/storage/stores/provider-keys-store.js +27 -0
- package/dist/storage/stores/provider-keys-store.js.map +1 -0
- package/dist/storage/stores/sessions-store.d.ts +31 -0
- package/dist/storage/stores/sessions-store.d.ts.map +1 -0
- package/dist/storage/stores/sessions-store.js +113 -0
- package/dist/storage/stores/sessions-store.js.map +1 -0
- package/dist/storage/stores/settings-store.d.ts +14 -0
- package/dist/storage/stores/settings-store.d.ts.map +1 -0
- package/dist/storage/stores/settings-store.js +28 -0
- package/dist/storage/stores/settings-store.js.map +1 -0
- package/dist/storage/types.d.ts +156 -22
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/tools/artifacts/ArtifactElement.d.ts +0 -1
- package/dist/tools/artifacts/ArtifactElement.d.ts.map +1 -1
- package/dist/tools/artifacts/ArtifactElement.js +0 -1
- package/dist/tools/artifacts/ArtifactElement.js.map +1 -1
- package/dist/tools/artifacts/ArtifactPill.d.ts +4 -0
- package/dist/tools/artifacts/ArtifactPill.d.ts.map +1 -0
- package/dist/tools/artifacts/ArtifactPill.js +22 -0
- package/dist/tools/artifacts/ArtifactPill.js.map +1 -0
- package/dist/tools/artifacts/Console.d.ts +18 -0
- package/dist/tools/artifacts/Console.d.ts.map +1 -0
- package/dist/tools/artifacts/Console.js +95 -0
- package/dist/tools/artifacts/Console.js.map +1 -0
- package/dist/tools/artifacts/DocxArtifact.d.ts +22 -0
- package/dist/tools/artifacts/DocxArtifact.d.ts.map +1 -0
- package/dist/tools/artifacts/DocxArtifact.js +208 -0
- package/dist/tools/artifacts/DocxArtifact.js.map +1 -0
- package/dist/tools/artifacts/ExcelArtifact.d.ts +24 -0
- package/dist/tools/artifacts/ExcelArtifact.d.ts.map +1 -0
- package/dist/tools/artifacts/ExcelArtifact.js +216 -0
- package/dist/tools/artifacts/ExcelArtifact.js.map +1 -0
- package/dist/tools/artifacts/GenericArtifact.d.ts +19 -0
- package/dist/tools/artifacts/GenericArtifact.d.ts.map +1 -0
- package/dist/tools/artifacts/GenericArtifact.js +117 -0
- package/dist/tools/artifacts/GenericArtifact.js.map +1 -0
- package/dist/tools/artifacts/HtmlArtifact.d.ts +8 -11
- package/dist/tools/artifacts/HtmlArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/HtmlArtifact.js +56 -88
- package/dist/tools/artifacts/HtmlArtifact.js.map +1 -1
- package/dist/tools/artifacts/ImageArtifact.d.ts +20 -0
- package/dist/tools/artifacts/ImageArtifact.d.ts.map +1 -0
- package/dist/tools/artifacts/ImageArtifact.js +120 -0
- package/dist/tools/artifacts/ImageArtifact.js.map +1 -0
- package/dist/tools/artifacts/MarkdownArtifact.d.ts +0 -1
- package/dist/tools/artifacts/MarkdownArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/MarkdownArtifact.js +0 -4
- package/dist/tools/artifacts/MarkdownArtifact.js.map +1 -1
- package/dist/tools/artifacts/PdfArtifact.d.ts +25 -0
- package/dist/tools/artifacts/PdfArtifact.d.ts.map +1 -0
- package/dist/tools/artifacts/PdfArtifact.js +184 -0
- package/dist/tools/artifacts/PdfArtifact.js.map +1 -0
- package/dist/tools/artifacts/SvgArtifact.d.ts +0 -1
- package/dist/tools/artifacts/SvgArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/SvgArtifact.js +0 -4
- package/dist/tools/artifacts/SvgArtifact.js.map +1 -1
- package/dist/tools/artifacts/TextArtifact.d.ts +0 -1
- package/dist/tools/artifacts/TextArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/TextArtifact.js +0 -4
- package/dist/tools/artifacts/TextArtifact.js.map +1 -1
- package/dist/tools/artifacts/artifacts-tool-renderer.d.ts +11 -0
- package/dist/tools/artifacts/artifacts-tool-renderer.d.ts.map +1 -0
- package/dist/tools/artifacts/artifacts-tool-renderer.js +262 -0
- package/dist/tools/artifacts/artifacts-tool-renderer.js.map +1 -0
- package/dist/tools/artifacts/artifacts.d.ts +10 -13
- package/dist/tools/artifacts/artifacts.d.ts.map +1 -1
- package/dist/tools/artifacts/artifacts.js +166 -344
- package/dist/tools/artifacts/artifacts.js.map +1 -1
- package/dist/tools/artifacts/index.d.ts +1 -0
- package/dist/tools/artifacts/index.d.ts.map +1 -1
- package/dist/tools/artifacts/index.js +1 -0
- package/dist/tools/artifacts/index.js.map +1 -1
- package/dist/tools/extract-document.d.ts +24 -0
- package/dist/tools/extract-document.d.ts.map +1 -0
- package/dist/tools/extract-document.js +193 -0
- package/dist/tools/extract-document.js.map +1 -0
- package/dist/tools/index.d.ts +9 -7
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +17 -13
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/javascript-repl.d.ts +16 -15
- package/dist/tools/javascript-repl.d.ts.map +1 -1
- package/dist/tools/javascript-repl.js +101 -133
- package/dist/tools/javascript-repl.js.map +1 -1
- package/dist/tools/renderer-registry.d.ts +12 -0
- package/dist/tools/renderer-registry.d.ts.map +1 -1
- package/dist/tools/renderer-registry.js +78 -0
- package/dist/tools/renderer-registry.js.map +1 -1
- package/dist/tools/renderers/BashRenderer.d.ts +2 -4
- package/dist/tools/renderers/BashRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/BashRenderer.js +30 -26
- package/dist/tools/renderers/BashRenderer.js.map +1 -1
- package/dist/tools/renderers/CalculateRenderer.d.ts +2 -4
- package/dist/tools/renderers/CalculateRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/CalculateRenderer.js +32 -28
- package/dist/tools/renderers/CalculateRenderer.js.map +1 -1
- package/dist/tools/renderers/DefaultRenderer.d.ts +2 -4
- package/dist/tools/renderers/DefaultRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/DefaultRenderer.js +78 -18
- package/dist/tools/renderers/DefaultRenderer.js.map +1 -1
- package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts +2 -4
- package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/GetCurrentTimeRenderer.js +57 -21
- package/dist/tools/renderers/GetCurrentTimeRenderer.js.map +1 -1
- package/dist/tools/types.d.ts +5 -2
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/i18n.d.ts +424 -1
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +131 -7
- package/dist/utils/i18n.js.map +1 -1
- package/example/package.json +2 -1
- package/example/src/custom-messages.ts +112 -0
- package/example/src/main.ts +391 -38
- package/package.json +48 -43
- package/scripts/count-prompt-tokens.ts +88 -0
- package/src/ChatPanel.ts +93 -101
- package/src/{state/agent-session.ts → agent/agent.ts} +80 -55
- package/src/{state → agent}/transports/AppTransport.ts +6 -6
- package/src/{state → agent}/transports/ProviderTransport.ts +13 -7
- package/src/{state → agent}/transports/types.ts +8 -2
- package/src/components/AgentInterface.ts +32 -16
- package/src/components/ConsoleBlock.ts +5 -1
- package/src/components/ExpandableSection.ts +46 -0
- package/src/components/MessageEditor.ts +159 -5
- package/src/components/MessageList.ts +18 -3
- package/src/components/Messages.ts +48 -89
- package/src/components/ProviderKeyInput.ts +6 -5
- package/src/components/SandboxedIframe.ts +412 -321
- package/src/components/message-renderer-registry.ts +28 -0
- package/src/components/sandbox/ArtifactsRuntimeProvider.ts +219 -0
- package/src/components/sandbox/AttachmentsRuntimeProvider.ts +66 -0
- package/src/components/sandbox/ConsoleRuntimeProvider.ts +187 -0
- package/src/components/sandbox/FileDownloadRuntimeProvider.ts +110 -0
- package/src/components/sandbox/RuntimeMessageBridge.ts +82 -0
- package/src/components/sandbox/RuntimeMessageRouter.ts +216 -0
- package/src/components/sandbox/SandboxRuntimeProvider.ts +35 -0
- package/src/dialogs/ApiKeyPromptDialog.ts +2 -5
- package/src/dialogs/ModelSelector.ts +2 -2
- package/src/dialogs/PersistentStorageDialog.ts +141 -0
- package/src/dialogs/SessionListDialog.ts +148 -0
- package/src/dialogs/SettingsDialog.ts +1 -0
- package/src/index.ts +61 -20
- package/src/prompts/prompts.ts +282 -0
- package/src/storage/app-storage.ts +27 -24
- package/src/storage/backends/indexeddb-storage-backend.ts +193 -0
- package/src/storage/store.ts +33 -0
- package/src/storage/stores/provider-keys-store.ts +33 -0
- package/src/storage/stores/sessions-store.ts +130 -0
- package/src/storage/stores/settings-store.ts +34 -0
- package/src/storage/types.ts +182 -22
- package/src/tools/artifacts/ArtifactElement.ts +0 -1
- package/src/tools/artifacts/ArtifactPill.ts +25 -0
- package/src/tools/artifacts/Console.ts +93 -0
- package/src/tools/artifacts/DocxArtifact.ts +213 -0
- package/src/tools/artifacts/ExcelArtifact.ts +231 -0
- package/src/tools/artifacts/GenericArtifact.ts +117 -0
- package/src/tools/artifacts/HtmlArtifact.ts +64 -94
- package/src/tools/artifacts/ImageArtifact.ts +116 -0
- package/src/tools/artifacts/MarkdownArtifact.ts +0 -1
- package/src/tools/artifacts/PdfArtifact.ts +201 -0
- package/src/tools/artifacts/SvgArtifact.ts +0 -1
- package/src/tools/artifacts/TextArtifact.ts +0 -1
- package/src/tools/artifacts/artifacts-tool-renderer.ts +298 -0
- package/src/tools/artifacts/artifacts.ts +190 -366
- package/src/tools/artifacts/index.ts +1 -0
- package/src/tools/extract-document.ts +250 -0
- package/src/tools/index.ts +25 -14
- package/src/tools/javascript-repl.ts +138 -160
- package/src/tools/renderer-registry.ts +98 -0
- package/src/tools/renderers/BashRenderer.ts +33 -30
- package/src/tools/renderers/CalculateRenderer.ts +36 -31
- package/src/tools/renderers/DefaultRenderer.ts +84 -21
- package/src/tools/renderers/GetCurrentTimeRenderer.ts +68 -23
- package/src/tools/types.ts +10 -2
- package/src/utils/i18n.ts +203 -8
- package/dist/state/agent-session.d.ts.map +0 -1
- package/dist/state/agent-session.js.map +0 -1
- package/dist/state/transports/AppTransport.d.ts.map +0 -1
- package/dist/state/transports/ProviderTransport.d.ts.map +0 -1
- package/dist/state/transports/ProviderTransport.js.map +0 -1
- package/dist/state/transports/index.js.map +0 -1
- package/dist/state/transports/proxy-types.js.map +0 -1
- package/dist/state/transports/types.d.ts +0 -11
- package/dist/state/transports/types.d.ts.map +0 -1
- package/dist/storage/backends/chrome-storage-backend.d.ts +0 -18
- package/dist/storage/backends/chrome-storage-backend.d.ts.map +0 -1
- package/dist/storage/backends/chrome-storage-backend.js +0 -67
- package/dist/storage/backends/chrome-storage-backend.js.map +0 -1
- package/dist/storage/backends/indexeddb-backend.d.ts +0 -20
- package/dist/storage/backends/indexeddb-backend.d.ts.map +0 -1
- package/dist/storage/backends/indexeddb-backend.js +0 -89
- package/dist/storage/backends/indexeddb-backend.js.map +0 -1
- package/dist/storage/backends/local-storage-backend.d.ts +0 -18
- package/dist/storage/backends/local-storage-backend.d.ts.map +0 -1
- package/dist/storage/backends/local-storage-backend.js +0 -69
- package/dist/storage/backends/local-storage-backend.js.map +0 -1
- package/dist/storage/repositories/provider-keys-repository.d.ts +0 -34
- package/dist/storage/repositories/provider-keys-repository.d.ts.map +0 -1
- package/dist/storage/repositories/provider-keys-repository.js +0 -50
- package/dist/storage/repositories/provider-keys-repository.js.map +0 -1
- package/dist/storage/repositories/settings-repository.d.ts +0 -34
- package/dist/storage/repositories/settings-repository.d.ts.map +0 -1
- package/dist/storage/repositories/settings-repository.js +0 -46
- package/dist/storage/repositories/settings-repository.js.map +0 -1
- package/src/storage/backends/chrome-storage-backend.ts +0 -82
- package/src/storage/backends/indexeddb-backend.ts +0 -107
- package/src/storage/backends/local-storage-backend.ts +0 -74
- package/src/storage/repositories/provider-keys-repository.ts +0 -55
- package/src/storage/repositories/settings-repository.ts +0 -51
- /package/dist/{state → agent}/transports/index.d.ts +0 -0
- /package/dist/{state → agent}/transports/index.js +0 -0
- /package/dist/{state → agent}/transports/proxy-types.d.ts +0 -0
- /package/dist/{state → agent}/transports/proxy-types.js +0 -0
- /package/dist/{state → agent}/transports/types.js +0 -0
- /package/dist/{state → agent}/types.d.ts +0 -0
- /package/dist/{state → agent}/types.js +0 -0
- /package/src/{state → agent}/transports/index.ts +0 -0
- /package/src/{state → agent}/transports/proxy-types.ts +0 -0
- /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);
|
package/src/tools/index.ts
CHANGED
|
@@ -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 "./
|
|
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
|
-
*
|
|
18
|
+
* Enable or disable show JSON mode
|
|
19
|
+
* When enabled, all tool renderers will use the default JSON renderer
|
|
15
20
|
*/
|
|
16
|
-
export function
|
|
17
|
-
|
|
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
|
|
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.
|
|
41
|
+
return renderer.render(params, result, isStreaming);
|
|
31
42
|
}
|
|
32
|
-
return defaultRenderer.
|
|
43
|
+
return defaultRenderer.render(params, result, isStreaming);
|
|
33
44
|
}
|
|
34
45
|
|
|
35
|
-
export {
|
|
46
|
+
export { getToolRenderer, registerToolRenderer };
|