indusagi 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/dist/agent/agent-loop.d.ts +21 -0
- package/dist/agent/agent-loop.d.ts.map +1 -0
- package/dist/agent/agent-loop.js +307 -0
- package/dist/agent/agent.d.ts +122 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +347 -0
- package/dist/agent/index.d.ts +5 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/proxy.d.ts +85 -0
- package/dist/agent/proxy.d.ts.map +1 -0
- package/dist/agent/proxy.js +267 -0
- package/dist/agent/types.d.ts +178 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +1 -0
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1 -0
- package/dist/ai/api-registry.d.ts +20 -0
- package/dist/ai/api-registry.d.ts.map +1 -0
- package/dist/ai/api-registry.js +43 -0
- package/dist/ai/cli.d.ts +3 -0
- package/dist/ai/cli.d.ts.map +1 -0
- package/dist/ai/cli.js +115 -0
- package/dist/ai/env-api-keys.d.ts +9 -0
- package/dist/ai/env-api-keys.d.ts.map +1 -0
- package/dist/ai/env-api-keys.js +90 -0
- package/dist/ai/index.d.ts +20 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +19 -0
- package/dist/ai/models.d.ts +21 -0
- package/dist/ai/models.d.ts.map +1 -0
- package/dist/ai/models.generated.d.ts +11500 -0
- package/dist/ai/models.generated.d.ts.map +1 -0
- package/dist/ai/models.generated.js +11350 -0
- package/dist/ai/models.js +47 -0
- package/dist/ai/providers/amazon-bedrock.d.ts +15 -0
- package/dist/ai/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/ai/providers/amazon-bedrock.js +510 -0
- package/dist/ai/providers/anthropic.d.ts +13 -0
- package/dist/ai/providers/anthropic.d.ts.map +1 -0
- package/dist/ai/providers/anthropic.js +584 -0
- package/dist/ai/providers/azure-openai-responses.d.ts +15 -0
- package/dist/ai/providers/azure-openai-responses.d.ts.map +1 -0
- package/dist/ai/providers/azure-openai-responses.js +183 -0
- package/dist/ai/providers/google-gemini-cli.d.ts +74 -0
- package/dist/ai/providers/google-gemini-cli.d.ts.map +1 -0
- package/dist/ai/providers/google-gemini-cli.js +807 -0
- package/dist/ai/providers/google-shared.d.ts +64 -0
- package/dist/ai/providers/google-shared.d.ts.map +1 -0
- package/dist/ai/providers/google-shared.js +300 -0
- package/dist/ai/providers/google-vertex.d.ts +15 -0
- package/dist/ai/providers/google-vertex.d.ts.map +1 -0
- package/dist/ai/providers/google-vertex.js +370 -0
- package/dist/ai/providers/google.d.ts +13 -0
- package/dist/ai/providers/google.d.ts.map +1 -0
- package/dist/ai/providers/google.js +351 -0
- package/dist/ai/providers/openai-codex-responses.d.ts +9 -0
- package/dist/ai/providers/openai-codex-responses.d.ts.map +1 -0
- package/dist/ai/providers/openai-codex-responses.js +341 -0
- package/dist/ai/providers/openai-completions.d.ts +15 -0
- package/dist/ai/providers/openai-completions.d.ts.map +1 -0
- package/dist/ai/providers/openai-completions.js +701 -0
- package/dist/ai/providers/openai-responses-shared.d.ts +17 -0
- package/dist/ai/providers/openai-responses-shared.d.ts.map +1 -0
- package/dist/ai/providers/openai-responses-shared.js +423 -0
- package/dist/ai/providers/openai-responses.d.ts +13 -0
- package/dist/ai/providers/openai-responses.d.ts.map +1 -0
- package/dist/ai/providers/openai-responses.js +182 -0
- package/dist/ai/providers/register-builtins.d.ts +3 -0
- package/dist/ai/providers/register-builtins.d.ts.map +1 -0
- package/dist/ai/providers/register-builtins.js +62 -0
- package/dist/ai/providers/simple-options.d.ts +8 -0
- package/dist/ai/providers/simple-options.d.ts.map +1 -0
- package/dist/ai/providers/simple-options.js +31 -0
- package/dist/ai/providers/transform-messages.d.ts +8 -0
- package/dist/ai/providers/transform-messages.d.ts.map +1 -0
- package/dist/ai/providers/transform-messages.js +149 -0
- package/dist/ai/stream.d.ts +8 -0
- package/dist/ai/stream.d.ts.map +1 -0
- package/dist/ai/stream.js +34 -0
- package/dist/ai/types.d.ts +234 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +1 -0
- package/dist/ai/utils/event-stream.d.ts +21 -0
- package/dist/ai/utils/event-stream.d.ts.map +1 -0
- package/dist/ai/utils/event-stream.js +76 -0
- package/dist/ai/utils/json-parse.d.ts +9 -0
- package/dist/ai/utils/json-parse.d.ts.map +1 -0
- package/dist/ai/utils/json-parse.js +28 -0
- package/dist/ai/utils/oauth/anthropic.d.ts +17 -0
- package/dist/ai/utils/oauth/anthropic.d.ts.map +1 -0
- package/dist/ai/utils/oauth/anthropic.js +103 -0
- package/dist/ai/utils/oauth/github-copilot.d.ts +30 -0
- package/dist/ai/utils/oauth/github-copilot.d.ts.map +1 -0
- package/dist/ai/utils/oauth/github-copilot.js +280 -0
- package/dist/ai/utils/oauth/google-antigravity.d.ts +26 -0
- package/dist/ai/utils/oauth/google-antigravity.d.ts.map +1 -0
- package/dist/ai/utils/oauth/google-antigravity.js +355 -0
- package/dist/ai/utils/oauth/google-gemini-cli.d.ts +26 -0
- package/dist/ai/utils/oauth/google-gemini-cli.d.ts.map +1 -0
- package/dist/ai/utils/oauth/google-gemini-cli.js +461 -0
- package/dist/ai/utils/oauth/index.d.ts +50 -0
- package/dist/ai/utils/oauth/index.d.ts.map +1 -0
- package/dist/ai/utils/oauth/index.js +106 -0
- package/dist/ai/utils/oauth/openai-codex.d.ts +34 -0
- package/dist/ai/utils/oauth/openai-codex.d.ts.map +1 -0
- package/dist/ai/utils/oauth/openai-codex.js +379 -0
- package/dist/ai/utils/oauth/pkce.d.ts +13 -0
- package/dist/ai/utils/oauth/pkce.d.ts.map +1 -0
- package/dist/ai/utils/oauth/pkce.js +30 -0
- package/dist/ai/utils/oauth/types.d.ts +47 -0
- package/dist/ai/utils/oauth/types.d.ts.map +1 -0
- package/dist/ai/utils/oauth/types.js +1 -0
- package/dist/ai/utils/overflow.d.ts +51 -0
- package/dist/ai/utils/overflow.d.ts.map +1 -0
- package/dist/ai/utils/overflow.js +111 -0
- package/dist/ai/utils/sanitize-unicode.d.ts +22 -0
- package/dist/ai/utils/sanitize-unicode.d.ts.map +1 -0
- package/dist/ai/utils/sanitize-unicode.js +25 -0
- package/dist/ai/utils/typebox-helpers.d.ts +17 -0
- package/dist/ai/utils/typebox-helpers.d.ts.map +1 -0
- package/dist/ai/utils/typebox-helpers.js +20 -0
- package/dist/ai/utils/validation.d.ts +18 -0
- package/dist/ai/utils/validation.d.ts.map +1 -0
- package/dist/ai/utils/validation.js +71 -0
- package/dist/ai.d.ts +2 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/tui/autocomplete.d.ts +47 -0
- package/dist/tui/autocomplete.d.ts.map +1 -0
- package/dist/tui/autocomplete.js +474 -0
- package/dist/tui/components/box.d.ts +24 -0
- package/dist/tui/components/box.d.ts.map +1 -0
- package/dist/tui/components/box.js +100 -0
- package/dist/tui/components/cancellable-loader.d.ts +22 -0
- package/dist/tui/components/cancellable-loader.d.ts.map +1 -0
- package/dist/tui/components/cancellable-loader.js +35 -0
- package/dist/tui/components/editor.d.ts +171 -0
- package/dist/tui/components/editor.d.ts.map +1 -0
- package/dist/tui/components/editor.js +1540 -0
- package/dist/tui/components/image.d.ts +28 -0
- package/dist/tui/components/image.d.ts.map +1 -0
- package/dist/tui/components/image.js +60 -0
- package/dist/tui/components/input.d.ts +25 -0
- package/dist/tui/components/input.d.ts.map +1 -0
- package/dist/tui/components/input.js +297 -0
- package/dist/tui/components/loader.d.ts +21 -0
- package/dist/tui/components/loader.d.ts.map +1 -0
- package/dist/tui/components/loader.js +45 -0
- package/dist/tui/components/markdown.d.ts +89 -0
- package/dist/tui/components/markdown.d.ts.map +1 -0
- package/dist/tui/components/markdown.js +525 -0
- package/dist/tui/components/select-list.d.ts +32 -0
- package/dist/tui/components/select-list.d.ts.map +1 -0
- package/dist/tui/components/select-list.js +147 -0
- package/dist/tui/components/settings-list.d.ts +50 -0
- package/dist/tui/components/settings-list.d.ts.map +1 -0
- package/dist/tui/components/settings-list.js +176 -0
- package/dist/tui/components/spacer.d.ts +12 -0
- package/dist/tui/components/spacer.d.ts.map +1 -0
- package/dist/tui/components/spacer.js +21 -0
- package/dist/tui/components/text.d.ts +19 -0
- package/dist/tui/components/text.d.ts.map +1 -0
- package/dist/tui/components/text.js +80 -0
- package/dist/tui/components/truncated-text.d.ts +13 -0
- package/dist/tui/components/truncated-text.d.ts.map +1 -0
- package/dist/tui/components/truncated-text.js +47 -0
- package/dist/tui/editor-component.d.ts +35 -0
- package/dist/tui/editor-component.d.ts.map +1 -0
- package/dist/tui/editor-component.js +1 -0
- package/dist/tui/fuzzy.d.ts +16 -0
- package/dist/tui/fuzzy.d.ts.map +1 -0
- package/dist/tui/fuzzy.js +106 -0
- package/dist/tui/index.d.ts +23 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +31 -0
- package/dist/tui/keybindings.d.ts +39 -0
- package/dist/tui/keybindings.d.ts.map +1 -0
- package/dist/tui/keybindings.js +110 -0
- package/dist/tui/keys.d.ts +160 -0
- package/dist/tui/keys.d.ts.map +1 -0
- package/dist/tui/keys.js +939 -0
- package/dist/tui/stdin-buffer.d.ts +48 -0
- package/dist/tui/stdin-buffer.d.ts.map +1 -0
- package/dist/tui/stdin-buffer.js +315 -0
- package/dist/tui/terminal-image.d.ts +67 -0
- package/dist/tui/terminal-image.d.ts.map +1 -0
- package/dist/tui/terminal-image.js +277 -0
- package/dist/tui/terminal.d.ts +63 -0
- package/dist/tui/terminal.d.ts.map +1 -0
- package/dist/tui/terminal.js +174 -0
- package/dist/tui/tui.d.ts +191 -0
- package/dist/tui/tui.d.ts.map +1 -0
- package/dist/tui/tui.js +881 -0
- package/dist/tui/utils.d.ts +78 -0
- package/dist/tui/utils.d.ts.map +1 -0
- package/dist/tui/utils.js +801 -0
- package/dist/tui.d.ts +2 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +1 -0
- package/dist/webui/ChatPanel.d.ts +28 -0
- package/dist/webui/ChatPanel.d.ts.map +1 -0
- package/dist/webui/ChatPanel.js +192 -0
- package/dist/webui/components/AgentInterface.d.ts +39 -0
- package/dist/webui/components/AgentInterface.d.ts.map +1 -0
- package/dist/webui/components/AgentInterface.js +370 -0
- package/dist/webui/components/AttachmentTile.d.ts +12 -0
- package/dist/webui/components/AttachmentTile.d.ts.map +1 -0
- package/dist/webui/components/AttachmentTile.js +110 -0
- package/dist/webui/components/ConsoleBlock.d.ts +12 -0
- package/dist/webui/components/ConsoleBlock.d.ts.map +1 -0
- package/dist/webui/components/ConsoleBlock.js +83 -0
- package/dist/webui/components/CustomProviderCard.d.ts +17 -0
- package/dist/webui/components/CustomProviderCard.d.ts.map +1 -0
- package/dist/webui/components/CustomProviderCard.js +109 -0
- package/dist/webui/components/ExpandableSection.d.ts +15 -0
- package/dist/webui/components/ExpandableSection.d.ts.map +1 -0
- package/dist/webui/components/ExpandableSection.js +62 -0
- package/dist/webui/components/Input.d.ts +26 -0
- package/dist/webui/components/Input.d.ts.map +1 -0
- package/dist/webui/components/Input.js +56 -0
- package/dist/webui/components/MessageEditor.d.ts +44 -0
- package/dist/webui/components/MessageEditor.d.ts.map +1 -0
- package/dist/webui/components/MessageEditor.js +413 -0
- package/dist/webui/components/MessageList.d.ts +14 -0
- package/dist/webui/components/MessageList.d.ts.map +1 -0
- package/dist/webui/components/MessageList.js +103 -0
- package/dist/webui/components/Messages.d.ts +94 -0
- package/dist/webui/components/Messages.d.ts.map +1 -0
- package/dist/webui/components/Messages.js +351 -0
- package/dist/webui/components/ProviderKeyInput.d.ts +16 -0
- package/dist/webui/components/ProviderKeyInput.d.ts.map +1 -0
- package/dist/webui/components/ProviderKeyInput.js +170 -0
- package/dist/webui/components/SandboxedIframe.d.ts +85 -0
- package/dist/webui/components/SandboxedIframe.d.ts.map +1 -0
- package/dist/webui/components/SandboxedIframe.js +510 -0
- package/dist/webui/components/StreamingMessageContainer.d.ts +19 -0
- package/dist/webui/components/StreamingMessageContainer.d.ts.map +1 -0
- package/dist/webui/components/StreamingMessageContainer.js +116 -0
- package/dist/webui/components/ThinkingBlock.d.ts +11 -0
- package/dist/webui/components/ThinkingBlock.d.ts.map +1 -0
- package/dist/webui/components/ThinkingBlock.js +57 -0
- package/dist/webui/components/message-renderer-registry.d.ts +12 -0
- package/dist/webui/components/message-renderer-registry.d.ts.map +1 -0
- package/dist/webui/components/message-renderer-registry.js +11 -0
- package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.d.ts +35 -0
- package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.d.ts.map +1 -0
- package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.js +188 -0
- package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.d.ts +17 -0
- package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.d.ts.map +1 -0
- package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.js +63 -0
- package/dist/webui/components/sandbox/ConsoleRuntimeProvider.d.ts +42 -0
- package/dist/webui/components/sandbox/ConsoleRuntimeProvider.d.ts.map +1 -0
- package/dist/webui/components/sandbox/ConsoleRuntimeProvider.js +160 -0
- package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.d.ts +30 -0
- package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.d.ts.map +1 -0
- package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.js +96 -0
- package/dist/webui/components/sandbox/RuntimeMessageBridge.d.ts +19 -0
- package/dist/webui/components/sandbox/RuntimeMessageBridge.d.ts.map +1 -0
- package/dist/webui/components/sandbox/RuntimeMessageBridge.js +73 -0
- package/dist/webui/components/sandbox/RuntimeMessageRouter.d.ts +65 -0
- package/dist/webui/components/sandbox/RuntimeMessageRouter.d.ts.map +1 -0
- package/dist/webui/components/sandbox/RuntimeMessageRouter.js +167 -0
- package/dist/webui/components/sandbox/SandboxRuntimeProvider.d.ts +48 -0
- package/dist/webui/components/sandbox/SandboxRuntimeProvider.d.ts.map +1 -0
- package/dist/webui/components/sandbox/SandboxRuntimeProvider.js +1 -0
- package/dist/webui/dialogs/ApiKeyPromptDialog.d.ts +15 -0
- package/dist/webui/dialogs/ApiKeyPromptDialog.d.ts.map +1 -0
- package/dist/webui/dialogs/ApiKeyPromptDialog.js +78 -0
- package/dist/webui/dialogs/AttachmentOverlay.d.ts +32 -0
- package/dist/webui/dialogs/AttachmentOverlay.d.ts.map +1 -0
- package/dist/webui/dialogs/AttachmentOverlay.js +575 -0
- package/dist/webui/dialogs/CustomProviderDialog.d.ts +25 -0
- package/dist/webui/dialogs/CustomProviderDialog.d.ts.map +1 -0
- package/dist/webui/dialogs/CustomProviderDialog.js +269 -0
- package/dist/webui/dialogs/ModelSelector.d.ts +27 -0
- package/dist/webui/dialogs/ModelSelector.d.ts.map +1 -0
- package/dist/webui/dialogs/ModelSelector.js +319 -0
- package/dist/webui/dialogs/PersistentStorageDialog.d.ts +17 -0
- package/dist/webui/dialogs/PersistentStorageDialog.d.ts.map +1 -0
- package/dist/webui/dialogs/PersistentStorageDialog.js +146 -0
- package/dist/webui/dialogs/ProvidersModelsTab.d.ts +20 -0
- package/dist/webui/dialogs/ProvidersModelsTab.d.ts.map +1 -0
- package/dist/webui/dialogs/ProvidersModelsTab.js +190 -0
- package/dist/webui/dialogs/SessionListDialog.d.ts +19 -0
- package/dist/webui/dialogs/SessionListDialog.d.ts.map +1 -0
- package/dist/webui/dialogs/SessionListDialog.js +153 -0
- package/dist/webui/dialogs/SettingsDialog.d.ts +30 -0
- package/dist/webui/dialogs/SettingsDialog.d.ts.map +1 -0
- package/dist/webui/dialogs/SettingsDialog.js +228 -0
- package/dist/webui/index.d.ts +65 -0
- package/dist/webui/index.d.ts.map +1 -0
- package/dist/webui/index.js +67 -0
- package/dist/webui/prompts/prompts.d.ts +11 -0
- package/dist/webui/prompts/prompts.d.ts.map +1 -0
- package/dist/webui/prompts/prompts.js +271 -0
- package/dist/webui/storage/app-storage.d.ts +33 -0
- package/dist/webui/storage/app-storage.d.ts.map +1 -0
- package/dist/webui/storage/app-storage.js +37 -0
- package/dist/webui/storage/backends/indexeddb-storage-backend.d.ts +27 -0
- package/dist/webui/storage/backends/indexeddb-storage-backend.d.ts.map +1 -0
- package/dist/webui/storage/backends/indexeddb-storage-backend.js +165 -0
- package/dist/webui/storage/store.d.ts +23 -0
- package/dist/webui/storage/store.d.ts.map +1 -0
- package/dist/webui/storage/store.js +25 -0
- package/dist/webui/storage/stores/custom-providers-store.d.ts +25 -0
- package/dist/webui/storage/stores/custom-providers-store.d.ts.map +1 -0
- package/dist/webui/storage/stores/custom-providers-store.js +34 -0
- package/dist/webui/storage/stores/provider-keys-store.d.ts +14 -0
- package/dist/webui/storage/stores/provider-keys-store.d.ts.map +1 -0
- package/dist/webui/storage/stores/provider-keys-store.js +26 -0
- package/dist/webui/storage/stores/sessions-store.d.ts +32 -0
- package/dist/webui/storage/stores/sessions-store.d.ts.map +1 -0
- package/dist/webui/storage/stores/sessions-store.js +112 -0
- package/dist/webui/storage/stores/settings-store.d.ts +14 -0
- package/dist/webui/storage/stores/settings-store.d.ts.map +1 -0
- package/dist/webui/storage/stores/settings-store.js +27 -0
- package/dist/webui/storage/types.d.ts +176 -0
- package/dist/webui/storage/types.d.ts.map +1 -0
- package/dist/webui/storage/types.js +1 -0
- package/dist/webui/tools/artifacts/ArtifactElement.d.ts +9 -0
- package/dist/webui/tools/artifacts/ArtifactElement.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/ArtifactElement.js +10 -0
- package/dist/webui/tools/artifacts/ArtifactPill.d.ts +4 -0
- package/dist/webui/tools/artifacts/ArtifactPill.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/ArtifactPill.js +22 -0
- package/dist/webui/tools/artifacts/Console.d.ts +18 -0
- package/dist/webui/tools/artifacts/Console.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/Console.js +94 -0
- package/dist/webui/tools/artifacts/DocxArtifact.d.ts +22 -0
- package/dist/webui/tools/artifacts/DocxArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/DocxArtifact.js +207 -0
- package/dist/webui/tools/artifacts/ExcelArtifact.d.ts +24 -0
- package/dist/webui/tools/artifacts/ExcelArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/ExcelArtifact.js +215 -0
- package/dist/webui/tools/artifacts/GenericArtifact.d.ts +19 -0
- package/dist/webui/tools/artifacts/GenericArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/GenericArtifact.js +116 -0
- package/dist/webui/tools/artifacts/HtmlArtifact.d.ts +27 -0
- package/dist/webui/tools/artifacts/HtmlArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/HtmlArtifact.js +188 -0
- package/dist/webui/tools/artifacts/ImageArtifact.d.ts +20 -0
- package/dist/webui/tools/artifacts/ImageArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/ImageArtifact.js +119 -0
- package/dist/webui/tools/artifacts/MarkdownArtifact.d.ts +19 -0
- package/dist/webui/tools/artifacts/MarkdownArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/MarkdownArtifact.js +81 -0
- package/dist/webui/tools/artifacts/PdfArtifact.d.ts +25 -0
- package/dist/webui/tools/artifacts/PdfArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/PdfArtifact.js +183 -0
- package/dist/webui/tools/artifacts/SvgArtifact.d.ts +18 -0
- package/dist/webui/tools/artifacts/SvgArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/SvgArtifact.js +77 -0
- package/dist/webui/tools/artifacts/TextArtifact.d.ts +19 -0
- package/dist/webui/tools/artifacts/TextArtifact.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/TextArtifact.js +143 -0
- package/dist/webui/tools/artifacts/artifacts-tool-renderer.d.ts +11 -0
- package/dist/webui/tools/artifacts/artifacts-tool-renderer.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/artifacts-tool-renderer.js +271 -0
- package/dist/webui/tools/artifacts/artifacts.d.ts +63 -0
- package/dist/webui/tools/artifacts/artifacts.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/artifacts.js +658 -0
- package/dist/webui/tools/artifacts/index.d.ts +8 -0
- package/dist/webui/tools/artifacts/index.d.ts.map +1 -0
- package/dist/webui/tools/artifacts/index.js +7 -0
- package/dist/webui/tools/extract-document.d.ts +24 -0
- package/dist/webui/tools/extract-document.d.ts.map +1 -0
- package/dist/webui/tools/extract-document.js +215 -0
- package/dist/webui/tools/index.d.ts +16 -0
- package/dist/webui/tools/index.d.ts.map +1 -0
- package/dist/webui/tools/index.js +32 -0
- package/dist/webui/tools/javascript-repl.d.ts +44 -0
- package/dist/webui/tools/javascript-repl.d.ts.map +1 -0
- package/dist/webui/tools/javascript-repl.js +223 -0
- package/dist/webui/tools/renderer-registry.d.ts +23 -0
- package/dist/webui/tools/renderer-registry.d.ts.map +1 -0
- package/dist/webui/tools/renderer-registry.js +106 -0
- package/dist/webui/tools/renderers/BashRenderer.d.ts +10 -0
- package/dist/webui/tools/renderers/BashRenderer.d.ts.map +1 -0
- package/dist/webui/tools/renderers/BashRenderer.js +41 -0
- package/dist/webui/tools/renderers/CalculateRenderer.d.ts +10 -0
- package/dist/webui/tools/renderers/CalculateRenderer.d.ts.map +1 -0
- package/dist/webui/tools/renderers/CalculateRenderer.js +44 -0
- package/dist/webui/tools/renderers/DefaultRenderer.d.ts +6 -0
- package/dist/webui/tools/renderers/DefaultRenderer.d.ts.map +1 -0
- package/dist/webui/tools/renderers/DefaultRenderer.js +93 -0
- package/dist/webui/tools/renderers/GetCurrentTimeRenderer.d.ts +10 -0
- package/dist/webui/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -0
- package/dist/webui/tools/renderers/GetCurrentTimeRenderer.js +71 -0
- package/dist/webui/tools/types.d.ts +10 -0
- package/dist/webui/tools/types.d.ts.map +1 -0
- package/dist/webui/tools/types.js +1 -0
- package/dist/webui/utils/attachment-utils.d.ts +19 -0
- package/dist/webui/utils/attachment-utils.d.ts.map +1 -0
- package/dist/webui/utils/attachment-utils.js +414 -0
- package/dist/webui/utils/auth-token.d.ts +3 -0
- package/dist/webui/utils/auth-token.d.ts.map +1 -0
- package/dist/webui/utils/auth-token.js +18 -0
- package/dist/webui/utils/format.d.ts +6 -0
- package/dist/webui/utils/format.d.ts.map +1 -0
- package/dist/webui/utils/format.js +46 -0
- package/dist/webui/utils/i18n.d.ts +636 -0
- package/dist/webui/utils/i18n.d.ts.map +1 -0
- package/dist/webui/utils/i18n.js +417 -0
- package/dist/webui/utils/model-discovery.d.ts +38 -0
- package/dist/webui/utils/model-discovery.d.ts.map +1 -0
- package/dist/webui/utils/model-discovery.js +242 -0
- package/dist/webui/utils/proxy-utils.d.ts +45 -0
- package/dist/webui/utils/proxy-utils.d.ts.map +1 -0
- package/dist/webui/utils/proxy-utils.js +115 -0
- package/dist/webui/utils/test-sessions.d.ts +359 -0
- package/dist/webui/utils/test-sessions.d.ts.map +1 -0
- package/dist/webui/utils/test-sessions.js +2324 -0
- package/dist/webui.d.ts +2 -0
- package/dist/webui.d.ts.map +1 -0
- package/dist/webui.js +1 -0
- package/package.json +105 -0
|
@@ -0,0 +1,351 @@
|
|
|
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 { html, LitElement } from "lit";
|
|
8
|
+
import { customElement, property } from "lit/decorators.js";
|
|
9
|
+
import { renderTool } from "../tools/index.js";
|
|
10
|
+
import { formatUsage } from "../utils/format.js";
|
|
11
|
+
import { i18n } from "../utils/i18n.js";
|
|
12
|
+
import "./ThinkingBlock.js";
|
|
13
|
+
let UserMessage = class UserMessage extends LitElement {
|
|
14
|
+
createRenderRoot() {
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
connectedCallback() {
|
|
18
|
+
super.connectedCallback();
|
|
19
|
+
this.style.display = "block";
|
|
20
|
+
}
|
|
21
|
+
render() {
|
|
22
|
+
const content = typeof this.message.content === "string"
|
|
23
|
+
? this.message.content
|
|
24
|
+
: this.message.content.find((c) => c.type === "text")?.text || "";
|
|
25
|
+
return html `
|
|
26
|
+
<div class="flex justify-start mx-4">
|
|
27
|
+
<div class="user-message-container py-2 px-4 rounded-xl">
|
|
28
|
+
<markdown-block .content=${content}></markdown-block>
|
|
29
|
+
${this.message.role === "user-with-attachments" &&
|
|
30
|
+
this.message.attachments &&
|
|
31
|
+
this.message.attachments.length > 0
|
|
32
|
+
? html `
|
|
33
|
+
<div class="mt-3 flex flex-wrap gap-2">
|
|
34
|
+
${this.message.attachments.map((attachment) => html ` <attachment-tile .attachment=${attachment}></attachment-tile> `)}
|
|
35
|
+
</div>
|
|
36
|
+
`
|
|
37
|
+
: ""}
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
`;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
__decorate([
|
|
44
|
+
property({ type: Object })
|
|
45
|
+
], UserMessage.prototype, "message", void 0);
|
|
46
|
+
UserMessage = __decorate([
|
|
47
|
+
customElement("user-message")
|
|
48
|
+
], UserMessage);
|
|
49
|
+
export { UserMessage };
|
|
50
|
+
let AssistantMessage = class AssistantMessage extends LitElement {
|
|
51
|
+
constructor() {
|
|
52
|
+
super(...arguments);
|
|
53
|
+
this.hideToolCalls = false;
|
|
54
|
+
this.isStreaming = false;
|
|
55
|
+
}
|
|
56
|
+
createRenderRoot() {
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
connectedCallback() {
|
|
60
|
+
super.connectedCallback();
|
|
61
|
+
this.style.display = "block";
|
|
62
|
+
}
|
|
63
|
+
render() {
|
|
64
|
+
// Render content in the order it appears
|
|
65
|
+
const orderedParts = [];
|
|
66
|
+
for (const chunk of this.message.content) {
|
|
67
|
+
if (chunk.type === "text" && chunk.text.trim() !== "") {
|
|
68
|
+
orderedParts.push(html `<markdown-block .content=${chunk.text}></markdown-block>`);
|
|
69
|
+
}
|
|
70
|
+
else if (chunk.type === "thinking" && chunk.thinking.trim() !== "") {
|
|
71
|
+
orderedParts.push(html `<thinking-block .content=${chunk.thinking} .isStreaming=${this.isStreaming}></thinking-block>`);
|
|
72
|
+
}
|
|
73
|
+
else if (chunk.type === "toolCall") {
|
|
74
|
+
if (!this.hideToolCalls) {
|
|
75
|
+
const tool = this.tools?.find((t) => t.name === chunk.name);
|
|
76
|
+
const pending = this.pendingToolCalls?.has(chunk.id) ?? false;
|
|
77
|
+
const result = this.toolResultsById?.get(chunk.id);
|
|
78
|
+
// A tool call is aborted if the message was aborted and there's no result for this tool call
|
|
79
|
+
const aborted = this.message.stopReason === "aborted" && !result;
|
|
80
|
+
orderedParts.push(html `<tool-message
|
|
81
|
+
.tool=${tool}
|
|
82
|
+
.toolCall=${chunk}
|
|
83
|
+
.result=${result}
|
|
84
|
+
.pending=${pending}
|
|
85
|
+
.aborted=${aborted}
|
|
86
|
+
.isStreaming=${this.isStreaming}
|
|
87
|
+
></tool-message>`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return html `
|
|
92
|
+
<div>
|
|
93
|
+
${orderedParts.length ? html ` <div class="px-4 flex flex-col gap-3">${orderedParts}</div> ` : ""}
|
|
94
|
+
${this.message.usage && !this.isStreaming
|
|
95
|
+
? this.onCostClick
|
|
96
|
+
? html ` <div class="px-4 mt-2 text-xs text-muted-foreground cursor-pointer hover:text-foreground transition-colors" @click=${this.onCostClick}>${formatUsage(this.message.usage)}</div> `
|
|
97
|
+
: html ` <div class="px-4 mt-2 text-xs text-muted-foreground">${formatUsage(this.message.usage)}</div> `
|
|
98
|
+
: ""}
|
|
99
|
+
${this.message.stopReason === "error" && this.message.errorMessage
|
|
100
|
+
? html `
|
|
101
|
+
<div class="mx-4 mt-3 p-3 bg-destructive/10 text-destructive rounded-lg text-sm overflow-hidden">
|
|
102
|
+
<strong>${i18n("Error:")}</strong> ${this.message.errorMessage}
|
|
103
|
+
</div>
|
|
104
|
+
`
|
|
105
|
+
: ""}
|
|
106
|
+
${this.message.stopReason === "aborted"
|
|
107
|
+
? html `<span class="text-sm text-destructive italic">${i18n("Request aborted")}</span>`
|
|
108
|
+
: ""}
|
|
109
|
+
</div>
|
|
110
|
+
`;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
__decorate([
|
|
114
|
+
property({ type: Object })
|
|
115
|
+
], AssistantMessage.prototype, "message", void 0);
|
|
116
|
+
__decorate([
|
|
117
|
+
property({ type: Array })
|
|
118
|
+
], AssistantMessage.prototype, "tools", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
property({ type: Object })
|
|
121
|
+
], AssistantMessage.prototype, "pendingToolCalls", void 0);
|
|
122
|
+
__decorate([
|
|
123
|
+
property({ type: Boolean })
|
|
124
|
+
], AssistantMessage.prototype, "hideToolCalls", void 0);
|
|
125
|
+
__decorate([
|
|
126
|
+
property({ type: Object })
|
|
127
|
+
], AssistantMessage.prototype, "toolResultsById", void 0);
|
|
128
|
+
__decorate([
|
|
129
|
+
property({ type: Boolean })
|
|
130
|
+
], AssistantMessage.prototype, "isStreaming", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
property({ attribute: false })
|
|
133
|
+
], AssistantMessage.prototype, "onCostClick", void 0);
|
|
134
|
+
AssistantMessage = __decorate([
|
|
135
|
+
customElement("assistant-message")
|
|
136
|
+
], AssistantMessage);
|
|
137
|
+
export { AssistantMessage };
|
|
138
|
+
let ToolMessageDebugView = class ToolMessageDebugView extends LitElement {
|
|
139
|
+
constructor() {
|
|
140
|
+
super(...arguments);
|
|
141
|
+
this.hasResult = false;
|
|
142
|
+
}
|
|
143
|
+
createRenderRoot() {
|
|
144
|
+
return this; // light DOM for shared styles
|
|
145
|
+
}
|
|
146
|
+
connectedCallback() {
|
|
147
|
+
super.connectedCallback();
|
|
148
|
+
this.style.display = "block";
|
|
149
|
+
}
|
|
150
|
+
pretty(value) {
|
|
151
|
+
try {
|
|
152
|
+
if (typeof value === "string") {
|
|
153
|
+
const maybeJson = JSON.parse(value);
|
|
154
|
+
return { content: JSON.stringify(maybeJson, null, 2), isJson: true };
|
|
155
|
+
}
|
|
156
|
+
return { content: JSON.stringify(value, null, 2), isJson: true };
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return { content: typeof value === "string" ? value : String(value), isJson: false };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
render() {
|
|
163
|
+
const textOutput = this.result?.content
|
|
164
|
+
?.filter((c) => c.type === "text")
|
|
165
|
+
.map((c) => c.text)
|
|
166
|
+
.join("\n") || "";
|
|
167
|
+
const output = this.pretty(textOutput);
|
|
168
|
+
const details = this.pretty(this.result?.details);
|
|
169
|
+
return html `
|
|
170
|
+
<div class="mt-3 flex flex-col gap-2">
|
|
171
|
+
<div>
|
|
172
|
+
<div class="text-xs font-medium mb-1 text-muted-foreground">${i18n("Call")}</div>
|
|
173
|
+
<code-block .code=${this.pretty(this.callArgs).content} language="json"></code-block>
|
|
174
|
+
</div>
|
|
175
|
+
<div>
|
|
176
|
+
<div class="text-xs font-medium mb-1 text-muted-foreground">${i18n("Result")}</div>
|
|
177
|
+
${this.hasResult
|
|
178
|
+
? html `<code-block .code=${output.content} language="${output.isJson ? "json" : "text"}"></code-block>
|
|
179
|
+
<code-block .code=${details.content} language="${details.isJson ? "json" : "text"}"></code-block>`
|
|
180
|
+
: html `<div class="text-xs text-muted-foreground">${i18n("(no result)")}</div>`}
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
`;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
__decorate([
|
|
187
|
+
property({ type: Object })
|
|
188
|
+
], ToolMessageDebugView.prototype, "callArgs", void 0);
|
|
189
|
+
__decorate([
|
|
190
|
+
property({ type: Object })
|
|
191
|
+
], ToolMessageDebugView.prototype, "result", void 0);
|
|
192
|
+
__decorate([
|
|
193
|
+
property({ type: Boolean })
|
|
194
|
+
], ToolMessageDebugView.prototype, "hasResult", void 0);
|
|
195
|
+
ToolMessageDebugView = __decorate([
|
|
196
|
+
customElement("tool-message-debug")
|
|
197
|
+
], ToolMessageDebugView);
|
|
198
|
+
export { ToolMessageDebugView };
|
|
199
|
+
let ToolMessage = class ToolMessage extends LitElement {
|
|
200
|
+
constructor() {
|
|
201
|
+
super(...arguments);
|
|
202
|
+
this.pending = false;
|
|
203
|
+
this.aborted = false;
|
|
204
|
+
this.isStreaming = false;
|
|
205
|
+
}
|
|
206
|
+
createRenderRoot() {
|
|
207
|
+
return this;
|
|
208
|
+
}
|
|
209
|
+
connectedCallback() {
|
|
210
|
+
super.connectedCallback();
|
|
211
|
+
this.style.display = "block";
|
|
212
|
+
}
|
|
213
|
+
render() {
|
|
214
|
+
const toolName = this.tool?.name || this.toolCall.name;
|
|
215
|
+
// Render tool content (renderer handles errors and styling)
|
|
216
|
+
const result = this.aborted
|
|
217
|
+
? {
|
|
218
|
+
role: "toolResult",
|
|
219
|
+
isError: true,
|
|
220
|
+
content: [],
|
|
221
|
+
toolCallId: this.toolCall.id,
|
|
222
|
+
toolName: this.toolCall.name,
|
|
223
|
+
timestamp: Date.now(),
|
|
224
|
+
}
|
|
225
|
+
: this.result;
|
|
226
|
+
const renderResult = renderTool(toolName, this.toolCall.arguments, result, !this.aborted && (this.isStreaming || this.pending));
|
|
227
|
+
// Handle custom rendering (no card wrapper)
|
|
228
|
+
if (renderResult.isCustom) {
|
|
229
|
+
return renderResult.content;
|
|
230
|
+
}
|
|
231
|
+
// Default: wrap in card
|
|
232
|
+
return html `
|
|
233
|
+
<div class="p-2.5 border border-border rounded-md bg-card text-card-foreground shadow-xs">
|
|
234
|
+
${renderResult.content}
|
|
235
|
+
</div>
|
|
236
|
+
`;
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
__decorate([
|
|
240
|
+
property({ type: Object })
|
|
241
|
+
], ToolMessage.prototype, "toolCall", void 0);
|
|
242
|
+
__decorate([
|
|
243
|
+
property({ type: Object })
|
|
244
|
+
], ToolMessage.prototype, "tool", void 0);
|
|
245
|
+
__decorate([
|
|
246
|
+
property({ type: Object })
|
|
247
|
+
], ToolMessage.prototype, "result", void 0);
|
|
248
|
+
__decorate([
|
|
249
|
+
property({ type: Boolean })
|
|
250
|
+
], ToolMessage.prototype, "pending", void 0);
|
|
251
|
+
__decorate([
|
|
252
|
+
property({ type: Boolean })
|
|
253
|
+
], ToolMessage.prototype, "aborted", void 0);
|
|
254
|
+
__decorate([
|
|
255
|
+
property({ type: Boolean })
|
|
256
|
+
], ToolMessage.prototype, "isStreaming", void 0);
|
|
257
|
+
ToolMessage = __decorate([
|
|
258
|
+
customElement("tool-message")
|
|
259
|
+
], ToolMessage);
|
|
260
|
+
export { ToolMessage };
|
|
261
|
+
let AbortedMessage = class AbortedMessage extends LitElement {
|
|
262
|
+
createRenderRoot() {
|
|
263
|
+
return this;
|
|
264
|
+
}
|
|
265
|
+
connectedCallback() {
|
|
266
|
+
super.connectedCallback();
|
|
267
|
+
this.style.display = "block";
|
|
268
|
+
}
|
|
269
|
+
render() {
|
|
270
|
+
return html `<span class="text-sm text-destructive italic">${i18n("Request aborted")}</span>`;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
AbortedMessage = __decorate([
|
|
274
|
+
customElement("aborted-message")
|
|
275
|
+
], AbortedMessage);
|
|
276
|
+
export { AbortedMessage };
|
|
277
|
+
/**
|
|
278
|
+
* Convert attachments to content blocks for LLM.
|
|
279
|
+
* - Images become ImageContent blocks
|
|
280
|
+
* - Documents with extractedText become TextContent blocks with filename header
|
|
281
|
+
*/
|
|
282
|
+
export function convertAttachments(attachments) {
|
|
283
|
+
const content = [];
|
|
284
|
+
for (const attachment of attachments) {
|
|
285
|
+
if (attachment.type === "image") {
|
|
286
|
+
content.push({
|
|
287
|
+
type: "image",
|
|
288
|
+
data: attachment.content,
|
|
289
|
+
mimeType: attachment.mimeType,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
else if (attachment.type === "document" && attachment.extractedText) {
|
|
293
|
+
content.push({
|
|
294
|
+
type: "text",
|
|
295
|
+
text: `\n\n[Document: ${attachment.fileName}]\n${attachment.extractedText}`,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return content;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Check if a message is a UserMessageWithAttachments.
|
|
303
|
+
*/
|
|
304
|
+
export function isUserMessageWithAttachments(msg) {
|
|
305
|
+
return msg.role === "user-with-attachments";
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Check if a message is an ArtifactMessage.
|
|
309
|
+
*/
|
|
310
|
+
export function isArtifactMessage(msg) {
|
|
311
|
+
return msg.role === "artifact";
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Default convertToLlm for web-ui apps.
|
|
315
|
+
*
|
|
316
|
+
* Handles:
|
|
317
|
+
* - UserMessageWithAttachments: converts to user message with content blocks
|
|
318
|
+
* - ArtifactMessage: filtered out (UI-only, for session reconstruction)
|
|
319
|
+
* - Standard LLM messages (user, assistant, toolResult): passed through
|
|
320
|
+
*/
|
|
321
|
+
export function defaultConvertToLlm(messages) {
|
|
322
|
+
return messages
|
|
323
|
+
.filter((m) => {
|
|
324
|
+
// Filter out artifact messages - they're for session reconstruction only
|
|
325
|
+
if (isArtifactMessage(m)) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
return true;
|
|
329
|
+
})
|
|
330
|
+
.map((m) => {
|
|
331
|
+
// Convert user-with-attachments to user message with content blocks
|
|
332
|
+
if (isUserMessageWithAttachments(m)) {
|
|
333
|
+
const textContent = typeof m.content === "string" ? [{ type: "text", text: m.content }] : [...m.content];
|
|
334
|
+
if (m.attachments) {
|
|
335
|
+
textContent.push(...convertAttachments(m.attachments));
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
role: "user",
|
|
339
|
+
content: textContent,
|
|
340
|
+
timestamp: m.timestamp,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
// Pass through standard LLM roles
|
|
344
|
+
if (m.role === "user" || m.role === "assistant" || m.role === "toolResult") {
|
|
345
|
+
return m;
|
|
346
|
+
}
|
|
347
|
+
// Filter out unknown message types
|
|
348
|
+
return null;
|
|
349
|
+
})
|
|
350
|
+
.filter((m) => m !== null);
|
|
351
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class ProviderKeyInput extends LitElement {
|
|
3
|
+
provider: string;
|
|
4
|
+
private keyInput;
|
|
5
|
+
private testing;
|
|
6
|
+
private failed;
|
|
7
|
+
private hasKey;
|
|
8
|
+
private inputChanged;
|
|
9
|
+
protected createRenderRoot(): this;
|
|
10
|
+
connectedCallback(): Promise<void>;
|
|
11
|
+
private checkKeyStatus;
|
|
12
|
+
private testApiKey;
|
|
13
|
+
private saveKey;
|
|
14
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ProviderKeyInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderKeyInput.d.ts","sourceRoot":"","sources":["../../../src/webui/components/ProviderKeyInput.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAmBvC,qBACa,gBAAiB,SAAQ,UAAU;IACnC,QAAQ,SAAM;IACjB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAEtC,SAAS,CAAC,gBAAgB;IAIX,iBAAiB;YAKlB,cAAc;YASd,UAAU;YAgCV,OAAO;IAiCrB,MAAM;CAqCN"}
|
|
@@ -0,0 +1,170 @@
|
|
|
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 { i18n } from "@mariozechner/mini-lit";
|
|
8
|
+
import { Badge } from "@mariozechner/mini-lit/dist/Badge.js";
|
|
9
|
+
import { Button } from "@mariozechner/mini-lit/dist/Button.js";
|
|
10
|
+
import { complete, getModel } from "../../ai/index.js";
|
|
11
|
+
import { html, LitElement } from "lit";
|
|
12
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
13
|
+
import { getAppStorage } from "../storage/app-storage.js";
|
|
14
|
+
import { applyProxyIfNeeded } from "../utils/proxy-utils.js";
|
|
15
|
+
import { Input } from "./Input.js";
|
|
16
|
+
// Test models for each provider
|
|
17
|
+
const TEST_MODELS = {
|
|
18
|
+
anthropic: "claude-3-5-haiku-20241022",
|
|
19
|
+
openai: "gpt-4o-mini",
|
|
20
|
+
google: "gemini-2.5-flash",
|
|
21
|
+
groq: "openai/gpt-oss-20b",
|
|
22
|
+
openrouter: "z-ai/glm-4.6",
|
|
23
|
+
"vercel-ai-gateway": "anthropic/claude-opus-4.5",
|
|
24
|
+
cerebras: "gpt-oss-120b",
|
|
25
|
+
xai: "grok-4-fast-non-reasoning",
|
|
26
|
+
zai: "glm-4.5-air",
|
|
27
|
+
};
|
|
28
|
+
let ProviderKeyInput = class ProviderKeyInput extends LitElement {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(...arguments);
|
|
31
|
+
this.provider = "";
|
|
32
|
+
this.keyInput = "";
|
|
33
|
+
this.testing = false;
|
|
34
|
+
this.failed = false;
|
|
35
|
+
this.hasKey = false;
|
|
36
|
+
this.inputChanged = false;
|
|
37
|
+
}
|
|
38
|
+
createRenderRoot() {
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
async connectedCallback() {
|
|
42
|
+
super.connectedCallback();
|
|
43
|
+
await this.checkKeyStatus();
|
|
44
|
+
}
|
|
45
|
+
async checkKeyStatus() {
|
|
46
|
+
try {
|
|
47
|
+
const key = await getAppStorage().providerKeys.get(this.provider);
|
|
48
|
+
this.hasKey = !!key;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error("Failed to check key status:", error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async testApiKey(provider, apiKey) {
|
|
55
|
+
try {
|
|
56
|
+
const modelId = TEST_MODELS[provider];
|
|
57
|
+
// Returning true here for Ollama and friends. Can' know which model to use for testing
|
|
58
|
+
if (!modelId)
|
|
59
|
+
return true;
|
|
60
|
+
let model = getModel(provider, modelId);
|
|
61
|
+
if (!model)
|
|
62
|
+
return false;
|
|
63
|
+
// Get proxy URL from settings (if available)
|
|
64
|
+
const proxyEnabled = await getAppStorage().settings.get("proxy.enabled");
|
|
65
|
+
const proxyUrl = await getAppStorage().settings.get("proxy.url");
|
|
66
|
+
// Apply proxy only if this provider/key combination requires it
|
|
67
|
+
model = applyProxyIfNeeded(model, apiKey, proxyEnabled ? proxyUrl || undefined : undefined);
|
|
68
|
+
const context = {
|
|
69
|
+
messages: [{ role: "user", content: "Reply with: ok", timestamp: Date.now() }],
|
|
70
|
+
};
|
|
71
|
+
const result = await complete(model, context, {
|
|
72
|
+
apiKey,
|
|
73
|
+
maxTokens: 200,
|
|
74
|
+
});
|
|
75
|
+
return result.stopReason === "stop";
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error(`API key test failed for ${provider}:`, error);
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async saveKey() {
|
|
83
|
+
if (!this.keyInput)
|
|
84
|
+
return;
|
|
85
|
+
this.testing = true;
|
|
86
|
+
this.failed = false;
|
|
87
|
+
const success = await this.testApiKey(this.provider, this.keyInput);
|
|
88
|
+
this.testing = false;
|
|
89
|
+
if (success) {
|
|
90
|
+
try {
|
|
91
|
+
await getAppStorage().providerKeys.set(this.provider, this.keyInput);
|
|
92
|
+
this.hasKey = true;
|
|
93
|
+
this.inputChanged = false;
|
|
94
|
+
this.requestUpdate();
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error("Failed to save API key:", error);
|
|
98
|
+
this.failed = true;
|
|
99
|
+
setTimeout(() => {
|
|
100
|
+
this.failed = false;
|
|
101
|
+
this.requestUpdate();
|
|
102
|
+
}, 5000);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.failed = true;
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
this.failed = false;
|
|
109
|
+
this.requestUpdate();
|
|
110
|
+
}, 5000);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
render() {
|
|
114
|
+
return html `
|
|
115
|
+
<div class="space-y-3">
|
|
116
|
+
<div class="flex items-center gap-2">
|
|
117
|
+
<span class="text-sm font-medium capitalize text-foreground">${this.provider}</span>
|
|
118
|
+
${this.testing
|
|
119
|
+
? Badge({ children: i18n("Testing..."), variant: "secondary" })
|
|
120
|
+
: this.hasKey
|
|
121
|
+
? html `<span class="text-green-600 dark:text-green-400">✓</span>`
|
|
122
|
+
: ""}
|
|
123
|
+
${this.failed ? Badge({ children: i18n("✗ Invalid"), variant: "destructive" }) : ""}
|
|
124
|
+
</div>
|
|
125
|
+
<div class="flex items-center gap-2">
|
|
126
|
+
${Input({
|
|
127
|
+
type: "password",
|
|
128
|
+
placeholder: this.hasKey ? "••••••••••••" : i18n("Enter API key"),
|
|
129
|
+
value: this.keyInput,
|
|
130
|
+
onInput: (e) => {
|
|
131
|
+
this.keyInput = e.target.value;
|
|
132
|
+
this.inputChanged = true;
|
|
133
|
+
this.requestUpdate();
|
|
134
|
+
},
|
|
135
|
+
className: "flex-1",
|
|
136
|
+
})}
|
|
137
|
+
${Button({
|
|
138
|
+
onClick: () => this.saveKey(),
|
|
139
|
+
variant: "default",
|
|
140
|
+
size: "sm",
|
|
141
|
+
disabled: !this.keyInput || this.testing || (this.hasKey && !this.inputChanged),
|
|
142
|
+
children: i18n("Save"),
|
|
143
|
+
})}
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
`;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
__decorate([
|
|
150
|
+
property()
|
|
151
|
+
], ProviderKeyInput.prototype, "provider", void 0);
|
|
152
|
+
__decorate([
|
|
153
|
+
state()
|
|
154
|
+
], ProviderKeyInput.prototype, "keyInput", void 0);
|
|
155
|
+
__decorate([
|
|
156
|
+
state()
|
|
157
|
+
], ProviderKeyInput.prototype, "testing", void 0);
|
|
158
|
+
__decorate([
|
|
159
|
+
state()
|
|
160
|
+
], ProviderKeyInput.prototype, "failed", void 0);
|
|
161
|
+
__decorate([
|
|
162
|
+
state()
|
|
163
|
+
], ProviderKeyInput.prototype, "hasKey", void 0);
|
|
164
|
+
__decorate([
|
|
165
|
+
state()
|
|
166
|
+
], ProviderKeyInput.prototype, "inputChanged", void 0);
|
|
167
|
+
ProviderKeyInput = __decorate([
|
|
168
|
+
customElement("provider-key-input")
|
|
169
|
+
], ProviderKeyInput);
|
|
170
|
+
export { ProviderKeyInput };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
import { type MessageConsumer } from "./sandbox/RuntimeMessageRouter.js";
|
|
3
|
+
import type { SandboxRuntimeProvider } from "./sandbox/SandboxRuntimeProvider.js";
|
|
4
|
+
export interface SandboxFile {
|
|
5
|
+
fileName: string;
|
|
6
|
+
content: string | Uint8Array;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SandboxResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
console: Array<{
|
|
12
|
+
type: string;
|
|
13
|
+
text: string;
|
|
14
|
+
}>;
|
|
15
|
+
files?: SandboxFile[];
|
|
16
|
+
error?: {
|
|
17
|
+
message: string;
|
|
18
|
+
stack: string;
|
|
19
|
+
};
|
|
20
|
+
returnValue?: any;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Function that returns the URL to the sandbox HTML file.
|
|
24
|
+
* Used in browser extensions to load sandbox.html via chrome.runtime.getURL().
|
|
25
|
+
*/
|
|
26
|
+
export type SandboxUrlProvider = () => string;
|
|
27
|
+
/**
|
|
28
|
+
* Configuration for prepareHtmlDocument
|
|
29
|
+
*/
|
|
30
|
+
export interface PrepareHtmlOptions {
|
|
31
|
+
/** True if this is an HTML artifact (inject into existing HTML), false if REPL (wrap in HTML) */
|
|
32
|
+
isHtmlArtifact: boolean;
|
|
33
|
+
/** True if this is a standalone download (no runtime bridge, no navigation interceptor) */
|
|
34
|
+
isStandalone?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare class SandboxIframe extends LitElement {
|
|
37
|
+
private iframe?;
|
|
38
|
+
/**
|
|
39
|
+
* Optional: Provide a function that returns the sandbox HTML URL.
|
|
40
|
+
* If provided, the iframe will use this URL instead of srcdoc.
|
|
41
|
+
* This is required for browser extensions with strict CSP.
|
|
42
|
+
*/
|
|
43
|
+
sandboxUrlProvider?: SandboxUrlProvider;
|
|
44
|
+
createRenderRoot(): this;
|
|
45
|
+
connectedCallback(): void;
|
|
46
|
+
disconnectedCallback(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Load HTML content into sandbox and keep it displayed (for HTML artifacts)
|
|
49
|
+
* @param sandboxId Unique ID
|
|
50
|
+
* @param htmlContent Full HTML content
|
|
51
|
+
* @param providers Runtime providers to inject
|
|
52
|
+
* @param consumers Message consumers to register (optional)
|
|
53
|
+
*/
|
|
54
|
+
loadContent(sandboxId: string, htmlContent: string, providers?: SandboxRuntimeProvider[], consumers?: MessageConsumer[]): void;
|
|
55
|
+
private loadViaSandboxUrl;
|
|
56
|
+
private loadViaSrcdoc;
|
|
57
|
+
/**
|
|
58
|
+
* Execute code in sandbox
|
|
59
|
+
* @param sandboxId Unique ID for this execution
|
|
60
|
+
* @param code User code (plain JS for REPL, or full HTML for artifacts)
|
|
61
|
+
* @param providers Runtime providers to inject
|
|
62
|
+
* @param consumers Additional message consumers (optional, execute has its own internal consumer)
|
|
63
|
+
* @param signal Abort signal
|
|
64
|
+
* @returns Promise resolving to execution result
|
|
65
|
+
*/
|
|
66
|
+
execute(sandboxId: string, code: string, providers?: SandboxRuntimeProvider[], consumers?: MessageConsumer[], signal?: AbortSignal, isHtmlArtifact?: boolean): Promise<SandboxResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Validate HTML using DOMParser - returns error message if invalid, null if valid
|
|
69
|
+
* Note: JavaScript syntax validation is done in sandbox.js to avoid CSP restrictions
|
|
70
|
+
*/
|
|
71
|
+
private validateHtml;
|
|
72
|
+
/**
|
|
73
|
+
* Prepare complete HTML document with runtime + user code
|
|
74
|
+
* PUBLIC so HtmlArtifact can use it for download button
|
|
75
|
+
*/
|
|
76
|
+
prepareHtmlDocument(sandboxId: string, userCode: string, providers?: SandboxRuntimeProvider[], options?: PrepareHtmlOptions): string;
|
|
77
|
+
/**
|
|
78
|
+
* Generate runtime script from providers
|
|
79
|
+
* @param sandboxId Unique sandbox ID
|
|
80
|
+
* @param providers Runtime providers
|
|
81
|
+
* @param isStandalone If true, skip runtime bridge and navigation interceptor (for standalone downloads)
|
|
82
|
+
*/
|
|
83
|
+
private getRuntimeScript;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=SandboxedIframe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandboxedIframe.d.ts","sourceRoot":"","sources":["../../../src/webui/components/SandboxedIframe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAIjC,OAAO,EAAE,KAAK,eAAe,EAA0B,MAAM,mCAAmC,CAAC;AACjG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAElF,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,GAAG,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,iGAAiG;IACjG,cAAc,EAAE,OAAO,CAAC;IACxB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAWD,qBACa,aAAc,SAAQ,UAAU;IAC5C,OAAO,CAAC,MAAM,CAAC,CAAoB;IAEnC;;;;OAIG;IAC6B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExE,gBAAgB;IAIP,iBAAiB;IAIjB,oBAAoB;IAQ7B;;;;;;OAMG;IACI,WAAW,CACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,sBAAsB,EAAO,EACxC,SAAS,GAAE,eAAe,EAAO,GAC/B,IAAI;IAkDP,OAAO,CAAC,iBAAiB;IAuEzB,OAAO,CAAC,aAAa;IAyBrB;;;;;;;;OAQG;IACU,OAAO,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,sBAAsB,EAAO,EACxC,SAAS,GAAE,eAAe,EAAO,EACjC,MAAM,CAAC,EAAE,WAAW,EACpB,cAAc,GAAE,OAAe,GAC7B,OAAO,CAAC,aAAa,CAAC;IAmKzB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiBpB;;;OAGG;IACI,mBAAmB,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,sBAAsB,EAAO,EACxC,OAAO,CAAC,EAAE,kBAAkB,GAC1B,MAAM;IAmFT;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;CAgGxB"}
|