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.
Files changed (432) hide show
  1. package/README.md +29 -65
  2. package/backend/dist/db.js +1 -1
  3. package/backend/dist/index.d.ts.map +1 -1
  4. package/backend/dist/index.js +13 -36
  5. package/backend/dist/index.js.map +1 -1
  6. package/backend/dist/main.js +0 -12
  7. package/backend/dist/main.js.map +1 -1
  8. package/backend/dist/middleware/cors.d.ts.map +1 -1
  9. package/backend/dist/middleware/cors.js +5 -0
  10. package/backend/dist/middleware/cors.js.map +1 -1
  11. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
  12. package/backend/dist/persistence/postgresExtensionRepositories.js +2 -4
  13. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
  14. package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
  15. package/backend/dist/persistence/postgresMigrationRegistry.js +2 -0
  16. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
  17. package/backend/dist/persistence/postgresWorkRunThinkMigration.d.ts +9 -0
  18. package/backend/dist/persistence/postgresWorkRunThinkMigration.d.ts.map +1 -0
  19. package/backend/dist/persistence/postgresWorkRunThinkMigration.js +39 -0
  20. package/backend/dist/persistence/postgresWorkRunThinkMigration.js.map +1 -0
  21. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  22. package/backend/dist/persistence/sqliteExtensionRepositories.js +2 -4
  23. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  24. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
  25. package/backend/dist/persistence/sqliteMigrations.js +20 -0
  26. package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
  27. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
  28. package/backend/dist/persistence/sqliteToPostgresMigration.js +1 -0
  29. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
  30. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -1
  31. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +3 -2
  32. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -1
  33. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -1
  34. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +3 -3
  35. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -1
  36. package/backend/dist/platform/workPersistence/types.d.ts +5 -0
  37. package/backend/dist/platform/workPersistence/types.d.ts.map +1 -1
  38. package/backend/dist/platform/workPersistence/types.js.map +1 -1
  39. package/backend/dist/routes/agentCli.d.ts.map +1 -1
  40. package/backend/dist/routes/agentCli.js +8 -3
  41. package/backend/dist/routes/agentCli.js.map +1 -1
  42. package/backend/dist/routes/{cordis.d.ts → strands.d.ts} +1 -1
  43. package/backend/dist/routes/strands.d.ts.map +1 -0
  44. package/backend/dist/routes/strands.js +300 -0
  45. package/backend/dist/routes/strands.js.map +1 -0
  46. package/backend/dist/routes/work.d.ts.map +1 -1
  47. package/backend/dist/routes/work.js +26 -23
  48. package/backend/dist/routes/work.js.map +1 -1
  49. package/backend/dist/services/agentAccessService.d.ts +0 -5
  50. package/backend/dist/services/agentAccessService.d.ts.map +1 -1
  51. package/backend/dist/services/agentAccessService.js +7 -35
  52. package/backend/dist/services/agentAccessService.js.map +1 -1
  53. package/backend/dist/services/agentCliService.d.ts +16 -23
  54. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  55. package/backend/dist/services/agentCliService.js +85 -112
  56. package/backend/dist/services/agentCliService.js.map +1 -1
  57. package/backend/dist/services/authService.d.ts +3 -3
  58. package/backend/dist/services/authService.d.ts.map +1 -1
  59. package/backend/dist/services/authService.js +3 -4
  60. package/backend/dist/services/authService.js.map +1 -1
  61. package/backend/dist/services/authorizationService.d.ts +1 -1
  62. package/backend/dist/services/authorizationService.d.ts.map +1 -1
  63. package/backend/dist/services/authorizationService.js +17 -8
  64. package/backend/dist/services/authorizationService.js.map +1 -1
  65. package/backend/dist/services/followUpService.d.ts +4 -1
  66. package/backend/dist/services/followUpService.d.ts.map +1 -1
  67. package/backend/dist/services/followUpService.js +23 -2
  68. package/backend/dist/services/followUpService.js.map +1 -1
  69. package/backend/dist/services/pluginService.d.ts.map +1 -1
  70. package/backend/dist/services/pluginService.js +10 -6
  71. package/backend/dist/services/pluginService.js.map +1 -1
  72. package/backend/dist/services/pluginUsageService.d.ts +0 -34
  73. package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
  74. package/backend/dist/services/pluginUsageService.js +0 -62
  75. package/backend/dist/services/pluginUsageService.js.map +1 -1
  76. package/backend/dist/services/strandsAccessService.d.ts +26 -0
  77. package/backend/dist/services/strandsAccessService.d.ts.map +1 -0
  78. package/backend/dist/services/strandsAccessService.js +95 -0
  79. package/backend/dist/services/strandsAccessService.js.map +1 -0
  80. package/backend/dist/services/thinkingSummaryService.d.ts +2 -3
  81. package/backend/dist/services/thinkingSummaryService.d.ts.map +1 -1
  82. package/backend/dist/services/thinkingSummaryService.js +13 -27
  83. package/backend/dist/services/thinkingSummaryService.js.map +1 -1
  84. package/backend/dist/services/titleGenerationService.d.ts +7 -18
  85. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  86. package/backend/dist/services/titleGenerationService.js +15 -36
  87. package/backend/dist/services/titleGenerationService.js.map +1 -1
  88. package/backend/dist/services/workAgentService.d.ts +1 -1
  89. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  90. package/backend/dist/services/workAgentService.js +17 -60
  91. package/backend/dist/services/workAgentService.js.map +1 -1
  92. package/backend/dist/services/workModelProviderService.d.ts +1 -4
  93. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  94. package/backend/dist/services/workModelProviderService.js +60 -50
  95. package/backend/dist/services/workModelProviderService.js.map +1 -1
  96. package/backend/dist/services/workTaskService.d.ts +3 -2
  97. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  98. package/backend/dist/services/workTaskService.js +11 -7
  99. package/backend/dist/services/workTaskService.js.map +1 -1
  100. package/backend/dist/strands/catalog.d.ts +57 -0
  101. package/backend/dist/strands/catalog.d.ts.map +1 -0
  102. package/backend/dist/strands/catalog.js +241 -0
  103. package/backend/dist/strands/catalog.js.map +1 -0
  104. package/backend/dist/strands/engine.d.ts +131 -0
  105. package/backend/dist/strands/engine.d.ts.map +1 -0
  106. package/backend/dist/strands/engine.js +477 -0
  107. package/backend/dist/strands/engine.js.map +1 -0
  108. package/backend/dist/strands/harness.d.ts +14 -0
  109. package/backend/dist/strands/harness.d.ts.map +1 -0
  110. package/backend/dist/strands/harness.js +41 -0
  111. package/backend/dist/strands/harness.js.map +1 -0
  112. package/backend/dist/strands/model.d.ts +24 -0
  113. package/backend/dist/strands/model.d.ts.map +1 -0
  114. package/backend/dist/strands/model.js +381 -0
  115. package/backend/dist/strands/model.js.map +1 -0
  116. package/backend/dist/strands/runtime.d.ts +4 -0
  117. package/backend/dist/strands/runtime.d.ts.map +1 -0
  118. package/backend/dist/{cordis/work-model.js → strands/runtime.js} +16 -12
  119. package/backend/dist/strands/runtime.js.map +1 -0
  120. package/backend/dist/strands/sandbox.d.ts +24 -0
  121. package/backend/dist/strands/sandbox.d.ts.map +1 -0
  122. package/backend/dist/strands/sandbox.js +156 -0
  123. package/backend/dist/strands/sandbox.js.map +1 -0
  124. package/backend/dist/strands/work-driver.d.ts +11 -0
  125. package/backend/dist/strands/work-driver.d.ts.map +1 -0
  126. package/backend/dist/strands/work-driver.js +443 -0
  127. package/backend/dist/strands/work-driver.js.map +1 -0
  128. package/backend/dist/strands/work-model.d.ts +7 -0
  129. package/backend/dist/strands/work-model.d.ts.map +1 -0
  130. package/backend/dist/strands/work-model.js +42 -0
  131. package/backend/dist/strands/work-model.js.map +1 -0
  132. package/backend/dist/types/work.d.ts +7 -11
  133. package/backend/dist/types/work.d.ts.map +1 -1
  134. package/backend/dist/types/work.js.map +1 -1
  135. package/backend/dist/utils/bedrockMantle.d.ts +46 -0
  136. package/backend/dist/utils/bedrockMantle.d.ts.map +1 -0
  137. package/backend/dist/utils/bedrockMantle.js +206 -0
  138. package/backend/dist/utils/bedrockMantle.js.map +1 -0
  139. package/backend/dist/utils/corsOriginPolicy.d.ts +10 -0
  140. package/backend/dist/utils/corsOriginPolicy.d.ts.map +1 -0
  141. package/backend/dist/utils/corsOriginPolicy.js +70 -0
  142. package/backend/dist/utils/corsOriginPolicy.js.map +1 -0
  143. package/backend/dist/utils/pluginChatAdapter.d.ts +36 -0
  144. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  145. package/backend/dist/utils/pluginChatAdapter.js +122 -47
  146. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  147. package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
  148. package/backend/dist/utils/pluginDefinitionTrust.js +3 -2
  149. package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
  150. package/backend/dist/utils/pluginValidation.d.ts +1 -1
  151. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  152. package/backend/dist/utils/pluginValidation.js +11 -0
  153. package/backend/dist/utils/pluginValidation.js.map +1 -1
  154. package/backend/package.json +6 -36
  155. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  156. package/frontend/dist/artifact-runtime/babel.js +170 -170
  157. package/frontend/dist/artifact-runtime/framer-motion.js +3 -3
  158. package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
  159. package/frontend/dist/artifact-runtime/mathjs.js +1 -1
  160. package/frontend/dist/artifact-runtime/mermaid.js +1 -1
  161. package/frontend/dist/artifact-runtime/plotly.js +1 -1
  162. package/frontend/dist/artifact-runtime/react.js +3 -3
  163. package/frontend/dist/assets/index-D99DS5c6.js +57 -0
  164. package/frontend/dist/assets/index-Dz1JufgZ.css +1 -0
  165. package/frontend/dist/assets/{markdown-math-D1Bj3pDB.css → markdown-math-DzFXvcrH.css} +1 -1
  166. package/frontend/dist/index.html +34 -34
  167. package/frontend/dist/js/{ArtifactContainer-D4v4l15L.js → ArtifactContainer-Cn7X9HGm.js} +1 -1
  168. package/frontend/dist/js/{ArtifactDemoPage-B2uaVpsi.js → ArtifactDemoPage-Ddpy2O_v.js} +1 -1
  169. package/frontend/dist/js/{ArtifactSandboxFrame-DlWJHI-r.js → ArtifactSandboxFrame-CdsAqv8H.js} +1 -1
  170. package/frontend/dist/js/{ArtifactSlideOutPanel-laZ98QKB.js → ArtifactSlideOutPanel-cVd9X80o.js} +1 -1
  171. package/frontend/dist/js/AutomationModal-B4UaWjkk.js +1 -0
  172. package/frontend/dist/js/AutomationsPage-huCrvLUp.js +1 -0
  173. package/frontend/dist/js/{AvatarUpload-KaBaTKoG.js → AvatarUpload-CG-w6Mpt.js} +1 -1
  174. package/frontend/dist/js/{Button-CGMYia4g.js → Button-j68Q8KVh.js} +1 -1
  175. package/frontend/dist/js/{CalendarPage-Dc7r-86c.js → CalendarPage-CZXT1w99.js} +1 -1
  176. package/frontend/dist/js/ChannelsPage-DbtdHnSL.js +1 -0
  177. package/frontend/dist/js/ChatPage-BZE65kiq.js +14 -0
  178. package/frontend/dist/js/ConnectModels-DD4bLgdq.js +1 -0
  179. package/frontend/dist/js/{EvaluationsPage-BB7sPhIR.js → EvaluationsPage-Dq53LaXd.js} +2 -2
  180. package/frontend/dist/js/{FirstTimeSetup-elqSi9JH.js → FirstTimeSetup-BoJIfuQT.js} +1 -1
  181. package/frontend/dist/js/GalleryPage-DKwqeB2A.js +1 -0
  182. package/frontend/dist/js/HomePage-C8bCJfls.js +1 -0
  183. package/frontend/dist/js/LanguageSwitcher-B_YyU5JG.js +1 -0
  184. package/frontend/dist/js/{Logo-HZvdAk2c.js → Logo-DnfVtjgj.js} +1 -1
  185. package/frontend/dist/js/{LogoMark-GJnfMXsk.js → LogoMark-BzObGdA9.js} +1 -1
  186. package/frontend/dist/js/{ModelManagerModals-Bk6OQzJI.js → ModelManagerModals-BzjZ-QwL.js} +1 -1
  187. package/frontend/dist/js/NotesPage-CnaAp_w_.js +3 -0
  188. package/frontend/dist/js/{OptimizedSyntaxHighlighter-CzzV6ONG.js → OptimizedSyntaxHighlighter-B0g8cxZQ.js} +1 -1
  189. package/frontend/dist/js/OptimizedSyntaxHighlighter-B_BbHeO1.js +1 -0
  190. package/frontend/dist/js/{PasswordStrengthMeter-DasfJa4P.js → PasswordStrengthMeter-DI4RDv67.js} +1 -1
  191. package/frontend/dist/js/{PersonasPage-CIJINcQK.js → PersonasPage-CH3GUKph.js} +2 -2
  192. package/frontend/dist/js/PluginUsagePage-d54K2gAj.js +1 -0
  193. package/frontend/dist/js/{RichMessageContent-DxCHlUlY.js → RichMessageContent-BfYbVBFz.js} +2 -2
  194. package/frontend/dist/js/RichMessageContent-CDxxs3Tt.js +1 -0
  195. package/frontend/dist/js/SettingsModal-BvtJcvow.js +19 -0
  196. package/frontend/dist/js/{SettingsToggle-oxvw7ulA.js → SettingsToggle-DrJ0Bapi.js} +1 -1
  197. package/frontend/dist/js/{ShareDialog-Bhpt_Y1N.js → ShareDialog-DaSxkTKS.js} +1 -1
  198. package/frontend/dist/js/StrandsPage-BQwz0mWq.js +1 -0
  199. package/frontend/dist/js/{SystemPage-BfhVXqar.js → SystemPage-BqNZoFxR.js} +1 -1
  200. package/frontend/dist/js/{TurnstileWidget-CVepEMEQ.js → TurnstileWidget-tI50c7Kc.js} +1 -1
  201. package/frontend/dist/js/{UserManagementPage-2yHv89ZA.js → UserManagementPage-UvPjA9RP.js} +1 -1
  202. package/frontend/dist/js/UserManagementPanel-C3T1ReJJ.js +1 -0
  203. package/frontend/dist/js/{WhatsNewModal-Dl69bG2T.js → WhatsNewModal-CLcU2Ugk.js} +1 -1
  204. package/frontend/dist/js/WorkPage-BpjGn--1.js +8 -0
  205. package/frontend/dist/js/api-BrHW-VGd.js +14 -0
  206. package/frontend/dist/js/api-K_hhqPdx.js +1 -0
  207. package/frontend/dist/js/{appNavigation-R8iKverf.js → appNavigation-B6xYIgLi.js} +1 -1
  208. package/frontend/dist/js/appStore-DkRdQQeY.js +2 -0
  209. package/frontend/dist/js/appVersion-BVtSqLVj.js +1 -0
  210. package/frontend/dist/js/ar-XTZGEtBr.js +2 -0
  211. package/frontend/dist/js/authStore-DBS6Kbvh.js +1 -0
  212. package/frontend/dist/js/{authStore-D8fc-Hl0.js → authStore-DjAsRpNL.js} +3 -3
  213. package/frontend/dist/js/bn-JiK7ZWmy.js +2 -0
  214. package/frontend/dist/js/chatStore-DpVxt9VX.js +3 -0
  215. package/frontend/dist/js/{client-BeJbHHWx.js → client-DppLngAs.js} +2 -2
  216. package/frontend/dist/js/{config-D6Kcp5n3.js → config-4_s8hdqO.js} +1 -1
  217. package/frontend/dist/js/cs-D8ju18CO.js +2 -0
  218. package/frontend/dist/js/da-BJWcAoUc.js +2 -0
  219. package/frontend/dist/js/de-CLJLmy69.js +2 -0
  220. package/frontend/dist/js/es-BvqHEL-3.js +2 -0
  221. package/frontend/dist/js/{evaluationsApi-2YwZBPk5.js → evaluationsApi-DyuW7IJ_.js} +1 -1
  222. package/frontend/dist/js/fr-B8ZoZomI.js +2 -0
  223. package/frontend/dist/js/hi-AzJLALo-.js +2 -0
  224. package/frontend/dist/js/id-DZYGQhvC.js +2 -0
  225. package/frontend/dist/js/is-Da_kvtzW.js +2 -0
  226. package/frontend/dist/js/it-B90zSlqn.js +2 -0
  227. package/frontend/dist/js/ja-DU_K1GOr.js +2 -0
  228. package/frontend/dist/js/ko-DicfoO-e.js +2 -0
  229. package/frontend/dist/js/{markdown-CZ1tYEW8.js → markdown-DU84620G.js} +1 -1
  230. package/frontend/dist/js/{markdown-core-KjS96SYW.js → markdown-core-Cyql92Hg.js} +1 -1
  231. package/frontend/dist/js/{markdown-html-DQEwrWcf.js → markdown-html-CUc2fCgY.js} +1 -1
  232. package/frontend/dist/js/{markdown-math-CKi32S5d.js → markdown-math-DxPfMKvO.js} +1 -1
  233. package/frontend/dist/js/{markdownHtml-lrXhxBhK.js → markdownHtml-KhS0cFNH.js} +1 -1
  234. package/frontend/dist/js/markdownMath-CsfRQAcz.js +1 -0
  235. package/frontend/dist/js/{messageCodeStyles-D4haBw80.js → messageCodeStyles-CuQPkfEK.js} +1 -1
  236. package/frontend/dist/js/ms-CfH7wjUY.js +2 -0
  237. package/frontend/dist/js/nl-ELlOz-B3.js +2 -0
  238. package/frontend/dist/js/pl-33dayyUk.js +2 -0
  239. package/frontend/dist/js/pt-aIXSQPCT.js +2 -0
  240. package/frontend/dist/js/react-vendor-CR5VJ85Q.js +9 -0
  241. package/frontend/dist/js/{router-vendor-HZm4FR0A.js → router-vendor-DqMnEJWK.js} +1 -1
  242. package/frontend/dist/js/ru-BSvGtBtW.js +2 -0
  243. package/frontend/dist/js/{standalone-DbyFjvTU.js → standalone-D_lg5NC9.js} +1 -1
  244. package/frontend/dist/js/strandsApi-BFbeEpAY.js +2 -0
  245. package/frontend/dist/js/sv-B7KOz81W.js +2 -0
  246. package/frontend/dist/js/{syntax-highlight-DNc3FFCa.js → syntax-highlight-D7dQ5s5-.js} +1 -1
  247. package/frontend/dist/js/{teamEventStream-omPy51va.js → teamEventStream-DsAS6P4m.js} +1 -1
  248. package/frontend/dist/js/th-DgpjGxvA.js +2 -0
  249. package/frontend/dist/js/tr-BQTbl2h-.js +2 -0
  250. package/frontend/dist/js/{ui-D5-4niRk.js → ui-Aq8MP7Ph.js} +2 -2
  251. package/frontend/dist/js/ui-vendor-DVTj_sKN.js +1 -0
  252. package/frontend/dist/js/uk-JLymloot.js +2 -0
  253. package/frontend/dist/js/{useChat-DnGClJeX.js → useChat-D3ZAGz70.js} +4 -4
  254. package/frontend/dist/js/useDialogFocus-zSGHkpE4.js +1 -0
  255. package/frontend/dist/js/useDictation-B6l8QzeM.js +1 -0
  256. package/frontend/dist/js/{useQuery-hWmQjdLu.js → useQuery-BTKpXudI.js} +1 -1
  257. package/frontend/dist/js/{useTranslation-B9kflK9S.js → useTranslation-Boi0fB1B.js} +1 -1
  258. package/frontend/dist/js/utils-B-Bhh1pF.js +1 -0
  259. package/frontend/dist/js/utils-vendor-DPJG-EG_.js +1 -0
  260. package/frontend/dist/js/vi-BXdLOJ8q.js +2 -0
  261. package/frontend/dist/js/{work-DmJpVPPO.js → work-CdbmBok5.js} +1 -1
  262. package/frontend/dist/js/workApi-D1xtiG3Q.js +1 -0
  263. package/frontend/dist/js/{workApi-C5InfT8x.js → workApi-UPxumrEF.js} +1 -1
  264. package/frontend/dist/js/workModels-BM2Zyiba.js +1 -0
  265. package/frontend/dist/js/zh-gdUf9sXa.js +2 -0
  266. package/package.json +11 -40
  267. package/plugins/anthropic.json +3 -1
  268. package/plugins/bedrock.json +86 -0
  269. package/plugins/openrouter.json +2 -0
  270. package/backend/dist/cordis/contracts.d.ts +0 -270
  271. package/backend/dist/cordis/contracts.d.ts.map +0 -1
  272. package/backend/dist/cordis/contracts.js +0 -32
  273. package/backend/dist/cordis/contracts.js.map +0 -1
  274. package/backend/dist/cordis/dsh/chat-model.d.ts +0 -16
  275. package/backend/dist/cordis/dsh/chat-model.d.ts.map +0 -1
  276. package/backend/dist/cordis/dsh/chat-model.js +0 -104
  277. package/backend/dist/cordis/dsh/chat-model.js.map +0 -1
  278. package/backend/dist/cordis/dsh/engine-plugin.d.ts +0 -186
  279. package/backend/dist/cordis/dsh/engine-plugin.d.ts.map +0 -1
  280. package/backend/dist/cordis/dsh/engine-plugin.js +0 -1116
  281. package/backend/dist/cordis/dsh/engine-plugin.js.map +0 -1
  282. package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts +0 -175
  283. package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts.map +0 -1
  284. package/backend/dist/cordis/dsh/librewebui-llm-adapter.js +0 -480
  285. package/backend/dist/cordis/dsh/librewebui-llm-adapter.js.map +0 -1
  286. package/backend/dist/cordis/dsh/model-identity.d.ts +0 -12
  287. package/backend/dist/cordis/dsh/model-identity.d.ts.map +0 -1
  288. package/backend/dist/cordis/dsh/model-identity.js +0 -87
  289. package/backend/dist/cordis/dsh/model-identity.js.map +0 -1
  290. package/backend/dist/cordis/dsh/native-provider-client.d.ts +0 -44
  291. package/backend/dist/cordis/dsh/native-provider-client.d.ts.map +0 -1
  292. package/backend/dist/cordis/dsh/native-provider-client.js +0 -524
  293. package/backend/dist/cordis/dsh/native-provider-client.js.map +0 -1
  294. package/backend/dist/cordis/dsh/native-provider-plugin.d.ts +0 -11
  295. package/backend/dist/cordis/dsh/native-provider-plugin.d.ts.map +0 -1
  296. package/backend/dist/cordis/dsh/native-provider-plugin.js +0 -416
  297. package/backend/dist/cordis/dsh/native-provider-plugin.js.map +0 -1
  298. package/backend/dist/cordis/dsh/native-provider-protocol.d.ts +0 -37
  299. package/backend/dist/cordis/dsh/native-provider-protocol.d.ts.map +0 -1
  300. package/backend/dist/cordis/dsh/native-provider-protocol.js +0 -325
  301. package/backend/dist/cordis/dsh/native-provider-protocol.js.map +0 -1
  302. package/backend/dist/cordis/dsh/provider-handler.d.ts +0 -36
  303. package/backend/dist/cordis/dsh/provider-handler.d.ts.map +0 -1
  304. package/backend/dist/cordis/dsh/provider-handler.js +0 -582
  305. package/backend/dist/cordis/dsh/provider-handler.js.map +0 -1
  306. package/backend/dist/cordis/dsh/session-files.d.ts +0 -9
  307. package/backend/dist/cordis/dsh/session-files.d.ts.map +0 -1
  308. package/backend/dist/cordis/dsh/session-files.js +0 -60
  309. package/backend/dist/cordis/dsh/session-files.js.map +0 -1
  310. package/backend/dist/cordis/dsh/session-settings.d.ts +0 -15
  311. package/backend/dist/cordis/dsh/session-settings.d.ts.map +0 -1
  312. package/backend/dist/cordis/dsh/session-settings.js +0 -51
  313. package/backend/dist/cordis/dsh/session-settings.js.map +0 -1
  314. package/backend/dist/cordis/dsh/work-driver.d.ts +0 -12
  315. package/backend/dist/cordis/dsh/work-driver.d.ts.map +0 -1
  316. package/backend/dist/cordis/dsh/work-driver.js +0 -402
  317. package/backend/dist/cordis/dsh/work-driver.js.map +0 -1
  318. package/backend/dist/cordis/dsh/workspace-policy.d.ts +0 -10
  319. package/backend/dist/cordis/dsh/workspace-policy.d.ts.map +0 -1
  320. package/backend/dist/cordis/dsh/workspace-policy.js +0 -44
  321. package/backend/dist/cordis/dsh/workspace-policy.js.map +0 -1
  322. package/backend/dist/cordis/host/composition.d.ts +0 -73
  323. package/backend/dist/cordis/host/composition.d.ts.map +0 -1
  324. package/backend/dist/cordis/host/composition.js +0 -205
  325. package/backend/dist/cordis/host/composition.js.map +0 -1
  326. package/backend/dist/cordis/host/config.d.ts +0 -159
  327. package/backend/dist/cordis/host/config.d.ts.map +0 -1
  328. package/backend/dist/cordis/host/config.js +0 -184
  329. package/backend/dist/cordis/host/config.js.map +0 -1
  330. package/backend/dist/cordis/host/host.d.ts +0 -74
  331. package/backend/dist/cordis/host/host.d.ts.map +0 -1
  332. package/backend/dist/cordis/host/host.js +0 -420
  333. package/backend/dist/cordis/host/host.js.map +0 -1
  334. package/backend/dist/cordis/host/loader-entry.d.ts +0 -41
  335. package/backend/dist/cordis/host/loader-entry.d.ts.map +0 -1
  336. package/backend/dist/cordis/host/loader-entry.js +0 -52
  337. package/backend/dist/cordis/host/loader-entry.js.map +0 -1
  338. package/backend/dist/cordis/host/model.d.ts +0 -45
  339. package/backend/dist/cordis/host/model.d.ts.map +0 -1
  340. package/backend/dist/cordis/host/model.js +0 -54
  341. package/backend/dist/cordis/host/model.js.map +0 -1
  342. package/backend/dist/cordis/host/privacy.d.ts +0 -8
  343. package/backend/dist/cordis/host/privacy.d.ts.map +0 -1
  344. package/backend/dist/cordis/host/privacy.js +0 -73
  345. package/backend/dist/cordis/host/privacy.js.map +0 -1
  346. package/backend/dist/cordis/index.d.ts +0 -14
  347. package/backend/dist/cordis/index.d.ts.map +0 -1
  348. package/backend/dist/cordis/index.js +0 -30
  349. package/backend/dist/cordis/index.js.map +0 -1
  350. package/backend/dist/cordis/runtime.d.ts +0 -97
  351. package/backend/dist/cordis/runtime.d.ts.map +0 -1
  352. package/backend/dist/cordis/runtime.js +0 -231
  353. package/backend/dist/cordis/runtime.js.map +0 -1
  354. package/backend/dist/cordis/work-model.d.ts +0 -7
  355. package/backend/dist/cordis/work-model.d.ts.map +0 -1
  356. package/backend/dist/cordis/work-model.js.map +0 -1
  357. package/backend/dist/routes/cordis.d.ts.map +0 -1
  358. package/backend/dist/routes/cordis.js +0 -440
  359. package/backend/dist/routes/cordis.js.map +0 -1
  360. package/backend/dist/routes/libreClaw.d.ts +0 -3
  361. package/backend/dist/routes/libreClaw.d.ts.map +0 -1
  362. package/backend/dist/routes/libreClaw.js +0 -200
  363. package/backend/dist/routes/libreClaw.js.map +0 -1
  364. package/backend/dist/services/cordisAccessService.d.ts +0 -56
  365. package/backend/dist/services/cordisAccessService.d.ts.map +0 -1
  366. package/backend/dist/services/cordisAccessService.js +0 -98
  367. package/backend/dist/services/cordisAccessService.js.map +0 -1
  368. package/backend/dist/services/libreClawService.d.ts +0 -105
  369. package/backend/dist/services/libreClawService.d.ts.map +0 -1
  370. package/backend/dist/services/libreClawService.js +0 -169
  371. package/backend/dist/services/libreClawService.js.map +0 -1
  372. package/frontend/dist/assets/index-C8_AByBq.css +0 -1
  373. package/frontend/dist/assets/index-DWLnkKwj.js +0 -16
  374. package/frontend/dist/js/AutomationModal-CjjiEZFA.js +0 -1
  375. package/frontend/dist/js/AutomationsPage-jnWmD58y.js +0 -1
  376. package/frontend/dist/js/ChannelsPage-DHPabX1e.js +0 -1
  377. package/frontend/dist/js/ChatPage-ZvGp-iqV.js +0 -14
  378. package/frontend/dist/js/ConnectModels-aUTD6s9B.js +0 -1
  379. package/frontend/dist/js/CordisPage-DZKcpPVj.js +0 -1
  380. package/frontend/dist/js/GalleryPage-CrlNRnkn.js +0 -1
  381. package/frontend/dist/js/HomePage-lR9h7_a1.js +0 -1
  382. package/frontend/dist/js/LanguageSwitcher-CWkbzpxT.js +0 -1
  383. package/frontend/dist/js/LibreClawPage-P19FnNlu.js +0 -1
  384. package/frontend/dist/js/NotesPage-DopG0M4B.js +0 -3
  385. package/frontend/dist/js/OptimizedSyntaxHighlighter-ajqwyBQm.js +0 -1
  386. package/frontend/dist/js/PluginUsagePage-Cj0mUxD8.js +0 -1
  387. package/frontend/dist/js/RichMessageContent-BZndQSJU.js +0 -1
  388. package/frontend/dist/js/SettingsModal-wAuFQOE4.js +0 -19
  389. package/frontend/dist/js/UserManagementPanel-BU95ZPOv.js +0 -1
  390. package/frontend/dist/js/WorkPage-CSderbeT.js +0 -8
  391. package/frontend/dist/js/api-CU-JXx2u.js +0 -1
  392. package/frontend/dist/js/api-DPXCtanG.js +0 -14
  393. package/frontend/dist/js/appStore-BD70bvas.js +0 -2
  394. package/frontend/dist/js/appVersion-C7sxqgMd.js +0 -1
  395. package/frontend/dist/js/ar-Cq-DrSYL.js +0 -2
  396. package/frontend/dist/js/authStore-FNKLFUQp.js +0 -1
  397. package/frontend/dist/js/bn-BqxLh-KL.js +0 -2
  398. package/frontend/dist/js/chatStore-CK5ojwft.js +0 -3
  399. package/frontend/dist/js/cordisApi-BS8QMSV4.js +0 -2
  400. package/frontend/dist/js/cs-D2DDNZf-.js +0 -2
  401. package/frontend/dist/js/da-BciY-TSG.js +0 -2
  402. package/frontend/dist/js/de-DjU_eXQ-.js +0 -2
  403. package/frontend/dist/js/es-ChIEs80I.js +0 -2
  404. package/frontend/dist/js/fr-Bi8BGRW4.js +0 -2
  405. package/frontend/dist/js/hi-BMsCnWg7.js +0 -2
  406. package/frontend/dist/js/i18next-DOICz7ZY.js +0 -1
  407. package/frontend/dist/js/id-CpcN1vhk.js +0 -2
  408. package/frontend/dist/js/is-DkUy2cmP.js +0 -2
  409. package/frontend/dist/js/it-BglK9DRZ.js +0 -2
  410. package/frontend/dist/js/ja-IrprzwLJ.js +0 -2
  411. package/frontend/dist/js/ko--wwEsMPi.js +0 -2
  412. package/frontend/dist/js/markdownMath-B0BpyFBS.js +0 -1
  413. package/frontend/dist/js/ms-BWj59y7-.js +0 -2
  414. package/frontend/dist/js/nl-D-QndW_A.js +0 -2
  415. package/frontend/dist/js/pl-Dw7d7iDV.js +0 -2
  416. package/frontend/dist/js/pt-BI53uHJw.js +0 -2
  417. package/frontend/dist/js/react-vendor-wiHys0m2.js +0 -9
  418. package/frontend/dist/js/ru-JKyTgPg9.js +0 -2
  419. package/frontend/dist/js/sv-BIkBLPSQ.js +0 -2
  420. package/frontend/dist/js/th-CZ_LcCU0.js +0 -2
  421. package/frontend/dist/js/tr-B265byx1.js +0 -2
  422. package/frontend/dist/js/ui-vendor-BhHHyHk3.js +0 -1
  423. package/frontend/dist/js/uk-VTAlChwf.js +0 -2
  424. package/frontend/dist/js/useDialogFocus-BPTG_Zmy.js +0 -1
  425. package/frontend/dist/js/useDictation-D7zVBjDJ.js +0 -1
  426. package/frontend/dist/js/utils-p8Gt72YP.js +0 -1
  427. package/frontend/dist/js/utils-vendor-DISWt2y9.js +0 -1
  428. package/frontend/dist/js/vi-D8rXh-53.js +0 -2
  429. package/frontend/dist/js/workApi-FV75LKJn.js +0 -1
  430. package/frontend/dist/js/workModels-MzU2Ab7l.js +0 -1
  431. package/frontend/dist/js/zh-BEGd9iBD.js +0 -2
  432. 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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"}