libre-webui 0.36.0 → 0.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/README.md +59 -0
  2. package/backend/dist/cordis/contracts.d.ts +270 -0
  3. package/backend/dist/cordis/contracts.d.ts.map +1 -0
  4. package/backend/dist/cordis/contracts.js +32 -0
  5. package/backend/dist/cordis/contracts.js.map +1 -0
  6. package/backend/dist/cordis/dsh/chat-model.d.ts +16 -0
  7. package/backend/dist/cordis/dsh/chat-model.d.ts.map +1 -0
  8. package/backend/dist/cordis/dsh/chat-model.js +104 -0
  9. package/backend/dist/cordis/dsh/chat-model.js.map +1 -0
  10. package/backend/dist/cordis/dsh/engine-plugin.d.ts +186 -0
  11. package/backend/dist/cordis/dsh/engine-plugin.d.ts.map +1 -0
  12. package/backend/dist/cordis/dsh/engine-plugin.js +1116 -0
  13. package/backend/dist/cordis/dsh/engine-plugin.js.map +1 -0
  14. package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts +175 -0
  15. package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts.map +1 -0
  16. package/backend/dist/cordis/dsh/librewebui-llm-adapter.js +480 -0
  17. package/backend/dist/cordis/dsh/librewebui-llm-adapter.js.map +1 -0
  18. package/backend/dist/cordis/dsh/model-identity.d.ts +12 -0
  19. package/backend/dist/cordis/dsh/model-identity.d.ts.map +1 -0
  20. package/backend/dist/cordis/dsh/model-identity.js +87 -0
  21. package/backend/dist/cordis/dsh/model-identity.js.map +1 -0
  22. package/backend/dist/cordis/dsh/native-provider-client.d.ts +44 -0
  23. package/backend/dist/cordis/dsh/native-provider-client.d.ts.map +1 -0
  24. package/backend/dist/cordis/dsh/native-provider-client.js +524 -0
  25. package/backend/dist/cordis/dsh/native-provider-client.js.map +1 -0
  26. package/backend/dist/cordis/dsh/native-provider-plugin.d.ts +11 -0
  27. package/backend/dist/cordis/dsh/native-provider-plugin.d.ts.map +1 -0
  28. package/backend/dist/cordis/dsh/native-provider-plugin.js +416 -0
  29. package/backend/dist/cordis/dsh/native-provider-plugin.js.map +1 -0
  30. package/backend/dist/cordis/dsh/native-provider-protocol.d.ts +37 -0
  31. package/backend/dist/cordis/dsh/native-provider-protocol.d.ts.map +1 -0
  32. package/backend/dist/cordis/dsh/native-provider-protocol.js +325 -0
  33. package/backend/dist/cordis/dsh/native-provider-protocol.js.map +1 -0
  34. package/backend/dist/cordis/dsh/provider-handler.d.ts +36 -0
  35. package/backend/dist/cordis/dsh/provider-handler.d.ts.map +1 -0
  36. package/backend/dist/cordis/dsh/provider-handler.js +582 -0
  37. package/backend/dist/cordis/dsh/provider-handler.js.map +1 -0
  38. package/backend/dist/cordis/dsh/session-files.d.ts +9 -0
  39. package/backend/dist/cordis/dsh/session-files.d.ts.map +1 -0
  40. package/backend/dist/cordis/dsh/session-files.js +60 -0
  41. package/backend/dist/cordis/dsh/session-files.js.map +1 -0
  42. package/backend/dist/cordis/dsh/session-settings.d.ts +15 -0
  43. package/backend/dist/cordis/dsh/session-settings.d.ts.map +1 -0
  44. package/backend/dist/cordis/dsh/session-settings.js +51 -0
  45. package/backend/dist/cordis/dsh/session-settings.js.map +1 -0
  46. package/backend/dist/cordis/dsh/work-driver.d.ts +12 -0
  47. package/backend/dist/cordis/dsh/work-driver.d.ts.map +1 -0
  48. package/backend/dist/cordis/dsh/work-driver.js +402 -0
  49. package/backend/dist/cordis/dsh/work-driver.js.map +1 -0
  50. package/backend/dist/cordis/dsh/workspace-policy.d.ts +10 -0
  51. package/backend/dist/cordis/dsh/workspace-policy.d.ts.map +1 -0
  52. package/backend/dist/cordis/dsh/workspace-policy.js +44 -0
  53. package/backend/dist/cordis/dsh/workspace-policy.js.map +1 -0
  54. package/backend/dist/cordis/host/composition.d.ts +73 -0
  55. package/backend/dist/cordis/host/composition.d.ts.map +1 -0
  56. package/backend/dist/cordis/host/composition.js +205 -0
  57. package/backend/dist/cordis/host/composition.js.map +1 -0
  58. package/backend/dist/cordis/host/config.d.ts +159 -0
  59. package/backend/dist/cordis/host/config.d.ts.map +1 -0
  60. package/backend/dist/cordis/host/config.js +184 -0
  61. package/backend/dist/cordis/host/config.js.map +1 -0
  62. package/backend/dist/cordis/host/host.d.ts +74 -0
  63. package/backend/dist/cordis/host/host.d.ts.map +1 -0
  64. package/backend/dist/cordis/host/host.js +420 -0
  65. package/backend/dist/cordis/host/host.js.map +1 -0
  66. package/backend/dist/cordis/host/loader-entry.d.ts +41 -0
  67. package/backend/dist/cordis/host/loader-entry.d.ts.map +1 -0
  68. package/backend/dist/cordis/host/loader-entry.js +52 -0
  69. package/backend/dist/cordis/host/loader-entry.js.map +1 -0
  70. package/backend/dist/cordis/host/model.d.ts +45 -0
  71. package/backend/dist/cordis/host/model.d.ts.map +1 -0
  72. package/backend/dist/cordis/host/model.js +54 -0
  73. package/backend/dist/cordis/host/model.js.map +1 -0
  74. package/backend/dist/cordis/host/privacy.d.ts +8 -0
  75. package/backend/dist/cordis/host/privacy.d.ts.map +1 -0
  76. package/backend/dist/cordis/host/privacy.js +73 -0
  77. package/backend/dist/cordis/host/privacy.js.map +1 -0
  78. package/backend/dist/cordis/index.d.ts +14 -0
  79. package/backend/dist/cordis/index.d.ts.map +1 -0
  80. package/backend/dist/cordis/index.js +30 -0
  81. package/backend/dist/cordis/index.js.map +1 -0
  82. package/backend/dist/cordis/runtime.d.ts +97 -0
  83. package/backend/dist/cordis/runtime.d.ts.map +1 -0
  84. package/backend/dist/cordis/runtime.js +231 -0
  85. package/backend/dist/cordis/runtime.js.map +1 -0
  86. package/backend/dist/cordis/work-model.d.ts +7 -0
  87. package/backend/dist/cordis/work-model.d.ts.map +1 -0
  88. package/backend/dist/cordis/work-model.js +30 -0
  89. package/backend/dist/cordis/work-model.js.map +1 -0
  90. package/backend/dist/db.js +1 -1
  91. package/backend/dist/index.d.ts.map +1 -1
  92. package/backend/dist/index.js +9 -0
  93. package/backend/dist/index.js.map +1 -1
  94. package/backend/dist/main.js +12 -0
  95. package/backend/dist/main.js.map +1 -1
  96. package/backend/dist/persistence/extensionTypes.d.ts +2 -0
  97. package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
  98. package/backend/dist/persistence/extensionTypes.js.map +1 -1
  99. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
  100. package/backend/dist/persistence/postgresExtensionRepositories.js +38 -0
  101. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
  102. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
  103. package/backend/dist/persistence/postgresResourceRepositories.js +6 -1
  104. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  105. package/backend/dist/persistence/resourceTypes.d.ts +3 -1
  106. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
  107. package/backend/dist/persistence/resourceTypes.js.map +1 -1
  108. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  109. package/backend/dist/persistence/sqliteExtensionRepositories.js +40 -0
  110. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  111. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
  112. package/backend/dist/persistence/sqliteResourceRepositories.js +7 -1
  113. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  114. package/backend/dist/routes/agentCli.d.ts.map +1 -1
  115. package/backend/dist/routes/agentCli.js +34 -2
  116. package/backend/dist/routes/agentCli.js.map +1 -1
  117. package/backend/dist/routes/chat.d.ts.map +1 -1
  118. package/backend/dist/routes/chat.js +9 -1
  119. package/backend/dist/routes/chat.js.map +1 -1
  120. package/backend/dist/routes/cordis.d.ts +3 -0
  121. package/backend/dist/routes/cordis.d.ts.map +1 -0
  122. package/backend/dist/routes/cordis.js +440 -0
  123. package/backend/dist/routes/cordis.js.map +1 -0
  124. package/backend/dist/routes/libreClaw.js +1 -1
  125. package/backend/dist/routes/libreClaw.js.map +1 -1
  126. package/backend/dist/routes/work.d.ts.map +1 -1
  127. package/backend/dist/routes/work.js +23 -8
  128. package/backend/dist/routes/work.js.map +1 -1
  129. package/backend/dist/services/agentAccessService.d.ts +4 -0
  130. package/backend/dist/services/agentAccessService.d.ts.map +1 -1
  131. package/backend/dist/services/agentAccessService.js +48 -16
  132. package/backend/dist/services/agentAccessService.js.map +1 -1
  133. package/backend/dist/services/agentCliService.d.ts +42 -1
  134. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  135. package/backend/dist/services/agentCliService.js +206 -7
  136. package/backend/dist/services/agentCliService.js.map +1 -1
  137. package/backend/dist/services/agentCliUsage.d.ts +22 -0
  138. package/backend/dist/services/agentCliUsage.d.ts.map +1 -0
  139. package/backend/dist/services/agentCliUsage.js +192 -0
  140. package/backend/dist/services/agentCliUsage.js.map +1 -0
  141. package/backend/dist/services/authService.d.ts +3 -0
  142. package/backend/dist/services/authService.d.ts.map +1 -1
  143. package/backend/dist/services/authService.js +4 -1
  144. package/backend/dist/services/authService.js.map +1 -1
  145. package/backend/dist/services/chatGenerationService.d.ts +7 -0
  146. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  147. package/backend/dist/services/chatGenerationService.js +32 -1
  148. package/backend/dist/services/chatGenerationService.js.map +1 -1
  149. package/backend/dist/services/cordisAccessService.d.ts +56 -0
  150. package/backend/dist/services/cordisAccessService.d.ts.map +1 -0
  151. package/backend/dist/services/cordisAccessService.js +98 -0
  152. package/backend/dist/services/cordisAccessService.js.map +1 -0
  153. package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -1
  154. package/backend/dist/services/durableChatGenerationService.js +9 -1
  155. package/backend/dist/services/durableChatGenerationService.js.map +1 -1
  156. package/backend/dist/services/emailService.d.ts.map +1 -1
  157. package/backend/dist/services/emailService.js +8 -1
  158. package/backend/dist/services/emailService.js.map +1 -1
  159. package/backend/dist/services/pluginService.d.ts.map +1 -1
  160. package/backend/dist/services/pluginService.js +7 -26
  161. package/backend/dist/services/pluginService.js.map +1 -1
  162. package/backend/dist/services/pluginUsageService.d.ts +52 -0
  163. package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
  164. package/backend/dist/services/pluginUsageService.js +89 -1
  165. package/backend/dist/services/pluginUsageService.js.map +1 -1
  166. package/backend/dist/services/systemSettingsService.d.ts +1 -1
  167. package/backend/dist/services/systemSettingsService.d.ts.map +1 -1
  168. package/backend/dist/services/systemSettingsService.js +1 -1
  169. package/backend/dist/services/systemSettingsService.js.map +1 -1
  170. package/backend/dist/services/thinkingSummaryService.d.ts +3 -0
  171. package/backend/dist/services/thinkingSummaryService.d.ts.map +1 -1
  172. package/backend/dist/services/thinkingSummaryService.js +56 -17
  173. package/backend/dist/services/thinkingSummaryService.js.map +1 -1
  174. package/backend/dist/services/titleGenerationService.d.ts +22 -2
  175. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  176. package/backend/dist/services/titleGenerationService.js +63 -8
  177. package/backend/dist/services/titleGenerationService.js.map +1 -1
  178. package/backend/dist/services/workAgentService.d.ts +1 -1
  179. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  180. package/backend/dist/services/workAgentService.js +76 -12
  181. package/backend/dist/services/workAgentService.js.map +1 -1
  182. package/backend/dist/services/workModelProviderService.d.ts +5 -0
  183. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  184. package/backend/dist/services/workModelProviderService.js +52 -3
  185. package/backend/dist/services/workModelProviderService.js.map +1 -1
  186. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  187. package/backend/dist/services/workRuntimeService.js +4 -1
  188. package/backend/dist/services/workRuntimeService.js.map +1 -1
  189. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  190. package/backend/dist/services/workTaskService.js +6 -6
  191. package/backend/dist/services/workTaskService.js.map +1 -1
  192. package/backend/dist/types/work.d.ts +12 -1
  193. package/backend/dist/types/work.d.ts.map +1 -1
  194. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
  195. package/backend/dist/utils/pluginStreamAdapter.js +18 -4
  196. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
  197. package/backend/dist/utils/pluginStreaming.d.ts +6 -0
  198. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
  199. package/backend/dist/utils/pluginStreaming.js +10 -0
  200. package/backend/dist/utils/pluginStreaming.js.map +1 -1
  201. package/backend/dist/utils/smtpClient.d.ts +5 -1
  202. package/backend/dist/utils/smtpClient.d.ts.map +1 -1
  203. package/backend/dist/utils/smtpClient.js +29 -3
  204. package/backend/dist/utils/smtpClient.js.map +1 -1
  205. package/backend/dist/websocketServer.d.ts.map +1 -1
  206. package/backend/dist/websocketServer.js +4 -0
  207. package/backend/dist/websocketServer.js.map +1 -1
  208. package/backend/package.json +37 -2
  209. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  210. package/frontend/dist/artifact-runtime/framer-motion.js +3 -3
  211. package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
  212. package/frontend/dist/artifact-runtime/react.js +5 -5
  213. package/frontend/dist/artifact-runtime/recharts.js +45 -45
  214. package/frontend/dist/assets/index-BrDSO609.js +20 -0
  215. package/frontend/dist/assets/index-C8_AByBq.css +1 -0
  216. package/frontend/dist/index.html +33 -31
  217. package/frontend/dist/js/{ArtifactContainer-B8tyPtWd.js → ArtifactContainer-B1-GVzVf.js} +1 -1
  218. package/frontend/dist/js/{ArtifactDemoPage-BwRfWoSK.js → ArtifactDemoPage-goftRHdk.js} +1 -1
  219. package/frontend/dist/js/{ArtifactSandboxFrame-Ctcwt_l2.js → ArtifactSandboxFrame-_8RA8_JV.js} +1 -1
  220. package/frontend/dist/js/ArtifactSlideOutPanel-DlkOZI5N.js +1 -0
  221. package/frontend/dist/js/{AutomationModal-mTYs9LrJ.js → AutomationModal-BaaxZF1M.js} +1 -1
  222. package/frontend/dist/js/AutomationsPage-DY2x7zVm.js +1 -0
  223. package/frontend/dist/js/{AvatarUpload-wWUAi3e2.js → AvatarUpload-CH_n1Ef0.js} +1 -1
  224. package/frontend/dist/js/{Button-ZQ6BePid.js → Button-CGMYia4g.js} +1 -1
  225. package/frontend/dist/js/{CalendarPage-Ch4racU2.js → CalendarPage-DLo5nm3Q.js} +1 -1
  226. package/frontend/dist/js/ChannelsPage-DnQI7mzq.js +1 -0
  227. package/frontend/dist/js/ChatPage-BaDkJnEC.js +14 -0
  228. package/frontend/dist/js/ConnectModels-B4dGb5yc.js +1 -0
  229. package/frontend/dist/js/CordisPage-CPiYn2Bx.js +1 -0
  230. package/frontend/dist/js/{EvaluationsPage-DHPnNBkW.js → EvaluationsPage-DpdGpd7x.js} +2 -2
  231. package/frontend/dist/js/{FirstTimeSetup-CoF83yY8.js → FirstTimeSetup-By8OE1JS.js} +1 -1
  232. package/frontend/dist/js/GalleryPage-ByZyIhZQ.js +1 -0
  233. package/frontend/dist/js/HomePage-Btc-Mvin.js +1 -0
  234. package/frontend/dist/js/{LanguageSwitcher-CogfczNm.js → LanguageSwitcher-B3CxRW6J.js} +1 -1
  235. package/frontend/dist/js/LibreClawPage-3Sonm1gu.js +1 -0
  236. package/frontend/dist/js/{Logo-C9fsEUaY.js → Logo-HZvdAk2c.js} +1 -1
  237. package/frontend/dist/js/{LogoMark-Cvu5CQOW.js → LogoMark-GJnfMXsk.js} +1 -1
  238. package/frontend/dist/js/{ModelManagerModals-Bc2Woor7.js → ModelManagerModals-Bk6OQzJI.js} +1 -1
  239. package/frontend/dist/js/NotesPage-lFhfjMqJ.js +3 -0
  240. package/frontend/dist/js/{OptimizedSyntaxHighlighter-aKWyHj_c.js → OptimizedSyntaxHighlighter-CzzV6ONG.js} +1 -1
  241. package/frontend/dist/js/OptimizedSyntaxHighlighter-ajqwyBQm.js +1 -0
  242. package/frontend/dist/js/{PasswordStrengthMeter-BJr4eBbo.js → PasswordStrengthMeter-DasfJa4P.js} +1 -1
  243. package/frontend/dist/js/{PersonasPage-ff5opf9B.js → PersonasPage-nOThOpXp.js} +2 -2
  244. package/frontend/dist/js/PluginUsagePage-BRbHeRf7.js +1 -0
  245. package/frontend/dist/js/{RichMessageContent-BNNylVAb.js → RichMessageContent-BZ7KKJKK.js} +2 -2
  246. package/frontend/dist/js/RichMessageContent-oyydJjgc.js +1 -0
  247. package/frontend/dist/js/SettingsModal-VpsAx2Ns.js +19 -0
  248. package/frontend/dist/js/{SettingsToggle-CKLHOUt-.js → SettingsToggle-oxvw7ulA.js} +1 -1
  249. package/frontend/dist/js/{ShareDialog-DykD70uB.js → ShareDialog-CnxPGPb_.js} +1 -1
  250. package/frontend/dist/js/SystemPage-D2ikvhDp.js +1 -0
  251. package/frontend/dist/js/{TurnstileWidget-BO2ceTt8.js → TurnstileWidget-CVepEMEQ.js} +1 -1
  252. package/frontend/dist/js/{UserManagementPage-Ch-PvYQ9.js → UserManagementPage-2yHv89ZA.js} +1 -1
  253. package/frontend/dist/js/UserManagementPanel-vxpiyiTZ.js +1 -0
  254. package/frontend/dist/js/{WhatsNewModal-Bu4H4MEb.js → WhatsNewModal-DAAFzY0d.js} +1 -1
  255. package/frontend/dist/js/WorkPage-BYpYD9mr.js +8 -0
  256. package/frontend/dist/js/api-C0ligMmL.js +1 -0
  257. package/frontend/dist/js/api-CVUaOaq4.js +14 -0
  258. package/frontend/dist/js/{appNavigation-CVsQuDI1.js → appNavigation-CqtrZ9bm.js} +1 -1
  259. package/frontend/dist/js/{appStore-Din-tTD9.js → appStore-Biw63DtJ.js} +2 -2
  260. package/frontend/dist/js/appVersion-D78eXAb-.js +1 -0
  261. package/frontend/dist/js/ar-Cq-DrSYL.js +2 -0
  262. package/frontend/dist/js/authStore-2DsDTcIu.js +1 -0
  263. package/frontend/dist/js/{authStore-Cm8P6rYs.js → authStore-C5qKrmn4.js} +3 -3
  264. package/frontend/dist/js/bn-BqxLh-KL.js +2 -0
  265. package/frontend/dist/js/chatStore-DQhEqb9F.js +3 -0
  266. package/frontend/dist/js/client-gf5bjBrn.js +2 -0
  267. package/frontend/dist/js/composerStyles-C83jssgZ.js +1 -0
  268. package/frontend/dist/js/{config-DHea4b8N.js → config-CNvgxwAm.js} +1 -1
  269. package/frontend/dist/js/cordisApi-BYjA4EOQ.js +2 -0
  270. package/frontend/dist/js/cs-D2DDNZf-.js +2 -0
  271. package/frontend/dist/js/da-BciY-TSG.js +2 -0
  272. package/frontend/dist/js/de-DjU_eXQ-.js +2 -0
  273. package/frontend/dist/js/es-ChIEs80I.js +2 -0
  274. package/frontend/dist/js/{estree-DCT3Jm65.js → estree-DGmLqopC.js} +17 -17
  275. package/frontend/dist/js/evaluationsApi-Bg12ekHo.js +1 -0
  276. package/frontend/dist/js/fr-Bi8BGRW4.js +2 -0
  277. package/frontend/dist/js/hi-BMsCnWg7.js +2 -0
  278. package/frontend/dist/js/{html-CBXMuS97.js → html-BryNQ_yx.js} +6 -6
  279. package/frontend/dist/js/id-CpcN1vhk.js +2 -0
  280. package/frontend/dist/js/is-DkUy2cmP.js +2 -0
  281. package/frontend/dist/js/it-BglK9DRZ.js +2 -0
  282. package/frontend/dist/js/ja-IrprzwLJ.js +2 -0
  283. package/frontend/dist/js/ko--wwEsMPi.js +2 -0
  284. package/frontend/dist/js/{markdown-Bo71X2X2.js → markdown-CZ1tYEW8.js} +17 -17
  285. package/frontend/dist/js/{markdown-core-BFkBYv2v.js → markdown-core-KjS96SYW.js} +1 -1
  286. package/frontend/dist/js/{markdown-html-CwjnwJbl.js → markdown-html-DQEwrWcf.js} +1 -1
  287. package/frontend/dist/js/{markdown-math-CJvHdD1l.js → markdown-math-CKi32S5d.js} +1 -1
  288. package/frontend/dist/js/{markdownHtml-egpK3_YY.js → markdownHtml-lrXhxBhK.js} +1 -1
  289. package/frontend/dist/js/markdownMath-B0BpyFBS.js +1 -0
  290. package/frontend/dist/js/{messageCodeStyles-euWoxwoo.js → messageCodeStyles-DJZ4QMVq.js} +2 -2
  291. package/frontend/dist/js/ms-BWj59y7-.js +2 -0
  292. package/frontend/dist/js/nl-D-QndW_A.js +2 -0
  293. package/frontend/dist/js/pl-Dw7d7iDV.js +2 -0
  294. package/frontend/dist/js/pt-BI53uHJw.js +2 -0
  295. package/frontend/dist/js/react-vendor-wiHys0m2.js +9 -0
  296. package/frontend/dist/js/router-vendor-HZm4FR0A.js +1 -0
  297. package/frontend/dist/js/ru-JKyTgPg9.js +2 -0
  298. package/frontend/dist/js/{standalone-6z5x8CWe.js → standalone-DbyFjvTU.js} +1 -1
  299. package/frontend/dist/js/sv-BIkBLPSQ.js +2 -0
  300. package/frontend/dist/js/{syntax-highlight-7t8DGG2n.js → syntax-highlight-DNc3FFCa.js} +1 -1
  301. package/frontend/dist/js/{teamEventStream-DGgjrVqw.js → teamEventStream-PXiwR5Kr.js} +1 -1
  302. package/frontend/dist/js/th-CZ_LcCU0.js +2 -0
  303. package/frontend/dist/js/tr-B265byx1.js +2 -0
  304. package/frontend/dist/js/{typescript-CslHIgIJ.js → typescript-DUM5niRM.js} +1 -1
  305. package/frontend/dist/js/{ui-CNcEDQ95.js → ui-DDMjO5dd.js} +2 -2
  306. package/frontend/dist/js/ui-vendor-BhHHyHk3.js +1 -0
  307. package/frontend/dist/js/uk-VTAlChwf.js +2 -0
  308. package/frontend/dist/js/{useChat-YRODF1y1.js → useChat-DaIZ2Dbu.js} +1 -1
  309. package/frontend/dist/js/{useDialogFocus-BQLdAGYH.js → useDialogFocus-BPTG_Zmy.js} +1 -1
  310. package/frontend/dist/js/useDictation-BXyX1U8r.js +1 -0
  311. package/frontend/dist/js/useQuery-hWmQjdLu.js +1 -0
  312. package/frontend/dist/js/{useTranslation-Kn7_iLGj.js → useTranslation-B9kflK9S.js} +1 -1
  313. package/frontend/dist/js/{utils-Dq1w7K0c.js → utils-p8Gt72YP.js} +1 -1
  314. package/frontend/dist/js/{utils-vendor-dx9vGAt3.js → utils-vendor-DISWt2y9.js} +1 -1
  315. package/frontend/dist/js/vi-D8rXh-53.js +2 -0
  316. package/frontend/dist/js/{workStatus-oU04ZrUq.js → work-DmJpVPPO.js} +1 -1
  317. package/frontend/dist/js/workApi-BIS9RxRi.js +1 -0
  318. package/frontend/dist/js/workApi-C3Td_lFD.js +5 -0
  319. package/frontend/dist/js/workModels-MzU2Ab7l.js +1 -0
  320. package/frontend/dist/js/zh-BEGd9iBD.js +2 -0
  321. package/package.json +43 -8
  322. package/scripts/prepare-dsh-provider.mjs +124 -0
  323. package/frontend/dist/assets/index-BXTzjRcS.js +0 -92
  324. package/frontend/dist/assets/index-uzzNXp5R.css +0 -1
  325. package/frontend/dist/js/ArtifactSlideOutPanel-DPWGjHhp.js +0 -1
  326. package/frontend/dist/js/AutomationsPage-DvsLZWtg.js +0 -1
  327. package/frontend/dist/js/ChannelsPage-D252gXwf.js +0 -1
  328. package/frontend/dist/js/ChatPage-D_CzOiHw.js +0 -14
  329. package/frontend/dist/js/ConnectModels-DYOtIOEY.js +0 -1
  330. package/frontend/dist/js/GalleryPage-BpK-vrvd.js +0 -1
  331. package/frontend/dist/js/HomePage-zJkkDNJl.js +0 -1
  332. package/frontend/dist/js/LibreClawPage-CAgNj9GM.js +0 -1
  333. package/frontend/dist/js/NotesPage-CNTqlwNc.js +0 -3
  334. package/frontend/dist/js/OptimizedSyntaxHighlighter-BFjOBavF.js +0 -1
  335. package/frontend/dist/js/PluginUsagePage-Cp4j4-VZ.js +0 -1
  336. package/frontend/dist/js/RichMessageContent-BOY5jqj-.js +0 -1
  337. package/frontend/dist/js/SettingsModal-WAdVG4-g.js +0 -19
  338. package/frontend/dist/js/SystemPage-Dwi8leEQ.js +0 -1
  339. package/frontend/dist/js/UserManagementPanel-CfG67c_k.js +0 -1
  340. package/frontend/dist/js/WorkPage-D_cL9wp4.js +0 -8
  341. package/frontend/dist/js/api-29NO19CP.js +0 -14
  342. package/frontend/dist/js/api-DhafOTdF.js +0 -1
  343. package/frontend/dist/js/appVersion-BNuquyI6.js +0 -1
  344. package/frontend/dist/js/ar-WHne6B0o.js +0 -2
  345. package/frontend/dist/js/authStore-snvjjOuX.js +0 -1
  346. package/frontend/dist/js/bn-BZvCjqwO.js +0 -2
  347. package/frontend/dist/js/chatStore-BPpcL4I5.js +0 -3
  348. package/frontend/dist/js/composerStyles-bNlrIugf.js +0 -1
  349. package/frontend/dist/js/cs-DfSqWQ9V.js +0 -2
  350. package/frontend/dist/js/da-BmMLW4Dl.js +0 -2
  351. package/frontend/dist/js/de-BQMiQwQT.js +0 -2
  352. package/frontend/dist/js/es-DXf6jt4Z.js +0 -2
  353. package/frontend/dist/js/evaluationsApi-Btc9Mg9z.js +0 -1
  354. package/frontend/dist/js/fr-BD6nT1oc.js +0 -2
  355. package/frontend/dist/js/hi-BSuNic-8.js +0 -2
  356. package/frontend/dist/js/id-wodbwt3B.js +0 -2
  357. package/frontend/dist/js/is-CEjw-OJE.js +0 -2
  358. package/frontend/dist/js/it-X_pq8C7q.js +0 -2
  359. package/frontend/dist/js/ja-DWM2HZZd.js +0 -2
  360. package/frontend/dist/js/ko-DFi2khBB.js +0 -2
  361. package/frontend/dist/js/markdownMath-mesq3ZcY.js +0 -1
  362. package/frontend/dist/js/ms-DNQateTR.js +0 -2
  363. package/frontend/dist/js/nl-DSWhi8W8.js +0 -2
  364. package/frontend/dist/js/pl-W9WEDpZ3.js +0 -2
  365. package/frontend/dist/js/pt-DCCGvdNt.js +0 -2
  366. package/frontend/dist/js/react-vendor-D0Ec-185.js +0 -9
  367. package/frontend/dist/js/router-vendor-CM0PhOMl.js +0 -1
  368. package/frontend/dist/js/ru-D-Ww6dXe.js +0 -2
  369. package/frontend/dist/js/sv-B0Iry-H3.js +0 -2
  370. package/frontend/dist/js/th-CEZS0WeE.js +0 -2
  371. package/frontend/dist/js/tr-BFJ8TeYb.js +0 -2
  372. package/frontend/dist/js/ui-vendor-LatG6rFF.js +0 -177
  373. package/frontend/dist/js/uk-BmW3yDel.js +0 -2
  374. package/frontend/dist/js/useQuery-C3O4CZ54.js +0 -1
  375. package/frontend/dist/js/vi-Cu25FXnp.js +0 -2
  376. package/frontend/dist/js/work-DVgm81bJ.js +0 -1
  377. package/frontend/dist/js/workApi-BdUNugC3.js +0 -1
  378. package/frontend/dist/js/workApi-OieM8qEL.js +0 -6
  379. package/frontend/dist/js/zh-CuCAx3oH.js +0 -2
