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,480 +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
- * A DSH provider adapter backed by Libre WebUI's own provider layer.
19
- *
20
- * Without this, the engine would need its own provider configuration — its own
21
- * route, its own credential variable, its own model list — duplicating what the
22
- * Chat surface already resolves. That parallel stack drifts: a model pulled in
23
- * the UI would be invisible to the engine, and an operator would maintain two
24
- * places to say which model to use.
25
- *
26
- * So the engine asks Libre WebUI instead. `ctx.llm.registerAdapter` publishes a
27
- * single route whose models and calls come from a handler Libre WebUI installs
28
- * at startup, which means the engine uses exactly the providers, credentials,
29
- * and models the product already manages.
30
- *
31
- * The direction of the dependency is deliberate: this module imports nothing
32
- * from Libre WebUI's services, and Libre WebUI's services import nothing from
33
- * here. The handler is passed in through {@link registerLibreWebUiProvider}.
34
- * That keeps the engine substitutable and keeps Libre WebUI's service graph
35
- * free of engine types.
36
- *
37
- * @module cordis/dsh/librewebui-llm-adapter
38
- */
39
- import { LlmAdapter } from '@deepseek-ai/dsh-llm';
40
- import { DSH_ENGINE_SERVICE } from '../contracts.js';
41
- /** Plugin name reported to Cordis diagnostics. */
42
- export const name = 'librewebui-llm-adapter';
43
- /** The LLM service must exist before a route can be registered. */
44
- export const inject = ['llm'];
45
- /** Provider route the engine addresses Libre WebUI's providers by. */
46
- export const ROUTE = 'libre-webui';
47
- /** Loader entry id of the adapter row that publishes {@link ROUTE}. */
48
- export const ADAPTER_ENTRY_ID = 'libre-webui-llm-adapter';
49
- let handler;
50
- /**
51
- * Install the provider handler the engine's adapter delegates to.
52
- *
53
- * A plugin row is imported by URL while the application imports its own modules
54
- * by path, so the two are separate module instances with separate state: a
55
- * registration made from `src/main.ts` is invisible to a row loaded from
56
- * `dist/`. The host therefore calls this against the instance the row will use,
57
- * immediately before the row activates, and this entry point exists for direct
58
- * use in tests.
59
- *
60
- * @param next - the handler, or undefined to withdraw it.
61
- */
62
- export function setLibreWebUiProvider(next) {
63
- handler = next;
64
- }
65
- /** Alias of {@link setLibreWebUiProvider} for callers that read it as a registration. */
66
- export const registerLibreWebUiProvider = setLibreWebUiProvider;
67
- /** Whether a provider handler is installed. */
68
- export function hasLibreWebUiProvider() {
69
- return handler !== undefined;
70
- }
71
- /**
72
- * Read the installed handler.
73
- * @returns the handler.
74
- * @throws when no handler is installed, rather than failing a call obscurely.
75
- */
76
- function requireProvider() {
77
- if (!handler) {
78
- throw new Error('librewebui-llm-adapter: no Libre WebUI provider handler is installed');
79
- }
80
- return handler;
81
- }
82
- /**
83
- * The adapter the engine calls for the `libre-webui` route.
84
- *
85
- * DSH requires the emitted stream to follow a strict grammar: a `block-start`
86
- * before any delta at that index, a matching `block-end` before the finish, at
87
- * most one `usage`, and a terminal `finish` that is last. Text and tool-call
88
- * blocks are opened lazily, so a response that turns out to be tool calls only
89
- * never opens a text block.
90
- */
91
- class LibreWebUiAdapter extends LlmAdapter {
92
- constructor(requestUserId) {
93
- super();
94
- this.requestUserId = requestUserId;
95
- /** Model ids this adapter last advertised. */
96
- this.known = new Map();
97
- }
98
- providerInfo(provider) {
99
- return { id: provider, name: 'Libre WebUI' };
100
- }
101
- async listModels(provider) {
102
- const models = await requireProvider().listModels();
103
- this.known = new Map(models.map(model => [model.id, model]));
104
- return models.map(model => ({
105
- provider,
106
- id: model.id,
107
- name: model.name,
108
- // The engine projects image history to text for a route that declares
109
- // text only, which is what Libre WebUI's text providers accept.
110
- inputModalities: ['text'],
111
- }));
112
- }
113
- async resolveModel(provider, model) {
114
- const resolved = this.known.get(model) ?? (await requireProvider().resolveModel(model));
115
- return {
116
- provider,
117
- id: model,
118
- name: resolved?.name ?? model,
119
- inputModalities: ['text'],
120
- ...(resolved?.contextWindow
121
- ? { context: { contextWindow: resolved.contextWindow } }
122
- : {}),
123
- ...(resolved?.maxTokens ? { defaultMaxTokens: resolved.maxTokens } : {}),
124
- };
125
- }
126
- async *stream(options) {
127
- options.signal?.throwIfAborted();
128
- const provider = requireProvider();
129
- const call = {
130
- model: options.model,
131
- messages: [
132
- ...(options.system
133
- ? [{ role: 'system', content: options.system }]
134
- : []),
135
- ...toBridgeMessages(options.messages),
136
- ],
137
- signal: options.signal,
138
- userId: options.sessionId
139
- ? this.requestUserId(options.sessionId)
140
- : undefined,
141
- ...(options.tools?.length ? { tools: toBridgeTools(options.tools) } : {}),
142
- ...(options.temperature === undefined
143
- ? {}
144
- : { temperature: options.temperature }),
145
- ...(options.maxTokens === undefined
146
- ? {}
147
- : { maxTokens: options.maxTokens }),
148
- ...(options.stop?.length ? { stop: options.stop } : {}),
149
- ...(options.reasoningEffort
150
- ? { reasoningEffort: options.reasoningEffort }
151
- : {}),
152
- ...(options.purpose ? { purpose: options.purpose } : {}),
153
- };
154
- // Indexes are adapter-local and assigned in emission order; text and tool
155
- // blocks may interleave, so each open block keeps its own index and
156
- // accumulated text.
157
- let nextIndex = 0;
158
- let textIndex;
159
- let reasoningIndex;
160
- let text = '';
161
- let reasoning = '';
162
- const openToolCalls = new Map();
163
- let finishReason = 'stop';
164
- let usage;
165
- let providerMetadata = {};
166
- const closeText = function* () {
167
- if (textIndex === undefined)
168
- return;
169
- yield {
170
- type: 'block-end',
171
- index: textIndex,
172
- block: { type: 'text', text },
173
- };
174
- textIndex = undefined;
175
- text = '';
176
- };
177
- const closeReasoning = function* () {
178
- if (reasoningIndex === undefined)
179
- return;
180
- yield {
181
- type: 'block-end',
182
- index: reasoningIndex,
183
- block: { type: 'reasoning', text: reasoning },
184
- };
185
- reasoningIndex = undefined;
186
- reasoning = '';
187
- };
188
- const closeToolCalls = function* () {
189
- for (const [id, open] of openToolCalls) {
190
- yield {
191
- type: 'block-end',
192
- index: open.index,
193
- block: {
194
- type: 'tool-call',
195
- // The identity is the provider's; DSH brands it, and the brand is
196
- // a compile-time marker rather than a runtime wrapper.
197
- id: id,
198
- name: open.name,
199
- // DSH requires the raw JSON string, never a parsed object.
200
- arguments: open.arguments,
201
- },
202
- };
203
- }
204
- openToolCalls.clear();
205
- };
206
- for await (const event of provider.stream(call)) {
207
- options.signal?.throwIfAborted();
208
- switch (event.type) {
209
- case 'text': {
210
- if (event.text === '')
211
- break;
212
- // Empty deltas are skipped rather than opening an empty block, which
213
- // the grammar rejects as an empty response.
214
- yield* closeReasoning();
215
- if (textIndex === undefined) {
216
- textIndex = nextIndex++;
217
- yield {
218
- type: 'block-start',
219
- index: textIndex,
220
- blockType: 'text',
221
- };
222
- }
223
- text += event.text;
224
- yield {
225
- type: 'text-delta',
226
- index: textIndex,
227
- text: event.text,
228
- };
229
- break;
230
- }
231
- case 'reasoning': {
232
- if (event.text === '')
233
- break;
234
- yield* closeText();
235
- if (reasoningIndex === undefined) {
236
- reasoningIndex = nextIndex++;
237
- yield {
238
- type: 'block-start',
239
- index: reasoningIndex,
240
- blockType: 'reasoning',
241
- };
242
- }
243
- reasoning += event.text;
244
- yield {
245
- type: 'reasoning-delta',
246
- index: reasoningIndex,
247
- text: event.text,
248
- };
249
- break;
250
- }
251
- case 'tool-call': {
252
- yield* closeText();
253
- yield* closeReasoning();
254
- const { id, name, arguments: args } = event.toolCall;
255
- Object.assign(providerMetadata, event.toolCall.providerMetadata);
256
- const open = openToolCalls.get(id);
257
- if (!open) {
258
- const index = nextIndex++;
259
- openToolCalls.set(id, { index, arguments: args, name });
260
- yield {
261
- type: 'block-start',
262
- index,
263
- blockType: 'tool-call',
264
- };
265
- // `name` is omitted rather than sent as undefined: the accumulator
266
- // rejects an explicit undefined, and a chunk must stay
267
- // JSON-serializable.
268
- yield {
269
- type: 'tool-call-delta',
270
- index,
271
- id: id,
272
- argumentsDelta: args,
273
- ...(name === '' ? {} : { name }),
274
- };
275
- }
276
- else {
277
- open.arguments += args;
278
- if (open.name === '' && name !== '')
279
- open.name = name;
280
- yield {
281
- type: 'tool-call-delta',
282
- index: open.index,
283
- id: id,
284
- argumentsDelta: args,
285
- ...(name === '' ? {} : { name }),
286
- };
287
- }
288
- finishReason = 'tool-calls';
289
- break;
290
- }
291
- case 'usage': {
292
- usage = {
293
- inputTokens: event.inputTokens,
294
- outputTokens: event.outputTokens,
295
- };
296
- break;
297
- }
298
- case 'done': {
299
- finishReason = event.reason;
300
- Object.assign(providerMetadata, event.providerMetadata);
301
- break;
302
- }
303
- }
304
- }
305
- yield* closeText();
306
- yield* closeReasoning();
307
- yield* closeToolCalls();
308
- if (usage) {
309
- yield { type: 'usage', usage };
310
- }
311
- options.signal?.throwIfAborted();
312
- yield {
313
- type: 'finish',
314
- reason: finishReasonOf(finishReason),
315
- ...(Object.keys(providerMetadata).length
316
- ? { replayState: { response: { libreWebUi: providerMetadata } } }
317
- : {}),
318
- };
319
- }
320
- }
321
- /**
322
- * Build the terminal reason for a finished call.
323
- *
324
- * `error` and `aborted` reasons carry a failure payload in DSH's vocabulary
325
- * rather than being bare kinds, so the error case names the provider layer as
326
- * the origin instead of emitting an invalid reason.
327
- *
328
- * @param reason - the reason the provider stream reported.
329
- * @returns a well-formed DSH finish reason.
330
- */
331
- function finishReasonOf(reason) {
332
- if (reason === 'error') {
333
- return {
334
- kind: 'error',
335
- failure: {
336
- message: 'The Libre WebUI provider stream reported a failure.',
337
- code: 'PROVIDER_STREAM_FAILED',
338
- },
339
- };
340
- }
341
- return { kind: reason };
342
- }
343
- /**
344
- * Read a DSH message's content as flat text.
345
- * @param message - the message to flatten.
346
- * @returns concatenated text blocks.
347
- */
348
- function messageText(message, type = 'text') {
349
- const content = message.content;
350
- if (typeof content === 'string')
351
- return content;
352
- if (!Array.isArray(content))
353
- return '';
354
- const parts = [];
355
- for (const block of content) {
356
- if (block === null || typeof block !== 'object')
357
- continue;
358
- const record = block;
359
- if (record.type === type && typeof record.text === 'string') {
360
- parts.push(record.text);
361
- }
362
- }
363
- return parts.join('');
364
- }
365
- /**
366
- * Convert DSH messages into Libre WebUI's provider-neutral shape.
367
- *
368
- * DSH carries structured content; Libre WebUI's providers take flattened text
369
- * plus the wire fields a tool loop needs, so tool calls and their results are
370
- * lifted onto the message rather than dropped.
371
- *
372
- * @param messages - DSH messages, oldest first.
373
- * @returns messages Libre WebUI's provider layer accepts.
374
- */
375
- export function toBridgeMessages(messages) {
376
- const converted = [];
377
- for (const raw of messages) {
378
- if (raw === null || typeof raw !== 'object')
379
- continue;
380
- const message = raw;
381
- const role = message.role;
382
- if (role !== 'user' &&
383
- role !== 'assistant' &&
384
- role !== 'system' &&
385
- role !== 'tool') {
386
- continue;
387
- }
388
- const content = message.content;
389
- const toolCalls = [];
390
- const toolResults = [];
391
- if (Array.isArray(content)) {
392
- for (const block of content) {
393
- if (block === null || typeof block !== 'object')
394
- continue;
395
- const record = block;
396
- if (record.type === 'tool-call') {
397
- toolCalls.push({
398
- id: typeof record.id === 'string' ? record.id : '',
399
- name: typeof record.name === 'string' ? record.name : '',
400
- // DSH already holds the raw argument string.
401
- arguments: typeof record.arguments === 'string'
402
- ? record.arguments
403
- : JSON.stringify(record.arguments ?? {}),
404
- });
405
- }
406
- if (record.type === 'tool-result') {
407
- if (typeof record.toolCallId !== 'string' || !record.toolCallId) {
408
- throw new Error('A tool result is missing its call identifier.');
409
- }
410
- toolResults.push({
411
- role: 'tool',
412
- content: messageText(record),
413
- toolCallId: record.toolCallId,
414
- });
415
- }
416
- }
417
- }
418
- const text = messageText(message);
419
- const thinking = Array.isArray(content)
420
- ? messageText(message, 'reasoning')
421
- : '';
422
- const source = message.source;
423
- const providerMetadata = source?.replayState?.response?.libreWebUi;
424
- // DSH stores tool outputs as user-role blocks. Each result must become its
425
- // own wire message; an empty user message would break call correlation.
426
- if (!toolResults.length || text || thinking || toolCalls.length) {
427
- converted.push({
428
- role,
429
- content: text,
430
- ...(thinking ? { thinking } : {}),
431
- ...(providerMetadata ? { providerMetadata } : {}),
432
- ...(toolCalls.length > 0 ? { toolCalls } : {}),
433
- ...(role === 'tool' && typeof message.toolCallId === 'string'
434
- ? { toolCallId: message.toolCallId }
435
- : {}),
436
- });
437
- }
438
- converted.push(...toolResults);
439
- }
440
- return converted;
441
- }
442
- /**
443
- * Convert DSH tool schemas into Libre WebUI's provider-neutral shape.
444
- * @param tools - DSH tool schemas.
445
- * @returns tool declarations for the provider layer.
446
- */
447
- export function toBridgeTools(tools) {
448
- const converted = [];
449
- for (const raw of tools) {
450
- if (raw === null || typeof raw !== 'object')
451
- continue;
452
- const tool = raw;
453
- if (typeof tool.name !== 'string')
454
- continue;
455
- converted.push({
456
- name: tool.name,
457
- description: typeof tool.description === 'string' ? tool.description : '',
458
- parameters: tool.parameters !== null &&
459
- typeof tool.parameters === 'object' &&
460
- !Array.isArray(tool.parameters)
461
- ? tool.parameters
462
- : { type: 'object', properties: {} },
463
- });
464
- }
465
- return converted;
466
- }
467
- /**
468
- * Register the Libre WebUI route, when a provider handler is installed.
469
- * @param ctx - the row's context, carrying `llm`.
470
- * @returns the disposer, or undefined when nothing was registered.
471
- */
472
- export function apply(ctx) {
473
- if (!handler)
474
- return;
475
- ctx.llm.registerAdapter([ROUTE], new LibreWebUiAdapter(sessionId => {
476
- const engine = ctx.get(DSH_ENGINE_SERVICE);
477
- return engine?.requestUserId(sessionId);
478
- }));
479
- }
480
- //# sourceMappingURL=librewebui-llm-adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"librewebui-llm-adapter.js","sourceRoot":"","sources":["../../../src/cordis/dsh/librewebui-llm-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Classify syntax and pseudo-model selectors only. Never consult availability:
3
- * an offline but valid selected provider must remain pinned to that provider.
4
- */
5
- export declare function isProviderModelIdentity(value: unknown): value is string;
6
- /** Native routes retain the owning DSH provider independently of LWUI plugins. */
7
- export declare function nativeDshModelId(providerId: string, model: string): string;
8
- export declare function parseNativeDshModelId(value: string): {
9
- providerId: string;
10
- model: string;
11
- } | undefined;
12
- //# sourceMappingURL=model-identity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-identity.d.ts","sourceRoot":"","sources":["../../../src/cordis/dsh/model-identity.ts"],"names":[],"mappings":"AA8CA;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAyBvE;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAanD"}
@@ -1,87 +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
- /** Dependency-free validation for provider model identities in engine history. */
18
- const AGENT_SELECTORS = ['claude-code', 'dsh', 'codex', 'opencode', 'pi'];
19
- function plainIdentifier(value) {
20
- return (value.length > 0 &&
21
- value === value.trim() &&
22
- ![...value].some(character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127));
23
- }
24
- function providerModel(value) {
25
- const normalized = value.toLowerCase();
26
- return (plainIdentifier(value) &&
27
- !normalized.startsWith('lwui:') &&
28
- !normalized.startsWith('native:') &&
29
- !normalized.startsWith('persona:') &&
30
- !normalized.startsWith('agent:') &&
31
- !AGENT_SELECTORS.some(selector => normalized === selector || normalized.startsWith(`${selector}:`)));
32
- }
33
- /**
34
- * Classify syntax and pseudo-model selectors only. Never consult availability:
35
- * an offline but valid selected provider must remain pinned to that provider.
36
- */
37
- export function isProviderModelIdentity(value) {
38
- if (typeof value !== 'string' || !plainIdentifier(value))
39
- return false;
40
- if (value.startsWith('native:')) {
41
- try {
42
- return parseNativeDshModelId(value) !== undefined;
43
- }
44
- catch {
45
- return false;
46
- }
47
- }
48
- if (!value.toLowerCase().startsWith('lwui:'))
49
- return providerModel(value);
50
- const parts = value.split(':');
51
- try {
52
- if (parts[0] !== 'lwui')
53
- return false;
54
- if (parts[1] === 'ollama' && parts.length === 3)
55
- return providerModel(decodeURIComponent(parts[2]));
56
- if (parts[1] === 'plugin' && parts.length === 4) {
57
- return (plainIdentifier(decodeURIComponent(parts[2])) &&
58
- providerModel(decodeURIComponent(parts[3])));
59
- }
60
- }
61
- catch {
62
- return false;
63
- }
64
- return false;
65
- }
66
- /** Native routes retain the owning DSH provider independently of LWUI plugins. */
67
- export function nativeDshModelId(providerId, model) {
68
- return `native:${encodeURIComponent(providerId)}:${encodeURIComponent(model)}`;
69
- }
70
- export function parseNativeDshModelId(value) {
71
- if (!value.startsWith('native:'))
72
- return undefined;
73
- const parts = value.split(':');
74
- try {
75
- if (parts.length !== 3 || value.length > 2048)
76
- throw new Error();
77
- const providerId = decodeURIComponent(parts[1]);
78
- const model = decodeURIComponent(parts[2]);
79
- if (!plainIdentifier(providerId) || !plainIdentifier(model))
80
- throw new Error();
81
- return { providerId, model };
82
- }
83
- catch {
84
- throw new Error('Invalid native DSH model selection.');
85
- }
86
- }
87
- //# sourceMappingURL=model-identity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-identity.js","sourceRoot":"","sources":["../../../src/cordis/dsh/model-identity.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import type { OllamaChatRequest, OllamaChatResponse } from '../../types/index.js';
2
- import type { WorkModelStreamObserver } from '../../services/workModelProviderService.js';
3
- import type { NativeDshUsageEventInput } from '../../services/pluginUsageService.js';
4
- import type { BridgeCall, BridgeEvent } from './librewebui-llm-adapter.js';
5
- import { type NativeProviderModel } from './native-provider-protocol.js';
6
- export type NativeDshModel = NativeProviderModel;
7
- export interface NativeDshCatalog {
8
- status: 'disabled' | 'unavailable' | 'ready';
9
- models: NativeDshModel[];
10
- }
11
- interface NativeProviderDependencies {
12
- socketPath(): string | undefined | Promise<string | undefined>;
13
- authorize(userId: string): Promise<boolean>;
14
- recordUsage?(usage: NativeDshUsageEventInput): Promise<void> | void;
15
- assertUsageAllowed?(input: Pick<NativeDshUsageEventInput, 'userId' | 'providerId' | 'model'>): Promise<void> | void;
16
- }
17
- /** The socket is a local capability owned by the same OS account as LWUI. */
18
- export declare function verifyNativeProviderSocket(socketPath: string): Promise<void>;
19
- /** Only provider inference crosses this boundary; tool execution stays in Work. */
20
- export declare class NativeDshProviderService {
21
- private readonly dependencies;
22
- constructor(dependencies?: NativeProviderDependencies);
23
- private recordUsage;
24
- private assertUsageAllowed;
25
- private connection;
26
- private readCatalog;
27
- catalog(userId: string): Promise<NativeDshCatalog>;
28
- assertModel(providerId: string, model: string, userId: string): Promise<NativeDshModel>;
29
- routingFingerprint(providerId: string, model: string, userId: string): Promise<string>;
30
- private chunks;
31
- stream(call: BridgeCall, providerId: string): AsyncIterable<BridgeEvent>;
32
- generate(request: OllamaChatRequest, providerId: string, userId: string, observer?: WorkModelStreamObserver, signal?: AbortSignal): Promise<OllamaChatResponse>;
33
- text(input: {
34
- providerId: string;
35
- model: string;
36
- userId: string;
37
- prompt: string;
38
- purpose?: 'session-title';
39
- signal?: AbortSignal;
40
- }): Promise<string>;
41
- }
42
- export declare const nativeDshProviderService: NativeDshProviderService;
43
- export {};
44
- //# sourceMappingURL=native-provider-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native-provider-client.d.ts","sourceRoot":"","sources":["../../../src/cordis/dsh/native-provider-client.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAErF,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAKL,KAAK,mBAAmB,EAEzB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;AACjD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,CAAC;IAC7C,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AASD,UAAU,0BAA0B;IAClC,UAAU,IAAI,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,WAAW,CAAC,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,kBAAkB,CAAC,CACjB,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC,GACvE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACzB;AAqBD,6EAA6E;AAC7E,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAsHD,mFAAmF;AACnF,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAD/B,YACmB,YAAY,GAAE,0BAAgD,EAC7E;YAEU,WAAW;YAgBX,kBAAkB;YAYlB,UAAU;YAUV,WAAW;IAmCnB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYvD;IAEK,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CAQzB;IAEK,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAoBjB;YAEc,MAAM;IAoGd,MAAM,CACX,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB,aAAa,CAAC,WAAW,CAAC,CAwD5B;IAEK,QAAQ,CACZ,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,uBAA4B,EACtC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CA2F7B;IAEK,IAAI,CAAC,KAAK,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BlB;CACF;AAED,eAAO,MAAM,wBAAwB,0BAAiC,CAAC"}