libre-webui 0.17.0 → 0.19.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 (438) hide show
  1. package/README.md +30 -17
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +195 -6
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +48 -19
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/middleware/auth.d.ts.map +1 -1
  9. package/backend/dist/middleware/auth.js +35 -3
  10. package/backend/dist/middleware/auth.js.map +1 -1
  11. package/backend/dist/middleware/index.d.ts.map +1 -1
  12. package/backend/dist/models/personaModel.d.ts.map +1 -1
  13. package/backend/dist/models/personaModel.js.map +1 -1
  14. package/backend/dist/models/userModel.d.ts +24 -0
  15. package/backend/dist/models/userModel.d.ts.map +1 -1
  16. package/backend/dist/models/userModel.js +92 -24
  17. package/backend/dist/models/userModel.js.map +1 -1
  18. package/backend/dist/routes/agentCli.d.ts.map +1 -1
  19. package/backend/dist/routes/agentCli.js +4 -2
  20. package/backend/dist/routes/agentCli.js.map +1 -1
  21. package/backend/dist/routes/auth.d.ts.map +1 -1
  22. package/backend/dist/routes/auth.js +118 -55
  23. package/backend/dist/routes/auth.js.map +1 -1
  24. package/backend/dist/routes/chat.d.ts.map +1 -1
  25. package/backend/dist/routes/chat.js +106 -3
  26. package/backend/dist/routes/chat.js.map +1 -1
  27. package/backend/dist/routes/documents.d.ts.map +1 -1
  28. package/backend/dist/routes/documents.js +179 -41
  29. package/backend/dist/routes/documents.js.map +1 -1
  30. package/backend/dist/routes/embeddings.d.ts.map +1 -1
  31. package/backend/dist/routes/embeddings.js +2 -2
  32. package/backend/dist/routes/embeddings.js.map +1 -1
  33. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  34. package/backend/dist/routes/huggingfaceHub.js +3 -1
  35. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  36. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  37. package/backend/dist/routes/imageGen.js +2 -0
  38. package/backend/dist/routes/imageGen.js.map +1 -1
  39. package/backend/dist/routes/libreClaw.d.ts.map +1 -1
  40. package/backend/dist/routes/media.d.ts +3 -0
  41. package/backend/dist/routes/media.d.ts.map +1 -0
  42. package/backend/dist/routes/media.js +429 -0
  43. package/backend/dist/routes/media.js.map +1 -0
  44. package/backend/dist/routes/notes.d.ts +3 -0
  45. package/backend/dist/routes/notes.d.ts.map +1 -0
  46. package/backend/dist/routes/notes.js +121 -0
  47. package/backend/dist/routes/notes.js.map +1 -0
  48. package/backend/dist/routes/ollama.d.ts.map +1 -1
  49. package/backend/dist/routes/ollama.js +17 -85
  50. package/backend/dist/routes/ollama.js.map +1 -1
  51. package/backend/dist/routes/personas.d.ts.map +1 -1
  52. package/backend/dist/routes/personas.js +2 -0
  53. package/backend/dist/routes/personas.js.map +1 -1
  54. package/backend/dist/routes/plugins.d.ts.map +1 -1
  55. package/backend/dist/routes/plugins.js +28 -0
  56. package/backend/dist/routes/plugins.js.map +1 -1
  57. package/backend/dist/routes/preferences.d.ts.map +1 -1
  58. package/backend/dist/routes/systemDiagnostics.d.ts +3 -0
  59. package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -0
  60. package/backend/dist/routes/systemDiagnostics.js +49 -0
  61. package/backend/dist/routes/systemDiagnostics.js.map +1 -0
  62. package/backend/dist/routes/tts.d.ts.map +1 -1
  63. package/backend/dist/routes/tts.js +4 -0
  64. package/backend/dist/routes/tts.js.map +1 -1
  65. package/backend/dist/routes/users.d.ts.map +1 -1
  66. package/backend/dist/routes/users.js +79 -0
  67. package/backend/dist/routes/users.js.map +1 -1
  68. package/backend/dist/routes/work.d.ts.map +1 -1
  69. package/backend/dist/routes/work.js +84 -0
  70. package/backend/dist/routes/work.js.map +1 -1
  71. package/backend/dist/services/agentCliService.d.ts +37 -4
  72. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  73. package/backend/dist/services/agentCliService.js +229 -10
  74. package/backend/dist/services/agentCliService.js.map +1 -1
  75. package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
  76. package/backend/dist/services/authService.d.ts +15 -9
  77. package/backend/dist/services/authService.d.ts.map +1 -1
  78. package/backend/dist/services/authService.js +39 -29
  79. package/backend/dist/services/authService.js.map +1 -1
  80. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  81. package/backend/dist/services/chatGenerationService.js +3 -3
  82. package/backend/dist/services/chatGenerationService.js.map +1 -1
  83. package/backend/dist/services/chatRequestService.d.ts +8 -2
  84. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  85. package/backend/dist/services/chatRequestService.js +30 -3
  86. package/backend/dist/services/chatRequestService.js.map +1 -1
  87. package/backend/dist/services/chatService.d.ts +6 -1
  88. package/backend/dist/services/chatService.d.ts.map +1 -1
  89. package/backend/dist/services/chatService.js +54 -1
  90. package/backend/dist/services/chatService.js.map +1 -1
  91. package/backend/dist/services/codexOAuthService.d.ts +22 -0
  92. package/backend/dist/services/codexOAuthService.d.ts.map +1 -0
  93. package/backend/dist/services/codexOAuthService.js +176 -0
  94. package/backend/dist/services/codexOAuthService.js.map +1 -0
  95. package/backend/dist/services/documentService.d.ts +17 -10
  96. package/backend/dist/services/documentService.d.ts.map +1 -1
  97. package/backend/dist/services/documentService.js +79 -58
  98. package/backend/dist/services/documentService.js.map +1 -1
  99. package/backend/dist/services/embeddingService.d.ts.map +1 -1
  100. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  101. package/backend/dist/services/encryptionService.js +18 -8
  102. package/backend/dist/services/encryptionService.js.map +1 -1
  103. package/backend/dist/services/followUpService.d.ts +44 -0
  104. package/backend/dist/services/followUpService.d.ts.map +1 -0
  105. package/backend/dist/services/followUpService.js +123 -0
  106. package/backend/dist/services/followUpService.js.map +1 -0
  107. package/backend/dist/services/galleryService.d.ts +23 -1
  108. package/backend/dist/services/galleryService.d.ts.map +1 -1
  109. package/backend/dist/services/galleryService.js +125 -8
  110. package/backend/dist/services/galleryService.js.map +1 -1
  111. package/backend/dist/services/libreClawService.d.ts.map +1 -1
  112. package/backend/dist/services/mediaGenerationJobService.d.ts +25 -0
  113. package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -0
  114. package/backend/dist/services/mediaGenerationJobService.js +82 -0
  115. package/backend/dist/services/mediaGenerationJobService.js.map +1 -0
  116. package/backend/dist/services/memoryService.d.ts.map +1 -1
  117. package/backend/dist/services/memoryService.js.map +1 -1
  118. package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
  119. package/backend/dist/services/oauthSecurity.d.ts +14 -0
  120. package/backend/dist/services/oauthSecurity.d.ts.map +1 -0
  121. package/backend/dist/services/oauthSecurity.js +101 -0
  122. package/backend/dist/services/oauthSecurity.js.map +1 -0
  123. package/backend/dist/services/ollamaService.d.ts +8 -2
  124. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  125. package/backend/dist/services/ollamaService.js +40 -2
  126. package/backend/dist/services/ollamaService.js.map +1 -1
  127. package/backend/dist/services/personaService.d.ts.map +1 -1
  128. package/backend/dist/services/personaService.js.map +1 -1
  129. package/backend/dist/services/pluginActivationService.d.ts.map +1 -1
  130. package/backend/dist/services/pluginActivationService.js.map +1 -1
  131. package/backend/dist/services/pluginAudioGenerationService.d.ts +34 -0
  132. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -0
  133. package/backend/dist/services/pluginAudioGenerationService.js +211 -0
  134. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -0
  135. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  136. package/backend/dist/services/pluginCapabilityRegistryService.js +6 -0
  137. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  138. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  139. package/backend/dist/services/pluginEmbeddingService.d.ts +2 -0
  140. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  141. package/backend/dist/services/pluginEmbeddingService.js +66 -35
  142. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  143. package/backend/dist/services/pluginImageGenerationService.d.ts +2 -0
  144. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  145. package/backend/dist/services/pluginImageGenerationService.js +63 -38
  146. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  147. package/backend/dist/services/pluginService.d.ts +43 -1
  148. package/backend/dist/services/pluginService.d.ts.map +1 -1
  149. package/backend/dist/services/pluginService.js +441 -71
  150. package/backend/dist/services/pluginService.js.map +1 -1
  151. package/backend/dist/services/pluginTTSService.d.ts +2 -0
  152. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  153. package/backend/dist/services/pluginTTSService.js +27 -2
  154. package/backend/dist/services/pluginTTSService.js.map +1 -1
  155. package/backend/dist/services/pluginUsageService.d.ts +100 -0
  156. package/backend/dist/services/pluginUsageService.d.ts.map +1 -0
  157. package/backend/dist/services/pluginUsageService.js +291 -0
  158. package/backend/dist/services/pluginUsageService.js.map +1 -0
  159. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  160. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  161. package/backend/dist/services/pluginVideoGenerationService.d.ts +45 -0
  162. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -0
  163. package/backend/dist/services/pluginVideoGenerationService.js +198 -0
  164. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -0
  165. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  166. package/backend/dist/services/preferencesService.js +16 -1
  167. package/backend/dist/services/preferencesService.js.map +1 -1
  168. package/backend/dist/services/registrationPolicy.d.ts +5 -0
  169. package/backend/dist/services/registrationPolicy.d.ts.map +1 -0
  170. package/backend/dist/services/registrationPolicy.js +21 -0
  171. package/backend/dist/services/registrationPolicy.js.map +1 -0
  172. package/backend/dist/services/simpleGitHubOAuth.d.ts +1 -1
  173. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
  174. package/backend/dist/services/simpleGitHubOAuth.js +13 -13
  175. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  176. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts +1 -1
  177. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  178. package/backend/dist/services/simpleHuggingFaceOAuth.js +12 -17
  179. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  180. package/backend/dist/services/systemDiagnosticsService.d.ts +117 -0
  181. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -0
  182. package/backend/dist/services/systemDiagnosticsService.js +326 -0
  183. package/backend/dist/services/systemDiagnosticsService.js.map +1 -0
  184. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  185. package/backend/dist/services/turnstileService.d.ts +2 -1
  186. package/backend/dist/services/turnstileService.d.ts.map +1 -1
  187. package/backend/dist/services/turnstileService.js +28 -2
  188. package/backend/dist/services/turnstileService.js.map +1 -1
  189. package/backend/dist/services/userService.d.ts +1 -0
  190. package/backend/dist/services/userService.js +1 -1
  191. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  192. package/backend/dist/services/workAgentService.js.map +1 -1
  193. package/backend/dist/services/workEventService.d.ts.map +1 -1
  194. package/backend/dist/services/workEventService.js.map +1 -1
  195. package/backend/dist/services/workHostWorkspaceService.d.ts.map +1 -1
  196. package/backend/dist/services/workModelProviderService.d.ts +3 -0
  197. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  198. package/backend/dist/services/workModelProviderService.js +67 -10
  199. package/backend/dist/services/workModelProviderService.js.map +1 -1
  200. package/backend/dist/services/workPreviewProxyService.d.ts +27 -0
  201. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -0
  202. package/backend/dist/services/workPreviewProxyService.js +514 -0
  203. package/backend/dist/services/workPreviewProxyService.js.map +1 -0
  204. package/backend/dist/services/workRuntimeService.d.ts +28 -7
  205. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  206. package/backend/dist/services/workRuntimeService.js +287 -8
  207. package/backend/dist/services/workRuntimeService.js.map +1 -1
  208. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  209. package/backend/dist/services/workTaskService.js.map +1 -1
  210. package/backend/dist/services/workTerminalService.d.ts +1 -1
  211. package/backend/dist/services/workTerminalService.d.ts.map +1 -1
  212. package/backend/dist/services/workTerminalService.js.map +1 -1
  213. package/backend/dist/storage.d.ts +12 -1
  214. package/backend/dist/storage.d.ts.map +1 -1
  215. package/backend/dist/storage.js +183 -9
  216. package/backend/dist/storage.js.map +1 -1
  217. package/backend/dist/storageMappers.d.ts +13 -0
  218. package/backend/dist/storageMappers.d.ts.map +1 -1
  219. package/backend/dist/storageMappers.js +5 -0
  220. package/backend/dist/storageMappers.js.map +1 -1
  221. package/backend/dist/types/index.d.ts +106 -1
  222. package/backend/dist/types/index.d.ts.map +1 -1
  223. package/backend/dist/types/index.js.map +1 -1
  224. package/backend/dist/types/work.d.ts +31 -0
  225. package/backend/dist/types/work.d.ts.map +1 -1
  226. package/backend/dist/utils/chatContext.js.map +1 -1
  227. package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
  228. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  229. package/backend/dist/utils/chatDocumentContext.js +9 -4
  230. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  231. package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -1
  232. package/backend/dist/utils/generationUtils.d.ts.map +1 -1
  233. package/backend/dist/utils/hash.d.ts.map +1 -1
  234. package/backend/dist/utils/hash.js +13 -2
  235. package/backend/dist/utils/hash.js.map +1 -1
  236. package/backend/dist/utils/logger.d.ts +1 -1
  237. package/backend/dist/utils/logger.d.ts.map +1 -1
  238. package/backend/dist/utils/ollamaStreaming.d.ts +6 -2
  239. package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -1
  240. package/backend/dist/utils/ollamaStreaming.js +12 -2
  241. package/backend/dist/utils/ollamaStreaming.js.map +1 -1
  242. package/backend/dist/utils/openAIResponsesAdapter.js.map +1 -1
  243. package/backend/dist/utils/packagePaths.js.map +1 -1
  244. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  245. package/backend/dist/utils/pluginChatAdapter.js +11 -4
  246. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  247. package/backend/dist/utils/pluginChatContext.js.map +1 -1
  248. package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
  249. package/backend/dist/utils/pluginDefinitionTrust.js +2 -1
  250. package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
  251. package/backend/dist/utils/pluginStreamAdapter.d.ts +10 -1
  252. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
  253. package/backend/dist/utils/pluginStreamAdapter.js +30 -23
  254. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
  255. package/backend/dist/utils/pluginValidation.d.ts +4 -3
  256. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  257. package/backend/dist/utils/pluginValidation.js +47 -2
  258. package/backend/dist/utils/pluginValidation.js.map +1 -1
  259. package/backend/dist/utils/resourceLimits.d.ts +10 -0
  260. package/backend/dist/utils/resourceLimits.d.ts.map +1 -0
  261. package/backend/dist/utils/resourceLimits.js +29 -0
  262. package/backend/dist/utils/resourceLimits.js.map +1 -0
  263. package/backend/dist/utils/thinkingPhaseTimer.d.ts +21 -0
  264. package/backend/dist/utils/thinkingPhaseTimer.d.ts.map +1 -0
  265. package/backend/dist/utils/thinkingPhaseTimer.js +84 -0
  266. package/backend/dist/utils/thinkingPhaseTimer.js.map +1 -0
  267. package/backend/dist/utils/webpageFetcher.d.ts +25 -0
  268. package/backend/dist/utils/webpageFetcher.d.ts.map +1 -0
  269. package/backend/dist/utils/webpageFetcher.js +231 -0
  270. package/backend/dist/utils/webpageFetcher.js.map +1 -0
  271. package/backend/dist/utils/websocketMessages.js.map +1 -1
  272. package/backend/dist/utils/workGit.d.ts +14 -0
  273. package/backend/dist/utils/workGit.d.ts.map +1 -0
  274. package/backend/dist/utils/workGit.js +207 -0
  275. package/backend/dist/utils/workGit.js.map +1 -0
  276. package/backend/dist/websocketServer.d.ts +1 -0
  277. package/backend/dist/websocketServer.d.ts.map +1 -1
  278. package/backend/dist/websocketServer.js +110 -25
  279. package/backend/dist/websocketServer.js.map +1 -1
  280. package/backend/dist/workTerminalServer.d.ts.map +1 -1
  281. package/backend/dist/workTerminalServer.js +3 -1
  282. package/backend/dist/workTerminalServer.js.map +1 -1
  283. package/backend/package.json +8 -7
  284. package/bin/cli.js +2 -2
  285. package/frontend/dist/assets/index-CFhy8YLA.css +1 -0
  286. package/frontend/dist/assets/index-_lG_lwU-.js +164 -0
  287. package/frontend/dist/assets/markdown-math-ClQbWekD.css +1 -0
  288. package/frontend/dist/assets/xterm-DHcfr8qj.css +1 -0
  289. package/frontend/dist/index.html +41 -16
  290. package/frontend/dist/js/ArtifactContainer-CjpvtR8G.js +1 -0
  291. package/frontend/dist/js/{ArtifactDemoPage-B4qsvUnF.js → ArtifactDemoPage-yrPXLBQo.js} +1 -1
  292. package/frontend/dist/js/ArtifactSlideOutPanel-DdsL2AOQ.js +1 -0
  293. package/frontend/dist/js/{Button-CRwzOaDZ.js → Button-X9TT9gTD.js} +1 -1
  294. package/frontend/dist/js/ChatPage-D9lWGM8g.js +16 -0
  295. package/frontend/dist/js/FirstTimeSetup-CwLPbHkI.js +1 -0
  296. package/frontend/dist/js/GalleryPage-C9DTdo_-.js +1 -0
  297. package/frontend/dist/js/HomePage-iF44c34e.js +1 -0
  298. package/frontend/dist/js/LibreClawPage-B9wWZIz6.js +1 -0
  299. package/frontend/dist/js/{ModelManagerModals-DMoEav1l.js → ModelManagerModals-D9j9RECi.js} +1 -1
  300. package/frontend/dist/js/ModelSelector-B0RKEJwC.js +1 -0
  301. package/frontend/dist/js/ModelsPage-DJXoIOs8.js +2 -0
  302. package/frontend/dist/js/NotesPage-BTNH6JR2.js +1 -0
  303. package/frontend/dist/js/{OptimizedSyntaxHighlighter-Ci9sRc78.js → OptimizedSyntaxHighlighter-CWYUn9Oe.js} +1 -1
  304. package/frontend/dist/js/PersonasPage--nqoJ-wA.js +13 -0
  305. package/frontend/dist/js/PluginUsagePage-BHwm-BBr.js +1 -0
  306. package/frontend/dist/js/{RichMessageContent-BJ49VN9j.js → RichMessageContent-DYRrXJ75.js} +3 -3
  307. package/frontend/dist/js/SettingsModal-y1Nzg55O.js +1 -0
  308. package/frontend/dist/js/SystemPage-CHez8h3p.js +1 -0
  309. package/frontend/dist/js/UserManagementPage-aJhKXQxG.js +1 -0
  310. package/frontend/dist/js/WorkPage-Ccla0MDm.js +5 -0
  311. package/frontend/dist/js/addon-fit-DIOBYJe3.js +1 -0
  312. package/frontend/dist/js/api-DVP8xiYT.js +19 -0
  313. package/frontend/dist/js/appStore-Cw7PmG-J.js +2 -0
  314. package/frontend/dist/js/ar-ONXFvOB1.js +2 -0
  315. package/frontend/dist/js/artifactHtml-C0Hu9I1u.js +41 -0
  316. package/frontend/dist/js/authStore-gv_MgDKr.js +3 -0
  317. package/frontend/dist/js/babel-CmENXdZw.js +16 -0
  318. package/frontend/dist/js/bn-BLhREPm6.js +2 -0
  319. package/frontend/dist/js/chatStore-DmDbolTg.js +2 -0
  320. package/frontend/dist/js/cs-Bg8E9fG5.js +2 -0
  321. package/frontend/dist/js/da-ODCU8w4x.js +2 -0
  322. package/frontend/dist/js/de-nuGHRJ5N.js +2 -0
  323. package/frontend/dist/js/es-DcN_cwum.js +2 -0
  324. package/frontend/dist/js/estree-DJwQLE88.js +44 -0
  325. package/frontend/dist/js/fr-C-L_xGr5.js +2 -0
  326. package/frontend/dist/js/hi-DUEtwA9G.js +2 -0
  327. package/frontend/dist/js/html-DdAOfeK4.js +25 -0
  328. package/frontend/dist/js/i18n-xir4Zz7C.js +2 -0
  329. package/frontend/dist/js/i18next-DgmgtwsV.js +1 -0
  330. package/frontend/dist/js/id-DNTYhti_.js +2 -0
  331. package/frontend/dist/js/imageGenModels-Dx_QMLJQ.js +1 -0
  332. package/frontend/dist/js/is-Bx28ymbQ.js +2 -0
  333. package/frontend/dist/js/it-BjW-JLlS.js +2 -0
  334. package/frontend/dist/js/ja-uThj4Q1w.js +2 -0
  335. package/frontend/dist/js/ko-DqgmMYXK.js +2 -0
  336. package/frontend/dist/js/logger-DSXjF4ye.js +1 -0
  337. package/frontend/dist/js/markdown-RaVsONor.js +70 -0
  338. package/frontend/dist/js/markdown-core-DHnR5Hw8.js +16 -0
  339. package/frontend/dist/js/markdown-math-B7FlYsmr.js +261 -0
  340. package/frontend/dist/js/messageCodeStyles-cTX0rQGK.js +2 -0
  341. package/frontend/dist/js/ms-R9kt_P0T.js +2 -0
  342. package/frontend/dist/js/nl-BjmtEgpK.js +2 -0
  343. package/frontend/dist/js/pl-C8_gU9r1.js +2 -0
  344. package/frontend/dist/js/postcss-B5WIGhAY.js +62 -0
  345. package/frontend/dist/js/pt-7BJForUD.js +2 -0
  346. package/frontend/dist/js/react-vendor-DPNXrO-8.js +9 -0
  347. package/frontend/dist/js/{rolldown-runtime-QTnfLwEv.js → rolldown-runtime-hePW80VL.js} +1 -1
  348. package/frontend/dist/js/router-vendor-Ca9zqOqT.js +1 -0
  349. package/frontend/dist/js/ru-D2HmhY6Y.js +2 -0
  350. package/frontend/dist/js/{standalone-DmLfI4Qj.js → standalone-B_aPlu7o.js} +8 -8
  351. package/frontend/dist/js/sv-zny3sDBM.js +2 -0
  352. package/frontend/dist/js/syntax-highlight-Ca9bHsaz.js +8 -0
  353. package/frontend/dist/js/th-CAzEKRz8.js +2 -0
  354. package/frontend/dist/js/tr-BmYgtmUo.js +2 -0
  355. package/frontend/dist/js/{typescript-Bcq62agC.js → typescript-Dz4OUZSl.js} +10 -10
  356. package/frontend/dist/js/ui-DDlcz2oy.js +2 -0
  357. package/frontend/dist/js/ui-vendor-D_pYT79f.js +177 -0
  358. package/frontend/dist/js/uk-eiYZ0uRq.js +2 -0
  359. package/frontend/dist/js/useTranslation-CdeLZqSW.js +1 -0
  360. package/frontend/dist/js/utils-BhpNrGnR.js +1 -0
  361. package/frontend/dist/js/utils-vendor-1zob7nK9.js +9 -0
  362. package/frontend/dist/js/vi-C7SVAWpO.js +2 -0
  363. package/frontend/dist/js/welcomePrompts-to5mv_gx.js +1 -0
  364. package/frontend/dist/js/xterm-Da5ppSVt.js +18 -0
  365. package/frontend/dist/js/{yaml-mLy9chOK.js → yaml-QD4znPfZ.js} +20 -20
  366. package/frontend/dist/js/zh-2Q3cQv3s.js +2 -0
  367. package/package.json +20 -13
  368. package/plugins/codex-oauth.json +19 -0
  369. package/plugins/openrouter.json +89 -0
  370. package/backend/dist/services/systemSettingsService.d.ts +0 -12
  371. package/backend/dist/services/systemSettingsService.d.ts.map +0 -1
  372. package/backend/dist/services/systemSettingsService.js +0 -70
  373. package/backend/dist/services/systemSettingsService.js.map +0 -1
  374. package/frontend/dist/assets/index-BqI0kezz.css +0 -1
  375. package/frontend/dist/assets/index-CRC6g6bL.js +0 -3
  376. package/frontend/dist/assets/markdown-math-CYlHEDRF.css +0 -1
  377. package/frontend/dist/assets/xterm-CmMoOwwu.css +0 -1
  378. package/frontend/dist/js/ArtifactContainer-Cdy-973y.js +0 -1
  379. package/frontend/dist/js/ArtifactSlideOutPanel-CmKgQ4eD.js +0 -1
  380. package/frontend/dist/js/ChatPage-CYT69oBR.js +0 -16
  381. package/frontend/dist/js/FirstTimeSetup-C8LdLP5J.js +0 -1
  382. package/frontend/dist/js/GalleryPage-Bm89pnS8.js +0 -1
  383. package/frontend/dist/js/HomePage-CeCYnMUG.js +0 -1
  384. package/frontend/dist/js/LibreClawPage-DGMEV6dm.js +0 -1
  385. package/frontend/dist/js/ModelSelector-DXPdGdQ_.js +0 -1
  386. package/frontend/dist/js/ModelsPage-D-FIy2x-.js +0 -2
  387. package/frontend/dist/js/PersonasPage-CIrEVFo5.js +0 -13
  388. package/frontend/dist/js/SettingsModal-CxtOXPY7.js +0 -1
  389. package/frontend/dist/js/UserManagementPage-BfyYGGFQ.js +0 -1
  390. package/frontend/dist/js/WorkPage-C7bW6Hxx.js +0 -4
  391. package/frontend/dist/js/addon-fit-Cj0_dfHF.js +0 -1
  392. package/frontend/dist/js/api-DCD41-l9.js +0 -19
  393. package/frontend/dist/js/appStore-Bw-8Exsx.js +0 -2
  394. package/frontend/dist/js/ar-BAHlIvy0.js +0 -2
  395. package/frontend/dist/js/artifactHtml-B7Oy2e__.js +0 -27
  396. package/frontend/dist/js/authStore-mOYH_AXI.js +0 -4
  397. package/frontend/dist/js/babel-BnLuavNv.js +0 -16
  398. package/frontend/dist/js/bn-BxquDVbd.js +0 -2
  399. package/frontend/dist/js/cs-C4DoKzRm.js +0 -2
  400. package/frontend/dist/js/da-CFslpGTw.js +0 -2
  401. package/frontend/dist/js/de-ChudoRh2.js +0 -2
  402. package/frontend/dist/js/demoMode-BhEpMVh5.js +0 -1
  403. package/frontend/dist/js/es-B36fefE-.js +0 -2
  404. package/frontend/dist/js/estree-0vwU39qX.js +0 -44
  405. package/frontend/dist/js/fr-BSVeTM5W.js +0 -2
  406. package/frontend/dist/js/hi-BGoFbl5V.js +0 -2
  407. package/frontend/dist/js/html-CApr2Bvi.js +0 -25
  408. package/frontend/dist/js/id-BfYs2p_j.js +0 -2
  409. package/frontend/dist/js/is-DZ1MS-5A.js +0 -2
  410. package/frontend/dist/js/it-CXtrPCG1.js +0 -2
  411. package/frontend/dist/js/ja-FPJ_NK_y.js +0 -2
  412. package/frontend/dist/js/ko-DVwD4ZZF.js +0 -2
  413. package/frontend/dist/js/logger-DbNs3-DK.js +0 -1
  414. package/frontend/dist/js/markdown-C78Qc6xu.js +0 -70
  415. package/frontend/dist/js/markdown-core-GI9BPwrB.js +0 -16
  416. package/frontend/dist/js/markdown-math-E4O1gcxj.js +0 -261
  417. package/frontend/dist/js/ms-PKPP0RX3.js +0 -2
  418. package/frontend/dist/js/nl-DWM5HJZ8.js +0 -2
  419. package/frontend/dist/js/pl-B9va8Tuf.js +0 -2
  420. package/frontend/dist/js/postcss-DSDkwgFE.js +0 -62
  421. package/frontend/dist/js/pt-P0IQi-Zr.js +0 -2
  422. package/frontend/dist/js/react-vendor-DyG_ODzn.js +0 -9
  423. package/frontend/dist/js/router-vendor-BjDI9mRe.js +0 -1
  424. package/frontend/dist/js/ru-Ca2bxYnc.js +0 -2
  425. package/frontend/dist/js/sv-DI4RDwyZ.js +0 -2
  426. package/frontend/dist/js/syntax-highlight-pM1xnNpY.js +0 -8
  427. package/frontend/dist/js/th-DN0bDS9d.js +0 -2
  428. package/frontend/dist/js/tr-ChqMv5Q4.js +0 -2
  429. package/frontend/dist/js/ui-vendor-DohPFHDW.js +0 -177
  430. package/frontend/dist/js/uk-Cr51h_XQ.js +0 -2
  431. package/frontend/dist/js/useBaseQuery-BAOlhjar.js +0 -1
  432. package/frontend/dist/js/useQuery-CcRqxveh.js +0 -1
  433. package/frontend/dist/js/useTranslation-Cs6iTP4m.js +0 -1
  434. package/frontend/dist/js/utils-DmZD5uA3.js +0 -1
  435. package/frontend/dist/js/utils-vendor-Cbaj0BC5.js +0 -9
  436. package/frontend/dist/js/vi-D4OhoVMH.js +0 -2
  437. package/frontend/dist/js/xterm-DKl1QLiw.js +0 -7
  438. package/frontend/dist/js/zh-Bvau7hlR.js +0 -2
