libre-webui 0.21.3 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (945) hide show
  1. package/README.md +308 -328
  2. package/backend/dist/cli/migrateSqliteToPostgres.d.ts +2 -0
  3. package/backend/dist/cli/migrateSqliteToPostgres.d.ts.map +1 -0
  4. package/backend/dist/cli/migrateSqliteToPostgres.js +113 -0
  5. package/backend/dist/cli/migrateSqliteToPostgres.js.map +1 -0
  6. package/backend/dist/cli/recoveryBackup.d.ts +3 -0
  7. package/backend/dist/cli/recoveryBackup.d.ts.map +1 -0
  8. package/backend/dist/cli/recoveryBackup.js +251 -0
  9. package/backend/dist/cli/recoveryBackup.js.map +1 -0
  10. package/backend/dist/cli/recoveryInventory.d.ts +2 -0
  11. package/backend/dist/cli/recoveryInventory.d.ts.map +1 -0
  12. package/backend/dist/cli/recoveryInventory.js +109 -0
  13. package/backend/dist/cli/recoveryInventory.js.map +1 -0
  14. package/backend/dist/db.d.ts +27 -0
  15. package/backend/dist/db.d.ts.map +1 -1
  16. package/backend/dist/db.js +333 -16
  17. package/backend/dist/db.js.map +1 -1
  18. package/backend/dist/env.d.ts.map +1 -1
  19. package/backend/dist/env.js +12 -2
  20. package/backend/dist/env.js.map +1 -1
  21. package/backend/dist/index.d.ts.map +1 -1
  22. package/backend/dist/index.js +235 -47
  23. package/backend/dist/index.js.map +1 -1
  24. package/backend/dist/main.d.ts +2 -0
  25. package/backend/dist/main.d.ts.map +1 -0
  26. package/backend/dist/main.js +137 -0
  27. package/backend/dist/main.js.map +1 -0
  28. package/backend/dist/middleware/auth.d.ts.map +1 -1
  29. package/backend/dist/middleware/auth.js +7 -3
  30. package/backend/dist/middleware/auth.js.map +1 -1
  31. package/backend/dist/middleware/chatCancellationAdmission.d.ts +7 -0
  32. package/backend/dist/middleware/chatCancellationAdmission.d.ts.map +1 -0
  33. package/backend/dist/middleware/chatCancellationAdmission.js +17 -0
  34. package/backend/dist/middleware/chatCancellationAdmission.js.map +1 -0
  35. package/backend/dist/middleware/coordinatedRateLimit.d.ts +18 -0
  36. package/backend/dist/middleware/coordinatedRateLimit.d.ts.map +1 -0
  37. package/backend/dist/middleware/coordinatedRateLimit.js +52 -0
  38. package/backend/dist/middleware/coordinatedRateLimit.js.map +1 -0
  39. package/backend/dist/middleware/sharedRateLimit.d.ts +26 -0
  40. package/backend/dist/middleware/sharedRateLimit.d.ts.map +1 -0
  41. package/backend/dist/middleware/sharedRateLimit.js +99 -0
  42. package/backend/dist/middleware/sharedRateLimit.js.map +1 -0
  43. package/backend/dist/models/personaModel.d.ts +1 -26
  44. package/backend/dist/models/personaModel.d.ts.map +1 -1
  45. package/backend/dist/models/personaModel.js +54 -247
  46. package/backend/dist/models/personaModel.js.map +1 -1
  47. package/backend/dist/models/userModel.d.ts +23 -66
  48. package/backend/dist/models/userModel.d.ts.map +1 -1
  49. package/backend/dist/models/userModel.js +110 -187
  50. package/backend/dist/models/userModel.js.map +1 -1
  51. package/backend/dist/persistence/chatGenerationTypes.d.ts +24 -0
  52. package/backend/dist/persistence/chatGenerationTypes.d.ts.map +1 -0
  53. package/backend/dist/persistence/chatGenerationTypes.js +7 -0
  54. package/backend/dist/persistence/chatGenerationTypes.js.map +1 -0
  55. package/backend/dist/persistence/extensionTypes.d.ts +185 -0
  56. package/backend/dist/persistence/extensionTypes.d.ts.map +1 -0
  57. package/backend/dist/persistence/extensionTypes.js +13 -0
  58. package/backend/dist/persistence/extensionTypes.js.map +1 -0
  59. package/backend/dist/persistence/identityDeletionTypes.d.ts +16 -0
  60. package/backend/dist/persistence/identityDeletionTypes.d.ts.map +1 -0
  61. package/backend/dist/persistence/identityDeletionTypes.js +7 -0
  62. package/backend/dist/persistence/identityDeletionTypes.js.map +1 -0
  63. package/backend/dist/persistence/index.d.ts +48 -0
  64. package/backend/dist/persistence/index.d.ts.map +1 -0
  65. package/backend/dist/persistence/index.js +159 -0
  66. package/backend/dist/persistence/index.js.map +1 -0
  67. package/backend/dist/persistence/postgresConfig.d.ts +32 -0
  68. package/backend/dist/persistence/postgresConfig.d.ts.map +1 -0
  69. package/backend/dist/persistence/postgresConfig.js +91 -0
  70. package/backend/dist/persistence/postgresConfig.js.map +1 -0
  71. package/backend/dist/persistence/postgresCoreMigration.d.ts +8 -0
  72. package/backend/dist/persistence/postgresCoreMigration.d.ts.map +1 -0
  73. package/backend/dist/persistence/postgresCoreMigration.js +179 -0
  74. package/backend/dist/persistence/postgresCoreMigration.js.map +1 -0
  75. package/backend/dist/persistence/postgresDatabase.d.ts +40 -0
  76. package/backend/dist/persistence/postgresDatabase.d.ts.map +1 -0
  77. package/backend/dist/persistence/postgresDatabase.js +148 -0
  78. package/backend/dist/persistence/postgresDatabase.js.map +1 -0
  79. package/backend/dist/persistence/postgresExtensionMigration.d.ts +4 -0
  80. package/backend/dist/persistence/postgresExtensionMigration.d.ts.map +1 -0
  81. package/backend/dist/persistence/postgresExtensionMigration.js +143 -0
  82. package/backend/dist/persistence/postgresExtensionMigration.js.map +1 -0
  83. package/backend/dist/persistence/postgresExtensionRepositories.d.ts +6 -0
  84. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -0
  85. package/backend/dist/persistence/postgresExtensionRepositories.js +550 -0
  86. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -0
  87. package/backend/dist/persistence/postgresImportState.d.ts +9 -0
  88. package/backend/dist/persistence/postgresImportState.d.ts.map +1 -0
  89. package/backend/dist/persistence/postgresImportState.js +64 -0
  90. package/backend/dist/persistence/postgresImportState.js.map +1 -0
  91. package/backend/dist/persistence/postgresMigrationRegistry.d.ts +4 -0
  92. package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -0
  93. package/backend/dist/persistence/postgresMigrationRegistry.js +33 -0
  94. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -0
  95. package/backend/dist/persistence/postgresMigrationTypes.d.ts +24 -0
  96. package/backend/dist/persistence/postgresMigrationTypes.d.ts.map +1 -0
  97. package/backend/dist/persistence/postgresMigrationTypes.js +7 -0
  98. package/backend/dist/persistence/postgresMigrationTypes.js.map +1 -0
  99. package/backend/dist/persistence/postgresMigrations.d.ts +15 -0
  100. package/backend/dist/persistence/postgresMigrations.d.ts.map +1 -0
  101. package/backend/dist/persistence/postgresMigrations.js +333 -0
  102. package/backend/dist/persistence/postgresMigrations.js.map +1 -0
  103. package/backend/dist/persistence/postgresPersistence.d.ts +17 -0
  104. package/backend/dist/persistence/postgresPersistence.d.ts.map +1 -0
  105. package/backend/dist/persistence/postgresPersistence.js +332 -0
  106. package/backend/dist/persistence/postgresPersistence.js.map +1 -0
  107. package/backend/dist/persistence/postgresPluginDefinitionMigration.d.ts +4 -0
  108. package/backend/dist/persistence/postgresPluginDefinitionMigration.d.ts.map +1 -0
  109. package/backend/dist/persistence/postgresPluginDefinitionMigration.js +40 -0
  110. package/backend/dist/persistence/postgresPluginDefinitionMigration.js.map +1 -0
  111. package/backend/dist/persistence/postgresResourceRepositories.d.ts +7 -0
  112. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -0
  113. package/backend/dist/persistence/postgresResourceRepositories.js +776 -0
  114. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -0
  115. package/backend/dist/persistence/postgresSchemaInspector.d.ts +14 -0
  116. package/backend/dist/persistence/postgresSchemaInspector.d.ts.map +1 -0
  117. package/backend/dist/persistence/postgresSchemaInspector.js +817 -0
  118. package/backend/dist/persistence/postgresSchemaInspector.js.map +1 -0
  119. package/backend/dist/persistence/resourceTypes.d.ts +207 -0
  120. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -0
  121. package/backend/dist/persistence/resourceTypes.js +38 -0
  122. package/backend/dist/persistence/resourceTypes.js.map +1 -0
  123. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts +4 -0
  124. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -0
  125. package/backend/dist/persistence/sqliteExtensionRepositories.js +494 -0
  126. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -0
  127. package/backend/dist/persistence/sqliteMigrations.d.ts +93 -0
  128. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -0
  129. package/backend/dist/persistence/sqliteMigrations.js +2232 -0
  130. package/backend/dist/persistence/sqliteMigrations.js.map +1 -0
  131. package/backend/dist/persistence/sqlitePersistence.d.ts +23 -0
  132. package/backend/dist/persistence/sqlitePersistence.d.ts.map +1 -0
  133. package/backend/dist/persistence/sqlitePersistence.js +596 -0
  134. package/backend/dist/persistence/sqlitePersistence.js.map +1 -0
  135. package/backend/dist/persistence/sqliteResourceRepositories.d.ts +4 -0
  136. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -0
  137. package/backend/dist/persistence/sqliteResourceRepositories.js +663 -0
  138. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -0
  139. package/backend/dist/persistence/sqliteSyncExecutor.d.ts +5 -0
  140. package/backend/dist/persistence/sqliteSyncExecutor.d.ts.map +1 -0
  141. package/backend/dist/persistence/sqliteSyncExecutor.js +19 -0
  142. package/backend/dist/persistence/sqliteSyncExecutor.js.map +1 -0
  143. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts +80 -0
  144. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -0
  145. package/backend/dist/persistence/sqliteToPostgresMigration.js +1543 -0
  146. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -0
  147. package/backend/dist/persistence/types.d.ts +131 -0
  148. package/backend/dist/persistence/types.d.ts.map +1 -0
  149. package/backend/dist/persistence/types.js +18 -0
  150. package/backend/dist/persistence/types.js.map +1 -0
  151. package/backend/dist/persistence/voiceProfileNameLookup.d.ts +9 -0
  152. package/backend/dist/persistence/voiceProfileNameLookup.d.ts.map +1 -0
  153. package/backend/dist/persistence/voiceProfileNameLookup.js +15 -0
  154. package/backend/dist/persistence/voiceProfileNameLookup.js.map +1 -0
  155. package/backend/dist/platform/coordination/index.d.ts +7 -0
  156. package/backend/dist/platform/coordination/index.d.ts.map +1 -0
  157. package/backend/dist/platform/coordination/index.js +24 -0
  158. package/backend/dist/platform/coordination/index.js.map +1 -0
  159. package/backend/dist/platform/coordination/localCoordinator.d.ts +49 -0
  160. package/backend/dist/platform/coordination/localCoordinator.d.ts.map +1 -0
  161. package/backend/dist/platform/coordination/localCoordinator.js +380 -0
  162. package/backend/dist/platform/coordination/localCoordinator.js.map +1 -0
  163. package/backend/dist/platform/coordination/redisCoordinator.d.ts +83 -0
  164. package/backend/dist/platform/coordination/redisCoordinator.d.ts.map +1 -0
  165. package/backend/dist/platform/coordination/redisCoordinator.js +726 -0
  166. package/backend/dist/platform/coordination/redisCoordinator.js.map +1 -0
  167. package/backend/dist/platform/coordination/service.d.ts +11 -0
  168. package/backend/dist/platform/coordination/service.d.ts.map +1 -0
  169. package/backend/dist/platform/coordination/service.js +55 -0
  170. package/backend/dist/platform/coordination/service.js.map +1 -0
  171. package/backend/dist/platform/coordination/sharedAdmission.d.ts +53 -0
  172. package/backend/dist/platform/coordination/sharedAdmission.d.ts.map +1 -0
  173. package/backend/dist/platform/coordination/sharedAdmission.js +194 -0
  174. package/backend/dist/platform/coordination/sharedAdmission.js.map +1 -0
  175. package/backend/dist/platform/coordination/types.d.ts +76 -0
  176. package/backend/dist/platform/coordination/types.d.ts.map +1 -0
  177. package/backend/dist/platform/coordination/types.js +32 -0
  178. package/backend/dist/platform/coordination/types.js.map +1 -0
  179. package/backend/dist/platform/events/durableEventGateway.d.ts +54 -0
  180. package/backend/dist/platform/events/durableEventGateway.d.ts.map +1 -0
  181. package/backend/dist/platform/events/durableEventGateway.js +262 -0
  182. package/backend/dist/platform/events/durableEventGateway.js.map +1 -0
  183. package/backend/dist/platform/events/index.d.ts +3 -0
  184. package/backend/dist/platform/events/index.d.ts.map +1 -0
  185. package/backend/dist/platform/events/index.js +8 -0
  186. package/backend/dist/platform/events/index.js.map +1 -0
  187. package/backend/dist/platform/events/service.d.ts +8 -0
  188. package/backend/dist/platform/events/service.d.ts.map +1 -0
  189. package/backend/dist/platform/events/service.js +25 -0
  190. package/backend/dist/platform/events/service.js.map +1 -0
  191. package/backend/dist/platform/jobs/chatGenerationEnqueuer.d.ts +3 -0
  192. package/backend/dist/platform/jobs/chatGenerationEnqueuer.d.ts.map +1 -0
  193. package/backend/dist/platform/jobs/chatGenerationEnqueuer.js +55 -0
  194. package/backend/dist/platform/jobs/chatGenerationEnqueuer.js.map +1 -0
  195. package/backend/dist/platform/jobs/documentIngestionEnqueuer.d.ts +3 -0
  196. package/backend/dist/platform/jobs/documentIngestionEnqueuer.d.ts.map +1 -0
  197. package/backend/dist/platform/jobs/documentIngestionEnqueuer.js +38 -0
  198. package/backend/dist/platform/jobs/documentIngestionEnqueuer.js.map +1 -0
  199. package/backend/dist/platform/jobs/domainJobContracts.d.ts +30 -0
  200. package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -0
  201. package/backend/dist/platform/jobs/domainJobContracts.js +53 -0
  202. package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -0
  203. package/backend/dist/platform/jobs/domainJobHandlers.d.ts +11 -0
  204. package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -0
  205. package/backend/dist/platform/jobs/domainJobHandlers.js +617 -0
  206. package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -0
  207. package/backend/dist/platform/jobs/durableEventIdentity.d.ts +8 -0
  208. package/backend/dist/platform/jobs/durableEventIdentity.d.ts.map +1 -0
  209. package/backend/dist/platform/jobs/durableEventIdentity.js +33 -0
  210. package/backend/dist/platform/jobs/durableEventIdentity.js.map +1 -0
  211. package/backend/dist/platform/jobs/durableJobRuntime.d.ts +57 -0
  212. package/backend/dist/platform/jobs/durableJobRuntime.d.ts.map +1 -0
  213. package/backend/dist/platform/jobs/durableJobRuntime.js +131 -0
  214. package/backend/dist/platform/jobs/durableJobRuntime.js.map +1 -0
  215. package/backend/dist/platform/jobs/durableJobRuntimeBackend.d.ts +28 -0
  216. package/backend/dist/platform/jobs/durableJobRuntimeBackend.d.ts.map +1 -0
  217. package/backend/dist/platform/jobs/durableJobRuntimeBackend.js +62 -0
  218. package/backend/dist/platform/jobs/durableJobRuntimeBackend.js.map +1 -0
  219. package/backend/dist/platform/jobs/durableJobService.d.ts +85 -0
  220. package/backend/dist/platform/jobs/durableJobService.d.ts.map +1 -0
  221. package/backend/dist/platform/jobs/durableJobService.js +726 -0
  222. package/backend/dist/platform/jobs/durableJobService.js.map +1 -0
  223. package/backend/dist/platform/jobs/durableJobTypes.d.ts +195 -0
  224. package/backend/dist/platform/jobs/durableJobTypes.d.ts.map +1 -0
  225. package/backend/dist/platform/jobs/durableJobTypes.js +72 -0
  226. package/backend/dist/platform/jobs/durableJobTypes.js.map +1 -0
  227. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts +87 -0
  228. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -0
  229. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +429 -0
  230. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -0
  231. package/backend/dist/platform/jobs/identityDeletionEnqueuer.d.ts +3 -0
  232. package/backend/dist/platform/jobs/identityDeletionEnqueuer.d.ts.map +1 -0
  233. package/backend/dist/platform/jobs/identityDeletionEnqueuer.js +36 -0
  234. package/backend/dist/platform/jobs/identityDeletionEnqueuer.js.map +1 -0
  235. package/backend/dist/platform/jobs/index.d.ts +18 -0
  236. package/backend/dist/platform/jobs/index.d.ts.map +1 -0
  237. package/backend/dist/platform/jobs/index.js +34 -0
  238. package/backend/dist/platform/jobs/index.js.map +1 -0
  239. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.d.ts +4 -0
  240. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.d.ts.map +1 -0
  241. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.js +25 -0
  242. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.js.map +1 -0
  243. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.d.ts +4 -0
  244. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.d.ts.map +1 -0
  245. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.js +23 -0
  246. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.js.map +1 -0
  247. package/backend/dist/platform/jobs/postgresDurableJobMigration.d.ts +11 -0
  248. package/backend/dist/platform/jobs/postgresDurableJobMigration.d.ts.map +1 -0
  249. package/backend/dist/platform/jobs/postgresDurableJobMigration.js +106 -0
  250. package/backend/dist/platform/jobs/postgresDurableJobMigration.js.map +1 -0
  251. package/backend/dist/platform/jobs/postgresDurableJobRepository.d.ts +88 -0
  252. package/backend/dist/platform/jobs/postgresDurableJobRepository.d.ts.map +1 -0
  253. package/backend/dist/platform/jobs/postgresDurableJobRepository.js +1185 -0
  254. package/backend/dist/platform/jobs/postgresDurableJobRepository.js.map +1 -0
  255. package/backend/dist/platform/jobs/postgresDurableJobService.d.ts +86 -0
  256. package/backend/dist/platform/jobs/postgresDurableJobService.d.ts.map +1 -0
  257. package/backend/dist/platform/jobs/postgresDurableJobService.js +696 -0
  258. package/backend/dist/platform/jobs/postgresDurableJobService.js.map +1 -0
  259. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts +53 -0
  260. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -0
  261. package/backend/dist/platform/jobs/postgresDurableJobWorker.js +393 -0
  262. package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -0
  263. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.d.ts +3 -0
  264. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.d.ts.map +1 -0
  265. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.js +43 -0
  266. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.js.map +1 -0
  267. package/backend/dist/platform/jobs/sqliteDurableJobRepository.d.ts +166 -0
  268. package/backend/dist/platform/jobs/sqliteDurableJobRepository.d.ts.map +1 -0
  269. package/backend/dist/platform/jobs/sqliteDurableJobRepository.js +1008 -0
  270. package/backend/dist/platform/jobs/sqliteDurableJobRepository.js.map +1 -0
  271. package/backend/dist/platform/jobs/videoGenerationEnqueuer.d.ts +4 -0
  272. package/backend/dist/platform/jobs/videoGenerationEnqueuer.d.ts.map +1 -0
  273. package/backend/dist/platform/jobs/videoGenerationEnqueuer.js +46 -0
  274. package/backend/dist/platform/jobs/videoGenerationEnqueuer.js.map +1 -0
  275. package/backend/dist/platform/jobs/workExecutionEnqueuer.d.ts +3 -0
  276. package/backend/dist/platform/jobs/workExecutionEnqueuer.d.ts.map +1 -0
  277. package/backend/dist/platform/jobs/workExecutionEnqueuer.js +38 -0
  278. package/backend/dist/platform/jobs/workExecutionEnqueuer.js.map +1 -0
  279. package/backend/dist/platform/ollamaRuntimeConfig.d.ts +40 -0
  280. package/backend/dist/platform/ollamaRuntimeConfig.d.ts.map +1 -0
  281. package/backend/dist/platform/ollamaRuntimeConfig.js +72 -0
  282. package/backend/dist/platform/ollamaRuntimeConfig.js.map +1 -0
  283. package/backend/dist/platform/recovery/backupArchive.d.ts +120 -0
  284. package/backend/dist/platform/recovery/backupArchive.d.ts.map +1 -0
  285. package/backend/dist/platform/recovery/backupArchive.js +842 -0
  286. package/backend/dist/platform/recovery/backupArchive.js.map +1 -0
  287. package/backend/dist/platform/recovery/index.d.ts +3 -0
  288. package/backend/dist/platform/recovery/index.d.ts.map +1 -0
  289. package/backend/dist/platform/recovery/index.js +8 -0
  290. package/backend/dist/platform/recovery/index.js.map +1 -0
  291. package/backend/dist/platform/recovery/teamBackupArchive.d.ts +98 -0
  292. package/backend/dist/platform/recovery/teamBackupArchive.d.ts.map +1 -0
  293. package/backend/dist/platform/recovery/teamBackupArchive.js +1203 -0
  294. package/backend/dist/platform/recovery/teamBackupArchive.js.map +1 -0
  295. package/backend/dist/platform/runtimeConfig.d.ts +70 -0
  296. package/backend/dist/platform/runtimeConfig.d.ts.map +1 -0
  297. package/backend/dist/platform/runtimeConfig.js +205 -0
  298. package/backend/dist/platform/runtimeConfig.js.map +1 -0
  299. package/backend/dist/platform/storage/aesGcmKeyring.d.ts +26 -0
  300. package/backend/dist/platform/storage/aesGcmKeyring.d.ts.map +1 -0
  301. package/backend/dist/platform/storage/aesGcmKeyring.js +135 -0
  302. package/backend/dist/platform/storage/aesGcmKeyring.js.map +1 -0
  303. package/backend/dist/platform/storage/blobReferenceRepository.d.ts +36 -0
  304. package/backend/dist/platform/storage/blobReferenceRepository.d.ts.map +1 -0
  305. package/backend/dist/platform/storage/blobReferenceRepository.js +117 -0
  306. package/backend/dist/platform/storage/blobReferenceRepository.js.map +1 -0
  307. package/backend/dist/platform/storage/blobStore.d.ts +111 -0
  308. package/backend/dist/platform/storage/blobStore.d.ts.map +1 -0
  309. package/backend/dist/platform/storage/blobStore.js +46 -0
  310. package/backend/dist/platform/storage/blobStore.js.map +1 -0
  311. package/backend/dist/platform/storage/documentVectorIndex.d.ts +44 -0
  312. package/backend/dist/platform/storage/documentVectorIndex.d.ts.map +1 -0
  313. package/backend/dist/platform/storage/documentVectorIndex.js +110 -0
  314. package/backend/dist/platform/storage/documentVectorIndex.js.map +1 -0
  315. package/backend/dist/platform/storage/durableBlobQuotaPolicy.d.ts +82 -0
  316. package/backend/dist/platform/storage/durableBlobQuotaPolicy.d.ts.map +1 -0
  317. package/backend/dist/platform/storage/durableBlobQuotaPolicy.js +583 -0
  318. package/backend/dist/platform/storage/durableBlobQuotaPolicy.js.map +1 -0
  319. package/backend/dist/platform/storage/index.d.ts +19 -0
  320. package/backend/dist/platform/storage/index.d.ts.map +1 -0
  321. package/backend/dist/platform/storage/index.js +35 -0
  322. package/backend/dist/platform/storage/index.js.map +1 -0
  323. package/backend/dist/platform/storage/localEncryptedBlobStore.d.ts +120 -0
  324. package/backend/dist/platform/storage/localEncryptedBlobStore.d.ts.map +1 -0
  325. package/backend/dist/platform/storage/localEncryptedBlobStore.js +1205 -0
  326. package/backend/dist/platform/storage/localEncryptedBlobStore.js.map +1 -0
  327. package/backend/dist/platform/storage/personaMemoryIndexing.d.ts +12 -0
  328. package/backend/dist/platform/storage/personaMemoryIndexing.d.ts.map +1 -0
  329. package/backend/dist/platform/storage/personaMemoryIndexing.js +25 -0
  330. package/backend/dist/platform/storage/personaMemoryIndexing.js.map +1 -0
  331. package/backend/dist/platform/storage/pgVectorStore.d.ts +37 -0
  332. package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -0
  333. package/backend/dist/platform/storage/pgVectorStore.js +493 -0
  334. package/backend/dist/platform/storage/pgVectorStore.js.map +1 -0
  335. package/backend/dist/platform/storage/platformDomainRepositories.d.ts +244 -0
  336. package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -0
  337. package/backend/dist/platform/storage/platformDomainRepositories.js +7 -0
  338. package/backend/dist/platform/storage/platformDomainRepositories.js.map +1 -0
  339. package/backend/dist/platform/storage/platformStorageRuntime.d.ts +35 -0
  340. package/backend/dist/platform/storage/platformStorageRuntime.d.ts.map +1 -0
  341. package/backend/dist/platform/storage/platformStorageRuntime.js +299 -0
  342. package/backend/dist/platform/storage/platformStorageRuntime.js.map +1 -0
  343. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts +4 -0
  344. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -0
  345. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +1017 -0
  346. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -0
  347. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.d.ts +4 -0
  348. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.d.ts.map +1 -0
  349. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.js +40 -0
  350. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.js.map +1 -0
  351. package/backend/dist/platform/storage/resourceContentCleanup.d.ts +29 -0
  352. package/backend/dist/platform/storage/resourceContentCleanup.d.ts.map +1 -0
  353. package/backend/dist/platform/storage/resourceContentCleanup.js +100 -0
  354. package/backend/dist/platform/storage/resourceContentCleanup.js.map +1 -0
  355. package/backend/dist/platform/storage/resourceDeletionLifecycle.d.ts +14 -0
  356. package/backend/dist/platform/storage/resourceDeletionLifecycle.d.ts.map +1 -0
  357. package/backend/dist/platform/storage/resourceDeletionLifecycle.js +31 -0
  358. package/backend/dist/platform/storage/resourceDeletionLifecycle.js.map +1 -0
  359. package/backend/dist/platform/storage/s3EncryptedBlobStore.d.ts +140 -0
  360. package/backend/dist/platform/storage/s3EncryptedBlobStore.d.ts.map +1 -0
  361. package/backend/dist/platform/storage/s3EncryptedBlobStore.js +1309 -0
  362. package/backend/dist/platform/storage/s3EncryptedBlobStore.js.map +1 -0
  363. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +71 -0
  364. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -0
  365. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +766 -0
  366. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -0
  367. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts +4 -0
  368. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -0
  369. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +1037 -0
  370. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -0
  371. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.d.ts +25 -0
  372. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.d.ts.map +1 -0
  373. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.js +1292 -0
  374. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.js.map +1 -0
  375. package/backend/dist/platform/storage/storageFactory.d.ts +83 -0
  376. package/backend/dist/platform/storage/storageFactory.d.ts.map +1 -0
  377. package/backend/dist/platform/storage/storageFactory.js +530 -0
  378. package/backend/dist/platform/storage/storageFactory.js.map +1 -0
  379. package/backend/dist/platform/storage/storageSchemaContracts.d.ts +22 -0
  380. package/backend/dist/platform/storage/storageSchemaContracts.d.ts.map +1 -0
  381. package/backend/dist/platform/storage/storageSchemaContracts.js +299 -0
  382. package/backend/dist/platform/storage/storageSchemaContracts.js.map +1 -0
  383. package/backend/dist/platform/storage/vectorStore.d.ts +117 -0
  384. package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -0
  385. package/backend/dist/platform/storage/vectorStore.js +40 -0
  386. package/backend/dist/platform/storage/vectorStore.js.map +1 -0
  387. package/backend/dist/platform/workPersistence/index.d.ts +9 -0
  388. package/backend/dist/platform/workPersistence/index.d.ts.map +1 -0
  389. package/backend/dist/platform/workPersistence/index.js +14 -0
  390. package/backend/dist/platform/workPersistence/index.js.map +1 -0
  391. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.d.ts +9 -0
  392. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.d.ts.map +1 -0
  393. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.js +47 -0
  394. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.js.map +1 -0
  395. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.d.ts +3 -0
  396. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.d.ts.map +1 -0
  397. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.js +28 -0
  398. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.js.map +1 -0
  399. package/backend/dist/platform/workPersistence/postgresWorkMigration.d.ts +3 -0
  400. package/backend/dist/platform/workPersistence/postgresWorkMigration.d.ts.map +1 -0
  401. package/backend/dist/platform/workPersistence/postgresWorkMigration.js +101 -0
  402. package/backend/dist/platform/workPersistence/postgresWorkMigration.js.map +1 -0
  403. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts +79 -0
  404. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -0
  405. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +521 -0
  406. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -0
  407. package/backend/dist/platform/workPersistence/service.d.ts +6 -0
  408. package/backend/dist/platform/workPersistence/service.d.ts.map +1 -0
  409. package/backend/dist/platform/workPersistence/service.js +27 -0
  410. package/backend/dist/platform/workPersistence/service.js.map +1 -0
  411. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts +77 -0
  412. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -0
  413. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +463 -0
  414. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -0
  415. package/backend/dist/platform/workPersistence/types.d.ts +159 -0
  416. package/backend/dist/platform/workPersistence/types.d.ts.map +1 -0
  417. package/backend/dist/platform/workPersistence/types.js +13 -0
  418. package/backend/dist/platform/workPersistence/types.js.map +1 -0
  419. package/backend/dist/platform/workPersistence/workExecutionTypes.d.ts +13 -0
  420. package/backend/dist/platform/workPersistence/workExecutionTypes.d.ts.map +1 -0
  421. package/backend/dist/platform/workPersistence/workExecutionTypes.js +7 -0
  422. package/backend/dist/platform/workPersistence/workExecutionTypes.js.map +1 -0
  423. package/backend/dist/platform/workPersistence/workMessageContentCodec.d.ts +8 -0
  424. package/backend/dist/platform/workPersistence/workMessageContentCodec.d.ts.map +1 -0
  425. package/backend/dist/platform/workPersistence/workMessageContentCodec.js +25 -0
  426. package/backend/dist/platform/workPersistence/workMessageContentCodec.js.map +1 -0
  427. package/backend/dist/platform/workPersistence/workTextSafety.d.ts +3 -0
  428. package/backend/dist/platform/workPersistence/workTextSafety.d.ts.map +1 -0
  429. package/backend/dist/platform/workPersistence/workTextSafety.js +8 -0
  430. package/backend/dist/platform/workPersistence/workTextSafety.js.map +1 -0
  431. package/backend/dist/routes/agentCli.js +1 -1
  432. package/backend/dist/routes/agentCli.js.map +1 -1
  433. package/backend/dist/routes/artifacts.d.ts.map +1 -1
  434. package/backend/dist/routes/artifacts.js +2 -1
  435. package/backend/dist/routes/artifacts.js.map +1 -1
  436. package/backend/dist/routes/auth.d.ts.map +1 -1
  437. package/backend/dist/routes/auth.js +64 -18
  438. package/backend/dist/routes/auth.js.map +1 -1
  439. package/backend/dist/routes/chat.d.ts.map +1 -1
  440. package/backend/dist/routes/chat.js +519 -85
  441. package/backend/dist/routes/chat.js.map +1 -1
  442. package/backend/dist/routes/documents.d.ts.map +1 -1
  443. package/backend/dist/routes/documents.js +134 -28
  444. package/backend/dist/routes/documents.js.map +1 -1
  445. package/backend/dist/routes/embeddings.d.ts.map +1 -1
  446. package/backend/dist/routes/embeddings.js +2 -1
  447. package/backend/dist/routes/embeddings.js.map +1 -1
  448. package/backend/dist/routes/health.d.ts +3 -0
  449. package/backend/dist/routes/health.d.ts.map +1 -0
  450. package/backend/dist/routes/health.js +52 -0
  451. package/backend/dist/routes/health.js.map +1 -0
  452. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  453. package/backend/dist/routes/huggingfaceHub.js +2 -1
  454. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  455. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  456. package/backend/dist/routes/imageGen.js +42 -10
  457. package/backend/dist/routes/imageGen.js.map +1 -1
  458. package/backend/dist/routes/jobs.d.ts +3 -0
  459. package/backend/dist/routes/jobs.d.ts.map +1 -0
  460. package/backend/dist/routes/jobs.js +126 -0
  461. package/backend/dist/routes/jobs.js.map +1 -0
  462. package/backend/dist/routes/libreClaw.d.ts.map +1 -1
  463. package/backend/dist/routes/libreClaw.js +10 -7
  464. package/backend/dist/routes/libreClaw.js.map +1 -1
  465. package/backend/dist/routes/media.d.ts.map +1 -1
  466. package/backend/dist/routes/media.js +523 -77
  467. package/backend/dist/routes/media.js.map +1 -1
  468. package/backend/dist/routes/notes.d.ts.map +1 -1
  469. package/backend/dist/routes/notes.js +21 -21
  470. package/backend/dist/routes/notes.js.map +1 -1
  471. package/backend/dist/routes/ollama.d.ts.map +1 -1
  472. package/backend/dist/routes/ollama.js +40 -12
  473. package/backend/dist/routes/ollama.js.map +1 -1
  474. package/backend/dist/routes/personas.d.ts.map +1 -1
  475. package/backend/dist/routes/personas.js +4 -2
  476. package/backend/dist/routes/personas.js.map +1 -1
  477. package/backend/dist/routes/plugins.d.ts.map +1 -1
  478. package/backend/dist/routes/plugins.js +79 -51
  479. package/backend/dist/routes/plugins.js.map +1 -1
  480. package/backend/dist/routes/preferences.d.ts.map +1 -1
  481. package/backend/dist/routes/preferences.js +290 -25
  482. package/backend/dist/routes/preferences.js.map +1 -1
  483. package/backend/dist/routes/search.d.ts.map +1 -1
  484. package/backend/dist/routes/search.js +23 -14
  485. package/backend/dist/routes/search.js.map +1 -1
  486. package/backend/dist/routes/stt.d.ts +9 -0
  487. package/backend/dist/routes/stt.d.ts.map +1 -0
  488. package/backend/dist/routes/stt.js +217 -0
  489. package/backend/dist/routes/stt.js.map +1 -0
  490. package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -1
  491. package/backend/dist/routes/systemDiagnostics.js +2 -1
  492. package/backend/dist/routes/systemDiagnostics.js.map +1 -1
  493. package/backend/dist/routes/tts.d.ts.map +1 -1
  494. package/backend/dist/routes/tts.js +577 -28
  495. package/backend/dist/routes/tts.js.map +1 -1
  496. package/backend/dist/routes/users.d.ts.map +1 -1
  497. package/backend/dist/routes/users.js +16 -25
  498. package/backend/dist/routes/users.js.map +1 -1
  499. package/backend/dist/routes/work.d.ts.map +1 -1
  500. package/backend/dist/routes/work.js +167 -113
  501. package/backend/dist/routes/work.js.map +1 -1
  502. package/backend/dist/services/agentAccessService.d.ts +2 -2
  503. package/backend/dist/services/agentAccessService.d.ts.map +1 -1
  504. package/backend/dist/services/agentAccessService.js +5 -14
  505. package/backend/dist/services/agentAccessService.js.map +1 -1
  506. package/backend/dist/services/agentCliService.d.ts +3 -2
  507. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  508. package/backend/dist/services/agentCliService.js +44 -16
  509. package/backend/dist/services/agentCliService.js.map +1 -1
  510. package/backend/dist/services/assistantCompletionService.d.ts +2 -1
  511. package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
  512. package/backend/dist/services/assistantCompletionService.js +7 -3
  513. package/backend/dist/services/assistantCompletionService.js.map +1 -1
  514. package/backend/dist/services/authService.d.ts +7 -2
  515. package/backend/dist/services/authService.d.ts.map +1 -1
  516. package/backend/dist/services/authService.js +23 -10
  517. package/backend/dist/services/authService.js.map +1 -1
  518. package/backend/dist/services/chatGenerationService.d.ts +5 -4
  519. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  520. package/backend/dist/services/chatGenerationService.js +23 -17
  521. package/backend/dist/services/chatGenerationService.js.map +1 -1
  522. package/backend/dist/services/chatRequestService.d.ts +4 -3
  523. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  524. package/backend/dist/services/chatRequestService.js +3 -3
  525. package/backend/dist/services/chatRequestService.js.map +1 -1
  526. package/backend/dist/services/chatService.d.ts +66 -16
  527. package/backend/dist/services/chatService.d.ts.map +1 -1
  528. package/backend/dist/services/chatService.js +402 -111
  529. package/backend/dist/services/chatService.js.map +1 -1
  530. package/backend/dist/services/codexOAuthService.d.ts +2 -2
  531. package/backend/dist/services/codexOAuthService.d.ts.map +1 -1
  532. package/backend/dist/services/codexOAuthService.js +63 -7
  533. package/backend/dist/services/codexOAuthService.js.map +1 -1
  534. package/backend/dist/services/dataArchiveService.d.ts +88 -0
  535. package/backend/dist/services/dataArchiveService.d.ts.map +1 -0
  536. package/backend/dist/services/dataArchiveService.js +1027 -0
  537. package/backend/dist/services/dataArchiveService.js.map +1 -0
  538. package/backend/dist/services/documentService.d.ts +67 -14
  539. package/backend/dist/services/documentService.d.ts.map +1 -1
  540. package/backend/dist/services/documentService.js +938 -193
  541. package/backend/dist/services/documentService.js.map +1 -1
  542. package/backend/dist/services/durableChatCompletion.d.ts +16 -0
  543. package/backend/dist/services/durableChatCompletion.d.ts.map +1 -0
  544. package/backend/dist/services/durableChatCompletion.js +34 -0
  545. package/backend/dist/services/durableChatCompletion.js.map +1 -0
  546. package/backend/dist/services/durableChatGenerationService.d.ts +19 -0
  547. package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -0
  548. package/backend/dist/services/durableChatGenerationService.js +341 -0
  549. package/backend/dist/services/durableChatGenerationService.js.map +1 -0
  550. package/backend/dist/services/embeddingService.d.ts +1 -1
  551. package/backend/dist/services/embeddingService.d.ts.map +1 -1
  552. package/backend/dist/services/embeddingService.js +16 -13
  553. package/backend/dist/services/embeddingService.js.map +1 -1
  554. package/backend/dist/services/encryptionService.d.ts +28 -1
  555. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  556. package/backend/dist/services/encryptionService.js +131 -51
  557. package/backend/dist/services/encryptionService.js.map +1 -1
  558. package/backend/dist/services/followUpService.d.ts +1 -1
  559. package/backend/dist/services/followUpService.d.ts.map +1 -1
  560. package/backend/dist/services/followUpService.js +1 -1
  561. package/backend/dist/services/followUpService.js.map +1 -1
  562. package/backend/dist/services/galleryService.d.ts +38 -37
  563. package/backend/dist/services/galleryService.d.ts.map +1 -1
  564. package/backend/dist/services/galleryService.js +356 -251
  565. package/backend/dist/services/galleryService.js.map +1 -1
  566. package/backend/dist/services/healthService.d.ts +65 -0
  567. package/backend/dist/services/healthService.d.ts.map +1 -0
  568. package/backend/dist/services/healthService.js +379 -0
  569. package/backend/dist/services/healthService.js.map +1 -0
  570. package/backend/dist/services/legacyCiphertextIntegrity.d.ts +40 -0
  571. package/backend/dist/services/legacyCiphertextIntegrity.d.ts.map +1 -0
  572. package/backend/dist/services/legacyCiphertextIntegrity.js +406 -0
  573. package/backend/dist/services/legacyCiphertextIntegrity.js.map +1 -0
  574. package/backend/dist/services/mediaGenerationJobService.d.ts +27 -5
  575. package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -1
  576. package/backend/dist/services/mediaGenerationJobService.js +185 -55
  577. package/backend/dist/services/mediaGenerationJobService.js.map +1 -1
  578. package/backend/dist/services/memoryService.d.ts +7 -83
  579. package/backend/dist/services/memoryService.d.ts.map +1 -1
  580. package/backend/dist/services/memoryService.js +428 -573
  581. package/backend/dist/services/memoryService.js.map +1 -1
  582. package/backend/dist/services/memoryUtils.d.ts.map +1 -1
  583. package/backend/dist/services/memoryUtils.js +8 -1
  584. package/backend/dist/services/memoryUtils.js.map +1 -1
  585. package/backend/dist/services/modelAccessService.d.ts +3 -3
  586. package/backend/dist/services/modelAccessService.d.ts.map +1 -1
  587. package/backend/dist/services/modelAccessService.js +8 -16
  588. package/backend/dist/services/modelAccessService.js.map +1 -1
  589. package/backend/dist/services/mutationEngineService.d.ts +0 -7
  590. package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
  591. package/backend/dist/services/mutationEngineService.js +7 -78
  592. package/backend/dist/services/mutationEngineService.js.map +1 -1
  593. package/backend/dist/services/ollamaService.d.ts +4 -4
  594. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  595. package/backend/dist/services/ollamaService.js +62 -31
  596. package/backend/dist/services/ollamaService.js.map +1 -1
  597. package/backend/dist/services/personaService.d.ts.map +1 -1
  598. package/backend/dist/services/personaService.js +19 -54
  599. package/backend/dist/services/personaService.js.map +1 -1
  600. package/backend/dist/services/pluginActivationService.d.ts +6 -5
  601. package/backend/dist/services/pluginActivationService.d.ts.map +1 -1
  602. package/backend/dist/services/pluginActivationService.js +36 -76
  603. package/backend/dist/services/pluginActivationService.js.map +1 -1
  604. package/backend/dist/services/pluginAudioGenerationService.d.ts +11 -6
  605. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -1
  606. package/backend/dist/services/pluginAudioGenerationService.js +74 -16
  607. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -1
  608. package/backend/dist/services/pluginCacheInvalidation.d.ts +38 -0
  609. package/backend/dist/services/pluginCacheInvalidation.d.ts.map +1 -0
  610. package/backend/dist/services/pluginCacheInvalidation.js +198 -0
  611. package/backend/dist/services/pluginCacheInvalidation.js.map +1 -0
  612. package/backend/dist/services/pluginCapabilityRegistryService.d.ts +3 -3
  613. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  614. package/backend/dist/services/pluginCapabilityRegistryService.js +11 -7
  615. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  616. package/backend/dist/services/pluginCredentialsService.d.ts +9 -8
  617. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  618. package/backend/dist/services/pluginCredentialsService.js +48 -89
  619. package/backend/dist/services/pluginCredentialsService.js.map +1 -1
  620. package/backend/dist/services/pluginEmbeddingService.d.ts +8 -7
  621. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  622. package/backend/dist/services/pluginEmbeddingService.js +13 -11
  623. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  624. package/backend/dist/services/pluginImageGenerationService.d.ts +10 -8
  625. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  626. package/backend/dist/services/pluginImageGenerationService.js +119 -14
  627. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  628. package/backend/dist/services/pluginSTTService.d.ts +47 -0
  629. package/backend/dist/services/pluginSTTService.d.ts.map +1 -0
  630. package/backend/dist/services/pluginSTTService.js +199 -0
  631. package/backend/dist/services/pluginSTTService.js.map +1 -0
  632. package/backend/dist/services/pluginService.d.ts +94 -40
  633. package/backend/dist/services/pluginService.d.ts.map +1 -1
  634. package/backend/dist/services/pluginService.js +833 -275
  635. package/backend/dist/services/pluginService.js.map +1 -1
  636. package/backend/dist/services/pluginTTSService.d.ts +26 -8
  637. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  638. package/backend/dist/services/pluginTTSService.js +277 -25
  639. package/backend/dist/services/pluginTTSService.js.map +1 -1
  640. package/backend/dist/services/pluginUsageService.d.ts +4 -4
  641. package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
  642. package/backend/dist/services/pluginUsageService.js +44 -93
  643. package/backend/dist/services/pluginUsageService.js.map +1 -1
  644. package/backend/dist/services/pluginVariablesService.d.ts +14 -7
  645. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  646. package/backend/dist/services/pluginVariablesService.js +116 -81
  647. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  648. package/backend/dist/services/pluginVideoGenerationService.d.ts +19 -8
  649. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -1
  650. package/backend/dist/services/pluginVideoGenerationService.js +116 -20
  651. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -1
  652. package/backend/dist/services/preferencesService.d.ts +31 -21
  653. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  654. package/backend/dist/services/preferencesService.js +104 -102
  655. package/backend/dist/services/preferencesService.js.map +1 -1
  656. package/backend/dist/services/recoveryInventoryService.d.ts +244 -0
  657. package/backend/dist/services/recoveryInventoryService.d.ts.map +1 -0
  658. package/backend/dist/services/recoveryInventoryService.js +1436 -0
  659. package/backend/dist/services/recoveryInventoryService.js.map +1 -0
  660. package/backend/dist/services/simpleGitHubOAuth.js +3 -3
  661. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  662. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  663. package/backend/dist/services/simpleHuggingFaceOAuth.js +3 -3
  664. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  665. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -1
  666. package/backend/dist/services/systemDiagnosticsService.js +2 -2
  667. package/backend/dist/services/systemDiagnosticsService.js.map +1 -1
  668. package/backend/dist/services/systemSettingsService.d.ts +5 -0
  669. package/backend/dist/services/systemSettingsService.d.ts.map +1 -0
  670. package/backend/dist/services/systemSettingsService.js +24 -0
  671. package/backend/dist/services/systemSettingsService.js.map +1 -0
  672. package/backend/dist/services/titleGenerationService.d.ts +1 -1
  673. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  674. package/backend/dist/services/titleGenerationService.js +1 -1
  675. package/backend/dist/services/titleGenerationService.js.map +1 -1
  676. package/backend/dist/services/voiceProfileService.d.ts +44 -0
  677. package/backend/dist/services/voiceProfileService.d.ts.map +1 -0
  678. package/backend/dist/services/voiceProfileService.js +195 -0
  679. package/backend/dist/services/voiceProfileService.js.map +1 -0
  680. package/backend/dist/services/webSearchService.d.ts +7 -7
  681. package/backend/dist/services/webSearchService.d.ts.map +1 -1
  682. package/backend/dist/services/webSearchService.js +40 -35
  683. package/backend/dist/services/webSearchService.js.map +1 -1
  684. package/backend/dist/services/websocketTicketService.d.ts +39 -0
  685. package/backend/dist/services/websocketTicketService.d.ts.map +1 -0
  686. package/backend/dist/services/websocketTicketService.js +183 -0
  687. package/backend/dist/services/websocketTicketService.js.map +1 -0
  688. package/backend/dist/services/workAccessService.d.ts +3 -3
  689. package/backend/dist/services/workAccessService.d.ts.map +1 -1
  690. package/backend/dist/services/workAccessService.js +8 -16
  691. package/backend/dist/services/workAccessService.js.map +1 -1
  692. package/backend/dist/services/workAdminService.d.ts +3 -3
  693. package/backend/dist/services/workAdminService.d.ts.map +1 -1
  694. package/backend/dist/services/workAdminService.js +4 -4
  695. package/backend/dist/services/workAdminService.js.map +1 -1
  696. package/backend/dist/services/workAgentService.d.ts +25 -1
  697. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  698. package/backend/dist/services/workAgentService.js +294 -126
  699. package/backend/dist/services/workAgentService.js.map +1 -1
  700. package/backend/dist/services/workEventService.d.ts +15 -2
  701. package/backend/dist/services/workEventService.d.ts.map +1 -1
  702. package/backend/dist/services/workEventService.js +201 -3
  703. package/backend/dist/services/workEventService.js.map +1 -1
  704. package/backend/dist/services/workKubernetesDriver.d.ts +8 -7
  705. package/backend/dist/services/workKubernetesDriver.d.ts.map +1 -1
  706. package/backend/dist/services/workKubernetesDriver.js +65 -21
  707. package/backend/dist/services/workKubernetesDriver.js.map +1 -1
  708. package/backend/dist/services/workModelProviderService.d.ts +2 -2
  709. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  710. package/backend/dist/services/workModelProviderService.js +38 -34
  711. package/backend/dist/services/workModelProviderService.js.map +1 -1
  712. package/backend/dist/services/workPolicyService.d.ts +7 -7
  713. package/backend/dist/services/workPolicyService.d.ts.map +1 -1
  714. package/backend/dist/services/workPolicyService.js +50 -51
  715. package/backend/dist/services/workPolicyService.js.map +1 -1
  716. package/backend/dist/services/workPreviewProxyService.d.ts +8 -8
  717. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -1
  718. package/backend/dist/services/workPreviewProxyService.js +47 -44
  719. package/backend/dist/services/workPreviewProxyService.js.map +1 -1
  720. package/backend/dist/services/workRuntimeDriver.d.ts +21 -18
  721. package/backend/dist/services/workRuntimeDriver.d.ts.map +1 -1
  722. package/backend/dist/services/workRuntimeDriver.js +69 -20
  723. package/backend/dist/services/workRuntimeDriver.js.map +1 -1
  724. package/backend/dist/services/workRuntimeService.d.ts +18 -13
  725. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  726. package/backend/dist/services/workRuntimeService.js +438 -194
  727. package/backend/dist/services/workRuntimeService.js.map +1 -1
  728. package/backend/dist/services/workRuntimeShared.d.ts +2 -0
  729. package/backend/dist/services/workRuntimeShared.d.ts.map +1 -1
  730. package/backend/dist/services/workRuntimeShared.js.map +1 -1
  731. package/backend/dist/services/workTaskService.d.ts +42 -36
  732. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  733. package/backend/dist/services/workTaskService.js +445 -350
  734. package/backend/dist/services/workTaskService.js.map +1 -1
  735. package/backend/dist/services/workTerminalService.d.ts +1 -1
  736. package/backend/dist/services/workTerminalService.d.ts.map +1 -1
  737. package/backend/dist/services/workTerminalService.js +33 -6
  738. package/backend/dist/services/workTerminalService.js.map +1 -1
  739. package/backend/dist/storage.d.ts +72 -40
  740. package/backend/dist/storage.d.ts.map +1 -1
  741. package/backend/dist/storage.js +312 -660
  742. package/backend/dist/storage.js.map +1 -1
  743. package/backend/dist/types/index.d.ts +28 -0
  744. package/backend/dist/types/index.d.ts.map +1 -1
  745. package/backend/dist/types/index.js.map +1 -1
  746. package/backend/dist/types/work.d.ts +7 -2
  747. package/backend/dist/types/work.d.ts.map +1 -1
  748. package/backend/dist/utils/chatCancellation.d.ts +48 -0
  749. package/backend/dist/utils/chatCancellation.d.ts.map +1 -0
  750. package/backend/dist/utils/chatCancellation.js +152 -0
  751. package/backend/dist/utils/chatCancellation.js.map +1 -0
  752. package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
  753. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  754. package/backend/dist/utils/chatDocumentContext.js +11 -5
  755. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  756. package/backend/dist/utils/chatStreamCoalescer.d.ts +15 -0
  757. package/backend/dist/utils/chatStreamCoalescer.d.ts.map +1 -0
  758. package/backend/dist/utils/chatStreamCoalescer.js +59 -0
  759. package/backend/dist/utils/chatStreamCoalescer.js.map +1 -0
  760. package/backend/dist/utils/dataDirectory.d.ts +49 -0
  761. package/backend/dist/utils/dataDirectory.d.ts.map +1 -0
  762. package/backend/dist/utils/dataDirectory.js +291 -0
  763. package/backend/dist/utils/dataDirectory.js.map +1 -0
  764. package/backend/dist/utils/generationUtils.d.ts.map +1 -1
  765. package/backend/dist/utils/generationUtils.js +18 -6
  766. package/backend/dist/utils/generationUtils.js.map +1 -1
  767. package/backend/dist/utils/jwt.d.ts.map +1 -1
  768. package/backend/dist/utils/jwt.js +2 -3
  769. package/backend/dist/utils/jwt.js.map +1 -1
  770. package/backend/dist/utils/ollamaModelDefaults.d.ts.map +1 -1
  771. package/backend/dist/utils/ollamaModelDefaults.js +2 -7
  772. package/backend/dist/utils/ollamaModelDefaults.js.map +1 -1
  773. package/backend/dist/utils/ollamaStreaming.d.ts +2 -1
  774. package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -1
  775. package/backend/dist/utils/ollamaStreaming.js +49 -11
  776. package/backend/dist/utils/ollamaStreaming.js.map +1 -1
  777. package/backend/dist/utils/pluginConnectionVariables.d.ts.map +1 -1
  778. package/backend/dist/utils/pluginConnectionVariables.js +11 -3
  779. package/backend/dist/utils/pluginConnectionVariables.js.map +1 -1
  780. package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
  781. package/backend/dist/utils/pluginDefinitionTrust.js +4 -3
  782. package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
  783. package/backend/dist/utils/pluginStreaming.d.ts +2 -1
  784. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
  785. package/backend/dist/utils/pluginStreaming.js +5 -1
  786. package/backend/dist/utils/pluginStreaming.js.map +1 -1
  787. package/backend/dist/utils/pluginUpload.d.ts +1 -0
  788. package/backend/dist/utils/pluginUpload.d.ts.map +1 -1
  789. package/backend/dist/utils/pluginUpload.js +14 -4
  790. package/backend/dist/utils/pluginUpload.js.map +1 -1
  791. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  792. package/backend/dist/utils/pluginValidation.js +29 -1
  793. package/backend/dist/utils/pluginValidation.js.map +1 -1
  794. package/backend/dist/utils/sttAudioUpload.d.ts +24 -0
  795. package/backend/dist/utils/sttAudioUpload.d.ts.map +1 -0
  796. package/backend/dist/utils/sttAudioUpload.js +500 -0
  797. package/backend/dist/utils/sttAudioUpload.js.map +1 -0
  798. package/backend/dist/utils/ttsVoiceCloneUpload.d.ts +34 -0
  799. package/backend/dist/utils/ttsVoiceCloneUpload.d.ts.map +1 -0
  800. package/backend/dist/utils/ttsVoiceCloneUpload.js +224 -0
  801. package/backend/dist/utils/ttsVoiceCloneUpload.js.map +1 -0
  802. package/backend/dist/utils/websocketMessages.d.ts +2 -1
  803. package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
  804. package/backend/dist/utils/websocketMessages.js +16 -2
  805. package/backend/dist/utils/websocketMessages.js.map +1 -1
  806. package/backend/dist/websocketServer.d.ts +4 -1
  807. package/backend/dist/websocketServer.d.ts.map +1 -1
  808. package/backend/dist/websocketServer.js +290 -44
  809. package/backend/dist/websocketServer.js.map +1 -1
  810. package/backend/dist/workTerminalServer.d.ts +9 -0
  811. package/backend/dist/workTerminalServer.d.ts.map +1 -1
  812. package/backend/dist/workTerminalServer.js +221 -52
  813. package/backend/dist/workTerminalServer.js.map +1 -1
  814. package/backend/dist/worker.d.ts +2 -0
  815. package/backend/dist/worker.d.ts.map +1 -0
  816. package/backend/dist/worker.js +250 -0
  817. package/backend/dist/worker.js.map +1 -0
  818. package/backend/package.json +19 -9
  819. package/bin/cli.js +126 -99
  820. package/bin/runtime-paths.js +108 -0
  821. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  822. package/frontend/dist/artifact-runtime/framer-motion.js +5 -5
  823. package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
  824. package/frontend/dist/assets/index-Jtx9Amhz.js +16 -0
  825. package/frontend/dist/assets/index-kxtZQLV6.css +1 -0
  826. package/frontend/dist/assets/{markdown-math-ClQbWekD.css → markdown-math-ClTedVi7.css} +1 -1
  827. package/frontend/dist/index.html +18 -18
  828. package/frontend/dist/js/{ArtifactContainer-Dy2Q0iIL.js → ArtifactContainer-fZegtmva.js} +1 -1
  829. package/frontend/dist/js/{ArtifactDemoPage-K79dWshB.js → ArtifactDemoPage-BDBXYv9l.js} +1 -1
  830. package/frontend/dist/js/{ArtifactSandboxFrame-DhqLNUtY.js → ArtifactSandboxFrame-BN16NtKe.js} +3 -3
  831. package/frontend/dist/js/{ArtifactSlideOutPanel-Cl8JG7bz.js → ArtifactSlideOutPanel-x1fS85Ww.js} +1 -1
  832. package/frontend/dist/js/{Button-CTXHujOd.js → Button-BV44cTnj.js} +1 -1
  833. package/frontend/dist/js/ChatPage-C_pXh7WN.js +23 -0
  834. package/frontend/dist/js/{FirstTimeSetup-kHhRzGJ8.js → FirstTimeSetup-oRrlZnBm.js} +1 -1
  835. package/frontend/dist/js/GalleryPage-CV_vbE7X.js +1 -0
  836. package/frontend/dist/js/{HomePage-C1L8WAXL.js → HomePage-P-e7Huco.js} +1 -1
  837. package/frontend/dist/js/{LibreClawPage-Dyua8IUu.js → LibreClawPage-Cee06SUM.js} +1 -1
  838. package/frontend/dist/js/{ModelManagerModals-CuMRGUd-.js → ModelManagerModals-D7jIT3v1.js} +1 -1
  839. package/frontend/dist/js/{ModelSelector-CqHc-Ln4.js → ModelSelector-DXucbvrz.js} +1 -1
  840. package/frontend/dist/js/ModelsPage-C3_fZpMM.js +2 -0
  841. package/frontend/dist/js/NotesPage-rEIPWGIb.js +1 -0
  842. package/frontend/dist/js/{OptimizedSyntaxHighlighter-CWYUn9Oe.js → OptimizedSyntaxHighlighter-XwqZEoTf.js} +1 -1
  843. package/frontend/dist/js/{PersonasPage-D_6WBCH5.js → PersonasPage-BXtepFuD.js} +2 -2
  844. package/frontend/dist/js/PluginUsagePage-hhu8cxsu.js +1 -0
  845. package/frontend/dist/js/RichMessageContent-DkiEvdSg.js +3 -0
  846. package/frontend/dist/js/SettingsModal-BNxCtJ51.js +1 -0
  847. package/frontend/dist/js/{SettingsToggle-DLHlCDBl.js → SettingsToggle-WTa0rgvY.js} +1 -1
  848. package/frontend/dist/js/{SystemPage-BMWEet9e.js → SystemPage-BvvKFuoG.js} +1 -1
  849. package/frontend/dist/js/UserManagementPage-BccyR7si.js +1 -0
  850. package/frontend/dist/js/WorkPage-BgxrvY3I.js +6 -0
  851. package/frontend/dist/js/api-BvPDxsUQ.js +14 -0
  852. package/frontend/dist/js/appStore-DRSSjaHn.js +2 -0
  853. package/frontend/dist/js/ar-xTSvTq05.js +2 -0
  854. package/frontend/dist/js/authStore-BVykIRec.js +4 -0
  855. package/frontend/dist/js/{babel-CmENXdZw.js → babel-D24oDI9y.js} +1 -1
  856. package/frontend/dist/js/bn-iYAsohEA.js +2 -0
  857. package/frontend/dist/js/chatStore-UPp5TV_t.js +3 -0
  858. package/frontend/dist/js/{config-DkV1ka7I.js → config-BTlPm-cZ.js} +1 -1
  859. package/frontend/dist/js/cs-YBHN88Hb.js +2 -0
  860. package/frontend/dist/js/da-D7qlLy_k.js +2 -0
  861. package/frontend/dist/js/de-DV671k2c.js +2 -0
  862. package/frontend/dist/js/es-kyBgzNq-.js +2 -0
  863. package/frontend/dist/js/{estree-D5KP-qbw.js → estree-CfYahF_d.js} +1 -1
  864. package/frontend/dist/js/fr-Cw1vut7I.js +2 -0
  865. package/frontend/dist/js/hi-DWEFC024.js +2 -0
  866. package/frontend/dist/js/{html-Cm9c2akd.js → html-BJsDX1UZ.js} +1 -1
  867. package/frontend/dist/js/id-DlMHjjy0.js +2 -0
  868. package/frontend/dist/js/is-B9E_a7dG.js +2 -0
  869. package/frontend/dist/js/it-DawmVbLC.js +2 -0
  870. package/frontend/dist/js/ja-DmVvwY3W.js +2 -0
  871. package/frontend/dist/js/ko-DzOPpkVs.js +2 -0
  872. package/frontend/dist/js/{markdown-B2u7CnKN.js → markdown-GLyuUNig.js} +1 -1
  873. package/frontend/dist/js/markdown-core-BmPPZiuD.js +31 -0
  874. package/frontend/dist/js/{markdown-math-B7FlYsmr.js → markdown-math-mH7AZ_mb.js} +6 -6
  875. package/frontend/dist/js/{messageCodeStyles-DalG2j6U.js → messageCodeStyles-BHddEFP1.js} +1 -1
  876. package/frontend/dist/js/ms-DpsaOPht.js +2 -0
  877. package/frontend/dist/js/nl-B1d8W22n.js +2 -0
  878. package/frontend/dist/js/pl-nCncRVgt.js +2 -0
  879. package/frontend/dist/js/{postcss-B5WIGhAY.js → postcss-Bx9CTcIc.js} +1 -1
  880. package/frontend/dist/js/pt-DHw8fGuu.js +2 -0
  881. package/frontend/dist/js/{react-vendor-DPNXrO-8.js → react-vendor-C5yShNlM.js} +1 -1
  882. package/frontend/dist/js/{router-vendor-Ca9zqOqT.js → router-vendor-CbPDks39.js} +1 -1
  883. package/frontend/dist/js/ru-Derl_YP_.js +2 -0
  884. package/frontend/dist/js/{standalone-Dwm1daef.js → standalone-Dh56V0YW.js} +1 -1
  885. package/frontend/dist/js/sv-pJAfBVo0.js +2 -0
  886. package/frontend/dist/js/{syntax-highlight-Ca9bHsaz.js → syntax-highlight-3EEX6CGL.js} +3 -3
  887. package/frontend/dist/js/th-C_7fIGnk.js +2 -0
  888. package/frontend/dist/js/tr-CPqsJvaP.js +2 -0
  889. package/frontend/dist/js/{typescript-CwieSptM.js → typescript-DRy7A9w4.js} +1 -1
  890. package/frontend/dist/js/{ui-BnDZpjfc.js → ui-CuY4IifA.js} +2 -2
  891. package/frontend/dist/js/ui-vendor-D3Ahl1x5.js +177 -0
  892. package/frontend/dist/js/uk-3o8P_kFi.js +2 -0
  893. package/frontend/dist/js/{useTranslation-CXY69qNk.js → useTranslation-C3ei3mJq.js} +1 -1
  894. package/frontend/dist/js/{utils-BM0_0iFj.js → utils-CuC1beTY.js} +1 -1
  895. package/frontend/dist/js/{utils-vendor-1zob7nK9.js → utils-vendor-BBa8OxtB.js} +1 -1
  896. package/frontend/dist/js/vi-Dv6N7OVD.js +2 -0
  897. package/frontend/dist/js/{workApi-BOS7crs9.js → workApi-DHuYNHLf.js} +2 -2
  898. package/frontend/dist/js/{yaml-QD4znPfZ.js → yaml-DioTxVLA.js} +1 -1
  899. package/frontend/dist/js/zh-qg5iqtPi.js +2 -0
  900. package/package.json +16 -5
  901. package/plugins/huggingface.json +12 -3
  902. package/plugins/llama-cpp.json +18 -6
  903. package/plugins/longcat-audiodit.json +114 -0
  904. package/plugins/openai.json +18 -0
  905. package/frontend/dist/assets/index-BBpNbfKW.js +0 -16
  906. package/frontend/dist/assets/index-BLATyFmD.css +0 -1
  907. package/frontend/dist/js/ChatPage-BBayfMLS.js +0 -16
  908. package/frontend/dist/js/GalleryPage-By8VI39Q.js +0 -1
  909. package/frontend/dist/js/ModelsPage-ODeXhDDk.js +0 -2
  910. package/frontend/dist/js/NotesPage-CApzDjOq.js +0 -1
  911. package/frontend/dist/js/PluginUsagePage-kutS6SOd.js +0 -1
  912. package/frontend/dist/js/RichMessageContent-g6WT75Te.js +0 -3
  913. package/frontend/dist/js/SettingsModal-B7z51BCx.js +0 -1
  914. package/frontend/dist/js/UserManagementPage-D08lM51c.js +0 -1
  915. package/frontend/dist/js/WorkPage-DdVLefsK.js +0 -6
  916. package/frontend/dist/js/api-CLEmGcEh.js +0 -14
  917. package/frontend/dist/js/appStore-CGdhvp9P.js +0 -2
  918. package/frontend/dist/js/ar-BTmB2WVm.js +0 -2
  919. package/frontend/dist/js/authStore-Dh3beEOq.js +0 -4
  920. package/frontend/dist/js/bn-CQnH7YVT.js +0 -2
  921. package/frontend/dist/js/chatStore-CDeYWL_q.js +0 -3
  922. package/frontend/dist/js/cs-oTTZkQXr.js +0 -2
  923. package/frontend/dist/js/da-Br0gB6J6.js +0 -2
  924. package/frontend/dist/js/de-DE2iztTF.js +0 -2
  925. package/frontend/dist/js/es-DgthfVtl.js +0 -2
  926. package/frontend/dist/js/fr-BjxjFwPh.js +0 -2
  927. package/frontend/dist/js/hi-D1q7E-9N.js +0 -2
  928. package/frontend/dist/js/id-CDJZqLTF.js +0 -2
  929. package/frontend/dist/js/is-BU7Um_Tq.js +0 -2
  930. package/frontend/dist/js/it-CdAxr8P_.js +0 -2
  931. package/frontend/dist/js/ja-BLbQwz9u.js +0 -2
  932. package/frontend/dist/js/ko-CY5lpkAe.js +0 -2
  933. package/frontend/dist/js/markdown-core-DHnR5Hw8.js +0 -16
  934. package/frontend/dist/js/ms-tQ8AYXEQ.js +0 -2
  935. package/frontend/dist/js/nl-CRNi2oWT.js +0 -2
  936. package/frontend/dist/js/pl-CWtFRS_W.js +0 -2
  937. package/frontend/dist/js/pt-C7SPoLF8.js +0 -2
  938. package/frontend/dist/js/ru-Dz4AX8xc.js +0 -2
  939. package/frontend/dist/js/sv-ETy5-boa.js +0 -2
  940. package/frontend/dist/js/th-DpuMqvxU.js +0 -2
  941. package/frontend/dist/js/tr-C-1AYAqg.js +0 -2
  942. package/frontend/dist/js/ui-vendor-xUzKqAXI.js +0 -177
  943. package/frontend/dist/js/uk-CyS680gr.js +0 -2
  944. package/frontend/dist/js/vi-BG8HuiTz.js +0 -2
  945. package/frontend/dist/js/zh-NCs2mkHj.js +0 -2
