libre-webui 0.17.0 → 0.19.0
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 +30 -17
- package/backend/dist/db.d.ts.map +1 -1
- package/backend/dist/db.js +195 -6
- package/backend/dist/db.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +48 -19
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/middleware/auth.d.ts.map +1 -1
- package/backend/dist/middleware/auth.js +35 -3
- package/backend/dist/middleware/auth.js.map +1 -1
- package/backend/dist/middleware/index.d.ts.map +1 -1
- package/backend/dist/models/personaModel.d.ts.map +1 -1
- package/backend/dist/models/personaModel.js.map +1 -1
- package/backend/dist/models/userModel.d.ts +24 -0
- package/backend/dist/models/userModel.d.ts.map +1 -1
- package/backend/dist/models/userModel.js +92 -24
- package/backend/dist/models/userModel.js.map +1 -1
- package/backend/dist/routes/agentCli.d.ts.map +1 -1
- package/backend/dist/routes/agentCli.js +4 -2
- package/backend/dist/routes/agentCli.js.map +1 -1
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +118 -55
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +106 -3
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/documents.d.ts.map +1 -1
- package/backend/dist/routes/documents.js +179 -41
- package/backend/dist/routes/documents.js.map +1 -1
- package/backend/dist/routes/embeddings.d.ts.map +1 -1
- package/backend/dist/routes/embeddings.js +2 -2
- package/backend/dist/routes/embeddings.js.map +1 -1
- package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
- package/backend/dist/routes/huggingfaceHub.js +3 -1
- package/backend/dist/routes/huggingfaceHub.js.map +1 -1
- package/backend/dist/routes/imageGen.d.ts.map +1 -1
- package/backend/dist/routes/imageGen.js +2 -0
- package/backend/dist/routes/imageGen.js.map +1 -1
- package/backend/dist/routes/libreClaw.d.ts.map +1 -1
- package/backend/dist/routes/media.d.ts +3 -0
- package/backend/dist/routes/media.d.ts.map +1 -0
- package/backend/dist/routes/media.js +429 -0
- package/backend/dist/routes/media.js.map +1 -0
- package/backend/dist/routes/notes.d.ts +3 -0
- package/backend/dist/routes/notes.d.ts.map +1 -0
- package/backend/dist/routes/notes.js +121 -0
- package/backend/dist/routes/notes.js.map +1 -0
- package/backend/dist/routes/ollama.d.ts.map +1 -1
- package/backend/dist/routes/ollama.js +17 -85
- package/backend/dist/routes/ollama.js.map +1 -1
- package/backend/dist/routes/personas.d.ts.map +1 -1
- package/backend/dist/routes/personas.js +2 -0
- package/backend/dist/routes/personas.js.map +1 -1
- package/backend/dist/routes/plugins.d.ts.map +1 -1
- package/backend/dist/routes/plugins.js +28 -0
- package/backend/dist/routes/plugins.js.map +1 -1
- package/backend/dist/routes/preferences.d.ts.map +1 -1
- package/backend/dist/routes/systemDiagnostics.d.ts +3 -0
- package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -0
- package/backend/dist/routes/systemDiagnostics.js +49 -0
- package/backend/dist/routes/systemDiagnostics.js.map +1 -0
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +4 -0
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/routes/users.d.ts.map +1 -1
- package/backend/dist/routes/users.js +79 -0
- package/backend/dist/routes/users.js.map +1 -1
- package/backend/dist/routes/work.d.ts.map +1 -1
- package/backend/dist/routes/work.js +84 -0
- package/backend/dist/routes/work.js.map +1 -1
- package/backend/dist/services/agentCliService.d.ts +37 -4
- package/backend/dist/services/agentCliService.d.ts.map +1 -1
- package/backend/dist/services/agentCliService.js +229 -10
- package/backend/dist/services/agentCliService.js.map +1 -1
- package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
- package/backend/dist/services/authService.d.ts +15 -9
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +39 -29
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
- package/backend/dist/services/chatGenerationService.js +3 -3
- package/backend/dist/services/chatGenerationService.js.map +1 -1
- package/backend/dist/services/chatRequestService.d.ts +8 -2
- package/backend/dist/services/chatRequestService.d.ts.map +1 -1
- package/backend/dist/services/chatRequestService.js +30 -3
- package/backend/dist/services/chatRequestService.js.map +1 -1
- package/backend/dist/services/chatService.d.ts +6 -1
- package/backend/dist/services/chatService.d.ts.map +1 -1
- package/backend/dist/services/chatService.js +54 -1
- package/backend/dist/services/chatService.js.map +1 -1
- package/backend/dist/services/codexOAuthService.d.ts +22 -0
- package/backend/dist/services/codexOAuthService.d.ts.map +1 -0
- package/backend/dist/services/codexOAuthService.js +176 -0
- package/backend/dist/services/codexOAuthService.js.map +1 -0
- package/backend/dist/services/documentService.d.ts +17 -10
- package/backend/dist/services/documentService.d.ts.map +1 -1
- package/backend/dist/services/documentService.js +79 -58
- package/backend/dist/services/documentService.js.map +1 -1
- package/backend/dist/services/embeddingService.d.ts.map +1 -1
- package/backend/dist/services/encryptionService.d.ts.map +1 -1
- package/backend/dist/services/encryptionService.js +18 -8
- package/backend/dist/services/encryptionService.js.map +1 -1
- package/backend/dist/services/followUpService.d.ts +44 -0
- package/backend/dist/services/followUpService.d.ts.map +1 -0
- package/backend/dist/services/followUpService.js +123 -0
- package/backend/dist/services/followUpService.js.map +1 -0
- package/backend/dist/services/galleryService.d.ts +23 -1
- package/backend/dist/services/galleryService.d.ts.map +1 -1
- package/backend/dist/services/galleryService.js +125 -8
- package/backend/dist/services/galleryService.js.map +1 -1
- package/backend/dist/services/libreClawService.d.ts.map +1 -1
- package/backend/dist/services/mediaGenerationJobService.d.ts +25 -0
- package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -0
- package/backend/dist/services/mediaGenerationJobService.js +82 -0
- package/backend/dist/services/mediaGenerationJobService.js.map +1 -0
- package/backend/dist/services/memoryService.d.ts.map +1 -1
- package/backend/dist/services/memoryService.js.map +1 -1
- package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
- package/backend/dist/services/oauthSecurity.d.ts +14 -0
- package/backend/dist/services/oauthSecurity.d.ts.map +1 -0
- package/backend/dist/services/oauthSecurity.js +101 -0
- package/backend/dist/services/oauthSecurity.js.map +1 -0
- package/backend/dist/services/ollamaService.d.ts +8 -2
- package/backend/dist/services/ollamaService.d.ts.map +1 -1
- package/backend/dist/services/ollamaService.js +40 -2
- package/backend/dist/services/ollamaService.js.map +1 -1
- package/backend/dist/services/personaService.d.ts.map +1 -1
- package/backend/dist/services/personaService.js.map +1 -1
- package/backend/dist/services/pluginActivationService.d.ts.map +1 -1
- package/backend/dist/services/pluginActivationService.js.map +1 -1
- package/backend/dist/services/pluginAudioGenerationService.d.ts +34 -0
- package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -0
- package/backend/dist/services/pluginAudioGenerationService.js +211 -0
- package/backend/dist/services/pluginAudioGenerationService.js.map +1 -0
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
- package/backend/dist/services/pluginCapabilityRegistryService.js +6 -0
- package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
- package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.d.ts +2 -0
- package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.js +66 -35
- package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.d.ts +2 -0
- package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.js +63 -38
- package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts +43 -1
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +441 -71
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/pluginTTSService.d.ts +2 -0
- package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
- package/backend/dist/services/pluginTTSService.js +27 -2
- package/backend/dist/services/pluginTTSService.js.map +1 -1
- package/backend/dist/services/pluginUsageService.d.ts +100 -0
- package/backend/dist/services/pluginUsageService.d.ts.map +1 -0
- package/backend/dist/services/pluginUsageService.js +291 -0
- package/backend/dist/services/pluginUsageService.js.map +1 -0
- package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
- package/backend/dist/services/pluginVariablesService.js.map +1 -1
- package/backend/dist/services/pluginVideoGenerationService.d.ts +45 -0
- package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -0
- package/backend/dist/services/pluginVideoGenerationService.js +198 -0
- package/backend/dist/services/pluginVideoGenerationService.js.map +1 -0
- package/backend/dist/services/preferencesService.d.ts.map +1 -1
- package/backend/dist/services/preferencesService.js +16 -1
- package/backend/dist/services/preferencesService.js.map +1 -1
- package/backend/dist/services/registrationPolicy.d.ts +5 -0
- package/backend/dist/services/registrationPolicy.d.ts.map +1 -0
- package/backend/dist/services/registrationPolicy.js +21 -0
- package/backend/dist/services/registrationPolicy.js.map +1 -0
- package/backend/dist/services/simpleGitHubOAuth.d.ts +1 -1
- package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
- package/backend/dist/services/simpleGitHubOAuth.js +13 -13
- package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.d.ts +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.js +12 -17
- package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
- package/backend/dist/services/systemDiagnosticsService.d.ts +117 -0
- package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -0
- package/backend/dist/services/systemDiagnosticsService.js +326 -0
- package/backend/dist/services/systemDiagnosticsService.js.map +1 -0
- package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
- package/backend/dist/services/turnstileService.d.ts +2 -1
- package/backend/dist/services/turnstileService.d.ts.map +1 -1
- package/backend/dist/services/turnstileService.js +28 -2
- package/backend/dist/services/turnstileService.js.map +1 -1
- package/backend/dist/services/userService.d.ts +1 -0
- package/backend/dist/services/userService.js +1 -1
- package/backend/dist/services/workAgentService.d.ts.map +1 -1
- package/backend/dist/services/workAgentService.js.map +1 -1
- package/backend/dist/services/workEventService.d.ts.map +1 -1
- package/backend/dist/services/workEventService.js.map +1 -1
- package/backend/dist/services/workHostWorkspaceService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.d.ts +3 -0
- package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.js +67 -10
- package/backend/dist/services/workModelProviderService.js.map +1 -1
- package/backend/dist/services/workPreviewProxyService.d.ts +27 -0
- package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -0
- package/backend/dist/services/workPreviewProxyService.js +514 -0
- package/backend/dist/services/workPreviewProxyService.js.map +1 -0
- package/backend/dist/services/workRuntimeService.d.ts +28 -7
- package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeService.js +287 -8
- package/backend/dist/services/workRuntimeService.js.map +1 -1
- package/backend/dist/services/workTaskService.d.ts.map +1 -1
- package/backend/dist/services/workTaskService.js.map +1 -1
- package/backend/dist/services/workTerminalService.d.ts +1 -1
- package/backend/dist/services/workTerminalService.d.ts.map +1 -1
- package/backend/dist/services/workTerminalService.js.map +1 -1
- package/backend/dist/storage.d.ts +12 -1
- package/backend/dist/storage.d.ts.map +1 -1
- package/backend/dist/storage.js +183 -9
- package/backend/dist/storage.js.map +1 -1
- package/backend/dist/storageMappers.d.ts +13 -0
- package/backend/dist/storageMappers.d.ts.map +1 -1
- package/backend/dist/storageMappers.js +5 -0
- package/backend/dist/storageMappers.js.map +1 -1
- package/backend/dist/types/index.d.ts +106 -1
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/types/work.d.ts +31 -0
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/utils/chatContext.js.map +1 -1
- package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
- package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
- package/backend/dist/utils/chatDocumentContext.js +9 -4
- package/backend/dist/utils/chatDocumentContext.js.map +1 -1
- package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -1
- package/backend/dist/utils/generationUtils.d.ts.map +1 -1
- package/backend/dist/utils/hash.d.ts.map +1 -1
- package/backend/dist/utils/hash.js +13 -2
- package/backend/dist/utils/hash.js.map +1 -1
- package/backend/dist/utils/logger.d.ts +1 -1
- package/backend/dist/utils/logger.d.ts.map +1 -1
- package/backend/dist/utils/ollamaStreaming.d.ts +6 -2
- package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -1
- package/backend/dist/utils/ollamaStreaming.js +12 -2
- package/backend/dist/utils/ollamaStreaming.js.map +1 -1
- package/backend/dist/utils/openAIResponsesAdapter.js.map +1 -1
- package/backend/dist/utils/packagePaths.js.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.js +11 -4
- package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
- package/backend/dist/utils/pluginChatContext.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +2 -1
- package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
- package/backend/dist/utils/pluginStreamAdapter.d.ts +10 -1
- package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginStreamAdapter.js +30 -23
- package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
- package/backend/dist/utils/pluginValidation.d.ts +4 -3
- package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
- package/backend/dist/utils/pluginValidation.js +47 -2
- package/backend/dist/utils/pluginValidation.js.map +1 -1
- package/backend/dist/utils/resourceLimits.d.ts +10 -0
- package/backend/dist/utils/resourceLimits.d.ts.map +1 -0
- package/backend/dist/utils/resourceLimits.js +29 -0
- package/backend/dist/utils/resourceLimits.js.map +1 -0
- package/backend/dist/utils/thinkingPhaseTimer.d.ts +21 -0
- package/backend/dist/utils/thinkingPhaseTimer.d.ts.map +1 -0
- package/backend/dist/utils/thinkingPhaseTimer.js +84 -0
- package/backend/dist/utils/thinkingPhaseTimer.js.map +1 -0
- package/backend/dist/utils/webpageFetcher.d.ts +25 -0
- package/backend/dist/utils/webpageFetcher.d.ts.map +1 -0
- package/backend/dist/utils/webpageFetcher.js +231 -0
- package/backend/dist/utils/webpageFetcher.js.map +1 -0
- package/backend/dist/utils/websocketMessages.js.map +1 -1
- package/backend/dist/utils/workGit.d.ts +14 -0
- package/backend/dist/utils/workGit.d.ts.map +1 -0
- package/backend/dist/utils/workGit.js +207 -0
- package/backend/dist/utils/workGit.js.map +1 -0
- package/backend/dist/websocketServer.d.ts +1 -0
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +110 -25
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/dist/workTerminalServer.d.ts.map +1 -1
- package/backend/dist/workTerminalServer.js +3 -1
- package/backend/dist/workTerminalServer.js.map +1 -1
- package/backend/package.json +8 -7
- package/bin/cli.js +2 -2
- package/frontend/dist/assets/index-CFhy8YLA.css +1 -0
- package/frontend/dist/assets/index-_lG_lwU-.js +164 -0
- package/frontend/dist/assets/markdown-math-ClQbWekD.css +1 -0
- package/frontend/dist/assets/xterm-DHcfr8qj.css +1 -0
- package/frontend/dist/index.html +41 -16
- package/frontend/dist/js/ArtifactContainer-CjpvtR8G.js +1 -0
- package/frontend/dist/js/{ArtifactDemoPage-B4qsvUnF.js → ArtifactDemoPage-yrPXLBQo.js} +1 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-DdsL2AOQ.js +1 -0
- package/frontend/dist/js/{Button-CRwzOaDZ.js → Button-X9TT9gTD.js} +1 -1
- package/frontend/dist/js/ChatPage-D9lWGM8g.js +16 -0
- package/frontend/dist/js/FirstTimeSetup-CwLPbHkI.js +1 -0
- package/frontend/dist/js/GalleryPage-C9DTdo_-.js +1 -0
- package/frontend/dist/js/HomePage-iF44c34e.js +1 -0
- package/frontend/dist/js/LibreClawPage-B9wWZIz6.js +1 -0
- package/frontend/dist/js/{ModelManagerModals-DMoEav1l.js → ModelManagerModals-D9j9RECi.js} +1 -1
- package/frontend/dist/js/ModelSelector-B0RKEJwC.js +1 -0
- package/frontend/dist/js/ModelsPage-DJXoIOs8.js +2 -0
- package/frontend/dist/js/NotesPage-BTNH6JR2.js +1 -0
- package/frontend/dist/js/{OptimizedSyntaxHighlighter-Ci9sRc78.js → OptimizedSyntaxHighlighter-CWYUn9Oe.js} +1 -1
- package/frontend/dist/js/PersonasPage--nqoJ-wA.js +13 -0
- package/frontend/dist/js/PluginUsagePage-BHwm-BBr.js +1 -0
- package/frontend/dist/js/{RichMessageContent-BJ49VN9j.js → RichMessageContent-DYRrXJ75.js} +3 -3
- package/frontend/dist/js/SettingsModal-y1Nzg55O.js +1 -0
- package/frontend/dist/js/SystemPage-CHez8h3p.js +1 -0
- package/frontend/dist/js/UserManagementPage-aJhKXQxG.js +1 -0
- package/frontend/dist/js/WorkPage-Ccla0MDm.js +5 -0
- package/frontend/dist/js/addon-fit-DIOBYJe3.js +1 -0
- package/frontend/dist/js/api-DVP8xiYT.js +19 -0
- package/frontend/dist/js/appStore-Cw7PmG-J.js +2 -0
- package/frontend/dist/js/ar-ONXFvOB1.js +2 -0
- package/frontend/dist/js/artifactHtml-C0Hu9I1u.js +41 -0
- package/frontend/dist/js/authStore-gv_MgDKr.js +3 -0
- package/frontend/dist/js/babel-CmENXdZw.js +16 -0
- package/frontend/dist/js/bn-BLhREPm6.js +2 -0
- package/frontend/dist/js/chatStore-DmDbolTg.js +2 -0
- package/frontend/dist/js/cs-Bg8E9fG5.js +2 -0
- package/frontend/dist/js/da-ODCU8w4x.js +2 -0
- package/frontend/dist/js/de-nuGHRJ5N.js +2 -0
- package/frontend/dist/js/es-DcN_cwum.js +2 -0
- package/frontend/dist/js/estree-DJwQLE88.js +44 -0
- package/frontend/dist/js/fr-C-L_xGr5.js +2 -0
- package/frontend/dist/js/hi-DUEtwA9G.js +2 -0
- package/frontend/dist/js/html-DdAOfeK4.js +25 -0
- package/frontend/dist/js/i18n-xir4Zz7C.js +2 -0
- package/frontend/dist/js/i18next-DgmgtwsV.js +1 -0
- package/frontend/dist/js/id-DNTYhti_.js +2 -0
- package/frontend/dist/js/imageGenModels-Dx_QMLJQ.js +1 -0
- package/frontend/dist/js/is-Bx28ymbQ.js +2 -0
- package/frontend/dist/js/it-BjW-JLlS.js +2 -0
- package/frontend/dist/js/ja-uThj4Q1w.js +2 -0
- package/frontend/dist/js/ko-DqgmMYXK.js +2 -0
- package/frontend/dist/js/logger-DSXjF4ye.js +1 -0
- package/frontend/dist/js/markdown-RaVsONor.js +70 -0
- package/frontend/dist/js/markdown-core-DHnR5Hw8.js +16 -0
- package/frontend/dist/js/markdown-math-B7FlYsmr.js +261 -0
- package/frontend/dist/js/messageCodeStyles-cTX0rQGK.js +2 -0
- package/frontend/dist/js/ms-R9kt_P0T.js +2 -0
- package/frontend/dist/js/nl-BjmtEgpK.js +2 -0
- package/frontend/dist/js/pl-C8_gU9r1.js +2 -0
- package/frontend/dist/js/postcss-B5WIGhAY.js +62 -0
- package/frontend/dist/js/pt-7BJForUD.js +2 -0
- package/frontend/dist/js/react-vendor-DPNXrO-8.js +9 -0
- package/frontend/dist/js/{rolldown-runtime-QTnfLwEv.js → rolldown-runtime-hePW80VL.js} +1 -1
- package/frontend/dist/js/router-vendor-Ca9zqOqT.js +1 -0
- package/frontend/dist/js/ru-D2HmhY6Y.js +2 -0
- package/frontend/dist/js/{standalone-DmLfI4Qj.js → standalone-B_aPlu7o.js} +8 -8
- package/frontend/dist/js/sv-zny3sDBM.js +2 -0
- package/frontend/dist/js/syntax-highlight-Ca9bHsaz.js +8 -0
- package/frontend/dist/js/th-CAzEKRz8.js +2 -0
- package/frontend/dist/js/tr-BmYgtmUo.js +2 -0
- package/frontend/dist/js/{typescript-Bcq62agC.js → typescript-Dz4OUZSl.js} +10 -10
- package/frontend/dist/js/ui-DDlcz2oy.js +2 -0
- package/frontend/dist/js/ui-vendor-D_pYT79f.js +177 -0
- package/frontend/dist/js/uk-eiYZ0uRq.js +2 -0
- package/frontend/dist/js/useTranslation-CdeLZqSW.js +1 -0
- package/frontend/dist/js/utils-BhpNrGnR.js +1 -0
- package/frontend/dist/js/utils-vendor-1zob7nK9.js +9 -0
- package/frontend/dist/js/vi-C7SVAWpO.js +2 -0
- package/frontend/dist/js/welcomePrompts-to5mv_gx.js +1 -0
- package/frontend/dist/js/xterm-Da5ppSVt.js +18 -0
- package/frontend/dist/js/{yaml-mLy9chOK.js → yaml-QD4znPfZ.js} +20 -20
- package/frontend/dist/js/zh-2Q3cQv3s.js +2 -0
- package/package.json +20 -13
- package/plugins/codex-oauth.json +19 -0
- package/plugins/openrouter.json +89 -0
- package/backend/dist/services/systemSettingsService.d.ts +0 -12
- package/backend/dist/services/systemSettingsService.d.ts.map +0 -1
- package/backend/dist/services/systemSettingsService.js +0 -70
- package/backend/dist/services/systemSettingsService.js.map +0 -1
- package/frontend/dist/assets/index-BqI0kezz.css +0 -1
- package/frontend/dist/assets/index-CRC6g6bL.js +0 -3
- package/frontend/dist/assets/markdown-math-CYlHEDRF.css +0 -1
- package/frontend/dist/assets/xterm-CmMoOwwu.css +0 -1
- package/frontend/dist/js/ArtifactContainer-Cdy-973y.js +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-CmKgQ4eD.js +0 -1
- package/frontend/dist/js/ChatPage-CYT69oBR.js +0 -16
- package/frontend/dist/js/FirstTimeSetup-C8LdLP5J.js +0 -1
- package/frontend/dist/js/GalleryPage-Bm89pnS8.js +0 -1
- package/frontend/dist/js/HomePage-CeCYnMUG.js +0 -1
- package/frontend/dist/js/LibreClawPage-DGMEV6dm.js +0 -1
- package/frontend/dist/js/ModelSelector-DXPdGdQ_.js +0 -1
- package/frontend/dist/js/ModelsPage-D-FIy2x-.js +0 -2
- package/frontend/dist/js/PersonasPage-CIrEVFo5.js +0 -13
- package/frontend/dist/js/SettingsModal-CxtOXPY7.js +0 -1
- package/frontend/dist/js/UserManagementPage-BfyYGGFQ.js +0 -1
- package/frontend/dist/js/WorkPage-C7bW6Hxx.js +0 -4
- package/frontend/dist/js/addon-fit-Cj0_dfHF.js +0 -1
- package/frontend/dist/js/api-DCD41-l9.js +0 -19
- package/frontend/dist/js/appStore-Bw-8Exsx.js +0 -2
- package/frontend/dist/js/ar-BAHlIvy0.js +0 -2
- package/frontend/dist/js/artifactHtml-B7Oy2e__.js +0 -27
- package/frontend/dist/js/authStore-mOYH_AXI.js +0 -4
- package/frontend/dist/js/babel-BnLuavNv.js +0 -16
- package/frontend/dist/js/bn-BxquDVbd.js +0 -2
- package/frontend/dist/js/cs-C4DoKzRm.js +0 -2
- package/frontend/dist/js/da-CFslpGTw.js +0 -2
- package/frontend/dist/js/de-ChudoRh2.js +0 -2
- package/frontend/dist/js/demoMode-BhEpMVh5.js +0 -1
- package/frontend/dist/js/es-B36fefE-.js +0 -2
- package/frontend/dist/js/estree-0vwU39qX.js +0 -44
- package/frontend/dist/js/fr-BSVeTM5W.js +0 -2
- package/frontend/dist/js/hi-BGoFbl5V.js +0 -2
- package/frontend/dist/js/html-CApr2Bvi.js +0 -25
- package/frontend/dist/js/id-BfYs2p_j.js +0 -2
- package/frontend/dist/js/is-DZ1MS-5A.js +0 -2
- package/frontend/dist/js/it-CXtrPCG1.js +0 -2
- package/frontend/dist/js/ja-FPJ_NK_y.js +0 -2
- package/frontend/dist/js/ko-DVwD4ZZF.js +0 -2
- package/frontend/dist/js/logger-DbNs3-DK.js +0 -1
- package/frontend/dist/js/markdown-C78Qc6xu.js +0 -70
- package/frontend/dist/js/markdown-core-GI9BPwrB.js +0 -16
- package/frontend/dist/js/markdown-math-E4O1gcxj.js +0 -261
- package/frontend/dist/js/ms-PKPP0RX3.js +0 -2
- package/frontend/dist/js/nl-DWM5HJZ8.js +0 -2
- package/frontend/dist/js/pl-B9va8Tuf.js +0 -2
- package/frontend/dist/js/postcss-DSDkwgFE.js +0 -62
- package/frontend/dist/js/pt-P0IQi-Zr.js +0 -2
- package/frontend/dist/js/react-vendor-DyG_ODzn.js +0 -9
- package/frontend/dist/js/router-vendor-BjDI9mRe.js +0 -1
- package/frontend/dist/js/ru-Ca2bxYnc.js +0 -2
- package/frontend/dist/js/sv-DI4RDwyZ.js +0 -2
- package/frontend/dist/js/syntax-highlight-pM1xnNpY.js +0 -8
- package/frontend/dist/js/th-DN0bDS9d.js +0 -2
- package/frontend/dist/js/tr-ChqMv5Q4.js +0 -2
- package/frontend/dist/js/ui-vendor-DohPFHDW.js +0 -177
- package/frontend/dist/js/uk-Cr51h_XQ.js +0 -2
- package/frontend/dist/js/useBaseQuery-BAOlhjar.js +0 -1
- package/frontend/dist/js/useQuery-CcRqxveh.js +0 -1
- package/frontend/dist/js/useTranslation-Cs6iTP4m.js +0 -1
- package/frontend/dist/js/utils-DmZD5uA3.js +0 -1
- package/frontend/dist/js/utils-vendor-Cbaj0BC5.js +0 -9
- package/frontend/dist/js/vi-D4OhoVMH.js +0 -2
- package/frontend/dist/js/xterm-DKl1QLiw.js +0 -7
- package/frontend/dist/js/zh-Bvau7hlR.js +0 -2
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/babel-CmENXdZw.js","js/router-vendor-Ca9zqOqT.js","js/rolldown-runtime-hePW80VL.js","js/markdown-core-DHnR5Hw8.js","js/estree-DJwQLE88.js","assets/index-_lG_lwU-.js","js/react-vendor-DPNXrO-8.js","js/useTranslation-CdeLZqSW.js","js/i18n-xir4Zz7C.js","js/i18next-DgmgtwsV.js","js/ui-vendor-D_pYT79f.js","js/utils-vendor-1zob7nK9.js","js/logger-DSXjF4ye.js","js/api-DVP8xiYT.js","js/utils-BhpNrGnR.js","js/chatStore-DmDbolTg.js","js/authStore-gv_MgDKr.js","js/appStore-Cw7PmG-J.js","js/welcomePrompts-to5mv_gx.js","js/Button-X9TT9gTD.js","js/ui-DDlcz2oy.js","js/messageCodeStyles-cTX0rQGK.js","assets/index-CFhy8YLA.css","js/typescript-Dz4OUZSl.js","js/postcss-B5WIGhAY.js","js/html-DdAOfeK4.js","js/markdown-RaVsONor.js","js/yaml-QD4znPfZ.js","js/standalone-B_aPlu7o.js","js/OptimizedSyntaxHighlighter-CWYUn9Oe.js","js/syntax-highlight-Ca9bHsaz.js","assets/xterm-DHcfr8qj.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{d as t,f as n}from"./markdown-core-DHnR5Hw8.js";import{d as r,f as i,i as a,l as o,u as s}from"./router-vendor-Ca9zqOqT.js";import{t as c}from"./useTranslation-CdeLZqSW.js";import{i as l}from"./i18n-xir4Zz7C.js";import{$t as u,B as d,Bt as f,C as p,Ct as m,Dt as h,F as g,It as _,L as v,Mt as y,N as b,Nt as x,Q as S,R as C,Sn as w,St as T,T as E,Tn as D,V as O,Vt as k,an as A,c as j,dn as M,i as ee,in as te,kt as N,m as ne,n as P,on as re,pn as ie,st as F,tt as ae,vn as oe,vt as se,x as ce,yn as le}from"./ui-vendor-D_pYT79f.js";import{c as ue,o as de,w as fe}from"./api-DVP8xiYT.js";import{t as I}from"./utils-BhpNrGnR.js";import{t as L}from"./chatStore-DmDbolTg.js";import{a as pe,i as me,l as he,n as ge,o as _e,s as ve}from"./authStore-gv_MgDKr.js";import{t as ye}from"./appStore-Cw7PmG-J.js";import{t as R}from"./Button-X9TT9gTD.js";import{u as be}from"./ui-DDlcz2oy.js";import{s as xe}from"../assets/index-_lG_lwU-.js";import{t as Se}from"./RichMessageContent-DYRrXJ75.js";import{t as Ce}from"./ModelSelector-B0RKEJwC.js";import{n as we,t as Te}from"./work-DVgm81bJ.js";var z=e(n(),1),B=t(),V=e=>we({model:e.name,providerType:e.isPlugin?`plugin`:`ollama`,providerId:e.isPlugin?e.pluginId:void 0}),Ee=e=>{let t=e.name.split(`/`).filter(Boolean),n=t[t.length-1]||e.name;return t.length>1?n.replace(/[-_]+/g,` `):n},H=e=>{let t=`${e.model} · `;return{name:e.model,model:e.model,size:0,digest:``,modified_at:``,details:{},isPlugin:e.providerType===`plugin`,pluginId:e.providerId,pluginName:e.providerType===`plugin`?e.label.startsWith(t)?e.label.slice(t.length):e.providerId:void 0}};function U({models:e,selectorModels:t,modelKey:n,running:r,loading:i,variant:a=`task`,disabled:o=!1,remoteDisclosureDismissed:s,remoteDisclosureSaving:l,onModelChange:d,onDismissRemoteDisclosure:f,onModelsRefresh:p,onSubmit:m,onCancel:h}){let{t:g}=c(),[_,v]=(0,z.useState)(``),y=(0,z.useRef)(null),x=(0,z.useRef)(null),S=(0,z.useRef)(null),C=e.find(e=>e.key===n),w=C?.remote===!0,T=a===`landing`,E=(0,z.useMemo)(()=>{let n=new Set(t.map(V)),r=e.filter(e=>!n.has(e.key)).map(H);return[...t,...r]},[e,t]);(0,z.useEffect)(()=>{let e=y.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,160)}px`)},[_]);let D=async()=>{await f()&&([x.current,S.current].find(e=>e&&e.offsetParent!==null)||x.current)?.focus()},O=t=>{let n=e.find(e=>e.key===t)||e.find(e=>e.providerType===`ollama`&&e.model===t);n&&d(n.key)},k=async()=>{let e=_.trim();!e||i||r||o||!C||await m(e)&&v(``)};return(0,B.jsxs)(`div`,{"data-testid":T?`work-landing-composer`:`work-task-composer`,"data-variant":a,className:I(`relative shrink-0`,T?`mt-10 w-full`:`border-t border-line bg-surface/95 px-3 py-3 backdrop-blur md:px-5`),children:[w&&!s&&(0,B.jsx)(`div`,{className:I(`absolute inset-x-3 z-30 mx-auto max-w-3xl md:inset-x-5`,`bottom-full mb-3`),children:(0,B.jsxs)(`aside`,{"data-testid":`work-provider-disclosure-popover`,"aria-labelledby":`work-provider-disclosure-title`,"aria-live":`polite`,className:`relative rounded-2xl border border-warning-500/40 bg-surface-overlay p-3 pe-10 shadow-overlay backdrop-blur dark:border-warning-500/45`,children:[(0,B.jsx)(`button`,{type:`button`,onClick:()=>void D(),disabled:l,className:`absolute end-2 top-2 inline-flex h-7 w-7 items-center justify-center rounded-lg text-ink-muted transition-colors hover:bg-warning-500/20 hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-warning-500 disabled:cursor-wait disabled:opacity-50`,"aria-label":g(`work.composer.remoteDismissLabel`,{defaultValue:`Dismiss remote provider notice`}),children:(0,B.jsx)(P,{className:`h-4 w-4`})}),(0,B.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,B.jsx)(`div`,{className:`mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-warning-500/20`,children:(0,B.jsx)(u,{"data-testid":`work-provider-disclosure-accent`,className:`h-4 w-4 text-warning-500`,"aria-hidden":`true`})}),(0,B.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,B.jsx)(`p`,{id:`work-provider-disclosure-title`,className:`text-sm font-semibold text-ink`,children:g(`work.composer.remoteTitle`,{defaultValue:`Remote provider`})}),(0,B.jsx)(`p`,{className:`mt-0.5 text-xs leading-relaxed text-ink-muted`,children:g(`work.composer.remoteHint`,{defaultValue:`Conversation and tool output are sent to the configured service. One autonomous run can make multiple provider calls and may incur charges. Workspace files stay local unless a tool returns their contents.`})}),(0,B.jsx)(`div`,{className:`mt-2.5 flex justify-end`,children:(0,B.jsx)(R,{"data-testid":`work-provider-disclosure-dismiss`,type:`button`,variant:`ghost`,size:`sm`,loading:l,className:`h-7 border-warning-500 bg-warning-500 px-2.5 text-xs text-[#3d120c] hover:bg-warning-500/90 hover:text-[#3d120c]`,onClick:()=>void D(),children:g(`work.composer.remoteDismiss`,{defaultValue:`Dismiss`})})})]})]})]})}),(0,B.jsx)(`form`,{className:`mx-auto w-full max-w-3xl`,onSubmit:e=>{e.preventDefault(),k()},children:(0,B.jsxs)(`div`,{"data-testid":`work-composer-surface`,className:I(`flex items-end gap-2 rounded-[1.6rem] border p-2.5 transition-[border-color,box-shadow,background-color] duration-200 sm:p-3`,`border-black/[0.08] bg-surface/90 dark:border-white/[0.09] dark:bg-dark-200/90`,`shadow-[0_1px_2px_rgba(0,0,0,0.03),0_18px_50px_rgba(15,23,42,0.08)] backdrop-blur-xl`,`focus-within:border-primary-500/35 focus-within:shadow-[0_1px_2px_rgba(0,0,0,0.03),0_22px_65px_rgba(15,23,42,0.12)]`),children:[(0,B.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,B.jsx)(`textarea`,{ref:y,"data-testid":`work-composer-input`,dir:`auto`,value:_,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),k())},disabled:o||r,rows:1,className:`m-0 block max-h-[160px] min-h-10 w-full resize-none overflow-y-auto rounded-none border-0 bg-transparent p-2 text-base leading-relaxed text-ink shadow-none outline-none placeholder:text-ink-subtle focus:border-0 focus:bg-transparent focus:ring-0 disabled:cursor-not-allowed disabled:opacity-60`,placeholder:g(`work.composer.placeholder`,{defaultValue:`Describe what you want to build or change…`})})}),(0,B.jsx)(`div`,{className:`hidden shrink-0 sm:block`,children:(0,B.jsx)(Ce,{models:E,selectedModel:n,onModelChange:e=>O(e.target.value),onModelsRefresh:()=>void p(),getModelValue:V,getModelLabel:Ee,getModelTitle:e=>e.name,triggerRef:x,triggerTestId:`work-model-selector-trigger`,selectTestId:`work-model-select`,ariaLabel:g(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`min-w-[150px] max-w-[230px]`,compact:!0})}),r?(0,B.jsx)(R,{"data-testid":`work-cancel-button`,type:`button`,variant:`ghost`,size:`sm`,disabled:i,className:`flex h-9 w-9 shrink-0 touch-manipulation items-center justify-center rounded-full bg-error-500/15 p-0 text-error-600 transition-colors duration-150 hover:bg-error-500/25 dark:text-error-400 sm:h-10 sm:w-10`,title:g(`work.composer.cancel`,{defaultValue:`Stop`}),"aria-label":g(`work.composer.cancel`,{defaultValue:`Stop`}),onClick:()=>void h(),children:i?(0,B.jsx)(F,{className:`h-4 w-4 animate-spin`}):(0,B.jsx)(ce,{className:`h-4 w-4 fill-current`})}):(0,B.jsx)(R,{"data-testid":`work-submit-button`,type:`submit`,variant:`ghost`,size:`sm`,disabled:i||o||!_.trim()||!C,className:I(`flex h-9 w-9 shrink-0 touch-manipulation items-center justify-center rounded-full p-0 transition-colors duration-150 sm:h-10 sm:w-10`,`bg-gray-950 text-white hover:bg-gray-800 dark:bg-white dark:text-gray-950 dark:hover:bg-gray-100`,`disabled:bg-gray-100 disabled:text-gray-400 disabled:hover:bg-gray-100 dark:disabled:bg-dark-300 dark:disabled:text-dark-500 dark:disabled:hover:bg-dark-300`,_.trim()&&C&&!o&&`shadow-sm`),title:g(`work.composer.send`,{defaultValue:`Run`}),"aria-label":g(`work.composer.send`,{defaultValue:`Run`}),children:i?(0,B.jsx)(F,{className:`h-4 w-4 animate-spin`}):(0,B.jsx)(b,{className:`h-4 w-4`})})]})}),(0,B.jsx)(`div`,{className:`mx-auto mt-3 w-full max-w-3xl sm:hidden`,children:(0,B.jsx)(Ce,{models:E,selectedModel:n,onModelChange:e=>O(e.target.value),onModelsRefresh:()=>void p(),getModelValue:V,getModelLabel:Ee,getModelTitle:e=>e.name,triggerRef:S,triggerTestId:`work-model-selector-trigger-mobile`,selectTestId:`work-model-select-mobile`,ariaLabel:g(`work.composer.model`,{defaultValue:`Work model`}),disabled:r||e.length===0,className:`w-full`,compact:!0})})]})}var De=e=>{if(e==null||e===``)return null;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}},Oe=e=>{if(e<1e3)return`${Math.max(0,Math.round(e))}ms`;let t=Math.max(0,Math.round(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?`${n}:${String(r).padStart(2,`0`)}`:`${r}s`},ke=e=>{if(!e)return 0;let t=Array.from(e).length,n=e.trim()?e.trim().split(/\s+/u).length:0;return Math.max(n,Math.ceil(t/4))};function Ae({run:e}){let[t,n]=(0,z.useState)();if((0,z.useEffect)(()=>{if(e.terminal||!e.startedAt)return;let t=window.setInterval(()=>n(Date.now()),1e3);return()=>window.clearInterval(t)},[e.startedAt,e.terminal]),!e.startedAt)return null;let r=e.finishedAt||t;return r?(0,B.jsx)(`span`,{dir:`ltr`,className:`tabular-nums text-ink-subtle`,"aria-hidden":`true`,children:Oe(r-e.startedAt)}):null}function je({tool:e,expandedByDefault:t}){let{t:n}=c(),[r]=(0,z.useState)(e.status),[i,a]=(0,z.useState)(null),o=(0,z.useMemo)(()=>De(e.arguments),[e.arguments]),s=e.output||null,l=!!(o||s),d=e.status===`error`,f=e.status===`running`,p=(0,z.useId)(),m=d?n(`work.activity.kinds.error`,{defaultValue:`Error`}):f?n(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}):n(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),h=i??(e.status===r?t:e.status===`error`);return(0,B.jsxs)(`div`,{"data-testid":`work-live-tool`,"data-tool-id":e.id,className:I(`overflow-hidden rounded-xl border bg-surface-raised transition-colors`,d?`border-error-500/30`:`border-line`),children:[(0,B.jsxs)(`button`,{type:`button`,disabled:!l,onClick:()=>{a(!h)},"aria-expanded":l?h:void 0,"aria-controls":l?p:void 0,"aria-label":`${m}: ${e.name}`,className:`flex min-h-10 w-full items-center gap-2 px-3 py-2 text-start outline-none hover:bg-surface-subtle focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-[#ff7b52] disabled:cursor-default disabled:hover:bg-transparent`,children:[(0,B.jsx)(`span`,{className:`flex h-5 w-5 shrink-0 items-center justify-center`,children:d?(0,B.jsx)(u,{className:`h-3.5 w-3.5 text-error-500`}):f?(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin text-[rgb(48,121,255)] motion-reduce:animate-none`}):(0,B.jsx)(re,{className:`h-3.5 w-3.5 text-[rgb(76,212,117)]`})}),(0,B.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-xs text-ink`,children:e.name}),e.durationMs!==void 0&&(0,B.jsx)(`span`,{className:`shrink-0 text-[10px] tabular-nums text-ink-subtle`,children:Oe(e.durationMs)}),l&&(0,B.jsx)(A,{"aria-hidden":`true`,className:I(`h-3.5 w-3.5 shrink-0 text-ink-subtle transition-transform`,h&&`rotate-180`)})]}),l&&h&&(0,B.jsxs)(`div`,{id:p,className:`border-t border-line bg-surface-subtle/50`,children:[o&&(0,B.jsx)(`pre`,{dir:`ltr`,className:`max-h-48 overflow-auto whitespace-pre-wrap break-words px-3 py-2.5 text-left font-mono text-[11px] leading-relaxed text-ink-muted`,children:o}),s&&(0,B.jsx)(`pre`,{dir:`ltr`,className:I(`max-h-64 overflow-auto whitespace-pre-wrap break-words border-t border-line px-3 py-2.5 text-left font-mono text-[11px] leading-relaxed`,d?`text-error-600`:`text-ink-muted`),children:s})]})]})}var Me=e=>{let t=e.split(`
|
|
3
|
+
`);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n)return n}return``};function W({content:e,streaming:t}){let{t:n}=c(),[r,i]=(0,z.useState)(!1),a=t&&!r?Me(e):``;return(0,B.jsxs)(`details`,{"data-testid":`work-live-reasoning`,open:r,onToggle:e=>i(e.currentTarget.open),className:`group overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,B.jsxs)(`summary`,{className:`flex cursor-pointer list-none flex-col gap-1 px-3 py-2 marker:hidden [&::-webkit-details-marker]:hidden`,children:[(0,B.jsxs)(`span`,{className:`flex items-center justify-between gap-3 text-xs font-medium text-ink-muted`,children:[(0,B.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,B.jsx)(M,{className:I(`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`,t&&`animate-pulse-subtle motion-reduce:animate-none`)}),t?(0,B.jsxs)(`span`,{className:`animate-shimmer truncate bg-gradient-to-r from-ink-subtle via-ink to-ink-subtle bg-[length:200%_100%] bg-clip-text text-transparent motion-reduce:animate-none motion-reduce:bg-none motion-reduce:text-ink-muted`,children:[n(`work.statusLabels.thinking`,{defaultValue:`Thinking`}),`…`]}):(0,B.jsx)(`span`,{className:`truncate`,children:n(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,B.jsx)(A,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),a&&(0,B.jsx)(`span`,{dir:`auto`,"data-testid":`work-live-reasoning-preview`,className:`block truncate text-[11px] leading-relaxed text-ink-subtle`,children:a})]}),(0,B.jsx)(`div`,{className:`border-t border-line px-3 py-2.5`,children:(0,B.jsx)(be,{content:e,isStreaming:t,className:`text-xs text-ink-muted`})})]})}var G=(e,t,n)=>e===`queued`||e===`preparing`?t(`work.status.preparing`,{defaultValue:`Preparing isolated workspace…`}):e===`using_tool`?n?.name?`${t(`work.activity.toolActivity`,{defaultValue:`Tool activity`})} · ${n.name}`:t(`work.activity.toolActivity`,{defaultValue:`Tool activity`}):e===`completed`?t(`work.statusLabels.complete`,{defaultValue:`Complete`}):e===`needs_input`?t(`work.statusLabels.needsInput`,{defaultValue:`Needs input`}):e===`failed`?t(`work.statusLabels.error`,{defaultValue:`Error`}):e===`cancelled`?t(`work.statusLabels.needsInput`,{defaultValue:`Needs input`}):e===`responding`?t(`work.status.running`,{defaultValue:`Working in the local workspace…`}):t(`work.statusLabels.thinking`,{defaultValue:`Thinking`}),Ne=(e,t)=>{if(e===`connecting`)return t(`work.live.connecting`,{defaultValue:`Connecting to live updates…`});if(e===`reconnecting`)return t(`work.live.reconnecting`,{defaultValue:`Reconnecting to live updates…`});if(e===`error`)return t(`work.live.unavailable`,{defaultValue:`Live updates unavailable`})};function Pe({run:e,variant:t=`conversation`}){let{t:n}=c(),r=[...e.tools].reverse().find(e=>e.status===`running`),i=Ne(e.connection,n)||G(e.phase,n,r),a=!e.terminal,o=e.usage?.outputTokens,s=e.reasoning+e.response,l=o!==void 0&&o>0?o:s?ke(s):o,d=(o===void 0||o===0)&&!!s&&l!==void 0,f=e.usage?.tokensPerSecond;return(0,B.jsxs)(`section`,{"data-testid":`work-live-run`,"data-run-id":e.runId,"data-phase":e.phase,"aria-busy":a||void 0,className:I(`min-w-0`,t===`activity`&&`rounded-2xl border border-line bg-surface p-3 shadow-subtle`),children:[(0,B.jsxs)(`div`,{className:`mb-3 flex min-h-6 items-center gap-2 text-xs`,children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,className:I(`h-2 w-2 shrink-0 rounded-full`,e.phase===`failed`?`bg-[rgb(255,61,129)]`:e.phase===`completed`?`bg-[rgb(76,212,117)]`:e.phase===`needs_input`||e.phase===`cancelled`?`bg-[rgb(255,204,0)]`:e.connection===`error`?`bg-[rgb(255,61,129)]`:`bg-[rgb(48,121,255)]`,a&&`animate-pulse motion-reduce:animate-none`)}),(0,B.jsx)(`span`,{dir:`auto`,title:e.connectionError,className:`min-w-0 flex-1 truncate font-medium text-ink-muted`,children:i}),e.round!==void 0&&(0,B.jsx)(`span`,{dir:`ltr`,className:`shrink-0 tabular-nums text-ink-subtle`,children:e.roundLimit===void 0?`#${e.round}`:`${e.round}/${e.roundLimit}`}),(0,B.jsx)(Ae,{run:e})]}),t===`conversation`&&(0,B.jsx)(`span`,{className:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:i}),e.skills.length>0&&(0,B.jsx)(`div`,{className:`mb-3 flex flex-wrap gap-1.5`,children:(0,B.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-line bg-surface-raised px-2 py-1 text-[10px] text-ink-muted`,children:[(0,B.jsx)(E,{className:`h-3 w-3 text-[#ff7b52]`,"aria-hidden":`true`}),(0,B.jsx)(`span`,{dir:`auto`,children:n(`work.live.skillsLoaded`,{count:e.skills.length,defaultValue:`Workspace skills · {{count}}`})})]})}),t===`conversation`?e.timeline.length>0&&(0,B.jsx)(`div`,{"data-testid":`work-live-timeline`,className:`space-y-2`,children:e.timeline.map((t,n)=>{let r=n===e.timeline.length-1;if(t.kind===`reasoning`)return(0,B.jsx)(W,{content:t.text,streaming:a&&r},`segment-${n}`);if(t.kind===`tool`){let n=e.tools.find(e=>e.id===t.toolId);return n?(0,B.jsx)(je,{tool:n,expandedByDefault:n.status===`error`},n.id):null}return(0,B.jsx)(be,{content:t.text,isStreaming:a&&r,className:`text-ink`},`segment-${n}`)})}):e.tools.length>0&&(0,B.jsx)(`div`,{"data-testid":`work-live-tools`,className:`space-y-1.5`,children:e.tools.map(e=>(0,B.jsx)(je,{tool:e,expandedByDefault:e.status===`running`||e.status===`error`},e.id))}),e.error&&(0,B.jsxs)(`div`,{role:`alert`,dir:`auto`,className:`mt-3 flex items-start gap-2 rounded-xl border border-error-500/30 bg-error-500/10 px-3 py-2.5 text-xs leading-relaxed text-error-600`,children:[(0,B.jsx)(u,{className:`mt-0.5 h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{children:e.error})]}),(l!==void 0||f!==void 0)&&(0,B.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 border-t border-line pt-2 text-[10px] tabular-nums text-ink-subtle`,children:[l!==void 0&&(0,B.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.generatedTokens`,{defaultValue:`Generated tokens:`}),` `,(0,B.jsxs)(`bdi`,{dir:`ltr`,children:[d&&`≈`,l.toLocaleString()]})]}),f!==void 0&&(0,B.jsxs)(`span`,{dir:`auto`,children:[n(`generationStats.speed`,{defaultValue:`Speed:`}),` `,(0,B.jsxs)(`bdi`,{dir:`ltr`,children:[f.toFixed(1),` t/s`]})]})]}),a&&!e.reasoning&&!e.response&&e.tools.length===0&&(0,B.jsxs)(`div`,{"aria-hidden":`true`,className:`flex h-5 items-center gap-1 text-[rgb(48,121,255)]`,children:[(0,B.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current motion-reduce:animate-none`}),(0,B.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current [animation-delay:160ms] motion-reduce:animate-none`}),(0,B.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-current [animation-delay:320ms] motion-reduce:animate-none`})]}),t===`activity`&&e.tools.length===0&&(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-ink-muted`,children:[(0,B.jsx)(p,{className:`h-3.5 w-3.5`}),n(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]})]})}function K({role:e,user:t,size:n=`message`}){let[r,i]=(0,z.useState)(null);if(e===`assistant`)return(0,B.jsx)(`div`,{role:`img`,"aria-label":`Libre WebUI`,"data-testid":`work-assistant-avatar`,className:I(`flex shrink-0 items-center justify-center rounded-full border border-line bg-surface-raised shadow-subtle`,n===`empty`?`mx-auto mb-4 h-12 px-3`:`mt-0.5 h-8 px-2`),children:(0,B.jsx)(`span`,{"aria-hidden":`true`,className:I(`libre-brand text-ink`,n===`empty`?`text-sm`:`text-[11px]`),children:`Libre`})});let a=t?.username||`User`,o=t?.avatar?.trim()||``,s=!!o&&o!==r;return(0,B.jsx)(`div`,{role:s?void 0:`img`,"aria-label":s?void 0:a,"data-testid":`work-user-avatar`,className:I(`mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full`,s?`border border-line bg-surface-raised`:`bg-ink text-ink-inverse`),title:a,children:s?(0,B.jsx)(`img`,{src:o,alt:a,className:`h-full w-full object-cover`,onError:()=>i(o)}):t?(0,B.jsx)(`span`,{"aria-hidden":`true`,className:`text-xs font-medium uppercase leading-none`,children:t.username.charAt(0)}):(0,B.jsx)(j,{"aria-hidden":`true`,className:`h-4 w-4`})})}var Fe=(e,t)=>{let n=e.metadata,r=n?.name??n?.toolName??n?.tool??n?.command;return typeof r==`string`&&r?r:t},Ie=e=>{let t=e.metadata?.toolCallId;return typeof t==`string`&&t?t:null},Le=(e,t,n)=>{let r=e??t,i=t?.kind===`error`||t?.metadata?.isError===!0||!t&&r?.kind===`error`,a=t?.metadata?.durationMs;return{id:(e??t)?.id??`tool`,name:r?Fe(r,n):n,status:i?`error`:`completed`,arguments:e?.metadata,output:t?.content||(!t&&e?e.content:void 0),durationMs:typeof a==`number`?a:void 0}},q=(e,t)=>{let n=[],r=new Map,i=(e,t)=>{let r=n[n.length-1];return r?.item.type===`tools`?(r.item.tools.push(e),r.item.tools.length-1):(n.push({key:t,item:{type:`tools`,tools:[e]}}),0)};for(let a of e){if(a.kind===`reasoning`){n.push({key:a.id,item:{type:`reasoning`,message:a}});continue}if(a.role!==`tool`&&a.kind===`message`){n.push({key:a.id,item:{type:`message`,message:a}});continue}let e=Ie(a);if(a.kind===`tool_call`&&e){let o=i(Le(a,void 0,t),a.id);r.set(e,{itemIndex:n.length-1,toolIndex:o,call:a});continue}if(a.kind===`tool_result`&&e){let i=r.get(e);if(i){let o=n[i.itemIndex];if(o.item.type===`tools`){o.item.tools[i.toolIndex]=Le(i.call,a,t),r.delete(e);continue}}}i(Le(a.kind===`tool_call`?a:void 0,a.kind===`tool_call`?void 0:a,t),a.id)}return n};function Re({message:e}){let{t}=c();return(0,B.jsxs)(`details`,{"data-testid":`work-provider-reasoning`,className:`group ms-14 overflow-hidden rounded-xl border border-line bg-surface-subtle/70`,children:[(0,B.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-2 text-xs font-medium text-ink-muted marker:hidden [&::-webkit-details-marker]:hidden`,children:[(0,B.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,B.jsx)(M,{className:`h-3.5 w-3.5 shrink-0 text-[rgb(48,121,255)]`}),(0,B.jsx)(`span`,{className:`truncate`,children:t(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`})})]}),(0,B.jsx)(A,{className:`h-3.5 w-3.5 shrink-0 transition-transform group-open:rotate-180`})]}),(0,B.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap break-words border-t border-line px-3 py-2.5 text-xs leading-relaxed text-ink-muted`,children:e.content})]})}function ze({task:e,user:t,loading:n,loadingOlder:r,liveRun:i,onLoadOlder:a}){let{t:o}=c(),s=(0,z.useRef)(null),l=(0,z.useRef)(!0),[u,d]=(0,z.useState)(!1),f=(0,z.useMemo)(()=>[...e.messages||[]].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id)),[e.messages]),p=i?.runId,m=(0,z.useMemo)(()=>q(f.filter(e=>!(p&&e.runId===p&&e.role!==`user`)),o(`work.activity.toolActivity`,{defaultValue:`Tool activity`})),[p,f,o]),h=[...f].reverse().find(e=>e.role===`assistant`&&e.kind===`message`)?.id;(0,z.useEffect)(()=>{l.current=!0;let e=s.current;e&&(e.scrollTop=e.scrollHeight);let t=window.requestAnimationFrame(()=>d(!1));return()=>window.cancelAnimationFrame(t)},[e.id]),(0,z.useEffect)(()=>{let e=s.current,t;return e&&l.current?(e.scrollTop=e.scrollHeight,t=window.requestAnimationFrame(()=>d(!1))):e&&i&&(t=window.requestAnimationFrame(()=>d(!0))),()=>{t!==void 0&&window.cancelAnimationFrame(t)}},[i,f,e.status]);let g=async()=>{let e=s.current,t=e?.scrollHeight??0,n=e?.scrollTop??0;l.current=!1;try{await a(),requestAnimationFrame(()=>{let e=s.current;e&&(e.scrollTop=n+e.scrollHeight-t)})}catch{}};return n&&f.length===0?(0,B.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center text-ink-muted`,children:(0,B.jsx)(F,{className:`h-6 w-6 animate-spin`})}):(0,B.jsxs)(`div`,{className:`relative flex min-h-0 flex-1`,children:[(0,B.jsx)(`div`,{ref:s,onScroll:e=>{let t=e.currentTarget;l.current=t.scrollHeight-t.scrollTop-t.clientHeight<80,l.current&&d(!1)},className:`min-h-0 flex-1 overflow-y-auto`,children:(0,B.jsx)(`div`,{className:`mx-auto flex min-h-full max-w-3xl flex-col px-4 py-6 md:px-6`,children:f.length===0&&!i?(0,B.jsxs)(`div`,{className:`m-auto max-w-md text-center`,children:[(0,B.jsx)(K,{role:`assistant`,size:`empty`}),(0,B.jsx)(`h2`,{className:`text-lg font-semibold tracking-tight text-ink`,children:o(`work.conversation.ready`,{defaultValue:`Workspace ready`})}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed text-ink-muted`,children:o(`work.conversation.empty`,{defaultValue:`Continue the task below. This conversation and its files stay attached to this workspace.`})})]}):(0,B.jsxs)(`div`,{className:`space-y-6`,children:[e.hasMoreMessages&&(0,B.jsx)(`div`,{className:`flex justify-center`,children:(0,B.jsxs)(`button`,{type:`button`,"data-testid":`work-load-older-messages`,disabled:r,onClick:()=>void g(),className:`inline-flex items-center gap-2 rounded-lg border border-line bg-surface-raised px-3 py-1.5 text-xs font-medium text-ink-muted transition-colors hover:bg-surface-subtle hover:text-ink disabled:cursor-not-allowed disabled:opacity-60`,children:[r&&(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),o(`work.conversation.loadOlder`,{defaultValue:`Load older messages`})]})}),m.map(({key:n,item:r})=>{if(r.type===`reasoning`)return(0,B.jsx)(Re,{message:r.message},n);if(r.type===`tools`)return(0,B.jsx)(`div`,{className:`ms-14 space-y-1.5`,children:r.tools.map(e=>(0,B.jsx)(je,{tool:e,expandedByDefault:!1},e.id))},n);let i=r.message,a=i.role===`user`,o=!a&&e.status===`running`&&i.id===h&&i.runId===e.activeRun?.id;return(0,B.jsxs)(`article`,{className:I(`flex gap-3`,a&&`flex-row-reverse`),children:[(0,B.jsx)(K,{role:a?`user`:`assistant`,user:a?t:void 0}),(0,B.jsx)(`div`,{className:I(`min-w-0 max-w-[88%]`,a&&`rounded-2xl rounded-se-md bg-ink px-4 py-2.5 text-ink-inverse`),children:a?(0,B.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap break-words text-sm leading-relaxed`,children:i.content}):o?(0,B.jsx)(be,{content:i.content,className:`text-ink`}):(0,B.jsx)(Se,{content:i.content,className:`text-sm text-ink`})})]},i.id)}),i&&(0,B.jsxs)(`article`,{className:`flex gap-3`,"data-testid":`work-live-run-message`,children:[(0,B.jsx)(K,{role:`assistant`}),(0,B.jsx)(`div`,{className:`min-w-0 max-w-[92%] flex-1`,children:(0,B.jsx)(Pe,{run:i})})]}),!i&&(e.status===`preparing`||e.status===`running`)&&(0,B.jsxs)(`div`,{className:`flex items-center gap-2 ps-14 text-xs text-ink-muted`,children:[(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),e.status===`preparing`?o(`work.status.preparing`,{defaultValue:`Preparing isolated workspace…`}):o(`work.status.running`,{defaultValue:`Working in the local workspace…`})]})]})})}),u&&(0,B.jsxs)(`button`,{type:`button`,"data-testid":`work-new-activity-button`,onClick:()=>{let e=s.current;e&&(e.scrollTop=e.scrollHeight),l.current=!0,d(!1)},className:`absolute bottom-4 left-1/2 z-10 inline-flex -translate-x-1/2 items-center gap-1.5 rounded-full border border-line bg-surface-overlay/95 px-3 py-2 text-xs font-medium text-ink shadow-overlay backdrop-blur transition-colors hover:bg-surface-raised`,children:[(0,B.jsx)(le,{className:`h-3.5 w-3.5`}),o(`work.live.newActivity`,{defaultValue:`New activity`})]})]})}var J=45,Be=30,Ve=70,He=360,Ue=480,We=9,Y=2,Ge=10,Ke=`libre-webui-work-split:`,qe=(e,t,n)=>Math.min(n,Math.max(t,e)),Je=e=>`${Ke}${encodeURIComponent(e||`local`)}`,Ye=e=>{if(typeof window>`u`)return J;try{let t=window.localStorage.getItem(e);if(t===null||t.trim()===``)return J;let n=Number(t);return Number.isFinite(n)?qe(n,Be,Ve):J}catch{return J}},Xe=(e,t)=>{if(!(typeof window>`u`))try{window.localStorage.setItem(e,t.toFixed(2))}catch{}},Ze=e=>{let t=Math.max(0,e-We);if(t===0)return{min:Be,max:Ve};let n=Math.max(Be,He/t*100),r=Math.min(Ve,(t-Ue)/t*100);if(n<=r)return{min:n,max:r};let i=qe(He/840*100,Be,Ve);return{min:i,max:i}},X=(e,t)=>qe(e,t.min,t.max);function Qe({conversation:e,workspace:t,userId:n,mobileSurface:r=`conversation`,className:i}){let{t:a,i18n:o}=c(),s=l(o.language),u=Je(n),[d,f]=(0,z.useState)(()=>({storageKey:u,percent:Ye(u)})),[p,m]=(0,z.useState)(0),[h,g]=(0,z.useState)(!1),_=(0,z.useRef)(null),v=(0,z.useRef)(null),y=(0,z.useRef)(null),b=(0,z.useRef)(u),x=(0,z.useRef)(d.percent),S=(0,z.useRef)(null),C=d.storageKey===u?d.percent:Ye(u),w=(0,z.useMemo)(()=>Ze(p),[p]),T=X(C,w),E=Math.round(T),D=100-E,O=(0,z.useCallback)(e=>{f({storageKey:u,percent:e})},[u]),k=(0,z.useCallback)(e=>{let t=X(e,Ze(_.current?.getBoundingClientRect().width??0));x.current=t,S.current===null&&(S.current=window.requestAnimationFrame(()=>{S.current=null,O(x.current)}))},[O]),A=(0,z.useCallback)(()=>{if(y.current===null&&!h)return;S.current!==null&&(window.cancelAnimationFrame(S.current),S.current=null);let e=_.current?.getBoundingClientRect().width??0,t=X(x.current,Ze(e));x.current=t,O(t),Xe(b.current,t);let n=y.current;y.current=null,n!==null&&v.current?.hasPointerCapture(n)&&v.current.releasePointerCapture(n),g(!1)},[h,O]),j=(0,z.useCallback)(e=>{let t=_.current?.getBoundingClientRect();if(!t)return x.current;let n=Math.max(1,t.width-We);return((s?t.right-e:e-t.left)-We/2)/n*100},[s]),M=e=>{e.button!==0||!e.isPrimary||(e.preventDefault(),e.stopPropagation(),y.current=e.pointerId,b.current=u,x.current=T,e.currentTarget.setPointerCapture(e.pointerId),g(!0))},ee=(0,z.useCallback)(e=>{let t=X(e,w);x.current=t,O(t),Xe(u,t)},[w,O,u]),te=(0,z.useCallback)(()=>{ee(J)},[ee]),N=e=>{let t=e.shiftKey?Ge:Y,n=null;e.key===`ArrowLeft`?n=T+(s?t:-t):e.key===`ArrowRight`?n=T+(s?-t:t):e.key===`Home`?n=w.min:e.key===`End`?n=w.max:e.key===`Enter`&&(n=J),n!==null&&(e.preventDefault(),ee(n))};(0,z.useEffect)(()=>{let e=_.current;if(!e)return;if(typeof ResizeObserver>`u`){let t=()=>m(e.getBoundingClientRect().width);return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)}let t=new ResizeObserver(e=>{let t=e[0];t&&m(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]),(0,z.useEffect)(()=>{if(!h)return;let e=document.body.style.cursor,t=document.body.style.userSelect;document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`;let n=e=>{e.pointerId===y.current&&(e.preventDefault(),k(j(e.clientX)))},r=e=>{e.pointerId===y.current&&A()};return window.addEventListener(`pointermove`,n,{passive:!1}),window.addEventListener(`pointerup`,r),window.addEventListener(`pointercancel`,r),window.addEventListener(`blur`,A),()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r),window.removeEventListener(`pointercancel`,r),window.removeEventListener(`blur`,A),document.body.style.cursor=e,document.body.style.userSelect=t}},[A,h,j,k]),(0,z.useEffect)(()=>()=>{S.current!==null&&window.cancelAnimationFrame(S.current),y.current!==null&&Xe(b.current,x.current)},[]);let ne={gridTemplateColumns:`minmax(0, ${T}fr) ${We}px minmax(0, ${100-T}fr)`};return(0,B.jsxs)(`div`,{ref:_,"data-testid":`work-split-pane`,"data-split-percent":T.toFixed(2),"data-resizing":h?`true`:`false`,className:I(`relative flex min-h-0 min-w-0 flex-1 overflow-hidden xl:grid`,i),style:ne,children:[(0,B.jsx)(`section`,{id:`work-conversation-panel`,"data-testid":`work-conversation-panel`,className:I(`min-h-0 min-w-0 flex-1 flex-col bg-transparent xl:flex`,r===`conversation`?`flex`:`hidden`),children:e}),(0,B.jsxs)(`div`,{ref:v,role:`separator`,"aria-orientation":`vertical`,"aria-controls":`work-conversation-panel work-workspace-panel`,"aria-label":a(`work.workspace.resize`,{defaultValue:`Resize conversation and workspace`}),"aria-valuemin":Math.round(w.min),"aria-valuemax":Math.round(w.max),"aria-valuenow":E,"aria-valuetext":a(`work.workspace.splitSize`,{conversation:E,workspace:D,defaultValue:`Conversation {{conversation}}%, workspace {{workspace}}%`}),title:a(`work.workspace.resizeHint`,{defaultValue:`Drag to resize. Use arrow keys for precise control. Double-click or press Enter to reset.`}),tabIndex:0,"data-testid":`work-split-resizer`,onPointerDown:M,onDoubleClick:te,onKeyDown:N,className:I(`group relative z-40 hidden h-full cursor-col-resize touch-none select-none items-center justify-center outline-none xl:flex`,`focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-[#ff7b52]`),children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,className:I(`pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-line transition-colors`,`group-hover:bg-[#ff7b52] group-focus-visible:bg-[#ff7b52]`,h&&`bg-[#ff7b52]`)}),(0,B.jsx)(`span`,{"aria-hidden":`true`,className:I(`pointer-events-none relative h-14 w-1 rounded-full bg-ink-subtle/50 opacity-60 transition-[height,background-color,opacity]`,`group-hover:h-20 group-hover:bg-[#ff7b52] group-hover:opacity-100`,`group-focus-visible:h-20 group-focus-visible:bg-[#ff7b52] group-focus-visible:opacity-100`,h&&`h-20 bg-[#ff7b52] opacity-100`)})]}),(0,B.jsx)(`section`,{id:`work-workspace-panel`,"data-testid":`work-workspace-panel`,className:I(`min-h-0 min-w-0 flex-1 flex-col bg-surface-raised/85 backdrop-blur-xl xl:flex`,r===`workspace`?`flex`:`hidden`),children:t}),h&&(0,B.jsx)(`div`,{"data-testid":`work-split-drag-shield`,"aria-hidden":`true`,className:`absolute inset-0 z-30 hidden cursor-col-resize select-none xl:block`})]})}var $e=1e5,Z=4e3,et={bash:`bash`,c:`c`,cc:`cpp`,cjs:`javascript`,cpp:`cpp`,cs:`csharp`,csh:`bash`,css:`css`,cts:`typescript`,cxx:`cpp`,diff:`diff`,go:`go`,h:`c`,hpp:`cpp`,htm:`markup`,html:`markup`,java:`java`,js:`javascript`,json:`json`,json5:`json`,jsonc:`json`,jsx:`jsx`,kt:`kotlin`,kts:`kotlin`,less:`css`,md:`markdown`,mdx:`markdown`,mjs:`javascript`,mts:`typescript`,patch:`diff`,php:`php`,py:`python`,rb:`ruby`,rs:`rust`,scss:`css`,sh:`bash`,sql:`sql`,svg:`markup`,swift:`swift`,ts:`typescript`,tsx:`tsx`,xml:`markup`,yaml:`yaml`,yml:`yaml`,zsh:`bash`},tt={".bashrc":`bash`,".zshrc":`bash`},nt={cjs:{family:`babel`,parser:`babel`},css:{family:`postcss`,parser:`css`},cts:{family:`typescript`,parser:`typescript`},htm:{family:`html`,parser:`html`},html:{family:`html`,parser:`html`},js:{family:`babel`,parser:`babel`},json:{family:`babel`,parser:`json`},json5:{family:`babel`,parser:`json5`},jsonc:{family:`babel`,parser:`json`},jsx:{family:`babel`,parser:`babel`},less:{family:`postcss`,parser:`less`},md:{family:`markdown`,parser:`markdown`},mdx:{family:`markdown`,parser:`mdx`},mjs:{family:`babel`,parser:`babel`},mts:{family:`typescript`,parser:`typescript`},scss:{family:`postcss`,parser:`scss`},ts:{family:`typescript`,parser:`typescript`},tsx:{family:`typescript`,parser:`typescript`},yaml:{family:`yaml`,parser:`yaml`},yml:{family:`yaml`,parser:`yaml`}},rt=e=>e.split(/[\\/]/).pop()?.toLowerCase()??``,it=e=>{let t=rt(e),n=t.lastIndexOf(`.`);return n>-1?t.slice(n+1):``},at=e=>tt[rt(e)]??et[it(e)]??`text`,ot=e=>nt[it(e)],st=e=>ot(e)!==void 0,ct=e=>{if(e.length>1e5)return!1;let t=1;for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)===10&&(t+=1,t>4e3))return!1;return!0},Q=async e=>(await e).default,lt=async(e,t)=>{switch(e.family){case`babel`:return Promise.all([Q(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),Q(a(()=>import(`./estree-DJwQLE88.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))]);case`typescript`:return Promise.all([Q(a(()=>import(`./typescript-Dz4OUZSl.js`),__vite__mapDeps([23,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]))),Q(a(()=>import(`./estree-DJwQLE88.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))]);case`postcss`:return[await Q(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([24,1,2,3])))];case`html`:{let e=[await Q(a(()=>import(`./html-DdAOfeK4.js`),__vite__mapDeps([25,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))];return/<script\b/i.test(t)&&e.push(await Q(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Q(a(()=>import(`./estree-DJwQLE88.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))),/<script\b[^>]*\blang\s*=\s*["']?(?:ts|typescript)/i.test(t)&&e.push(await Q(a(()=>import(`./typescript-Dz4OUZSl.js`),__vite__mapDeps([23,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))),/<style\b/i.test(t)&&e.push(await Q(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([24,1,2,3])))),[...new Set(e)]}case`markdown`:{let n=[await Q(a(()=>import(`./markdown-RaVsONor.js`),__vite__mapDeps([26,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))],r=e=>RegExp(`^(?: {0,3})(?:\`{3,}|~{3,})\\s*(?:${e})(?:\\s|$)`,`im`).test(t);return e.parser===`mdx`&&n.push(await Q(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Q(a(()=>import(`./estree-DJwQLE88.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))),r(`js|jsx|javascript|json|json5|jsonc`)&&n.push(await Q(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Q(a(()=>import(`./estree-DJwQLE88.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))),r(`ts|tsx|typescript`)&&n.push(await Q(a(()=>import(`./typescript-Dz4OUZSl.js`),__vite__mapDeps([23,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]))),await Q(a(()=>import(`./estree-DJwQLE88.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])))),r(`css|scss|less`)&&n.push(await Q(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([24,1,2,3])))),r(`html`)&&n.push(await Q(a(()=>import(`./html-DdAOfeK4.js`),__vite__mapDeps([25,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]))),await Q(a(()=>import(`./babel-CmENXdZw.js`),__vite__mapDeps([0,1,2,3]))),await Q(a(()=>import(`./estree-DJwQLE88.js`),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]))),await Q(a(()=>import(`./typescript-Dz4OUZSl.js`),__vite__mapDeps([23,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]))),await Q(a(()=>import(`./postcss-B5WIGhAY.js`),__vite__mapDeps([24,1,2,3])))),r(`yaml|yml`)&&n.push(await Q(a(()=>import(`./yaml-QD4znPfZ.js`),__vite__mapDeps([27,1,2,3])))),[...new Set(n)]}case`yaml`:return[await Q(a(()=>import(`./yaml-QD4znPfZ.js`),__vite__mapDeps([27,1,2,3])))]}},ut=async(e,t)=>{let n=ot(e);if(!n)throw Error(`Formatting is not supported for “${rt(e)||e}”.`);if(!ct(t))throw Error(`Could not format “${rt(e)||e}”: files are limited to ${$e.toLocaleString()} characters and ${Z.toLocaleString()} lines.`);try{let[{format:e},r]=await Promise.all([a(()=>import(`./standalone-B_aPlu7o.js`),__vite__mapDeps([28,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])),lt(n,t)]);return await e(t,{parser:n.parser,plugins:r,tabWidth:2,useTabs:!1})}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Could not format “${rt(e)||e}”: ${n}`)}},dt=(0,z.lazy)(async()=>({default:(await a(()=>import(`./OptimizedSyntaxHighlighter-CWYUn9Oe.js`).then(e=>e.n),__vite__mapDeps([29,2,3,30]))).OptimizedSyntaxHighlighter})),ft=8e3,pt=400,mt=500;function ht({path:e,value:t,ariaLabel:n,disabled:r=!1,onChange:i,onSaveShortcut:a,onFormatShortcut:o}){let{t:s}=c(),l=ye(e=>e.theme.mode===`dark`),u=(0,z.useRef)(null),d=(0,z.useRef)(null),[f,p]=(0,z.useState)(``),m=(0,z.useMemo)(()=>at(e),[e]),h=(0,z.useMemo)(()=>{if(t.length>ft)return 401;let e=1;for(let n=0;n<t.length&&!(t.charCodeAt(n)===10&&(e+=1,e>pt));n+=1);return e},[t]),g=t.length>ft||h>pt,_=m!==`text`&&!g,v=_&&f===t;return(0,z.useEffect)(()=>{if(!_)return;let e=window.setTimeout(()=>p(t),mt);return()=>window.clearTimeout(e)},[_,e,t]),(0,z.useLayoutEffect)(()=>{!v||!u.current||!d.current||(u.current.style.transform=`translate3d(${-d.current.scrollLeft}px, ${-d.current.scrollTop}px, 0)`)},[v,e]),(0,B.jsxs)(`div`,{dir:`ltr`,className:I(`relative min-h-0 flex-1 overflow-hidden bg-surface focus-within:ring-1 focus-within:ring-inset focus-within:ring-primary-500/60`,r&&`opacity-60`),"data-language":m,"data-highlighted":v?`true`:`false`,children:[v&&(0,B.jsx)(`div`,{"aria-hidden":`true`,"data-testid":`work-file-highlight`,className:`pointer-events-none absolute inset-0 z-0 overflow-hidden`,children:(0,B.jsx)(`div`,{ref:u,"data-testid":`work-file-highlight-content`,className:`min-h-full min-w-full origin-top-left will-change-transform`,children:(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(`pre`,{className:`m-0 min-h-full min-w-full whitespace-pre p-4 text-left font-mono text-[12px] leading-5 text-ink`,children:t||``}),children:(0,B.jsx)(dt,{language:m,isDark:l,backgroundColor:`transparent`,borderRadius:0,customStyle:{margin:0,minHeight:`100%`,minWidth:`100%`,width:`max-content`,overflow:`visible`,padding:`1rem`,fontSize:`12px`,lineHeight:`20px`,tabSize:2,whiteSpace:`pre`},children:f||``})})})}),(0,B.jsx)(`textarea`,{ref:d,"data-testid":`work-file-editor`,"data-language":m,"aria-label":n,value:t,onChange:e=>i(e.target.value),onScroll:e=>{u.current&&(u.current.style.transform=`translate3d(${-e.currentTarget.scrollLeft}px, ${-e.currentTarget.scrollTop}px, 0)`)},onKeyDown:e=>{let t=e.key.toLowerCase();if((e.metaKey||e.ctrlKey)&&t===`s`){e.preventDefault(),a();return}e.altKey&&e.shiftKey&&t===`f`&&(e.preventDefault(),o())},disabled:r,spellCheck:!1,wrap:`off`,className:I(`absolute inset-0 z-10 h-full w-full resize-none overflow-auto whitespace-pre border-0 bg-transparent p-4 text-left font-mono text-[12px] leading-5 outline-none selection:bg-primary-500/25 disabled:cursor-not-allowed`,v?`text-transparent caret-ink`:`text-ink`),style:v?{WebkitTextFillColor:`transparent`,caretColor:`rgb(var(--color-ink))`,tabSize:2}:{tabSize:2}}),g&&(0,B.jsx)(`span`,{dir:`auto`,className:`pointer-events-none absolute bottom-2 end-3 z-20 rounded-md border border-line bg-surface-overlay/90 px-2 py-1 text-[10px] text-ink-muted shadow-subtle`,title:s(`work.files.highlightPaused`,{defaultValue:`Live highlighting is paused for large files to keep editing responsive.`}),children:s(`work.files.plainTextLarge`,{defaultValue:`Plain text · large file`})})]})}var gt=4e6,_t=e=>{if(e===``)return[];let t=e.split(`
|
|
4
|
+
`);return t[t.length-1]===``&&t.pop(),t},vt=(e,t)=>{let n=_t(e),r=_t(t),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i+=1;let a=0;for(;a<n.length-i&&a<r.length-i&&n[n.length-1-a]===r[r.length-1-a];)a+=1;let o=n.slice(i,n.length-a),s=r.slice(i,r.length-a),c=[];for(let e=0;e<i;e+=1)c.push({type:`context`,text:n[e],beforeLine:e+1,afterLine:e+1});let l=$(o,s);for(let e of l){let t={type:e.type,text:e.text};e.beforeLine!==void 0&&(t.beforeLine=e.beforeLine+i),e.afterLine!==void 0&&(t.afterLine=e.afterLine+i),c.push(t)}for(let e=0;e<a;e+=1){let t=n.length-a+e,i=r.length-a+e;c.push({type:`context`,text:n[t],beforeLine:t+1,afterLine:i+1})}return c},$=(e,t)=>{if(e.length===0&&t.length===0)return[];if(e.length>0&&t.length>0&&e.length*t.length>gt)return[...e.map((e,t)=>({type:`removed`,text:e,beforeLine:t+1})),...t.map((e,t)=>({type:`added`,text:e,afterLine:t+1}))];let n=e.length+1,r=t.length+1,i=new Uint32Array(n*r);for(let n=e.length-1;n>=0;--n)for(let a=t.length-1;a>=0;--a)i[n*r+a]=e[n]===t[a]?i[(n+1)*r+a+1]+1:Math.max(i[(n+1)*r+a],i[n*r+a+1]);let a=[],o=0,s=0;for(;o<e.length&&s<t.length;)e[o]===t[s]?(a.push({type:`context`,text:e[o],beforeLine:o+1,afterLine:s+1}),o+=1,s+=1):i[(o+1)*r+s]>=i[o*r+s+1]?(a.push({type:`removed`,text:e[o],beforeLine:o+1}),o+=1):(a.push({type:`added`,text:t[s],afterLine:s+1}),s+=1);for(;o<e.length;)a.push({type:`removed`,text:e[o],beforeLine:o+1}),o+=1;for(;s<t.length;)a.push({type:`added`,text:t[s],afterLine:s+1}),s+=1;return a},yt=e=>{let t=0,n=0;for(let r of e)r.type===`added`&&(t+=1),r.type===`removed`&&(n+=1);return{added:t,removed:n}},bt=3,xt=e=>{let t=Array(e.length).fill(!1);for(let n=0;n<e.length;n+=1){if(e[n].type===`context`)continue;let r=Math.max(0,n-bt),i=Math.min(e.length-1,n+bt);for(let e=r;e<=i;e+=1)t[e]=!0}let n=[],r=0;for(let i=0;i<e.length;i+=1){if(!t[i]){r+=1;continue}r>0&&(n.push({type:`fold`,count:r}),r=0),n.push({type:`line`,line:e[i]})}return r>0&&n.push({type:`fold`,count:r}),n};function St({lines:e,ariaLabel:t}){let{t:n}=c(),r=(0,z.useMemo)(()=>xt(e),[e]);return(0,B.jsx)(`div`,{dir:`ltr`,role:`region`,"aria-label":t,"data-testid":`work-file-diff`,className:`min-h-0 flex-1 overflow-auto bg-surface font-mono text-[12px] leading-5`,children:(0,B.jsx)(`table`,{className:`w-full border-collapse`,children:(0,B.jsx)(`tbody`,{children:r.map((e,t)=>e.type===`fold`?(0,B.jsx)(`tr`,{children:(0,B.jsx)(`td`,{colSpan:3,className:`select-none border-y border-line bg-surface-subtle/70 px-4 py-1 text-center text-[11px] text-ink-subtle`,children:n(`work.files.diffFolded`,{count:e.count,defaultValue:`{{count}} unchanged lines`})})},`fold-${t}`):(0,B.jsxs)(`tr`,{className:I(e.line.type===`added`&&`bg-[rgb(76,212,117)]/[0.12] text-ink`,e.line.type===`removed`&&`bg-[rgb(255,61,129)]/[0.10] text-ink-muted`,e.line.type===`context`&&`text-ink-muted`),children:[(0,B.jsx)(`td`,{className:`w-10 select-none px-2 text-right align-top text-[10px] tabular-nums text-ink-subtle`,children:e.line.beforeLine??``}),(0,B.jsx)(`td`,{className:`w-10 select-none px-2 text-right align-top text-[10px] tabular-nums text-ink-subtle`,children:e.line.afterLine??``}),(0,B.jsxs)(`td`,{className:`w-full whitespace-pre-wrap break-all px-3 align-top`,children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,className:I(`me-2 inline-block w-3 select-none text-center`,e.line.type===`added`&&`text-[rgb(46,164,79)]`,e.line.type===`removed`&&`text-[rgb(255,61,129)]`),children:e.line.type===`added`?`+`:e.line.type===`removed`?`−`:``}),e.line.text||``]})]},`line-${t}`))})})})}var Ct=(e,t)=>{if(e.success&&e.data)return e.data;throw Error(e.error||t)},wt=(e,t)=>{let n=e?.response?.data?.error;return typeof n==`string`&&n?n:e instanceof Error&&e.message?e.message:t};function Tt({taskId:e,mutationsDisabled:t=!1,disabledReason:n}){let{t:r}=c(),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!0),[l,u]=(0,z.useState)(!1),[f,p]=(0,z.useState)(null),[h,g]=(0,z.useState)([]),[y,b]=(0,z.useState)(``),[x,S]=(0,z.useState)(``),[w,T]=(0,z.useState)(null),[E,O]=(0,z.useState)(!1),k=(0,z.useRef)(0),A=(0,z.useCallback)(async()=>{let t=++k.current;s(!0),p(null);try{let n=Ct(await de.getGitStatus(e),r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`}));if(t!==k.current)return;a(n),g([])}catch(e){if(t!==k.current)return;p(wt(e,r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`})))}finally{t===k.current&&s(!1)}},[r,e]);(0,z.useEffect)(()=>{let e=window.setTimeout(()=>void A(),0);return()=>{window.clearTimeout(e),k.current+=1}},[A]);let j=async(e,n)=>{if(t||l)return!1;u(!0),p(null);try{let t=Ct(await e(),r(`work.git.actionFailed`,{defaultValue:`Git action failed.`}));return a(t),g([]),T(null),D.success(n),!0}catch(e){let t=wt(e,r(`work.git.actionFailed`,{defaultValue:`Git action failed.`}));return p(t),D.error(t),!1}finally{u(!1)}},M=async t=>{O(!0),p(null);try{T(Ct(await de.getGitDiff(e,t),r(`work.git.diffFailed`,{defaultValue:`Could not load this diff.`})))}catch(e){p(wt(e,r(`work.git.diffFailed`,{defaultValue:`Could not load this diff.`})))}finally{O(!1)}};if(o&&!i)return(0,B.jsx)(`div`,{className:`flex h-full items-center justify-center text-ink-muted`,children:(0,B.jsx)(F,{className:`h-5 w-5 animate-spin`})});if(!i)return(0,B.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center`,children:[(0,B.jsx)(m,{className:`mb-3 h-8 w-8 text-error-500`}),(0,B.jsx)(`p`,{className:`max-w-sm text-xs leading-relaxed text-error-600`,children:f||r(`work.git.loadFailed`,{defaultValue:`Could not load Git status.`})}),(0,B.jsxs)(R,{size:`sm`,variant:`secondary`,className:`mt-4`,onClick:()=>void A(),children:[(0,B.jsx)(C,{className:`h-3.5 w-3.5`}),r(`common.retry`,{defaultValue:`Retry`})]})]});if(!i.initialized)return(0,B.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center`,children:[(0,B.jsx)(m,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,B.jsx)(`h3`,{className:`text-sm font-medium text-ink`,children:r(`work.git.notInitialized`,{defaultValue:`Git is not initialized`})}),(0,B.jsx)(`p`,{className:`mt-1 max-w-sm text-xs leading-relaxed text-ink-muted`,children:r(`work.git.initializeDescription`,{defaultValue:`Create a local repository for status, diffs, branches, and commits. No remote credentials are connected.`})}),f&&(0,B.jsx)(`p`,{className:`mt-3 text-xs text-error-600`,children:f}),(0,B.jsxs)(R,{"data-testid":`work-git-init-button`,size:`sm`,className:`mt-4 bg-[#ff7b52] text-[#3d120c] hover:bg-[#ff7b52]/90`,disabled:t||l,onClick:()=>void j(()=>de.initializeGit(e),r(`work.git.initialized`,{defaultValue:`Git repository initialized.`})),children:[l?(0,B.jsx)(F,{className:`me-2 h-3.5 w-3.5 animate-spin`}):(0,B.jsx)(d,{className:`me-2 h-3.5 w-3.5`}),r(`work.git.initialize`,{defaultValue:`Initialize Git`})]}),t&&n&&(0,B.jsx)(`p`,{className:`mt-2 text-[11px] text-ink-subtle`,children:n})]});let ee=i.changes.filter(e=>e.staged).length,te=i.changes.length>0;return(0,B.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`work-git-panel`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-line px-3 py-2`,children:[(0,B.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 rounded-lg bg-surface-subtle px-2 py-1 font-mono text-[11px] text-ink`,children:[(0,B.jsx)(m,{className:`h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`truncate`,children:i.detached?r(`work.git.detached`,{defaultValue:`detached HEAD`}):i.branch||`main`})]}),(i.ahead>0||i.behind>0)&&(0,B.jsxs)(`span`,{className:`text-[10px] text-ink-muted`,children:[`↑`,i.ahead,` ↓`,i.behind]}),(0,B.jsxs)(`select`,{"data-testid":`work-git-branch-select`,"aria-label":r(`work.git.switchBranch`,{defaultValue:`Switch local branch`}),value:i.branch||``,disabled:t||l||te,onChange:t=>{let n=t.target.value;!n||n===i.branch||j(()=>de.switchGitBranch(e,n),r(`work.git.branchSwitched`,{name:n,defaultValue:`Switched to {{name}}.`}))},className:`h-7 max-w-44 rounded-lg border border-line bg-surface px-2 text-[11px] text-ink outline-none disabled:opacity-50`,children:[i.detached&&(0,B.jsx)(`option`,{value:``,disabled:!0,children:r(`work.git.detached`,{defaultValue:`detached HEAD`})}),i.branches.map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))]}),(0,B.jsxs)(`div`,{className:`flex min-w-44 flex-1 items-center gap-1`,children:[(0,B.jsx)(`input`,{"data-testid":`work-git-branch-input`,value:x,maxLength:200,onChange:e=>S(e.target.value),placeholder:r(`work.git.newBranch`,{defaultValue:`New local branch`}),className:`h-7 min-w-0 flex-1 rounded-lg border border-line bg-surface px-2 font-mono text-[11px] text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,B.jsxs)(R,{"data-testid":`work-git-create-branch-button`,size:`sm`,variant:`ghost`,className:`h-7 px-2`,disabled:t||l||!i.head||!x.trim(),onClick:()=>{let t=x.trim();j(()=>de.createGitBranch(e,t),r(`work.git.branchCreated`,{name:t,defaultValue:`Created {{name}}.`})).then(e=>{e&&S(``)})},children:[(0,B.jsx)(d,{className:`h-3.5 w-3.5`}),(0,B.jsx)(`span`,{className:`hidden sm:inline`,children:r(`work.git.createBranch`,{defaultValue:`Create`})})]})]}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>void A(),disabled:o||l,"aria-label":r(`common.refresh`,{defaultValue:`Refresh`}),className:`inline-flex h-7 w-7 items-center justify-center rounded-lg text-ink-muted hover:bg-surface-subtle hover:text-ink disabled:opacity-50`,children:(0,B.jsx)(C,{className:I(`h-3.5 w-3.5`,o&&`animate-spin`)})})]}),f&&(0,B.jsx)(`div`,{className:`border-b border-error-200 bg-error-50 px-3 py-2 text-xs text-error-700 dark:border-error-900/60 dark:bg-error-900/30 dark:text-error-300`,children:f}),t&&n&&(0,B.jsx)(`div`,{className:`border-b border-line px-3 py-1.5 text-[11px] text-ink-subtle`,children:n}),(0,B.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 lg:grid-cols-[minmax(14rem,0.8fr)_minmax(18rem,1.2fr)_minmax(13rem,0.8fr)]`,children:[(0,B.jsxs)(`section`,{className:`flex min-h-0 flex-col border-b border-line lg:border-b-0 lg:border-e`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2`,children:[(0,B.jsxs)(`h3`,{className:`text-xs font-medium text-ink`,children:[r(`work.git.changes`,{defaultValue:`Changes`}),` `,(0,B.jsx)(`span`,{className:`text-ink-subtle`,children:i.changes.length})]}),(0,B.jsxs)(R,{"data-testid":`work-git-stage-button`,size:`sm`,variant:`ghost`,className:`h-7 px-2 text-[11px]`,disabled:t||l||h.length===0&&i.changes.length===0,onClick:()=>{let t=h.length>0?h:i.changes.map(e=>e.path);j(()=>de.stageGitPaths(e,t),r(`work.git.staged`,{defaultValue:`Changes staged.`}))},children:[(0,B.jsx)(re,{className:`h-3.5 w-3.5`}),h.length>0?r(`work.git.stageSelected`,{count:h.length,defaultValue:`Stage {{count}}`}):r(`work.git.stageAll`,{defaultValue:`Stage all`})]})]}),(0,B.jsx)(`div`,{className:`min-h-32 flex-1 overflow-y-auto px-2 pb-2`,children:i.changes.length===0?(0,B.jsx)(`p`,{className:`px-2 py-8 text-center text-xs text-ink-muted`,children:r(`work.git.clean`,{defaultValue:`Working tree is clean.`})}):i.changes.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center gap-1 rounded-lg hover:bg-surface-subtle`,children:[(0,B.jsx)(`input`,{type:`checkbox`,"aria-label":r(`work.git.selectPath`,{path:e.path,defaultValue:`Select {{path}}`}),checked:h.includes(e.path),onChange:t=>g(n=>t.target.checked?[...n,e.path]:n.filter(t=>t!==e.path)),className:`ms-2 h-3.5 w-3.5 accent-[#ff7b52]`}),(0,B.jsxs)(`button`,{type:`button`,"data-testid":`work-git-change`,onClick:()=>void M(e.path),className:`flex min-w-0 flex-1 items-center gap-2 px-1.5 py-2 text-start`,children:[(0,B.jsxs)(`span`,{dir:`ltr`,className:I(`w-5 shrink-0 font-mono text-[10px] font-semibold`,e.staged?`text-emerald-600`:`text-amber-600`),children:[e.indexStatus,e.workingTreeStatus]}),(0,B.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink`,title:e.path,children:e.path})]})]},`${e.path}:${e.originalPath||``}`))}),(0,B.jsxs)(`div`,{className:`border-t border-line p-2`,children:[(0,B.jsx)(`textarea`,{"data-testid":`work-git-commit-input`,value:y,maxLength:4e3,rows:2,onChange:e=>b(e.target.value),placeholder:r(`work.git.commitMessage`,{defaultValue:`Commit message`}),className:`w-full resize-none rounded-lg border border-line bg-surface px-2.5 py-2 text-xs text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,B.jsxs)(R,{"data-testid":`work-git-commit-button`,size:`sm`,className:`mt-1.5 w-full bg-[#ff7b52] text-[#3d120c] hover:bg-[#ff7b52]/90`,disabled:t||l||ee===0||!y.trim(),onClick:()=>{let t=y.trim();j(()=>de.commitGit(e,t),r(`work.git.committed`,{defaultValue:`Commit created.`})).then(e=>{e&&b(``)})},children:[l&&(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),r(`work.git.commit`,{defaultValue:`Commit staged changes`})]})]})]}),(0,B.jsxs)(`section`,{className:`flex min-h-48 min-w-0 flex-col border-b border-line lg:border-b-0 lg:border-e`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 text-xs font-medium text-ink`,children:[(0,B.jsx)(_,{className:`h-3.5 w-3.5`}),w?.path||r(`work.git.diff`,{defaultValue:`Diff preview`})]}),E?(0,B.jsx)(F,{className:`m-auto h-5 w-5 animate-spin text-ink-muted`}):w?w.patch?(0,B.jsxs)(`pre`,{"data-testid":`work-git-diff`,dir:`ltr`,className:`min-h-0 flex-1 overflow-auto whitespace-pre p-3 text-left font-mono text-[11px] leading-relaxed text-ink`,children:[w.patch,w.truncated&&`
|
|
5
|
+
… diff truncated …`]}):(0,B.jsx)(`p`,{className:`m-auto px-5 text-center text-xs text-ink-muted`,children:r(`work.git.noDiff`,{defaultValue:`No textual diff is available yet. Untracked files appear after staging.`})}):(0,B.jsx)(`p`,{className:`m-auto px-5 text-center text-xs text-ink-muted`,children:r(`work.git.selectChange`,{defaultValue:`Select a changed file to inspect its diff.`})})]}),(0,B.jsxs)(`section`,{className:`min-h-36 overflow-y-auto p-3`,children:[(0,B.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-xs font-medium text-ink`,children:[(0,B.jsx)(v,{className:`h-3.5 w-3.5`}),r(`work.git.history`,{defaultValue:`Local history`})]}),i.commits.length===0?(0,B.jsx)(`p`,{className:`py-6 text-center text-xs text-ink-muted`,children:r(`work.git.noCommits`,{defaultValue:`No commits yet.`})}):(0,B.jsx)(`ol`,{className:`space-y-2`,children:i.commits.map(e=>(0,B.jsxs)(`li`,{className:`rounded-lg border border-line bg-surface px-2.5 py-2`,children:[(0,B.jsx)(`p`,{dir:`auto`,className:`text-xs text-ink`,children:e.subject}),(0,B.jsxs)(`p`,{className:`mt-1 flex flex-wrap gap-x-2 text-[10px] text-ink-subtle`,children:[(0,B.jsx)(`span`,{dir:`ltr`,className:`font-mono`,children:e.shortHash}),(0,B.jsx)(`span`,{dir:`auto`,children:e.author}),(0,B.jsx)(`time`,{dateTime:e.authoredAt,children:new Date(e.authoredAt).toLocaleDateString()})]})]},e.hash))}),(0,B.jsx)(`p`,{className:`mt-4 border-t border-line pt-3 text-[10px] leading-relaxed text-ink-subtle`,children:r(`work.git.localOnly`,{defaultValue:`Local Git only. Push, pull, and pull requests require a separate trusted credential broker.`})})]})]})]})}var Et=`/ws/work-terminal`;function Dt(e,t){let n;if(t.protocol===`file:`)n=`ws://localhost:3001`;else if(t.apiBaseUrl)n=t.apiBaseUrl.replace(/\/api$/,``).replace(/^http:/,`ws:`).replace(/^https:/,`wss:`);else{let e=t.protocol===`https:`?`wss:`:`ws:`;n=t.production?`${e}//${t.host}`:`${e}//${t.hostname}:3001`}let r=new URL(`${n}${Et}`);return r.searchParams.set(`taskId`,e),t.token&&r.searchParams.set(`token`,t.token),r.toString()}function Ot(e){return Dt(e,{protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,production:!0,token:localStorage.getItem(`auth-token`)})}var kt={background:`#ffffff`,foreground:`#1f2328`,cursor:`#1f2328`,selectionBackground:`rgba(255, 123, 82, 0.28)`},At={background:`#0f1115`,foreground:`#e6e6e6`,cursor:`#ff7b52`,selectionBackground:`rgba(255, 123, 82, 0.32)`};function jt({taskId:e,active:t,disabledReason:n}){let{t:r}=c(),i=ye(e=>e.theme.mode===`dark`),o=(0,z.useRef)(null),s=(0,z.useRef)(null),l=(0,z.useRef)(null),u=(0,z.useRef)(null),[d,f]=(0,z.useState)(`idle`),[m,h]=(0,z.useState)(null),[g,_]=(0,z.useState)(0),v=(0,z.useCallback)(()=>{let e=u.current,t=l.current,n=s.current;if(!(!e||!t||!n||n.readyState!==WebSocket.OPEN)){try{e.fit()}catch{return}n.send(JSON.stringify({type:`resize`,cols:t.cols,rows:t.rows}))}},[]);(0,z.useEffect)(()=>{if(!t||n)return;let r=!1,c,d;return(async()=>{f(`connecting`),h(null);let[{Terminal:t},{FitAddon:n}]=await Promise.all([a(()=>import(`./xterm-Da5ppSVt.js`),[]),a(()=>import(`./addon-fit-DIOBYJe3.js`),[])]);if(await a(()=>Promise.resolve({}),__vite__mapDeps([31])),r||!o.current)return;c=new t({allowProposedApi:!0,convertEol:!1,cursorBlink:!0,fontFamily:`ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,fontSize:12,scrollback:5e3,theme:i?At:kt});let p=new n;c.loadAddon(p),c.open(o.current),l.current=c,u.current=p;try{p.fit()}catch{}d=new WebSocket(Ot(e)),d.binaryType=`arraybuffer`,s.current=d;let m=new TextDecoder;d.onmessage=e=>{if(typeof e.data!=`string`){c?.write(m.decode(new Uint8Array(e.data)));return}try{let t=JSON.parse(e.data);if(t.type===`ready`){f(`connected`),v(),c?.focus();return}if(t.type===`error`){f(`error`),h(t.message||null);return}t.type===`exit`&&f(`closed`)}catch{}},d.onclose=()=>{r||f(e=>e===`error`||e===`closed`?e:`closed`)},d.onerror=()=>{r||f(`error`)},c.onData(e=>{d?.readyState===WebSocket.OPEN&&d.send(JSON.stringify({type:`input`,data:e}))})})(),()=>{r=!0,d?.close(),s.current=null,c?.dispose(),l.current=null,u.current=null}},[t,n,g,i,v,e]),(0,z.useEffect)(()=>{let e=o.current;if(!e||!t)return;let n=new ResizeObserver(()=>v());return n.observe(e),()=>n.disconnect()},[t,v]);let y=()=>{s.current?.close(),_(e=>e+1)},b=n??(d===`error`?m??r(`work.terminal.failed`,{defaultValue:`The terminal session could not start.`}):d===`closed`?r(`work.terminal.closed`,{defaultValue:`Terminal session ended.`}):null);return(0,B.jsxs)(`div`,{"data-testid":`work-terminal-panel`,"data-status":n?`unavailable`:d,className:`relative flex min-h-0 flex-1 flex-col bg-surface`,children:[!n&&(0,B.jsx)(`div`,{ref:o,"data-testid":`work-terminal-surface`,dir:`ltr`,className:I(`min-h-0 flex-1 overflow-hidden p-2 text-left`,d!==`connected`&&`opacity-60`)}),d===`connecting`&&!n&&(0,B.jsxs)(`div`,{className:`pointer-events-none absolute inset-0 flex items-center justify-center gap-2 text-xs text-ink-muted`,children:[(0,B.jsx)(F,{className:`h-4 w-4 animate-spin`}),r(`work.terminal.connecting`,{defaultValue:`Opening a shell in the sandbox…`})]}),b&&(0,B.jsxs)(`div`,{role:d===`error`?`alert`:void 0,className:`flex flex-col items-center gap-3 border-t border-line bg-surface-raised px-6 py-4 text-center`,children:[(0,B.jsx)(p,{className:`h-6 w-6 text-ink-subtle`}),(0,B.jsx)(`p`,{dir:`auto`,"data-testid":`work-terminal-status`,className:`max-w-md text-xs leading-relaxed text-ink-muted`,children:b}),!n&&(0,B.jsx)(R,{size:`sm`,"data-testid":`work-terminal-reconnect-button`,className:`h-8 rounded-lg bg-[#ff7b52] px-3 text-[#3d120c] hover:bg-[#ff7b52]/90`,onClick:y,children:r(`work.terminal.reconnect`,{defaultValue:`Reconnect`})})]})]})}var Mt=e=>{if(!e)return null;if(/^\/api\/work\/previews\/[A-Za-z0-9-]{1,100}\/\d{1,5}\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}\//.test(e))try{let t=new URL(fe,window.location.origin).origin;return new URL(e,`${t}/`).toString()}catch{return null}return null},Nt=e=>{let t=e.split(`/`).filter(Boolean);return t.pop(),t.join(`/`)},Pt=(e,t)=>{let n=e.metadata?.name??e.metadata?.toolName??e.metadata?.tool??e.metadata?.command;return typeof n==`string`&&n?n:t};function Ft({task:e,liveRun:t,files:n,selectedFile:r,loadingFiles:i,actionLoading:a,onLoadFiles:o,onLoadFile:s,onClearSelectedFile:u,onSaveFile:d,onStartPreview:_,onStopPreview:v,onDirtyChange:b,terminal:E}){let{t:k,i18n:A}=c(),j=l(A.language),[M,te]=(0,z.useState)(`files`),[N,ne]=(0,z.useState)(``),[P,re]=(0,z.useState)(``),[ie,ae]=(0,z.useState)(),[se,le]=(0,z.useState)(``),[ue,de]=(0,z.useState)(!1),[fe,L]=(0,z.useState)(!1),pe=(0,z.useRef)(new Map),[he,ge]=(0,z.useState)(()=>new Map),ye=Mt(e.previewUrl),be=t?.runId,xe=t?.error,Se=t?.tools,Ce=(0,z.useMemo)(()=>{let t=new Set(Se?.map(e=>e.id)||[]);return(e.messages||[]).filter(e=>{if(e.kind===`reasoning`||e.role!==`tool`&&e.kind===`message`)return!1;if(!be||e.runId!==be)return!0;if(e.kind===`error`&&xe)return!1;let n=e.metadata?.toolCallId;return typeof n!=`string`||!t.has(n)})},[xe,be,Se,e.messages]),we=Ce.length+(Se?.length||0),Te=!!r&&P!==(r?.content??``),V=e.status===`preparing`||e.status===`running`,Ee=(0,z.useRef)(V),H=(0,z.useRef)(0),U=(0,z.useRef)(P),De=(0,z.useRef)(ie),Oe=(0,z.useRef)(r),ke=(0,z.useRef)(e.id),Ae=(0,z.useRef)(o),je=(0,z.useRef)(s),Me=(0,z.useRef)(b),W=(0,z.useRef)(!0),G=r?he.get(r.path):void 0,Ne=(0,z.useMemo)(()=>r&&G!==void 0&&G!==r.content?vt(G,r.content):null,[G,r]),K=(0,z.useMemo)(()=>Ne?yt(Ne):null,[Ne]),Fe=!!(K&&(K.added>0||K.removed>0)),Ie=r?st(r.path):!1,Le=!r||ct(P),q=Ie&&Le;(0,z.useEffect)(()=>{U.current=P,De.current=ie,Oe.current=r,ke.current=e.id,Me.current=b},[ie,P,b,r,e.id]),(0,z.useEffect)(()=>{Ae.current=o,je.current=s},[s,o]),(0,z.useEffect)(()=>(W.current=!0,()=>{W.current=!1,H.current+=1,Me.current(!1)}),[]),(0,z.useEffect)(()=>{if(!Ee.current&&V&&ge(new Map(pe.current)),Ee.current&&!V&&(Ae.current(N),r&&!Te)){let e=++H.current,t=r.path,n=U.current,i=De.current;je.current(t).then(r=>{if(!W.current||e!==H.current||r.path!==t||U.current!==n||De.current!==i)return;pe.current.set(r.path,r.content);let a=he.get(r.path);a!==void 0&&a!==r.content&&L(!0),U.current=r.content,De.current=r.updatedAt??r.modifiedAt,re(r.content),ae(r.updatedAt??r.modifiedAt)}).catch(()=>void 0)}Ee.current=V},[N,Te,r,V,he]);let Re=()=>!Te||window.confirm(k(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),ze=()=>{r&&me(e.id,r.path)},J=async e=>{Re()&&(H.current+=1,ze(),u(),b(!1),L(!1),ne(e),await o(e).catch(()=>void 0))},Be=async t=>{if(!Re())return;let n=++H.current;ze();let r=await s(t).catch(()=>void 0);if(!W.current||!r||n!==H.current)return;pe.current.set(r.path,r.content);let i=he.get(r.path);L(i!==void 0&&i!==r.content);let a=_e(e.id,r.path),o=a?.content??r.content,c=a?.baseUpdatedAt??r.updatedAt??r.modifiedAt;U.current=o,De.current=c,re(o),ae(c),b(a!==null&&a.content!==r.content)},Ve=()=>{Re()&&(H.current+=1,ze(),u(),b(!1),L(!1))},He=t=>{r&&(U.current=t,re(t),t===r.content?me(e.id,r.path):ve(e.id,r.path,{content:t,baseUpdatedAt:ie??r.updatedAt??r.modifiedAt}),b(t!==r.content))},Ue=async()=>{if(!r)return;let t=e.id,n=r.path,i=P,a=H.current,o=await d(n,i,ie).catch(()=>!1);if(!W.current||o===!1||a!==H.current||ke.current!==t||Oe.current?.path!==n)return;let s=o.updatedAt??o.modifiedAt;pe.current.set(n,typeof o.content==`string`?o.content:i),De.current=s,ae(s);let c=U.current;if(c===i){me(t,n),b(!1);return}ve(t,n,{content:c,baseUpdatedAt:s}),b(!0)},We=async()=>{if(!r||V||ue||!q)return;de(!0);let e=H.current,t=r.path,n=U.current;try{let r=await ut(t,n);if(!W.current||e!==H.current||Oe.current?.path!==t||U.current!==n)return;He(r),D.success(k(`work.files.formatted`,{defaultValue:`Code formatted.`}))}catch(r){if(!W.current||e!==H.current||Oe.current?.path!==t||U.current!==n)return;D.error(r instanceof Error?r.message:k(`work.files.formatFailed`,{defaultValue:`Could not format this file.`}))}finally{W.current&&de(!1)}},Y=[{id:`files`,label:k(`work.workspace.files`,{defaultValue:`Files`}),icon:x,testId:`work-files-tab`},{id:`activity`,label:k(`work.workspace.activity`,{defaultValue:`Activity`}),icon:w,testId:`work-activity-tab`},{id:`git`,label:k(`work.workspace.git`,{defaultValue:`Git`}),icon:m,testId:`work-git-tab`},{id:`terminal`,label:k(`work.workspace.terminal`,{defaultValue:`Terminal`}),icon:p,testId:`work-terminal-tab`},{id:`preview`,label:k(`work.workspace.preview`,{defaultValue:`Preview`}),icon:S,testId:`work-preview-tab`}],Ge=(e,t)=>{let n=null;if(e.key===`ArrowRight`&&(n=(t+(j?-1:1)+Y.length)%Y.length),e.key===`ArrowLeft`&&(n=(t+(j?1:-1)+Y.length)%Y.length),e.key===`Home`&&(n=0),e.key===`End`&&(n=Y.length-1),n===null)return;e.preventDefault();let r=Y[n];te(r.id),e.currentTarget.parentElement?.querySelector(`#work-workspace-tab-${r.id}`)?.focus()};return(0,B.jsxs)(`section`,{className:`flex h-full min-h-0 flex-col bg-transparent`,children:[(0,B.jsxs)(`div`,{"data-testid":`work-workspace-toolbar`,className:`flex h-12 shrink-0 items-center gap-2 border-b border-line bg-surface-raised/75 px-2 backdrop-blur-xl`,children:[(0,B.jsx)(`div`,{role:`tablist`,"aria-orientation":`horizontal`,"aria-label":k(`work.workspace.label`,{defaultValue:`Workspace views`}),className:`flex min-w-0 items-center overflow-x-auto rounded-xl border border-line bg-surface-subtle p-0.5 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:Y.map((e,t)=>{let n=e.icon;return(0,B.jsxs)(`button`,{type:`button`,role:`tab`,id:`work-workspace-tab-${e.id}`,"aria-selected":M===e.id,"aria-controls":M===e.id?`work-workspace-panel-${e.id}`:void 0,"aria-label":e.label,tabIndex:M===e.id?0:-1,title:e.label,"data-testid":e.testId,onClick:()=>te(e.id),onKeyDown:e=>Ge(e,t),className:I(`flex h-7 items-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow]`,M===e.id?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:text-ink`),children:[(0,B.jsx)(n,{className:`h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`hidden xs:inline`,children:e.label}),e.id===`activity`&&we>0&&(0,B.jsx)(`span`,{className:`rounded-full bg-surface px-1.5 text-[10px] text-ink-muted`,children:we})]},e.id)})}),M===`files`&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5`,children:[r&&(0,B.jsx)(`button`,{type:`button`,className:`inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-ink-muted hover:bg-surface-subtle hover:text-ink sm:hidden`,onClick:Ve,"aria-label":k(`work.files.back`,{defaultValue:`Back to files`}),children:(0,B.jsx)(oe,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,B.jsxs)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,title:r?.path??`/workspace${N?`/${N}`:``}`,children:[r?.path??`/workspace${N?`/${N}`:``}`,Te&&` •`]})]}),(0,B.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,B.jsx)(`button`,{type:`button`,disabled:!N,onClick:()=>void J(Nt(N)),className:I(`hidden h-8 w-8 items-center justify-center rounded-lg border border-transparent text-ink-muted hover:border-line hover:bg-surface-subtle hover:text-ink disabled:opacity-30 sm:inline-flex`,!r&&`inline-flex`),"aria-label":k(`work.files.up`,{defaultValue:`Parent folder`}),title:k(`work.files.up`,{defaultValue:`Parent folder`}),children:(0,B.jsx)(oe,{className:`h-3.5 w-3.5 rtl:rotate-180`})}),(0,B.jsx)(`button`,{type:`button`,"data-testid":`work-refresh-files-button`,onClick:()=>void o(N).catch(()=>void 0),className:`inline-flex h-8 w-8 items-center justify-center rounded-lg border border-transparent text-ink-muted hover:border-line hover:bg-surface-subtle hover:text-ink`,"aria-label":k(`common.refresh`,{defaultValue:`Refresh`}),title:k(`common.refresh`,{defaultValue:`Refresh`}),children:(0,B.jsx)(C,{className:I(`h-3.5 w-3.5`,i&&`animate-spin`)})}),r&&Fe&&K&&(0,B.jsxs)(`button`,{type:`button`,"data-testid":`work-diff-toggle-button`,"aria-pressed":fe,onClick:()=>L(e=>!e),title:k(`work.files.changesSince`,{defaultValue:`What changed since the last turn`}),className:I(`inline-flex h-8 items-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors`,fe?`border-transparent bg-ink text-ink-inverse`:`border-line text-ink-muted hover:bg-surface-subtle hover:text-ink`),children:[(0,B.jsx)(T,{className:`h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`hidden sm:inline`,children:k(`work.files.changes`,{defaultValue:`Changes`})}),(0,B.jsxs)(`span`,{dir:`ltr`,className:`tabular-nums`,children:[(0,B.jsxs)(`span`,{className:fe?void 0:`text-[rgb(46,164,79)]`,children:[`+`,K.added]}),` `,(0,B.jsxs)(`span`,{className:fe?void 0:`text-[rgb(255,61,129)]`,children:[`−`,K.removed]})]})]}),r&&!fe&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(R,{"data-testid":`work-format-file-button`,size:`sm`,variant:`ghost`,className:`h-8 w-8 rounded-lg px-0 sm:w-auto sm:px-2.5`,disabled:V||ue||!q,onClick:()=>void We(),"aria-busy":ue||void 0,title:q?k(`work.files.formatShortcut`,{defaultValue:`Format (Shift+Alt+F)`}):Ie?k(`work.files.formatTooLarge`,{defaultValue:`Formatting is limited to files under 100,000 characters and 4,000 lines.`}):k(`work.files.formatUnsupported`,{defaultValue:`Formatting is not available for this file type.`}),"aria-label":k(`work.files.format`,{defaultValue:`Format file`}),children:[ue?(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,B.jsx)(ee,{className:`h-3.5 w-3.5`}),(0,B.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`work.files.format`,{defaultValue:`Format`})})]}),(0,B.jsxs)(R,{"data-testid":`work-save-file-button`,size:`sm`,className:`h-8 w-8 rounded-lg bg-[#ff7b52] px-0 text-[#3d120c] hover:bg-[#ff7b52]/90 sm:w-auto sm:px-2.5`,disabled:!Te||V||ue||a,onClick:()=>void Ue(),"aria-busy":a||void 0,title:k(`work.files.saveShortcut`,{defaultValue:`Save (⌘/Ctrl+S)`}),"aria-label":k(`common.save`),children:[a?(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,B.jsx)(g,{className:`h-3.5 w-3.5`}),(0,B.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`common.save`)})]})]})]})]}),(M===`activity`||M===`git`)&&(0,B.jsx)(`div`,{className:`min-w-0 flex-1`}),M===`terminal`&&(0,B.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,B.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-ink-muted`,children:`/workspace`}),V&&(0,B.jsx)(`span`,{className:`shrink-0 text-[10px] text-ink-subtle`,children:k(`work.terminal.taskRunning`,{defaultValue:`Model turn in progress`})})]}),M===`preview`&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`input`,{dir:`auto`,value:se,onChange:e=>le(e.target.value),placeholder:k(`work.preview.command`,{defaultValue:`Optional start command`}),"aria-label":k(`work.preview.command`,{defaultValue:`Optional start command`}),className:`h-8 min-w-0 flex-1 rounded-lg border border-line bg-surface px-2.5 font-mono text-[11px] text-ink outline-none placeholder:text-ink-subtle focus:border-primary-500`}),(0,B.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[e.previewStatus===`running`||e.previewStatus===`starting`?(0,B.jsxs)(R,{"data-testid":`work-stop-preview-button`,variant:`danger`,size:`sm`,className:`h-8 w-8 rounded-lg px-0 sm:w-auto sm:px-2.5`,disabled:a,onClick:()=>void v(),"aria-busy":a||void 0,"aria-label":k(`work.preview.stop`,{defaultValue:`Stop preview`}),children:[a?(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,B.jsx)(ce,{className:`h-3.5 w-3.5 fill-current`}),(0,B.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`work.preview.stop`,{defaultValue:`Stop preview`})})]}):(0,B.jsxs)(R,{"data-testid":`work-start-preview-button`,size:`sm`,className:`h-8 w-8 rounded-lg bg-[#ff7b52] px-0 text-[#3d120c] hover:bg-[#ff7b52]/90 sm:w-auto sm:px-2.5`,disabled:a,onClick:()=>void _(se.trim()||void 0),"aria-busy":a||void 0,"aria-label":k(`work.preview.start`,{defaultValue:`Start preview`}),children:[a?(0,B.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}):(0,B.jsx)(O,{className:`h-3.5 w-3.5 fill-current`}),(0,B.jsx)(`span`,{className:`hidden 2xl:inline`,children:k(`work.preview.start`,{defaultValue:`Start preview`})})]}),ye&&(0,B.jsx)(`a`,{href:ye,target:`_blank`,rel:`noopener noreferrer`,"aria-label":k(`work.preview.open`,{defaultValue:`Open`}),title:k(`work.preview.open`,{defaultValue:`Open`}),className:`inline-flex h-8 w-8 items-center justify-center rounded-lg border border-line text-ink-muted hover:bg-surface-subtle hover:text-ink`,children:(0,B.jsx)(f,{className:`h-3.5 w-3.5`})})]})]})]}),M===`files`&&(0,B.jsxs)(`div`,{id:`work-workspace-panel-files`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-files`,className:`flex min-h-0 flex-1`,children:[(0,B.jsx)(`div`,{className:I(`flex min-h-0 w-full flex-col border-e border-line bg-surface-raised`,r?`hidden sm:flex sm:w-52 xl:w-60`:`flex`),children:(0,B.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-1.5`,children:i&&n.length===0?(0,B.jsx)(`div`,{className:`flex justify-center py-8 text-ink-muted`,children:(0,B.jsx)(F,{className:`h-5 w-5 animate-spin`})}):n.length===0?(0,B.jsx)(`p`,{className:`px-3 py-8 text-center text-xs text-ink-muted`,children:k(`work.files.empty`,{defaultValue:`No files in this folder yet.`})}):[...n].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1).map(e=>(0,B.jsxs)(`button`,{type:`button`,"data-testid":`work-file-item`,"data-path":e.path,onClick:()=>{e.type===`directory`?J(e.path):Be(e.path)},className:I(`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-start text-xs hover:bg-surface-subtle`,r?.path===e.path?`bg-surface-subtle text-ink`:`text-ink-muted`),children:[e.type===`directory`?(0,B.jsx)(h,{className:`h-3.5 w-3.5 shrink-0 text-amber-500`}):(0,B.jsx)(y,{className:`h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{dir:`auto`,className:`truncate`,children:e.name})]},e.path))})}),(0,B.jsx)(`div`,{className:I(`min-h-0 min-w-0 flex-1 flex-col`,r?`flex`:`hidden sm:flex`),children:r&&fe&&Ne?(0,B.jsx)(St,{lines:Ne,ariaLabel:k(`work.files.diffLabel`,{path:r.path,defaultValue:`Changes since the last turn: {{path}}`})}):r?(0,B.jsx)(ht,{path:r.path,value:P,ariaLabel:k(`work.files.editorLabel`,{path:r.path,defaultValue:`File editor: {{path}}`}),onChange:He,onSaveShortcut:()=>{Te&&!V&&!a&&!ue&&Ue()},onFormatShortcut:()=>void We(),disabled:V||ue}):(0,B.jsxs)(`div`,{className:`m-auto px-6 text-center text-xs text-ink-muted`,children:[(0,B.jsx)(y,{className:`mx-auto mb-3 h-7 w-7 text-ink-subtle`}),k(`work.files.select`,{defaultValue:`Select a file to inspect and edit it.`})]})})]}),M===`activity`&&(0,B.jsxs)(`div`,{id:`work-workspace-panel-activity`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-activity`,className:`min-h-0 flex-1 overflow-y-auto p-3`,children:[t&&(0,B.jsx)(`div`,{className:`mb-3`,children:(0,B.jsx)(Pe,{run:t,variant:`activity`})}),Ce.length===0&&!t?(0,B.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-6 text-center text-xs text-ink-muted`,children:[(0,B.jsx)(p,{className:`mb-3 h-7 w-7 text-ink-subtle`}),k(`work.activity.empty`,{defaultValue:`Commands, file operations, and tool results will appear here.`})]}):(0,B.jsx)(`div`,{className:`space-y-2`,children:Ce.map(e=>(0,B.jsxs)(`div`,{className:`rounded-xl border border-line bg-surface p-3`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,B.jsx)(`span`,{dir:`auto`,className:`truncate font-mono text-xs font-medium text-ink`,children:Pt(e,k(`work.activity.toolActivity`,{defaultValue:`Tool activity`}))}),(0,B.jsx)(`span`,{className:`shrink-0 text-[10px] uppercase tracking-wide text-ink-subtle rtl:tracking-normal`,children:{message:k(`work.activity.kinds.message`,{defaultValue:`Message`}),reasoning:k(`libreClaw.metrics.reasoning`,{defaultValue:`Reasoning`}),tool_call:k(`work.activity.kinds.toolCall`,{defaultValue:`Tool call`}),tool_result:k(`work.activity.kinds.toolResult`,{defaultValue:`Tool result`}),error:k(`work.activity.kinds.error`,{defaultValue:`Error`})}[e.kind]})]}),e.content&&(0,B.jsx)(`pre`,{dir:`ltr`,className:`mt-2 max-h-56 overflow-auto whitespace-pre-wrap break-words text-left font-mono text-[11px] leading-relaxed text-ink-muted`,children:e.content})]},e.id))})]}),M===`git`&&(0,B.jsx)(`div`,{id:`work-workspace-panel-git`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-git`,className:`min-h-0 flex-1`,children:(0,B.jsx)(Tt,{taskId:e.id,mutationsDisabled:V||e.previewStatus===`starting`||e.previewStatus===`running`,disabledReason:V?k(`work.git.blockedByRun`,{defaultValue:`Git write actions unlock when the model turn finishes.`}):e.previewStatus===`starting`||e.previewStatus===`running`?k(`work.git.blockedByPreview`,{defaultValue:`Stop the preview before changing Git state.`}):void 0})}),M===`terminal`&&(0,B.jsx)(`div`,{id:`work-workspace-panel-terminal`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-terminal`,className:`flex min-h-0 flex-1 flex-col`,children:(0,B.jsx)(jt,{taskId:e.id,active:M===`terminal`,disabledReason:E&&!E.available?E.reason??k(`work.terminal.unavailable`,{defaultValue:`The interactive terminal is not available in this deployment.`}):V?k(`work.terminal.blockedByRun`,{defaultValue:`The model is using this container. The terminal opens when the turn finishes.`}):void 0})}),M===`preview`&&(0,B.jsx)(`div`,{id:`work-workspace-panel-preview`,role:`tabpanel`,"aria-labelledby":`work-workspace-tab-preview`,className:`flex min-h-0 flex-1 flex-col`,children:e.previewStatus===`starting`?(0,B.jsxs)(`div`,{className:`m-auto flex items-center gap-2 text-xs text-ink-muted`,children:[(0,B.jsx)(F,{className:`h-4 w-4 animate-spin`}),k(`work.preview.starting`,{defaultValue:`Starting preview…`})]}):ye&&e.previewStatus===`running`?(0,B.jsx)(`iframe`,{"data-testid":`work-preview-frame`,title:k(`work.preview.frameTitle`,{defaultValue:`Workspace preview`}),src:ye,sandbox:`allow-scripts allow-forms allow-modals allow-downloads`,referrerPolicy:`no-referrer`,className:`min-h-0 flex-1 border-0 bg-white`}):(0,B.jsxs)(`div`,{className:`m-auto max-w-sm px-6 text-center text-xs leading-relaxed text-ink-muted`,children:[(0,B.jsx)(S,{className:`mx-auto mb-3 h-8 w-8 text-ink-subtle`}),e.previewStatus===`failed`?k(`work.preview.failed`,{defaultValue:`The preview could not start. Check Activity, then try another command.`}):k(`work.preview.empty`,{defaultValue:`Start the app inside this workspace to inspect it here.`})]})})]})}var It=e=>{let t=e.trim().toLowerCase();return!!t&&!t.includes(`embed`)},Lt=(e,t)=>e instanceof Error&&e.message?e.message:t,Rt=(e,t)=>new Promise(n=>{if(t.aborted){n();return}let r,i=()=>{r!==void 0&&window.clearTimeout(r),t.removeEventListener(`abort`,i),n()};r=window.setTimeout(i,e),t.addEventListener(`abort`,i,{once:!0})});function zt(){let{t:e}=c(),t=s(),n=r(),{taskId:a}=i(),l=ye(e=>e.preferences),d=ye(e=>e.setPreferences),f=ge(e=>e.user),p=f?.id??null,[m,h]=(0,z.useState)(!1),g=L(e=>e.models),_=L(e=>e.selectedModel),v=L(e=>e.selectedProviderType),y=L(e=>e.selectedProviderId),b=L(e=>e.loadModels),{capabilities:x,tasks:C,selectedTask:w,files:T,selectedFile:E,liveRuns:O,loadingTask:A,loadingOlderMessages:j,loadingFiles:M,actionLoading:ee,error:P,loadCapabilities:re,loadTasks:F,selectTask:oe,loadTask:ce,loadOlderMessages:le,createTask:fe,updateTask:_e,deleteTask:ve,startRun:R,cancelRun:be,beginLiveRun:Se,applyRunEvents:Ce,setLiveRunConnection:V,clearLiveRun:Ee,loadFiles:H,loadFile:De,clearSelectedFile:Oe,saveFile:ke,startPreview:Ae,stopPreview:je,clearError:Me}=he(),W=(0,z.useMemo)(()=>g.filter(e=>!e.isPersona&&!e.isAgent&&It(e.name)&&(!e.isPlugin||!!e.pluginId)),[g]),G=(0,z.useMemo)(()=>W.flatMap(e=>{if(e.isPlugin&&!e.pluginId)return[];let t=e.isPlugin?`plugin`:`ollama`,n=e.isPlugin?e.pluginId:void 0,r=e.name.trim().toLowerCase(),i={model:e.name,providerType:t,providerId:n};return[{...i,key:we(i),label:e.isPlugin&&e.pluginName?`${e.name} · ${e.pluginName}`:e.name,remote:e.isPlugin||r.endsWith(`:cloud`)||r.endsWith(`-cloud`)}]}),[W]),[Ne,Pe]=(0,z.useState)(``),[K,Fe]=(0,z.useState)({locationKey:t.key,value:`conversation`}),Ie=K.locationKey===t.key?K.value:`conversation`,Le=e=>Fe({locationKey:t.key,value:e}),[q,Re]=(0,z.useState)(!1),[J,Be]=(0,z.useState)(``),Ve=x?.hostWorkspaces?.enabled===!0,He=x?.hostWorkspaces?.roots??[],[Ue,We]=(0,z.useState)({taskId:null,open:!1}),Y=Ue.open&&Ue.taskId===w?.id,Ge=(0,z.useRef)(null),Ke=(0,z.useRef)(null),qe=(0,z.useRef)(null),Je=(0,z.useCallback)((e=!1)=>{We(e=>({...e,open:!1})),e&&window.requestAnimationFrame(()=>Ke.current?.focus())},[]);(0,z.useEffect)(()=>{if(!Y)return;let e=window.requestAnimationFrame(()=>{qe.current?.querySelector(`[role="menuitem"]`)?.focus()}),t=e=>{e.target instanceof Node&&!Ge.current?.contains(e.target)&&Je()},n=e=>{e.key===`Escape`&&(e.preventDefault(),Je(!0))};return document.addEventListener(`pointerdown`,t),document.addEventListener(`keydown`,n),()=>{window.cancelAnimationFrame(e),document.removeEventListener(`pointerdown`,t),document.removeEventListener(`keydown`,n)}},[Je,Y]);let Ye=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),Je(!0);return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`&&e.key!==`Home`&&e.key!==`End`)return;let t=[...qe.current?.querySelectorAll(`[role="menuitem"]:not(:disabled)`)??[]];if(t.length===0)return;e.preventDefault();let n=t.indexOf(document.activeElement);t[e.key===`Home`?0:e.key===`End`?t.length-1:e.key===`ArrowUp`?(n-1+t.length)%t.length:(n+1)%t.length]?.focus()};(0,z.useEffect)(()=>{re(),F()},[re,F]),(0,z.useEffect)(()=>{if(!a){oe(null);return}oe(a),ce(a).catch(()=>void 0),H(a,``).catch(()=>void 0)},[a,H,ce,oe]);let Xe=G.find(e=>e.key===Ne)||G.find(e=>e.model===_&&(v===`plugin`?e.providerType===`plugin`&&e.providerId===y:e.providerType===`ollama`))||G[0],Ze=a?C.find(e=>e.id===a):void 0,X=Ze?.status??w?.status,$e=w?.activeRun??Ze?.activeRun??null,Z=$e?.id,et=$e?.status===`queued`||$e?.status===`preparing`||$e?.status===`running`,tt=a&&O[a]?.runId===Z?O[a]:void 0,nt=X===`preparing`||X===`running`?1e3:4e3;(0,z.useEffect)(()=>{let e,t=!1,n=async()=>{await F(!0),t||(e=setTimeout(n,nt))};return e=setTimeout(n,nt),()=>{t=!0,e&&clearTimeout(e)}},[F,nt]);let rt=(0,z.useRef)(null);(0,z.useEffect)(()=>{if(!a||!X){rt.current=null;return}let e=rt.current;rt.current={taskId:a,status:X},e?.taskId===a&&(e.status===`preparing`||e.status===`running`)&&X!==`preparing`&&X!==`running`&&(ce(a,!0).catch(()=>void 0),H(a,``).catch(()=>void 0))},[H,ce,X,a]),(0,z.useEffect)(()=>{if(!a||!Z||!et)return;let e=new AbortController,t=!1,n=0,r=he.getState().liveRuns[a]?.runId===Z&&he.getState().liveRuns[a]?.lastEventId||0,i=!1,o=[],s=null,c=()=>{if(s!==null&&(window.cancelAnimationFrame(s),s=null),o.length===0)return;let e=o;o=[],Ce(e)},l=e=>{if(e.type!==`snapshot`&&(n=0),r=Math.max(r,e.id),o.push(e),e.type===`done`||e.type===`error`&&e.data.terminal!==!1){i=!0,c();return}s===null&&(s=window.requestAnimationFrame(c))};return Se(a,Z,$e?.startedAt||void 0),(async()=>{for(;!t&&!e.signal.aborted&&!i;){V(a,Z,n>=3?`error`:n===0?`connecting`:`reconnecting`);let o=Date.now();try{if(await de.streamRunEvents({taskId:a,runId:Z,after:r,signal:e.signal,onEvent:l}),c(),i||t||e.signal.aborted)break;throw Error(`The live Work connection closed.`)}catch(r){if(c(),t||e.signal.aborted)return;Date.now()-o>=5e3&&(n=0),n+=1,V(a,Z,n>=3?`error`:`reconnecting`,n>=3?Lt(r,`Live updates are reconnecting in the background.`):void 0),await Rt(Math.min(4e3,250*2**Math.min(n,4)),e.signal)}}if(c(),!(!i||e.signal.aborted)){V(a,Z,`closed`);try{await Promise.all([ce(a,!0),H(a,``),F(!0)])}catch{}finally{Ee(a,Z)}}})(),()=>{t=!0,e.abort(),c()}},[Ce,Se,Ee,H,ce,F,$e?.startedAt,et,Z,V,a]),(0,z.useEffect)(()=>{if(!q)return;let e=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[q]);let it=(0,z.useCallback)(()=>!q||window.confirm(e(`work.files.discard`,{defaultValue:`Discard unsaved file changes?`})),[e,q]),at=(0,z.useCallback)(()=>!q||window.confirm(e(`work.files.leaveWithDraft`,{defaultValue:`Leave this file? Your unsaved edit will remain as a browser draft.`})),[e,q]),ot=()=>{w&&E&&me(w.id,E.path)},st=o(({currentLocation:e,nextLocation:t})=>{let n=t.state;return q&&n?.deletedWorkTaskId!==a&&`${e.pathname}${e.search}${e.hash}`!=`${t.pathname}${t.search}${t.hash}`});(0,z.useEffect)(()=>{if(st.state!==`blocked`)return;if(!at()){st.reset();return}let e=st.proceed,t=window.setTimeout(()=>{Re(!1),window.setTimeout(e,0)},0);return()=>window.clearTimeout(t)},[at,st]);let ct=()=>{Me(),Le(`conversation`),n(`/work`)},Q=async t=>{if(w&&!it())return!1;w&&q&&(ot(),Oe(),Re(!1));try{if(w)await R(w.id,{message:t,model:w.model,providerType:w.providerType,providerId:w.providerId||void 0});else{if(!Xe)throw Error(e(`work.composer.noModelSelected`,{defaultValue:`No Work-compatible model is selected.`}));let r=await fe({message:t,model:Xe.model,providerType:Xe.providerType,providerId:Xe.providerId,networkEnabled:!0,...Ve&&J.trim()?{hostPath:J.trim()}:{}});n(`/work/${r.id}`)}return!0}catch(t){return D.error(Lt(t,e(`work.toasts.runFailed`,{defaultValue:`Could not start the Work task.`}))),!1}},lt=async t=>{let n=xt.find(e=>e.key===t);if(n){if(!w){Pe(t);return}try{await _e(w.id,{model:n.model,providerType:n.providerType,providerId:n.providerId})}catch(t){D.error(Lt(t,e(`work.toasts.updateFailed`,{defaultValue:`Could not update this task.`})))}}},ut=async()=>{if(w)try{await be(w.id),D.success(e(`work.toasts.cancelled`,{defaultValue:`Work run stopped.`}))}catch(t){D.error(Lt(t,e(`work.toasts.cancelFailed`,{defaultValue:`Could not stop the Work run.`})))}},dt=async t=>{let r=C.find(e=>e.id===t);if(!window.confirm(e(`work.tasks.deleteConfirm`,{defaultValue:`Delete “{{title}}” and its workspace permanently?`,title:r?.title||e(`work.tasks.untitled`,{defaultValue:`Untitled task`})})))return;let i=a===t&&q;i&&Re(!1);try{await ve(t),pe(t),a===t&&n(`/work`)}catch(t){i&&Re(!0),D.error(Lt(t,e(`work.toasts.deleteFailed`,{defaultValue:`Could not delete this Work task.`})))}},ft=async t=>{if(!w)return!1;let n=t.trim();if(!n||n===w.title)return!!n;try{return await _e(w.id,{title:n}),!0}catch(t){return D.error(Lt(t,e(`work.toasts.renameFailed`,{defaultValue:`Could not rename this task.`}))),!1}},pt=async(e,t,n)=>{try{return await e(),n&&D.success(n),!0}catch(e){return D.error(Lt(e,t)),!1}},mt=async(t,n,r)=>{if(!w)return!1;let i=w.id;try{let a=await ke(i,t,n,r);return he.getState().selectedTaskId===i&&D.success(e(`work.toasts.saved`,{defaultValue:`File saved.`})),a}catch(t){return he.getState().selectedTaskId===i&&D.error(Lt(t,e(`work.toasts.saveFailed`,{defaultValue:`Could not save this file.`}))),!1}},ht=x?.available===!1,gt=x?.pluginAvailable?x.ollamaAvailable?e(`work.runtime.readyHybrid`,{defaultValue:`Docker + models ready`}):e(`work.runtime.readyPlugin`,{defaultValue:`Docker + plugin ready`}):e(`work.runtime.readyOllama`,{defaultValue:`Docker ready`}),_t=e(`work.runtime.ready`,{defaultValue:`Runtime ready`}),vt=w?Te(w):!1,$=w?{model:w.model,providerType:w.providerType,providerId:w.providerId||void 0}:void 0,yt=$?we($):Xe?.key||``,bt=$&&!G.some(e=>e.key===yt)?{...$,key:yt,label:`${$.model} · ${$.providerType===`plugin`?$.providerId||`plugin`:`Ollama`}`,remote:$.providerType===`plugin`||$.model.toLowerCase().endsWith(`:cloud`)||$.model.toLowerCase().endsWith(`-cloud`)}:void 0,xt=bt?[bt,...G]:G,St=xe[w?.status??`idle`],Ct=e(St.labelKey,{defaultValue:St.label}),wt=async()=>{if(l.workRemoteProviderDisclosureDismissed||m)return!1;let t=p;h(!0);try{let n=await ue.updatePreferences({workRemoteProviderDisclosureDismissed:!0});if(!n.success)throw Error(n.error||e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`}));return(ge.getState().user?.id??null)===t&&(d({workRemoteProviderDisclosureDismissed:!0}),!0)}catch{return D.error(e(`work.composer.remoteDismissFailed`,{defaultValue:`Could not save the remote provider preference.`})),!1}finally{h(!1)}};return(0,B.jsx)(`div`,{"data-testid":`work-page`,className:`relative flex h-full min-h-0 overflow-hidden bg-transparent`,children:(0,B.jsxs)(`main`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,B.jsxs)(`header`,{className:`flex h-16 shrink-0 items-center gap-3 border-b border-line bg-surface/55 px-3 backdrop-blur-xl md:px-4`,children:[w?(0,B.jsx)(`input`,{"data-testid":`work-task-title`,dir:`auto`,defaultValue:w.title,onBlur:e=>{let t=e.currentTarget;if(!t.value.trim()){t.value=w.title;return}ft(t.value).then(e=>{e||(t.value=w.title)})},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(e.currentTarget.value=w.title,e.currentTarget.blur())},className:`min-w-0 max-w-sm flex-1 truncate rounded-lg border border-transparent bg-transparent px-2 py-1 text-sm font-semibold text-ink outline-none hover:border-line focus:border-primary-500 focus:bg-surface`,"aria-label":e(`work.tasks.rename`,{defaultValue:`Task title`})},`${w.id}:${w.title}`):(0,B.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,B.jsx)(`h1`,{className:`truncate text-sm font-semibold text-ink`,children:e(`work.title`,{defaultValue:`Work`})})}),w?.hostPath&&(0,B.jsxs)(`span`,{"data-testid":`work-host-path-chip`,title:w.hostPath,className:`hidden h-7 shrink-0 items-center gap-1.5 rounded-full border border-line bg-surface px-2.5 font-mono text-[11px] text-ink-muted sm:inline-flex`,children:[(0,B.jsx)(N,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,B.jsx)(`span`,{className:`max-w-[16rem] truncate`,children:w.hostPath})]}),w&&(0,B.jsxs)(`span`,{"data-testid":`work-compact-status`,className:`inline-flex h-7 shrink-0 items-center gap-1.5 rounded-full border border-line bg-surface px-2 text-[11px] font-medium text-ink-muted xl:hidden`,"aria-label":e(`work.tasks.status`,{status:Ct,defaultValue:`Status: {{status}}`}),title:e(`work.tasks.status`,{status:Ct,defaultValue:`Status: {{status}}`}),children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-compact-status-indicator`,className:I(`h-1.5 w-1.5 rounded-full`,St.animated&&`animate-pulse`,w.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:St.color}}),(0,B.jsx)(`span`,{className:`hidden md:inline`,children:Ct})]}),w&&(0,B.jsxs)(`div`,{className:`ms-auto inline-flex h-9 shrink-0 items-center rounded-xl border border-line bg-surface-subtle p-1 shadow-subtle xl:hidden`,role:`group`,"aria-label":e(`work.mobile.surface`,{defaultValue:`Task surface`}),children:[(0,B.jsxs)(`button`,{type:`button`,onClick:()=>Le(`conversation`),"aria-label":e(`work.mobile.conversation`,{defaultValue:`Conversation`}),"aria-pressed":Ie===`conversation`,className:I(`inline-flex h-7 items-center justify-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow] sm:px-2.5`,Ie===`conversation`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,B.jsx)(ae,{className:`h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.conversation`,{defaultValue:`Conversation`})})]}),(0,B.jsxs)(`button`,{type:`button`,onClick:()=>Le(`workspace`),"aria-label":e(`work.mobile.workspace`,{defaultValue:`Workspace`}),"aria-pressed":Ie===`workspace`,className:I(`inline-flex h-7 items-center justify-center gap-1.5 rounded-lg px-2 text-[11px] font-medium transition-[background-color,color,box-shadow] sm:px-2.5`,Ie===`workspace`?`bg-surface-raised text-ink shadow-subtle`:`text-ink-muted hover:bg-surface-raised/70 hover:text-ink`),children:[(0,B.jsx)(S,{className:`h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`hidden sm:inline`,children:e(`work.mobile.workspace`,{defaultValue:`Workspace`})})]})]}),(0,B.jsxs)(`div`,{className:I(`ms-auto hidden min-w-0 items-center gap-2`,w?`xl:flex`:`sm:flex`),children:[w&&(0,B.jsxs)(`span`,{"data-testid":`work-status`,className:`inline-flex h-7 items-center gap-1.5 rounded-full border border-line bg-surface px-2.5 text-[11px] font-medium text-ink-muted`,children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`work-status-indicator`,className:I(`h-1.5 w-1.5 rounded-full`,St.animated&&`animate-pulse`,w.status===`idle`&&`ring-1 ring-black/20 dark:ring-white/20`),style:{backgroundColor:St.color}}),Ct]}),(0,B.jsxs)(`span`,{"data-testid":`work-runtime-status`,className:I(`inline-flex h-7 items-center gap-1.5 rounded-full border px-2.5 text-[11px] font-medium`,ht?`border-transparent bg-error-500 text-[#0D0D0C]`:`border-transparent bg-success-500 text-[#0D0D0C]`),title:ht?x?.reason||e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):x?.image?`${gt} · ${x.image}`:gt,children:[(0,B.jsx)(ie,{className:`h-3.5 w-3.5`}),ht?e(`work.runtime.unavailable`,{defaultValue:`Runtime unavailable`}):_t]}),w&&(0,B.jsxs)(`span`,{className:`hidden h-7 max-w-44 items-center gap-1.5 truncate rounded-full border border-line bg-surface px-2.5 text-[11px] font-medium text-ink-muted md:inline-flex`,children:[(0,B.jsx)(se,{className:`h-3.5 w-3.5 shrink-0`}),(0,B.jsx)(`span`,{dir:`ltr`,className:`truncate`,children:w.model})]})]}),w&&(0,B.jsxs)(`div`,{ref:Ge,className:`relative shrink-0`,children:[(0,B.jsx)(`button`,{ref:Ke,id:`work-task-actions-trigger`,type:`button`,"data-testid":`work-task-actions-button`,onClick:()=>We(e=>({taskId:w.id,open:e.taskId!==w.id||!e.open})),onKeyDown:e=>{(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),We({taskId:w.id,open:!0}))},className:`inline-flex h-9 w-9 items-center justify-center rounded-lg text-ink-muted transition-colors hover:bg-surface-subtle hover:text-ink`,"aria-label":e(`work.tasks.actions`,{defaultValue:`Task actions`}),"aria-haspopup":`menu`,"aria-expanded":Y,"aria-controls":Y?`work-task-actions-menu`:void 0,children:(0,B.jsx)(k,{className:`h-4 w-4`})}),Y&&(0,B.jsx)(`div`,{ref:qe,id:`work-task-actions-menu`,role:`menu`,"aria-labelledby":`work-task-actions-trigger`,onKeyDown:Ye,className:`absolute end-0 top-10 z-40 min-w-44 rounded-xl border border-line bg-surface-overlay p-1.5 shadow-overlay`,children:(0,B.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`work-delete-task-button`,onClick:()=>{Je(!0),dt(w.id)},className:`flex h-9 w-full items-center gap-2 rounded-lg px-2.5 text-start text-xs font-medium text-error-600 transition-colors hover:bg-error-500/10`,children:[(0,B.jsx)(ne,{className:`h-3.5 w-3.5`}),e(`work.tasks.delete`,{defaultValue:`Delete task`})]})})]})]}),(ht||P)&&(0,B.jsxs)(`div`,{className:I(`flex shrink-0 items-center gap-2 border-b px-4 py-2 text-xs`,ht?`border-error-500/20 bg-error-500/10 text-error-700`:`border-amber-500/20 bg-amber-500/10 text-ink`),children:[(0,B.jsx)(u,{className:`h-4 w-4 shrink-0`}),(0,B.jsx)(`span`,{dir:`auto`,className:`min-w-0 flex-1`,children:ht?x?.reason||e(`work.runtime.reason`,{defaultValue:`Docker and an available Ollama or plugin model provider are required.`}):P}),P&&!ht&&(0,B.jsx)(`button`,{type:`button`,className:`rounded-md p-1 hover:bg-black/5`,onClick:Me,"aria-label":e(`common.close`),children:`×`})]}),a?w?(0,B.jsx)(Qe,{userId:p,mobileSurface:Ie,conversation:(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(ze,{task:w,user:f,liveRun:tt,loading:A,loadingOlder:j,onLoadOlder:()=>le(w.id)}),(0,B.jsx)(U,{models:xt,selectorModels:W,modelKey:yt,running:vt,loading:ee,disabled:ht,remoteDisclosureDismissed:l.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:m,onModelChange:lt,onDismissRemoteDisclosure:wt,onModelsRefresh:b,onSubmit:Q,onCancel:ut},w.id)]}),workspace:(0,B.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1`,children:(0,B.jsx)(Ft,{task:w,liveRun:tt,files:T,selectedFile:E,loadingFiles:M,actionLoading:ee,onLoadFiles:e=>H(w.id,e),onLoadFile:e=>De(w.id,e),onClearSelectedFile:Oe,onSaveFile:mt,onStartPreview:t=>pt(()=>Ae(w.id,t),e(`work.toasts.previewFailed`,{defaultValue:`Could not start the preview.`})),onStopPreview:()=>pt(()=>je(w.id),e(`work.toasts.previewStopFailed`,{defaultValue:`Could not stop the preview.`})),onDirtyChange:Re,terminal:x?.terminal},w.id)})}):(0,B.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center px-6 text-center`,children:A?(0,B.jsx)(`div`,{className:`text-sm text-ink-muted`,children:e(`work.tasks.loading`,{defaultValue:`Loading task…`})}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(u,{className:`mb-3 h-8 w-8 text-ink-subtle`}),(0,B.jsx)(`h2`,{className:`text-lg font-semibold text-ink`,children:e(`work.tasks.notFound`,{defaultValue:`This Work task is unavailable`})}),(0,B.jsxs)(`button`,{type:`button`,onClick:ct,className:`mt-4 inline-flex items-center gap-1.5 text-sm font-medium text-primary-600 hover:text-primary-700`,children:[(0,B.jsx)(te,{className:`h-4 w-4 rtl:rotate-180`}),e(`work.tasks.back`,{defaultValue:`Start a new task`})]})]})}):(0,B.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,B.jsxs)(`section`,{"data-testid":`work-landing`,className:`mx-auto flex min-h-full w-full max-w-3xl flex-col items-center justify-center px-4 py-20 sm:px-8 sm:py-24`,children:[(0,B.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[(0,B.jsx)(`h2`,{className:`max-w-3xl text-balance text-[clamp(2.65rem,7vw,5.25rem)] font-light leading-[0.98] tracking-[-0.055em] text-ink rtl:leading-[1.12] rtl:tracking-normal`,children:e(`work.landing.title`,{defaultValue:`Start a new Work task`})}),(0,B.jsx)(`p`,{className:`mt-4 max-w-xl text-balance text-base leading-relaxed text-ink-muted sm:text-lg`,children:e(`work.landing.description`,{defaultValue:`Give a local model a durable, isolated workspace. It can inspect files, run tools, and continue where it left off when you return.`})})]}),Ve&&(0,B.jsxs)(`div`,{className:`mt-8 w-full max-w-2xl`,children:[(0,B.jsx)(`label`,{htmlFor:`work-host-path`,className:`mb-1.5 block text-xs font-medium text-ink-muted`,children:e(`work.hostWorkspace.label`,{defaultValue:`Workspace folder (optional)`})}),(0,B.jsx)(`input`,{id:`work-host-path`,"data-testid":`work-host-path`,value:J,onChange:e=>Be(e.target.value),spellCheck:!1,placeholder:He[0]?`${He[0]}/my-project`:`/path/to/folder`,className:`w-full rounded-xl border border-line bg-surface px-3 py-2 font-mono text-[13px] text-ink outline-none transition-colors placeholder:text-ink-subtle focus:border-line-strong focus-visible:ring-2 focus-visible:ring-primary-500/30`}),(0,B.jsx)(`p`,{className:`mt-1.5 text-[11px] leading-relaxed text-ink-subtle`,children:J.trim()?e(`work.hostWorkspace.warning`,{defaultValue:`The task can read and write this folder directly. Leave blank to use an isolated workspace instead.`}):e(`work.hostWorkspace.hint`,{defaultValue:`Leave blank for an isolated workspace, or point the task at a folder on this machine.`})})]}),(0,B.jsx)(U,{variant:`landing`,models:G,selectorModels:W,modelKey:Xe?.key||``,running:!1,loading:ee,disabled:ht,remoteDisclosureDismissed:l.workRemoteProviderDisclosureDismissed,remoteDisclosureSaving:m,onModelChange:lt,onDismissRemoteDisclosure:wt,onModelsRefresh:b,onSubmit:Q,onCancel:ut}),(0,B.jsxs)(`div`,{"data-testid":`work-workspace-note`,role:`note`,className:`mt-4 flex max-w-2xl flex-wrap items-center justify-center gap-x-2 gap-y-1 text-center text-[10px] leading-relaxed text-ink-subtle`,children:[(0,B.jsx)(ie,{"aria-hidden":`true`,className:`h-3.5 w-3.5`}),(0,B.jsx)(`span`,{children:e(`work.composer.hint`,{defaultValue:`Each task keeps its own files and history. Review model output before using it.`})})]})]})})]})})}export{zt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),a=window.getComputedStyle(this._terminal.element),o={top:parseInt(a.getPropertyValue(`padding-top`)),bottom:parseInt(a.getPropertyValue(`padding-bottom`)),right:parseInt(a.getPropertyValue(`padding-right`)),left:parseInt(a.getPropertyValue(`padding-left`))},s=o.top+o.bottom,c=o.right+o.left,l=r-s,u=i-c-t;return{cols:Math.max(2,Math.floor(u/e.css.cell.width)),rows:Math.max(1,Math.floor(l/e.css.cell.height))}}};export{e as FitAddon};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/authStore-gv_MgDKr.js","js/rolldown-runtime-hePW80VL.js","js/router-vendor-Ca9zqOqT.js","js/markdown-core-DHnR5Hw8.js","js/utils-vendor-1zob7nK9.js","js/logger-DSXjF4ye.js","js/chatStore-DmDbolTg.js","js/ui-vendor-D_pYT79f.js","js/utils-BhpNrGnR.js","js/appStore-Cw7PmG-J.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,p as n}from"./router-vendor-Ca9zqOqT.js";import{a as r}from"./utils-vendor-1zob7nK9.js";import{i,n as a,t as o}from"./logger-DSXjF4ye.js";var s=o(`config`),c=window.location.protocol===`file:`?`http://localhost:3001/api`:`${window.location.origin}/api`,l=a(),u=()=>{l&&(s.debug(`API_BASE_URL configured as:`,c),s.debug(`Window location:`,window.location),s.debug(`Environment variables:`,{BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_APP_VERSION:`0.19.0`}))},d=o(`api`);u(),d.debug(`User agent:`,navigator.userAgent),d.debug(`Demo mode detected:`,i());var f=(e,t=!0)=>new Promise(n=>{setTimeout(()=>{n({success:t,data:e,error:t?void 0:`Demo mode: Backend not available`})},500)}),p=r.create({baseURL:c,timeout:3e5});p.interceptors.request.use(e=>{let t=localStorage.getItem(`auth-token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e},e=>Promise.reject(e)),p.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){d.warn(`Session expired or unauthorized, logging out...`),localStorage.removeItem(`auth-token`),t(async()=>{let{useAuthStore:e}=await import(`./authStore-gv_MgDKr.js`).then(e=>e.t);return{useAuthStore:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(({useAuthStore:e})=>{e.getState().logout()});let e=window.location.protocol===`file:`;return(e?window.location.hash:window.location.pathname).includes(`/login`)||(window.location.href=e?`#/login`:`/login`),Promise.reject(Error(`Session expired`))}return d.error(`API Error:`,e),Promise.reject(e)});var m={getModels:()=>i()?f([]):p.get(`/agent-clis/models`).then(e=>e.data)},h=`0.19.0`,g={login:e=>i()?f({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:h}}):p.post(`/auth/login`,e).then(e=>e.data),signup:e=>i()?f({user:{id:`demo-user-new`,username:e.username,email:e.email||``,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:h,turnstile:{enabled:!1}}}):p.post(`/auth/signup`,e).then(e=>e.data),logout:()=>i()?f(void 0):p.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(d.debug(`getSystemInfo called, demo mode:`,i()),i()?f({requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:h,turnstile:{enabled:!1}}):(d.debug(`Making API call to:`,c+`/auth/system-info`),d.debug(`Full URL from:`,window.location.origin,`-> API:`,c+`/auth/system-info`),p.get(`/auth/system-info`).then(e=>(d.debug(`getSystemInfo response:`,e.data),e.data)).catch(e=>{throw d.debug(`getSystemInfo error:`,e),e.response&&(d.debug(`Error response data:`,e.response.data),d.debug(`Error status:`,e.response.status),d.debug(`Error headers:`,e.response.headers)),e.request&&d.debug(`Network error - no response received:`,e.request),d.debug(`Error config:`,e.config),e}))),verifyToken:()=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>i()?f({encryptionKey:`demo-encryption-key-not-real`}):p.get(`/auth/encryption-key`).then(e=>e.data)},_={getUsers:()=>i()?f([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):p.get(`/users`).then(e=>e.data),createUser:e=>i()?f({id:`new-user-`+Date.now(),username:e.username,email:e.email,role:e.role,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.post(`/users`,e).then(e=>e.data),updateUser:(e,t)=>i()?f({id:e,username:t.username||`demo`,email:t.email||`demo@example.com`,role:t.role||`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/${e}`,t).then(e=>e.data),deleteUser:e=>i()?f(void 0):p.delete(`/users/${e}`).then(e=>e.data),getPendingApprovals:()=>i()?f({count:0,latestCreatedAt:null}):p.get(`/users/pending-approvals`).then(e=>e.data),approveUser:e=>i()?f({id:e,username:`demo-user`,email:`demo@example.com`,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/${e}/approve`).then(e=>e.data),updateMyAvatar:e=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,avatar:e,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/me/avatar`,{avatar:e}).then(e=>e.data)},v=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],y=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:v[0].name,providerType:`ollama`,providerId:null,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],b=y(),x={theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2:3b`,defaultProviderType:`ollama`,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:`You are a helpful assistant.`,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},S={...x,theme:{...x.theme},generationOptions:{...x.generationOptions},embeddingSettings:{...x.embeddingSettings},titleSettings:{...x.titleSettings},backgroundSettings:{...x.backgroundSettings}},ee=()=>S,C=e=>{let t=S.backgroundSettings||x.backgroundSettings;return S={...S,...e,theme:{...S.theme,...e.theme},generationOptions:{...S.generationOptions,...e.generationOptions},embeddingSettings:{...S.embeddingSettings,...e.embeddingSettings},titleSettings:e.titleSettings?{...S.titleSettings||x.titleSettings,...e.titleSettings}:S.titleSettings,backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:S.backgroundSettings},S},w={getSessions:()=>p.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n,r,i)=>p.post(`/chat/sessions`,{model:e,title:t,personaId:n,providerType:r,providerId:i}).then(e=>e.data),getSession:e=>{if(i()){let t=y().find(t=>t.id===e);return t?f(t):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.get(`/chat/sessions/${e}`).then(e=>e.data)},updateSession:(e,t)=>{if(i()){let n=b.findIndex(t=>t.id===e),r=b[n];if(r){let e={...r,...t,updatedAt:Date.now()};return b[n]=e,f(e)}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.put(`/chat/sessions/${e}`,t).then(e=>e.data)},deleteSession:e=>i()?f(null):p.delete(`/chat/sessions/${e}`).then(e=>e.data),clearAllSessions:()=>p.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(e,t,n,r,a)=>i()?f({title:n.substring(0,30)+(n.length>30?`...`:``),source:`fallback`,updatedAt:Date.now()}):p.post(`/chat/sessions/${e}/generate-title`,{model:t,message:n,providerType:r,providerId:a}).then(e=>e.data),getFolders:()=>i()?f([]):p.get(`/chat/folders`).then(e=>e.data),createFolder:e=>p.post(`/chat/folders`,{name:e}).then(e=>e.data),renameFolder:(e,t)=>p.put(`/chat/folders/${e}`,{name:t}).then(e=>e.data),deleteFolder:e=>p.delete(`/chat/folders/${e}`).then(e=>e.data),generateFollowUps:e=>i()?f({suggestions:[]}):p.post(`/chat/sessions/${e}/followups`).then(e=>e.data),sendMessage:(e,t,n)=>p.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>p.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(e,t,n)=>i()?f({}):p.put(`/chat/sessions/${e}/messages/${t}`,n).then(e=>e.data),generateChatResponse:(e,t,n)=>p.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,t,n)=>({subscribe:async(r,i,a)=>{try{let o=await fetch(`${c}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:t,options:n})});if(!o.ok)throw Error(`HTTP error! status: ${o.status}`);let s=o.body?.getReader();if(!s)throw Error(`No response body reader available`);let l=new TextDecoder,u=``,f=()=>{s.read().then(({done:e,value:t})=>{if(e){a?.();return}u+=l.decode(t,{stream:!0});let n=u.split(`
|
|
3
|
+
`);u=n.pop()||``;for(let e of n){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){a?.();return}try{let t=JSON.parse(e);if(r(t),t.type===`done`||t.type===`error`){t.type===`error`?i?.(t.error):a?.();return}}catch(e){d.error(`Failed to parse SSE data:`,e)}}}f()}).catch(e=>{i?.(e instanceof Error?e:Error(String(e)))})};return f(),()=>s.cancel()}catch(e){return i?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(e,t)=>i()?f([]):p.get(`/chat/sessions/${e}/messages/${t}/branches`).then(e=>e.data),switchMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branch`,{branchIndex:n}).then(e=>e.data),createMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branches`,{...n}).then(e=>e.data)},T={uploadDocument:(e,t)=>{if(i())return f({id:`demo-doc-`+Date.now(),filename:e.name,fileType:e.name.endsWith(`.pdf`)?`pdf`:`txt`,size:e.size,sessionId:t,uploadedAt:Date.now()});let n=new FormData;return n.append(`document`,e),t&&n.append(`sessionId`,t),p.post(`/documents/upload`,n).then(e=>e.data)},getCollections:()=>i()?f([]):p.get(`/documents/collections`).then(e=>e.data),createCollection:e=>p.post(`/documents/collections`,{name:e}).then(e=>e.data),deleteCollection:e=>p.delete(`/documents/collections/${e}`).then(e=>e.data),setDocumentCollection:(e,t)=>p.put(`/documents/${e}/collection`,{collectionId:t}).then(e=>e.data),fetchWebpage:(e,t)=>i()?f({id:`demo-doc-`+Date.now(),filename:`demo-webpage.txt`,fileType:`txt`,size:0,sessionId:t,uploadedAt:Date.now()}):p.post(`/documents/fetch-url`,{url:e,sessionId:t}).then(e=>e.data),getDocuments:e=>{if(i())return f([]);let t=e?`/documents/session/${e}`:`/documents`;return p.get(t).then(e=>e.data)},getDocument:e=>i()?f({id:e,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):p.get(`/documents/${e}`).then(e=>e.data),searchDocuments:(e,t,n)=>i()?f([]):p.post(`/documents/search`,{query:e,sessionId:t,limit:n}).then(e=>e.data),deleteDocument:e=>i()?f(void 0):p.delete(`/documents/${e}`).then(e=>e.data),getEmbeddingStatus:()=>i()?f({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):p.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>i()?f(void 0):p.post(`/documents/embeddings/regenerate`).then(e=>e.data)},te={getModels:()=>i()?f([{id:`nomic-embed-text`,name:`nomic-embed-text`,description:`Ollama - Default embedding model`,provider:`ollama`,dimensions:0,isDetectedEmbedding:!0}]):p.get(`/embeddings/models`).then(e=>e.data)},E={getNotes:()=>i()?f([]):p.get(`/notes`).then(e=>e.data),createNote:(e,t)=>p.post(`/notes`,{title:e,content:t}).then(e=>e.data),updateNote:(e,t)=>p.put(`/notes/${e}`,t).then(e=>e.data),deleteNote:e=>p.delete(`/notes/${e}`).then(e=>e.data)},D={getModels:e=>i()?f([{id:`meta-llama/Llama-3.3-70B-Instruct`,modelId:`meta-llama/Llama-3.3-70B-Instruct`,author:`meta-llama`,downloads:1e6,likes:5e3,tags:[`text-generation`,`llama`],pipeline_tag:`text-generation`,gated:!1}]):p.get(`/huggingface-hub/models`,{params:e}).then(e=>e.data),getTrending:e=>i()?f([]):p.get(`/huggingface-hub/trending`,{params:e}).then(e=>e.data),getModel:(e,t)=>i()?f({id:`${e}/${t}`,modelId:`${e}/${t}`,author:e,downloads:0,likes:0,tags:[],gated:!1}):p.get(`/huggingface-hub/models/${e}/${t}`).then(e=>e.data),getTasks:()=>i()?f([`text-generation`,`text-to-speech`,`text-to-image`]):p.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>i()?f(!0):p.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(e,t)=>i()?f([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${e}/${t}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${e}/${t}:Q4_K_M`}]):p.get(`/huggingface-hub/models/${e}/${t}/gguf`).then(e=>e.data),hasGgufFiles:(e,t)=>i()?f({hasGguf:!1,count:0}):p.get(`/huggingface-hub/models/${e}/${t}/has-gguf`).then(e=>e.data)},O={getModels:()=>i()?f([{model:`gpt-image-2`,plugin:`openai`,config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):p.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>i()?f([{id:`openai`,name:`OpenAI GPT Image`,models:[`gpt-image-2`,`gpt-image-1.5`,`gpt-image-1`,`gpt-image-1-mini`],config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):p.get(`/image-gen/plugins`).then(e=>e.data),getConfig:e=>i()?f({sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}):p.get(`/image-gen/config/${e}`).then(e=>e.data),generate:e=>i()?f({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:e.prompt}],model:e.model,pluginId:e.pluginId}):p.post(`/image-gen/generate`,e).then(e=>e.data),getGallery:e=>i()?f({images:[],total:0}):p.get(`/image-gen/gallery`,{params:e}).then(e=>e.data),getGalleryImage:e=>i()?f({id:e,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):p.get(`/image-gen/gallery/${e}`).then(e=>e.data),deleteGalleryImage:e=>i()?f(void 0):p.delete(`/image-gen/gallery/${e}`).then(e=>e.data)},k={connected:!1,baseUrl:`http://127.0.0.1:8766`,dashboardUrl:`http://127.0.0.1:8766/dashboard`,error:`Libre Claw daemon is not connected in demo mode.`},A={status:()=>i()?f(k):p.get(`/libre-claw/status`).then(e=>e.data),dashboard:()=>i()?f({url:k.dashboardUrl}):p.get(`/libre-claw/dashboard`).then(e=>e.data),currentModel:()=>i()?f({provider:`openrouter`,model:`openrouter/auto`}):p.get(`/libre-claw/config/model`).then(e=>e.data),updateModel:(e,t,n=!1)=>i()?f({provider:e,model:t,persist_global:n}):p.patch(`/libre-claw/config/model`,{provider:e,model:t,persist_global:n}).then(e=>e.data),currentFallback:()=>i()?f({enabled:!1,routes:[]}):p.get(`/libre-claw/config/fallback`).then(e=>e.data),updateFallback:e=>i()?f(e):p.patch(`/libre-claw/config/fallback`,e).then(e=>e.data),updateTheme:(e,t=!0)=>i()?f({theme:e,label:e,persist_global:t}):p.patch(`/libre-claw/config/theme`,{theme:e,persist_global:t}).then(e=>e.data),usage:(e=``,t=250)=>{let n=new URLSearchParams({limit:String(t)});return e&&n.set(`provider`,e),i()?f({summary:{},records:[],text:``}):p.get(`/libre-claw/usage?${n.toString()}`).then(e=>e.data)},listRuns:(e=20)=>i()?f({runs:[]}):p.get(`/libre-claw/runs?limit=${e}`).then(e=>e.data),startRun:e=>{if(i()){let t=new Date().toISOString();return f({run:{run_id:`demo-${Date.now()}`,state:`queued`,title:e.message.slice(0,80)||`Libre Claw demo run`,kind:e.kind||`chat`,provider:e.provider||`openrouter`,model:e.model||`openrouter/auto`,working_directory:``,created_at:t,updated_at:t}})}return p.post(`/libre-claw/runs`,e).then(e=>e.data)},getRun:e=>i()?f({run_id:e}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}`).then(e=>e.data),getEvents:(e,t=0)=>i()?f({events:[]}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}/events?after=${t}`).then(e=>e.data),cancelRun:e=>i()?f({run_id:e,cancelled:!0}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/cancel`).then(e=>e.data),resolvePermission:(e,t,n)=>i()?f({run_id:e,tool_call_id:t,resolution:n}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/permissions/${encodeURIComponent(t)}`,{resolution:n}).then(e=>e.data),listAutomations:(e=50)=>i()?f({automations:[]}):p.get(`/libre-claw/automations?limit=${e}`).then(e=>e.data),createAutomation:e=>i()?f({...e,automation_id:`demo-${Date.now()}`}):p.post(`/libre-claw/automations`,e).then(e=>e.data),updateAutomation:(e,t)=>i()?f({...t,automation_id:e}):p.patch(`/libre-claw/automations/${encodeURIComponent(e)}`,t).then(e=>e.data),pauseAutomation:e=>i()?f({automation_id:e,status:`paused`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/pause`).then(e=>e.data),resumeAutomation:e=>i()?f({automation_id:e,status:`active`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/resume`).then(e=>e.data),runAutomationNow:e=>i()?f({automation_id:e,run:!0}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/run`).then(e=>e.data),deleteAutomation:e=>i()?f({automation_id:e,deleted:!0}):p.delete(`/libre-claw/automations/${encodeURIComponent(e)}`).then(e=>e.data)},ne={getModels:()=>p.get(`/media/models`).then(e=>e.data),generateAudio:e=>p.post(`/media/audio/generate`,e).then(e=>e.data),generateSound:e=>p.post(`/media/sound/generate`,e).then(e=>e.data),generateVideo:e=>p.post(`/media/video/generate`,e).then(e=>e.data),getVideoJob:e=>p.get(`/media/video/jobs/${e}`).then(e=>e.data),getGallery:e=>p.get(`/media/gallery`,{params:e}).then(e=>e.data),deleteGalleryItem:e=>p.delete(`/media/gallery/${e}`).then(e=>e.data),getGalleryContent:e=>p.get(`/media/gallery/${e}/content`,{responseType:`blob`}).then(e=>e.data)},j=(e,t,n)=>{let r=new AbortController,i=localStorage.getItem(`auth-token`);return(async()=>{try{let n=await fetch(e,{headers:{Accept:`text/event-stream`,...i?{Authorization:`Bearer ${i}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r.signal});if(!n.ok){let e=`Request failed with status ${n.status}`;try{let t=await n.json();typeof t.error==`string`?e=t.error:typeof t.message==`string`&&(e=t.message)}catch{}throw Error(e)}if(!n.body)throw Error(`Response stream is unavailable`);let a=n.body.getReader(),o=new TextDecoder,s=``;try{for(;!r.signal.aborted;){let{done:e,value:n}=await a.read();s+=o.decode(n,{stream:!e});let r=s.split(/\r?\n\r?\n/);s=r.pop()||``;for(let e of r){let n=e.split(/\r?\n/).find(e=>e.startsWith(`data:`));n&&t(JSON.parse(n.slice(5).trim()))}if(e)break}}finally{a.releaseLock()}}catch(e){r.signal.aborted||n(e instanceof Error?e.message:`Connection lost`)}})(),()=>r.abort()},M={checkHealth:()=>i()?f({status:`offline`},!1):p.get(`/ollama/health`).then(e=>e.data),getModels:()=>i()?f(v):p.get(`/ollama/models`).then(e=>e.data),pullModel:e=>i()?f(null,!1):p.post(`/ollama/models/pull`,{name:e}).then(e=>e.data),pullModelStream:(e,t,n,r)=>{if(i()){let e=0,r=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,t({status:`success`,total:100,completed:100,percent:100}),clearInterval(r),setTimeout(n,500)):t({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(r)}return j(`${c}/ollama/pull/stream?${new URLSearchParams({model:e}).toString()}`,e=>{switch(e.type){case`progress`:t({status:typeof e.status==`string`?e.status:`pulling`,digest:typeof e.digest==`string`?e.digest:void 0,total:typeof e.total==`number`?e.total:void 0,completed:typeof e.completed==`number`?e.completed:void 0,percent:typeof e.percent==`number`?e.percent:void 0});break;case`complete`:n();break;case`error`:r(String(e.error||`Model pull failed`))}},r)},deleteModel:e=>i()?f(null,!1):p.delete(`/ollama/models`,{params:{name:e}}).then(e=>e.data),showModel:(e,t=!1)=>{if(i()){let t=v.find(t=>t.name===e);return f(t||null,!!t)}return p.get(`/ollama/models/show`,{params:{name:e,verbose:t}}).then(e=>e.data)},createModel:e=>i()?f(null,!1):p.post(`/ollama/models`,e).then(e=>e.data),copyModel:(e,t)=>i()?f(null,!1):p.post(`/ollama/models/copy`,{source:e,destination:t}).then(e=>e.data),pushModel:e=>i()?f(null,!1):p.post(`/ollama/models/push`,{name:e}).then(e=>e.data),pullAllModels:()=>i()?f(null,!1):p.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(e,t,n)=>{if(i()){let n=v,r=0,i=setInterval(()=>{r++,r<=n.length&&e({current:r,total:n.length,modelName:n[r-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),r>=n.length&&(clearInterval(i),setTimeout(t,500))},1e3);return}j(`${c}/ollama/models/pull-all/stream`,r=>{switch(r.type){case`progress`:{let t=r.status===`success`||r.status===`error`?r.status:`starting`;e({current:typeof r.current==`number`?r.current:0,total:typeof r.total==`number`?r.total:0,modelName:typeof r.modelName==`string`?r.modelName:`unknown`,status:t,error:typeof r.error==`string`?r.error:void 0});break}case`complete`:t();break;case`error`:n(String(r.error||`Model update failed`))}},n)},generateEmbeddings:e=>i()?f({embeddings:[[]]},!1):p.post(`/ollama/embed`,e).then(e=>e.data),listRunningModels:()=>i()?f([]):p.get(`/ollama/running`).then(e=>e.data),unloadModel:e=>i()?f(null):p.post(`/ollama/models/unload`,{name:e}).then(e=>e.data),unloadAllModels:()=>i()?f(null):p.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>i()?f({version:`demo-mode`},!1):p.get(`/ollama/version`).then(e=>e.data),chatCompletion:e=>i()?f({message:{content:`Demo response`,role:`assistant`}},!1):p.post(`/ollama/chat`,e).then(e=>e.data),checkBlobExists:e=>i()?Promise.resolve(!1):p.head(`/ollama/blobs/${e}`).then(()=>!0).catch(()=>!1),pushBlob:(e,t)=>i()?f(null,!1):p.post(`/ollama/blobs/${e}`,t,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:e=>i()?f({embedding:[]},!1):p.post(`/ollama/embeddings`,e).then(e=>e.data),getLibraryModels:e=>{if(i())return e?.category===`cloud`?f([{name:`gpt-oss:cloud`,description:`Demo cloud model using Ollama cloud naming`,category:`cloud`,sizes:[`cloud`],pulls:`Cloud`,tags:[`cloud`]}]):f([{name:`llama3.2`,description:`Meta's latest Llama model`,category:`general`,sizes:[`1b`,`3b`],pulls:`50M+`,tags:[`general`]},{name:`deepseek-r1`,description:`Open reasoning model`,category:`reasoning`,sizes:[`7b`,`14b`,`32b`],pulls:`200M+`,tags:[`reasoning`]}]);let t=new URLSearchParams;e?.search&&t.set(`search`,e.search),e?.sort&&t.set(`sort`,e.sort),e?.category&&t.set(`category`,e.category);let n=t.toString();return p.get(`/ollama/library${n?`?${n}`:``}`).then(e=>e.data)}},N=[[`#2563eb`,`#7c3aed`],[`#0891b2`,`#2563eb`],[`#0f766e`,`#2563eb`],[`#be123c`,`#7c3aed`],[`#ff7b52`,`#dc2626`]],P=e=>{let t=0;for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)},F=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`),I=e=>{let t=e.trim().split(/[\s._-]+/).filter(Boolean);return t.length===0?`AI`:t.slice(0,2).map(e=>e[0]?.toUpperCase()).join(``)||`AI`},L=(e,t=128)=>{let n=e.trim()||`AI Persona`,r=P(n),[i,a]=N[r%N.length],o=F(I(n)),s=`persona-avatar-${r}-${t}`,c=t>=96?44:24,l=`
|
|
4
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 ${t} ${t}" role="img" aria-label="${F(n)} avatar">
|
|
5
|
+
<defs>
|
|
6
|
+
<linearGradient id="${s}" x1="0" y1="0" x2="1" y2="1">
|
|
7
|
+
<stop offset="0%" stop-color="${i}" />
|
|
8
|
+
<stop offset="100%" stop-color="${a}" />
|
|
9
|
+
</linearGradient>
|
|
10
|
+
</defs>
|
|
11
|
+
<rect width="${t}" height="${t}" rx="${Math.round(t*.22)}" fill="url(#${s})" />
|
|
12
|
+
<circle cx="${t*.22}" cy="${t*.22}" r="${t*.26}" fill="rgba(255,255,255,0.16)" />
|
|
13
|
+
<text x="50%" y="52%" dominant-baseline="middle" text-anchor="middle" fill="white" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="${c}" font-weight="700">${o}</text>
|
|
14
|
+
</svg>
|
|
15
|
+
`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(l)}`},R=(e,t=128)=>e.avatar?.trim()||L(e.name,t),z=(e,t,n=128)=>{e.onerror=null,e.src=L(t,n)},B={getPersonas:()=>i()?f([{id:`demo-1`,user_id:`default`,name:`Creative Assistant`,description:`Helpful assistant for creative tasks`,model:`llama3.3:latest`,parameters:{temperature:.8,top_p:.9,context_window:4096,system_prompt:`You are a creative and helpful assistant. Provide thoughtful and engaging responses.`},avatar:L(`Creative Assistant`,128),created_at:Date.now()-864e5,updated_at:Date.now()-864e5},{id:`demo-2`,user_id:`default`,name:`Research Assistant`,description:`Academic assistant for research and learning`,model:`qwen3:7b`,parameters:{temperature:.3,top_p:.8,context_window:8192,system_prompt:`You are a knowledgeable research assistant. Provide detailed, informative explanations.`},avatar:L(`Research Assistant`,128),created_at:Date.now()-1728e5,updated_at:Date.now()-1728e5}]):p.get(`/personas`).then(e=>e.data),getPersona:e=>i()?f({id:e,user_id:`default`,name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()}):p.get(`/personas/${e}`).then(e=>e.data),createPersona:e=>i()?f({id:`demo-`+Date.now(),user_id:`default`,...e,created_at:Date.now(),updated_at:Date.now()}):p.post(`/personas`,e).then(e=>e.data),updatePersona:(e,t)=>i()?f({id:e,user_id:`default`,name:t.name||`Updated Sample Assistant`,description:t.description,model:t.model||`llama3.2:latest`,parameters:t.parameters||{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},avatar:t.avatar,background:t.background,created_at:Date.now()-864e5,updated_at:Date.now()}):p.put(`/personas/${e}`,t).then(e=>e.data),deletePersona:e=>i()?f(void 0):p.delete(`/personas/${e}`).then(e=>e.data),exportPersona:e=>{if(i()){let e={name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,params:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},exportedAt:Date.now(),version:`1.0.0`};return Promise.resolve(e)}return p.get(`/personas/${e}/export`).then(e=>e.data)},importPersona:e=>i()?f({id:`demo-imported-`+Date.now(),user_id:`default`,name:e.name,description:e.description,model:e.model,parameters:e.params,avatar:e.avatar,background:e.background,created_at:Date.now(),updated_at:Date.now(),embedding_model:e.embedding_model,memory_settings:e.memory_settings,mutation_settings:e.mutation_settings}):p.post(`/personas/import`,e).then(e=>e.data),getPersonasCount:()=>i()?f({count:2}):p.get(`/personas/stats/count`).then(e=>e.data),getDefaultParameters:()=>i()?f({temperature:.7,top_p:.9,top_k:40,context_window:4096,max_tokens:1024,system_prompt:``,repeat_penalty:1.1,presence_penalty:0,frequency_penalty:0}):p.get(`/personas/defaults/parameters`).then(e=>e.data),getMemoryStatus:e=>i()?f({status:`active`,memory_count:42,last_backup:Date.now()-864e5,size_mb:2.3}):p.get(`/personas/${e}/memory/status`).then(e=>e.data),wipeMemories:e=>i()?f({deleted_count:42}):p.delete(`/personas/${e}/memory`).then(e=>e.data),backupPersona:e=>{if(i()){let t=JSON.stringify({persona_id:e,backup_date:new Date().toISOString(),data:`demo backup data`});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/backup`,{responseType:`blob`}).then(e=>e.data)},exportPersonaDNA:e=>{if(i()){let t=JSON.stringify({persona_id:e,export_date:new Date().toISOString(),dna:`demo DNA data`,memories:[],learned_behaviors:{}});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/export/dna`,{responseType:`blob`}).then(e=>e.data)},importPersonaDNA:e=>{if(i())return f({id:`demo-dna-`+Date.now(),user_id:`default`,name:`Imported Persona`,description:`Persona imported from DNA`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()});let t=new FormData;return t.append(`dnaFile`,e),p.post(`/personas/import/dna`,t).then(e=>e.data)},downloadPersona:async(e,t)=>{try{let n=await B.exportPersona(e),r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){throw d.error(`Error while downloading persona:`,e),Error(`Failed to download persona: ${e instanceof Error?e.message:String(e)}`)}}},V=e=>{let t=Date.now();return{range:{from:t-Math.max(0,e-1)*864e5,to:t,days:e},totals:{calls:0,successfulCalls:0,failedCalls:0,cancelledCalls:0,meteredCalls:0,promptTokens:0,completionTokens:0,reportedTokens:0,averageLatencyMs:0,uniqueUsers:0},series:[],plugins:[],models:[],capabilities:[]}},H={getUsage:(e=30)=>i()?f(V(e)):p.get(`/plugins/usage`,{params:{days:e}}).then(e=>e.data),getAllPlugins:()=>i()?f([]):p.get(`/plugins`).then(e=>e.data),discoverModels:e=>i()?f({models:[],outcome:`unavailable`}):p.post(`/plugins/discover/${encodeURIComponent(e)}`).then(e=>e.data),uploadPlugin:e=>{if(i())return f({},!1);let t=new FormData;return t.append(`plugin`,e),p.post(`/plugins/upload`,t).then(e=>e.data)},installPlugin:e=>i()?f({},!1):p.post(`/plugins/install`,e).then(e=>e.data),updatePlugin:(e,t)=>i()?f({},!1):p.put(`/plugins/${e}`,t).then(e=>e.data),deletePlugin:e=>i()?f(void 0):p.delete(`/plugins/${e}`).then(e=>e.data),activatePlugin:e=>i()?f(!1,!1):p.post(`/plugins/activate/${e}`).then(e=>e.data),deactivatePlugin:e=>{if(i())return f(void 0);let t=e?`/plugins/deactivate/${e}`:`/plugins/deactivate`;return p.post(t).then(e=>e.data)},getActivePlugin:()=>i()?f(null):p.get(`/plugins/active`).then(e=>e.data),getPluginStatus:()=>i()?f([]):p.get(`/plugins/status`).then(e=>e.data),exportPlugin:e=>i()?Promise.resolve(new Blob([`{}`],{type:`application/json`})):p.get(`/plugins/${e}/export`,{responseType:`blob`}).then(e=>e.data),getCredentials:()=>i()?f([]):p.get(`/plugins/credentials/all`).then(e=>e.data),setApiKey:(e,t)=>i()?f(!1,!1):p.post(`/plugins/${e}/credentials`,{api_key:t}).then(e=>e.data),deleteApiKey:e=>i()?f(!1,!1):p.delete(`/plugins/${e}/credentials`).then(e=>e.data),checkApiKey:e=>i()?f(!1):p.get(`/plugins/${e}/credentials/check`).then(e=>e.data),getVariables:e=>i()?f({}):p.get(`/plugins/${e}/variables`).then(e=>e.data),setVariables:(e,t,n=[])=>i()?f(!0):p.put(`/plugins/${e}/variables`,{variables:t,unset:n}).then(e=>e.data),resetVariables:e=>i()?f(!0):p.delete(`/plugins/${e}/variables`).then(e=>e.data)},U={getPreferences:()=>i()?f(ee()):p.get(`/preferences`).then(e=>e.data),updatePreferences:e=>i()?f(C(e)):p.put(`/preferences`,e).then(e=>e.data),setDefaultModel:(e,t,n)=>i()?f(C({defaultModel:e,defaultProviderType:t,defaultProviderId:t===`plugin`||t===`agent`?n:null})):p.put(`/preferences/default-model`,{model:e,providerType:t,providerId:n}).then(e=>e.data),setSystemMessage:e=>i()?f(C({systemMessage:e})):p.put(`/preferences/system-message`,{message:e}).then(e=>e.data),setGenerationOptions:e=>i()?f(C({generationOptions:e})):p.put(`/preferences/generation-options`,e).then(e=>e.data),resetGenerationOptions:()=>i()?f(C({generationOptions:x.generationOptions})):p.post(`/preferences/generation-options/reset`).then(e=>e.data),setEmbeddingSettings:e=>i()?f(C({embeddingSettings:e})):p.put(`/preferences/embedding-settings`,e).then(e=>e.data),resetEmbeddingSettings:()=>i()?f(C({embeddingSettings:x.embeddingSettings})):p.post(`/preferences/embedding-settings/reset`).then(e=>e.data),importData:(e,t=`replace`)=>i()?f({theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2`,systemMessage:`You are a helpful assistant.`,generationOptions:{},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},showUsername:!1,workRemoteProviderDisclosureDismissed:!1}):p.post(`/preferences/import`,{data:e,mergeStrategy:t}).then(e=>e.data)},W={getDiagnostics:()=>p.get(`/system`).then(e=>e.data)},G=new Set([`snapshot`,`run_state`,`reasoning_delta`,`assistant_delta`,`tool_call`,`tool_result`,`usage`,`skill_loaded`,`error`,`done`]),K=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,q=e=>{if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return t;let n=Date.parse(e);if(Number.isFinite(n))return n}return Date.now()},J=(e,t,n,r,i)=>{let a=K(e);if(!a)return;let o=Number(a.id??t),s=String(a.type??n??``),c=String(a.taskId??r),l=String(a.runId??i);if(!Number.isSafeInteger(o)||o<0||!G.has(s)||c!==r||l!==i)return;let u=a.data;return{id:o,type:s,taskId:c,runId:l,timestamp:q(a.timestamp),data:K(u)||(u===void 0?{}:{content:u})}},Y=(e,t,n)=>{let r,i,a=[];for(let t of e.split(`
|
|
16
|
+
`)){if(!t||t.startsWith(`:`))continue;let e=t.indexOf(`:`),n=e===-1?t:t.slice(0,e),o=e===-1?``:t.slice(e+1),s=o.startsWith(` `)?o.slice(1):o;n===`id`&&(r=s),n===`event`&&(i=s),n===`data`&&a.push(s)}if(a.length===0)return;let o=a.join(`
|
|
17
|
+
`);if(o===`[DONE]`)return J({id:r,type:`done`,taskId:t,runId:n,timestamp:Date.now(),data:{}},r,i,t,n);try{return J(JSON.parse(o),r,i,t,n)}catch{return}},X=class{constructor(e,t,r){n(this,`taskId`,void 0),n(this,`runId`,void 0),n(this,`onEvent`,void 0),n(this,`buffer`,``),this.taskId=e,this.runId=t,this.onEvent=r}push(e){e&&(this.buffer+=e,this.drain())}finish(e=``){if(this.buffer+=e,this.drain(),!this.buffer.trim()){this.buffer=``;return}let t=Y(this.buffer.replace(/\r\n?/g,`
|
|
18
|
+
`),this.taskId,this.runId);this.buffer=``,t&&this.onEvent(t)}drain(){let e=/\r?\n\r?\n/.exec(this.buffer);for(;e?.index!==void 0;){let t=this.buffer.slice(0,e.index).replace(/\r\n?/g,`
|
|
19
|
+
`);this.buffer=this.buffer.slice(e.index+e[0].length);let n=Y(t,this.taskId,this.runId);n&&this.onEvent(n),e=/\r?\n\r?\n/.exec(this.buffer)}}},re=async e=>{try{let t=await e.json(),n=typeof t.error==`string`?t.error:typeof t.message==`string`?t.message:void 0;if(n)return Error(n)}catch{}return Error(`Work event stream failed with status ${e.status}.`)},ie=async({taskId:e,runId:t,after:n,signal:r,onEvent:i})=>{let a=localStorage.getItem(`auth-token`),o=new URL(`${c}/work/tasks/${encodeURIComponent(e)}/runs/${encodeURIComponent(t)}/events`,window.location.origin);o.searchParams.set(`after`,String(Math.max(0,Math.trunc(n))));let s=await fetch(o,{method:`GET`,headers:{Accept:`text/event-stream`,...a?{Authorization:`Bearer ${a}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r});if(!s.ok)throw await re(s);if(!s.body)throw Error(`Work event stream has no response body.`);let l=s.body.getReader(),u=new TextDecoder,d=new X(e,t,i);try{for(;!r.aborted;){let{done:e,value:t}=await l.read();if(e)break;d.push(u.decode(t,{stream:!0}))}d.finish(u.decode())}finally{l.releaseLock()}},Z=e=>`/work/tasks/${encodeURIComponent(e)}`,ae={capabilities:()=>p.get(`/work/capabilities`).then(e=>e.data),listTasks:()=>p.get(`/work/tasks`).then(e=>e.data),createTask:e=>p.post(`/work/tasks`,e).then(e=>e.data),getTask:e=>p.get(Z(e)).then(e=>e.data),getMessages:(e,t,n=200)=>p.get(`${Z(e)}/messages`,{params:{before:t,limit:n}}).then(e=>e.data),updateTask:(e,t)=>p.patch(Z(e),t).then(e=>e.data),deleteTask:e=>p.delete(Z(e)).then(e=>e.data),startRun:(e,t)=>p.post(`${Z(e)}/runs`,t).then(e=>e.data),cancelRun:e=>p.post(`${Z(e)}/cancel`).then(e=>e.data),streamRunEvents:e=>ie(e),listFiles:(e,t=``)=>p.get(`${Z(e)}/files`,{params:{path:t}}).then(e=>{let t=e.data;return t.data&&!Array.isArray(t.data)?{...t,data:t.data.entries}:t}),getFile:(e,t)=>p.get(`${Z(e)}/file`,{params:{path:t}}).then(e=>e.data),saveFile:(e,t,n,r)=>p.put(`${Z(e)}/file`,{content:n,expectedUpdatedAt:r},{params:{path:t}}).then(e=>e.data),getGitStatus:e=>p.get(`${Z(e)}/git`).then(e=>e.data),getGitDiff:(e,t)=>p.get(`${Z(e)}/git/diff`,{params:t?{path:t}:void 0}).then(e=>e.data),initializeGit:e=>p.post(`${Z(e)}/git/init`).then(e=>e.data),stageGitPaths:(e,t)=>p.post(`${Z(e)}/git/stage`,{paths:t}).then(e=>e.data),commitGit:(e,t)=>p.post(`${Z(e)}/git/commit`,{message:t}).then(e=>e.data),createGitBranch:(e,t)=>p.post(`${Z(e)}/git/branches`,{name:t}).then(e=>e.data),switchGitBranch:(e,t)=>p.post(`${Z(e)}/git/switch`,{name:t}).then(e=>e.data),startPreview:(e,t)=>p.post(`${Z(e)}/preview/start`,t?{command:t}:{}).then(e=>e.data),stopPreview:e=>p.post(`${Z(e)}/preview/stop`).then(e=>e.data)};function Q(e,t,n){if(t)return e.find(e=>e.model===t&&(!n||e.plugin===n))}function oe(e,t,n){return Q(e,t,n)||e[0]}function se(e){return`${encodeURIComponent(e.plugin)}::${encodeURIComponent(e.model)}`}var $={getModels:()=>i()?f([{model:`tts-1`,plugin:`openai`,config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096}}]):p.get(`/tts/models`).then(e=>e.data),getPlugins:()=>i()?f([{id:`openai`,name:`OpenAI GPT`,models:[`tts-1`,`tts-1-hd`],config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`}}]):p.get(`/tts/plugins`).then(e=>e.data),getVoices:e=>i()?f({voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096,supports_streaming:!1}):p.get(`/tts/voices/${e}`).then(e=>e.data),generateBase64:e=>{if(i())return f({audio:``,format:e.response_format||`mp3`,mimeType:`audio/mpeg`,size:0});let t={...e,pluginId:e.pluginId||void 0};return p.post(`/tts/generate-base64`,t).then(e=>e.data)},generate:async e=>{if(i())return new Blob([],{type:`audio/mpeg`});let t={...e,pluginId:e.pluginId||void 0};return(await p.post(`/tts/generate`,t,{responseType:`blob`})).data},speak:async(e,t={})=>{try{t.onStart?.();let n=await $.generateBase64({model:t.model||`tts-1`,pluginId:t.pluginId,input:e,voice:t.voice,speed:t.speed,response_format:t.responseFormat});if(!n.success||!n.data?.audio)throw Error(n.message||`Failed to generate speech`);let r=`data:${n.data.mimeType};base64,${n.data.audio}`,i=new Audio(r);return i.onended=()=>t.onEnd?.(),i.onerror=()=>t.onError?.(Error(`Audio playback failed`)),await i.play(),i}catch(e){let n=e instanceof Error?e:Error(`Unknown error`);return t.onError?.(n),null}}},ce=e({agentCliApi:()=>m,personaApi:()=>B,preferencesApi:()=>U});export{_ as C,g as S,D as _,$ as a,te as b,U as c,R as d,z as f,O as g,A as h,oe as i,H as l,ne as m,Q as n,ae as o,M as p,se as r,W as s,ce as t,B as u,E as v,c as w,w as x,T as y};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-DVP8xiYT.js","js/rolldown-runtime-hePW80VL.js","js/router-vendor-Ca9zqOqT.js","js/markdown-core-DHnR5Hw8.js","js/utils-vendor-1zob7nK9.js","js/logger-DSXjF4ye.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{i as e}from"./router-vendor-Ca9zqOqT.js";import{o as t,t as n}from"./utils-vendor-1zob7nK9.js";import{i as r,r as i,t as a}from"./logger-DSXjF4ye.js";var o=`dark`,s=`blue`,c=`#2563eb`,l=[{id:`violet`,label:`Violet`,color:`#7c3aed`,foreground:`#ffffff`},{id:`blue`,label:`Blue`,color:`#2563eb`,foreground:`#ffffff`},{id:`cyan`,label:`Cyan`,color:`#0e7490`,foreground:`#ffffff`},{id:`teal`,label:`Teal`,color:`#0f766e`,foreground:`#ffffff`},{id:`emerald`,label:`Emerald`,color:`#15803d`,foreground:`#ffffff`},{id:`amber`,label:`Coral`,color:`#ff7b52`,foreground:`#3d120c`},{id:`rose`,label:`Rose`,color:`#e11d48`,foreground:`#ffffff`},{id:`slate`,label:`Slate`,color:`#475569`,foreground:`#ffffff`}],u=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],d=[`25`,...u],f=[`canvas`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],p={multiplier:.24,minimum:6,maximum:24},m={multiplier:.36,minimum:6,maximum:32},h={25:99,50:97,100:94,200:88,300:80,400:66,500:48,600:36,700:27,800:18,900:11,950:6},g={25:13,50:4,100:7,200:10,300:16,400:27,500:46,600:65,700:82,800:89,900:95,950:99},_={canvas:{lightness:96,saturationFactor:1},surface:{lightness:98,saturationFactor:.9},"surface-subtle":{lightness:93,saturationFactor:1},"surface-raised":{lightness:99,saturationFactor:.8},"surface-overlay":{lightness:100,saturationFactor:0},"surface-inverse":{lightness:10,saturationFactor:.7},ink:{lightness:10,saturationFactor:.45},"ink-muted":{lightness:38,saturationFactor:.35},"ink-subtle":{lightness:54,saturationFactor:.4},"ink-inverse":{lightness:98,saturationFactor:.4},line:{lightness:86,saturationFactor:.8},"line-strong":{lightness:75,saturationFactor:.65}},v={canvas:{lightness:5,saturationFactor:.9},surface:{lightness:7,saturationFactor:.9},"surface-subtle":{lightness:9,saturationFactor:1},"surface-raised":{lightness:11,saturationFactor:1},"surface-overlay":{lightness:13,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:7,saturationFactor:.45},line:{lightness:18,saturationFactor:.8},"line-strong":{lightness:28,saturationFactor:.65}},y={violet:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#7c3aed`,600:`#6d28d9`,700:`#5b21b6`,800:`#4c1d95`,900:`#3b0764`,950:`#2e1065`},blue:{50:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#2563eb`,600:`#1d4ed8`,700:`#1e40af`,800:`#1e3a8a`,900:`#172554`,950:`#0f172a`},cyan:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#0e7490`,600:`#155e75`,700:`#164e63`,800:`#083344`,900:`#092f3f`,950:`#062634`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#0f766e`,600:`#0f625d`,700:`#115e59`,800:`#134e4a`,900:`#042f2e`,950:`#022c22`},emerald:{50:`#ecfdf5`,100:`#d1fae5`,200:`#a7f3d0`,300:`#6ee7b7`,400:`#34d399`,500:`#15803d`,600:`#166534`,700:`#14532d`,800:`#064e3b`,900:`#052e16`,950:`#022c22`},amber:{50:`#fff5f1`,100:`#ffe8df`,200:`#ffd0c2`,300:`#ffae96`,400:`#ff9273`,500:`#ff7b52`,600:`#c94a27`,700:`#a83a1f`,800:`#87301f`,900:`#70291e`,950:`#3d120c`},rose:{50:`#fff1f2`,100:`#ffe4e6`,200:`#fecdd3`,300:`#fda4af`,400:`#fb7185`,500:`#e11d48`,600:`#be123c`,700:`#9f1239`,800:`#881337`,900:`#4c0519`,950:`#2d0714`},slate:{50:`#f8fafc`,100:`#f1f5f9`,200:`#e2e8f0`,300:`#cbd5e1`,400:`#94a3b8`,500:`#475569`,600:`#334155`,700:`#1e293b`,800:`#0f172a`,900:`#020617`,950:`#010313`}},b={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},x=(e,t,n)=>Math.min(Math.max(e,t),n),S=e=>{if(!e)return null;let t=e.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];return`#${(n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n).toLowerCase()}`},C=e=>{let t=S(e)||`#2563eb`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},w=(e,t,n)=>`#${[e,t,n].map(e=>x(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,T=(e,t,n)=>{let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2;if(o===s)return{h:0,s:0,l:c*100};let l=o-s,u=c>.5?l/(2-o-s):l/(o+s),d=0;return d=o===r?(i-a)/l+(i<a?6:0):o===i?(a-r)/l+2:(r-i)/l+4,{h:d*60,s:u*100,l:c*100}},E=(e,t,n)=>{let r=x(t,0,100)/100,i=x(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),c=i-a/2,l=0,u=0,d=0;return o<60?(l=a,u=s):o<120?(l=s,u=a):o<180?(u=a,d=s):o<240?(u=s,d=a):o<300?(l=s,d=a):(l=a,d=s),w((l+c)*255,(u+c)*255,(d+c)*255)},D=e=>{let{r:t,g:n,b:r}=C(e),i=[t,n,r].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return i[0]*.2126+i[1]*.7152+i[2]*.0722},O=(e,t)=>{let n=D(e),r=D(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},k=(e,t,n)=>{let r=n,i=E(e,t,r);for(;O(`#ffffff`,i)<4.5&&r>12;)r-=2,i=E(e,t,r);return i},A=e=>{let{r:t,g:n,b:r}=C(S(e)||`#2563eb`),{h:i,s:a}=T(t,n,r),o=a<8?a:x(a,42,88);return u.reduce((e,t)=>{let n=b[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?k(i,r,n):E(i,r,n),e},{})},j=e=>{let t=e?.mode===`light`?`light`:o,n=e?.accent===`custom`?`custom`:e?.accent,r=l.some(e=>e.id===n)?n:s,i=S(e?.customAccent)||`#2563eb`;return{mode:t,adaptToAccent:e?.adaptToAccent===!0,accent:n===`custom`?`custom`:r,customAccent:i}},M=()=>j({mode:o}),N=e=>{let t=j(e);return t.accent===`custom`?A(t.customAccent):y[t.accent||`blue`]},P=e=>{let t=j(e);return t.accent===`custom`?t.customAccent||`#2563eb`:l.find(e=>e.id===t.accent)?.color||`#2563eb`},F=(e,t,n)=>t===0||e<8?e*t:x(e*n.multiplier*t,n.minimum*t,n.maximum*t),I=(e,t,n,r)=>d.reduce((i,a)=>(i[a]=E(e,F(t,1,r),n[a]),i),{}),L=(e,t,n,r)=>f.reduce((i,a)=>{let o=n[a];return i[a]=E(e,F(t,o.saturationFactor,r),o.lightness),i},{}),R=(e,t,n)=>{let{r,g:i,b:a}=C(n);e.style.setProperty(t,`${r} ${i} ${a}`)},z=e=>{for(let t of d)e.style.removeProperty(`--color-gray-${t}`),e.style.removeProperty(`--color-dark-${t}`);for(let t of f)e.style.removeProperty(`--color-${t}`)},B=(e,t)=>{let{r:n,g:r,b:i}=C(P(t)),{h:a,s:o}=T(n,r,i),s=t.mode===`light`?m:p,c=I(a,o,h,s),l=I(a,o,g,p),u=L(a,o,t.mode===`dark`?v:_,s);for(let t of d)R(e,`--color-gray-${t}`,c[t]),R(e,`--color-dark-${t}`,l[t]);for(let t of f)R(e,`--color-${t}`,u[t])},V=e=>{if(typeof document>`u`)return;let t=j(e),n=document.documentElement,r=N(t);n.classList.remove(`dark`,`ophelia`),t.mode===`dark`&&n.classList.add(`dark`),n.style.colorScheme=t.mode,n.dataset.accent=t.accent||`blue`,n.dataset.themeStyle=t.adaptToAccent?`accent`:`default`;for(let e of u){let{r:t,g:i,b:a}=C(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}t.adaptToAccent?B(n,t):z(n)},H=a(`store:app-store`),U=250,W=null,G=t()(n((t,n)=>({theme:M(),themeSyncPending:!1,syncThemePreference:async i=>{if(W&&(clearTimeout(W),W=null),!(!r()&&!localStorage.getItem(`auth-token`)))try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DVP8xiYT.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!(await r.updatePreferences({theme:i})).success){H.warn(`Failed to save theme preference to backend`);return}let a=j(n().theme),o=j(i);a.mode===o.mode&&a.adaptToAccent===o.adaptToAccent&&a.accent===o.accent&&a.customAccent===o.customAccent?t({themeSyncPending:!1}):(t({themeSyncPending:!0}),n().scheduleThemePreferenceSync())}catch(e){H.warn(`Failed to save theme preference to backend:`,e)}},scheduleThemePreferenceSync:()=>{W&&clearTimeout(W),W=setTimeout(()=>{W=null,n().syncThemePreference(j(n().theme))},U)},setTheme:e=>{let n=j(e);t(e=>({theme:n,preferences:{...e.preferences,theme:n}})),V(n)},updateTheme:e=>{let r=j(e);n().setTheme(r),t({themeSyncPending:!0}),n().scheduleThemePreferenceSync()},toggleTheme:()=>{let e=n().theme,t=e.mode===`dark`?`light`:`dark`;n().updateTheme({...e,mode:t})},sidebarOpen:!0,sidebarCompact:!1,setSidebarOpen:e=>t({sidebarOpen:e}),setSidebarCompact:e=>t({sidebarCompact:e}),toggleSidebar:()=>t(e=>({sidebarOpen:!e.sidebarOpen})),toggleSidebarCompact:()=>t(e=>({sidebarCompact:!e.sidebarCompact})),artifactPanelOpen:!1,artifactPanelArtifact:null,openArtifactPanel:e=>t({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>t({artifactPanelOpen:!1,artifactPanelArtifact:null}),preferences:{theme:M(),defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},setPreferences:e=>{let n=e.theme?j(e.theme):null;t(t=>({...n&&{theme:n},preferences:{...t.preferences,...e,...n&&{theme:n}}})),n&&V(n)},loadPreferences:async()=>{try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DVP8xiYT.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5])),i=await r.getPreferences();if(i.success&&i.data){let e=i.data,r=n().themeSyncPending?j(n().theme):null;n().setPreferences(r?{...e,theme:r}:e),t({backgroundImage:e.backgroundSettings?.imageUrl||null}),r&&n().syncThemePreference(r)}}catch(e){H.warn(`Failed to load preferences from backend:`,e)}},isGenerating:!1,setIsGenerating:e=>t({isGenerating:e}),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>t({hasSeenSettingsNotification:!0}),isDemoMode:r(),demoConfig:i(),setDemoMode:e=>{t({isDemoMode:e,demoConfig:i()})},backgroundImage:null,setBackgroundImage:async r=>{if(t({backgroundImage:r}),r){let t=n(),i={...t.preferences,backgroundSettings:{enabled:!0,imageUrl:r,blurAmount:t.preferences.backgroundSettings?.blurAmount||10,opacity:t.preferences.backgroundSettings?.opacity||.6}};t.setPreferences(i);try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DVP8xiYT.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));await t.updatePreferences({backgroundSettings:i.backgroundSettings})}catch(e){H.warn(`Failed to save background settings to backend:`,e)}}},uploadBackgroundImage:async e=>{try{let t=new FileReader;return new Promise((r,i)=>{t.onload=async e=>{try{let t=e.target?.result;await n().setBackgroundImage(t),r()}catch(e){i(e)}},t.onerror=i,t.readAsDataURL(e)})}catch(e){throw H.error(`Failed to upload background image:`,e),e}},removeBackgroundImage:async()=>{t({backgroundImage:null});let r=n(),i={enabled:!1,imageUrl:``,blurAmount:r.preferences.backgroundSettings?.blurAmount||10,opacity:r.preferences.backgroundSettings?.opacity||.6};r.setPreferences({backgroundSettings:i});try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-DVP8xiYT.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));await t.updatePreferences({backgroundSettings:i})}catch(e){H.warn(`Failed to save background removal to backend:`,e)}},clearUserState:()=>{let e=M();W&&(clearTimeout(W),W=null),t({theme:e,themeSyncPending:!1,backgroundImage:null,preferences:{theme:e,defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}}}),V(e)}}),{name:`libre-webui-app-state`,onRehydrateStorage:()=>e=>{e&&e.setTheme(j(e.theme))},partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,themeSyncPending:e.themeSyncPending,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=G.getState();t(e)})();export{P as a,c as i,l as n,j as o,s as r,G as t};
|