libre-webui 0.37.2 → 0.39.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 +29 -65
- package/backend/dist/db.js +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +13 -36
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/main.js +0 -12
- package/backend/dist/main.js.map +1 -1
- package/backend/dist/middleware/cors.d.ts.map +1 -1
- package/backend/dist/middleware/cors.js +5 -0
- package/backend/dist/middleware/cors.js.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.js +2 -4
- package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.js +2 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
- package/backend/dist/persistence/postgresWorkRunThinkMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresWorkRunThinkMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresWorkRunThinkMigration.js +39 -0
- package/backend/dist/persistence/postgresWorkRunThinkMigration.js.map +1 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.js +2 -4
- package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.js +20 -0
- package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.js +1 -0
- package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +3 -2
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -1
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +3 -3
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -1
- package/backend/dist/platform/workPersistence/types.d.ts +5 -0
- package/backend/dist/platform/workPersistence/types.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/types.js.map +1 -1
- package/backend/dist/routes/agentCli.d.ts.map +1 -1
- package/backend/dist/routes/agentCli.js +8 -3
- package/backend/dist/routes/agentCli.js.map +1 -1
- package/backend/dist/routes/{cordis.d.ts → strands.d.ts} +1 -1
- package/backend/dist/routes/strands.d.ts.map +1 -0
- package/backend/dist/routes/strands.js +300 -0
- package/backend/dist/routes/strands.js.map +1 -0
- package/backend/dist/routes/work.d.ts.map +1 -1
- package/backend/dist/routes/work.js +26 -23
- package/backend/dist/routes/work.js.map +1 -1
- package/backend/dist/services/agentAccessService.d.ts +0 -5
- package/backend/dist/services/agentAccessService.d.ts.map +1 -1
- package/backend/dist/services/agentAccessService.js +7 -35
- package/backend/dist/services/agentAccessService.js.map +1 -1
- package/backend/dist/services/agentCliService.d.ts +16 -23
- package/backend/dist/services/agentCliService.d.ts.map +1 -1
- package/backend/dist/services/agentCliService.js +85 -112
- package/backend/dist/services/agentCliService.js.map +1 -1
- package/backend/dist/services/authService.d.ts +3 -3
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +3 -4
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/authorizationService.d.ts +1 -1
- package/backend/dist/services/authorizationService.d.ts.map +1 -1
- package/backend/dist/services/authorizationService.js +17 -8
- package/backend/dist/services/authorizationService.js.map +1 -1
- package/backend/dist/services/followUpService.d.ts +4 -1
- package/backend/dist/services/followUpService.d.ts.map +1 -1
- package/backend/dist/services/followUpService.js +23 -2
- package/backend/dist/services/followUpService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +10 -6
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/pluginUsageService.d.ts +0 -34
- package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
- package/backend/dist/services/pluginUsageService.js +0 -62
- package/backend/dist/services/pluginUsageService.js.map +1 -1
- package/backend/dist/services/strandsAccessService.d.ts +26 -0
- package/backend/dist/services/strandsAccessService.d.ts.map +1 -0
- package/backend/dist/services/strandsAccessService.js +95 -0
- package/backend/dist/services/strandsAccessService.js.map +1 -0
- package/backend/dist/services/thinkingSummaryService.d.ts +2 -3
- package/backend/dist/services/thinkingSummaryService.d.ts.map +1 -1
- package/backend/dist/services/thinkingSummaryService.js +13 -27
- package/backend/dist/services/thinkingSummaryService.js.map +1 -1
- package/backend/dist/services/titleGenerationService.d.ts +7 -18
- package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
- package/backend/dist/services/titleGenerationService.js +15 -36
- package/backend/dist/services/titleGenerationService.js.map +1 -1
- package/backend/dist/services/workAgentService.d.ts +1 -1
- package/backend/dist/services/workAgentService.d.ts.map +1 -1
- package/backend/dist/services/workAgentService.js +17 -60
- package/backend/dist/services/workAgentService.js.map +1 -1
- package/backend/dist/services/workModelProviderService.d.ts +1 -4
- package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.js +60 -50
- package/backend/dist/services/workModelProviderService.js.map +1 -1
- package/backend/dist/services/workTaskService.d.ts +3 -2
- package/backend/dist/services/workTaskService.d.ts.map +1 -1
- package/backend/dist/services/workTaskService.js +11 -7
- package/backend/dist/services/workTaskService.js.map +1 -1
- package/backend/dist/strands/catalog.d.ts +57 -0
- package/backend/dist/strands/catalog.d.ts.map +1 -0
- package/backend/dist/strands/catalog.js +241 -0
- package/backend/dist/strands/catalog.js.map +1 -0
- package/backend/dist/strands/engine.d.ts +131 -0
- package/backend/dist/strands/engine.d.ts.map +1 -0
- package/backend/dist/strands/engine.js +477 -0
- package/backend/dist/strands/engine.js.map +1 -0
- package/backend/dist/strands/harness.d.ts +14 -0
- package/backend/dist/strands/harness.d.ts.map +1 -0
- package/backend/dist/strands/harness.js +41 -0
- package/backend/dist/strands/harness.js.map +1 -0
- package/backend/dist/strands/model.d.ts +24 -0
- package/backend/dist/strands/model.d.ts.map +1 -0
- package/backend/dist/strands/model.js +381 -0
- package/backend/dist/strands/model.js.map +1 -0
- package/backend/dist/strands/runtime.d.ts +4 -0
- package/backend/dist/strands/runtime.d.ts.map +1 -0
- package/backend/dist/{cordis/work-model.js → strands/runtime.js} +16 -12
- package/backend/dist/strands/runtime.js.map +1 -0
- package/backend/dist/strands/sandbox.d.ts +24 -0
- package/backend/dist/strands/sandbox.d.ts.map +1 -0
- package/backend/dist/strands/sandbox.js +156 -0
- package/backend/dist/strands/sandbox.js.map +1 -0
- package/backend/dist/strands/work-driver.d.ts +11 -0
- package/backend/dist/strands/work-driver.d.ts.map +1 -0
- package/backend/dist/strands/work-driver.js +443 -0
- package/backend/dist/strands/work-driver.js.map +1 -0
- package/backend/dist/strands/work-model.d.ts +7 -0
- package/backend/dist/strands/work-model.d.ts.map +1 -0
- package/backend/dist/strands/work-model.js +42 -0
- package/backend/dist/strands/work-model.js.map +1 -0
- package/backend/dist/types/work.d.ts +7 -11
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/types/work.js.map +1 -1
- package/backend/dist/utils/bedrockMantle.d.ts +46 -0
- package/backend/dist/utils/bedrockMantle.d.ts.map +1 -0
- package/backend/dist/utils/bedrockMantle.js +206 -0
- package/backend/dist/utils/bedrockMantle.js.map +1 -0
- package/backend/dist/utils/corsOriginPolicy.d.ts +10 -0
- package/backend/dist/utils/corsOriginPolicy.d.ts.map +1 -0
- package/backend/dist/utils/corsOriginPolicy.js +70 -0
- package/backend/dist/utils/corsOriginPolicy.js.map +1 -0
- package/backend/dist/utils/pluginChatAdapter.d.ts +36 -0
- package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.js +122 -47
- package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +3 -2
- package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
- package/backend/dist/utils/pluginValidation.d.ts +1 -1
- package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
- package/backend/dist/utils/pluginValidation.js +11 -0
- package/backend/dist/utils/pluginValidation.js.map +1 -1
- package/backend/package.json +6 -36
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/artifact-runtime/babel.js +170 -170
- package/frontend/dist/artifact-runtime/framer-motion.js +3 -3
- package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
- package/frontend/dist/artifact-runtime/mathjs.js +1 -1
- package/frontend/dist/artifact-runtime/mermaid.js +1 -1
- package/frontend/dist/artifact-runtime/plotly.js +1 -1
- package/frontend/dist/artifact-runtime/react.js +3 -3
- package/frontend/dist/assets/index-D99DS5c6.js +57 -0
- package/frontend/dist/assets/index-Dz1JufgZ.css +1 -0
- package/frontend/dist/assets/{markdown-math-D1Bj3pDB.css → markdown-math-DzFXvcrH.css} +1 -1
- package/frontend/dist/index.html +34 -34
- package/frontend/dist/js/{ArtifactContainer-D4v4l15L.js → ArtifactContainer-Cn7X9HGm.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-B2uaVpsi.js → ArtifactDemoPage-Ddpy2O_v.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-DlWJHI-r.js → ArtifactSandboxFrame-CdsAqv8H.js} +1 -1
- package/frontend/dist/js/{ArtifactSlideOutPanel-laZ98QKB.js → ArtifactSlideOutPanel-cVd9X80o.js} +1 -1
- package/frontend/dist/js/AutomationModal-B4UaWjkk.js +1 -0
- package/frontend/dist/js/AutomationsPage-huCrvLUp.js +1 -0
- package/frontend/dist/js/{AvatarUpload-KaBaTKoG.js → AvatarUpload-CG-w6Mpt.js} +1 -1
- package/frontend/dist/js/{Button-CGMYia4g.js → Button-j68Q8KVh.js} +1 -1
- package/frontend/dist/js/{CalendarPage-Dc7r-86c.js → CalendarPage-CZXT1w99.js} +1 -1
- package/frontend/dist/js/ChannelsPage-DbtdHnSL.js +1 -0
- package/frontend/dist/js/ChatPage-BZE65kiq.js +14 -0
- package/frontend/dist/js/ConnectModels-DD4bLgdq.js +1 -0
- package/frontend/dist/js/{EvaluationsPage-BB7sPhIR.js → EvaluationsPage-Dq53LaXd.js} +2 -2
- package/frontend/dist/js/{FirstTimeSetup-elqSi9JH.js → FirstTimeSetup-BoJIfuQT.js} +1 -1
- package/frontend/dist/js/GalleryPage-DKwqeB2A.js +1 -0
- package/frontend/dist/js/HomePage-C8bCJfls.js +1 -0
- package/frontend/dist/js/LanguageSwitcher-B_YyU5JG.js +1 -0
- package/frontend/dist/js/{Logo-HZvdAk2c.js → Logo-DnfVtjgj.js} +1 -1
- package/frontend/dist/js/{LogoMark-GJnfMXsk.js → LogoMark-BzObGdA9.js} +1 -1
- package/frontend/dist/js/{ModelManagerModals-Bk6OQzJI.js → ModelManagerModals-BzjZ-QwL.js} +1 -1
- package/frontend/dist/js/NotesPage-CnaAp_w_.js +3 -0
- package/frontend/dist/js/{OptimizedSyntaxHighlighter-CzzV6ONG.js → OptimizedSyntaxHighlighter-B0g8cxZQ.js} +1 -1
- package/frontend/dist/js/OptimizedSyntaxHighlighter-B_BbHeO1.js +1 -0
- package/frontend/dist/js/{PasswordStrengthMeter-DasfJa4P.js → PasswordStrengthMeter-DI4RDv67.js} +1 -1
- package/frontend/dist/js/{PersonasPage-CIJINcQK.js → PersonasPage-CH3GUKph.js} +2 -2
- package/frontend/dist/js/PluginUsagePage-d54K2gAj.js +1 -0
- package/frontend/dist/js/{RichMessageContent-DxCHlUlY.js → RichMessageContent-BfYbVBFz.js} +2 -2
- package/frontend/dist/js/RichMessageContent-CDxxs3Tt.js +1 -0
- package/frontend/dist/js/SettingsModal-BvtJcvow.js +19 -0
- package/frontend/dist/js/{SettingsToggle-oxvw7ulA.js → SettingsToggle-DrJ0Bapi.js} +1 -1
- package/frontend/dist/js/{ShareDialog-Bhpt_Y1N.js → ShareDialog-DaSxkTKS.js} +1 -1
- package/frontend/dist/js/StrandsPage-BQwz0mWq.js +1 -0
- package/frontend/dist/js/{SystemPage-BfhVXqar.js → SystemPage-BqNZoFxR.js} +1 -1
- package/frontend/dist/js/{TurnstileWidget-CVepEMEQ.js → TurnstileWidget-tI50c7Kc.js} +1 -1
- package/frontend/dist/js/{UserManagementPage-2yHv89ZA.js → UserManagementPage-UvPjA9RP.js} +1 -1
- package/frontend/dist/js/UserManagementPanel-C3T1ReJJ.js +1 -0
- package/frontend/dist/js/{WhatsNewModal-Dl69bG2T.js → WhatsNewModal-CLcU2Ugk.js} +1 -1
- package/frontend/dist/js/WorkPage-BpjGn--1.js +8 -0
- package/frontend/dist/js/api-BrHW-VGd.js +14 -0
- package/frontend/dist/js/api-K_hhqPdx.js +1 -0
- package/frontend/dist/js/{appNavigation-R8iKverf.js → appNavigation-B6xYIgLi.js} +1 -1
- package/frontend/dist/js/appStore-DkRdQQeY.js +2 -0
- package/frontend/dist/js/appVersion-BVtSqLVj.js +1 -0
- package/frontend/dist/js/ar-XTZGEtBr.js +2 -0
- package/frontend/dist/js/authStore-DBS6Kbvh.js +1 -0
- package/frontend/dist/js/{authStore-D8fc-Hl0.js → authStore-DjAsRpNL.js} +3 -3
- package/frontend/dist/js/bn-JiK7ZWmy.js +2 -0
- package/frontend/dist/js/chatStore-DpVxt9VX.js +3 -0
- package/frontend/dist/js/{client-BeJbHHWx.js → client-DppLngAs.js} +2 -2
- package/frontend/dist/js/{config-D6Kcp5n3.js → config-4_s8hdqO.js} +1 -1
- package/frontend/dist/js/cs-D8ju18CO.js +2 -0
- package/frontend/dist/js/da-BJWcAoUc.js +2 -0
- package/frontend/dist/js/de-CLJLmy69.js +2 -0
- package/frontend/dist/js/es-BvqHEL-3.js +2 -0
- package/frontend/dist/js/{evaluationsApi-2YwZBPk5.js → evaluationsApi-DyuW7IJ_.js} +1 -1
- package/frontend/dist/js/fr-B8ZoZomI.js +2 -0
- package/frontend/dist/js/hi-AzJLALo-.js +2 -0
- package/frontend/dist/js/id-DZYGQhvC.js +2 -0
- package/frontend/dist/js/is-Da_kvtzW.js +2 -0
- package/frontend/dist/js/it-B90zSlqn.js +2 -0
- package/frontend/dist/js/ja-DU_K1GOr.js +2 -0
- package/frontend/dist/js/ko-DicfoO-e.js +2 -0
- package/frontend/dist/js/{markdown-CZ1tYEW8.js → markdown-DU84620G.js} +1 -1
- package/frontend/dist/js/{markdown-core-KjS96SYW.js → markdown-core-Cyql92Hg.js} +1 -1
- package/frontend/dist/js/{markdown-html-DQEwrWcf.js → markdown-html-CUc2fCgY.js} +1 -1
- package/frontend/dist/js/{markdown-math-CKi32S5d.js → markdown-math-DxPfMKvO.js} +1 -1
- package/frontend/dist/js/{markdownHtml-lrXhxBhK.js → markdownHtml-KhS0cFNH.js} +1 -1
- package/frontend/dist/js/markdownMath-CsfRQAcz.js +1 -0
- package/frontend/dist/js/{messageCodeStyles-D4haBw80.js → messageCodeStyles-CuQPkfEK.js} +1 -1
- package/frontend/dist/js/ms-CfH7wjUY.js +2 -0
- package/frontend/dist/js/nl-ELlOz-B3.js +2 -0
- package/frontend/dist/js/pl-33dayyUk.js +2 -0
- package/frontend/dist/js/pt-aIXSQPCT.js +2 -0
- package/frontend/dist/js/react-vendor-CR5VJ85Q.js +9 -0
- package/frontend/dist/js/{router-vendor-HZm4FR0A.js → router-vendor-DqMnEJWK.js} +1 -1
- package/frontend/dist/js/ru-BSvGtBtW.js +2 -0
- package/frontend/dist/js/{standalone-DbyFjvTU.js → standalone-D_lg5NC9.js} +1 -1
- package/frontend/dist/js/strandsApi-BFbeEpAY.js +2 -0
- package/frontend/dist/js/sv-B7KOz81W.js +2 -0
- package/frontend/dist/js/{syntax-highlight-DNc3FFCa.js → syntax-highlight-D7dQ5s5-.js} +1 -1
- package/frontend/dist/js/{teamEventStream-omPy51va.js → teamEventStream-DsAS6P4m.js} +1 -1
- package/frontend/dist/js/th-DgpjGxvA.js +2 -0
- package/frontend/dist/js/tr-BQTbl2h-.js +2 -0
- package/frontend/dist/js/{ui-D5-4niRk.js → ui-Aq8MP7Ph.js} +2 -2
- package/frontend/dist/js/ui-vendor-DVTj_sKN.js +1 -0
- package/frontend/dist/js/uk-JLymloot.js +2 -0
- package/frontend/dist/js/{useChat-DnGClJeX.js → useChat-D3ZAGz70.js} +4 -4
- package/frontend/dist/js/useDialogFocus-zSGHkpE4.js +1 -0
- package/frontend/dist/js/useDictation-B6l8QzeM.js +1 -0
- package/frontend/dist/js/{useQuery-hWmQjdLu.js → useQuery-BTKpXudI.js} +1 -1
- package/frontend/dist/js/{useTranslation-B9kflK9S.js → useTranslation-Boi0fB1B.js} +1 -1
- package/frontend/dist/js/utils-B-Bhh1pF.js +1 -0
- package/frontend/dist/js/utils-vendor-DPJG-EG_.js +1 -0
- package/frontend/dist/js/vi-BXdLOJ8q.js +2 -0
- package/frontend/dist/js/{work-DmJpVPPO.js → work-CdbmBok5.js} +1 -1
- package/frontend/dist/js/workApi-D1xtiG3Q.js +1 -0
- package/frontend/dist/js/{workApi-C5InfT8x.js → workApi-UPxumrEF.js} +1 -1
- package/frontend/dist/js/workModels-BM2Zyiba.js +1 -0
- package/frontend/dist/js/zh-gdUf9sXa.js +2 -0
- package/package.json +11 -40
- package/plugins/anthropic.json +3 -1
- package/plugins/bedrock.json +86 -0
- package/plugins/openrouter.json +2 -0
- package/backend/dist/cordis/contracts.d.ts +0 -270
- package/backend/dist/cordis/contracts.d.ts.map +0 -1
- package/backend/dist/cordis/contracts.js +0 -32
- package/backend/dist/cordis/contracts.js.map +0 -1
- package/backend/dist/cordis/dsh/chat-model.d.ts +0 -16
- package/backend/dist/cordis/dsh/chat-model.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/chat-model.js +0 -104
- package/backend/dist/cordis/dsh/chat-model.js.map +0 -1
- package/backend/dist/cordis/dsh/engine-plugin.d.ts +0 -186
- package/backend/dist/cordis/dsh/engine-plugin.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/engine-plugin.js +0 -1116
- package/backend/dist/cordis/dsh/engine-plugin.js.map +0 -1
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts +0 -175
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.js +0 -480
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.js.map +0 -1
- package/backend/dist/cordis/dsh/model-identity.d.ts +0 -12
- package/backend/dist/cordis/dsh/model-identity.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/model-identity.js +0 -87
- package/backend/dist/cordis/dsh/model-identity.js.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-client.d.ts +0 -44
- package/backend/dist/cordis/dsh/native-provider-client.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-client.js +0 -524
- package/backend/dist/cordis/dsh/native-provider-client.js.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-plugin.d.ts +0 -11
- package/backend/dist/cordis/dsh/native-provider-plugin.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-plugin.js +0 -416
- package/backend/dist/cordis/dsh/native-provider-plugin.js.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-protocol.d.ts +0 -37
- package/backend/dist/cordis/dsh/native-provider-protocol.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-protocol.js +0 -325
- package/backend/dist/cordis/dsh/native-provider-protocol.js.map +0 -1
- package/backend/dist/cordis/dsh/provider-handler.d.ts +0 -36
- package/backend/dist/cordis/dsh/provider-handler.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/provider-handler.js +0 -582
- package/backend/dist/cordis/dsh/provider-handler.js.map +0 -1
- package/backend/dist/cordis/dsh/session-files.d.ts +0 -9
- package/backend/dist/cordis/dsh/session-files.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/session-files.js +0 -60
- package/backend/dist/cordis/dsh/session-files.js.map +0 -1
- package/backend/dist/cordis/dsh/session-settings.d.ts +0 -15
- package/backend/dist/cordis/dsh/session-settings.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/session-settings.js +0 -51
- package/backend/dist/cordis/dsh/session-settings.js.map +0 -1
- package/backend/dist/cordis/dsh/work-driver.d.ts +0 -12
- package/backend/dist/cordis/dsh/work-driver.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/work-driver.js +0 -402
- package/backend/dist/cordis/dsh/work-driver.js.map +0 -1
- package/backend/dist/cordis/dsh/workspace-policy.d.ts +0 -10
- package/backend/dist/cordis/dsh/workspace-policy.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/workspace-policy.js +0 -44
- package/backend/dist/cordis/dsh/workspace-policy.js.map +0 -1
- package/backend/dist/cordis/host/composition.d.ts +0 -73
- package/backend/dist/cordis/host/composition.d.ts.map +0 -1
- package/backend/dist/cordis/host/composition.js +0 -205
- package/backend/dist/cordis/host/composition.js.map +0 -1
- package/backend/dist/cordis/host/config.d.ts +0 -159
- package/backend/dist/cordis/host/config.d.ts.map +0 -1
- package/backend/dist/cordis/host/config.js +0 -184
- package/backend/dist/cordis/host/config.js.map +0 -1
- package/backend/dist/cordis/host/host.d.ts +0 -74
- package/backend/dist/cordis/host/host.d.ts.map +0 -1
- package/backend/dist/cordis/host/host.js +0 -420
- package/backend/dist/cordis/host/host.js.map +0 -1
- package/backend/dist/cordis/host/loader-entry.d.ts +0 -41
- package/backend/dist/cordis/host/loader-entry.d.ts.map +0 -1
- package/backend/dist/cordis/host/loader-entry.js +0 -52
- package/backend/dist/cordis/host/loader-entry.js.map +0 -1
- package/backend/dist/cordis/host/model.d.ts +0 -45
- package/backend/dist/cordis/host/model.d.ts.map +0 -1
- package/backend/dist/cordis/host/model.js +0 -54
- package/backend/dist/cordis/host/model.js.map +0 -1
- package/backend/dist/cordis/host/privacy.d.ts +0 -8
- package/backend/dist/cordis/host/privacy.d.ts.map +0 -1
- package/backend/dist/cordis/host/privacy.js +0 -73
- package/backend/dist/cordis/host/privacy.js.map +0 -1
- package/backend/dist/cordis/index.d.ts +0 -14
- package/backend/dist/cordis/index.d.ts.map +0 -1
- package/backend/dist/cordis/index.js +0 -30
- package/backend/dist/cordis/index.js.map +0 -1
- package/backend/dist/cordis/runtime.d.ts +0 -97
- package/backend/dist/cordis/runtime.d.ts.map +0 -1
- package/backend/dist/cordis/runtime.js +0 -231
- package/backend/dist/cordis/runtime.js.map +0 -1
- package/backend/dist/cordis/work-model.d.ts +0 -7
- package/backend/dist/cordis/work-model.d.ts.map +0 -1
- package/backend/dist/cordis/work-model.js.map +0 -1
- package/backend/dist/routes/cordis.d.ts.map +0 -1
- package/backend/dist/routes/cordis.js +0 -440
- package/backend/dist/routes/cordis.js.map +0 -1
- package/backend/dist/routes/libreClaw.d.ts +0 -3
- package/backend/dist/routes/libreClaw.d.ts.map +0 -1
- package/backend/dist/routes/libreClaw.js +0 -200
- package/backend/dist/routes/libreClaw.js.map +0 -1
- package/backend/dist/services/cordisAccessService.d.ts +0 -56
- package/backend/dist/services/cordisAccessService.d.ts.map +0 -1
- package/backend/dist/services/cordisAccessService.js +0 -98
- package/backend/dist/services/cordisAccessService.js.map +0 -1
- package/backend/dist/services/libreClawService.d.ts +0 -105
- package/backend/dist/services/libreClawService.d.ts.map +0 -1
- package/backend/dist/services/libreClawService.js +0 -169
- package/backend/dist/services/libreClawService.js.map +0 -1
- package/frontend/dist/assets/index-C8_AByBq.css +0 -1
- package/frontend/dist/assets/index-DWLnkKwj.js +0 -16
- package/frontend/dist/js/AutomationModal-CjjiEZFA.js +0 -1
- package/frontend/dist/js/AutomationsPage-jnWmD58y.js +0 -1
- package/frontend/dist/js/ChannelsPage-DHPabX1e.js +0 -1
- package/frontend/dist/js/ChatPage-ZvGp-iqV.js +0 -14
- package/frontend/dist/js/ConnectModels-aUTD6s9B.js +0 -1
- package/frontend/dist/js/CordisPage-DZKcpPVj.js +0 -1
- package/frontend/dist/js/GalleryPage-CrlNRnkn.js +0 -1
- package/frontend/dist/js/HomePage-lR9h7_a1.js +0 -1
- package/frontend/dist/js/LanguageSwitcher-CWkbzpxT.js +0 -1
- package/frontend/dist/js/LibreClawPage-P19FnNlu.js +0 -1
- package/frontend/dist/js/NotesPage-DopG0M4B.js +0 -3
- package/frontend/dist/js/OptimizedSyntaxHighlighter-ajqwyBQm.js +0 -1
- package/frontend/dist/js/PluginUsagePage-Cj0mUxD8.js +0 -1
- package/frontend/dist/js/RichMessageContent-BZndQSJU.js +0 -1
- package/frontend/dist/js/SettingsModal-wAuFQOE4.js +0 -19
- package/frontend/dist/js/UserManagementPanel-BU95ZPOv.js +0 -1
- package/frontend/dist/js/WorkPage-CSderbeT.js +0 -8
- package/frontend/dist/js/api-CU-JXx2u.js +0 -1
- package/frontend/dist/js/api-DPXCtanG.js +0 -14
- package/frontend/dist/js/appStore-BD70bvas.js +0 -2
- package/frontend/dist/js/appVersion-C7sxqgMd.js +0 -1
- package/frontend/dist/js/ar-Cq-DrSYL.js +0 -2
- package/frontend/dist/js/authStore-FNKLFUQp.js +0 -1
- package/frontend/dist/js/bn-BqxLh-KL.js +0 -2
- package/frontend/dist/js/chatStore-CK5ojwft.js +0 -3
- package/frontend/dist/js/cordisApi-BS8QMSV4.js +0 -2
- package/frontend/dist/js/cs-D2DDNZf-.js +0 -2
- package/frontend/dist/js/da-BciY-TSG.js +0 -2
- package/frontend/dist/js/de-DjU_eXQ-.js +0 -2
- package/frontend/dist/js/es-ChIEs80I.js +0 -2
- package/frontend/dist/js/fr-Bi8BGRW4.js +0 -2
- package/frontend/dist/js/hi-BMsCnWg7.js +0 -2
- package/frontend/dist/js/i18next-DOICz7ZY.js +0 -1
- package/frontend/dist/js/id-CpcN1vhk.js +0 -2
- package/frontend/dist/js/is-DkUy2cmP.js +0 -2
- package/frontend/dist/js/it-BglK9DRZ.js +0 -2
- package/frontend/dist/js/ja-IrprzwLJ.js +0 -2
- package/frontend/dist/js/ko--wwEsMPi.js +0 -2
- package/frontend/dist/js/markdownMath-B0BpyFBS.js +0 -1
- package/frontend/dist/js/ms-BWj59y7-.js +0 -2
- package/frontend/dist/js/nl-D-QndW_A.js +0 -2
- package/frontend/dist/js/pl-Dw7d7iDV.js +0 -2
- package/frontend/dist/js/pt-BI53uHJw.js +0 -2
- package/frontend/dist/js/react-vendor-wiHys0m2.js +0 -9
- package/frontend/dist/js/ru-JKyTgPg9.js +0 -2
- package/frontend/dist/js/sv-BIkBLPSQ.js +0 -2
- package/frontend/dist/js/th-CZ_LcCU0.js +0 -2
- package/frontend/dist/js/tr-B265byx1.js +0 -2
- package/frontend/dist/js/ui-vendor-BhHHyHk3.js +0 -1
- package/frontend/dist/js/uk-VTAlChwf.js +0 -2
- package/frontend/dist/js/useDialogFocus-BPTG_Zmy.js +0 -1
- package/frontend/dist/js/useDictation-D7zVBjDJ.js +0 -1
- package/frontend/dist/js/utils-p8Gt72YP.js +0 -1
- package/frontend/dist/js/utils-vendor-DISWt2y9.js +0 -1
- package/frontend/dist/js/vi-D8rXh-53.js +0 -2
- package/frontend/dist/js/workApi-FV75LKJn.js +0 -1
- package/frontend/dist/js/workModels-MzU2Ab7l.js +0 -1
- package/frontend/dist/js/zh-BEGd9iBD.js +0 -2
- package/scripts/prepare-dsh-provider.mjs +0 -124
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/** One raw loader entry from a composition document. */
|
|
2
|
-
export interface CompositionEntry {
|
|
3
|
-
/** Stable id addressed by `loader.update` and `loader.remove`. */
|
|
4
|
-
readonly id: string;
|
|
5
|
-
/** Module specifier the loader imports; always a literal string. */
|
|
6
|
-
readonly name: string;
|
|
7
|
-
/** Config passed to the plugin; may contain `!!js` markers. */
|
|
8
|
-
readonly config?: unknown;
|
|
9
|
-
/** Whether the row starts disabled. */
|
|
10
|
-
readonly disabled?: unknown;
|
|
11
|
-
/** Required services or service intercept config for this row. */
|
|
12
|
-
readonly inject?: unknown;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Parse a settings document (`cordis.config.yml`).
|
|
16
|
-
* @param source - the document text.
|
|
17
|
-
* @returns the settings mapping, or an empty mapping for an empty document.
|
|
18
|
-
* @throws when the document is not a mapping.
|
|
19
|
-
*/
|
|
20
|
-
export declare function parseSettings(source: string): Record<string, unknown>;
|
|
21
|
-
/**
|
|
22
|
-
* Parse a composition document (`cordis.patch.yml`).
|
|
23
|
-
* @param source - the document text.
|
|
24
|
-
* @returns the validated entry list.
|
|
25
|
-
* @throws when the document is not a list, or an entry lacks a literal `name`.
|
|
26
|
-
*/
|
|
27
|
-
export declare function parseComposition(source: string): CompositionEntry[];
|
|
28
|
-
/**
|
|
29
|
-
* Read the settings document from disk.
|
|
30
|
-
*
|
|
31
|
-
* A missing file yields empty settings so that "unconfigured" stays
|
|
32
|
-
* distinguishable from a misconfiguration: the first uses defaults, the second is
|
|
33
|
-
* a hard error. A present file that cannot be parsed is always the latter.
|
|
34
|
-
* @param settingsPath - absolute path of the settings document.
|
|
35
|
-
* @returns the settings mapping, empty when the file is absent.
|
|
36
|
-
* @throws when the file exists but is not a valid settings mapping.
|
|
37
|
-
*/
|
|
38
|
-
export declare function readSettingsFile(settingsPath: string): Record<string, unknown>;
|
|
39
|
-
/**
|
|
40
|
-
* Serialize a composition entry list back to YAML.
|
|
41
|
-
*
|
|
42
|
-
* `!!js` markers are re-emitted as tags rather than expanded, because the host
|
|
43
|
-
* must not evaluate an expression that belongs to the owning entry's fiber. A
|
|
44
|
-
* plain `js-yaml` dump would otherwise emit the marker as an ordinary nested
|
|
45
|
-
* mapping and the loader would hand that mapping to the plugin as config.
|
|
46
|
-
*
|
|
47
|
-
* @param entries - the entry list to serialize.
|
|
48
|
-
* @returns the YAML document body, ending in a newline.
|
|
49
|
-
*/
|
|
50
|
-
export declare function stringifyComposition(entries: readonly CompositionEntry[]): string;
|
|
51
|
-
/**
|
|
52
|
-
* Read the composition document from disk.
|
|
53
|
-
* @param configPath - absolute path of the composition document.
|
|
54
|
-
* @returns the validated entry list, empty when the file is absent.
|
|
55
|
-
* @throws when the file exists but is not a valid composition document.
|
|
56
|
-
*/
|
|
57
|
-
export declare function readCompositionFile(configPath: string): CompositionEntry[];
|
|
58
|
-
/**
|
|
59
|
-
* Apply host-owned defaults to the engine bridge row.
|
|
60
|
-
*
|
|
61
|
-
* The bridge cannot learn the model route from its own document because the
|
|
62
|
-
* route is a host setting, and an agent with no provider pinned silently
|
|
63
|
-
* produces turns with no assistant response. The host therefore supplies those
|
|
64
|
-
* values to the row it names, while leaving every other row untouched so the
|
|
65
|
-
* composition stays the operator's document.
|
|
66
|
-
*
|
|
67
|
-
* @param entries - the composition's entry list.
|
|
68
|
-
* @param bridgeEntryId - id of the row that mounts the Libre WebUI bridge.
|
|
69
|
-
* @param defaults - values the host injects into that row's config.
|
|
70
|
-
* @returns a detached entry list with the bridge row's config merged.
|
|
71
|
-
*/
|
|
72
|
-
export declare function applyHostDefaults(entries: readonly CompositionEntry[], bridgeEntryId: string, defaults: Record<string, unknown>): CompositionEntry[];
|
|
73
|
-
//# sourceMappingURL=composition.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../src/cordis/host/composition.ts"],"names":[],"mappings":"AAyEA,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUrE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAkCnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GACnC,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAS1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,gBAAgB,EAAE,CAgBpB"}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Libre WebUI
|
|
3
|
-
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at:
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Parsing for Cordis composition documents.
|
|
19
|
-
*
|
|
20
|
-
* The Cordis `Include` tree carrier reads a composition file as a **top-level
|
|
21
|
-
* YAML array of entries** and rejects anything else, so the entry list and the
|
|
22
|
-
* host's own settings cannot share one document. They are therefore two files
|
|
23
|
-
* with one job each:
|
|
24
|
-
*
|
|
25
|
-
* - `cordis.patch.yml` — the entry array that mounts the engine. The Cordis
|
|
26
|
-
* loader owns this file and may write it back when an entry changes.
|
|
27
|
-
* - `cordis.config.yml` — Libre WebUI's settings for the same engine (provider,
|
|
28
|
-
* routes, feature flags). The host owns this file and never rewrites it.
|
|
29
|
-
*
|
|
30
|
-
* `!!js` is supported inside entry `config` values and preserved as the loader's
|
|
31
|
-
* own `{ __jsExpr }` marker rather than evaluated here. The loader evaluates
|
|
32
|
-
* those expressions later, in the owning entry's fiber, which is what lets a row
|
|
33
|
-
* read `process.env` at activation time rather than at file-read time. The
|
|
34
|
-
* settings document does not support `!!js` because the host evaluates it
|
|
35
|
-
* before any fiber exists; settings use environment variables instead.
|
|
36
|
-
*
|
|
37
|
-
* @module cordis/host/composition
|
|
38
|
-
*/
|
|
39
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
40
|
-
import { DEFAULT_SCHEMA, Type, dump, load } from 'js-yaml';
|
|
41
|
-
const JS_TAG = 'tag:yaml.org,2002:js';
|
|
42
|
-
/**
|
|
43
|
-
* YAML schema that maps `!!js <expr>` onto the loader's expression marker.
|
|
44
|
-
*
|
|
45
|
-
* This mirrors `@deepseek-ai/cordis-plugin-include`'s own tag, so a composition
|
|
46
|
-
* parses identically whether the host or the Include plugin reads it. It
|
|
47
|
-
* extends the default schema rather than replacing it: a fresh `Schema` holding
|
|
48
|
-
* only this tag silently loses every core YAML type, which surfaces as
|
|
49
|
-
* "unacceptable kind of an object to dump [object Boolean]" the moment the host
|
|
50
|
-
* writes a composed document back out.
|
|
51
|
-
*
|
|
52
|
-
* The `represent` hook keeps the tag intact on that write. Without it the
|
|
53
|
-
* marker would be emitted as an ordinary nested mapping, which then fails to
|
|
54
|
-
* parse back into a marker.
|
|
55
|
-
*/
|
|
56
|
-
const LOADER_SCHEMA = DEFAULT_SCHEMA.extend([
|
|
57
|
-
new Type(JS_TAG, {
|
|
58
|
-
kind: 'scalar',
|
|
59
|
-
resolve: (data) => typeof data === 'string',
|
|
60
|
-
construct: (data) => ({ __jsExpr: data }),
|
|
61
|
-
predicate: (data) => typeof data === 'object' &&
|
|
62
|
-
data !== null &&
|
|
63
|
-
typeof data.__jsExpr === 'string',
|
|
64
|
-
represent: (data) => data.__jsExpr,
|
|
65
|
-
}),
|
|
66
|
-
]);
|
|
67
|
-
/**
|
|
68
|
-
* Parse a settings document (`cordis.config.yml`).
|
|
69
|
-
* @param source - the document text.
|
|
70
|
-
* @returns the settings mapping, or an empty mapping for an empty document.
|
|
71
|
-
* @throws when the document is not a mapping.
|
|
72
|
-
*/
|
|
73
|
-
export function parseSettings(source) {
|
|
74
|
-
const parsed = load(source);
|
|
75
|
-
if (parsed === null || parsed === undefined)
|
|
76
|
-
return {};
|
|
77
|
-
if (typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
78
|
-
throw new Error('cordis host: the settings document must be a YAML mapping of keys such as ' +
|
|
79
|
-
'`enabled`, `model`, and `features`');
|
|
80
|
-
}
|
|
81
|
-
return parsed;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Parse a composition document (`cordis.patch.yml`).
|
|
85
|
-
* @param source - the document text.
|
|
86
|
-
* @returns the validated entry list.
|
|
87
|
-
* @throws when the document is not a list, or an entry lacks a literal `name`.
|
|
88
|
-
*/
|
|
89
|
-
export function parseComposition(source) {
|
|
90
|
-
const parsed = load(source, { schema: LOADER_SCHEMA });
|
|
91
|
-
if (parsed === null || parsed === undefined)
|
|
92
|
-
return [];
|
|
93
|
-
if (!Array.isArray(parsed)) {
|
|
94
|
-
throw new Error('cordis host: the composition document must be a top-level YAML array of ' +
|
|
95
|
-
'loader entries (the Cordis Include carrier rejects any other shape)');
|
|
96
|
-
}
|
|
97
|
-
return parsed.map((entry, index) => {
|
|
98
|
-
if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {
|
|
99
|
-
throw new Error(`cordis host: plugin entry #${index} must be a mapping`);
|
|
100
|
-
}
|
|
101
|
-
const record = entry;
|
|
102
|
-
if (typeof record.name !== 'string' || record.name.trim() === '') {
|
|
103
|
-
throw new Error(`cordis host: plugin entry #${index} needs a literal string \`name\`; ` +
|
|
104
|
-
'the loader imports `name` directly, so it cannot be a !!js expression');
|
|
105
|
-
}
|
|
106
|
-
const id = typeof record.id === 'string' && record.id.trim() !== ''
|
|
107
|
-
? record.id
|
|
108
|
-
: // A stable, position-derived id keeps `update` and `remove` usable
|
|
109
|
-
// even for a row an operator forgot to label.
|
|
110
|
-
`${record.name}#${index}`;
|
|
111
|
-
return {
|
|
112
|
-
id,
|
|
113
|
-
name: record.name,
|
|
114
|
-
...(record.config === undefined ? {} : { config: record.config }),
|
|
115
|
-
...(record.disabled === undefined ? {} : { disabled: record.disabled }),
|
|
116
|
-
...(record.inject === undefined ? {} : { inject: record.inject }),
|
|
117
|
-
};
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Read the settings document from disk.
|
|
122
|
-
*
|
|
123
|
-
* A missing file yields empty settings so that "unconfigured" stays
|
|
124
|
-
* distinguishable from a misconfiguration: the first uses defaults, the second is
|
|
125
|
-
* a hard error. A present file that cannot be parsed is always the latter.
|
|
126
|
-
* @param settingsPath - absolute path of the settings document.
|
|
127
|
-
* @returns the settings mapping, empty when the file is absent.
|
|
128
|
-
* @throws when the file exists but is not a valid settings mapping.
|
|
129
|
-
*/
|
|
130
|
-
export function readSettingsFile(settingsPath) {
|
|
131
|
-
if (!existsSync(settingsPath))
|
|
132
|
-
return {};
|
|
133
|
-
const raw = readFileSync(settingsPath, 'utf8');
|
|
134
|
-
try {
|
|
135
|
-
return parseSettings(raw);
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
139
|
-
throw new Error(`cordis host: ${settingsPath} is not usable: ${detail}`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Serialize a composition entry list back to YAML.
|
|
144
|
-
*
|
|
145
|
-
* `!!js` markers are re-emitted as tags rather than expanded, because the host
|
|
146
|
-
* must not evaluate an expression that belongs to the owning entry's fiber. A
|
|
147
|
-
* plain `js-yaml` dump would otherwise emit the marker as an ordinary nested
|
|
148
|
-
* mapping and the loader would hand that mapping to the plugin as config.
|
|
149
|
-
*
|
|
150
|
-
* @param entries - the entry list to serialize.
|
|
151
|
-
* @returns the YAML document body, ending in a newline.
|
|
152
|
-
*/
|
|
153
|
-
export function stringifyComposition(entries) {
|
|
154
|
-
return dump(entries, { schema: LOADER_SCHEMA, noRefs: true, lineWidth: 100 });
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Read the composition document from disk.
|
|
158
|
-
* @param configPath - absolute path of the composition document.
|
|
159
|
-
* @returns the validated entry list, empty when the file is absent.
|
|
160
|
-
* @throws when the file exists but is not a valid composition document.
|
|
161
|
-
*/
|
|
162
|
-
export function readCompositionFile(configPath) {
|
|
163
|
-
if (!existsSync(configPath))
|
|
164
|
-
return [];
|
|
165
|
-
const raw = readFileSync(configPath, 'utf8');
|
|
166
|
-
try {
|
|
167
|
-
return parseComposition(raw);
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
171
|
-
throw new Error(`cordis host: ${configPath} is not usable: ${detail}`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Apply host-owned defaults to the engine bridge row.
|
|
176
|
-
*
|
|
177
|
-
* The bridge cannot learn the model route from its own document because the
|
|
178
|
-
* route is a host setting, and an agent with no provider pinned silently
|
|
179
|
-
* produces turns with no assistant response. The host therefore supplies those
|
|
180
|
-
* values to the row it names, while leaving every other row untouched so the
|
|
181
|
-
* composition stays the operator's document.
|
|
182
|
-
*
|
|
183
|
-
* @param entries - the composition's entry list.
|
|
184
|
-
* @param bridgeEntryId - id of the row that mounts the Libre WebUI bridge.
|
|
185
|
-
* @param defaults - values the host injects into that row's config.
|
|
186
|
-
* @returns a detached entry list with the bridge row's config merged.
|
|
187
|
-
*/
|
|
188
|
-
export function applyHostDefaults(entries, bridgeEntryId, defaults) {
|
|
189
|
-
return entries.map(entry => {
|
|
190
|
-
if (entry.id !== bridgeEntryId)
|
|
191
|
-
return entry;
|
|
192
|
-
const existing = entry.config !== null &&
|
|
193
|
-
typeof entry.config === 'object' &&
|
|
194
|
-
!Array.isArray(entry.config)
|
|
195
|
-
? entry.config
|
|
196
|
-
: {};
|
|
197
|
-
// The document wins over the host default: an operator who pinned a
|
|
198
|
-
// provider on the row meant it.
|
|
199
|
-
return {
|
|
200
|
-
...entry,
|
|
201
|
-
config: { ...defaults, ...existing },
|
|
202
|
-
};
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
//# sourceMappingURL=composition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../src/cordis/host/composition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/** Default file name of the host settings document. */
|
|
2
|
-
export declare const CORDIS_SETTINGS_FILENAME = "cordis.config.yml";
|
|
3
|
-
/**
|
|
4
|
-
* Default file name of the composition document.
|
|
5
|
-
*
|
|
6
|
-
* Deliberately the same name Cordis uses, so an operator who already knows the
|
|
7
|
-
* Cordis loader recognises it: a top-level YAML array of loader entries.
|
|
8
|
-
*/
|
|
9
|
-
export declare const CORDIS_PATCH_FILENAME = "cordis.patch.yml";
|
|
10
|
-
/**
|
|
11
|
-
* How the engine reaches a model provider.
|
|
12
|
-
*
|
|
13
|
-
* `libre-webui` is the supported mode: the engine calls the providers this
|
|
14
|
-
* deployment already has, through the composition's adapter row. The other
|
|
15
|
-
* values mount a provider package directly and require installing it, because
|
|
16
|
-
* carrying every provider SDK as a hard dependency pulled in a large transitive
|
|
17
|
-
* tree that includes deprecated packages for capabilities the engine never
|
|
18
|
-
* reaches.
|
|
19
|
-
*/
|
|
20
|
-
export type ModelProviderMode =
|
|
21
|
-
/** The DeepSeek provider adapter package, installed separately. */
|
|
22
|
-
'deepseek'
|
|
23
|
-
/** The generic pi-ai adapter package, installed separately. */
|
|
24
|
-
| 'pi-ai'
|
|
25
|
-
/** Served through Libre WebUI's own provider layer. */
|
|
26
|
-
| 'libre-webui'
|
|
27
|
-
/** Mount no provider adapter; the engine starts without model access. */
|
|
28
|
-
| 'none';
|
|
29
|
-
/** Configuration for the swappable model adapter plugin. */
|
|
30
|
-
export interface ModelAdapterConfig {
|
|
31
|
-
/** Which adapter family to mount. */
|
|
32
|
-
readonly provider: ModelProviderMode;
|
|
33
|
-
/** Environment variable holding the API key, never the key itself. */
|
|
34
|
-
readonly apiKeyEnv: string;
|
|
35
|
-
/** Base URL override; empty means the adapter's own default endpoint. */
|
|
36
|
-
readonly baseUrl: string;
|
|
37
|
-
/** Provider route name used when creating agents. */
|
|
38
|
-
readonly route: string;
|
|
39
|
-
/** Default model identifier. */
|
|
40
|
-
readonly model: string;
|
|
41
|
-
/**
|
|
42
|
-
* Hand-declared pi-ai provider routes, keyed by route name.
|
|
43
|
-
*
|
|
44
|
-
* Passed through to `dsh-llm-pi-ai` verbatim: a route that names an installed
|
|
45
|
-
* pi-ai provider inherits that provider's defaults, and any other key is a
|
|
46
|
-
* complete declaration. This is what lets an operator point the engine at an
|
|
47
|
-
* Ollama or OpenAI-compatible gateway without changing Libre WebUI code.
|
|
48
|
-
*/
|
|
49
|
-
readonly providers: Readonly<Record<string, Record<string, unknown>>>;
|
|
50
|
-
}
|
|
51
|
-
/** Feature flags for the embedded engine. */
|
|
52
|
-
export interface EngineFeatures {
|
|
53
|
-
/**
|
|
54
|
-
* Mount the engine at all.
|
|
55
|
-
*
|
|
56
|
-
* Read from `features.enabled`. Every capability switch lives in this one
|
|
57
|
-
* block so there is a single place to look for "what is turned on"; a
|
|
58
|
-
* top-level `enabled` key would be a second, silently ignored spelling.
|
|
59
|
-
*/
|
|
60
|
-
readonly enabled: boolean;
|
|
61
|
-
/** Accept chat requests that stream model output. */
|
|
62
|
-
readonly streaming: boolean;
|
|
63
|
-
/** Expose the engine's tool listing to the UI. */
|
|
64
|
-
readonly tools: boolean;
|
|
65
|
-
/** Keep engine sessions on disk across restarts. */
|
|
66
|
-
readonly persistence: boolean;
|
|
67
|
-
}
|
|
68
|
-
/** Fully resolved host configuration. */
|
|
69
|
-
export interface CordisHostConfig {
|
|
70
|
-
/** Explicit opt-in to a local DSH instance's private provider socket. */
|
|
71
|
-
readonly nativeProvider?: {
|
|
72
|
-
readonly socketPath: string;
|
|
73
|
-
};
|
|
74
|
-
/** Feature flags. */
|
|
75
|
-
readonly features: EngineFeatures;
|
|
76
|
-
/**
|
|
77
|
-
* Runtime capability the host passes to the provider adapter row.
|
|
78
|
-
*
|
|
79
|
-
* A row is imported by URL while an application imports its own modules by
|
|
80
|
-
* path, producing separate module instances. Carrying the handler on the
|
|
81
|
-
* configuration is what lets the host hand it to the very instance the loader
|
|
82
|
-
* will activate; a module-level registration made elsewhere would be invisible
|
|
83
|
-
* to it. Never serialized — the composed document holds only the rows.
|
|
84
|
-
*/
|
|
85
|
-
readonly providerHandler?: unknown;
|
|
86
|
-
/** Model adapter selection and provider routes. */
|
|
87
|
-
readonly model: ModelAdapterConfig;
|
|
88
|
-
/** Absolute path of the composition document that mounts the engine. */
|
|
89
|
-
readonly configPath: string;
|
|
90
|
-
/** Absolute path of the settings document, read for operator preferences. */
|
|
91
|
-
readonly settingsPath: string;
|
|
92
|
-
/** Absolute directory handed to the engine as its default workspace. */
|
|
93
|
-
readonly workspacePath: string;
|
|
94
|
-
/** Absolute directory holding persisted engine sessions. */
|
|
95
|
-
readonly sessionStorePath: string;
|
|
96
|
-
/**
|
|
97
|
-
* Absolute directory for host-owned runtime state.
|
|
98
|
-
*
|
|
99
|
-
* Kept separate from the session store because it is disposable: the host
|
|
100
|
-
* regenerates its composed composition here on every start.
|
|
101
|
-
*/
|
|
102
|
-
readonly runtimePath: string;
|
|
103
|
-
/** Log every activation transition of the Cordis tree. */
|
|
104
|
-
readonly trace: boolean;
|
|
105
|
-
/**
|
|
106
|
-
* Whether the settings document itself stated `features.enabled`.
|
|
107
|
-
*
|
|
108
|
-
* Distinguishes an operator decision from a built-in default. `features.enabled`
|
|
109
|
-
* resolves to a boolean either way, so without this the access layer cannot
|
|
110
|
-
* tell a file that says off apart from nobody having said anything, and would treat every
|
|
111
|
-
* deployment as pinned.
|
|
112
|
-
*/
|
|
113
|
-
readonly featuresEnabledDeclared: boolean;
|
|
114
|
-
}
|
|
115
|
-
/** One layer of configuration read from the settings document. */
|
|
116
|
-
interface ConfigDocument {
|
|
117
|
-
readonly nativeProvider?: {
|
|
118
|
-
readonly socketPath?: string;
|
|
119
|
-
};
|
|
120
|
-
readonly features?: Partial<EngineFeatures>;
|
|
121
|
-
readonly model?: Partial<ModelAdapterConfig> & {
|
|
122
|
-
readonly providers?: Record<string, Record<string, unknown>>;
|
|
123
|
-
};
|
|
124
|
-
readonly workspacePath?: string;
|
|
125
|
-
readonly sessionStorePath?: string;
|
|
126
|
-
readonly trace?: boolean;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Read the host settings document.
|
|
130
|
-
*
|
|
131
|
-
* A missing file is not an error — the host then runs on defaults plus the
|
|
132
|
-
* environment. A present but malformed file is an error: silently ignoring an
|
|
133
|
-
* operator's explicit configuration is how a deployment ends up running a
|
|
134
|
-
* different engine than the one on disk.
|
|
135
|
-
*
|
|
136
|
-
* @param settingsPath - absolute path of the settings document.
|
|
137
|
-
* @returns the settings mapping, or an empty mapping when the file is absent.
|
|
138
|
-
* @throws when the file exists but does not parse to a settings mapping.
|
|
139
|
-
*/
|
|
140
|
-
export declare function readConfigDocument(settingsPath: string): ConfigDocument;
|
|
141
|
-
/**
|
|
142
|
-
* Resolve the host configuration from defaults, the settings document, and
|
|
143
|
-
* environment variables.
|
|
144
|
-
* @param options - optional explicit document paths, workspace, and store path.
|
|
145
|
-
* @returns the fully resolved configuration.
|
|
146
|
-
* @throws when a document is malformed or names an unknown provider mode.
|
|
147
|
-
*/
|
|
148
|
-
export declare function resolveCordisHostConfig(options?: {
|
|
149
|
-
/** Explicit composition path, overriding `LIBRE_CORDIS_CONFIG`. */
|
|
150
|
-
configPath?: string;
|
|
151
|
-
/** Explicit settings path, overriding `LIBRE_CORDIS_SETTINGS`. */
|
|
152
|
-
settingsPath?: string;
|
|
153
|
-
/** Absolute directory the engine may treat as its workspace. */
|
|
154
|
-
workspacePath?: string;
|
|
155
|
-
/** Absolute directory for persisted sessions. */
|
|
156
|
-
sessionStorePath?: string;
|
|
157
|
-
}): CordisHostConfig;
|
|
158
|
-
export {};
|
|
159
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cordis/host/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Libre WebUI
|
|
3
|
-
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at:
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Resolved configuration for the embedded Cordis host and its DSH engine.
|
|
19
|
-
*
|
|
20
|
-
* The host is feature-flagged off by default: Libre WebUI must behave exactly
|
|
21
|
-
* as before unless an operator opts in, and an opted-in host that cannot start
|
|
22
|
-
* must fail loudly rather than silently degrading to a half-mounted engine.
|
|
23
|
-
*
|
|
24
|
-
* Precedence, lowest to highest: built-in defaults, the `cordis.patch.yml`
|
|
25
|
-
* document, `LIBRE_CORDIS_*` environment variables. Secrets are never stored
|
|
26
|
-
* in the config document — a provider names the environment variable that
|
|
27
|
-
* holds its key, and the adapter resolves that variable per request.
|
|
28
|
-
*
|
|
29
|
-
* @module cordis/host/config
|
|
30
|
-
*/
|
|
31
|
-
import path from 'node:path';
|
|
32
|
-
import { readSettingsFile } from './composition.js';
|
|
33
|
-
import { resolveDataDirectory } from '../../utils/dataDirectory.js';
|
|
34
|
-
/** Default file name of the host settings document. */
|
|
35
|
-
export const CORDIS_SETTINGS_FILENAME = 'cordis.config.yml';
|
|
36
|
-
/**
|
|
37
|
-
* Default file name of the composition document.
|
|
38
|
-
*
|
|
39
|
-
* Deliberately the same name Cordis uses, so an operator who already knows the
|
|
40
|
-
* Cordis loader recognises it: a top-level YAML array of loader entries.
|
|
41
|
-
*/
|
|
42
|
-
export const CORDIS_PATCH_FILENAME = 'cordis.patch.yml';
|
|
43
|
-
/** Read a boolean environment variable, falling back when unset or malformed. */
|
|
44
|
-
function readBooleanEnv(name, fallback) {
|
|
45
|
-
const raw = process.env[name];
|
|
46
|
-
if (raw === undefined || raw.trim() === '')
|
|
47
|
-
return fallback;
|
|
48
|
-
const normalized = raw.trim().toLowerCase();
|
|
49
|
-
if (['1', 'true', 'yes', 'on'].includes(normalized))
|
|
50
|
-
return true;
|
|
51
|
-
if (['0', 'false', 'no', 'off'].includes(normalized))
|
|
52
|
-
return false;
|
|
53
|
-
return fallback;
|
|
54
|
-
}
|
|
55
|
-
/** Read a string environment variable, falling back when unset or blank. */
|
|
56
|
-
function readStringEnv(name, fallback) {
|
|
57
|
-
const raw = process.env[name];
|
|
58
|
-
if (raw === undefined || raw.trim() === '')
|
|
59
|
-
return fallback;
|
|
60
|
-
return raw.trim();
|
|
61
|
-
}
|
|
62
|
-
/** Empty path settings mean the app-owned default, never the launch directory. */
|
|
63
|
-
function resolveEngineDirectory(explicit, envName, documented, fallback) {
|
|
64
|
-
for (const value of [explicit, process.env[envName]?.trim(), documented]) {
|
|
65
|
-
if (value === undefined || value === null)
|
|
66
|
-
continue;
|
|
67
|
-
if (typeof value !== 'string')
|
|
68
|
-
throw new Error(`${envName} and its directory setting must be strings.`);
|
|
69
|
-
if (value.trim() !== '')
|
|
70
|
-
return path.resolve(value);
|
|
71
|
-
}
|
|
72
|
-
return path.resolve(fallback);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Read a value where an empty string is a decision rather than an absence.
|
|
76
|
-
*
|
|
77
|
-
* The model route is the case that matters: naming none is how a composition
|
|
78
|
-
* says it mounts no adapter, and the generic environment reader would treat
|
|
79
|
-
* that as "unset" and substitute the default, turning a deliberate opt-out back
|
|
80
|
-
* into a route nothing serves.
|
|
81
|
-
*
|
|
82
|
-
* @param name - environment variable overriding the document.
|
|
83
|
-
* @param documented - value the settings document stated, if any.
|
|
84
|
-
* @param fallback - value used when neither source says anything.
|
|
85
|
-
* @returns the effective value.
|
|
86
|
-
*/
|
|
87
|
-
function readStringEnvHonouringEmpty(name, documented, fallback) {
|
|
88
|
-
const raw = process.env[name];
|
|
89
|
-
if (raw !== undefined && raw.trim() !== '')
|
|
90
|
-
return raw.trim();
|
|
91
|
-
if (documented === undefined || documented === null)
|
|
92
|
-
return fallback;
|
|
93
|
-
return String(documented).trim();
|
|
94
|
-
}
|
|
95
|
-
/** Parse the provider mode, rejecting unknown values instead of guessing. */
|
|
96
|
-
function readProviderMode(value) {
|
|
97
|
-
if (value === 'deepseek' ||
|
|
98
|
-
value === 'pi-ai' ||
|
|
99
|
-
value === 'libre-webui' ||
|
|
100
|
-
value === 'none') {
|
|
101
|
-
return value;
|
|
102
|
-
}
|
|
103
|
-
if (value === undefined || value === null || value === '')
|
|
104
|
-
return 'libre-webui';
|
|
105
|
-
throw new Error(`cordis host: unknown model provider "${String(value)}" ` +
|
|
106
|
-
'(expected libre-webui, deepseek, pi-ai, or none)');
|
|
107
|
-
}
|
|
108
|
-
/** Narrow an unknown value to a plain record. */
|
|
109
|
-
function asRecord(value) {
|
|
110
|
-
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
111
|
-
return undefined;
|
|
112
|
-
}
|
|
113
|
-
return value;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Read the host settings document.
|
|
117
|
-
*
|
|
118
|
-
* A missing file is not an error — the host then runs on defaults plus the
|
|
119
|
-
* environment. A present but malformed file is an error: silently ignoring an
|
|
120
|
-
* operator's explicit configuration is how a deployment ends up running a
|
|
121
|
-
* different engine than the one on disk.
|
|
122
|
-
*
|
|
123
|
-
* @param settingsPath - absolute path of the settings document.
|
|
124
|
-
* @returns the settings mapping, or an empty mapping when the file is absent.
|
|
125
|
-
* @throws when the file exists but does not parse to a settings mapping.
|
|
126
|
-
*/
|
|
127
|
-
export function readConfigDocument(settingsPath) {
|
|
128
|
-
return readSettingsFile(settingsPath);
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Resolve the host configuration from defaults, the settings document, and
|
|
132
|
-
* environment variables.
|
|
133
|
-
* @param options - optional explicit document paths, workspace, and store path.
|
|
134
|
-
* @returns the fully resolved configuration.
|
|
135
|
-
* @throws when a document is malformed or names an unknown provider mode.
|
|
136
|
-
*/
|
|
137
|
-
export function resolveCordisHostConfig(options = {}) {
|
|
138
|
-
const configPath = path.resolve(options.configPath ??
|
|
139
|
-
readStringEnv('LIBRE_CORDIS_CONFIG', path.join(process.cwd(), CORDIS_PATCH_FILENAME)));
|
|
140
|
-
// Settings default to sitting beside the composition, so pointing
|
|
141
|
-
// LIBRE_CORDIS_CONFIG at a deployment directory moves both documents at once.
|
|
142
|
-
const settingsPath = path.resolve(options.settingsPath ??
|
|
143
|
-
readStringEnv('LIBRE_CORDIS_SETTINGS', path.join(path.dirname(configPath), CORDIS_SETTINGS_FILENAME)));
|
|
144
|
-
const document = readConfigDocument(settingsPath);
|
|
145
|
-
const documentFeatures = document.features ?? {};
|
|
146
|
-
const documentModel = document.model ?? {};
|
|
147
|
-
const dataDirectory = resolveDataDirectory();
|
|
148
|
-
const workspacePath = resolveEngineDirectory(options.workspacePath, 'LIBRE_CORDIS_WORKSPACE', document.workspacePath, path.join(dataDirectory, 'cordis-workspace'));
|
|
149
|
-
const sessionStorePath = resolveEngineDirectory(options.sessionStorePath, 'LIBRE_CORDIS_SESSION_STORE', document.sessionStorePath, path.join(dataDirectory, 'cordis-sessions'));
|
|
150
|
-
const providers = asRecord(documentModel.providers) ?? {};
|
|
151
|
-
const nativeSocket = process.env.LIBRE_DSH_PROVIDER_SOCKET ??
|
|
152
|
-
document.nativeProvider?.socketPath;
|
|
153
|
-
if (nativeSocket &&
|
|
154
|
-
(typeof nativeSocket !== 'string' ||
|
|
155
|
-
!path.isAbsolute(nativeSocket) ||
|
|
156
|
-
nativeSocket !== nativeSocket.trim() ||
|
|
157
|
-
[...nativeSocket].some(character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127)))
|
|
158
|
-
throw new Error('Native DSH provider socket must be an absolute path.');
|
|
159
|
-
return {
|
|
160
|
-
...(nativeSocket ? { nativeProvider: { socketPath: nativeSocket } } : {}),
|
|
161
|
-
configPath,
|
|
162
|
-
settingsPath,
|
|
163
|
-
featuresEnabledDeclared: documentFeatures.enabled === true || documentFeatures.enabled === false,
|
|
164
|
-
workspacePath,
|
|
165
|
-
sessionStorePath,
|
|
166
|
-
runtimePath: path.join(dataDirectory, 'cordis-runtime'),
|
|
167
|
-
trace: readBooleanEnv('LIBRE_CORDIS_TRACE', document.trace === true),
|
|
168
|
-
features: {
|
|
169
|
-
enabled: readBooleanEnv('LIBRE_CORDIS_ENABLED', documentFeatures.enabled === true),
|
|
170
|
-
streaming: readBooleanEnv('LIBRE_CORDIS_STREAMING', documentFeatures.streaming !== false),
|
|
171
|
-
tools: readBooleanEnv('LIBRE_CORDIS_TOOLS', documentFeatures.tools !== false),
|
|
172
|
-
persistence: readBooleanEnv('LIBRE_CORDIS_PERSISTENCE', documentFeatures.persistence !== false),
|
|
173
|
-
},
|
|
174
|
-
model: {
|
|
175
|
-
provider: readProviderMode(readStringEnv('LIBRE_CORDIS_MODEL_PROVIDER', String(documentModel.provider ?? '')) || undefined),
|
|
176
|
-
apiKeyEnv: readStringEnv('LIBRE_CORDIS_API_KEY_ENV', String(documentModel.apiKeyEnv ?? 'OPENAI_API_KEY')),
|
|
177
|
-
baseUrl: readStringEnv('LIBRE_CORDIS_BASE_URL', String(documentModel.baseUrl ?? '')),
|
|
178
|
-
route: readStringEnvHonouringEmpty('LIBRE_CORDIS_MODEL_ROUTE', documentModel.route, 'libre-webui'),
|
|
179
|
-
model: readStringEnv('LIBRE_CORDIS_MODEL', String(documentModel.model ?? '')),
|
|
180
|
-
providers: providers,
|
|
181
|
-
},
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cordis/host/config.ts"],"names":[],"mappings":"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"}
|