libre-webui 0.27.0 → 0.28.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 (311) hide show
  1. package/README.md +57 -29
  2. package/backend/dist/persistence/postgresAutomationWorkTargetMigration.d.ts +9 -0
  3. package/backend/dist/persistence/postgresAutomationWorkTargetMigration.d.ts.map +1 -0
  4. package/backend/dist/persistence/postgresAutomationWorkTargetMigration.js +44 -0
  5. package/backend/dist/persistence/postgresAutomationWorkTargetMigration.js.map +1 -0
  6. package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts.map +1 -1
  7. package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js +4 -4
  8. package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js.map +1 -1
  9. package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
  10. package/backend/dist/persistence/postgresMigrationRegistry.js +6 -0
  11. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
  12. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
  13. package/backend/dist/persistence/postgresResourceRepositories.js +17 -4
  14. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  15. package/backend/dist/persistence/postgresSecurityRepositories.d.ts.map +1 -1
  16. package/backend/dist/persistence/postgresSecurityRepositories.js +4 -0
  17. package/backend/dist/persistence/postgresSecurityRepositories.js.map +1 -1
  18. package/backend/dist/persistence/postgresWorkComputerMigration.d.ts +8 -0
  19. package/backend/dist/persistence/postgresWorkComputerMigration.d.ts.map +1 -0
  20. package/backend/dist/persistence/postgresWorkComputerMigration.js +37 -0
  21. package/backend/dist/persistence/postgresWorkComputerMigration.js.map +1 -0
  22. package/backend/dist/persistence/postgresWorkTakeoverMigration.d.ts +9 -0
  23. package/backend/dist/persistence/postgresWorkTakeoverMigration.d.ts.map +1 -0
  24. package/backend/dist/persistence/postgresWorkTakeoverMigration.js +38 -0
  25. package/backend/dist/persistence/postgresWorkTakeoverMigration.js.map +1 -0
  26. package/backend/dist/persistence/resourceTypes.d.ts +5 -0
  27. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
  28. package/backend/dist/persistence/resourceTypes.js.map +1 -1
  29. package/backend/dist/persistence/securityTypes.d.ts +1 -0
  30. package/backend/dist/persistence/securityTypes.d.ts.map +1 -1
  31. package/backend/dist/persistence/sqliteMigrations.d.ts +3 -0
  32. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
  33. package/backend/dist/persistence/sqliteMigrations.js +73 -0
  34. package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
  35. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
  36. package/backend/dist/persistence/sqliteResourceRepositories.js +17 -7
  37. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  38. package/backend/dist/persistence/sqliteSecurityRepositories.d.ts.map +1 -1
  39. package/backend/dist/persistence/sqliteSecurityRepositories.js +6 -0
  40. package/backend/dist/persistence/sqliteSecurityRepositories.js.map +1 -1
  41. package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
  42. package/backend/dist/platform/jobs/domainJobHandlers.js +87 -0
  43. package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
  44. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -1
  45. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +7 -3
  46. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -1
  47. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -1
  48. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +8 -4
  49. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -1
  50. package/backend/dist/platform/workPersistence/types.d.ts +2 -0
  51. package/backend/dist/platform/workPersistence/types.d.ts.map +1 -1
  52. package/backend/dist/platform/workPersistence/types.js.map +1 -1
  53. package/backend/dist/routes/auth.d.ts.map +1 -1
  54. package/backend/dist/routes/auth.js +8 -4
  55. package/backend/dist/routes/auth.js.map +1 -1
  56. package/backend/dist/routes/automations.d.ts.map +1 -1
  57. package/backend/dist/routes/automations.js +5 -0
  58. package/backend/dist/routes/automations.js.map +1 -1
  59. package/backend/dist/routes/work.d.ts.map +1 -1
  60. package/backend/dist/routes/work.js +205 -1
  61. package/backend/dist/routes/work.js.map +1 -1
  62. package/backend/dist/services/authService.d.ts +2 -0
  63. package/backend/dist/services/authService.d.ts.map +1 -1
  64. package/backend/dist/services/authService.js +20 -0
  65. package/backend/dist/services/authService.js.map +1 -1
  66. package/backend/dist/services/automationSchedulerService.d.ts.map +1 -1
  67. package/backend/dist/services/automationSchedulerService.js +24 -0
  68. package/backend/dist/services/automationSchedulerService.js.map +1 -1
  69. package/backend/dist/services/automationService.d.ts +4 -1
  70. package/backend/dist/services/automationService.d.ts.map +1 -1
  71. package/backend/dist/services/automationService.js +27 -0
  72. package/backend/dist/services/automationService.js.map +1 -1
  73. package/backend/dist/services/mfaService.d.ts.map +1 -1
  74. package/backend/dist/services/mfaService.js +2 -3
  75. package/backend/dist/services/mfaService.js.map +1 -1
  76. package/backend/dist/services/webauthnService.d.ts.map +1 -1
  77. package/backend/dist/services/webauthnService.js +1 -0
  78. package/backend/dist/services/webauthnService.js.map +1 -1
  79. package/backend/dist/services/websocketTicketService.d.ts +1 -1
  80. package/backend/dist/services/websocketTicketService.d.ts.map +1 -1
  81. package/backend/dist/services/websocketTicketService.js +3 -1
  82. package/backend/dist/services/websocketTicketService.js.map +1 -1
  83. package/backend/dist/services/workAgentGuidance.d.ts +14 -0
  84. package/backend/dist/services/workAgentGuidance.d.ts.map +1 -1
  85. package/backend/dist/services/workAgentGuidance.js +38 -2
  86. package/backend/dist/services/workAgentGuidance.js.map +1 -1
  87. package/backend/dist/services/workAgentService.d.ts +9 -0
  88. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  89. package/backend/dist/services/workAgentService.js +503 -13
  90. package/backend/dist/services/workAgentService.js.map +1 -1
  91. package/backend/dist/services/workComputerSetupService.d.ts +33 -0
  92. package/backend/dist/services/workComputerSetupService.d.ts.map +1 -0
  93. package/backend/dist/services/workComputerSetupService.js +164 -0
  94. package/backend/dist/services/workComputerSetupService.js.map +1 -0
  95. package/backend/dist/services/workComputerTeachService.d.ts +105 -0
  96. package/backend/dist/services/workComputerTeachService.d.ts.map +1 -0
  97. package/backend/dist/services/workComputerTeachService.js +513 -0
  98. package/backend/dist/services/workComputerTeachService.js.map +1 -0
  99. package/backend/dist/services/workKubernetesDriver.d.ts +8 -0
  100. package/backend/dist/services/workKubernetesDriver.d.ts.map +1 -1
  101. package/backend/dist/services/workKubernetesDriver.js +22 -0
  102. package/backend/dist/services/workKubernetesDriver.js.map +1 -1
  103. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  104. package/backend/dist/services/workModelProviderService.js +102 -8
  105. package/backend/dist/services/workModelProviderService.js.map +1 -1
  106. package/backend/dist/services/workPolicyService.d.ts +8 -0
  107. package/backend/dist/services/workPolicyService.d.ts.map +1 -1
  108. package/backend/dist/services/workPolicyService.js +25 -0
  109. package/backend/dist/services/workPolicyService.js.map +1 -1
  110. package/backend/dist/services/workRuntimeDriver.d.ts +32 -0
  111. package/backend/dist/services/workRuntimeDriver.d.ts.map +1 -1
  112. package/backend/dist/services/workRuntimeDriver.js +54 -8
  113. package/backend/dist/services/workRuntimeDriver.js.map +1 -1
  114. package/backend/dist/services/workRuntimeService.d.ts +212 -1
  115. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  116. package/backend/dist/services/workRuntimeService.js +1184 -9
  117. package/backend/dist/services/workRuntimeService.js.map +1 -1
  118. package/backend/dist/services/workRuntimeShared.d.ts +11 -1
  119. package/backend/dist/services/workRuntimeShared.d.ts.map +1 -1
  120. package/backend/dist/services/workRuntimeShared.js +24 -1
  121. package/backend/dist/services/workRuntimeShared.js.map +1 -1
  122. package/backend/dist/services/workScreenControlService.d.ts +60 -0
  123. package/backend/dist/services/workScreenControlService.d.ts.map +1 -0
  124. package/backend/dist/services/workScreenControlService.js +201 -0
  125. package/backend/dist/services/workScreenControlService.js.map +1 -0
  126. package/backend/dist/services/workTaskService.d.ts +11 -0
  127. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  128. package/backend/dist/services/workTaskService.js +31 -0
  129. package/backend/dist/services/workTaskService.js.map +1 -1
  130. package/backend/dist/types/index.d.ts +7 -0
  131. package/backend/dist/types/index.d.ts.map +1 -1
  132. package/backend/dist/types/index.js.map +1 -1
  133. package/backend/dist/types/work.d.ts +13 -0
  134. package/backend/dist/types/work.d.ts.map +1 -1
  135. package/backend/dist/utils/webauthn.d.ts +6 -2
  136. package/backend/dist/utils/webauthn.d.ts.map +1 -1
  137. package/backend/dist/utils/webauthn.js +32 -3
  138. package/backend/dist/utils/webauthn.js.map +1 -1
  139. package/backend/dist/websocketServer.d.ts.map +1 -1
  140. package/backend/dist/websocketServer.js +9 -0
  141. package/backend/dist/websocketServer.js.map +1 -1
  142. package/backend/dist/workScreenServer.d.ts +12 -0
  143. package/backend/dist/workScreenServer.d.ts.map +1 -0
  144. package/backend/dist/workScreenServer.js +291 -0
  145. package/backend/dist/workScreenServer.js.map +1 -0
  146. package/backend/package.json +1 -1
  147. package/deploy/work-computer/Dockerfile +48 -0
  148. package/deploy/work-computer/README.md +93 -0
  149. package/deploy/work-computer/fonts/fonts.css +335 -0
  150. package/deploy/work-computer/fonts/v16-aFTR7PB1QTsUX8KYvumzEY2tbYf-Vlh3uA.woff2 +0 -0
  151. package/deploy/work-computer/fonts/v16-aFTR7PB1QTsUX8KYvumzEYOtbYf-Vlg.woff2 +0 -0
  152. package/deploy/work-computer/fonts/v16-aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2 +0 -0
  153. package/deploy/work-computer/fonts/v16-aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2 +0 -0
  154. package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2 +0 -0
  155. package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2 +0 -0
  156. package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggexSvfedN4.woff2 +0 -0
  157. package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2 +0 -0
  158. package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2 +0 -0
  159. package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2 +0 -0
  160. package/deploy/work-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2 +0 -0
  161. package/deploy/work-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2 +0 -0
  162. package/deploy/work-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2 +0 -0
  163. package/deploy/work-computer/start-computer.sh +155 -0
  164. package/deploy/work-computer/start-page.html +251 -0
  165. package/deploy/work-computer/tint2rc +76 -0
  166. package/deploy/work-computer/wallpaper.png +0 -0
  167. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  168. package/frontend/dist/assets/index-DGy6mo0B.js +33 -0
  169. package/frontend/dist/assets/index-DqLJKWF-.css +1 -0
  170. package/frontend/dist/index.html +31 -16
  171. package/frontend/dist/js/{ArtifactContainer-C9zNtCay.js → ArtifactContainer-DvIMxleC.js} +1 -1
  172. package/frontend/dist/js/{ArtifactDemoPage-C-EBFBCt.js → ArtifactDemoPage-BqYskFqc.js} +1 -1
  173. package/frontend/dist/js/{ArtifactSandboxFrame-CTA1j_d1.js → ArtifactSandboxFrame-9wuufHn6.js} +1 -1
  174. package/frontend/dist/js/ArtifactSlideOutPanel-DXESMtPh.js +1 -0
  175. package/frontend/dist/js/AutomationsPage-DByxhIKj.js +1 -0
  176. package/frontend/dist/js/AvatarUpload-DnCGQ46o.js +1 -0
  177. package/frontend/dist/js/{Button-C0r3J9G_.js → Button-CpobxJ2P.js} +1 -1
  178. package/frontend/dist/js/CalendarPage-JywVP-9y.js +1 -0
  179. package/frontend/dist/js/ChannelsPage-B31rcARd.js +1 -0
  180. package/frontend/dist/js/ChatPage-CHXJY8m3.js +14 -0
  181. package/frontend/dist/js/{EvaluationsPage-FWIJu2fI.js → EvaluationsPage-CcmB5wdF.js} +1 -1
  182. package/frontend/dist/js/FirstTimeSetup-DDU7SowM.js +1 -0
  183. package/frontend/dist/js/GalleryPage-XfX_7iCf.js +1 -0
  184. package/frontend/dist/js/HomePage-DAZAkoAV.js +1 -0
  185. package/frontend/dist/js/LibreClawPage-De0gZmbF.js +1 -0
  186. package/frontend/dist/js/Logo-yKM43xGa.js +1 -0
  187. package/frontend/dist/js/LogoMark-PmpKQOre.js +1 -0
  188. package/frontend/dist/js/{ModelManagerModals-BY5TK38_.js → ModelManagerModals-hz2cZZ4a.js} +1 -1
  189. package/frontend/dist/js/ModelSelector-BoFehQy-.js +1 -0
  190. package/frontend/dist/js/NotesPage-BGPI3gG6.js +3 -0
  191. package/frontend/dist/js/OptimizedSyntaxHighlighter-DrejdNUm.js +1 -0
  192. package/frontend/dist/js/OptimizedSyntaxHighlighter-hNqZPLiB.js +1 -0
  193. package/frontend/dist/js/PasswordStrengthMeter-RwModpZ1.js +1 -0
  194. package/frontend/dist/js/PersonasPage-BkNRD2wO.js +13 -0
  195. package/frontend/dist/js/PluginUsagePage-Cqt7V2SQ.js +1 -0
  196. package/frontend/dist/js/RichMessageContent-B2QSyX-l.js +1 -0
  197. package/frontend/dist/js/RichMessageContent-CYEhT6uU.js +3 -0
  198. package/frontend/dist/js/SettingsModal-IbIvVyss.js +19 -0
  199. package/frontend/dist/js/{SettingsToggle-BIVyfGjl.js → SettingsToggle-3GxA96E0.js} +1 -1
  200. package/frontend/dist/js/ShareDialog-BoE4OVhV.js +1 -0
  201. package/frontend/dist/js/{SystemPage-BT07dTMT.js → SystemPage-B5ecz5H3.js} +1 -1
  202. package/frontend/dist/js/TurnstileWidget-DHU9IUM1.js +1 -0
  203. package/frontend/dist/js/UserManagementPage-C0VUfbMk.js +1 -0
  204. package/frontend/dist/js/WorkPage-EweYI5Dx.js +74 -0
  205. package/frontend/dist/js/api-Bbh2AHHN.js +1 -0
  206. package/frontend/dist/js/api-F0CnlVH8.js +14 -0
  207. package/frontend/dist/js/appNavigation-DqV69ohR.js +1 -0
  208. package/frontend/dist/js/appStore-SLLBamo2.js +2 -0
  209. package/frontend/dist/js/appVersion-46bF9UkF.js +1 -0
  210. package/frontend/dist/js/ar-C4yo7x5J.js +2 -0
  211. package/frontend/dist/js/authStore-CcfL8T6T.js +1 -0
  212. package/frontend/dist/js/authStore-DlSQ1TcP.js +4 -0
  213. package/frontend/dist/js/axios-_ZpUYd3e.js +1 -0
  214. package/frontend/dist/js/bn-BeZ6d2qF.js +2 -0
  215. package/frontend/dist/js/chatStore-DI79tEJ-.js +3 -0
  216. package/frontend/dist/js/classPrivateMethodInitSpec-B31Q4d2M.js +1 -0
  217. package/frontend/dist/js/{config-BqZ5304Q.js → config-0QgGZCrI.js} +1 -1
  218. package/frontend/dist/js/cs-9K5LILI5.js +2 -0
  219. package/frontend/dist/js/da-BWbBhLK8.js +2 -0
  220. package/frontend/dist/js/de-BXD9t2uY.js +2 -0
  221. package/frontend/dist/js/es-Dv4wZKlU.js +2 -0
  222. package/frontend/dist/js/{estree-DPkpBuOU.js → estree-WDwviHUZ.js} +1 -1
  223. package/frontend/dist/js/evaluationsApi-wjf0nh5J.js +1 -0
  224. package/frontend/dist/js/fr-BkXGyEei.js +2 -0
  225. package/frontend/dist/js/hi-BS1ldbWk.js +2 -0
  226. package/frontend/dist/js/{html-BpGUXG8E.js → html-Cj0HNcRt.js} +1 -1
  227. package/frontend/dist/js/id-Cr1njx5M.js +2 -0
  228. package/frontend/dist/js/is-BqpNCtDd.js +2 -0
  229. package/frontend/dist/js/{it-AxEMG8Jg.js → it-Dp-iwH27.js} +1 -1
  230. package/frontend/dist/js/ja-_e4v_6Mn.js +2 -0
  231. package/frontend/dist/js/ko-CjXf2pIX.js +2 -0
  232. package/frontend/dist/js/{logger-DSXjF4ye.js → logger-CpCQz3Vi.js} +1 -1
  233. package/frontend/dist/js/{markdown-DCBRWJSK.js → markdown-DTahdtRF.js} +1 -1
  234. package/frontend/dist/js/{messageCodeStyles-BQwf7sSz.js → messageCodeStyles-COJFoq4P.js} +2 -2
  235. package/frontend/dist/js/{ms-BhEwb4b7.js → ms-xpn-zACj.js} +1 -1
  236. package/frontend/dist/js/nl-Baf0a2X0.js +2 -0
  237. package/frontend/dist/js/pl-BEOTrcUv.js +2 -0
  238. package/frontend/dist/js/pt-B5FUaihM.js +2 -0
  239. package/frontend/dist/js/rfb-bJaPz33m.js +5 -0
  240. package/frontend/dist/js/ru-BjzgMmkJ.js +2 -0
  241. package/frontend/dist/js/{standalone-BFrK0R2A.js → standalone-C04jT26m.js} +1 -1
  242. package/frontend/dist/js/sv-DDX_gP1z.js +2 -0
  243. package/frontend/dist/js/teamEventStream-CgUkgjFC.js +8 -0
  244. package/frontend/dist/js/{th-DVnW2yyh.js → th-BXr3KovE.js} +1 -1
  245. package/frontend/dist/js/tr-CdqxHEM8.js +2 -0
  246. package/frontend/dist/js/ttsBatching-BfhNT3c5.js +2 -0
  247. package/frontend/dist/js/{typescript-DYVyvmm_.js → typescript-FtGI7Y5P.js} +1 -1
  248. package/frontend/dist/js/ui-DFa2W4QC.js +2 -0
  249. package/frontend/dist/js/ui-vendor-CRZXLK0Q.js +177 -0
  250. package/frontend/dist/js/{uk-BNPKIZga.js → uk-CotKDP2Q.js} +1 -1
  251. package/frontend/dist/js/useChat-BawGm7ua.js +10 -0
  252. package/frontend/dist/js/useQuery-BboI5V5G.js +1 -0
  253. package/frontend/dist/js/{useTranslation-5b5UhAc9.js → useTranslation-D7uLySn1.js} +1 -1
  254. package/frontend/dist/js/{utils-BGrdX9ie.js → utils-sD-qFh8D.js} +1 -1
  255. package/frontend/dist/js/utils-vendor-DTLgmsuc.js +9 -0
  256. package/frontend/dist/js/vi-F2NC1HaJ.js +2 -0
  257. package/frontend/dist/js/webauthnClient-CPSq528Q.js +1 -0
  258. package/frontend/dist/js/workApi-8mBuh_-J.js +6 -0
  259. package/frontend/dist/js/workApi-DJtLOslf.js +1 -0
  260. package/frontend/dist/js/workStatus-CcO9Fg41.js +1 -0
  261. package/frontend/dist/js/zh-DZ-kpEEA.js +2 -0
  262. package/package.json +4 -2
  263. package/frontend/dist/assets/index-DBAf_VaS.js +0 -47
  264. package/frontend/dist/assets/index-kn_Axjts.css +0 -1
  265. package/frontend/dist/js/ArtifactSlideOutPanel-BOENbOiv.js +0 -1
  266. package/frontend/dist/js/AutomationsPage-C58MQ4te.js +0 -1
  267. package/frontend/dist/js/CalendarPage-BcdAZ292.js +0 -1
  268. package/frontend/dist/js/ChannelsPage-DPr9Yajs.js +0 -1
  269. package/frontend/dist/js/ChatPage-DsbB748s.js +0 -14
  270. package/frontend/dist/js/FirstTimeSetup-Cy-w6xko.js +0 -1
  271. package/frontend/dist/js/GalleryPage-DDAtxM-x.js +0 -1
  272. package/frontend/dist/js/HomePage-DLKwmE7n.js +0 -1
  273. package/frontend/dist/js/LibreClawPage-vKOj-9w9.js +0 -1
  274. package/frontend/dist/js/ModelSelector-CoCS6MZ9.js +0 -1
  275. package/frontend/dist/js/NotesPage-BElIpXgA.js +0 -3
  276. package/frontend/dist/js/OptimizedSyntaxHighlighter-xgyE3dRA.js +0 -1
  277. package/frontend/dist/js/PersonasPage-P40jVbfU.js +0 -13
  278. package/frontend/dist/js/PluginUsagePage-CKUEPCJN.js +0 -1
  279. package/frontend/dist/js/RichMessageContent-Bm2WaEGi.js +0 -3
  280. package/frontend/dist/js/SettingsModal-DxSGzx9A.js +0 -19
  281. package/frontend/dist/js/UserManagementPage-B9Vz5cm3.js +0 -1
  282. package/frontend/dist/js/WorkPage-qoN_e_jK.js +0 -6
  283. package/frontend/dist/js/api-D7Ff5M2Q.js +0 -14
  284. package/frontend/dist/js/appStore-DmV5wqDz.js +0 -2
  285. package/frontend/dist/js/ar-YHHTVP8f.js +0 -2
  286. package/frontend/dist/js/authStore-BYW8-kP6.js +0 -4
  287. package/frontend/dist/js/bn-C8VTxBVl.js +0 -2
  288. package/frontend/dist/js/chatStore-D-NTlArO.js +0 -3
  289. package/frontend/dist/js/cs-CCngB5fC.js +0 -2
  290. package/frontend/dist/js/da-CM2PP2ma.js +0 -2
  291. package/frontend/dist/js/de-BqVkD-dw.js +0 -2
  292. package/frontend/dist/js/es-BtWsWBjZ.js +0 -2
  293. package/frontend/dist/js/evaluationsApi-Dnf2dTd-.js +0 -1
  294. package/frontend/dist/js/fr-C68w9abT.js +0 -2
  295. package/frontend/dist/js/hi-DtBlcyXZ.js +0 -2
  296. package/frontend/dist/js/id-BWzIu8tn.js +0 -2
  297. package/frontend/dist/js/is-yeFwu4dJ.js +0 -2
  298. package/frontend/dist/js/ja-B-VyokB8.js +0 -2
  299. package/frontend/dist/js/ko-CvwzYr9k.js +0 -2
  300. package/frontend/dist/js/nl-Dq-QRx1L.js +0 -2
  301. package/frontend/dist/js/pl-BNEy8mQm.js +0 -2
  302. package/frontend/dist/js/pt-_3Jl3FdY.js +0 -2
  303. package/frontend/dist/js/ru-IhQiJ8ta.js +0 -2
  304. package/frontend/dist/js/sv-DWunXUNz.js +0 -2
  305. package/frontend/dist/js/tr-Do8CFmhR.js +0 -2
  306. package/frontend/dist/js/ui-db9meqAB.js +0 -2
  307. package/frontend/dist/js/ui-vendor-C0DZ8-Cm.js +0 -177
  308. package/frontend/dist/js/utils-vendor-9bQ62WeD.js +0 -9
  309. package/frontend/dist/js/vi-CZMFo9je.js +0 -2
  310. package/frontend/dist/js/workApi-CcprMH_1.js +0 -6
  311. package/frontend/dist/js/zh-Pg0881v0.js +0 -2