@@ -0,0 +1,514 @@
1
+ /*
2
+ * Libre WebUI
3
+ * Copyright (C) 2025 Kroonen AI, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import crypto from 'node:crypto';
18
+ import http from 'node:http';
19
+ import { getDatabase } from '../db.js';
20
+ import { createLogger } from '../utils/logger.js';
21
+ const logger = createLogger('services:work-preview-proxy');
22
+ export const WORK_PREVIEW_PROXY_PREFIX = '/api/work/previews';
23
+ const MAX_REWRITABLE_RESPONSE_BYTES = 8 * 1024 * 1024;
24
+ const TASK_ID_PATTERN = /^[A-Za-z0-9-]{1,100}$/;
25
+ const NONCE_PATTERN = /^[A-Za-z0-9_-]{22}$/;
26
+ const SIGNATURE_PATTERN = /^[A-Za-z0-9_-]{43}$/;
27
+ // Derive a domain-separated capability secret from JWT_SECRET when it exists.
28
+ // An unset JWT secret already makes sessions process-local; the random fallback
29
+ // gives preview capabilities the same restart semantics without importing the
30
+ // auth service (whose model singleton opens the database during module load).
31
+ const WORK_PREVIEW_SECRET = crypto
32
+ .createHash('sha256')
33
+ .update(`libre-work-preview:${process.env.JWT_SECRET || crypto.randomBytes(64).toString('hex')}`)
34
+ .digest('hex');
35
+ const HOP_BY_HOP_HEADERS = new Set([
36
+ 'connection',
37
+ 'keep-alive',
38
+ 'proxy-authenticate',
39
+ 'proxy-authorization',
40
+ 'te',
41
+ 'trailer',
42
+ 'transfer-encoding',
43
+ 'upgrade',
44
+ ]);
45
+ const PRIVATE_REQUEST_HEADERS = new Set([
46
+ 'authorization',
47
+ 'cookie',
48
+ 'host',
49
+ 'origin',
50
+ 'referer',
51
+ ]);
52
+ const PRIVATE_RESPONSE_HEADERS = new Set([
53
+ 'alt-svc',
54
+ 'authentication-info',
55
+ 'clear-site-data',
56
+ 'content-security-policy',
57
+ 'content-security-policy-report-only',
58
+ 'cross-origin-embedder-policy',
59
+ 'cross-origin-opener-policy',
60
+ 'cross-origin-resource-policy',
61
+ 'document-policy',
62
+ 'feature-policy',
63
+ 'nel',
64
+ 'origin-agent-cluster',
65
+ 'permissions-policy',
66
+ 'reporting-endpoints',
67
+ 'report-to',
68
+ 'set-cookie',
69
+ 'strict-transport-security',
70
+ 'www-authenticate',
71
+ 'x-frame-options',
72
+ 'x-permitted-cross-domain-policies',
73
+ ]);
74
+ const SAFE_WEBSOCKET_RESPONSE_HEADERS = new Set([
75
+ 'connection',
76
+ 'sec-websocket-accept',
77
+ 'sec-websocket-extensions',
78
+ 'sec-websocket-protocol',
79
+ 'upgrade',
80
+ ]);
81
+ const previewFrameAncestors = () => {
82
+ const ancestors = new Set(["'self'"]);
83
+ if (process.env.NODE_ENV !== 'production') {
84
+ ancestors.add('http://localhost:*');
85
+ ancestors.add('http://127.0.0.1:*');
86
+ ancestors.add('http://[::1]:*');
87
+ }
88
+ for (const candidate of (process.env.CORS_ORIGIN || '').split(',')) {
89
+ try {
90
+ const origin = new URL(candidate.trim());
91
+ if (origin.protocol === 'http:' || origin.protocol === 'https:') {
92
+ ancestors.add(origin.origin);
93
+ }
94
+ }
95
+ catch {
96
+ // Ignore wildcard and malformed CORS entries in a CSP source list.
97
+ }
98
+ }
99
+ return [...ancestors].join(' ');
100
+ };
101
+ const defaultPreviewLookup = taskId => getDatabase()
102
+ .prepare(`SELECT preview_status, preview_url
103
+ FROM work_tasks
104
+ WHERE id = ?`)
105
+ .get(taskId);
106
+ const previewUpstreamHost = () => {
107
+ const configured = (process.env.WORK_PREVIEW_BIND || '127.0.0.1').trim();
108
+ if (!configured || configured === '0.0.0.0')
109
+ return '127.0.0.1';
110
+ if (configured === '::' || configured === '[::]')
111
+ return '::1';
112
+ return configured.replace(/^\[|\]$/g, '');
113
+ };
114
+ const secureEqual = (left, right) => {
115
+ const leftBuffer = Buffer.from(left);
116
+ const rightBuffer = Buffer.from(right);
117
+ return (leftBuffer.length === rightBuffer.length &&
118
+ crypto.timingSafeEqual(leftBuffer, rightBuffer));
119
+ };
120
+ const escapeHtmlAttribute = (value) => value
121
+ .replace(/&/g, '&')
122
+ .replace(/"/g, '"')
123
+ .replace(/</g, '&lt;')
124
+ .replace(/>/g, '&gt;');
125
+ const formatHostForUrl = (host) => host.includes(':') && !host.startsWith('[') ? `[${host}]` : host;
126
+ const proxyBootstrap = (proxyBasePath) => {
127
+ const serializedBase = JSON.stringify(proxyBasePath);
128
+ return `<base href="${escapeHtmlAttribute(proxyBasePath)}" />
129
+ <script>(() => {
130
+ const proxyBase = ${serializedBase};
131
+ const rewrite = value => {
132
+ if (value == null) return value;
133
+ try {
134
+ const url = new URL(String(value), document.baseURI);
135
+ const proxyProtocol = url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'ws:' || url.protocol === 'wss:';
136
+ if (proxyProtocol && url.host === location.host && !url.pathname.startsWith(proxyBase)) {
137
+ url.pathname = proxyBase + url.pathname.replace(/^\\/+/, '');
138
+ return url.toString();
139
+ }
140
+ } catch {}
141
+ return value;
142
+ };
143
+
144
+ const nativeFetch = window.fetch.bind(window);
145
+ window.fetch = (input, init) => {
146
+ if (typeof input === 'string' || input instanceof URL) return nativeFetch(rewrite(input), init);
147
+ if (input instanceof Request) return nativeFetch(new Request(rewrite(input.url), input), init);
148
+ return nativeFetch(input, init);
149
+ };
150
+
151
+ const nativeOpen = XMLHttpRequest.prototype.open;
152
+ XMLHttpRequest.prototype.open = function(method, url, ...rest) {
153
+ return nativeOpen.call(this, method, rewrite(url), ...rest);
154
+ };
155
+
156
+ const NativeWebSocket = window.WebSocket;
157
+ function PreviewWebSocket(url, protocols) {
158
+ return protocols === undefined
159
+ ? new NativeWebSocket(rewrite(url))
160
+ : new NativeWebSocket(rewrite(url), protocols);
161
+ }
162
+ PreviewWebSocket.prototype = NativeWebSocket.prototype;
163
+ PreviewWebSocket.CONNECTING = NativeWebSocket.CONNECTING;
164
+ PreviewWebSocket.OPEN = NativeWebSocket.OPEN;
165
+ PreviewWebSocket.CLOSING = NativeWebSocket.CLOSING;
166
+ PreviewWebSocket.CLOSED = NativeWebSocket.CLOSED;
167
+ window.WebSocket = PreviewWebSocket;
168
+
169
+ if (window.EventSource) {
170
+ const NativeEventSource = window.EventSource;
171
+ function PreviewEventSource(url, options) {
172
+ return new NativeEventSource(rewrite(url), options);
173
+ }
174
+ PreviewEventSource.prototype = NativeEventSource.prototype;
175
+ window.EventSource = PreviewEventSource;
176
+ }
177
+
178
+ const nativeSetAttribute = Element.prototype.setAttribute;
179
+ Element.prototype.setAttribute = function(name, value) {
180
+ if (/^srcset$/i.test(name)) {
181
+ const sourceSet = String(value).split(',').map(candidate => {
182
+ const [url, ...descriptor] = candidate.trim().split(/\\s+/);
183
+ return [rewrite(url), ...descriptor].join(' ');
184
+ }).join(', ');
185
+ return nativeSetAttribute.call(this, name, sourceSet);
186
+ }
187
+ const urlAttribute = /^(?:src|href|action|formaction|poster|data)$/i.test(name);
188
+ return nativeSetAttribute.call(this, name, urlAttribute ? rewrite(value) : value);
189
+ };
190
+
191
+ for (const method of ['pushState', 'replaceState']) {
192
+ const nativeHistoryMethod = history[method].bind(history);
193
+ history[method] = (state, unused, url) => nativeHistoryMethod(state, unused, rewrite(url));
194
+ }
195
+ })();</script>`;
196
+ };
197
+ const rewriteQuotedRootPaths = (content, proxyBasePath) => content.replace(/(["'`])\/(?!\/)(?=[@A-Za-z0-9._~-])/g, `$1${proxyBasePath}`);
198
+ export const rewritePreviewText = (content, contentType, proxyBasePath) => {
199
+ const normalizedType = contentType.toLowerCase();
200
+ if (normalizedType.includes('text/html') ||
201
+ normalizedType.includes('application/xhtml+xml')) {
202
+ let rewritten = content.replace(/(\b(?:src|href|action|formaction|poster|data)\s*=\s*["'])\/(?!\/)/gi, `$1${proxyBasePath}`);
203
+ rewritten = rewritten.replace(/(\bsrcset\s*=\s*["'])([^"']*)(["'])/gi, (_match, open, sourceSet, close) => `${open}${sourceSet.replace(/(^|,\s*)\/(?!\/)/g, `$1${proxyBasePath}`)}${close}`);
204
+ rewritten = rewritten.replace(/(<script\b[^>]*>)([\s\S]*?)(<\/script\b[^>]*>)/gi, (_match, open, script, close) => `${open}${rewriteQuotedRootPaths(script, proxyBasePath)}${close}`);
205
+ rewritten = rewritten.replace(/(<style\b[^>]*>)([\s\S]*?)(<\/style\b[^>]*>)/gi, (_match, open, style, close) => `${open}${rewritePreviewText(style, 'text/css', proxyBasePath)}${close}`);
206
+ const injection = proxyBootstrap(proxyBasePath);
207
+ return /<head\b[^>]*>/i.test(rewritten)
208
+ ? rewritten.replace(/<head\b[^>]*>/i, match => `${match}\n${injection}`)
209
+ : `${injection}\n${rewritten}`;
210
+ }
211
+ if (normalizedType.includes('text/css')) {
212
+ return content
213
+ .replace(/(url\(\s*["']?)\/(?!\/)/gi, `$1${proxyBasePath}`)
214
+ .replace(/(@import\s+["'])\/(?!\/)/gi, `$1${proxyBasePath}`);
215
+ }
216
+ if (normalizedType.includes('javascript') ||
217
+ normalizedType.includes('ecmascript') ||
218
+ normalizedType.includes('typescript')) {
219
+ return rewriteQuotedRootPaths(content, proxyBasePath);
220
+ }
221
+ if (normalizedType.includes('image/svg+xml')) {
222
+ return content.replace(/(\b(?:src|href)\s*=\s*["'])\/(?!\/)/gi, `$1${proxyBasePath}`);
223
+ }
224
+ return content;
225
+ };
226
+ const canRewriteContentType = (contentType) => {
227
+ const normalized = contentType.toLowerCase();
228
+ return (normalized.includes('text/html') ||
229
+ normalized.includes('application/xhtml+xml') ||
230
+ normalized.includes('text/css') ||
231
+ normalized.includes('javascript') ||
232
+ normalized.includes('ecmascript') ||
233
+ normalized.includes('typescript') ||
234
+ normalized.includes('image/svg+xml'));
235
+ };
236
+ export class WorkPreviewProxyService {
237
+ constructor(secret = WORK_PREVIEW_SECRET, lookupPreview = defaultPreviewLookup, upstreamHost = previewUpstreamHost()) {
238
+ this.secret = secret;
239
+ this.lookupPreview = lookupPreview;
240
+ this.upstreamHost = upstreamHost;
241
+ this.handleHttp = (request, response) => {
242
+ const target = this.parseTarget(request.originalUrl || request.url);
243
+ if (!target) {
244
+ response.status(404).type('text/plain').send('Preview not found.');
245
+ return;
246
+ }
247
+ if (request.method === 'OPTIONS' &&
248
+ request.headers['access-control-request-method']) {
249
+ response.status(204);
250
+ response.setHeader('Access-Control-Allow-Origin', '*');
251
+ response.setHeader('Access-Control-Allow-Methods', String(request.headers['access-control-request-method']));
252
+ const requestedHeaders = request.headers['access-control-request-headers'];
253
+ if (requestedHeaders) {
254
+ response.setHeader('Access-Control-Allow-Headers', requestedHeaders);
255
+ }
256
+ response.setHeader('Access-Control-Max-Age', '600');
257
+ response.setHeader('Cache-Control', 'no-store');
258
+ response.end();
259
+ return;
260
+ }
261
+ const upstreamRequest = http.request({
262
+ hostname: this.upstreamHost,
263
+ port: target.port,
264
+ path: target.upstreamPath,
265
+ method: request.method,
266
+ headers: this.upstreamRequestHeaders(request.headers, target),
267
+ }, upstream => {
268
+ const contentType = String(upstream.headers['content-type'] || '');
269
+ const contentEncoding = String(upstream.headers['content-encoding'] || 'identity').toLowerCase();
270
+ const rewritten = request.method !== 'HEAD' &&
271
+ contentEncoding === 'identity' &&
272
+ canRewriteContentType(contentType);
273
+ if (!rewritten) {
274
+ this.applyResponseHeaders(response, upstream, target, false);
275
+ upstream.pipe(response);
276
+ return;
277
+ }
278
+ const chunks = [];
279
+ let totalBytes = 0;
280
+ upstream.on('data', (chunk) => {
281
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
282
+ totalBytes += buffer.length;
283
+ if (totalBytes > MAX_REWRITABLE_RESPONSE_BYTES) {
284
+ upstream.destroy(new Error('Work preview text response exceeded the proxy limit.'));
285
+ return;
286
+ }
287
+ chunks.push(buffer);
288
+ });
289
+ upstream.on('end', () => {
290
+ if (response.destroyed)
291
+ return;
292
+ this.applyResponseHeaders(response, upstream, target, true);
293
+ const body = rewritePreviewText(Buffer.concat(chunks).toString('utf8'), contentType, target.proxyBasePath);
294
+ response.send(body);
295
+ });
296
+ upstream.on('error', error => {
297
+ logger.warn('Work preview upstream response failed:', error.message);
298
+ if (!response.headersSent) {
299
+ response
300
+ .status(502)
301
+ .type('text/plain')
302
+ .send('Preview unavailable.');
303
+ }
304
+ else {
305
+ response.destroy(error);
306
+ }
307
+ });
308
+ });
309
+ upstreamRequest.on('error', error => {
310
+ logger.warn('Work preview proxy request failed:', error.message);
311
+ if (!response.headersSent) {
312
+ response.status(502).type('text/plain').send('Preview unavailable.');
313
+ }
314
+ else {
315
+ response.destroy(error);
316
+ }
317
+ });
318
+ request.on('aborted', () => upstreamRequest.destroy());
319
+ request.pipe(upstreamRequest);
320
+ };
321
+ }
322
+ signature(taskId, port, nonce) {
323
+ return crypto
324
+ .createHmac('sha256', this.secret)
325
+ .update(`${taskId}:${port}:${nonce}`)
326
+ .digest('base64url');
327
+ }
328
+ createPreviewUrl(taskId, port) {
329
+ if (!TASK_ID_PATTERN.test(taskId)) {
330
+ throw new Error('Work preview task ID is invalid.');
331
+ }
332
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
333
+ throw new Error('Work preview port is invalid.');
334
+ }
335
+ const nonce = crypto.randomBytes(16).toString('base64url');
336
+ const signature = this.signature(taskId, port, nonce);
337
+ return `${WORK_PREVIEW_PROXY_PREFIX}/${encodeURIComponent(taskId)}/${port}.${nonce}.${signature}/`;
338
+ }
339
+ parseTarget(rawUrl) {
340
+ let url;
341
+ try {
342
+ url = new URL(rawUrl, 'http://libre-preview.local');
343
+ }
344
+ catch {
345
+ return undefined;
346
+ }
347
+ if (!url.pathname.startsWith(`${WORK_PREVIEW_PROXY_PREFIX}/`)) {
348
+ return undefined;
349
+ }
350
+ const remainder = url.pathname.slice(WORK_PREVIEW_PROXY_PREFIX.length + 1);
351
+ const segments = remainder.split('/');
352
+ const encodedTaskId = segments.shift();
353
+ const credential = segments.shift();
354
+ if (!encodedTaskId || !credential)
355
+ return undefined;
356
+ let taskId;
357
+ try {
358
+ taskId = decodeURIComponent(encodedTaskId);
359
+ }
360
+ catch {
361
+ return undefined;
362
+ }
363
+ if (!TASK_ID_PATTERN.test(taskId))
364
+ return undefined;
365
+ const [rawPort = '', nonce = '', signature = '', ...extraCredentials] = credential.split('.');
366
+ if (extraCredentials.length > 0)
367
+ return undefined;
368
+ const port = Number(rawPort);
369
+ if (!Number.isInteger(port) ||
370
+ port < 1 ||
371
+ port > 65535 ||
372
+ !NONCE_PATTERN.test(nonce) ||
373
+ !SIGNATURE_PATTERN.test(signature)) {
374
+ return undefined;
375
+ }
376
+ const expectedSignature = this.signature(taskId, port, nonce);
377
+ if (!secureEqual(signature, expectedSignature))
378
+ return undefined;
379
+ const proxyBasePath = `${WORK_PREVIEW_PROXY_PREFIX}/${encodeURIComponent(taskId)}/${credential}/`;
380
+ if (!url.pathname.startsWith(proxyBasePath))
381
+ return undefined;
382
+ const record = this.lookupPreview(taskId);
383
+ if (record?.preview_status !== 'running' ||
384
+ record.preview_url !== proxyBasePath) {
385
+ return undefined;
386
+ }
387
+ const upstreamPath = `/${url.pathname.slice(proxyBasePath.length)}${url.search}`;
388
+ return { taskId, port, proxyBasePath, upstreamPath };
389
+ }
390
+ upstreamRequestHeaders(headers, target) {
391
+ const outgoing = {};
392
+ for (const [name, value] of Object.entries(headers)) {
393
+ if (value === undefined ||
394
+ HOP_BY_HOP_HEADERS.has(name) ||
395
+ PRIVATE_REQUEST_HEADERS.has(name) ||
396
+ name.startsWith('cf-') ||
397
+ name.startsWith('x-forwarded-')) {
398
+ continue;
399
+ }
400
+ outgoing[name] = value;
401
+ }
402
+ outgoing.host = `${formatHostForUrl(this.upstreamHost)}:${target.port}`;
403
+ outgoing['accept-encoding'] = 'identity';
404
+ if (headers.origin) {
405
+ outgoing.origin = `http://${formatHostForUrl(this.upstreamHost)}:${target.port}`;
406
+ }
407
+ return outgoing;
408
+ }
409
+ rewriteLocation(value, target) {
410
+ try {
411
+ const location = new URL(value, `http://${formatHostForUrl(this.upstreamHost)}:${target.port}`);
412
+ if (location.hostname.replace(/^\[|\]$/g, '') === this.upstreamHost &&
413
+ Number(location.port || 80) === target.port) {
414
+ return `${target.proxyBasePath}${location.pathname.replace(/^\/+/, '')}${location.search}${location.hash}`;
415
+ }
416
+ }
417
+ catch {
418
+ // Preserve malformed upstream locations rather than creating a new URL.
419
+ }
420
+ return value;
421
+ }
422
+ applyResponseHeaders(response, upstream, target, rewritten) {
423
+ response.status(upstream.statusCode || 502);
424
+ for (const [name, value] of Object.entries(upstream.headers)) {
425
+ if (value === undefined ||
426
+ HOP_BY_HOP_HEADERS.has(name) ||
427
+ PRIVATE_RESPONSE_HEADERS.has(name) ||
428
+ name.startsWith('access-control-') ||
429
+ (rewritten &&
430
+ (name === 'content-length' ||
431
+ name === 'content-encoding' ||
432
+ name === 'etag'))) {
433
+ continue;
434
+ }
435
+ response.setHeader(name, name === 'location' && typeof value === 'string'
436
+ ? this.rewriteLocation(value, target)
437
+ : value);
438
+ }
439
+ response.setHeader('Cache-Control', 'no-store');
440
+ // A sandboxed preview has an opaque browser origin. Wildcard CORS lets its
441
+ // modules and requests reach only this uncredentialed capability URL.
442
+ response.setHeader('Access-Control-Allow-Origin', '*');
443
+ response.setHeader('Referrer-Policy', 'no-referrer');
444
+ response.setHeader('X-Content-Type-Options', 'nosniff');
445
+ response.setHeader('Permissions-Policy', 'camera=(), microphone=(), geolocation=(), payment=(), usb=(), serial=(), bluetooth=()');
446
+ const contentType = String(upstream.headers['content-type'] || '');
447
+ if (contentType.toLowerCase().includes('text/html') ||
448
+ contentType.toLowerCase().includes('application/xhtml+xml')) {
449
+ response.setHeader('Content-Security-Policy', `sandbox allow-scripts allow-forms allow-modals allow-downloads; frame-ancestors ${previewFrameAncestors()}`);
450
+ }
451
+ }
452
+ tryHandleUpgrade(request, socket, head) {
453
+ const target = this.parseTarget(request.url || '');
454
+ if (!target) {
455
+ if ((request.url || '').startsWith(`${WORK_PREVIEW_PROXY_PREFIX}/`)) {
456
+ socket.end('HTTP/1.1 404 Not Found\r\nConnection: close\r\n\r\n');
457
+ return true;
458
+ }
459
+ return false;
460
+ }
461
+ const headers = this.upstreamRequestHeaders(request.headers, target);
462
+ headers.connection = 'Upgrade';
463
+ headers.upgrade = request.headers.upgrade || 'websocket';
464
+ const upstreamRequest = http.request({
465
+ hostname: this.upstreamHost,
466
+ port: target.port,
467
+ path: target.upstreamPath,
468
+ method: request.method,
469
+ headers,
470
+ });
471
+ socket.once('error', error => {
472
+ logger.debug('Work preview client WebSocket closed with an error:', error);
473
+ });
474
+ upstreamRequest.on('upgrade', (upstream, upstreamSocket, upstreamHead) => {
475
+ const statusLine = `HTTP/${upstream.httpVersion} ${upstream.statusCode || 101} ${upstream.statusMessage || 'Switching Protocols'}\r\n`;
476
+ const headerLines = [];
477
+ for (let index = 0; index < upstream.rawHeaders.length; index += 2) {
478
+ const name = upstream.rawHeaders[index];
479
+ const value = upstream.rawHeaders[index + 1];
480
+ if (!name || !SAFE_WEBSOCKET_RESPONSE_HEADERS.has(name.toLowerCase())) {
481
+ continue;
482
+ }
483
+ headerLines.push(`${name}: ${value}`);
484
+ }
485
+ socket.write(`${statusLine}${headerLines.join('\r\n')}\r\n\r\n`);
486
+ if (upstreamHead.length > 0)
487
+ socket.write(upstreamHead);
488
+ if (head.length > 0)
489
+ upstreamSocket.write(head);
490
+ upstreamSocket.once('error', error => {
491
+ logger.debug('Work preview upstream WebSocket closed with an error:', error);
492
+ socket.destroy();
493
+ });
494
+ socket.once('close', () => upstreamSocket.destroy());
495
+ upstreamSocket.pipe(socket);
496
+ socket.pipe(upstreamSocket);
497
+ });
498
+ upstreamRequest.on('response', upstream => {
499
+ upstream.resume();
500
+ socket.end(`HTTP/1.1 ${upstream.statusCode || 502} ${upstream.statusMessage || 'Upgrade Failed'}\r\nConnection: close\r\n\r\n`);
501
+ });
502
+ upstreamRequest.on('error', error => {
503
+ logger.warn('Work preview WebSocket proxy failed:', error.message);
504
+ if (!socket.destroyed) {
505
+ socket.end('HTTP/1.1 502 Bad Gateway\r\nConnection: close\r\n\r\n');
506
+ }
507
+ });
508
+ upstreamRequest.end();
509
+ return true;
510
+ }
511
+ }
512
+ export const workPreviewProxyService = new WorkPreviewProxyService();
513
+ export default workPreviewProxyService;
514
+ //# sourceMappingURL=workPreviewProxyService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workPreviewProxyService.js","sourceRoot":"","sources":["../../src/services/workPreviewProxyService.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
- import { WorkFileEntry, WorkTaskRecord } from '../types/work.js';
1
+ import { WorkFileEntry, WorkGitDiff, WorkGitStatus, WorkTaskRecord } from '../types/work.js';
2
2
  export declare const WORK_RUNTIME_DEFAULTS: {
3
- readonly image: "node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3";
4
- readonly dockerCommand: "docker";
3
+ readonly image: 'node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3';
4
+ readonly dockerCommand: 'docker';
5
5
  readonly commandTimeoutMs: 120000;
6
6
  readonly maxOutputChars: 50000;
7
7
  readonly maxAgentRounds: 48;
8
- readonly memoryLimit: "2g";
9
- readonly cpuLimit: "2";
8
+ readonly memoryLimit: '2g';
9
+ readonly cpuLimit: '2';
10
10
  readonly pidsLimit: 256;
11
11
  readonly previewPort: 4173;
12
- readonly previewBind: "127.0.0.1";
13
- readonly networkName: "libre-webui-work";
12
+ readonly previewBind: '127.0.0.1';
13
+ readonly networkName: 'libre-webui-work';
14
14
  };
15
15
  export declare const WORK_RUNTIME_ADMISSION_DEFAULTS: {
16
16
  readonly maxActiveRuntimesGlobal: 3;
@@ -128,6 +128,16 @@ export declare class WorkRuntimeService {
128
128
  updatedAt: number;
129
129
  modifiedAt: number;
130
130
  }>;
131
+ getGitStatus(task: WorkTaskRecord): Promise<WorkGitStatus>;
132
+ getGitDiff(task: WorkTaskRecord, requestedPath?: string): Promise<WorkGitDiff>;
133
+ initializeGit(task: WorkTaskRecord): Promise<WorkGitStatus>;
134
+ stageGitPaths(task: WorkTaskRecord, requestedPaths: string[]): Promise<WorkGitStatus>;
135
+ commitGit(task: WorkTaskRecord, message: string, identity: {
136
+ name: string;
137
+ email: string;
138
+ }): Promise<WorkGitStatus>;
139
+ createGitBranch(task: WorkTaskRecord, requestedName: string): Promise<WorkGitStatus>;
140
+ switchGitBranch(task: WorkTaskRecord, requestedName: string): Promise<WorkGitStatus>;
131
141
  writeFile(task: WorkTaskRecord, requestedPath: string, content: string, expectedUpdatedAt?: number): Promise<{
132
142
  path: string;
133
143
  content: string;
@@ -178,6 +188,17 @@ export declare class WorkRuntimeService {
178
188
  private assertTaskStillOwned;
179
189
  private assertCurrentNetworkPolicy;
180
190
  private withLifecycleLock;
191
+ private withGitMutation;
192
+ private assertGitMutationIdle;
193
+ private loadGitStatus;
194
+ private probeGitRepository;
195
+ private requireGitRepository;
196
+ private assertNoExecutableGitFilters;
197
+ private requireValidGitBranch;
198
+ private requireGitSuccess;
199
+ private throwGitFailure;
200
+ private assertSuccessfulHelperCommand;
201
+ private execGit;
181
202
  private exec;
182
203
  private docker;
183
204
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workRuntimeService.d.ts","sourceRoot":"","sources":["../../src/services/workRuntimeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workRuntimeService.d.ts","sourceRoot":"","sources":["../../src/services/workRuntimeService.ts"],"names":[],"mappings":"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"}