@mariozechner/pi-web-ui 0.5.48 → 0.7.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/dist/ChatPanel.d.ts +1 -0
- package/dist/ChatPanel.d.ts.map +1 -1
- package/dist/ChatPanel.js +3 -2
- package/dist/ChatPanel.js.map +1 -1
- package/dist/agent/transports/ProviderTransport.d.ts +1 -1
- package/dist/agent/transports/ProviderTransport.d.ts.map +1 -1
- package/dist/agent/transports/ProviderTransport.js +5 -10
- package/dist/agent/transports/ProviderTransport.js.map +1 -1
- package/dist/app.css +4188 -2
- package/dist/components/AgentInterface.d.ts +1 -0
- package/dist/components/AgentInterface.d.ts.map +1 -1
- package/dist/components/AgentInterface.js +13 -3
- package/dist/components/AgentInterface.js.map +1 -1
- package/dist/components/AttachmentTile.d.ts.map +1 -1
- package/dist/components/AttachmentTile.js +2 -1
- package/dist/components/AttachmentTile.js.map +1 -1
- package/dist/components/ConsoleBlock.d.ts.map +1 -1
- package/dist/components/ConsoleBlock.js +2 -1
- package/dist/components/ConsoleBlock.js.map +1 -1
- package/dist/components/CustomProviderCard.d.ts +17 -0
- package/dist/components/CustomProviderCard.d.ts.map +1 -0
- package/dist/components/CustomProviderCard.js +110 -0
- package/dist/components/CustomProviderCard.js.map +1 -0
- package/dist/components/Input.d.ts +2 -2
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Input.js +2 -1
- package/dist/components/Input.js.map +1 -1
- package/dist/components/MessageEditor.d.ts +1 -3
- package/dist/components/MessageEditor.d.ts.map +1 -1
- package/dist/components/MessageEditor.js +6 -31
- package/dist/components/MessageEditor.js.map +1 -1
- package/dist/components/MessageList.d.ts +1 -0
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +6 -3
- package/dist/components/MessageList.js.map +1 -1
- package/dist/components/Messages.d.ts +2 -0
- package/dist/components/Messages.d.ts.map +1 -1
- package/dist/components/Messages.js +25 -14
- package/dist/components/Messages.js.map +1 -1
- package/dist/components/ProviderKeyInput.d.ts +1 -1
- package/dist/components/ProviderKeyInput.d.ts.map +1 -1
- package/dist/components/ProviderKeyInput.js +22 -36
- package/dist/components/ProviderKeyInput.js.map +1 -1
- package/dist/components/StreamingMessageContainer.d.ts +1 -0
- package/dist/components/StreamingMessageContainer.d.ts.map +1 -1
- package/dist/components/StreamingMessageContainer.js +5 -2
- package/dist/components/StreamingMessageContainer.js.map +1 -1
- package/dist/components/ThinkingBlock.d.ts +11 -0
- package/dist/components/ThinkingBlock.d.ts.map +1 -0
- package/dist/components/ThinkingBlock.js +58 -0
- package/dist/components/ThinkingBlock.js.map +1 -0
- package/dist/dialogs/ApiKeyPromptDialog.d.ts +1 -1
- package/dist/dialogs/ApiKeyPromptDialog.d.ts.map +1 -1
- package/dist/dialogs/ApiKeyPromptDialog.js +3 -1
- package/dist/dialogs/ApiKeyPromptDialog.js.map +1 -1
- package/dist/dialogs/AttachmentOverlay.d.ts.map +1 -1
- package/dist/dialogs/AttachmentOverlay.js +3 -2
- package/dist/dialogs/AttachmentOverlay.js.map +1 -1
- package/dist/dialogs/CustomProviderDialog.d.ts +25 -0
- package/dist/dialogs/CustomProviderDialog.d.ts.map +1 -0
- package/dist/dialogs/CustomProviderDialog.js +270 -0
- package/dist/dialogs/CustomProviderDialog.js.map +1 -0
- package/dist/dialogs/ModelSelector.d.ts +6 -6
- package/dist/dialogs/ModelSelector.d.ts.map +1 -1
- package/dist/dialogs/ModelSelector.js +60 -74
- package/dist/dialogs/ModelSelector.js.map +1 -1
- package/dist/dialogs/PersistentStorageDialog.d.ts +1 -1
- package/dist/dialogs/PersistentStorageDialog.d.ts.map +1 -1
- package/dist/dialogs/PersistentStorageDialog.js +4 -1
- package/dist/dialogs/PersistentStorageDialog.js.map +1 -1
- package/dist/dialogs/ProvidersModelsTab.d.ts +20 -0
- package/dist/dialogs/ProvidersModelsTab.d.ts.map +1 -0
- package/dist/dialogs/ProvidersModelsTab.js +191 -0
- package/dist/dialogs/ProvidersModelsTab.js.map +1 -0
- package/dist/dialogs/SessionListDialog.d.ts +1 -1
- package/dist/dialogs/SessionListDialog.d.ts.map +1 -1
- package/dist/dialogs/SessionListDialog.js +3 -1
- package/dist/dialogs/SessionListDialog.js.map +1 -1
- package/dist/dialogs/SettingsDialog.d.ts +1 -2
- package/dist/dialogs/SettingsDialog.d.ts.map +1 -1
- package/dist/dialogs/SettingsDialog.js +10 -3
- package/dist/dialogs/SettingsDialog.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/app-storage.d.ts +3 -1
- package/dist/storage/app-storage.d.ts.map +1 -1
- package/dist/storage/app-storage.js +2 -1
- package/dist/storage/app-storage.js.map +1 -1
- package/dist/storage/stores/custom-providers-store.d.ts +25 -0
- package/dist/storage/stores/custom-providers-store.d.ts.map +1 -0
- package/dist/storage/stores/custom-providers-store.js +35 -0
- package/dist/storage/stores/custom-providers-store.js.map +1 -0
- package/dist/storage/stores/sessions-store.d.ts.map +1 -1
- package/dist/storage/stores/sessions-store.js +0 -1
- package/dist/storage/stores/sessions-store.js.map +1 -1
- package/dist/storage/types.d.ts +0 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/tools/artifacts/ArtifactPill.d.ts +1 -1
- package/dist/tools/artifacts/ArtifactPill.d.ts.map +1 -1
- package/dist/tools/artifacts/ArtifactPill.js +2 -1
- package/dist/tools/artifacts/ArtifactPill.js.map +1 -1
- package/dist/tools/artifacts/DocxArtifact.js +1 -1
- package/dist/tools/artifacts/DocxArtifact.js.map +1 -1
- package/dist/tools/artifacts/ExcelArtifact.js +1 -1
- package/dist/tools/artifacts/ExcelArtifact.js.map +1 -1
- package/dist/tools/artifacts/GenericArtifact.js +1 -1
- package/dist/tools/artifacts/GenericArtifact.js.map +1 -1
- package/dist/tools/artifacts/HtmlArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/HtmlArtifact.js +5 -1
- package/dist/tools/artifacts/HtmlArtifact.js.map +1 -1
- package/dist/tools/artifacts/ImageArtifact.js +1 -1
- package/dist/tools/artifacts/ImageArtifact.js.map +1 -1
- package/dist/tools/artifacts/MarkdownArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/MarkdownArtifact.js +3 -1
- package/dist/tools/artifacts/MarkdownArtifact.js.map +1 -1
- package/dist/tools/artifacts/PdfArtifact.js +1 -1
- package/dist/tools/artifacts/PdfArtifact.js.map +1 -1
- package/dist/tools/artifacts/SvgArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/SvgArtifact.js +3 -1
- package/dist/tools/artifacts/SvgArtifact.js.map +1 -1
- package/dist/tools/artifacts/TextArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/TextArtifact.js +2 -1
- package/dist/tools/artifacts/TextArtifact.js.map +1 -1
- package/dist/tools/artifacts/artifacts-tool-renderer.d.ts.map +1 -1
- package/dist/tools/artifacts/artifacts-tool-renderer.js +18 -8
- package/dist/tools/artifacts/artifacts-tool-renderer.js.map +1 -1
- package/dist/tools/artifacts/artifacts.d.ts.map +1 -1
- package/dist/tools/artifacts/artifacts.js +3 -2
- package/dist/tools/artifacts/artifacts.js.map +1 -1
- package/dist/tools/extract-document.d.ts.map +1 -1
- package/dist/tools/extract-document.js +78 -58
- package/dist/tools/extract-document.js.map +1 -1
- package/dist/tools/javascript-repl.d.ts.map +1 -1
- package/dist/tools/javascript-repl.js +7 -3
- package/dist/tools/javascript-repl.js.map +1 -1
- package/dist/tools/renderer-registry.d.ts +1 -1
- package/dist/tools/renderer-registry.d.ts.map +1 -1
- package/dist/tools/renderer-registry.js +20 -6
- package/dist/tools/renderer-registry.js.map +1 -1
- package/dist/tools/renderers/BashRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/BashRenderer.js +5 -2
- package/dist/tools/renderers/BashRenderer.js.map +1 -1
- package/dist/tools/renderers/CalculateRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/CalculateRenderer.js +5 -2
- package/dist/tools/renderers/CalculateRenderer.js.map +1 -1
- package/dist/tools/renderers/DefaultRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/DefaultRenderer.js +5 -2
- package/dist/tools/renderers/DefaultRenderer.js.map +1 -1
- package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/GetCurrentTimeRenderer.js +9 -3
- package/dist/tools/renderers/GetCurrentTimeRenderer.js.map +1 -1
- package/dist/utils/auth-token.js +1 -1
- package/dist/utils/auth-token.js.map +1 -1
- package/dist/utils/i18n.d.ts +105 -3
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +72 -2
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/model-discovery.d.ts +38 -0
- package/dist/utils/model-discovery.d.ts.map +1 -0
- package/dist/utils/model-discovery.js +243 -0
- package/dist/utils/model-discovery.js.map +1 -0
- package/dist/utils/proxy-utils.d.ts +37 -0
- package/dist/utils/proxy-utils.d.ts.map +1 -0
- package/dist/utils/proxy-utils.js +97 -0
- package/dist/utils/proxy-utils.js.map +1 -0
- package/example/package.json +2 -2
- package/example/src/custom-messages.ts +1 -1
- package/example/src/main.ts +17 -6
- package/package.json +9 -8
- package/src/ChatPanel.ts +4 -2
- package/src/agent/transports/ProviderTransport.ts +5 -10
- package/src/app.css +24 -0
- package/src/components/AgentInterface.ts +14 -3
- package/src/components/AttachmentTile.ts +2 -1
- package/src/components/ConsoleBlock.ts +2 -1
- package/src/components/CustomProviderCard.ts +100 -0
- package/src/components/Input.ts +2 -1
- package/src/components/MessageEditor.ts +6 -33
- package/src/components/MessageList.ts +4 -3
- package/src/components/Messages.ts +32 -20
- package/src/components/ProviderKeyInput.ts +19 -38
- package/src/components/StreamingMessageContainer.ts +3 -2
- package/src/components/ThinkingBlock.ts +43 -0
- package/src/dialogs/ApiKeyPromptDialog.ts +3 -1
- package/src/dialogs/AttachmentOverlay.ts +3 -2
- package/src/dialogs/CustomProviderDialog.ts +274 -0
- package/src/dialogs/ModelSelector.ts +61 -75
- package/src/dialogs/PersistentStorageDialog.ts +4 -1
- package/src/dialogs/ProvidersModelsTab.ts +212 -0
- package/src/dialogs/SessionListDialog.ts +3 -1
- package/src/dialogs/SettingsDialog.ts +10 -13
- package/src/index.ts +8 -0
- package/src/storage/app-storage.ts +4 -0
- package/src/storage/stores/custom-providers-store.ts +62 -0
- package/src/storage/stores/sessions-store.ts +0 -1
- package/src/storage/types.ts +0 -3
- package/src/tools/artifacts/ArtifactPill.ts +2 -1
- package/src/tools/artifacts/DocxArtifact.ts +1 -1
- package/src/tools/artifacts/ExcelArtifact.ts +1 -1
- package/src/tools/artifacts/GenericArtifact.ts +1 -1
- package/src/tools/artifacts/HtmlArtifact.ts +5 -1
- package/src/tools/artifacts/ImageArtifact.ts +1 -1
- package/src/tools/artifacts/MarkdownArtifact.ts +3 -1
- package/src/tools/artifacts/PdfArtifact.ts +1 -1
- package/src/tools/artifacts/SvgArtifact.ts +3 -1
- package/src/tools/artifacts/TextArtifact.ts +2 -1
- package/src/tools/artifacts/artifacts-tool-renderer.ts +20 -8
- package/src/tools/artifacts/artifacts.ts +3 -2
- package/src/tools/extract-document.ts +82 -61
- package/src/tools/javascript-repl.ts +8 -3
- package/src/tools/renderer-registry.ts +20 -6
- package/src/tools/renderers/BashRenderer.ts +6 -2
- package/src/tools/renderers/CalculateRenderer.ts +6 -2
- package/src/tools/renderers/DefaultRenderer.ts +6 -2
- package/src/tools/renderers/GetCurrentTimeRenderer.ts +11 -3
- package/src/utils/auth-token.ts +1 -1
- package/src/utils/i18n.ts +120 -5
- package/src/utils/model-discovery.ts +277 -0
- package/src/utils/proxy-utils.ts +112 -0
- package/example/package-lock.json +0 -1965
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { Api, Model } from "@mariozechner/pi-ai";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Centralized proxy decision logic.
|
|
5
|
+
*
|
|
6
|
+
* Determines whether to use a CORS proxy for LLM API requests based on:
|
|
7
|
+
* - Provider name
|
|
8
|
+
* - API key pattern (for providers where it matters)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Check if a provider/API key combination requires a CORS proxy.
|
|
13
|
+
*
|
|
14
|
+
* @param provider - Provider name (e.g., "anthropic", "openai", "zai")
|
|
15
|
+
* @param apiKey - API key for the provider
|
|
16
|
+
* @returns true if proxy is required, false otherwise
|
|
17
|
+
*/
|
|
18
|
+
export function shouldUseProxyForProvider(provider: string, apiKey: string): boolean {
|
|
19
|
+
switch (provider.toLowerCase()) {
|
|
20
|
+
case "zai":
|
|
21
|
+
// Z-AI always requires proxy
|
|
22
|
+
return true;
|
|
23
|
+
|
|
24
|
+
case "anthropic":
|
|
25
|
+
// Anthropic OAuth tokens (sk-ant-oat-*) require proxy
|
|
26
|
+
// Regular API keys (sk-ant-api-*) do NOT require proxy
|
|
27
|
+
return apiKey.startsWith("sk-ant-oat");
|
|
28
|
+
|
|
29
|
+
// These providers work without proxy
|
|
30
|
+
case "openai":
|
|
31
|
+
case "google":
|
|
32
|
+
case "groq":
|
|
33
|
+
case "openrouter":
|
|
34
|
+
case "cerebras":
|
|
35
|
+
case "xai":
|
|
36
|
+
case "ollama":
|
|
37
|
+
case "lmstudio":
|
|
38
|
+
return false;
|
|
39
|
+
|
|
40
|
+
// Unknown providers - assume no proxy needed
|
|
41
|
+
// This allows new providers to work by default
|
|
42
|
+
default:
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Apply CORS proxy to a model's baseUrl if needed.
|
|
49
|
+
*
|
|
50
|
+
* @param model - The model to potentially proxy
|
|
51
|
+
* @param apiKey - API key for the provider
|
|
52
|
+
* @param proxyUrl - CORS proxy URL (e.g., "https://proxy.mariozechner.at/proxy")
|
|
53
|
+
* @returns Model with modified baseUrl if proxy is needed, otherwise original model
|
|
54
|
+
*/
|
|
55
|
+
export function applyProxyIfNeeded<T extends Api>(model: Model<T>, apiKey: string, proxyUrl?: string): Model<T> {
|
|
56
|
+
// If no proxy URL configured, return original model
|
|
57
|
+
if (!proxyUrl) {
|
|
58
|
+
return model;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// If model has no baseUrl, can't proxy it
|
|
62
|
+
if (!model.baseUrl) {
|
|
63
|
+
return model;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check if this provider/key needs proxy
|
|
67
|
+
if (!shouldUseProxyForProvider(model.provider, apiKey)) {
|
|
68
|
+
return model;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Apply proxy to baseUrl
|
|
72
|
+
return {
|
|
73
|
+
...model,
|
|
74
|
+
baseUrl: `${proxyUrl}/?url=${encodeURIComponent(model.baseUrl)}`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Check if an error is likely a CORS error.
|
|
80
|
+
*
|
|
81
|
+
* CORS errors in browsers typically manifest as:
|
|
82
|
+
* - TypeError with message "Failed to fetch"
|
|
83
|
+
* - NetworkError
|
|
84
|
+
*
|
|
85
|
+
* @param error - The error to check
|
|
86
|
+
* @returns true if error is likely a CORS error
|
|
87
|
+
*/
|
|
88
|
+
export function isCorsError(error: unknown): boolean {
|
|
89
|
+
if (!(error instanceof Error)) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Check for common CORS error patterns
|
|
94
|
+
const message = error.message.toLowerCase();
|
|
95
|
+
|
|
96
|
+
// "Failed to fetch" is the standard CORS error in most browsers
|
|
97
|
+
if (error.name === "TypeError" && message.includes("failed to fetch")) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Some browsers report "NetworkError"
|
|
102
|
+
if (error.name === "NetworkError") {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// CORS-specific messages
|
|
107
|
+
if (message.includes("cors") || message.includes("cross-origin")) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return false;
|
|
112
|
+
}
|