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
@@ -0,0 +1,131 @@
1
+ import type { Agent, MessageData } from '@strands-agents/sdk';
2
+ import type { ChatMessage } from '../types/index.js';
3
+ import { type ResolvedStrandsRoute } from './catalog.js';
4
+ export declare const STRANDS_MAX_TURNS = 24;
5
+ export declare const STRANDS_MAX_SESSIONS_PER_USER = 200;
6
+ export declare const STRANDS_MAX_PROMPT_CHARS = 32000;
7
+ export declare const STRANDS_INSTRUCTIONS = "You are the Strands agent inside Libre WebUI.\nYou have a private workspace at /workspace. File tools take absolute paths under /workspace; nothing outside it exists for you.\nYou cannot run shell commands or reach the network. Plan multi-step work with the todo tool, keep answers concise, and say plainly when something is outside what you can do.";
8
+ export type StrandsTurnEvent = {
9
+ type: 'turn-start';
10
+ sessionId: string;
11
+ messageId: string;
12
+ } | {
13
+ type: 'text';
14
+ text: string;
15
+ } | {
16
+ type: 'reasoning';
17
+ text: string;
18
+ } | {
19
+ type: 'tool-start';
20
+ toolUseId: string;
21
+ name: string;
22
+ input: unknown;
23
+ } | {
24
+ type: 'tool-result';
25
+ toolUseId: string;
26
+ status: 'success' | 'error';
27
+ output: string;
28
+ } | {
29
+ type: 'done';
30
+ stopReason: string;
31
+ usage?: {
32
+ inputTokens: number;
33
+ outputTokens: number;
34
+ };
35
+ } | {
36
+ type: 'error';
37
+ message: string;
38
+ };
39
+ export interface StrandsToolTrace {
40
+ id: string;
41
+ name: string;
42
+ input: unknown;
43
+ status?: 'success' | 'error';
44
+ output?: string;
45
+ }
46
+ export interface StrandsTranscriptEntry {
47
+ id: string;
48
+ role: 'user' | 'assistant';
49
+ content: string;
50
+ thinking?: string;
51
+ tools?: StrandsToolTrace[];
52
+ stopReason?: string;
53
+ error?: string;
54
+ createdAt: number;
55
+ }
56
+ export interface StrandsSessionSummary {
57
+ id: string;
58
+ title: string;
59
+ model: string | null;
60
+ createdAt: number;
61
+ updatedAt: number;
62
+ messageCount: number;
63
+ }
64
+ export declare class StrandsEngineError extends Error {
65
+ readonly status: number;
66
+ constructor(message: string, status?: number);
67
+ }
68
+ export declare function strandsDataDirectory(): string;
69
+ interface AgentOptions {
70
+ userId: string;
71
+ target: ResolvedStrandsRoute;
72
+ workspace: string;
73
+ session?: {
74
+ id: string;
75
+ dir: string;
76
+ };
77
+ messages?: MessageData[];
78
+ instructions?: string;
79
+ }
80
+ /** Build a harness agent with Libre WebUI's locked-down defaults. */
81
+ export declare function createStrandsAgent(options: AgentOptions): Promise<Agent>;
82
+ /**
83
+ * Run one agent invocation and translate the Strands stream into the
84
+ * engine's event vocabulary. Returns the stop reason.
85
+ */
86
+ export declare function streamAgentTurn(agent: Agent, prompt: string, signal?: AbortSignal): AsyncGenerator<StrandsTurnEvent, void, undefined>;
87
+ /** Fold engine events into a transcript entry as they stream. */
88
+ export declare function applyTurnEvent(entry: StrandsTranscriptEntry, event: StrandsTurnEvent): void;
89
+ export declare class StrandsEngine {
90
+ private readonly agents;
91
+ private readonly active;
92
+ private readonly locks;
93
+ /** Serialize registry writes per account. */
94
+ private withUserLock;
95
+ private registryFile;
96
+ private transcriptFile;
97
+ private workspaceDirectory;
98
+ private snapshotDirectory;
99
+ private registry;
100
+ listSessions(userId: string): Promise<StrandsSessionSummary[]>;
101
+ getSession(userId: string, sessionId: string): Promise<StrandsSessionSummary>;
102
+ createSession(userId: string, input?: {
103
+ title?: string;
104
+ model?: string | null;
105
+ }): Promise<StrandsSessionSummary>;
106
+ updateSession(userId: string, sessionId: string, input: {
107
+ title?: string;
108
+ model?: string | null;
109
+ }): Promise<StrandsSessionSummary>;
110
+ deleteSession(userId: string, sessionId: string): Promise<void>;
111
+ transcript(userId: string, sessionId: string): Promise<StrandsTranscriptEntry[]>;
112
+ isRunning(userId: string, sessionId: string): boolean;
113
+ cancel(userId: string, sessionId: string): boolean;
114
+ private evictIdle;
115
+ private sessionAgent;
116
+ /** Send one message to a session and stream the turn. */
117
+ sendMessage(userId: string, sessionId: string, text: string, signal?: AbortSignal): AsyncGenerator<StrandsTurnEvent, void, undefined>;
118
+ /**
119
+ * One Chat turn. Chat owns its transcript, so the agent is rebuilt from it
120
+ * each time with no snapshot, and files land in a per-account scratch
121
+ * workspace.
122
+ */
123
+ chatTurn(userId: string, messages: readonly ChatMessage[], options?: {
124
+ model?: string;
125
+ signal?: AbortSignal;
126
+ }): AsyncGenerator<StrandsTurnEvent, void, undefined>;
127
+ stop(): Promise<void>;
128
+ }
129
+ export declare const strandsEngine: StrandsEngine;
130
+ export {};
131
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/strands/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,477 @@
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
+ * The Strands agent engine behind /api/strands and the Chat agent model.
19
+ *
20
+ * Each engine session is a Strands harness agent with a private, jailed
21
+ * workspace, the read/write/edit file tools, and the todos planner. The
22
+ * harness defaults that reach past the account (shell, web access, host
23
+ * AGENTS.md injection, cwd-relative memory and skills, console printing) are
24
+ * all switched off. Strands keeps its own snapshot for model context; this
25
+ * module keeps a display transcript and a small registry per account.
26
+ */
27
+ import { createHash, randomUUID } from 'node:crypto';
28
+ import fs from 'node:fs/promises';
29
+ import path from 'node:path';
30
+ import { resolveDataDirectory } from '../utils/dataDirectory.js';
31
+ import { createLogger } from '../utils/logger.js';
32
+ import { resolveStrandsRoute } from './catalog.js';
33
+ import { LibreWebUiModel } from './model.js';
34
+ import { STRANDS_WORKSPACE_ROOT, WorkspaceSandbox } from './sandbox.js';
35
+ import { loadHarness } from './harness.js';
36
+ const logger = createLogger('strands-engine');
37
+ export const STRANDS_MAX_TURNS = 24;
38
+ export const STRANDS_MAX_SESSIONS_PER_USER = 200;
39
+ export const STRANDS_MAX_PROMPT_CHARS = 32000;
40
+ const MAX_TOOL_OUTPUT_CHARS = 4000;
41
+ const MAX_CACHED_AGENTS = 16;
42
+ const AGENT_IDLE_MS = 15 * 60 * 1000;
43
+ export const STRANDS_INSTRUCTIONS = `You are the Strands agent inside Libre WebUI.
44
+ You have a private workspace at ${STRANDS_WORKSPACE_ROOT}. File tools take absolute paths under ${STRANDS_WORKSPACE_ROOT}; nothing outside it exists for you.
45
+ You cannot run shell commands or reach the network. Plan multi-step work with the todo tool, keep answers concise, and say plainly when something is outside what you can do.`;
46
+ export class StrandsEngineError extends Error {
47
+ constructor(message, status = 400) {
48
+ super(message);
49
+ this.status = status;
50
+ this.name = 'StrandsEngineError';
51
+ }
52
+ }
53
+ function userKey(userId) {
54
+ return createHash('sha256').update(userId).digest('hex').slice(0, 32);
55
+ }
56
+ export function strandsDataDirectory() {
57
+ return path.join(process.env.DATA_DIR || resolveDataDirectory(), 'strands');
58
+ }
59
+ function userDirectory(userId) {
60
+ return path.join(strandsDataDirectory(), 'users', userKey(userId));
61
+ }
62
+ function isSessionId(value) {
63
+ return /^[a-f0-9-]{36}$/.test(value);
64
+ }
65
+ async function writeJsonAtomic(file, value) {
66
+ await fs.mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
67
+ const temporary = `${file}.${randomUUID()}.tmp`;
68
+ await fs.writeFile(temporary, JSON.stringify(value), { mode: 0o600 });
69
+ await fs.rename(temporary, file);
70
+ }
71
+ async function readJson(file, fallback) {
72
+ try {
73
+ return JSON.parse(await fs.readFile(file, 'utf8'));
74
+ }
75
+ catch {
76
+ return fallback;
77
+ }
78
+ }
79
+ function truncate(value, limit) {
80
+ return value.length > limit ? `${value.slice(0, limit)}\n[truncated]` : value;
81
+ }
82
+ function toolResultText(result) {
83
+ return truncate(result.content
84
+ .map(item => item.type === 'textBlock'
85
+ ? (item.text ?? '')
86
+ : item.type === 'jsonBlock'
87
+ ? JSON.stringify(item.json)
88
+ : `[${item.type}]`)
89
+ .join('\n'), MAX_TOOL_OUTPUT_CHARS);
90
+ }
91
+ /** Build a harness agent with Libre WebUI's locked-down defaults. */
92
+ export async function createStrandsAgent(options) {
93
+ const { createHarness } = await loadHarness();
94
+ return createHarness({
95
+ model: new LibreWebUiModel(options.target, options.userId),
96
+ instructions: options.instructions ?? STRANDS_INSTRUCTIONS,
97
+ builtinTools: ['read', 'write', 'edit'],
98
+ builtinPlugins: ['todos'],
99
+ backgroundTasks: false,
100
+ caching: false,
101
+ skills: null,
102
+ memory: null,
103
+ printer: false,
104
+ sandbox: new WorkspaceSandbox(options.workspace),
105
+ ...(options.session
106
+ ? { session: options.session }
107
+ : { session: null, contextManager: null }),
108
+ ...(options.messages?.length ? { messages: options.messages } : {}),
109
+ });
110
+ }
111
+ /**
112
+ * Run one agent invocation and translate the Strands stream into the
113
+ * engine's event vocabulary. Returns the stop reason.
114
+ */
115
+ export async function* streamAgentTurn(agent, prompt, signal) {
116
+ const stream = agent.stream(prompt, {
117
+ ...(signal ? { cancelSignal: signal } : {}),
118
+ limits: { turns: STRANDS_MAX_TURNS },
119
+ });
120
+ let inputTokens = 0;
121
+ let outputTokens = 0;
122
+ let sawUsage = false;
123
+ for (;;) {
124
+ const next = await stream.next();
125
+ if (next.done) {
126
+ yield {
127
+ type: 'done',
128
+ stopReason: String(next.value?.stopReason ?? 'endTurn'),
129
+ ...(sawUsage ? { usage: { inputTokens, outputTokens } } : {}),
130
+ };
131
+ return;
132
+ }
133
+ const event = next.value;
134
+ if (event.type === 'modelStreamUpdateEvent') {
135
+ const inner = event.event;
136
+ if (inner.type === 'modelContentBlockDeltaEvent') {
137
+ if (inner.delta.type === 'textDelta' && inner.delta.text) {
138
+ yield { type: 'text', text: inner.delta.text };
139
+ }
140
+ else if (inner.delta.type === 'reasoningContentDelta' &&
141
+ inner.delta.text) {
142
+ yield { type: 'reasoning', text: inner.delta.text };
143
+ }
144
+ }
145
+ else if (inner.type === 'modelMetadataEvent' && inner.usage) {
146
+ sawUsage = true;
147
+ inputTokens += inner.usage.inputTokens ?? 0;
148
+ outputTokens += inner.usage.outputTokens ?? 0;
149
+ }
150
+ }
151
+ else if (event.type === 'contentBlockEvent') {
152
+ const block = event.contentBlock;
153
+ if (block.type === 'toolUseBlock') {
154
+ yield {
155
+ type: 'tool-start',
156
+ toolUseId: block.toolUseId,
157
+ name: block.name,
158
+ input: block.input,
159
+ };
160
+ }
161
+ }
162
+ else if (event.type === 'toolResultEvent') {
163
+ yield {
164
+ type: 'tool-result',
165
+ toolUseId: event.result.toolUseId,
166
+ status: event.result.status,
167
+ output: toolResultText(event.result),
168
+ };
169
+ }
170
+ }
171
+ }
172
+ /** Fold engine events into a transcript entry as they stream. */
173
+ export function applyTurnEvent(entry, event) {
174
+ if (event.type === 'text')
175
+ entry.content += event.text;
176
+ else if (event.type === 'reasoning') {
177
+ entry.thinking = (entry.thinking ?? '') + event.text;
178
+ }
179
+ else if (event.type === 'tool-start') {
180
+ (entry.tools ?? (entry.tools = [])).push({
181
+ id: event.toolUseId,
182
+ name: event.name,
183
+ input: event.input,
184
+ });
185
+ }
186
+ else if (event.type === 'tool-result') {
187
+ const trace = entry.tools?.find(tool => tool.id === event.toolUseId);
188
+ if (trace) {
189
+ trace.status = event.status;
190
+ trace.output = event.output;
191
+ }
192
+ }
193
+ else if (event.type === 'done')
194
+ entry.stopReason = event.stopReason;
195
+ else if (event.type === 'error')
196
+ entry.error = event.message;
197
+ }
198
+ export class StrandsEngine {
199
+ constructor() {
200
+ this.agents = new Map();
201
+ this.active = new Map();
202
+ this.locks = new Map();
203
+ }
204
+ /** Serialize registry writes per account. */
205
+ async withUserLock(userId, work) {
206
+ const key = userKey(userId);
207
+ const previous = this.locks.get(key) ?? Promise.resolve();
208
+ const run = previous.catch(() => undefined).then(work);
209
+ this.locks.set(key, run.finally(() => {
210
+ if (this.locks.get(key) === run)
211
+ this.locks.delete(key);
212
+ }));
213
+ return run;
214
+ }
215
+ registryFile(userId) {
216
+ return path.join(userDirectory(userId), 'registry.json');
217
+ }
218
+ transcriptFile(userId, sessionId) {
219
+ return path.join(userDirectory(userId), 'transcripts', `${sessionId}.json`);
220
+ }
221
+ workspaceDirectory(userId, sessionId) {
222
+ return path.join(userDirectory(userId), 'workspaces', sessionId);
223
+ }
224
+ snapshotDirectory(userId) {
225
+ return path.join(userDirectory(userId), 'sessions');
226
+ }
227
+ async registry(userId) {
228
+ const registry = await readJson(this.registryFile(userId), {
229
+ sessions: [],
230
+ });
231
+ return Array.isArray(registry.sessions) ? registry : { sessions: [] };
232
+ }
233
+ async listSessions(userId) {
234
+ return [...(await this.registry(userId)).sessions].sort((a, b) => b.updatedAt - a.updatedAt);
235
+ }
236
+ async getSession(userId, sessionId) {
237
+ if (!isSessionId(sessionId)) {
238
+ throw new StrandsEngineError('Strands session not found.', 404);
239
+ }
240
+ const session = (await this.registry(userId)).sessions.find(candidate => candidate.id === sessionId);
241
+ if (!session)
242
+ throw new StrandsEngineError('Strands session not found.', 404);
243
+ return session;
244
+ }
245
+ async createSession(userId, input = {}) {
246
+ const model = input.model?.trim() || null;
247
+ if (model)
248
+ await resolveStrandsRoute(model, userId);
249
+ return this.withUserLock(userId, async () => {
250
+ const registry = await this.registry(userId);
251
+ if (registry.sessions.length >= STRANDS_MAX_SESSIONS_PER_USER) {
252
+ throw new StrandsEngineError('Delete an old Strands session before creating another.', 409);
253
+ }
254
+ const now = Date.now();
255
+ const session = {
256
+ id: randomUUID(),
257
+ title: input.title?.trim().slice(0, 120) || 'New session',
258
+ model,
259
+ createdAt: now,
260
+ updatedAt: now,
261
+ messageCount: 0,
262
+ };
263
+ registry.sessions.push(session);
264
+ await writeJsonAtomic(this.registryFile(userId), registry);
265
+ return session;
266
+ });
267
+ }
268
+ async updateSession(userId, sessionId, input) {
269
+ await this.getSession(userId, sessionId);
270
+ if (input.model)
271
+ await resolveStrandsRoute(input.model, userId);
272
+ return this.withUserLock(userId, async () => {
273
+ const registry = await this.registry(userId);
274
+ const session = registry.sessions.find(item => item.id === sessionId);
275
+ if (!session) {
276
+ throw new StrandsEngineError('Strands session not found.', 404);
277
+ }
278
+ if (typeof input.title === 'string' && input.title.trim()) {
279
+ session.title = input.title.trim().slice(0, 120);
280
+ }
281
+ if (input.model !== undefined)
282
+ session.model = input.model?.trim() || null;
283
+ session.updatedAt = Date.now();
284
+ await writeJsonAtomic(this.registryFile(userId), registry);
285
+ return session;
286
+ });
287
+ }
288
+ async deleteSession(userId, sessionId) {
289
+ await this.getSession(userId, sessionId);
290
+ const key = `${userKey(userId)}:${sessionId}`;
291
+ this.active.get(key)?.abort(new Error('Session deleted'));
292
+ this.agents.delete(key);
293
+ await this.withUserLock(userId, async () => {
294
+ const registry = await this.registry(userId);
295
+ registry.sessions = registry.sessions.filter(item => item.id !== sessionId);
296
+ await writeJsonAtomic(this.registryFile(userId), registry);
297
+ });
298
+ await Promise.all([
299
+ fs.rm(this.transcriptFile(userId, sessionId), { force: true }),
300
+ fs.rm(this.workspaceDirectory(userId, sessionId), {
301
+ recursive: true,
302
+ force: true,
303
+ }),
304
+ fs.rm(path.join(this.snapshotDirectory(userId), sessionId), {
305
+ recursive: true,
306
+ force: true,
307
+ }),
308
+ ]);
309
+ }
310
+ async transcript(userId, sessionId) {
311
+ await this.getSession(userId, sessionId);
312
+ return readJson(this.transcriptFile(userId, sessionId), []);
313
+ }
314
+ isRunning(userId, sessionId) {
315
+ return this.active.has(`${userKey(userId)}:${sessionId}`);
316
+ }
317
+ cancel(userId, sessionId) {
318
+ const controller = this.active.get(`${userKey(userId)}:${sessionId}`);
319
+ if (!controller)
320
+ return false;
321
+ controller.abort(new Error('Cancelled'));
322
+ return true;
323
+ }
324
+ evictIdle(now = Date.now()) {
325
+ for (const [key, cached] of this.agents) {
326
+ if (this.active.has(key))
327
+ continue;
328
+ if (now - cached.lastUsed > AGENT_IDLE_MS ||
329
+ this.agents.size > MAX_CACHED_AGENTS) {
330
+ this.agents.delete(key);
331
+ }
332
+ }
333
+ }
334
+ async sessionAgent(userId, session) {
335
+ const key = `${userKey(userId)}:${session.id}`;
336
+ const target = await resolveStrandsRoute(session.model ?? undefined, userId);
337
+ const cached = this.agents.get(key);
338
+ if (cached && cached.modelId === target.id) {
339
+ cached.lastUsed = Date.now();
340
+ return cached.agent;
341
+ }
342
+ const agent = await createStrandsAgent({
343
+ userId,
344
+ target,
345
+ workspace: this.workspaceDirectory(userId, session.id),
346
+ session: { id: session.id, dir: this.snapshotDirectory(userId) },
347
+ });
348
+ this.agents.set(key, { agent, modelId: target.id, lastUsed: Date.now() });
349
+ this.evictIdle();
350
+ return agent;
351
+ }
352
+ /** Send one message to a session and stream the turn. */
353
+ async *sendMessage(userId, sessionId, text, signal) {
354
+ const prompt = text.trim();
355
+ if (!prompt)
356
+ throw new StrandsEngineError('A message is required.');
357
+ if (prompt.length > STRANDS_MAX_PROMPT_CHARS) {
358
+ throw new StrandsEngineError('The message is too long.', 413);
359
+ }
360
+ const session = await this.getSession(userId, sessionId);
361
+ const key = `${userKey(userId)}:${sessionId}`;
362
+ if (this.active.has(key)) {
363
+ throw new StrandsEngineError('This session is already running a turn.', 409);
364
+ }
365
+ const controller = new AbortController();
366
+ this.active.set(key, controller);
367
+ const turnSignal = signal
368
+ ? AbortSignal.any([signal, controller.signal])
369
+ : controller.signal;
370
+ const transcript = await readJson(this.transcriptFile(userId, sessionId), []);
371
+ const now = Date.now();
372
+ transcript.push({
373
+ id: randomUUID(),
374
+ role: 'user',
375
+ content: prompt,
376
+ createdAt: now,
377
+ });
378
+ const reply = {
379
+ id: randomUUID(),
380
+ role: 'assistant',
381
+ content: '',
382
+ createdAt: now,
383
+ };
384
+ try {
385
+ yield { type: 'turn-start', sessionId, messageId: reply.id };
386
+ const agent = await this.sessionAgent(userId, session);
387
+ for await (const event of streamAgentTurn(agent, prompt, turnSignal)) {
388
+ applyTurnEvent(reply, event);
389
+ yield event;
390
+ }
391
+ }
392
+ catch (error) {
393
+ const message = turnSignal.aborted
394
+ ? 'The turn was cancelled.'
395
+ : error instanceof Error
396
+ ? error.message
397
+ : String(error);
398
+ if (!turnSignal.aborted) {
399
+ logger.warn('Strands turn failed', { error });
400
+ }
401
+ // A failed invocation can leave the agent mid-turn; rebuild it from
402
+ // the persisted snapshot on the next message.
403
+ this.agents.delete(key);
404
+ const event = turnSignal.aborted
405
+ ? { type: 'done', stopReason: 'cancelled' }
406
+ : { type: 'error', message };
407
+ applyTurnEvent(reply, event);
408
+ yield event;
409
+ }
410
+ finally {
411
+ this.active.delete(key);
412
+ transcript.push(reply);
413
+ await writeJsonAtomic(this.transcriptFile(userId, sessionId), transcript);
414
+ await this.withUserLock(userId, async () => {
415
+ const registry = await this.registry(userId);
416
+ const entry = registry.sessions.find(item => item.id === sessionId);
417
+ if (!entry)
418
+ return;
419
+ entry.updatedAt = Date.now();
420
+ entry.messageCount = transcript.length;
421
+ if (entry.title === 'New session') {
422
+ entry.title = prompt.replace(/\s+/g, ' ').slice(0, 80);
423
+ }
424
+ await writeJsonAtomic(this.registryFile(userId), registry);
425
+ }).catch(error => logger.warn('Could not update Strands registry', error));
426
+ }
427
+ }
428
+ /**
429
+ * One Chat turn. Chat owns its transcript, so the agent is rebuilt from it
430
+ * each time with no snapshot, and files land in a per-account scratch
431
+ * workspace.
432
+ */
433
+ async *chatTurn(userId, messages, options = {}) {
434
+ const target = await resolveStrandsRoute(options.model, userId);
435
+ const system = messages
436
+ .filter(message => message.role === 'system' && message.content.trim())
437
+ .map(message => message.content.trim());
438
+ const turns = messages.filter(message => (message.role === 'user' || message.role === 'assistant') &&
439
+ message.content.trim());
440
+ const last = turns[turns.length - 1];
441
+ if (!last || last.role !== 'user') {
442
+ throw new StrandsEngineError('A user message is required.');
443
+ }
444
+ const history = [];
445
+ for (const message of turns.slice(0, -1)) {
446
+ const role = message.role === 'assistant' ? 'assistant' : 'user';
447
+ // Strands expects alternating roles; merge consecutive messages.
448
+ const previous = history[history.length - 1];
449
+ if (previous && previous.role === role) {
450
+ previous.content.push({ text: `\n\n${message.content}` });
451
+ }
452
+ else {
453
+ history.push({ role, content: [{ text: message.content }] });
454
+ }
455
+ }
456
+ if (history[history.length - 1]?.role === 'user') {
457
+ history.push({ role: 'assistant', content: [{ text: '(no reply)' }] });
458
+ }
459
+ const agent = await createStrandsAgent({
460
+ userId,
461
+ target,
462
+ workspace: path.join(userDirectory(userId), 'chat-workspace'),
463
+ messages: history,
464
+ instructions: [STRANDS_INSTRUCTIONS, ...system].join('\n\n'),
465
+ });
466
+ yield* streamAgentTurn(agent, last.content, options.signal);
467
+ }
468
+ async stop() {
469
+ for (const controller of this.active.values()) {
470
+ controller.abort(new Error('Server shutting down'));
471
+ }
472
+ this.active.clear();
473
+ this.agents.clear();
474
+ }
475
+ }
476
+ export const strandsEngine = new StrandsEngine();
477
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/strands/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Lazy loader for the Strands harness.
3
+ *
4
+ * Importing the harness pulls in the SDK's bash tool, which installs SIGINT
5
+ * and SIGTERM handlers that call process.exit(0), plus exit hooks for shell
6
+ * sessions this server never starts. Those would cut Libre WebUI's graceful
7
+ * shutdown short, so any process listeners added during the import are
8
+ * removed again. The import is deferred until the engine is first used, so
9
+ * servers with Strands disabled never load it.
10
+ */
11
+ type HarnessModule = typeof import('@strands-agents/harness');
12
+ export declare function loadHarness(): Promise<HarnessModule>;
13
+ export {};
14
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/strands/harness.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;GASG;AAEH,KAAK,aAAa,GAAG,cAAc,yBAAyB,CAAC,CAAC;AAM9D,wBAAgB,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,CAyBpD"}