@@ -5,27 +5,39 @@
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
6
6
  */
7
7
  import express from 'express';
8
- import rateLimit from 'express-rate-limit';
8
+ import multer from 'multer';
9
+ import rateLimit from '../middleware/sharedRateLimit.js';
9
10
  import { authenticate } from '../middleware/auth.js';
10
11
  import galleryService from '../services/galleryService.js';
11
12
  import mediaGenerationJobService from '../services/mediaGenerationJobService.js';
12
13
  import pluginService from '../services/pluginService.js';
14
+ import { AudioGenerationConcurrencyError } from '../services/pluginAudioGenerationService.js';
15
+ import { VideoCancellationUnsupportedError } from '../services/pluginVideoGenerationService.js';
16
+ import voiceProfileService from '../services/voiceProfileService.js';
17
+ import { TTSConcurrencyError, TTSProviderResponseError, } from '../services/pluginTTSService.js';
13
18
  import { createLogger } from '../utils/logger.js';
19
+ import { parseTTSVoiceCloneUpload, reserveTTSVoiceCloneUpload, TTS_VOICE_CLONE_GLOBAL_MAX_AUDIO_BYTES, TTSVoiceCloneConcurrencyError, TTSVoiceCloneUploadError, validateTTSVoiceCloneAudio, } from '../utils/ttsVoiceCloneUpload.js';
20
+ import { getDurableJobRuntime, VIDEO_RESUME_IDEMPOTENCY_SCOPE, VIDEO_SUBMIT_IDEMPOTENCY_SCOPE, } from '../platform/jobs/index.js';
21
+ import { combineAbortSignals, SharedCapacityUnavailableError, } from '../platform/coordination/sharedAdmission.js';
14
22
  const logger = createLogger('routes:media');