@@ -0,0 +1,335 @@
1
+ /* Latin faces, every locale. Generated by scripts/fetch-fonts.mjs — do not edit by hand.
2
+ Self-hosted so no page load contacts a third-party font host. */
3
+ /* latin-ext */
4
+ @font-face {
5
+ font-family: 'DM Mono';
6
+ font-style: normal;
7
+ font-weight: 400;
8
+ font-display: swap;
9
+ src: url(file:///usr/local/share/libre-computer/fonts/v16-aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2) format('woff2');
10
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
11
+ }
12
+ /* latin */
13
+ @font-face {
14
+ font-family: 'DM Mono';
15
+ font-style: normal;
16
+ font-weight: 400;
17
+ font-display: swap;
18
+ src: url(file:///usr/local/share/libre-computer/fonts/v16-aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2) format('woff2');
19
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
20
+ }
21
+ /* latin-ext */
22
+ @font-face {
23
+ font-family: 'DM Mono';
24
+ font-style: normal;
25
+ font-weight: 500;
26
+ font-display: swap;
27
+ src: url(file:///usr/local/share/libre-computer/fonts/v16-aFTR7PB1QTsUX8KYvumzEY2tbYf-Vlh3uA.woff2) format('woff2');
28
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
29
+ }
30
+ /* latin */
31
+ @font-face {
32
+ font-family: 'DM Mono';
33
+ font-style: normal;
34
+ font-weight: 500;
35
+ font-display: swap;
36
+ src: url(file:///usr/local/share/libre-computer/fonts/v16-aFTR7PB1QTsUX8KYvumzEYOtbYf-Vlg.woff2) format('woff2');
37
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
38
+ }
39
+ /* cyrillic-ext */
40
+ @font-face {
41
+ font-family: 'Manrope';
42
+ font-style: normal;
43
+ font-weight: 400;
44
+ font-display: swap;
45
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2) format('woff2');
46
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
47
+ }
48
+ /* cyrillic */
49
+ @font-face {
50
+ font-family: 'Manrope';
51
+ font-style: normal;
52
+ font-weight: 400;
53
+ font-display: swap;
54
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2) format('woff2');
55
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
56
+ }
57
+ /* greek */
58
+ @font-face {
59
+ font-family: 'Manrope';
60
+ font-style: normal;
61
+ font-weight: 400;
62
+ font-display: swap;
63
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2) format('woff2');
64
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
65
+ }
66
+ /* vietnamese */
67
+ @font-face {
68
+ font-family: 'Manrope';
69
+ font-style: normal;
70
+ font-weight: 400;
71
+ font-display: swap;
72
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2) format('woff2');
73
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
74
+ }
75
+ /* latin-ext */
76
+ @font-face {
77
+ font-family: 'Manrope';
78
+ font-style: normal;
79
+ font-weight: 400;
80
+ font-display: swap;
81
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2) format('woff2');
82
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
83
+ }
84
+ /* latin */
85
+ @font-face {
86
+ font-family: 'Manrope';
87
+ font-style: normal;
88
+ font-weight: 400;
89
+ font-display: swap;
90
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggexSvfedN4.woff2) format('woff2');
91
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
92
+ }
93
+ /* cyrillic-ext */
94
+ @font-face {
95
+ font-family: 'Manrope';
96
+ font-style: normal;
97
+ font-weight: 500;
98
+ font-display: swap;
99
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2) format('woff2');
100
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
101
+ }
102
+ /* cyrillic */
103
+ @font-face {
104
+ font-family: 'Manrope';
105
+ font-style: normal;
106
+ font-weight: 500;
107
+ font-display: swap;
108
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2) format('woff2');
109
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
110
+ }
111
+ /* greek */
112
+ @font-face {
113
+ font-family: 'Manrope';
114
+ font-style: normal;
115
+ font-weight: 500;
116
+ font-display: swap;
117
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2) format('woff2');
118
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
119
+ }
120
+ /* vietnamese */
121
+ @font-face {
122
+ font-family: 'Manrope';
123
+ font-style: normal;
124
+ font-weight: 500;
125
+ font-display: swap;
126
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2) format('woff2');
127
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
128
+ }
129
+ /* latin-ext */
130
+ @font-face {
131
+ font-family: 'Manrope';
132
+ font-style: normal;
133
+ font-weight: 500;
134
+ font-display: swap;
135
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2) format('woff2');
136
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
137
+ }
138
+ /* latin */
139
+ @font-face {
140
+ font-family: 'Manrope';
141
+ font-style: normal;
142
+ font-weight: 500;
143
+ font-display: swap;
144
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggexSvfedN4.woff2) format('woff2');
145
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
146
+ }
147
+ /* cyrillic-ext */
148
+ @font-face {
149
+ font-family: 'Manrope';
150
+ font-style: normal;
151
+ font-weight: 600;
152
+ font-display: swap;
153
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2) format('woff2');
154
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
155
+ }
156
+ /* cyrillic */
157
+ @font-face {
158
+ font-family: 'Manrope';
159
+ font-style: normal;
160
+ font-weight: 600;
161
+ font-display: swap;
162
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2) format('woff2');
163
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
164
+ }
165
+ /* greek */
166
+ @font-face {
167
+ font-family: 'Manrope';
168
+ font-style: normal;
169
+ font-weight: 600;
170
+ font-display: swap;
171
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2) format('woff2');
172
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
173
+ }
174
+ /* vietnamese */
175
+ @font-face {
176
+ font-family: 'Manrope';
177
+ font-style: normal;
178
+ font-weight: 600;
179
+ font-display: swap;
180
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2) format('woff2');
181
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
182
+ }
183
+ /* latin-ext */
184
+ @font-face {
185
+ font-family: 'Manrope';
186
+ font-style: normal;
187
+ font-weight: 600;
188
+ font-display: swap;
189
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2) format('woff2');
190
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
191
+ }
192
+ /* latin */
193
+ @font-face {
194
+ font-family: 'Manrope';
195
+ font-style: normal;
196
+ font-weight: 600;
197
+ font-display: swap;
198
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggexSvfedN4.woff2) format('woff2');
199
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
200
+ }
201
+ /* cyrillic-ext */
202
+ @font-face {
203
+ font-family: 'Manrope';
204
+ font-style: normal;
205
+ font-weight: 700;
206
+ font-display: swap;
207
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2) format('woff2');
208
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
209
+ }
210
+ /* cyrillic */
211
+ @font-face {
212
+ font-family: 'Manrope';
213
+ font-style: normal;
214
+ font-weight: 700;
215
+ font-display: swap;
216
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2) format('woff2');
217
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
218
+ }
219
+ /* greek */
220
+ @font-face {
221
+ font-family: 'Manrope';
222
+ font-style: normal;
223
+ font-weight: 700;
224
+ font-display: swap;
225
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2) format('woff2');
226
+ unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
227
+ }
228
+ /* vietnamese */
229
+ @font-face {
230
+ font-family: 'Manrope';
231
+ font-style: normal;
232
+ font-weight: 700;
233
+ font-display: swap;
234
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2) format('woff2');
235
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
236
+ }
237
+ /* latin-ext */
238
+ @font-face {
239
+ font-family: 'Manrope';
240
+ font-style: normal;
241
+ font-weight: 700;
242
+ font-display: swap;
243
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2) format('woff2');
244
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
245
+ }
246
+ /* latin */
247
+ @font-face {
248
+ font-family: 'Manrope';
249
+ font-style: normal;
250
+ font-weight: 700;
251
+ font-display: swap;
252
+ src: url(file:///usr/local/share/libre-computer/fonts/v20-xn7gYHE41ni1AdIRggexSvfedN4.woff2) format('woff2');
253
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
254
+ }
255
+ /* vietnamese */
256
+ @font-face {
257
+ font-family: 'Space Grotesk';
258
+ font-style: normal;
259
+ font-weight: 400;
260
+ font-display: swap;
261
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format('woff2');
262
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
263
+ }
264
+ /* latin-ext */
265
+ @font-face {
266
+ font-family: 'Space Grotesk';
267
+ font-style: normal;
268
+ font-weight: 400;
269
+ font-display: swap;
270
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format('woff2');
271
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
272
+ }
273
+ /* latin */
274
+ @font-face {
275
+ font-family: 'Space Grotesk';
276
+ font-style: normal;
277
+ font-weight: 400;
278
+ font-display: swap;
279
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format('woff2');
280
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
281
+ }
282
+ /* vietnamese */
283
+ @font-face {
284
+ font-family: 'Space Grotesk';
285
+ font-style: normal;
286
+ font-weight: 500;
287
+ font-display: swap;
288
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format('woff2');
289
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
290
+ }
291
+ /* latin-ext */
292
+ @font-face {
293
+ font-family: 'Space Grotesk';
294
+ font-style: normal;
295
+ font-weight: 500;
296
+ font-display: swap;
297
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format('woff2');
298
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
299
+ }
300
+ /* latin */
301
+ @font-face {
302
+ font-family: 'Space Grotesk';
303
+ font-style: normal;
304
+ font-weight: 500;
305
+ font-display: swap;
306
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format('woff2');
307
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
308
+ }
309
+ /* vietnamese */
310
+ @font-face {
311
+ font-family: 'Space Grotesk';
312
+ font-style: normal;
313
+ font-weight: 600;
314
+ font-display: swap;
315
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format('woff2');
316
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
317
+ }
318
+ /* latin-ext */
319
+ @font-face {
320
+ font-family: 'Space Grotesk';
321
+ font-style: normal;
322
+ font-weight: 600;
323
+ font-display: swap;
324
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format('woff2');
325
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
326
+ }
327
+ /* latin */
328
+ @font-face {
329
+ font-family: 'Space Grotesk';
330
+ font-style: normal;
331
+ font-weight: 600;
332
+ font-display: swap;
333
+ src: url(file:///usr/local/share/libre-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format('woff2');
334
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
335
+ }
@@ -0,0 +1,155 @@
1
+ #!/bin/sh
2
+ # Libre Work Computer — GUI session bootstrap.
3
+ #
4
+ # Starts a virtual display, a minimal window manager, Chromium, and a
5
+ # localhost-only VNC server bridged to a WebSocket. Idempotent: safe to
6
+ # invoke again on a container that already has a session (exits 0).
7
+ #
8
+ # Everything binds to loopback inside the container; the backend reaches
9
+ # websockify over the Docker network and re-authenticates every viewer.
10
+ set -eu
11
+
12
+ DISPLAY_NUM="${LIBRE_COMPUTER_DISPLAY:-1}"
13
+ SCREEN_GEOMETRY="${LIBRE_COMPUTER_GEOMETRY:-1280x800x24}"
14
+ VNC_PORT="${LIBRE_COMPUTER_VNC_PORT:-5900}"
15
+ WS_PORT="${LIBRE_COMPUTER_WS_PORT:-6080}"
16
+ AUDIO_WS_PORT="${LIBRE_COMPUTER_AUDIO_WS_PORT:-6081}"
17
+ AUDIO_TCP_PORT="${LIBRE_COMPUTER_AUDIO_TCP_PORT:-4713}"
18
+ AUDIO_RATE=44100
19
+ AUDIO_CHANNELS=2
20
+ STATE_DIR="${LIBRE_COMPUTER_STATE_DIR:-/tmp/libre-computer}"
21
+ PROFILE_DIR="${LIBRE_COMPUTER_PROFILE_DIR:-/workspace/.browser-profile}"
22
+
23
+ mkdir -p "$STATE_DIR" "$PROFILE_DIR"
24
+
25
+ if [ -f "$STATE_DIR/websockify.pid" ] \
26
+ && kill -0 "$(cat "$STATE_DIR/websockify.pid")" 2>/dev/null; then
27
+ echo "computer session already running"
28
+ exit 0
29
+ fi
30
+
31
+ export DISPLAY=":${DISPLAY_NUM}"
32
+
33
+ Xvfb "$DISPLAY" -screen 0 "$SCREEN_GEOMETRY" -nolisten tcp &
34
+ echo $! > "$STATE_DIR/xvfb.pid"
35
+
36
+ # Wait for the display socket before starting clients.
37
+ tries=0
38
+ while [ ! -e "/tmp/.X11-unix/X${DISPLAY_NUM}" ]; do
39
+ tries=$((tries + 1))
40
+ [ "$tries" -gt 50 ] && { echo "Xvfb did not come up" >&2; exit 1; }
41
+ sleep 0.1
42
+ done
43
+
44
+ # Openbox has no bar of its own; tint2 provides the dock (launchers,
45
+ # running apps, clock) bottom-center over the wallpaper.
46
+ openbox >/dev/null 2>&1 &
47
+ echo $! > "$STATE_DIR/openbox.pid"
48
+
49
+ WALLPAPER="/usr/local/share/libre-computer/wallpaper.png"
50
+ if [ -f "$WALLPAPER" ]; then
51
+ sleep 0.3
52
+ display -window root "$WALLPAPER" >/dev/null 2>&1 &
53
+ echo $! > "$STATE_DIR/wallpaper.pid"
54
+ fi
55
+
56
+ XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" \
57
+ tint2 -c /usr/local/share/libre-computer/tint2rc >/dev/null 2>&1 &
58
+ echo $! > "$STATE_DIR/tint2.pid"
59
+
60
+ # Audio: PulseAudio with a null sink is the container's "sound card".
61
+ # Chromium plays into it; the sink's monitor is captured as raw PCM and
62
+ # served, one capture per connection, over a second websockify bridge.
63
+ export XDG_RUNTIME_DIR="$STATE_DIR/runtime"
64
+ mkdir -p "$XDG_RUNTIME_DIR"
65
+ chmod 700 "$XDG_RUNTIME_DIR"
66
+ pulseaudio --daemonize=yes --exit-idle-time=-1 --log-target=file:"$STATE_DIR/pulseaudio.log" 2>/dev/null || true
67
+ for _ in 1 2 3 4 5 6 7 8 9 10; do
68
+ pactl info >/dev/null 2>&1 && break
69
+ sleep 0.2
70
+ done
71
+ pactl load-module module-null-sink sink_name=libre \
72
+ sink_properties=device.description=LibreOutput >/dev/null 2>&1 || true
73
+ pactl set-default-sink libre >/dev/null 2>&1 || true
74
+
75
+ socat "TCP-LISTEN:${AUDIO_TCP_PORT},bind=127.0.0.1,reuseaddr,fork" \
76
+ EXEC:"parec -d libre.monitor --format=s16le --rate=${AUDIO_RATE} --channels=${AUDIO_CHANNELS} --raw" \
77
+ >/dev/null 2>&1 &
78
+ echo $! > "$STATE_DIR/audio-capture.pid"
79
+
80
+ websockify --daemon "0.0.0.0:${AUDIO_WS_PORT}" "127.0.0.1:${AUDIO_TCP_PORT}" \
81
+ >/dev/null 2>&1
82
+ sleep 0.3
83
+ pgrep -f "websockify.*${AUDIO_WS_PORT}" | head -1 > "$STATE_DIR/audio-ws.pid"
84
+
85
+ # A container killed mid-session leaves Chromium's profile singleton lock
86
+ # behind; without clearing it the browser silently refuses to start and the
87
+ # desktop comes up empty.
88
+ rm -f "$PROFILE_DIR/SingletonLock" "$PROFILE_DIR/SingletonSocket" \
89
+ "$PROFILE_DIR/SingletonCookie" 2>/dev/null || true
90
+
91
+ # The DevTools port serves semantic observation signals (active-tab URL,
92
+ # focused element, page focus) to the agent's observe/act scripts. It binds
93
+ # to the container's loopback only — the same trust domain as the DISPLAY
94
+ # the agent already fully controls with xdotool.
95
+ chromium \
96
+ --no-sandbox \
97
+ --test-type \
98
+ --remote-debugging-port=9222 \
99
+ --hide-crash-restore-bubble \
100
+ --autoplay-policy=no-user-gesture-required \
101
+ --disable-dev-shm-usage \
102
+ --disable-gpu \
103
+ --no-first-run \
104
+ --no-default-browser-check \
105
+ --password-store=basic \
106
+ --user-data-dir="$PROFILE_DIR" \
107
+ --start-maximized \
108
+ "file:///usr/local/share/libre-computer/start-page.html" >/dev/null 2>&1 &
109
+ echo $! > "$STATE_DIR/chromium.pid"
110
+
111
+ # --start-maximized is unreliable under a bare WM; assert it once the
112
+ # window exists so the browser fills the screen above the dock.
113
+ (
114
+ for _ in $(seq 1 60); do
115
+ found=""
116
+ # Chromium also maps tiny phantom windows; maximize every real one.
117
+ for wid in $(xdotool search --class chromium 2>/dev/null); do
118
+ width="$(xdotool getwindowgeometry --shell "$wid" 2>/dev/null \
119
+ | sed -n 's/^WIDTH=//p')"
120
+ if [ "${width:-0}" -gt 200 ]; then
121
+ xdotool windowstate --add MAXIMIZED_VERT "$wid" 2>/dev/null || true
122
+ xdotool windowstate --add MAXIMIZED_HORZ "$wid" 2>/dev/null || true
123
+ found=1
124
+ fi
125
+ done
126
+ [ -n "$found" ] && break
127
+ sleep 0.2
128
+ done
129
+ ) &
130
+
131
+ # One VNC server, two privilege levels: the first password in the passwd
132
+ # file grants full control (handed out by the backend only to the current
133
+ # takeover-lease holder), passwords after __BEGIN_VIEWONLY__ only watch.
134
+ # -localhost keeps raw VNC off the network; websockify is the only
135
+ # reachable surface and the backend authenticates every connection.
136
+ PASSWD_FILE="$STATE_DIR/passwd"
137
+ if [ ! -s "$PASSWD_FILE" ]; then
138
+ umask 077
139
+ random_password() {
140
+ head -c 48 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | cut -c1-8
141
+ }
142
+ printf '%s\n__BEGIN_VIEWONLY__\n%s\n' \
143
+ "$(random_password)" "$(random_password)" > "$PASSWD_FILE"
144
+ fi
145
+ x11vnc -display "$DISPLAY" -rfbport "$VNC_PORT" -localhost \
146
+ -passwdfile "$PASSWD_FILE" \
147
+ -shared -forever -quiet -bg -o "$STATE_DIR/x11vnc.log"
148
+
149
+ websockify --daemon "0.0.0.0:${WS_PORT}" "127.0.0.1:${VNC_PORT}" \
150
+ >/dev/null 2>&1
151
+ # websockify --daemon writes no pidfile by default; record the listener.
152
+ sleep 0.3
153
+ pgrep -f "websockify.*${WS_PORT}" | head -1 > "$STATE_DIR/websockify.pid"
154
+
155
+ echo "computer session ready on ws port ${WS_PORT}"