@@ -0,0 +1,60 @@
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
+ /** Local artifact deletion for the pinned JSONL backend's project/session layout. */
18
+ import path from 'node:path';
19
+ import { lstat, readdir, realpath, rename, rm } from 'node:fs/promises';
20
+ import { randomUUID } from 'node:crypto';
21
+ /**
22
+ * Delete only a bridge-minted session directory after its writer is disposed.
23
+ * The upstream persistence API has no delete operation. Keep its pinned
24
+ * two-directory artifact layout in this one adapter, and refuse links rather
25
+ * than letting an artifact path escape the configured local store.
26
+ */
27
+ export async function deleteJsonlSession(storePath, header) {
28
+ if (!/^session-[a-f0-9]{8}-\d+(?:-transient)?$/.test(header.id)) {
29
+ throw new Error('Only sessions created by the Libre WebUI bridge can be deleted.');
30
+ }
31
+ const root = await realpath(storePath);
32
+ const matches = [];
33
+ for (const project of await readdir(root, { withFileTypes: true })) {
34
+ if (!project.isDirectory())
35
+ continue;
36
+ const parent = path.join(root, project.name);
37
+ const target = path.join(parent, header.id);
38
+ const metadata = await lstat(target).catch(error => {
39
+ if (error.code === 'ENOENT')
40
+ return undefined;
41
+ throw error;
42
+ });
43
+ if (!metadata)
44
+ continue;
45
+ if (!metadata.isDirectory() ||
46
+ metadata.isSymbolicLink() ||
47
+ (await realpath(parent)) !== parent ||
48
+ (await realpath(target)) !== target) {
49
+ throw new Error('Refusing to delete a linked Cordis session artifact.');
50
+ }
51
+ matches.push(target);
52
+ }
53
+ if (matches.length !== 1)
54
+ throw new Error('The Cordis session artifact is missing or ambiguous.');
55
+ const target = matches[0];
56
+ const tombstone = path.join(path.dirname(target), `.deleted-${randomUUID()}`);
57
+ await rename(target, tombstone);
58
+ await rm(tombstone, { recursive: true, force: false });
59
+ }
60
+ //# sourceMappingURL=session-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-files.js","sourceRoot":"","sources":["../../../src/cordis/dsh/session-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,qFAAqF;AACrF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB,EACjB,MAAqB;IAErB,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAAE,SAAS;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACjD,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACzE,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,IACE,CAAC,QAAQ,CAAC,WAAW,EAAE;YACvB,QAAQ,CAAC,cAAc,EAAE;YACzB,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;YACnC,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EACnC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Native session settings shared with DSH's session controller. */
2
+ import type { Session } from '@deepseek-ai/dsh-session';
3
+ import type { EngineSessionSettings } from '../contracts.js';
4
+ declare module '@deepseek-ai/dsh-session/types' {
5
+ interface SessionEventMap {
6
+ 'model/selection': {
7
+ readonly provider: string;
8
+ readonly model: string;
9
+ readonly reasoningEffort?: string;
10
+ };
11
+ }
12
+ }
13
+ export declare function sessionSettings(session: Session): EngineSessionSettings;
14
+ export declare function appendSessionSettings(session: Session, settings: Partial<EngineSessionSettings>, provider: string): void;
15
+ //# sourceMappingURL=session-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-settings.d.ts","sourceRoot":"","sources":["../../../src/cordis/dsh/session-settings.ts"],"names":[],"mappings":"AAiBA,oEAAoE;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAM7D,OAAO,QAAQ,gCAAgC,CAAC;IAC9C,UAAU,eAAe;QACvB,iBAAiB,EAAE;YACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;SACnC,CAAC;KACH;CACF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,qBAAqB,CAuBvE;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACxC,QAAQ,EAAE,MAAM,GACf,IAAI,CAKN"}
@@ -0,0 +1,51 @@
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
+ import { setSandboxMode } from '@deepseek-ai/dsh-sandbox-policy';
18
+ import { isProviderModelIdentity } from './model-identity.js';
19
+ export function sessionSettings(session) {
20
+ let model;
21
+ let explicitlySelected;
22
+ let permissionMode = 'read-only';
23
+ for (const event of session.snapshotEvents()) {
24
+ if (event.type === 'sandbox/mode') {
25
+ permissionMode =
26
+ event.data.mode === 'workspace-write' ? 'workspace-write' : 'read-only';
27
+ }
28
+ else if (event.type === 'model/selection') {
29
+ explicitlySelected = isProviderModelIdentity(event.data.model)
30
+ ? event.data.model
31
+ : undefined;
32
+ model = explicitlySelected;
33
+ }
34
+ else if (event.type === 'request/header') {
35
+ const historical = event.data.header.config.model;
36
+ // Old builds logged persona/agent selectors as provider models. Ignore
37
+ // that fallback without changing history or abandoning a real selection.
38
+ model = isProviderModelIdentity(historical)
39
+ ? historical
40
+ : explicitlySelected;
41
+ }
42
+ }
43
+ return { ...(model ? { model } : {}), permissionMode };
44
+ }
45
+ export function appendSessionSettings(session, settings, provider) {
46
+ if (settings.permissionMode !== undefined)
47
+ setSandboxMode(session, settings.permissionMode);
48
+ if (settings.model !== undefined)
49
+ session.append('model/selection', { provider, model: settings.model });
50
+ }
51
+ //# sourceMappingURL=session-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-settings.js","sourceRoot":"","sources":["../../../src/cordis/dsh/session-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAe9D,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,KAAyB,CAAC;IAC9B,IAAI,kBAAsC,CAAC;IAC3C,IAAI,cAAc,GAA4C,WAAW,CAAC;IAC1E,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,cAAc;gBACZ,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5E,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC5C,kBAAkB,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC5D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;gBAClB,CAAC,CAAC,SAAS,CAAC;YACd,KAAK,GAAG,kBAAkB,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAClD,uEAAuE;YACvE,yEAAyE;YACzE,KAAK,GAAG,uBAAuB,CAAC,UAAU,CAAC;gBACzC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,kBAAkB,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,QAAwC,EACxC,QAAgB;IAEhB,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS;QACvC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAC9B,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { OllamaChatRequest, OllamaChatResponse } from '../../types/index.js';
2
+ import type { WorkModelStreamObserver } from '../../services/workModelProviderService.js';
3
+ export interface WorkDshDriver {
4
+ generate(request: OllamaChatRequest, observer: WorkModelStreamObserver, signal?: AbortSignal): Promise<OllamaChatResponse>;
5
+ dispose(): Promise<void>;
6
+ }
7
+ export interface WorkDshDriverOptions {
8
+ generate(request: OllamaChatRequest, observer: WorkModelStreamObserver, signal?: AbortSignal): Promise<OllamaChatResponse>;
9
+ }
10
+ /** Create one in-memory native DSH loop; no host filesystem capabilities mount. */
11
+ export declare function createWorkDshDriver(options: WorkDshDriverOptions): Promise<WorkDshDriver>;
12
+ //# sourceMappingURL=work-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-driver.d.ts","sourceRoot":"","sources":["../../../src/cordis/dsh/work-driver.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAE1F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CACN,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,uBAAuB,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CACN,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,uBAAuB,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAChC;AAoED,mFAAmF;AACnF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,aAAa,CAAC,CA8UxB"}
@@ -0,0 +1,402 @@
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
+ * An isolated DSH planning loop for one Work run. Work remains authoritative
19
+ * for transcripts, authorization, approval, sandbox execution, and durability.
20
+ * Tool bodies here only wait for results supplied by Work's next model step.
21
+ */
22
+ import { randomUUID } from 'node:crypto';
23
+ import { Context } from '@deepseek-ai/cordis';
24
+ import LlmRuntime, { LlmAdapter, createUserMessage, } from '@deepseek-ai/dsh-llm';
25
+ import SessionStore from '@deepseek-ai/dsh-session';
26
+ import SessionProjections from '@deepseek-ai/dsh-session-projection';
27
+ import SystemPrompt from '@deepseek-ai/dsh-system-prompt';
28
+ import ToolRuntime from '@deepseek-ai/dsh-tools';
29
+ import Agents from '@deepseek-ai/dsh-agent';
30
+ import AgentLoop from '@deepseek-ai/dsh-agent-loop';
31
+ /** Queue provider deltas without starting another model request. */
32
+ class ChunkQueue {
33
+ constructor(overflow) {
34
+ this.overflow = overflow;
35
+ this.chunks = [];
36
+ this.ended = false;
37
+ this.queuedBytes = 0;
38
+ }
39
+ push(chunk) {
40
+ if (this.ended)
41
+ return;
42
+ const bytes = Buffer.byteLength(JSON.stringify(chunk));
43
+ if (this.queuedBytes + bytes > 2 * 1024 * 1024 ||
44
+ this.chunks.length >= 10000) {
45
+ const error = new Error('The Work provider exceeded the DSH stream buffer limit.');
46
+ this.overflow(error);
47
+ this.finish(error);
48
+ throw error;
49
+ }
50
+ this.chunks.push(chunk);
51
+ this.queuedBytes += bytes;
52
+ this.wake?.();
53
+ }
54
+ finish(error) {
55
+ this.failure = error;
56
+ if (error) {
57
+ this.chunks.length = 0;
58
+ this.queuedBytes = 0;
59
+ }
60
+ this.ended = true;
61
+ this.wake?.();
62
+ }
63
+ async *read() {
64
+ while (true) {
65
+ if (this.chunks.length) {
66
+ const chunk = this.chunks.shift();
67
+ this.queuedBytes -= Buffer.byteLength(JSON.stringify(chunk));
68
+ yield chunk;
69
+ continue;
70
+ }
71
+ if (this.ended) {
72
+ if (this.failure)
73
+ throw this.failure;
74
+ return;
75
+ }
76
+ await new Promise(resolve => {
77
+ this.wake = resolve;
78
+ });
79
+ this.wake = undefined;
80
+ }
81
+ }
82
+ }
83
+ /** Create one in-memory native DSH loop; no host filesystem capabilities mount. */
84
+ export async function createWorkDshDriver(options) {
85
+ const ctx = new Context();
86
+ let disposed = false;
87
+ let active;
88
+ let delivering;
89
+ let recovery;
90
+ let agent;
91
+ let nextModel;
92
+ const toolResults = new Map();
93
+ const toolWaiters = new Map();
94
+ const registered = new Map();
95
+ const fail = (error, step = active) => {
96
+ if (!step || active !== step)
97
+ return;
98
+ active = undefined;
99
+ // Provider rejection reaches the caller before DSH records its failure.
100
+ // Drain that native activity before a retry can become the active step.
101
+ recovery = agent?.agent.whenIdle().catch(() => undefined);
102
+ step.detach();
103
+ step.controller.abort(error);
104
+ step.reject(error);
105
+ };
106
+ class WorkAdapter extends LlmAdapter {
107
+ async *stream(call) {
108
+ while (!active && !disposed) {
109
+ await new Promise((resolve, reject) => {
110
+ const cleanup = () => call.signal?.removeEventListener('abort', abortWait);
111
+ const abortWait = () => {
112
+ cleanup();
113
+ nextModel = undefined;
114
+ reject(call.signal?.reason);
115
+ };
116
+ nextModel = () => {
117
+ cleanup();
118
+ resolve();
119
+ };
120
+ call.signal?.addEventListener('abort', abortWait, { once: true });
121
+ if (call.signal?.aborted)
122
+ abortWait();
123
+ });
124
+ nextModel = undefined;
125
+ }
126
+ if (disposed)
127
+ throw new Error('The Work DSH driver is disposed.');
128
+ const step = active;
129
+ if (step.claimed)
130
+ throw new Error('A Work model step is already running.');
131
+ step.claimed = true;
132
+ delivering = step;
133
+ const abort = () => step.controller.abort(call.signal?.reason);
134
+ call.signal?.addEventListener('abort', abort, { once: true });
135
+ if (call.signal?.aborted)
136
+ abort();
137
+ const queue = new ChunkQueue(error => {
138
+ step.controller.abort(error);
139
+ fail(error, step);
140
+ });
141
+ const blocks = new Map();
142
+ let nextIndex = 0;
143
+ const emit = (kind, delta) => {
144
+ if (!delta || active !== step || step.controller.signal.aborted)
145
+ return;
146
+ let block = blocks.get(kind);
147
+ if (!block) {
148
+ block = { index: nextIndex++, text: '' };
149
+ blocks.set(kind, block);
150
+ queue.push({
151
+ type: 'block-start',
152
+ index: block.index,
153
+ blockType: kind,
154
+ });
155
+ }
156
+ block.text += delta;
157
+ queue.push({
158
+ type: kind === 'text' ? 'text-delta' : 'reasoning-delta',
159
+ index: block.index,
160
+ text: delta,
161
+ });
162
+ };
163
+ const run = (async () => {
164
+ const original = await options.generate(step.request, {
165
+ onContent: text => emit('text', text),
166
+ onReasoning: text => emit('reasoning', text),
167
+ onUsage: usage => {
168
+ if (active === step && !step.controller.signal.aborted)
169
+ step.observer.onUsage?.(usage);
170
+ },
171
+ }, step.controller.signal);
172
+ step.controller.signal.throwIfAborted();
173
+ const rawCalls = original.message.tool_calls ?? [];
174
+ const calls = rawCalls.map(call => typeof call.id === 'string'
175
+ ? call
176
+ : { ...call, id: `work-dsh-${randomUUID()}` });
177
+ step.response = calls.some((call, index) => call !== rawCalls[index])
178
+ ? { ...original, message: { ...original.message, tool_calls: calls } }
179
+ : original;
180
+ for (const [kind, full] of [
181
+ ['reasoning', original.message.thinking ?? ''],
182
+ ['text', original.message.content],
183
+ ]) {
184
+ const streamed = blocks.get(kind)?.text ?? '';
185
+ if (full.startsWith(streamed))
186
+ emit(kind, full.slice(streamed.length));
187
+ }
188
+ for (const [kind, block] of blocks)
189
+ queue.push({
190
+ type: 'block-end',
191
+ index: block.index,
192
+ block: { type: kind, text: block.text },
193
+ });
194
+ for (const record of calls) {
195
+ const fn = record.function;
196
+ if (!fn ||
197
+ typeof fn.name !== 'string' ||
198
+ typeof record.id !== 'string')
199
+ throw new Error('The Work provider returned an invalid tool call.');
200
+ const index = nextIndex++;
201
+ const args = typeof fn.arguments === 'string'
202
+ ? fn.arguments
203
+ : JSON.stringify(fn.arguments ?? {});
204
+ queue.push({ type: 'block-start', index, blockType: 'tool-call' });
205
+ queue.push({
206
+ type: 'tool-call-delta',
207
+ index,
208
+ id: record.id,
209
+ name: fn.name,
210
+ argumentsDelta: args,
211
+ });
212
+ queue.push({
213
+ type: 'block-end',
214
+ index,
215
+ block: {
216
+ type: 'tool-call',
217
+ id: record.id,
218
+ name: fn.name,
219
+ arguments: args,
220
+ },
221
+ });
222
+ }
223
+ queue.push({
224
+ type: 'finish',
225
+ reason: { kind: calls.length ? 'tool-calls' : 'stop' },
226
+ });
227
+ })();
228
+ void run.then(() => queue.finish(), error => {
229
+ fail(error, step);
230
+ queue.finish(error);
231
+ });
232
+ try {
233
+ yield* queue.read();
234
+ }
235
+ finally {
236
+ call.signal?.removeEventListener('abort', abort);
237
+ await run.catch(() => undefined);
238
+ }
239
+ }
240
+ }
241
+ try {
242
+ await ctx.plugin(LlmRuntime);
243
+ await ctx.plugin(SessionStore);
244
+ await ctx.plugin(SessionProjections);
245
+ await ctx.plugin(SystemPrompt, { personaPrefix: '' });
246
+ await ctx.plugin(ToolRuntime);
247
+ await ctx.plugin(Agents);
248
+ await ctx.plugin(AgentLoop, { agents: [] });
249
+ ctx.llm.registerAdapter(['libre-work'], new WorkAdapter());
250
+ ctx.on('agent/assistant-stream', ({ frame }) => {
251
+ if (frame.type !== 'chunk' || !active || active !== delivering)
252
+ return;
253
+ if (frame.chunk.type === 'text-delta')
254
+ active.observer.onContent?.(frame.chunk.text);
255
+ if (frame.chunk.type === 'reasoning-delta')
256
+ active.observer.onReasoning?.(frame.chunk.text);
257
+ });
258
+ ctx.on('session/event', (_session, event) => {
259
+ if (event.type !== 'assistant/message' ||
260
+ !active?.response ||
261
+ active !== delivering)
262
+ return;
263
+ const step = active;
264
+ active = undefined;
265
+ step.detach();
266
+ step.resolve(step.response);
267
+ });
268
+ ctx.on('agent/error', ({ error }) => fail(error, active?.claimed ? delivering : active));
269
+ agent = await ctx.agents.create({
270
+ sessionId: `work-${randomUUID()}`,
271
+ agentOptions: { provider: 'libre-work', model: 'work-model' },
272
+ });
273
+ }
274
+ catch (error) {
275
+ await ctx.fiber.dispose();
276
+ throw error;
277
+ }
278
+ const driver = {
279
+ async generate(request, observer, signal) {
280
+ signal?.throwIfAborted();
281
+ const draining = recovery;
282
+ await draining;
283
+ if (recovery === draining)
284
+ recovery = undefined;
285
+ if (disposed)
286
+ throw new Error('The Work DSH driver is disposed.');
287
+ if (active)
288
+ throw new Error('A Work model step is already running.');
289
+ signal?.throwIfAborted();
290
+ for (const dispose of registered.values())
291
+ dispose();
292
+ registered.clear();
293
+ for (const raw of request.tools ?? []) {
294
+ const fn = raw.function;
295
+ if (!fn || typeof fn.name !== 'string' || registered.has(fn.name))
296
+ continue;
297
+ registered.set(fn.name, ctx.tools.register({
298
+ name: fn.name,
299
+ description: typeof fn.description === 'string' ? fn.description : '',
300
+ parameters: {
301
+ type: 'object',
302
+ properties: {},
303
+ additionalProperties: true,
304
+ },
305
+ output: {
306
+ schema: { type: 'string' },
307
+ render: (_args, value) => [{ type: 'text', text: String(value) }],
308
+ },
309
+ async execute(_args, exec) {
310
+ exec.signal.throwIfAborted();
311
+ const immediate = toolResults.get(exec.callId);
312
+ if (immediate !== undefined) {
313
+ toolResults.delete(exec.callId);
314
+ return immediate;
315
+ }
316
+ return new Promise((resolve, reject) => {
317
+ const abort = () => {
318
+ toolWaiters.delete(exec.callId);
319
+ reject(exec.signal.reason);
320
+ };
321
+ const finish = (value) => {
322
+ exec.signal.removeEventListener('abort', abort);
323
+ toolWaiters.delete(exec.callId);
324
+ resolve(value);
325
+ };
326
+ const failWait = (error) => {
327
+ exec.signal.removeEventListener('abort', abort);
328
+ toolWaiters.delete(exec.callId);
329
+ reject(error);
330
+ };
331
+ toolWaiters.set(exec.callId, {
332
+ resolve: finish,
333
+ reject: failWait,
334
+ });
335
+ exec.signal.addEventListener('abort', abort, { once: true });
336
+ });
337
+ },
338
+ }));
339
+ }
340
+ return new Promise((resolve, reject) => {
341
+ const controller = new AbortController();
342
+ const abort = () => {
343
+ controller.abort(signal?.reason);
344
+ agent?.agent.cancel({ kind: 'user' });
345
+ fail(signal?.reason ?? new Error('Work generation aborted.'), step);
346
+ };
347
+ const step = {
348
+ request,
349
+ observer,
350
+ controller,
351
+ claimed: false,
352
+ resolve,
353
+ reject,
354
+ detach: () => signal?.removeEventListener('abort', abort),
355
+ };
356
+ active = step;
357
+ signal?.addEventListener('abort', abort, { once: true });
358
+ for (const message of request.messages) {
359
+ if (message.role !== 'tool' || !message.tool_call_id)
360
+ continue;
361
+ const waiter = toolWaiters.get(message.tool_call_id);
362
+ if (waiter)
363
+ waiter.resolve(message.content);
364
+ else
365
+ toolResults.set(message.tool_call_id, message.content);
366
+ }
367
+ nextModel?.();
368
+ // Idle follow-ups wake a new DSH turn. A loop still consuming Work tool
369
+ // results advances itself; checking claimed avoids a duplicate wake.
370
+ void agent.agent
371
+ .whenIdle()
372
+ .then(() => {
373
+ if (active !== step || step.claimed || disposed)
374
+ return;
375
+ agent.agent.followup(createUserMessage({
376
+ source: { kind: 'user' },
377
+ content: [
378
+ { type: 'text', text: 'Continue the current Work request.' },
379
+ ],
380
+ }));
381
+ })
382
+ .catch(error => fail(error, step));
383
+ });
384
+ },
385
+ async dispose() {
386
+ if (disposed)
387
+ return;
388
+ disposed = true;
389
+ const error = new Error('The Work DSH driver is disposed.');
390
+ fail(error);
391
+ nextModel?.();
392
+ for (const waiter of toolWaiters.values())
393
+ waiter.reject(error);
394
+ toolWaiters.clear();
395
+ toolResults.clear();
396
+ await agent?.dispose();
397
+ await ctx.fiber.dispose();
398
+ },
399
+ };
400
+ return driver;
401
+ }
402
+ //# sourceMappingURL=work-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-driver.js","sourceRoot":"","sources":["../../../src/cordis/dsh/work-driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { FileSystem } from '@deepseek-ai/dsh-fs';
3
+ /**
4
+ * Check using the filesystem provider's canonical identities, including symlink
5
+ * ancestors and physical `..` traversal, exactly as its tool implementation does.
6
+ */
7
+ export declare function assertWorkspaceToolPath(fs: FileSystem, workspacePath: string, cwd: string, requestedPath: string, signal?: AbortSignal): Promise<void>;
8
+ /** Add read confinement to the shipped filesystem backend's mutation policy. */
9
+ export declare function installWorkspaceToolPolicy(ctx: Context, workspacePath: string): void;
10
+ //# sourceMappingURL=workspace-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-policy.d.ts","sourceRoot":"","sources":["../../../src/cordis/dsh/workspace-policy.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQtD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,MAAM,GACpB,IAAI,CAyBN"}
@@ -0,0 +1,44 @@
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
+ const FILESYSTEM_TOOLS = new Set(['read', 'read_image', 'write', 'edit']);
18
+ /**
19
+ * Check using the filesystem provider's canonical identities, including symlink
20
+ * ancestors and physical `..` traversal, exactly as its tool implementation does.
21
+ */
22
+ export async function assertWorkspaceToolPath(fs, workspacePath, cwd, requestedPath, signal) {
23
+ const root = await fs.resolve(workspacePath, { signal });
24
+ const directory = await fs.resolve(cwd, { signal });
25
+ const target = await fs.resolve(requestedPath, { cwd, signal });
26
+ if (!fs.contains(root, directory) || !fs.contains(root, target)) {
27
+ throw new Error('Filesystem tools are restricted to the configured Cordis workspace.');
28
+ }
29
+ }
30
+ /** Add read confinement to the shipped filesystem backend's mutation policy. */
31
+ export function installWorkspaceToolPolicy(ctx, workspacePath) {
32
+ ctx.on('tools/execute', async (exec, next) => {
33
+ if (!FILESYSTEM_TOOLS.has(exec.name))
34
+ return next();
35
+ const fs = ctx.get('fs');
36
+ const args = exec.arguments;
37
+ if (!fs || typeof args?.file_path !== 'string') {
38
+ throw new Error('A filesystem tool requires a valid path and filesystem provider.');
39
+ }
40
+ await assertWorkspaceToolPath(fs, workspacePath, exec.agent?.session.header.cwd ?? workspacePath, args.file_path, exec.signal);
41
+ return next();
42
+ });
43
+ }
44
+ //# sourceMappingURL=workspace-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-policy.js","sourceRoot":"","sources":["../../../src/cordis/dsh/workspace-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,EAAc,EACd,aAAqB,EACrB,GAAW,EACX,aAAqB,EACrB,MAAoB;IAEpB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,0BAA0B,CACxC,GAAY,EACZ,aAAqB;IAErB,GAAG,CAAC,EAAE,CACJ,eAAe,EACf,KAAK,EACH,IAA2B,EAC3B,IAAwC,EACxC,EAAE;QACF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,EAAE,CAAC;QACpD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAA2B,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAA2C,CAAC;QAC9D,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;QACJ,CAAC;QACD,MAAM,uBAAuB,CAC3B,EAAE,EACF,aAAa,EACb,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,aAAa,EAC/C,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC"}