15
23
  const router = express.Router();
24
+ const videoJobLocks = new Map();
16
25
  const generationRateLimiter = rateLimit({
26
+ keyPrefix: 'media-generate',
17
27
  windowMs: 60000,
18
28
  max: 10,
19
29
  standardHeaders: true,
20
30
  legacyHeaders: false,
21
31
  });
22
32
  const pollingRateLimiter = rateLimit({
33
+ keyPrefix: 'media-poll',
23
34
  windowMs: 60000,
24
35
  max: 60,
25
36
  standardHeaders: true,
26
37
  legacyHeaders: false,
27
38
  });
28
39
  const galleryRateLimiter = rateLimit({
40
+ keyPrefix: 'media-gallery',
29
41
  windowMs: 60000,
30
42
  max: 120,
31
43
  standardHeaders: true,
@@ -33,6 +45,7 @@ const galleryRateLimiter = rateLimit({
33
45
  });
34
46
  // Umbrella limit ahead of authentication; per-route limiters below stay tighter.
35
47
  const routerRateLimiter = rateLimit({
48
+ keyPrefix: 'media-router',
36
49
  windowMs: 60000,
37
50
  max: 240,
38
51
  standardHeaders: true,
@@ -45,6 +58,34 @@ function userId(req) {
45
58
  throw new Error('Authenticated user context is required');
46
59
  return req.user.userId;
47
60
  }
61
+ function requestAbortSignal(req, res) {
62
+ const controller = new AbortController();
63
+ const abort = () => {
64
+ if (!controller.signal.aborted) {
65
+ controller.abort(new Error('Media client disconnected'));
66
+ }
67
+ };
68
+ const abortOnResponseClose = () => {
69
+ if (!res.writableEnded)
70
+ abort();
71
+ };
72
+ req.once?.('aborted', abort);
73
+ res.once?.('close', abortOnResponseClose);
74
+ if (req.aborted || res.destroyed)
75
+ abort();
76
+ return {
77
+ signal: controller.signal,
78
+ cleanup: () => {
79
+ req.off?.('aborted', abort);
80
+ res.off?.('close', abortOnResponseClose);
81
+ },
82
+ };
83
+ }
84
+ const providerResponseStatus = (status) => status === 401 || status === 403
85
+ ? 502
86
+ : status >= 400 && status < 500
87
+ ? status
88
+ : 502;
48
89
  router.get('/models', async (req, res) => {
49
90
  try {
50
91
  const id = userId(req);
@@ -53,17 +94,18 @@ router.get('/models', async (req, res) => {
53
94
  pluginService.refreshStaleCapabilityModels('tts', id),
54
95
  pluginService.refreshStaleCapabilityModels('audio', id),
55
96
  ]);
97
+ const [videoModels, audioModels, ttsModels] = await Promise.all([
98
+ pluginService.getAvailableVideoGenModels(id),
99
+ pluginService.getAvailableAudioGenModels(id),
100
+ pluginService.getAvailableTTSModels(id),
101
+ ]);
56
102
  res.json({
57
103
  success: true,
58
104
  data: {
59
- video: pluginService.getAvailableVideoGenModels(id),
105
+ video: videoModels,
60
106
  audio: [
61
- ...pluginService
62
- .getAvailableAudioGenModels(id)
63
- .map(model => ({ ...model, mode: 'sound' })),
64
- ...pluginService
65
- .getAvailableTTSModels(id)
66
- .map(model => ({ ...model, mode: 'speech' })),
107
+ ...audioModels.map(model => ({ ...model, mode: 'sound' })),
108
+ ...ttsModels.map(model => ({ ...model, mode: 'speech' })),
67
109
  ],
68
110
  },
69
111
  });
@@ -77,6 +119,7 @@ router.get('/models', async (req, res) => {
77
119
  }
78
120
  });
79
121
  router.post('/audio/generate', generationRateLimiter, async (req, res) => {
122
+ const requestAbort = requestAbortSignal(req, res);
80
123
  try {
81
124
  const { model, pluginId, input, voice, response_format, speed } = req.body;
82
125
  if (typeof model !== 'string' ||
@@ -90,17 +133,26 @@ router.post('/audio/generate', generationRateLimiter, async (req, res) => {
90
133
  return;
91
134
  }
92
135
  const id = userId(req);
93
- const format = isAudioFormat(response_format) ? response_format : 'mp3';
136
+ const selectedPlugin = await pluginService.getPluginForTTS(model, pluginId, id);
137
+ const configuredFormat = selectedPlugin?.capabilities?.tts?.config?.default_format;
138
+ const format = isAudioFormat(response_format)
139
+ ? response_format
140
+ : isAudioFormat(configuredFormat)
141
+ ? configuredFormat
142
+ : 'mp3';
94
143
  const audio = await pluginService.executeTTSRequest(model, input.trim(), {
95
144
  pluginId,
96
145
  userId: id,
97
146
  ...(typeof voice === 'string' && voice ? { voice } : {}),
98
147
  ...(typeof speed === 'number' ? { speed } : {}),
99
148
  response_format: format,
149
+ signal: requestAbort.signal,
100
150
  });
151
+ if (requestAbort.signal.aborted)
152
+ return;
101
153
  const mimeType = audioMimeType(format);
102
154
  const mediaData = `data:${mimeType};base64,${audio.toString('base64')}`;
103
- const saved = galleryService.saveMedia(id, {
155
+ const saved = await galleryService.saveMedia(id, {
104
156
  kind: 'audio',
105
157
  prompt: input.trim(),
106
158
  model,
@@ -114,14 +166,213 @@ router.post('/audio/generate', generationRateLimiter, async (req, res) => {
114
166
  res.json({ success: true, data: publicMedia(saved) });
115
167
  }
116
168
  catch (error) {
169
+ if (requestAbort.signal.aborted)
170
+ return;
171
+ if (error instanceof SharedCapacityUnavailableError) {
172
+ res.status(503).json({
173
+ success: false,
174
+ message: 'Media admission is temporarily unavailable',
175
+ });
176
+ return;
177
+ }
178
+ if (error instanceof TTSConcurrencyError) {
179
+ res.status(429).json({ success: false, message: error.message });
180
+ return;
181
+ }
182
+ if (error instanceof TTSProviderResponseError) {
183
+ logger.warn(`TTS provider returned status ${error.providerStatus} during gallery generation`);
184
+ res.status(providerResponseStatus(error.providerStatus)).json({
185
+ success: false,
186
+ message: error.message,
187
+ });
188
+ return;
189
+ }
117
190
  logger.error('Audio generation failed:', error);
118
- res.status(500).json({
191
+ const message = error instanceof Error ? error.message : 'Audio generation failed';
192
+ res.status(/exceeds maximum length/i.test(message) ? 400 : 500).json({
119
193
  success: false,
120
- message: error instanceof Error ? error.message : 'Audio generation failed',
194
+ message,
195
+ });
196
+ }
197
+ finally {
198
+ requestAbort.cleanup();
199
+ }
200
+ });
201
+ router.post('/audio/voice-clone', generationRateLimiter, async (req, res) => {
202
+ const requestAbort = requestAbortSignal(req, res);
203
+ let uploadSlot;
204
+ try {
205
+ const id = userId(req);
206
+ uploadSlot = await reserveTTSVoiceCloneUpload(id);
207
+ const operationSignal = combineAbortSignals(requestAbort.signal, uploadSlot.signal);
208
+ await parseTTSVoiceCloneUpload(req, res, operationSignal);
209
+ const { model, pluginId, input, reference_text, response_format, saveVoiceName, consentToStore, } = req.body || {};
210
+ if (typeof model !== 'string' ||
211
+ typeof pluginId !== 'string' ||
212
+ typeof input !== 'string' ||
213
+ input.trim().length === 0) {
214
+ res.status(400).json({
215
+ success: false,
216
+ message: 'model, pluginId, and input are required',
217
+ });
218
+ return;
219
+ }
220
+ if (reference_text !== undefined && typeof reference_text !== 'string') {
221
+ res.status(400).json({
222
+ success: false,
223
+ message: 'reference_text must be a string when provided',
224
+ });
225
+ return;
226
+ }
227
+ if (saveVoiceName !== undefined &&
228
+ (typeof saveVoiceName !== 'string' || saveVoiceName.trim().length === 0)) {
229
+ res.status(400).json({
230
+ success: false,
231
+ message: 'saveVoiceName must be a non-empty string when provided',
232
+ });
233
+ return;
234
+ }
235
+ if (saveVoiceName !== undefined && consentToStore !== 'true') {
236
+ res.status(400).json({
237
+ success: false,
238
+ message: 'Explicit consent is required to save a reusable voice',
239
+ });
240
+ return;
241
+ }
242
+ if (consentToStore === 'true' && saveVoiceName === undefined) {
243
+ res.status(400).json({
244
+ success: false,
245
+ message: 'A voice name is required when consentToStore is true',
246
+ });
247
+ return;
248
+ }
249
+ const selectedPlugin = await pluginService.getPluginForTTS(model, pluginId, id);
250
+ const config = selectedPlugin?.capabilities?.tts?.config;
251
+ if (!selectedPlugin || !config?.supports_voice_cloning) {
252
+ res.status(400).json({
253
+ success: false,
254
+ message: 'The selected TTS model does not support voice cloning',
255
+ });
256
+ return;
257
+ }
258
+ if (config.clone_requires_transcript && !reference_text?.trim()) {
259
+ res.status(400).json({
260
+ success: false,
261
+ message: 'An exact reference transcript is required',
262
+ });
263
+ return;
264
+ }
265
+ const format = isAudioFormat(response_format)
266
+ ? response_format
267
+ : isAudioFormat(config.default_format)
268
+ ? config.default_format
269
+ : 'wav';
270
+ const referenceAudio = validateTTSVoiceCloneAudio(req.file, config);
271
+ const profileInput = saveVoiceName !== undefined
272
+ ? {
273
+ name: saveVoiceName,
274
+ pluginId: selectedPlugin.id,
275
+ model,
276
+ routingFingerprint: await pluginService.getCredentialRoutingAuthFingerprint(selectedPlugin, id),
277
+ referenceAudio,
278
+ ...(reference_text?.trim()
279
+ ? { referenceText: reference_text.trim() }
280
+ : {}),
281
+ }
282
+ : null;
283
+ if (profileInput)
284
+ await voiceProfileService.validateCreate(id, profileInput);
285
+ const audio = await pluginService.executeVoiceCloneRequest(model, input.trim(), referenceAudio, {
286
+ pluginId,
287
+ userId: id,
288
+ referenceText: reference_text?.trim() || undefined,
289
+ response_format: format,
290
+ signal: operationSignal,
291
+ });
292
+ if (operationSignal.aborted)
293
+ return;
294
+ const mimeType = audioMimeType(format);
295
+ const saved = await galleryService.saveMedia(id, {
296
+ kind: 'audio',
297
+ prompt: input.trim(),
298
+ model,
299
+ pluginId,
300
+ mediaData: `data:${mimeType};base64,${audio.toString('base64')}`,
301
+ mimeType,
302
+ metadata: { mode: 'speech', voiceClone: true, format },
121
303
  });
304
+ if (!saved)
305
+ throw new Error('Failed to save generated audio');
306
+ // Persist only after successful provider and gallery generation. If the
307
+ // final atomic profile check loses a race, roll back the gallery item so
308
+ // the caller never receives a partial success.
309
+ if (profileInput) {
310
+ try {
311
+ await voiceProfileService.create(id, profileInput);
312
+ }
313
+ catch (error) {
314
+ await galleryService.deleteMedia(saved.id, id);
315
+ throw error;
316
+ }
317
+ }
318
+ res.json({ success: true, data: publicMedia(saved) });
319
+ }
320
+ catch (error) {
321
+ if (requestAbort.signal.aborted)
322
+ return;
323
+ if (error instanceof SharedCapacityUnavailableError) {
324
+ res.status(503).json({
325
+ success: false,
326
+ message: 'Media admission is temporarily unavailable',
327
+ });
328
+ return;
329
+ }
330
+ if (error instanceof TTSConcurrencyError) {
331
+ res.status(429).json({ success: false, message: error.message });
332
+ return;
333
+ }
334
+ if (error instanceof TTSVoiceCloneConcurrencyError) {
335
+ res.status(429).json({ success: false, message: error.message });
336
+ return;
337
+ }
338
+ if (error instanceof multer.MulterError) {
339
+ logger.warn(`Gallery voice-clone upload failed: ${error.code}`);
340
+ res.status(400).json({
341
+ success: false,
342
+ message: error.code === 'LIMIT_FILE_SIZE'
343
+ ? `Reference audio exceeds the global maximum size of ${TTS_VOICE_CLONE_GLOBAL_MAX_AUDIO_BYTES / (1024 * 1024)} MiB`
344
+ : `Invalid voice clone upload: ${error.message}`,
345
+ });
346
+ return;
347
+ }
348
+ if (error instanceof TTSVoiceCloneUploadError) {
349
+ logger.warn(`Gallery voice-clone upload failed: ${error.code}`);
350
+ res.status(400).json({ success: false, message: error.message });
351
+ return;
352
+ }
353
+ if (error instanceof TTSProviderResponseError) {
354
+ logger.warn(`TTS provider returned status ${error.providerStatus} during gallery voice cloning`);
355
+ res.status(providerResponseStatus(error.providerStatus)).json({
356
+ success: false,
357
+ message: error.message,
358
+ });
359
+ return;
360
+ }
361
+ logger.error('Voice-cloned audio generation failed:', error);
362
+ const message = error instanceof Error ? error.message : 'Voice cloning failed';
363
+ res
364
+ .status(/required|maximum|at most|limited to|already exists|unsupported|does not support|no voice clone endpoint/i.test(message)
365
+ ? 400
366
+ : 500)
367
+ .json({ success: false, message });
368
+ }
369
+ finally {
370
+ await uploadSlot?.release();
371
+ requestAbort.cleanup();
122
372
  }
123
373
  });
124
374
  router.post('/sound/generate', generationRateLimiter, async (req, res) => {
375
+ const requestAbort = requestAbortSignal(req, res);
125
376
  try {
126
377
  const { model, pluginId, prompt, voice, format } = req.body;
127
378
  if (typeof model !== 'string' ||
@@ -140,9 +391,12 @@ router.post('/sound/generate', generationRateLimiter, async (req, res) => {
140
391
  userId: id,
141
392
  ...(typeof voice === 'string' && voice ? { voice } : {}),
142
393
  ...(isGeneratedAudioFormat(format) ? { format } : {}),
394
+ signal: requestAbort.signal,
143
395
  });
396
+ if (requestAbort.signal.aborted)
397
+ return;
144
398
  const mediaData = `data:${generated.mimeType};base64,${generated.audio.toString('base64')}`;
145
- const saved = galleryService.saveMedia(id, {
399
+ const saved = await galleryService.saveMedia(id, {
146
400
  kind: 'audio',
147
401
  prompt: prompt.trim(),
148
402
  model,
@@ -161,14 +415,31 @@ router.post('/sound/generate', generationRateLimiter, async (req, res) => {
161
415
  res.json({ success: true, data: publicMedia(saved) });
162
416
  }
163
417
  catch (error) {
418
+ if (requestAbort.signal.aborted)
419
+ return;
420
+ if (error instanceof SharedCapacityUnavailableError) {
421
+ res.status(503).json({
422
+ success: false,
423
+ message: 'Media admission is temporarily unavailable',
424
+ });
425
+ return;
426
+ }
427
+ if (error instanceof AudioGenerationConcurrencyError) {
428
+ res.status(429).json({ success: false, message: error.message });
429
+ return;
430
+ }
164
431
  logger.error('Audio generation failed:', error);
165
432
  res.status(500).json({
166
433
  success: false,
167
434
  message: error instanceof Error ? error.message : 'Audio generation failed',
168
435
  });
169
436
  }
437
+ finally {
438
+ requestAbort.cleanup();
439
+ }
170
440
  });
171
441
  router.post('/video/generate', generationRateLimiter, async (req, res) => {
442
+ const requestAbort = requestAbortSignal(req, res);
172
443
  try {
173
444
  const { model, pluginId, prompt, duration, resolution, aspect_ratio, generate_audio, } = req.body;
174
445
  if (typeof model !== 'string' ||
@@ -192,109 +463,266 @@ router.post('/video/generate', generationRateLimiter, async (req, res) => {
192
463
  ? { generateAudio: generate_audio }
193
464
  : {}),
194
465
  };
195
- const submitted = await pluginService.submitVideoGenRequest(model, prompt.trim(), { pluginId, userId: id, ...options });
196
- const job = mediaGenerationJobService.create(id, {
197
- providerJobId: submitted.providerJobId,
466
+ // The prepared row and submission job are one transaction. Provider
467
+ // acceptance runs in the external worker with a stable idempotency key.
468
+ const job = await mediaGenerationJobService.queueVideoSubmission(id, {
198
469
  pluginId,
199
470
  model,
200
471
  prompt: prompt.trim(),
201
472
  options,
202
473
  });
203
- res.status(202).json({ success: true, data: publicJob(job) });
474
+ if (requestAbort.signal.aborted)
475
+ return;
476
+ res.status(202).json({ success: true, data: await publicJob(job, id) });
204
477
  }
205
478
  catch (error) {
479
+ if (requestAbort.signal.aborted)
480
+ return;
206
481
  logger.error('Video generation submission failed:', error);
207
482
  res.status(500).json({
208
483
  success: false,
209
484
  message: error instanceof Error ? error.message : 'Video generation failed',
210
485
  });
211
486
  }
487
+ finally {
488
+ requestAbort.cleanup();
489
+ }
212
490
  });
213
- router.get('/video/jobs/:jobId', pollingRateLimiter, async (req, res) => {
491
+ router.get('/video/jobs', pollingRateLimiter, async (req, res) => {
492
+ const id = userId(req);
493
+ const requestedLimit = Number(req.query.limit);
494
+ const jobs = await mediaGenerationJobService.list(id, {
495
+ limit: Number.isInteger(requestedLimit) ? requestedLimit : 20,
496
+ activeOnly: req.query.active === 'true',
497
+ });
498
+ res.json({
499
+ success: true,
500
+ data: { jobs: await Promise.all(jobs.map(job => publicJob(job, id))) },
501
+ });
502
+ });
503
+ async function resumeVideoJob(req, res) {
504
+ const requestAbort = requestAbortSignal(req, res);
505
+ let releaseJobLock;
214
506
  try {
215
507
  const id = userId(req);
216
508
  const jobId = Array.isArray(req.params.jobId)
217
509
  ? req.params.jobId[0]
218
510
  : req.params.jobId;
219
- const job = mediaGenerationJobService.get(jobId, id);
511
+ releaseJobLock = await acquireVideoJobLock(`${id}:${jobId}`);
512
+ if (requestAbort.signal.aborted)
513
+ return;
514
+ // Reload only after acquiring the lock: another tab may have completed and
515
+ // persisted this job while this request waited.
516
+ const job = await mediaGenerationJobService.get(jobId, id);
220
517
  if (!job) {
221
- res
222
- .status(404)
223
- .json({ success: false, message: 'Video job not found' });
518
+ res.status(404).json({ success: false, message: 'Video job not found' });
224
519
  return;
225
520
  }
226
521
  if (job.status === 'completed') {
227
522
  res.json({
228
523
  success: true,
229
524
  data: {
230
- ...publicJob(job),
231
- media: publicMedia(galleryService.getMediaItem(job.galleryId, id)),
525
+ ...(await publicJob(job, id)),
526
+ media: publicMedia(await galleryService.getMediaItem(job.galleryId, id)),
232
527
  },
233
528
  });
234
529
  return;
235
530
  }
236
531
  if (job.status === 'failed') {
237
- res.json({ success: true, data: publicJob(job) });
532
+ res.json({ success: true, data: await publicJob(job, id) });
533
+ return;
534
+ }
535
+ const durable = (await getDurableJobRuntime().service.getByIdempotency(id, VIDEO_RESUME_IDEMPOTENCY_SCOPE, job.id)) ||
536
+ (await getDurableJobRuntime().service.getByIdempotency(id, VIDEO_SUBMIT_IDEMPOTENCY_SCOPE, job.id));
537
+ if (durable?.state === 'queued' || durable?.state === 'running') {
538
+ res.json({
539
+ success: true,
540
+ data: {
541
+ ...(await publicJob(job, id)),
542
+ durable: {
543
+ id: durable.id,
544
+ state: durable.state,
545
+ progressCurrent: durable.progressCurrent,
546
+ progressTotal: durable.progressTotal,
547
+ progressMessage: durable.progressMessage,
548
+ },
549
+ },
550
+ });
551
+ return;
552
+ }
553
+ if (durable?.state === 'dead_letter') {
554
+ await mediaGenerationJobService.update(job.id, id, 'failed', {
555
+ error: durable.errorSummary || 'Video processing failed',
556
+ });
557
+ res.json({
558
+ success: true,
559
+ data: {
560
+ ...(await publicJob(job, id)),
561
+ status: 'failed',
562
+ error: durable.errorSummary || 'Video processing failed',
563
+ },
564
+ });
565
+ return;
566
+ }
567
+ if (process.env.LIBRE_PLATFORM_MODE === 'team') {
568
+ // Team media work belongs exclusively to the external durable worker.
569
+ // A polling app replica must never become an unleased provider worker.
570
+ res.status(202).json({
571
+ success: true,
572
+ data: {
573
+ ...(await publicJob(job, id)),
574
+ durable: durable
575
+ ? { id: durable.id, state: durable.state }
576
+ : undefined,
577
+ },
578
+ });
238
579
  return;
239
580
  }
240
- const status = await pluginService.pollVideoGenRequest(job.model, job.providerJobId, job.pluginId, id);
581
+ const status = await pluginService.pollVideoGenRequest(job.model, job.providerJobId, job.pluginId, id, requestAbort.signal);
582
+ if (requestAbort.signal.aborted)
583
+ return;
241
584
  if (status.status === 'failed') {
242
- mediaGenerationJobService.update(job.id, id, 'failed', {
585
+ await mediaGenerationJobService.update(job.id, id, 'failed', {
243
586
  error: status.error || 'Video provider reported failure',
244
587
  });
245
588
  res.json({
246
589
  success: true,
247
- data: { ...publicJob(job), status: 'failed', error: status.error },
590
+ data: {
591
+ ...(await publicJob(job, id)),
592
+ status: 'failed',
593
+ error: status.error,
594
+ },
248
595
  });
249
596
  return;
250
597
  }
251
598
  if (status.status !== 'completed') {
252
- mediaGenerationJobService.update(job.id, id, status.status);
599
+ await mediaGenerationJobService.update(job.id, id, status.status);
253
600
  res.json({
254
601
  success: true,
255
- data: { ...publicJob(job), status: status.status },
602
+ data: { ...(await publicJob(job, id)), status: status.status },
256
603
  });
257
604
  return;
258
605
  }
259
- const downloaded = await pluginService.downloadVideoGenResult(job.model, job.providerJobId, job.pluginId, id);
260
- const media = galleryService.saveMedia(id, {
261
- kind: 'video',
262
- prompt: job.prompt,
263
- model: job.model,
264
- pluginId: job.pluginId,
606
+ const downloaded = await pluginService.downloadVideoGenResult(job.model, job.providerJobId, job.pluginId, id, requestAbort.signal);
607
+ if (requestAbort.signal.aborted)
608
+ return;
609
+ const media = await mediaGenerationJobService.completeWithMedia(job.id, id, {
265
610
  mediaData: `data:${downloaded.mimeType};base64,${downloaded.video.toString('base64')}`,
266
611
  mimeType: downloaded.mimeType,
267
612
  metadata: { ...job.options, usage: status.usage || null },
268
613
  });
269
- if (!media)
270
- throw new Error('Failed to save generated video');
271
- mediaGenerationJobService.update(job.id, id, 'completed', {
272
- galleryId: media.id,
273
- });
274
614
  res.json({
275
615
  success: true,
276
616
  data: {
277
- ...publicJob(job),
617
+ ...(await publicJob(job, id)),
278
618
  status: 'completed',
279
619
  media: publicMedia(media),
280
620
  },
281
621
  });
282
622
  }
283
623
  catch (error) {
624
+ if (requestAbort.signal.aborted)
625
+ return;
284
626
  logger.error('Video generation polling failed:', error);
285
627
  res.status(500).json({
286
628
  success: false,
287
629
  message: error instanceof Error ? error.message : 'Video polling failed',
288
630
  });
289
631
  }
632
+ finally {
633
+ releaseJobLock?.();
634
+ requestAbort.cleanup();
635
+ }
636
+ }
637
+ router.get('/video/jobs/:jobId', pollingRateLimiter, resumeVideoJob);
638
+ router.post('/video/jobs/:jobId/resume', pollingRateLimiter, resumeVideoJob);
639
+ router.delete('/video/jobs/:jobId', generationRateLimiter, async (req, res) => {
640
+ const requestAbort = requestAbortSignal(req, res);
641
+ let releaseJobLock;
642
+ try {
643
+ const id = userId(req);
644
+ const jobId = Array.isArray(req.params.jobId)
645
+ ? req.params.jobId[0]
646
+ : req.params.jobId;
647
+ releaseJobLock = await acquireVideoJobLock(`${id}:${jobId}`);
648
+ if (requestAbort.signal.aborted)
649
+ return;
650
+ const job = await mediaGenerationJobService.get(jobId, id);
651
+ if (!job) {
652
+ res
653
+ .status(404)
654
+ .json({ success: false, message: 'Video job not found' });
655
+ return;
656
+ }
657
+ if (job.status === 'completed' || job.status === 'failed') {
658
+ res.status(409).json({
659
+ success: false,
660
+ message: 'Only an active video job can be cancelled',
661
+ });
662
+ return;
663
+ }
664
+ if (job.providerJobId === 'libre:prepared') {
665
+ res.status(409).json({
666
+ success: false,
667
+ message: 'The provider submission is still being reconciled',
668
+ });
669
+ return;
670
+ }
671
+ if (!(await pluginService.canCancelVideoGenRequest(job.model, job.pluginId, id))) {
672
+ res.status(409).json({
673
+ success: false,
674
+ message: 'The selected video provider does not declare job cancellation',
675
+ });
676
+ return;
677
+ }
678
+ await pluginService.cancelVideoGenRequest(job.model, job.providerJobId, job.pluginId, id, requestAbort.signal);
679
+ const durable = await getDurableJobRuntime().service.getByIdempotency(id, VIDEO_RESUME_IDEMPOTENCY_SCOPE, job.id);
680
+ if (durable &&
681
+ (durable.state === 'queued' || durable.state === 'running')) {
682
+ await getDurableJobRuntime().service.cancel(durable.id, id, 'user-requested');
683
+ }
684
+ await mediaGenerationJobService.remove(job.id, id);
685
+ if (requestAbort.signal.aborted)
686
+ return;
687
+ res.json({ success: true });
688
+ }
689
+ catch (error) {
690
+ if (requestAbort.signal.aborted)
691
+ return;
692
+ const unsupported = error instanceof VideoCancellationUnsupportedError;
693
+ logger.error('Video generation cancellation failed:', error);
694
+ res.status(unsupported ? 409 : 500).json({
695
+ success: false,
696
+ message: error instanceof Error ? error.message : 'Video cancellation failed',
697
+ });
698
+ }
699
+ finally {
700
+ releaseJobLock?.();
701
+ requestAbort.cleanup();
702
+ }
290
703
  });
291
- router.get('/gallery', galleryRateLimiter, (req, res) => {
704
+ async function acquireVideoJobLock(key) {
705
+ const previous = videoJobLocks.get(key) || Promise.resolve();
706
+ let release = () => { };
707
+ const held = new Promise(resolve => {
708
+ release = resolve;
709
+ });
710
+ const tail = previous.catch(() => undefined).then(() => held);
711
+ videoJobLocks.set(key, tail);
712
+ await previous.catch(() => undefined);
713
+ return () => {
714
+ release();
715
+ if (videoJobLocks.get(key) === tail)
716
+ videoJobLocks.delete(key);
717
+ };
718
+ }
719
+ router.get('/gallery', galleryRateLimiter, async (req, res) => {
292
720
  const kind = req.query.kind;
293
721
  if (kind && !['image', 'video', 'audio'].includes(String(kind))) {
294
722
  res.status(400).json({ success: false, message: 'Invalid media kind' });
295
723
  return;
296
724
  }
297
- const result = galleryService.getMedia(userId(req), {
725
+ const result = await galleryService.getMedia(userId(req), {
298
726
  limit: Number(req.query.limit) || 20,
299
727
  offset: Number(req.query.offset) || 0,
300
728
  ...(kind ? { kind: kind } : {}),
@@ -304,59 +732,73 @@ router.get('/gallery', galleryRateLimiter, (req, res) => {
304
732
  data: { ...result, media: result.media.map(publicMedia) },
305
733
  });
306
734
  });
307
- router.get('/gallery/:mediaId/content', galleryRateLimiter, (req, res) => {
735
+ router.get('/gallery/:mediaId/content', galleryRateLimiter, async (req, res) => {
736
+ const requestAbort = requestAbortSignal(req, res);
308
737
  const mediaId = Array.isArray(req.params.mediaId)
309
738
  ? req.params.mediaId[0]
310
739
  : req.params.mediaId;
311
- const item = galleryService.getMediaItem(mediaId, userId(req));
312
- if (!item) {
313
- res.status(404).json({ success: false, message: 'Media not found' });
314
- return;
315
- }
316
- const match = /^data:([a-z0-9.+-]+\/[a-z0-9.+-]+);base64,([a-z0-9+/]+={0,2})$/i.exec(item.mediaData);
317
- if (match) {
318
- const encodedMimeType = match[1].toLowerCase();
319
- if (encodedMimeType !== item.mimeType.toLowerCase() ||
320
- !isSafeMediaMimeType(item.kind, encodedMimeType)) {
740
+ try {
741
+ const rawRange = req.headers.range;
742
+ let range;
743
+ if (rawRange) {
744
+ const match = /^bytes=(\d+)-(\d*)$/.exec(rawRange.trim());
745
+ if (!match) {
746
+ res.status(416).set('Accept-Ranges', 'bytes').end();
747
+ return;
748
+ }
749
+ range = {
750
+ start: Number(match[1]),
751
+ ...(match[2] ? { end: Number(match[2]) } : {}),
752
+ };
753
+ }
754
+ const opened = await galleryService.openMediaContent(mediaId, userId(req), range, requestAbort.signal);
755
+ if (!opened) {
756
+ res.status(404).json({ success: false, message: 'Media not found' });
757
+ return;
758
+ }
759
+ if (!isSafeMediaMimeType(opened.record.kind, opened.record.mimeType)) {
321
760
  res
322
761
  .status(422)
323
762
  .json({ success: false, message: 'Stored media type is invalid' });
324
763
  return;
325
764
  }
326
- const data = Buffer.from(match[2], 'base64');
327
- if (data.length > 200 * 1024 * 1024) {
328
- res.status(413).json({ success: false, message: 'Media is too large' });
329
- return;
330
- }
765
+ res.status(opened.content.range ? 206 : 200);
331
766
  res.set({
332
- 'Content-Type': encodedMimeType,
333
- 'Content-Length': String(data.length),
767
+ 'Content-Type': opened.record.mimeType,
768
+ 'Content-Length': String(opened.content.range?.length ?? opened.content.descriptor.size),
769
+ 'Accept-Ranges': 'bytes',
334
770
  'Cache-Control': 'private, max-age=300',
335
771
  'Content-Security-Policy': "default-src 'none'; sandbox",
336
772
  'X-Content-Type-Options': 'nosniff',
337
773
  });
338
- res.send(data);
339
- return;
774
+ if (opened.content.range) {
775
+ res.set('Content-Range', `bytes ${opened.content.range.start}-${opened.content.range.end}/${opened.content.range.total}`);
776
+ }
777
+ opened.content.body.on('error', error => res.destroy(error));
778
+ opened.content.body.pipe(res);
340
779
  }
341
- try {
342
- const url = new URL(item.mediaData);
343
- if (item.kind !== 'image' ||
344
- (url.protocol !== 'http:' && url.protocol !== 'https:')) {
345
- throw new Error();
780
+ catch (error) {
781
+ if (requestAbort.signal.aborted)
782
+ return;
783
+ if (error &&
784
+ typeof error === 'object' &&
785
+ 'code' in error &&
786
+ error.code === 'invalid-range') {
787
+ res.status(416).set('Accept-Ranges', 'bytes').end();
788
+ return;
346
789
  }
347
- res.redirect(302, url.toString());
790
+ logger.error('Gallery media stream failed:', error);
791
+ res.status(500).json({ success: false, message: 'Failed to read media' });
348
792
  }
349
- catch {
350
- res
351
- .status(422)
352
- .json({ success: false, message: 'Stored media is invalid' });
793
+ finally {
794
+ requestAbort.cleanup();
353
795
  }
354
796
  });
355
- router.delete('/gallery/:mediaId', galleryRateLimiter, (req, res) => {
797
+ router.delete('/gallery/:mediaId', galleryRateLimiter, async (req, res) => {
356
798
  const mediaId = Array.isArray(req.params.mediaId)
357
799
  ? req.params.mediaId[0]
358
800
  : req.params.mediaId;
359
- const deleted = galleryService.deleteMedia(mediaId, userId(req));
801
+ const deleted = await galleryService.deleteMedia(mediaId, userId(req));
360
802
  if (!deleted) {
361
803
  res.status(404).json({ success: false, message: 'Media not found' });
362
804
  return;
@@ -405,7 +847,7 @@ function isGeneratedAudioFormat(value) {
405
847
  return (typeof value === 'string' &&
406
848
  ['wav', 'mp3', 'flac', 'opus', 'pcm16'].includes(value));
407
849
  }
408
- function publicJob(job) {
850
+ async function publicJob(job, id) {
409
851
  return {
410
852
  id: job.id,
411
853
  status: job.status,
@@ -415,6 +857,10 @@ function publicJob(job) {
415
857
  error: job.error,
416
858
  createdAt: job.createdAt,
417
859
  updatedAt: job.updatedAt,
860
+ prompt: job.prompt,
861
+ cancellable: (job.status === 'pending' || job.status === 'in_progress') &&
862
+ job.providerJobId !== 'libre:prepared' &&
863
+ (await pluginService.canCancelVideoGenRequest(job.model, job.pluginId, id)),
418
864
  };
419
865
  }
420
866
  function publicMedia(media) {