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
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/workApi-BdUNugC3.js","js/workApi-OieM8qEL.js","js/logger-BR4forr_.js","js/config-DHea4b8N.js"])))=>i.map(i=>d[i]);
2
- import{a as e,o as t,t as n}from"./logger-BR4forr_.js";import{t as r,v as i}from"./chatStore-BPpcL4I5.js";import{i as a,t as o}from"./utils-vendor-dx9vGAt3.js";import{n as s,t as c}from"./workApi-OieM8qEL.js";import{u as l,y as u}from"./api-29NO19CP.js";import{t as d}from"./appStore-Din-tTD9.js";var f=1e5,p=`[Earlier live output omitted]
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/workApi-BIS9RxRi.js","js/workApi-C3Td_lFD.js","js/config-CNvgxwAm.js","js/logger-BR4forr_.js","js/client-gf5bjBrn.js"])))=>i.map(i=>d[i]);
2
+ import{a as e,o as t,t as n}from"./logger-BR4forr_.js";import{t as r,v as i}from"./chatStore-DQhEqb9F.js";import{i as a,t as o}from"./utils-vendor-DISWt2y9.js";import{t as s}from"./client-gf5bjBrn.js";import{u as c,y as l}from"./api-CVUaOaq4.js";import{t as u}from"./workApi-C3Td_lFD.js";import{t as d}from"./appStore-Biw63DtJ.js";var f=1e5,p=`[Earlier live output omitted]
3
3
 
4
- `,m=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,h=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}},g=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t!=`string`||!t.trim())continue;let r=Number(t);if(Number.isFinite(r))return r}},_=(e,t)=>{let n=String(e||``).trim().toLowerCase().replace(/[\s-]+/g,`_`);return n===`queued`?`queued`:n===`preparing`||n===`starting`?`preparing`:n===`thinking`||n===`running`||n===`working`?`thinking`:n===`using_tool`||n===`tool`||n===`tool_call`?`using_tool`:n===`responding`||n===`streaming`||n===`assistant`?`responding`:n===`completed`||n===`complete`||n===`done`?`completed`:n===`needs_input`||n===`needsinput`||n===`blocked`?`needs_input`:n===`failed`||n===`error`?`failed`:n===`cancelled`||n===`canceled`||n===`stopped`?`cancelled`:t},v=(e,t)=>{let n=h(t,`total`);if(n!==void 0)return y(n);let r=h(t,`text`,`content`,`delta`,`reasoning`)||``;return t.replace===!0||t.cumulative===!0?y(r):y(e+r)},y=e=>{let t=e.startsWith(p),n=t?e.slice(31):e;return!t&&n.length<=f?n:t&&n.length<=99969?p+n:p+n.slice(-99969)},b=(e,t,n,r)=>{if(r===n)return e;if(r.startsWith(n)){let i=r.slice(n.length),a=e[e.length-1];return a&&a.kind===t?[...e.slice(0,-1),{kind:t,text:y(a.text+i)}]:[...e,{kind:t,text:y(i)}]}return[...e.filter(e=>e.kind!==t),{kind:t,text:r}]},x=(e,t)=>e.some(e=>e.kind===`tool`&&e.toolId===t)?e:[...e,{kind:`tool`,toolId:t}],S=(e,t)=>{let n=m(e.usage)||e,r={...t};for(let[e,t]of[[`inputTokens`,[`inputTokens`,`input_tokens`,`promptTokens`,`prompt_tokens`]],[`outputTokens`,[`outputTokens`,`output_tokens`,`completionTokens`,`completion_tokens`]],[`reasoningTokens`,[`reasoningTokens`,`reasoning_tokens`]],[`cachedTokens`,[`cachedTokens`,`cached_tokens`]],[`totalTokens`,[`totalTokens`,`total_tokens`]],[`tokensPerSecond`,[`tokensPerSecond`,`tokens_per_second`]],[`durationMs`,[`durationMs`,`duration_ms`]]]){let i=g(n,...t);i!==void 0&&(r[e]=i)}return r.totalTokens===void 0&&(r.inputTokens!==void 0||r.outputTokens!==void 0)&&(r.totalTokens=(r.inputTokens||0)+(r.outputTokens||0)),r},C=(e,t)=>{let n=m(e.skill)||e,r=h(n,`name`,`title`,`skill`)||`Skill`;return{id:h(n,`id`,`skillId`,`skill_id`)||`${r}-${t}`,name:r,description:h(n,`description`,`summary`)}},w=(e,t,n)=>{let r=m(e.tool)||e,i=m(r.message),a=i?m(i.metadata):void 0,o=a?{...a,...r}:r,s=h(o,`name`,`toolName`,`tool_name`,`function`)||`tool`;return{id:h(o,`id`,`toolCallId`,`tool_call_id`,`callId`)||`${s}-${n}`,name:s,status:o.isError===!0||o.is_error===!0?`error`:`running`,arguments:o.arguments??o.input??o.args??o.parameters??void 0,metadata:m(o.metadata)||a,startedAt:g(o,`startedAt`,`started_at`,`timestamp`)||t}},T=(e,t)=>Array.isArray(e)?e.flatMap((e,n)=>{let r=m(e);if(!r)return[];let i=w(r,t,n),a=h(r,`output`,`content`,`result`),o=_(r.status,`using_tool`);return[{...i,status:r.isError===!0||r.is_error===!0?`error`:o===`completed`?`completed`:i.status,output:a,finishedAt:g(r,`finishedAt`,`finished_at`),durationMs:g(r,`durationMs`,`duration_ms`)}]}):[],E=(e,t,n)=>({taskId:e,runId:t,connection:`idle`,phase:`queued`,lastEventId:0,reasoning:``,response:``,timeline:[],tools:[],skills:[],startedAt:n,terminal:!1}),D=(e,t)=>{let n=m(t.data.liveRun)||m(t.data.live_run)||m(t.data.run)||t.data,r=m(t.data.task)||m(t.data.detail),i=r?m(r.activeRun):void 0,a=h(n,`reasoning`,`thinking`),o=h(n,`response`,`assistant`,`content`),s=_(n.phase??n.status??i?.status??r?.status,e.phase),c=e.lastEventId>0&&s!==`completed`&&s!==`needs_input`&&s!==`failed`&&s!==`cancelled`&&n.phase===void 0?e.phase:s,l=T(n.tools??n.toolActivities??n.tool_activities,t.timestamp),u=n.skills,d=Array.isArray(u)?u.flatMap((e,t)=>{let n=m(e);return n?[C(n,t)]:[]}):e.skills,f=n.terminal===!0||c===`completed`||c===`needs_input`||c===`failed`||c===`cancelled`,p=a===void 0?e.reasoning:y(a),v=o===void 0?e.response:y(o),w=l.length>0?l:e.tools,E=b(e.timeline,`reasoning`,e.reasoning,p);for(let e of w)E=x(E,e.id);return E=b(E,`response`,e.response,v),{...e,phase:c,reasoning:p,response:v,timeline:E,tools:w,skills:d,usage:m(n.usage)?S(n,e.usage):e.usage,round:g(n,`round`,`roundIndex`,`round_index`)??e.round,roundLimit:g(n,`roundLimit`,`round_limit`)??e.roundLimit,startedAt:g(n,`startedAt`,`started_at`)??(i?g(i,`startedAt`,`started_at`):void 0)??e.startedAt,finishedAt:g(n,`finishedAt`,`finished_at`)??e.finishedAt,error:h(n,`error`,`message`)??e.error,terminal:f,budgetReason:h(n,`budgetReason`,`budget_reason`)??e.budgetReason,loopStats:k(n.loopStats)??e.loopStats,pendingApproval:f?void 0:m(n.pendingApproval??n.pending_approval)?A(m(n.pendingApproval??n.pending_approval)??{}):e.pendingApproval}},O=[`rounds`,`toolCalls`,`screenshots`,`fences`,`expectationsPassed`,`expectationsPending`,`stallNudges`,`ambiguityNudges`],k=e=>{let t=m(e);if(!t)return;let n={};for(let e of O){let r=t[e];typeof r==`number`&&Number.isFinite(r)&&(n[e]=r)}return Object.keys(n).length>0?n:void 0},A=e=>{let t=h(e,`approvalId`,`approval_id`),n=h(e,`toolCallId`,`tool_call_id`),r=h(e,`name`,`toolName`,`tool_name`);if(!t||!n||!r)return;let i=h(e,`status`);return{approvalId:t,toolCallId:n,name:r,summary:m(e.summary),status:i===`approved`||i===`denied`||i===`expired`?i:`pending`,expiresAt:g(e,`expiresAt`,`expires_at`)}},j=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n===-1)return[...e,t];let r=[...e];return r[n]={...e[n],...t},r},ee=(e,t)=>{let n=e?.taskId===t.taskId&&e.runId===t.runId?e:E(t.taskId,t.runId,t.timestamp);if(t.type!==`snapshot`&&t.id<=n.lastEventId)return n;let r={...n,connection:`connected`,connectionError:void 0,lastEventId:Math.max(n.lastEventId,t.id)};if(t.type===`snapshot`)r=D(r,t);else if(t.type===`run_state`){let e=_(t.data.phase??t.data.status??t.data.state,r.phase);r={...r,phase:e,round:g(t.data,`round`,`roundIndex`,`round_index`)??r.round,roundLimit:g(t.data,`roundLimit`,`round_limit`)??r.roundLimit,startedAt:g(t.data,`startedAt`,`started_at`)??r.startedAt,terminal:r.terminal||e===`completed`||e===`needs_input`||e===`failed`||e===`cancelled`}}else if(t.type===`reasoning_delta`){let e=v(r.reasoning,t.data);r={...r,phase:`thinking`,reasoning:e,timeline:b(r.timeline,`reasoning`,r.reasoning,e)}}else if(t.type===`assistant_delta`){let e=v(r.response,t.data);r={...r,phase:`responding`,response:e,timeline:b(r.timeline,`response`,r.response,e)}}else if(t.type===`tool_call`){let e=w(t.data,t.timestamp,r.tools.length);r={...r,phase:`using_tool`,tools:j(r.tools,e),timeline:x(r.timeline,e.id)}}else if(t.type===`tool_result`){let e=w(t.data,t.timestamp,r.tools.length),n=r.tools.find(t=>t.id===e.id),i=t.data.isError===!0||t.data.is_error===!0||t.data.error===!0;r={...r,phase:`thinking`,tools:j(r.tools,{...n,...e,status:i?`error`:`completed`,arguments:n?.arguments??e.arguments,startedAt:n?.startedAt??e.startedAt,output:h(t.data,`output`,`content`,`result`,`message`)||``,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,durationMs:g(t.data,`durationMs`,`duration_ms`)}),pendingApproval:r.pendingApproval?.toolCallId===e.id?void 0:r.pendingApproval}}else if(t.type===`approval`){let e=A(t.data);e&&(r=e.status===`pending`?{...r,pendingApproval:e}:r.pendingApproval?.approvalId===e.approvalId?{...r,pendingApproval:void 0}:r)}else if(t.type===`usage`)r={...r,usage:S(t.data,r.usage)};else if(t.type===`skill_loaded`){let e=C(t.data,r.skills.length);r={...r,skills:r.skills.some(t=>t.id===e.id)?r.skills:[...r.skills,e]}}else if(t.type===`error`)r={...r,phase:`failed`,error:h(t.data,`message`,`error`)||`The Work run stopped unexpectedly.`,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:t.data.terminal!==!1,pendingApproval:void 0};else if(t.type===`done`){let e=_(t.data.status??t.data.state??t.data.phase,`completed`);r={...r,phase:e,error:h(t.data,`error`,`message`)??r.error,usage:m(t.data.usage)?S(t.data,r.usage):r.usage,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:!0,budgetReason:h(t.data,`budgetReason`,`budget_reason`)??r.budgetReason,loopStats:k(t.data.loopStats)??r.loopStats,pendingApproval:void 0}}return r},M=(e,t)=>Error(t?.error||t?.message||e),N=(e,t)=>{if(typeof e==`object`&&e&&`response`in e){let t=e.response,n=t?.data?.error||t?.data?.message;if(n)return n}return e instanceof Error&&e.message?e.message:t},te=e=>typeof e==`object`&&!!e&&`response`in e&&e.response?.status===409,ne=2500,re=24,P=new Map,F=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt||e.id.localeCompare(t.id)),ie=({messages:e,messageCursor:t,hasMoreMessages:n,...r})=>r,I=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id))},L=(e,t)=>{if(!e||e.id!==t.id)return t;let n=e.updatedAt>t.updatedAt?{...t,...e}:{...e,...t};if(e.messages.length===0)return{...n,messages:t.messages,messageCursor:t.messageCursor,hasMoreMessages:t.hasMoreMessages};let r=Math.max(...e.messages.map(e=>e.messageIndex)),i=Math.min(...t.messages.map(e=>e.messageIndex)),a=t.messages.length>0&&r+1<i;return{...n,messages:I(e.messages,t.messages),messageCursor:a?t.messageCursor:e.messageCursor,hasMoreMessages:a?t.hasMoreMessages:e.hasMoreMessages}},R=(e,t)=>{let n=e.find(e=>e.id===t.id);if(n&&n.updatedAt>t.updatedAt)return e;let r=ie(t),i=e.findIndex(e=>e.id===t.id);if(i===-1)return[r,...e];let a=[...e];return a[i]=r,a},ae=(e,t)=>{let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id)),i=F(t.filter(e=>!r.has(e.id))),a=e.flatMap(e=>{let t=n.get(e.id);if(!t)return[];let r=e.updatedAt>t.updatedAt?e:t,i=Math.max(e.lastSeenAt??0,t.lastSeenAt??0);return[i>0?{...r,lastSeenAt:i}:r]});return[...i,...a]},z=a((e,t)=>{let n=0,r=0,i=0,a=0,o=0,s=null,l=0,u=0,d=0,f=null,p=0,m=new Set,h=new Set,g=new Map,_=(e,t)=>`${e}\u0000${t}`,v=e=>e===n,y=e=>{if(!v(e))throw Error(`Work session changed.`)},b=()=>{u+=1,d+=1,f=null,h.clear()},x=()=>{let t=++l;return h.add(t),e({loadingFiles:!0}),t},S=(n,r,i)=>{h.delete(n),v(r)&&t().selectedTaskId===i&&e({loadingFiles:h.size>0})},C=e=>t().selectedTaskId===e,w=t=>{let n=++p;return g.set(n,t),C(t)&&e({actionLoading:!0,error:null}),n},T=(n,r)=>{if(g.delete(n),!v(r))return;let i=t().selectedTaskId;e({actionLoading:[...g.values()].some(e=>e===i)})},D=(t,n,r)=>{v(n)&&C(t)&&e({error:r})},O=(t,r=n,i=!1)=>{v(r)&&(i&&(o+=1),e(e=>({tasks:R(e.tasks,t),selectedTask:e.selectedTaskId===t.id?L(e.selectedTask,t):e.selectedTask})))},k=async(e,t,r)=>{let i=n,a=w(r);try{let n=await e();if(y(i),!n.success||!n.data)throw M(t,n);return O(n.data,i,!0),n.data}catch(e){let n=N(e,t);throw D(r,i,n),Error(n)}finally{T(a,i)}};return{capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null,loadCapabilities:async()=>{let t=n;try{let n=await c.capabilities();if(y(t),!n.success||!n.data)throw M(`Could not inspect the Work runtime.`,n);e({capabilities:n.data})}catch(n){v(t)&&e({capabilities:{available:!1,runtime:`docker`,image:``,reason:N(n,`The Work runtime is unavailable.`)}})}},loadTasks:async(t=!1)=>{let l=n,u=++r,d=o;t||(i=u,m.add(u),e({loadingTasks:!0,error:null}));try{let t=await c.listTasks();if(y(l),!t.success||!t.data)throw M(`Could not load Work tasks.`,t);let n=F(t.data);if(u<=a||d!==o)return;a=u,e(e=>{let t=ae(e.tasks,n),r=e.selectedTaskId?t.find(t=>t.id===e.selectedTaskId):void 0,i=r&&e.selectedTask?{...e.selectedTask,...r,messages:e.selectedTask.messages,messageCursor:e.selectedTask.messageCursor,hasMoreMessages:e.selectedTask.hasMoreMessages}:e.selectedTask,a=s,o=a!==null&&u>a.requestId;return o&&(s=null),{tasks:t,selectedTask:i,...o&&e.error===a.message?{error:null}:{}}})}catch(n){let r=N(n,`Could not load Work tasks.`);!t&&v(l)&&u===i&&u>a&&d===o&&(s={requestId:u,message:r},e({error:r}))}finally{m.delete(u),!t&&v(l)&&e({loadingTasks:m.size>0})}},selectTask:t=>{b(),e(e=>({selectedTaskId:t,selectedTask:t&&e.selectedTask?.id===t?e.selectedTask:null,files:[],selectedFile:null,loadingFiles:!1,loadingOlderMessages:!1,actionLoading:[...g.values()].some(e=>e===t),error:null}))},loadTask:async(t,r=!1)=>{let i=n;r||e({loadingTask:!0,error:null});try{let e=await c.getTask(t);if(y(i),!e.success||!e.data)throw M(`Could not load this Work task.`,e);return O(e.data,i),e.data}catch(t){let n=N(t,`Could not load this Work task.`);throw!r&&v(i)&&e({error:n}),Error(n)}finally{!r&&v(i)&&e({loadingTask:!1})}},loadOlderMessages:async r=>{let i=n,a=t().selectedTask,o=a?.id===r?a.messageCursor:void 0;if(!a||a.id!==r||!a.hasMoreMessages||o===void 0)return[];e({loadingOlderMessages:!0,error:null});try{let t=await c.getMessages(r,o);if(y(i),!t.success||!t.data)throw M(`Could not load older Work messages.`,t);let n=t.data;return e(e=>{if(e.selectedTask?.id!==r)return{};let t=e.selectedTask.messageCursor===o;return{selectedTask:{...e.selectedTask,messages:I(e.selectedTask.messages,n.messages),messageCursor:t?n.cursor:e.selectedTask.messageCursor,hasMoreMessages:t?n.hasMore:e.selectedTask.hasMoreMessages}}}),n.messages}catch(n){let a=N(n,`Could not load older Work messages.`);throw v(i)&&t().selectedTaskId===r&&e({error:a}),Error(a)}finally{v(i)&&t().selectedTaskId===r&&e({loadingOlderMessages:!1})}},createTask:e=>k(()=>c.createTask(e),`Could not create the Work task.`,null),updateTask:(e,t)=>k(()=>c.updateTask(e,t),`Could not update the Work task.`,e),markTaskSeen:t=>{let n=Date.now();e(e=>({tasks:e.tasks.map(e=>e.id===t?{...e,lastSeenAt:n}:e),selectedTask:e.selectedTask?.id===t?{...e.selectedTask,lastSeenAt:n}:e.selectedTask})),c.markTaskSeen(t).catch(()=>void 0)},deleteTask:async r=>{let i=n,a=w(r);try{let n=await c.deleteTask(r);if(y(i),!n.success)throw M(`Could not delete the Work task.`,n);t().selectedTaskId===r&&b(),o+=1,e(e=>({tasks:e.tasks.filter(e=>e.id!==r),selectedTaskId:e.selectedTaskId===r?null:e.selectedTaskId,selectedTask:e.selectedTaskId===r?null:e.selectedTask,files:e.selectedTaskId===r?[]:e.files,selectedFile:e.selectedTaskId===r?null:e.selectedFile,liveRuns:Object.fromEntries(Object.entries(e.liveRuns).filter(([e])=>e!==r))}))}catch(e){let t=N(e,`Could not delete the Work task.`);throw D(r,i,t),Error(t)}finally{T(a,i)}},startRun:async(e,t)=>{let r=n,i=w(e);try{let n=await c.startRun(e,t);if(y(r),!n.success||!n.data)throw M(`Could not start the Work run.`,n);return O(n.data,r,!0),n.data}catch(t){let n=N(t,`Could not start the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},cancelRun:async e=>{let r=n,i=w(e);try{let n=await c.cancelRun(e);if(y(r),!n.success)throw M(`Could not cancel the Work run.`,n);return n.data?(O(n.data,r,!0),n.data):(o+=1,await t().loadTask(e,!0))}catch(t){let n=N(t,`Could not cancel the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},beginLiveRun:(t,n,r)=>{e(e=>{let i=e.liveRuns[t];return{liveRuns:{...e.liveRuns,[t]:i?.runId===n?{...i,startedAt:i.startedAt??r}:E(t,n,r)}}})},applyRunEvent:e=>{t().applyRunEvents([e])},applyRunEvents:t=>{t.length!==0&&e(e=>{let n={...e.liveRuns},r=e.tasks,i=e.selectedTask;for(let a of t){n[a.taskId]=ee(n[a.taskId],a);let t=a.type===`snapshot`?a.data.task??a.data.detail:void 0,o=t&&typeof t==`object`&&!Array.isArray(t)&&t.id===a.taskId&&Array.isArray(t.messages)?t:void 0;o&&(r=R(r,o),e.selectedTaskId===o.id&&(i=L(i,o)))}return{liveRuns:n,tasks:r,selectedTask:i}})},setLiveRunConnection:(t,n,r,i)=>{e(e=>{let a=e.liveRuns[t];return!a||a.runId!==n?{}:{liveRuns:{...e.liveRuns,[t]:{...a,connection:r,connectionError:i}}}})},clearLiveRun:(t,n)=>{e(e=>{if(n&&e.liveRuns[t]?.runId!==n)return{};let r={...e.liveRuns};return delete r[t],{liveRuns:r}})},loadFiles:async(r,i=``)=>{let a=n,o=++u,s=x();try{let n=await c.listFiles(r,i);if(y(a),!n.success||!n.data)throw M(`Could not load workspace files.`,n);return o===u&&t().selectedTaskId===r&&(P.delete(r),e({files:n.data})),n.data}catch(n){let s=o===u&&v(a)&&t().selectedTaskId===r;if(te(n)){let e=P.get(r)??0;return s&&e<re&&(P.set(r,e+1),setTimeout(()=>{o===u&&v(a)&&t().selectedTaskId===r&&t().loadFiles(r,i).catch(()=>void 0)},ne)),t().files}let c=N(n,`Could not load workspace files.`);throw s&&e({error:c}),Error(c)}finally{S(s,a,r)}},loadFile:async(r,i)=>{let a=n,o=++d,s=_(r,i);f=s;let l=x();try{let n=await c.getFile(r,i);if(y(a),!n.success||!n.data)throw M(`Could not open this workspace file.`,n);if(o!==d||f!==s||!v(a)||t().selectedTaskId!==r)throw Error(`Work file request was superseded.`);return e({selectedFile:n.data}),n.data}catch(n){let i=N(n,`Could not open this file.`);throw o===d&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(l,a,r)}},clearSelectedFile:()=>{d+=1,f=null,e({selectedFile:null})},saveFile:async(r,i,a,o)=>{let s=n,l=w(r),u=_(r,i);f===u&&(d+=1,f=null);try{let n=await c.saveFile(r,i,a,o);if(y(s),!n.success||!n.data)throw M(`Could not save this workspace file.`,n);return t().selectedTaskId===r&&t().selectedFile?.path===i&&(f===u&&(d+=1,f=null),e({selectedFile:n.data})),n.data}catch(e){let t=N(e,`Could not save this file.`);throw D(r,s,t),Error(t)}finally{T(l,s)}},startPreview:(e,t,n)=>k(()=>c.startPreview(e,t,n),`Could not start the workspace preview.`,e),stopPreview:e=>k(()=>c.stopPreview(e),`Could not stop the workspace preview.`,e),clearError:()=>e({error:null}),clearAllState:()=>{n+=1,i=++r,a=i,o+=1,s=null,m.clear(),g.clear(),b(),e({capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null})}}}),oe=async(e,t,n)=>{let r=await t(e);return r.success&&await n(),r},B=n(`store:plugin-store`),V=a((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await l.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:i(t,`Failed to load plugins`)})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await l.uploadPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to upload plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to upload plugin`})}finally{e({isUploading:!1})}},installPlugin:async n=>{e({isLoading:!0,error:null});try{let r=await l.installPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to install plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to install plugin`})}finally{e({isLoading:!1})}},updatePlugin:async(n,r)=>{e({isLoading:!0,error:null});try{let i=await l.updatePlugin(n,r);i.success&&i.data?await t().loadPlugins():e({error:i.error||`Failed to update plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to update plugin`})}finally{e({isLoading:!1})}},deletePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await l.deletePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to delete plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to delete plugin`})}finally{e({isLoading:!1})}},activatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await oe(n,l.activatePlugin,()=>t().loadPlugins());r.success||e({error:r.error||`Failed to activate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to activate plugin`})}finally{e({isLoading:!1})}},deactivatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await l.deactivatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to deactivate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to deactivate plugin`})}finally{e({isLoading:!1})}},loadPluginStatus:async()=>{try{let t=await l.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){B.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await l.exportPlugin(t),n=window.URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`${t}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}catch(t){e({error:t instanceof Error?t.message:`Failed to export plugin`})}finally{e({isLoading:!1})}},fetchPluginVariables:async t=>{try{let n=await l.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){B.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n,r=[])=>{try{return(await l.setVariables(e,n,r)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return B.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{let n=await l.resetVariables(t);return n.success&&n.data===!0?(e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}}),!0):!1}catch(e){return B.error(`Failed to reset plugin variables:`,e),!1}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),H=`libre-webui:work-draft:`,U=(e,t)=>`${H}${e}:${t}`,se=(e,t)=>{try{let n=window.sessionStorage.getItem(U(e,t));if(!n)return null;let r=JSON.parse(n);return typeof r.content==`string`?{content:r.content,baseUpdatedAt:typeof r.baseUpdatedAt==`number`?r.baseUpdatedAt:void 0}:null}catch{return null}},ce=(e,t,n)=>{try{return window.sessionStorage.setItem(U(e,t),JSON.stringify(n)),!0}catch{return!1}},W=(e,t)=>{try{window.sessionStorage.removeItem(U(e,t))}catch{}},le=e=>{let t=`${H}${e}:`;try{for(let e=window.sessionStorage.length-1;e>=0;e--){let n=window.sessionStorage.key(e);n?.startsWith(t)&&window.sessionStorage.removeItem(n)}}catch{}},G=()=>{try{for(let e=window.sessionStorage.length-1;e>=0;e--){let t=window.sessionStorage.key(e);t?.startsWith(H)&&window.sessionStorage.removeItem(t)}}catch{}},ue=`/ws/work-terminal`,de=`/ws/work-screen`,fe=`/ws/work-audio`;function K(e,t,n){let r;try{r=new URL(e)}catch{throw Error(`${t} must be an absolute URL.`)}if(!n.includes(r.protocol))throw Error(`${t} must use ${n.join(` or `)}.`);if(r.username||r.password||r.search||r.hash)throw Error(`${t} must not contain credentials, a query, or a fragment.`);return r}function q(e){return e.replace(/\/+$/,``)}function pe(e){return q(K(e,`VITE_WS_BASE_URL`,[`ws:`,`wss:`]).toString())}function me(e){let t=K(e,`VITE_API_BASE_URL`,[`http:`,`https:`]);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=t.pathname.replace(/\/api\/?$/,``),q(t.toString())}function J(e){let t=e.websocketBaseUrl?.trim();if(t)return pe(t);if(e.protocol===`file:`)return`ws://localhost:3001`;let n=e.apiBaseUrl?.trim();return n?me(n):`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}`}function Y(e,t,n){let r=J(t),i=new URL(`${r}/${e.replace(/^\/+/,``)}`);for(let[e,t]of Object.entries(n))i.searchParams.set(e,t);return i.toString()}function he(e,t){return Y(`/ws`,t,{ticket:e})}function ge(e,t,n){return Y(de,n,{taskId:e,ticket:t})}function _e(e,t,n){return Y(fe,n,{taskId:e,ticket:t})}function ve(e,t,n){return Y(ue,n,{taskId:e,ticket:t})}var X=n(`websocket`),Z=e=>{if(e instanceof Error&&e.message===`Session expired`)return!0;let t=e?.response?.status;return t===401||t===403},Q=new class{ws=null;urlEnvironment;reconnectAttempts=0;reconnectDelay=1e3;maxReconnectDelay=3e4;reconnectTimer=null;messageHandlers=new Map;connectPromise=null;shouldReconnect=!1;connectionEpoch=0;constructor(){this.urlEnvironment={protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,websocketBaseUrl:void 0,production:!0},X.debug(`WebSocket base URL resolved:`,J(this.urlEnvironment))}connect(){if(e())return X.debug(`Demo mode active: skipping WebSocket connection.`),Promise.resolve();if(this.ws?.readyState===WebSocket.OPEN)return Promise.resolve();if(this.connectPromise)return this.connectPromise;this.clearReconnectTimer(),this.shouldReconnect=!0;let t=++this.connectionEpoch,n=this.openWithTicket(t).catch(e=>{if(this.shouldReconnect&&t===this.connectionEpoch)throw Z(e)?(this.shouldReconnect=!1,this.clearReconnectTimer()):this.attemptReconnect(t),e}).finally(()=>{this.connectPromise===n&&(this.connectPromise=null)});return this.connectPromise=n,n}async openWithTicket(e){let t=(await s.post(`/auth/websocket-ticket`,{audience:`chat`})).data.data?.ticket;if(!t)throw Error(`The server did not issue a WebSocket ticket.`);if(this.shouldReconnect&&e===this.connectionEpoch)return X.debug(`WebSocket: Attempting to connect`),new Promise((n,r)=>{try{let i=he(t,this.urlEnvironment);X.debug(`WebSocket: Connecting with a one-use ticket`);let a=new WebSocket(i),o=!1;this.ws=a,a.onopen=()=>{if(!this.shouldReconnect||e!==this.connectionEpoch){a.close(),n();return}X.debug(`WebSocket connected successfully`),o=!0,this.reconnectAttempts=0,this.clearReconnectTimer(),n()},a.onmessage=t=>{if(this.shouldReconnect&&e===this.connectionEpoch)try{let e=JSON.parse(t.data),n=this.messageHandlers.get(e.type);n?n(e.data):e.type===`connected`?X.debug(`WebSocket: Server confirmed connection`):X.warn(`WebSocket: No handler for message type:`,e.type)}catch(e){X.error(`Failed to parse WebSocket message:`,e)}},a.onclose=()=>{if(X.debug(`WebSocket disconnected`),this.ws===a&&(this.ws=null),e!==this.connectionEpoch){n();return}o?this.shouldReconnect&&this.attemptReconnect(e):r(Error(`WebSocket closed before opening`))},a.onerror=t=>{if(e!==this.connectionEpoch){n();return}X.error(`WebSocket error:`,t),r(t)}}catch(e){r(e)}})}disconnect(){this.shouldReconnect=!1,this.connectionEpoch+=1,this.clearReconnectTimer(),this.reconnectAttempts=0,this.connectPromise=null;let e=this.ws;e&&(this.ws=null,e.readyState!==WebSocket.CONNECTING&&e.close())}reconnect(){return this.disconnect(),this.connect()}send(e){return this.ws&&this.ws.readyState===WebSocket.OPEN?(X.debug(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e)),!0):(X.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState),!1)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}dispatchMessage(e,t){this.messageHandlers.get(e)?.(t)}clearReconnectTimer(){this.reconnectTimer!==null&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null}attemptReconnect(t){if(e()||!this.shouldReconnect||t!==this.connectionEpoch||this.reconnectTimer!==null)return;let n=Math.min(this.reconnectDelay*2**this.reconnectAttempts,this.maxReconnectDelay);this.reconnectAttempts=Math.min(this.reconnectAttempts+1,5),X.debug(`Reconnecting WebSocket in ${n}ms`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.shouldReconnect&&t===this.connectionEpoch&&this.connect().catch(()=>{})},n)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},$=n(`auth-store`),ye=a()(o((n,i)=>({user:null,token:null,systemInfo:null,workAccess:null,isAuthenticated:!1,isLoading:!1,login:(t,a,o)=>{let s=i().user?.id===t.id;localStorage.setItem(`auth-token`,a);let c=r.getState();c.clearAllState&&c.clearAllState(),z.getState().clearAllState(),s||(G(),d.getState().clearUserState()),n({user:t,token:a,systemInfo:o,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let t=V.getState();$.debug(`Reinitializing app after login...`),$.debug(`Reconnecting WebSocket with auth token...`);try{await Q.reconnect()}catch(e){$.warn(`WebSocket reconnect after login failed; continuing app initialization:`,e)}try{!(await u.checkHealth()).success&&!e()&&$.warn(`Ollama service not available after login`)}catch(e){$.warn(`Ollama health check failed after login; continuing provider initialization:`,e)}let n=d.getState();await Promise.all([c.loadModels(),c.loadSessions(),c.loadPreferences(),n.loadPreferences(),t.loadPlugins(),i().refreshWorkAccess()]),$.debug(`Reinitialized app after login`)}catch(e){$.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),$.debug(`Disconnecting WebSocket on logout...`),Q.disconnect();let e=r.getState();e.clearAllState&&e.clearAllState(),z.getState().clearAllState(),G(),d.getState().clearUserState(),n({user:null,token:null,workAccess:null,isAuthenticated:!1,isLoading:!1})},setUser:e=>{n({user:e})},setSystemInfo:e=>{n({systemInfo:e})},setLoading:e=>{n({isLoading:e})},isAdmin:()=>{let{user:e}=i();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=i();return e?.requiresAuth??!1},canUseWork:()=>{let{systemInfo:e,user:t,workAccess:n}=i();return e?.requiresAuth===!1||t?.role===`admin`||n?.allowed===!0},canUseAgents:()=>{let{systemInfo:e,user:t}=i();return e?.agentsEnabled===!0?e?.requiresAuth===!1||t?.role===`admin`:!1},refreshWorkAccess:async()=>{try{let{workApi:e}=await t(async()=>{let{workApi:e}=await import(`./workApi-BdUNugC3.js`);return{workApi:e}},__vite__mapDeps([0,1,2,3])),r=await e.access();r.success&&r.data&&n({workAccess:r.data})}catch(e){$.debug(`Could not load Work access mode:`,e)}}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,workAccess:e.workAccess,isAuthenticated:e.isAuthenticated})}));export{ve as a,se as c,z as d,k as f,ge as i,ce as l,Q as n,W as o,_e as r,le as s,ye as t,V as u};
4
+ `,m=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,h=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}},g=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t!=`string`||!t.trim())continue;let r=Number(t);if(Number.isFinite(r))return r}},_=(e,t)=>{let n=String(e||``).trim().toLowerCase().replace(/[\s-]+/g,`_`);return n===`queued`?`queued`:n===`preparing`||n===`starting`?`preparing`:n===`thinking`||n===`running`||n===`working`?`thinking`:n===`using_tool`||n===`tool`||n===`tool_call`?`using_tool`:n===`responding`||n===`streaming`||n===`assistant`?`responding`:n===`completed`||n===`complete`||n===`done`?`completed`:n===`needs_input`||n===`needsinput`||n===`blocked`?`needs_input`:n===`failed`||n===`error`?`failed`:n===`cancelled`||n===`canceled`||n===`stopped`?`cancelled`:t},v=(e,t)=>{let n=h(t,`total`);if(n!==void 0)return y(n);let r=h(t,`text`,`content`,`delta`,`reasoning`)||``;return t.replace===!0||t.cumulative===!0?y(r):y(e+r)},y=e=>{let t=e.startsWith(p),n=t?e.slice(31):e;return!t&&n.length<=f?n:t&&n.length<=99969?p+n:p+n.slice(-99969)},b=(e,t,n,r)=>{if(r===n)return e;if(r.startsWith(n)){let i=r.slice(n.length),a=e[e.length-1];return a&&a.kind===t?[...e.slice(0,-1),{kind:t,text:y(a.text+i)}]:[...e,{kind:t,text:y(i)}]}return[...e.filter(e=>e.kind!==t),{kind:t,text:r}]},x=(e,t)=>e.some(e=>e.kind===`tool`&&e.toolId===t)?e:[...e,{kind:`tool`,toolId:t}],S=(e,t)=>{let n=m(e.usage)||e,r={...t};for(let[e,t]of[[`inputTokens`,[`inputTokens`,`input_tokens`,`promptTokens`,`prompt_tokens`]],[`outputTokens`,[`outputTokens`,`output_tokens`,`completionTokens`,`completion_tokens`]],[`reasoningTokens`,[`reasoningTokens`,`reasoning_tokens`]],[`cachedTokens`,[`cachedTokens`,`cached_tokens`]],[`totalTokens`,[`totalTokens`,`total_tokens`]],[`tokensPerSecond`,[`tokensPerSecond`,`tokens_per_second`]],[`durationMs`,[`durationMs`,`duration_ms`]]]){let i=g(n,...t);i!==void 0&&(r[e]=i)}return r.totalTokens===void 0&&(r.inputTokens!==void 0||r.outputTokens!==void 0)&&(r.totalTokens=(r.inputTokens||0)+(r.outputTokens||0)),r},C=(e,t)=>{let n=m(e.skill)||e,r=h(n,`name`,`title`,`skill`)||`Skill`;return{id:h(n,`id`,`skillId`,`skill_id`)||`${r}-${t}`,name:r,description:h(n,`description`,`summary`)}},w=(e,t,n)=>{let r=m(e.tool)||e,i=m(r.message),a=i?m(i.metadata):void 0,o=a?{...a,...r}:r,s=h(o,`name`,`toolName`,`tool_name`,`function`)||`tool`;return{id:h(o,`id`,`toolCallId`,`tool_call_id`,`callId`)||`${s}-${n}`,name:s,status:o.isError===!0||o.is_error===!0?`error`:`running`,arguments:o.arguments??o.input??o.args??o.parameters??void 0,metadata:m(o.metadata)||a,startedAt:g(o,`startedAt`,`started_at`,`timestamp`)||t}},T=(e,t)=>Array.isArray(e)?e.flatMap((e,n)=>{let r=m(e);if(!r)return[];let i=w(r,t,n),a=h(r,`output`,`content`,`result`),o=_(r.status,`using_tool`);return[{...i,status:r.isError===!0||r.is_error===!0?`error`:o===`completed`?`completed`:i.status,output:a,finishedAt:g(r,`finishedAt`,`finished_at`),durationMs:g(r,`durationMs`,`duration_ms`)}]}):[],E=(e,t,n)=>({taskId:e,runId:t,connection:`idle`,phase:`queued`,lastEventId:0,reasoning:``,response:``,timeline:[],tools:[],skills:[],startedAt:n,terminal:!1}),D=(e,t)=>{let n=m(t.data.liveRun)||m(t.data.live_run)||m(t.data.run)||t.data,r=m(t.data.task)||m(t.data.detail),i=r?m(r.activeRun):void 0,a=h(n,`reasoning`,`thinking`),o=h(n,`response`,`assistant`,`content`),s=_(n.phase??n.status??i?.status??r?.status,e.phase),c=e.lastEventId>0&&s!==`completed`&&s!==`needs_input`&&s!==`failed`&&s!==`cancelled`&&n.phase===void 0?e.phase:s,l=T(n.tools??n.toolActivities??n.tool_activities,t.timestamp),u=n.skills,d=Array.isArray(u)?u.flatMap((e,t)=>{let n=m(e);return n?[C(n,t)]:[]}):e.skills,f=n.terminal===!0||c===`completed`||c===`needs_input`||c===`failed`||c===`cancelled`,p=a===void 0?e.reasoning:y(a),v=o===void 0?e.response:y(o),w=l.length>0?l:e.tools,E=b(e.timeline,`reasoning`,e.reasoning,p);for(let e of w)E=x(E,e.id);return E=b(E,`response`,e.response,v),{...e,phase:c,reasoning:p,response:v,timeline:E,tools:w,skills:d,usage:m(n.usage)?S(n,e.usage):e.usage,round:g(n,`round`,`roundIndex`,`round_index`)??e.round,roundLimit:g(n,`roundLimit`,`round_limit`)??e.roundLimit,startedAt:g(n,`startedAt`,`started_at`)??(i?g(i,`startedAt`,`started_at`):void 0)??e.startedAt,finishedAt:g(n,`finishedAt`,`finished_at`)??e.finishedAt,error:h(n,`error`,`message`)??e.error,terminal:f,budgetReason:h(n,`budgetReason`,`budget_reason`)??e.budgetReason,loopStats:k(n.loopStats)??e.loopStats,pendingApproval:f?void 0:m(n.pendingApproval??n.pending_approval)?A(m(n.pendingApproval??n.pending_approval)??{}):e.pendingApproval}},O=[`rounds`,`toolCalls`,`screenshots`,`fences`,`expectationsPassed`,`expectationsPending`,`stallNudges`,`ambiguityNudges`],k=e=>{let t=m(e);if(!t)return;let n={};for(let e of O){let r=t[e];typeof r==`number`&&Number.isFinite(r)&&(n[e]=r)}return Object.keys(n).length>0?n:void 0},A=e=>{let t=h(e,`approvalId`,`approval_id`),n=h(e,`toolCallId`,`tool_call_id`),r=h(e,`name`,`toolName`,`tool_name`);if(!t||!n||!r)return;let i=h(e,`status`);return{approvalId:t,toolCallId:n,name:r,summary:m(e.summary),status:i===`approved`||i===`denied`||i===`expired`?i:`pending`,expiresAt:g(e,`expiresAt`,`expires_at`)}},j=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n===-1)return[...e,t];let r=[...e];return r[n]={...e[n],...t},r},ee=(e,t)=>{let n=e?.taskId===t.taskId&&e.runId===t.runId?e:E(t.taskId,t.runId,t.timestamp);if(t.type!==`snapshot`&&t.id<=n.lastEventId)return n;let r={...n,connection:`connected`,connectionError:void 0,lastEventId:Math.max(n.lastEventId,t.id)};if(t.type===`snapshot`)r=D(r,t);else if(t.type===`run_state`){let e=_(t.data.phase??t.data.status??t.data.state,r.phase);r={...r,phase:e,round:g(t.data,`round`,`roundIndex`,`round_index`)??r.round,roundLimit:g(t.data,`roundLimit`,`round_limit`)??r.roundLimit,startedAt:g(t.data,`startedAt`,`started_at`)??r.startedAt,terminal:r.terminal||e===`completed`||e===`needs_input`||e===`failed`||e===`cancelled`}}else if(t.type===`reasoning_delta`){let e=v(r.reasoning,t.data);r={...r,phase:`thinking`,reasoning:e,timeline:b(r.timeline,`reasoning`,r.reasoning,e)}}else if(t.type===`assistant_delta`){let e=v(r.response,t.data);r={...r,phase:`responding`,response:e,timeline:b(r.timeline,`response`,r.response,e)}}else if(t.type===`tool_call`){let e=w(t.data,t.timestamp,r.tools.length);r={...r,phase:`using_tool`,tools:j(r.tools,e),timeline:x(r.timeline,e.id)}}else if(t.type===`tool_result`){let e=w(t.data,t.timestamp,r.tools.length),n=r.tools.find(t=>t.id===e.id),i=t.data.isError===!0||t.data.is_error===!0||t.data.error===!0;r={...r,phase:`thinking`,tools:j(r.tools,{...n,...e,status:i?`error`:`completed`,arguments:n?.arguments??e.arguments,startedAt:n?.startedAt??e.startedAt,output:h(t.data,`output`,`content`,`result`,`message`)||``,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,durationMs:g(t.data,`durationMs`,`duration_ms`)}),pendingApproval:r.pendingApproval?.toolCallId===e.id?void 0:r.pendingApproval}}else if(t.type===`approval`){let e=A(t.data);e&&(r=e.status===`pending`?{...r,pendingApproval:e}:r.pendingApproval?.approvalId===e.approvalId?{...r,pendingApproval:void 0}:r)}else if(t.type===`usage`)r={...r,usage:S(t.data,r.usage)};else if(t.type===`skill_loaded`){let e=C(t.data,r.skills.length);r={...r,skills:r.skills.some(t=>t.id===e.id)?r.skills:[...r.skills,e]}}else if(t.type===`error`)r={...r,phase:`failed`,error:h(t.data,`message`,`error`)||`The Work run stopped unexpectedly.`,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:t.data.terminal!==!1,pendingApproval:void 0};else if(t.type===`done`){let e=_(t.data.status??t.data.state??t.data.phase,`completed`);r={...r,phase:e,error:h(t.data,`error`,`message`)??r.error,usage:m(t.data.usage)?S(t.data,r.usage):r.usage,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:!0,budgetReason:h(t.data,`budgetReason`,`budget_reason`)??r.budgetReason,loopStats:k(t.data.loopStats)??r.loopStats,pendingApproval:void 0}}return r},M=(e,t)=>Error(t?.error||t?.message||e),N=(e,t)=>{if(typeof e==`object`&&e&&`response`in e){let t=e.response,n=t?.data?.error||t?.data?.message;if(n)return n}return e instanceof Error&&e.message?e.message:t},te=e=>typeof e==`object`&&!!e&&`response`in e&&e.response?.status===409,ne=2500,re=24,P=new Map,F=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt||e.id.localeCompare(t.id)),ie=({messages:e,messageCursor:t,hasMoreMessages:n,...r})=>r,I=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id))},L=(e,t)=>{if(!e||e.id!==t.id)return t;let n=e.updatedAt>t.updatedAt?{...t,...e}:{...e,...t};if(e.messages.length===0)return{...n,messages:t.messages,messageCursor:t.messageCursor,hasMoreMessages:t.hasMoreMessages};let r=Math.max(...e.messages.map(e=>e.messageIndex)),i=Math.min(...t.messages.map(e=>e.messageIndex)),a=t.messages.length>0&&r+1<i;return{...n,messages:I(e.messages,t.messages),messageCursor:a?t.messageCursor:e.messageCursor,hasMoreMessages:a?t.hasMoreMessages:e.hasMoreMessages}},R=(e,t)=>{let n=e.find(e=>e.id===t.id);if(n&&n.updatedAt>t.updatedAt)return e;let r=ie(t),i=e.findIndex(e=>e.id===t.id);if(i===-1)return[r,...e];let a=[...e];return a[i]=r,a},ae=(e,t)=>{let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id)),i=F(t.filter(e=>!r.has(e.id))),a=e.flatMap(e=>{let t=n.get(e.id);if(!t)return[];let r=e.updatedAt>t.updatedAt?e:t,i=Math.max(e.lastSeenAt??0,t.lastSeenAt??0);return[i>0?{...r,lastSeenAt:i}:r]});return[...i,...a]},z=a((e,t)=>{let n=0,r=0,i=0,a=0,o=0,s=null,c=0,l=0,d=0,f=null,p=0,m=new Set,h=new Set,g=new Map,_=(e,t)=>`${e}\u0000${t}`,v=e=>e===n,y=e=>{if(!v(e))throw Error(`Work session changed.`)},b=()=>{l+=1,d+=1,f=null,h.clear()},x=()=>{let t=++c;return h.add(t),e({loadingFiles:!0}),t},S=(n,r,i)=>{h.delete(n),v(r)&&t().selectedTaskId===i&&e({loadingFiles:h.size>0})},C=e=>t().selectedTaskId===e,w=t=>{let n=++p;return g.set(n,t),C(t)&&e({actionLoading:!0,error:null}),n},T=(n,r)=>{if(g.delete(n),!v(r))return;let i=t().selectedTaskId;e({actionLoading:[...g.values()].some(e=>e===i)})},D=(t,n,r)=>{v(n)&&C(t)&&e({error:r})},O=(t,r=n,i=!1)=>{v(r)&&(i&&(o+=1),e(e=>({tasks:R(e.tasks,t),selectedTask:e.selectedTaskId===t.id?L(e.selectedTask,t):e.selectedTask})))},k=async(e,t,r)=>{let i=n,a=w(r);try{let n=await e();if(y(i),!n.success||!n.data)throw M(t,n);return O(n.data,i,!0),n.data}catch(e){let n=N(e,t);throw D(r,i,n),Error(n)}finally{T(a,i)}};return{capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null,loadCapabilities:async()=>{let t=n;try{let n=await u.capabilities();if(y(t),!n.success||!n.data)throw M(`Could not inspect the Work runtime.`,n);e({capabilities:n.data})}catch(n){v(t)&&e({capabilities:{available:!1,runtime:`docker`,image:``,reason:N(n,`The Work runtime is unavailable.`)}})}},loadTasks:async(t=!1)=>{let c=n,l=++r,d=o;t||(i=l,m.add(l),e({loadingTasks:!0,error:null}));try{let t=await u.listTasks();if(y(c),!t.success||!t.data)throw M(`Could not load Work tasks.`,t);let n=F(t.data);if(l<=a||d!==o)return;a=l,e(e=>{let t=ae(e.tasks,n),r=e.selectedTaskId?t.find(t=>t.id===e.selectedTaskId):void 0,i=r&&e.selectedTask?{...e.selectedTask,...r,messages:e.selectedTask.messages,messageCursor:e.selectedTask.messageCursor,hasMoreMessages:e.selectedTask.hasMoreMessages}:e.selectedTask,a=s,o=a!==null&&l>a.requestId;return o&&(s=null),{tasks:t,selectedTask:i,...o&&e.error===a.message?{error:null}:{}}})}catch(n){let r=N(n,`Could not load Work tasks.`);!t&&v(c)&&l===i&&l>a&&d===o&&(s={requestId:l,message:r},e({error:r}))}finally{m.delete(l),!t&&v(c)&&e({loadingTasks:m.size>0})}},selectTask:t=>{b(),e(e=>({selectedTaskId:t,selectedTask:t&&e.selectedTask?.id===t?e.selectedTask:null,files:[],selectedFile:null,loadingFiles:!1,loadingOlderMessages:!1,actionLoading:[...g.values()].some(e=>e===t),error:null}))},loadTask:async(t,r=!1)=>{let i=n;r||e({loadingTask:!0,error:null});try{let e=await u.getTask(t);if(y(i),!e.success||!e.data)throw M(`Could not load this Work task.`,e);return O(e.data,i),e.data}catch(t){let n=N(t,`Could not load this Work task.`);throw!r&&v(i)&&e({error:n}),Error(n)}finally{!r&&v(i)&&e({loadingTask:!1})}},loadOlderMessages:async r=>{let i=n,a=t().selectedTask,o=a?.id===r?a.messageCursor:void 0;if(!a||a.id!==r||!a.hasMoreMessages||o===void 0)return[];e({loadingOlderMessages:!0,error:null});try{let t=await u.getMessages(r,o);if(y(i),!t.success||!t.data)throw M(`Could not load older Work messages.`,t);let n=t.data;return e(e=>{if(e.selectedTask?.id!==r)return{};let t=e.selectedTask.messageCursor===o;return{selectedTask:{...e.selectedTask,messages:I(e.selectedTask.messages,n.messages),messageCursor:t?n.cursor:e.selectedTask.messageCursor,hasMoreMessages:t?n.hasMore:e.selectedTask.hasMoreMessages}}}),n.messages}catch(n){let a=N(n,`Could not load older Work messages.`);throw v(i)&&t().selectedTaskId===r&&e({error:a}),Error(a)}finally{v(i)&&t().selectedTaskId===r&&e({loadingOlderMessages:!1})}},createTask:e=>k(()=>u.createTask(e),`Could not create the Work task.`,null),updateTask:(e,t)=>k(()=>u.updateTask(e,t),`Could not update the Work task.`,e),markTaskSeen:t=>{let n=Date.now();e(e=>({tasks:e.tasks.map(e=>e.id===t?{...e,lastSeenAt:n}:e),selectedTask:e.selectedTask?.id===t?{...e.selectedTask,lastSeenAt:n}:e.selectedTask})),u.markTaskSeen(t).catch(()=>void 0)},deleteTask:async r=>{let i=n,a=w(r);try{let n=await u.deleteTask(r);if(y(i),!n.success)throw M(`Could not delete the Work task.`,n);t().selectedTaskId===r&&b(),o+=1,e(e=>({tasks:e.tasks.filter(e=>e.id!==r),selectedTaskId:e.selectedTaskId===r?null:e.selectedTaskId,selectedTask:e.selectedTaskId===r?null:e.selectedTask,files:e.selectedTaskId===r?[]:e.files,selectedFile:e.selectedTaskId===r?null:e.selectedFile,liveRuns:Object.fromEntries(Object.entries(e.liveRuns).filter(([e])=>e!==r))}))}catch(e){let t=N(e,`Could not delete the Work task.`);throw D(r,i,t),Error(t)}finally{T(a,i)}},startRun:async(e,t)=>{let r=n,i=w(e);try{let n=await u.startRun(e,t);if(y(r),!n.success||!n.data)throw M(`Could not start the Work run.`,n);return O(n.data,r,!0),n.data}catch(t){let n=N(t,`Could not start the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},cancelRun:async e=>{let r=n,i=w(e);try{let n=await u.cancelRun(e);if(y(r),!n.success)throw M(`Could not cancel the Work run.`,n);return n.data?(O(n.data,r,!0),n.data):(o+=1,await t().loadTask(e,!0))}catch(t){let n=N(t,`Could not cancel the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},beginLiveRun:(t,n,r)=>{e(e=>{let i=e.liveRuns[t];return{liveRuns:{...e.liveRuns,[t]:i?.runId===n?{...i,startedAt:i.startedAt??r}:E(t,n,r)}}})},applyRunEvent:e=>{t().applyRunEvents([e])},applyRunEvents:t=>{t.length!==0&&e(e=>{let n={...e.liveRuns},r=e.tasks,i=e.selectedTask;for(let a of t){n[a.taskId]=ee(n[a.taskId],a);let t=a.type===`snapshot`?a.data.task??a.data.detail:void 0,o=t&&typeof t==`object`&&!Array.isArray(t)&&t.id===a.taskId&&Array.isArray(t.messages)?t:void 0;o&&(r=R(r,o),e.selectedTaskId===o.id&&(i=L(i,o)))}return{liveRuns:n,tasks:r,selectedTask:i}})},setLiveRunConnection:(t,n,r,i)=>{e(e=>{let a=e.liveRuns[t];return!a||a.runId!==n?{}:{liveRuns:{...e.liveRuns,[t]:{...a,connection:r,connectionError:i}}}})},clearLiveRun:(t,n)=>{e(e=>{if(n&&e.liveRuns[t]?.runId!==n)return{};let r={...e.liveRuns};return delete r[t],{liveRuns:r}})},loadFiles:async(r,i=``)=>{let a=n,o=++l,s=x();try{let n=await u.listFiles(r,i);if(y(a),!n.success||!n.data)throw M(`Could not load workspace files.`,n);return o===l&&t().selectedTaskId===r&&(P.delete(r),e({files:n.data})),n.data}catch(n){let s=o===l&&v(a)&&t().selectedTaskId===r;if(te(n)){let e=P.get(r)??0;return s&&e<re&&(P.set(r,e+1),setTimeout(()=>{o===l&&v(a)&&t().selectedTaskId===r&&t().loadFiles(r,i).catch(()=>void 0)},ne)),t().files}let c=N(n,`Could not load workspace files.`);throw s&&e({error:c}),Error(c)}finally{S(s,a,r)}},loadFile:async(r,i)=>{let a=n,o=++d,s=_(r,i);f=s;let c=x();try{let n=await u.getFile(r,i);if(y(a),!n.success||!n.data)throw M(`Could not open this workspace file.`,n);if(o!==d||f!==s||!v(a)||t().selectedTaskId!==r)throw Error(`Work file request was superseded.`);return e({selectedFile:n.data}),n.data}catch(n){let i=N(n,`Could not open this file.`);throw o===d&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(c,a,r)}},clearSelectedFile:()=>{d+=1,f=null,e({selectedFile:null})},saveFile:async(r,i,a,o)=>{let s=n,c=w(r),l=_(r,i);f===l&&(d+=1,f=null);try{let n=await u.saveFile(r,i,a,o);if(y(s),!n.success||!n.data)throw M(`Could not save this workspace file.`,n);return t().selectedTaskId===r&&t().selectedFile?.path===i&&(f===l&&(d+=1,f=null),e({selectedFile:n.data})),n.data}catch(e){let t=N(e,`Could not save this file.`);throw D(r,s,t),Error(t)}finally{T(c,s)}},startPreview:(e,t,n)=>k(()=>u.startPreview(e,t,n),`Could not start the workspace preview.`,e),stopPreview:e=>k(()=>u.stopPreview(e),`Could not stop the workspace preview.`,e),clearError:()=>e({error:null}),clearAllState:()=>{n+=1,i=++r,a=i,o+=1,s=null,m.clear(),g.clear(),b(),e({capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null})}}}),oe=async(e,t,n)=>{let r=await t(e);return r.success&&await n(),r},B=n(`store:plugin-store`),V=a((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await c.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:i(t,`Failed to load plugins`)})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await c.uploadPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to upload plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to upload plugin`})}finally{e({isUploading:!1})}},installPlugin:async n=>{e({isLoading:!0,error:null});try{let r=await c.installPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to install plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to install plugin`})}finally{e({isLoading:!1})}},updatePlugin:async(n,r)=>{e({isLoading:!0,error:null});try{let i=await c.updatePlugin(n,r);i.success&&i.data?await t().loadPlugins():e({error:i.error||`Failed to update plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to update plugin`})}finally{e({isLoading:!1})}},deletePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await c.deletePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to delete plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to delete plugin`})}finally{e({isLoading:!1})}},activatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await oe(n,c.activatePlugin,()=>t().loadPlugins());r.success||e({error:r.error||`Failed to activate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to activate plugin`})}finally{e({isLoading:!1})}},deactivatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await c.deactivatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to deactivate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to deactivate plugin`})}finally{e({isLoading:!1})}},loadPluginStatus:async()=>{try{let t=await c.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){B.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await c.exportPlugin(t),n=window.URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`${t}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}catch(t){e({error:t instanceof Error?t.message:`Failed to export plugin`})}finally{e({isLoading:!1})}},fetchPluginVariables:async t=>{try{let n=await c.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){B.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n,r=[])=>{try{return(await c.setVariables(e,n,r)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return B.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{let n=await c.resetVariables(t);return n.success&&n.data===!0?(e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}}),!0):!1}catch(e){return B.error(`Failed to reset plugin variables:`,e),!1}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),H=`libre-webui:work-draft:`,U=(e,t)=>`${H}${e}:${t}`,se=(e,t)=>{try{let n=window.sessionStorage.getItem(U(e,t));if(!n)return null;let r=JSON.parse(n);return typeof r.content==`string`?{content:r.content,baseUpdatedAt:typeof r.baseUpdatedAt==`number`?r.baseUpdatedAt:void 0}:null}catch{return null}},ce=(e,t,n)=>{try{return window.sessionStorage.setItem(U(e,t),JSON.stringify(n)),!0}catch{return!1}},W=(e,t)=>{try{window.sessionStorage.removeItem(U(e,t))}catch{}},le=e=>{let t=`${H}${e}:`;try{for(let e=window.sessionStorage.length-1;e>=0;e--){let n=window.sessionStorage.key(e);n?.startsWith(t)&&window.sessionStorage.removeItem(n)}}catch{}},G=()=>{try{for(let e=window.sessionStorage.length-1;e>=0;e--){let t=window.sessionStorage.key(e);t?.startsWith(H)&&window.sessionStorage.removeItem(t)}}catch{}},ue=`/ws/work-terminal`,de=`/ws/work-screen`,fe=`/ws/work-audio`;function K(e,t,n){let r;try{r=new URL(e)}catch{throw Error(`${t} must be an absolute URL.`)}if(!n.includes(r.protocol))throw Error(`${t} must use ${n.join(` or `)}.`);if(r.username||r.password||r.search||r.hash)throw Error(`${t} must not contain credentials, a query, or a fragment.`);return r}function q(e){return e.replace(/\/+$/,``)}function pe(e){return q(K(e,`VITE_WS_BASE_URL`,[`ws:`,`wss:`]).toString())}function me(e){let t=K(e,`VITE_API_BASE_URL`,[`http:`,`https:`]);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=t.pathname.replace(/\/api\/?$/,``),q(t.toString())}function J(e){let t=e.websocketBaseUrl?.trim();if(t)return pe(t);if(e.protocol===`file:`)return`ws://localhost:3001`;let n=e.apiBaseUrl?.trim();return n?me(n):`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}`}function Y(e,t,n){let r=J(t),i=new URL(`${r}/${e.replace(/^\/+/,``)}`);for(let[e,t]of Object.entries(n))i.searchParams.set(e,t);return i.toString()}function he(e,t){return Y(`/ws`,t,{ticket:e})}function ge(e,t,n){return Y(de,n,{taskId:e,ticket:t})}function _e(e,t,n){return Y(fe,n,{taskId:e,ticket:t})}function ve(e,t,n){return Y(ue,n,{taskId:e,ticket:t})}var X=n(`websocket`),Z=e=>{if(e instanceof Error&&e.message===`Session expired`)return!0;let t=e?.response?.status;return t===401||t===403},Q=new class{ws=null;urlEnvironment;reconnectAttempts=0;reconnectDelay=1e3;maxReconnectDelay=3e4;reconnectTimer=null;messageHandlers=new Map;connectPromise=null;shouldReconnect=!1;connectionEpoch=0;constructor(){this.urlEnvironment={protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,websocketBaseUrl:void 0,production:!0},X.debug(`WebSocket base URL resolved:`,J(this.urlEnvironment))}connect(){if(e())return X.debug(`Demo mode active: skipping WebSocket connection.`),Promise.resolve();if(this.ws?.readyState===WebSocket.OPEN)return Promise.resolve();if(this.connectPromise)return this.connectPromise;this.clearReconnectTimer(),this.shouldReconnect=!0;let t=++this.connectionEpoch,n=this.openWithTicket(t).catch(e=>{if(this.shouldReconnect&&t===this.connectionEpoch)throw Z(e)?(this.shouldReconnect=!1,this.clearReconnectTimer()):this.attemptReconnect(t),e}).finally(()=>{this.connectPromise===n&&(this.connectPromise=null)});return this.connectPromise=n,n}async openWithTicket(e){let t=(await s.post(`/auth/websocket-ticket`,{audience:`chat`})).data.data?.ticket;if(!t)throw Error(`The server did not issue a WebSocket ticket.`);if(this.shouldReconnect&&e===this.connectionEpoch)return X.debug(`WebSocket: Attempting to connect`),new Promise((n,r)=>{try{let i=he(t,this.urlEnvironment);X.debug(`WebSocket: Connecting with a one-use ticket`);let a=new WebSocket(i),o=!1;this.ws=a,a.onopen=()=>{if(!this.shouldReconnect||e!==this.connectionEpoch){a.close(),n();return}X.debug(`WebSocket connected successfully`),o=!0,this.reconnectAttempts=0,this.clearReconnectTimer(),n()},a.onmessage=t=>{if(this.shouldReconnect&&e===this.connectionEpoch)try{let e=JSON.parse(t.data),n=this.messageHandlers.get(e.type);n?n(e.data):e.type===`connected`?X.debug(`WebSocket: Server confirmed connection`):X.warn(`WebSocket: No handler for message type:`,e.type)}catch(e){X.error(`Failed to parse WebSocket message:`,e)}},a.onclose=()=>{if(X.debug(`WebSocket disconnected`),this.ws===a&&(this.ws=null),e!==this.connectionEpoch){n();return}o?this.shouldReconnect&&this.attemptReconnect(e):r(Error(`WebSocket closed before opening`))},a.onerror=t=>{if(e!==this.connectionEpoch){n();return}X.error(`WebSocket error:`,t),r(t)}}catch(e){r(e)}})}disconnect(){this.shouldReconnect=!1,this.connectionEpoch+=1,this.clearReconnectTimer(),this.reconnectAttempts=0,this.connectPromise=null;let e=this.ws;e&&(this.ws=null,e.readyState!==WebSocket.CONNECTING&&e.close())}reconnect(){return this.disconnect(),this.connect()}send(e){return this.ws&&this.ws.readyState===WebSocket.OPEN?(X.debug(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e)),!0):(X.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState),!1)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}dispatchMessage(e,t){this.messageHandlers.get(e)?.(t)}clearReconnectTimer(){this.reconnectTimer!==null&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null}attemptReconnect(t){if(e()||!this.shouldReconnect||t!==this.connectionEpoch||this.reconnectTimer!==null)return;let n=Math.min(this.reconnectDelay*2**this.reconnectAttempts,this.maxReconnectDelay);this.reconnectAttempts=Math.min(this.reconnectAttempts+1,5),X.debug(`Reconnecting WebSocket in ${n}ms`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.shouldReconnect&&t===this.connectionEpoch&&this.connect().catch(()=>{})},n)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},$=n(`auth-store`),ye=a()(o((n,i)=>({user:null,token:null,systemInfo:null,workAccess:null,isAuthenticated:!1,isLoading:!1,login:(t,a,o)=>{let s=i().user?.id===t.id;localStorage.setItem(`auth-token`,a);let c=r.getState();c.clearAllState&&c.clearAllState(),z.getState().clearAllState(),s||(G(),d.getState().clearUserState()),n({user:t,token:a,systemInfo:o,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let t=V.getState();$.debug(`Reinitializing app after login...`),$.debug(`Reconnecting WebSocket with auth token...`);try{await Q.reconnect()}catch(e){$.warn(`WebSocket reconnect after login failed; continuing app initialization:`,e)}try{!(await l.checkHealth()).success&&!e()&&$.warn(`Ollama service not available after login`)}catch(e){$.warn(`Ollama health check failed after login; continuing provider initialization:`,e)}let n=d.getState();await Promise.all([c.loadModels(),c.loadSessions(),c.loadPreferences(),n.loadPreferences(),t.loadPlugins(),i().refreshWorkAccess()]),$.debug(`Reinitialized app after login`)}catch(e){$.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),$.debug(`Disconnecting WebSocket on logout...`),Q.disconnect();let e=r.getState();e.clearAllState&&e.clearAllState(),z.getState().clearAllState(),G(),d.getState().clearUserState(),n({user:null,token:null,workAccess:null,isAuthenticated:!1,isLoading:!1})},setUser:e=>{n({user:e})},setSystemInfo:e=>{n({systemInfo:e})},setLoading:e=>{n({isLoading:e})},isAdmin:()=>{let{user:e}=i();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=i();return e?.requiresAuth??!1},canUseWork:()=>{let{systemInfo:e,user:t,workAccess:n}=i();return e?.requiresAuth===!1||t?.role===`admin`||n?.allowed===!0},canUseAgents:()=>{let{systemInfo:e,user:t}=i();return e?.agentsEnabled===!0?e?.requiresAuth===!1||t?.role===`admin`:!1},canUseCordis:()=>{let{systemInfo:e,user:t}=i();return e?.cordisEnabled===!0?e?.requiresAuth===!1||t?.role===`admin`:!1},refreshWorkAccess:async()=>{try{let{workApi:e}=await t(async()=>{let{workApi:e}=await import(`./workApi-BIS9RxRi.js`);return{workApi:e}},__vite__mapDeps([0,1,2,3,4])),r=await e.access();r.success&&r.data&&n({workAccess:r.data})}catch(e){$.debug(`Could not load Work access mode:`,e)}}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,workAccess:e.workAccess,isAuthenticated:e.isAuthenticated})}));export{ve as a,se as c,z as d,k as f,ge as i,ce as l,Q as n,W as o,_e as r,le as s,ye as t,V as u};