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
@@ -15,7 +15,9 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import express from 'express';
18
- import rateLimit from 'express-rate-limit';
18
+ import { randomUUID } from 'node:crypto';
19
+ import rateLimit from '../middleware/sharedRateLimit.js';
20
+ import { isChatCancellationSafetyRequest } from '../middleware/chatCancellationAdmission.js';
19
21
  import chatService from '../services/chatService.js';
20
22
  import ollamaService from '../services/ollamaService.js';
21
23
  import pluginService from '../services/pluginService.js';
@@ -36,7 +38,55 @@ import { buildChatDocumentContext, EMPTY_CHAT_DOCUMENT_CONTEXT, } from '../utils
36
38
  import { ChatProviderSelectionError } from '../utils/chatProviderSelection.js';
37
39
  import { formatPluginStreamToolCalls } from '../utils/pluginStreaming.js';
38
40
  import { ResourcePolicyError } from '../utils/resourceLimits.js';
41
+ import { abortChatGenerationOnResponseClose, isChatGenerationCancelled, throwIfChatGenerationCancelled, } from '../utils/chatCancellation.js';
42
+ import { getDurableEventGateway } from '../platform/events/index.js';
43
+ import { chatGenerationIdempotencyScope } from '../platform/jobs/domainJobContracts.js';
44
+ import { getDurableJobRuntime } from '../platform/jobs/durableJobRuntime.js';
45
+ import { durableEventId } from '../platform/jobs/durableEventIdentity.js';
46
+ import { getPlatformRuntimeConfig } from '../platform/coordination/service.js';
39
47
  const logger = createLogger('routes:chat');
48
+ const CHAT_EVENT_MAX_FRAME_BYTES = 128 * 1024;
49
+ const CHAT_EVENT_DRAIN_TIMEOUT_MS = 15000;
50
+ const chatStreamId = (sessionId) => `chat:${sessionId}`;
51
+ const cancelChatGenerationByIdentity = async (userId, sessionId, assistantMessageId) => {
52
+ return getDurableJobRuntime().service.requestChatCancellation({
53
+ actorUserId: userId,
54
+ sessionId,
55
+ assistantMessageId,
56
+ });
57
+ };
58
+ const writeChatSseFrame = async (res, cursor, payload) => {
59
+ const frame = `id: ${cursor}\ndata: ${JSON.stringify(payload)}\n\n`;
60
+ if (Buffer.byteLength(frame, 'utf8') > CHAT_EVENT_MAX_FRAME_BYTES) {
61
+ throw new Error('Chat event frame exceeds the delivery bound.');
62
+ }
63
+ if (res.writableEnded || res.destroyed)
64
+ return;
65
+ if (res.write(frame))
66
+ return;
67
+ await new Promise((resolve, reject) => {
68
+ const cleanup = () => {
69
+ clearTimeout(timeout);
70
+ res.off('drain', drained);
71
+ res.off('close', closed);
72
+ };
73
+ const drained = () => {
74
+ cleanup();
75
+ resolve();
76
+ };
77
+ const closed = () => {
78
+ cleanup();
79
+ reject(new Error('Chat event stream closed during backpressure.'));
80
+ };
81
+ const timeout = setTimeout(() => {
82
+ cleanup();
83
+ reject(new Error('Chat event stream backpressure timed out.'));
84
+ }, CHAT_EVENT_DRAIN_TIMEOUT_MS);
85
+ timeout.unref?.();
86
+ res.once('drain', drained);
87
+ res.once('close', closed);
88
+ });
89
+ };
40
90
  function sendSessionFolderError(res, error, fallback) {
41
91
  if (error instanceof ResourcePolicyError) {
42
92
  res.status(error.statusCode).json({ success: false, error: error.message });
@@ -48,6 +98,16 @@ function sendSessionFolderError(res, error, fallback) {
48
98
  });
49
99
  }
50
100
  const router = express.Router();
101
+ const rejectProcessLocalTeamGeneration = (res) => {
102
+ if (getPlatformRuntimeConfig().mode !== 'team')
103
+ return false;
104
+ res.status(409).json({
105
+ success: false,
106
+ error: 'This compatibility endpoint is unavailable in team mode. Queue the generation through /generations and resume it through /events.',
107
+ code: 'DURABLE_CHAT_REQUIRED',
108
+ });
109
+ return true;
110
+ };
51
111
  const titleGenerationService = new TitleGenerationService({
52
112
  chatService,
53
113
  chatGenerationService,
@@ -67,6 +127,7 @@ const followUpService = new FollowUpService({
67
127
  });
68
128
  // Rate limiter for chat routes: 60 requests per minute (reasonable for chat)
69
129
  const chatRateLimiter = rateLimit({
130
+ keyPrefix: 'chat-routes',
70
131
  windowMs: 1 * 60 * 1000, // 1 minute
71
132
  max: 60, // limit each IP to 60 requests per minute
72
133
  message: {
@@ -75,6 +136,7 @@ const chatRateLimiter = rateLimit({
75
136
  },
76
137
  standardHeaders: true,
77
138
  legacyHeaders: false,
139
+ skip: isChatCancellationSafetyRequest,
78
140
  });
79
141
  // Apply rate limiter to all chat routes
80
142
  router.use(chatRateLimiter);
@@ -84,7 +146,7 @@ router.use(authenticate);
84
146
  router.get('/sessions', async (req, res) => {
85
147
  try {
86
148
  const userId = req.user?.userId || 'default';
87
- const sessions = chatService.getAllSessions(userId);
149
+ const sessions = await chatService.getAllSessions(userId);
88
150
  res.json({
89
151
  success: true,
90
152
  data: sessions,
@@ -132,7 +194,7 @@ router.get('/sessions/:sessionId', async (req, res) => {
132
194
  try {
133
195
  const sessionId = req.params.sessionId;
134
196
  const userId = req.user?.userId || 'default';
135
- const session = chatService.getSession(sessionId, userId);
197
+ const session = await chatService.getSession(sessionId, userId);
136
198
  if (!session) {
137
199
  res.status(404).json({
138
200
  success: false,
@@ -185,7 +247,7 @@ router.put('/sessions/:sessionId/messages/:messageId', async (req, res) => {
185
247
  const messageId = req.params.messageId;
186
248
  const updates = req.body;
187
249
  const userId = req.user?.userId || 'default';
188
- const updatedMessage = chatService.updateMessage(sessionId, messageId, updates, userId);
250
+ const updatedMessage = await chatService.updateMessage(sessionId, messageId, updates, userId);
189
251
  if (!updatedMessage) {
190
252
  res.status(404).json({
191
253
  success: false,
@@ -210,7 +272,7 @@ router.delete('/sessions/:sessionId', async (req, res) => {
210
272
  try {
211
273
  const sessionId = req.params.sessionId;
212
274
  const userId = req.user?.userId || 'default';
213
- const deleted = chatService.deleteSession(sessionId, userId);
275
+ const deleted = await chatService.deleteSession(sessionId, userId);
214
276
  if (!deleted) {
215
277
  res.status(404).json({
216
278
  success: false,
@@ -234,7 +296,7 @@ router.delete('/sessions/:sessionId', async (req, res) => {
234
296
  router.delete('/sessions', async (req, res) => {
235
297
  try {
236
298
  const userId = req.user?.userId || 'default';
237
- chatService.clearAllSessions(userId);
299
+ await chatService.clearAllSessions(userId);
238
300
  res.json({
239
301
  success: true,
240
302
  message: 'All chat sessions cleared successfully',
@@ -260,7 +322,7 @@ router.post('/sessions/:sessionId/messages', async (req, res) => {
260
322
  return;
261
323
  }
262
324
  const userId = req.user?.userId || 'default';
263
- const session = chatService.getSession(sessionId, userId);
325
+ const session = await chatService.getSession(sessionId, userId);
264
326
  if (!session) {
265
327
  res.status(404).json({
266
328
  success: false,
@@ -268,7 +330,7 @@ router.post('/sessions/:sessionId/messages', async (req, res) => {
268
330
  });
269
331
  return;
270
332
  }
271
- const message = chatService.addMessage(sessionId, {
333
+ const message = await chatService.addMessage(sessionId, {
272
334
  role,
273
335
  content,
274
336
  model,
@@ -295,6 +357,10 @@ router.post('/sessions/:sessionId/messages', async (req, res) => {
295
357
  });
296
358
  // Generate a chat response
297
359
  router.post('/sessions/:sessionId/generate', async (req, res) => {
360
+ if (rejectProcessLocalTeamGeneration(res))
361
+ return;
362
+ const { controller, cleanup } = abortChatGenerationOnResponseClose(res);
363
+ const signal = controller.signal;
298
364
  try {
299
365
  const sessionId = req.params.sessionId;
300
366
  const { message, options = {} } = req.body;
@@ -306,7 +372,7 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
306
372
  return;
307
373
  }
308
374
  const userId = req.user?.userId || 'default';
309
- const session = chatService.getSession(sessionId, userId);
375
+ const session = await chatService.getSession(sessionId, userId);
310
376
  if (!session) {
311
377
  res.status(404).json({
312
378
  success: false,
@@ -315,7 +381,7 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
315
381
  return;
316
382
  }
317
383
  // Add user message to session
318
- const userMessage = chatService.addMessage(sessionId, {
384
+ const userMessage = await chatService.addMessage(sessionId, {
319
385
  role: 'user',
320
386
  content: message,
321
387
  }, userId);
@@ -328,9 +394,10 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
328
394
  }
329
395
  let documentContext = EMPTY_CHAT_DOCUMENT_CONTEXT(message);
330
396
  try {
331
- documentContext = await buildChatDocumentContext(message, sessionId, userId);
397
+ documentContext = await buildChatDocumentContext(message, sessionId, userId, signal);
332
398
  }
333
399
  catch (error) {
400
+ throwIfChatGenerationCancelled(signal);
334
401
  logger.error('Error during document search:', error);
335
402
  }
336
403
  // Requested web search composes on top of any document context; a
@@ -339,10 +406,10 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
339
406
  let enhancedContent = documentContext.enhancedContent;
340
407
  let hasRelevantContext = documentContext.hasRelevantContext;
341
408
  if (req.body?.webSearch === true &&
342
- isWebSearchAvailable() &&
343
- userCanUseWebSearch(userModel.getUserById(userId))) {
409
+ (await isWebSearchAvailable()) &&
410
+ (await userCanUseWebSearch(await userModel.getUserById(userId)))) {
344
411
  try {
345
- const results = await runWebSearch(message);
412
+ const results = await runWebSearch(message, undefined, signal);
346
413
  if (results.length > 0) {
347
414
  enhancedContent = buildWebSearchEnhancedContent(enhancedContent, results, message);
348
415
  hasRelevantContext = true;
@@ -353,6 +420,7 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
353
420
  }
354
421
  }
355
422
  catch (error) {
423
+ throwIfChatGenerationCancelled(signal);
356
424
  logger.error('Web search failed; answering without it:', error);
357
425
  }
358
426
  }
@@ -360,10 +428,11 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
360
428
  session,
361
429
  userId,
362
430
  options,
363
- persistedMessages: chatService.getMessagesForContext(sessionId),
431
+ persistedMessages: await chatService.getMessagesForContext(sessionId, userId),
364
432
  content: message,
365
433
  hasRelevantContext,
366
434
  enhancedContent,
435
+ signal,
367
436
  });
368
437
  const generationResult = await chatGenerationService.executeNonStreaming({
369
438
  target: preparedGeneration.target,
@@ -371,13 +440,15 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
371
440
  pluginMessages: preparedGeneration.pluginMessages,
372
441
  userId,
373
442
  pluginFallbackPolicy: 'allow',
443
+ signal,
374
444
  });
445
+ throwIfChatGenerationCancelled(signal);
375
446
  if (generationResult.pluginError) {
376
447
  logger.error('Plugin failed, falling back to Ollama:', generationResult.pluginError);
377
448
  }
378
449
  // Add assistant response to session with statistics
379
450
  const statistics = extractStatistics(generationResult.response);
380
- const assistantMessage = chatService.addMessage(sessionId, {
451
+ const assistantMessage = await chatService.addMessage(sessionId, {
381
452
  role: 'assistant',
382
453
  content: generationResult.assistantContent,
383
454
  thinking: generationResult.assistantThinking,
@@ -392,7 +463,9 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
392
463
  : {}),
393
464
  }
394
465
  : generationResult.response.message.providerMetadata,
395
- }, userId);
466
+ }, userId, {
467
+ assertPersistenceAllowed: () => throwIfChatGenerationCancelled(signal),
468
+ });
396
469
  if (!assistantMessage) {
397
470
  res.status(500).json({
398
471
  success: false,
@@ -406,14 +479,285 @@ router.post('/sessions/:sessionId/generate', async (req, res) => {
406
479
  });
407
480
  }
408
481
  catch (error) {
482
+ if (isChatGenerationCancelled(error, signal)) {
483
+ if (!res.writableEnded)
484
+ res.status(499).end();
485
+ return;
486
+ }
409
487
  res.status(error instanceof ChatProviderSelectionError ? 400 : 500).json({
410
488
  success: false,
411
489
  error: getErrorMessage(error, 'Failed to generate response'),
412
490
  });
413
491
  }
492
+ finally {
493
+ cleanup();
494
+ }
495
+ });
496
+ // Resume any persisted chat stream from any application replica. SQL is the
497
+ // ordered source of truth; Redis only wakes the subscriber after a commit.
498
+ router.post('/sessions/:sessionId/generations', async (req, res) => {
499
+ const sessionId = String(req.params.sessionId || '').trim();
500
+ const userId = req.user?.userId || 'default';
501
+ const message = typeof req.body?.message === 'string' ? req.body.message : '';
502
+ const images = Array.isArray(req.body?.images)
503
+ ? req.body.images.filter((image) => typeof image === 'string' && image.length > 0)
504
+ : undefined;
505
+ const userMessageId = typeof req.body?.userMessageId === 'string'
506
+ ? req.body.userMessageId.trim()
507
+ : randomUUID();
508
+ const assistantMessageId = typeof req.body?.assistantMessageId === 'string'
509
+ ? req.body.assistantMessageId.trim()
510
+ : randomUUID();
511
+ const options = req.body?.options &&
512
+ typeof req.body.options === 'object' &&
513
+ !Array.isArray(req.body.options)
514
+ ? req.body.options
515
+ : {};
516
+ const regenerate = req.body?.regenerate === true;
517
+ const originalMessageId = typeof req.body?.originalMessageId === 'string'
518
+ ? req.body.originalMessageId.trim()
519
+ : undefined;
520
+ if (!sessionId ||
521
+ (!message.trim() && !images?.length) ||
522
+ !userMessageId ||
523
+ !assistantMessageId ||
524
+ (regenerate && !originalMessageId)) {
525
+ res.status(400).json({
526
+ success: false,
527
+ error: 'Session, message, and message identifiers are required',
528
+ });
529
+ return;
530
+ }
531
+ let responseFinished = false;
532
+ let prematureClose = req.aborted || res.destroyed;
533
+ let queuedJobId;
534
+ let disconnectCancellation;
535
+ const cancelCommittedJob = () => {
536
+ if (disconnectCancellation)
537
+ return disconnectCancellation;
538
+ disconnectCancellation = cancelChatGenerationByIdentity(userId, sessionId, assistantMessageId);
539
+ return disconnectCancellation;
540
+ };
541
+ const onPrematureClose = () => {
542
+ if (responseFinished)
543
+ return;
544
+ prematureClose = true;
545
+ if (queuedJobId) {
546
+ void cancelCommittedJob().catch(error => logger.error('Failed to cancel disconnected chat generation:', error));
547
+ }
548
+ };
549
+ const cleanupCloseFence = () => {
550
+ req.off('aborted', onPrematureClose);
551
+ req.socket.off('close', onPrematureClose);
552
+ res.off('close', onPrematureClose);
553
+ res.off('finish', onResponseFinished);
554
+ };
555
+ const onResponseFinished = () => {
556
+ responseFinished = true;
557
+ cleanupCloseFence();
558
+ };
559
+ // Arm before enqueue: the SQL transaction may commit while the client
560
+ // closes before receiving its 202. That close becomes cancellation intent
561
+ // against the exact deterministic generation identity.
562
+ req.once('aborted', onPrematureClose);
563
+ req.socket.once('close', onPrematureClose);
564
+ res.once('close', onPrematureClose);
565
+ res.once('finish', onResponseFinished);
566
+ try {
567
+ const queued = await chatService.queueDurableGeneration({
568
+ sessionId,
569
+ userId,
570
+ userMessageId,
571
+ assistantMessageId,
572
+ message,
573
+ images,
574
+ options,
575
+ webSearch: req.body?.webSearch === true,
576
+ regenerate,
577
+ originalMessageId,
578
+ });
579
+ if (!queued) {
580
+ cleanupCloseFence();
581
+ res.status(404).json({ success: false, error: 'Session not found' });
582
+ return;
583
+ }
584
+ queuedJobId = queued.jobId;
585
+ if (prematureClose ||
586
+ req.aborted ||
587
+ req.socket.destroyed ||
588
+ res.destroyed) {
589
+ prematureClose = true;
590
+ await cancelCommittedJob();
591
+ cleanupCloseFence();
592
+ return;
593
+ }
594
+ res.status(202).json({
595
+ success: true,
596
+ data: {
597
+ jobId: queued.jobId,
598
+ userMessage: queued.userMessage,
599
+ assistantMessageId,
600
+ eventStream: `/api/chat/sessions/${encodeURIComponent(sessionId)}/events?generation=${encodeURIComponent(assistantMessageId)}`,
601
+ },
602
+ });
603
+ }
604
+ catch (error) {
605
+ if (prematureClose ||
606
+ req.aborted ||
607
+ req.socket.destroyed ||
608
+ res.destroyed) {
609
+ prematureClose = true;
610
+ await cancelCommittedJob().catch(cancellationError => logger.error('Failed to resolve disconnected chat generation:', cancellationError));
611
+ cleanupCloseFence();
612
+ return;
613
+ }
614
+ res.status(409).json({
615
+ success: false,
616
+ error: getErrorMessage(error, 'Unable to queue chat generation'),
617
+ });
618
+ }
619
+ });
620
+ router.post('/sessions/:sessionId/generations/:assistantMessageId/cancel', async (req, res) => {
621
+ const sessionId = String(req.params.sessionId || '').trim();
622
+ const assistantMessageId = String(req.params.assistantMessageId || '').trim();
623
+ const userId = req.user?.userId || 'default';
624
+ if (!sessionId || !assistantMessageId) {
625
+ res.status(400).json({ success: false, error: 'Generation is required' });
626
+ return;
627
+ }
628
+ if (!(await chatService.getSession(sessionId, userId))) {
629
+ res.status(404).json({ success: false, error: 'Session not found' });
630
+ return;
631
+ }
632
+ // This is one SQL decision: completion already committed, or cancellation
633
+ // intent plus any existing natural-key job cancellation commit together.
634
+ // When the job is not present yet, enqueue consumes the durable intent and
635
+ // creates it directly in a terminal cancelled state.
636
+ const decision = await cancelChatGenerationByIdentity(userId, sessionId, assistantMessageId);
637
+ res.status(202).json({
638
+ success: true,
639
+ data: decision.outcome === 'completion-won'
640
+ ? { completed: true }
641
+ : decision.job
642
+ ? { jobId: decision.job.id, state: decision.job.state }
643
+ : { pending: true },
644
+ });
645
+ });
646
+ router.get('/sessions/:sessionId/events', async (req, res) => {
647
+ const sessionId = String(req.params.sessionId || '').trim();
648
+ const userId = req.user?.userId || 'default';
649
+ const generationId = typeof req.query.generation === 'string'
650
+ ? req.query.generation.trim()
651
+ : undefined;
652
+ const afterValue = req.query.after ??
653
+ (typeof req.get('Last-Event-ID') === 'string'
654
+ ? req.get('Last-Event-ID')
655
+ : undefined) ??
656
+ 0;
657
+ const afterCursor = Number(afterValue);
658
+ if (!Number.isSafeInteger(afterCursor) || afterCursor < 0) {
659
+ res.status(400).json({ success: false, error: 'Invalid event cursor' });
660
+ return;
661
+ }
662
+ if (!(await chatService.getSession(sessionId, userId))) {
663
+ res.status(404).json({ success: false, error: 'Session not found' });
664
+ return;
665
+ }
666
+ const generationJob = generationId
667
+ ? await getDurableJobRuntime().service.getByIdempotency(userId, chatGenerationIdempotencyScope(sessionId), generationId)
668
+ : null;
669
+ if (generationId && !generationJob) {
670
+ res.status(404).json({ success: false, error: 'Generation not found' });
671
+ return;
672
+ }
673
+ res.status(200);
674
+ res.setHeader('Content-Type', 'text/event-stream; charset=utf-8');
675
+ res.setHeader('Cache-Control', 'no-cache, no-transform');
676
+ res.setHeader('Connection', 'keep-alive');
677
+ res.setHeader('X-Accel-Buffering', 'no');
678
+ res.flushHeaders();
679
+ const abort = new AbortController();
680
+ let subscription;
681
+ let heartbeat;
682
+ let heartbeatBusy = false;
683
+ let terminal = false;
684
+ const close = () => {
685
+ abort.abort();
686
+ if (heartbeat)
687
+ clearInterval(heartbeat);
688
+ void subscription?.close();
689
+ if (!res.writableEnded && !res.destroyed)
690
+ res.end();
691
+ };
692
+ res.once('close', close);
693
+ try {
694
+ subscription = await getDurableEventGateway().subscribe({
695
+ afterCursor,
696
+ streamId: chatStreamId(sessionId),
697
+ ...(generationId ? { subjectId: generationId } : {}),
698
+ batchSize: 100,
699
+ maxReplayEvents: 10000,
700
+ signal: abort.signal,
701
+ authorize: async () => Boolean(await chatService.getSession(sessionId, userId)),
702
+ onEvent: async (event) => {
703
+ if (generationId && event.subjectId !== generationId)
704
+ return;
705
+ await writeChatSseFrame(res, event.cursor, event.payload);
706
+ terminal =
707
+ event.eventType === 'chat.done.v1' ||
708
+ event.eventType === 'chat.error.v1';
709
+ if (terminal)
710
+ queueMicrotask(close);
711
+ },
712
+ onError: () => close(),
713
+ });
714
+ if (terminal) {
715
+ close();
716
+ return;
717
+ }
718
+ heartbeat = setInterval(() => {
719
+ if (res.writableEnded || res.destroyed) {
720
+ close();
721
+ return;
722
+ }
723
+ if (heartbeatBusy)
724
+ return;
725
+ heartbeatBusy = true;
726
+ void (async () => {
727
+ if (generationJob) {
728
+ const current = await getDurableJobRuntime().service.getMetadata(generationJob.id);
729
+ if (current?.state === 'cancelled' ||
730
+ current?.state === 'dead_letter') {
731
+ await writeChatSseFrame(res, subscription?.cursor ?? afterCursor, {
732
+ type: 'error',
733
+ error: current.state === 'cancelled'
734
+ ? 'Chat generation was cancelled'
735
+ : current.errorSummary || 'Chat generation failed',
736
+ });
737
+ close();
738
+ return;
739
+ }
740
+ }
741
+ res.write(`: heartbeat ${Date.now()}\n\n`);
742
+ })()
743
+ .catch(close)
744
+ .finally(() => {
745
+ heartbeatBusy = false;
746
+ });
747
+ }, 15000);
748
+ heartbeat.unref?.();
749
+ }
750
+ catch {
751
+ close();
752
+ }
414
753
  });
415
754
  // Generate a chat response with streaming
416
755
  router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
756
+ if (rejectProcessLocalTeamGeneration(res))
757
+ return;
758
+ const { controller, cleanup } = abortChatGenerationOnResponseClose(res);
759
+ const signal = controller.signal;
760
+ let emitDurable;
417
761
  try {
418
762
  const sessionId = req.params.sessionId;
419
763
  const { message, options = {} } = req.body;
@@ -425,7 +769,7 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
425
769
  return;
426
770
  }
427
771
  const userId = req.user?.userId || 'default';
428
- const session = chatService.getSession(sessionId, userId);
772
+ const session = await chatService.getSession(sessionId, userId);
429
773
  if (!session) {
430
774
  res.status(404).json({
431
775
  success: false,
@@ -438,13 +782,57 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
438
782
  res.setHeader('Cache-Control', 'no-cache');
439
783
  res.setHeader('Connection', 'keep-alive');
440
784
  res.setHeader('Access-Control-Allow-Origin', '*');
785
+ // Event identity is a per-request nonce plus a monotonic sequence.
786
+ // Deriving it from payload content silently deduplicated repeated
787
+ // identical deltas out of the durable log and rejected payloads over
788
+ // the identity component bound.
789
+ let eventTail = Promise.resolve(undefined);
790
+ let eventFailure;
791
+ const requestNonce = randomUUID();
792
+ let eventSequence = 0;
793
+ emitDurable = async (payload) => {
794
+ if (eventFailure)
795
+ throw eventFailure;
796
+ const type = payload.type === 'done'
797
+ ? 'chat.done.v1'
798
+ : payload.type === 'error'
799
+ ? 'chat.error.v1'
800
+ : 'chat.stream.v1';
801
+ const occurrence = String(++eventSequence);
802
+ const operation = eventTail.then(() => getDurableEventGateway().append({
803
+ eventId: durableEventId('legacy-chat-route', sessionId, requestNonce, occurrence),
804
+ streamId: chatStreamId(sessionId),
805
+ eventType: type,
806
+ subjectId: sessionId,
807
+ actorUserId: userId,
808
+ payload: { mode: 'encrypted', value: payload },
809
+ }));
810
+ eventTail = operation.catch(error => {
811
+ eventFailure = error;
812
+ return undefined;
813
+ });
814
+ if (type === 'chat.stream.v1') {
815
+ // The direct response is the transport of record for this route;
816
+ // the durable append continues behind it so a slow event write
817
+ // cannot throttle delivery.
818
+ await writeChatSseFrame(res, 0, payload);
819
+ return;
820
+ }
821
+ // Terminal events commit durably before the response settles so
822
+ // `/events` replay consumers always observe an ordered terminal.
823
+ const appended = await operation;
824
+ await writeChatSseFrame(res, appended.cursor, payload);
825
+ };
441
826
  // Add user message to session
442
- const userMessage = chatService.addMessage(sessionId, {
827
+ const userMessage = await chatService.addMessage(sessionId, {
443
828
  role: 'user',
444
829
  content: message,
445
830
  }, userId);
446
831
  if (!userMessage) {
447
- res.write(`data: ${JSON.stringify({ error: 'Failed to add user message' })}\n\n`);
832
+ await emitDurable({
833
+ type: 'error',
834
+ error: 'Failed to add user message',
835
+ });
448
836
  res.end();
449
837
  return;
450
838
  }
@@ -452,9 +840,10 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
452
840
  // paths; search composes on top of it.
453
841
  let documentContext = EMPTY_CHAT_DOCUMENT_CONTEXT(message);
454
842
  try {
455
- documentContext = await buildChatDocumentContext(message, sessionId, userId);
843
+ documentContext = await buildChatDocumentContext(message, sessionId, userId, signal);
456
844
  }
457
845
  catch (contextError) {
846
+ throwIfChatGenerationCancelled(signal);
458
847
  logger.error('Error during document search:', contextError);
459
848
  }
460
849
  // Requested web search runs before generation and reports its own
@@ -463,11 +852,11 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
463
852
  let webSearchSources;
464
853
  let searchEnhancedContent;
465
854
  if (req.body?.webSearch === true &&
466
- isWebSearchAvailable() &&
467
- userCanUseWebSearch(userModel.getUserById(userId))) {
468
- res.write(`data: ${JSON.stringify({ type: 'search', status: 'searching' })}\n\n`);
855
+ (await isWebSearchAvailable()) &&
856
+ (await userCanUseWebSearch(await userModel.getUserById(userId)))) {
857
+ await emitDurable({ type: 'search', status: 'searching' });
469
858
  try {
470
- const results = await runWebSearch(message);
859
+ const results = await runWebSearch(message, undefined, signal);
471
860
  if (results.length > 0) {
472
861
  searchEnhancedContent = buildWebSearchEnhancedContent(documentContext.enhancedContent, results, message);
473
862
  webSearchSources = results.map(({ title, url }) => ({
@@ -475,19 +864,20 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
475
864
  url,
476
865
  }));
477
866
  }
478
- res.write(`data: ${JSON.stringify({
867
+ await emitDurable({
479
868
  type: 'search',
480
869
  status: 'done',
481
870
  sources: webSearchSources ?? [],
482
- })}\n\n`);
871
+ });
483
872
  }
484
873
  catch (searchError) {
874
+ throwIfChatGenerationCancelled(signal);
485
875
  logger.error('Web search failed; answering without it:', searchError);
486
- res.write(`data: ${JSON.stringify({
876
+ await emitDurable({
487
877
  type: 'search',
488
878
  status: 'failed',
489
879
  error: getErrorMessage(searchError, 'Web search failed.'),
490
- })}\n\n`);
880
+ });
491
881
  }
492
882
  }
493
883
  const withSearchSources = (metadata) => {
@@ -506,11 +896,13 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
506
896
  session,
507
897
  userId,
508
898
  options,
509
- persistedMessages: chatService.getMessagesForContext(sessionId),
899
+ persistedMessages: await chatService.getMessagesForContext(sessionId, userId),
510
900
  content: message,
511
901
  enhancedContent: searchEnhancedContent ?? documentContext.enhancedContent,
512
902
  hasRelevantContext: Boolean(searchEnhancedContent ?? documentContext.hasRelevantContext),
903
+ signal,
513
904
  });
905
+ throwIfChatGenerationCancelled(signal);
514
906
  const { target, actualModelName, mergedOptions, activePlugin, ollamaMessages, pluginMessages, shouldStreamPlugin, } = preparedGeneration;
515
907
  const chatRequest = {
516
908
  model: actualModelName,
@@ -522,59 +914,62 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
522
914
  let fullThinking = '';
523
915
  let assistantProviderMetadata;
524
916
  if (target.providerType === 'agent' && target.providerId) {
525
- for await (const chunk of agentCliService.executeAgentStreamRequest(target.providerId, pluginMessages, userId, { model: target.actualModelName })) {
917
+ for await (const chunk of agentCliService.executeAgentStreamRequest(target.providerId, pluginMessages, userId, { model: target.actualModelName, signal })) {
526
918
  if (chunk.type === 'content' && chunk.content) {
527
919
  fullResponse += chunk.content;
528
- res.write(`data: ${JSON.stringify({
920
+ await emitDurable({
529
921
  type: 'chunk',
530
922
  content: chunk.content,
531
923
  done: false,
532
- })}\n\n`);
924
+ });
533
925
  }
534
926
  else if (chunk.type === 'reasoning' && chunk.content) {
535
927
  fullThinking += chunk.content;
536
- res.write(`data: ${JSON.stringify({
928
+ await emitDurable({
537
929
  type: 'reasoning',
538
930
  content: chunk.content,
539
931
  done: false,
540
- })}\n\n`);
932
+ });
541
933
  }
542
934
  else if (chunk.type === 'done' && chunk.providerMetadata) {
543
935
  assistantProviderMetadata = chunk.providerMetadata;
544
936
  }
545
937
  }
938
+ throwIfChatGenerationCancelled(signal);
546
939
  if (fullResponse || fullThinking) {
547
- chatService.addMessage(sessionId, {
940
+ await chatService.addMessage(sessionId, {
548
941
  role: 'assistant',
549
942
  content: fullResponse,
550
943
  thinking: fullThinking || undefined,
551
944
  model: session.model,
552
945
  providerMetadata: withSearchSources(assistantProviderMetadata),
553
- }, userId);
946
+ }, userId, {
947
+ assertPersistenceAllowed: () => throwIfChatGenerationCancelled(signal),
948
+ });
554
949
  }
555
- res.write(`data: ${JSON.stringify({ type: 'done' })}\n\n`);
950
+ await emitDurable({ type: 'done' });
556
951
  res.end();
557
952
  return;
558
953
  }
559
954
  if (activePlugin) {
560
955
  if (shouldStreamPlugin) {
561
956
  const toolCalls = [];
562
- for await (const chunk of pluginService.executePluginStreamRequest(actualModelName, pluginMessages, mergedOptions, userId, activePlugin.id)) {
957
+ for await (const chunk of pluginService.executePluginStreamRequest(actualModelName, pluginMessages, mergedOptions, userId, activePlugin.id, signal)) {
563
958
  if (chunk.type === 'content' && chunk.content) {
564
959
  fullResponse += chunk.content;
565
- res.write(`data: ${JSON.stringify({
960
+ await emitDurable({
566
961
  type: 'chunk',
567
962
  content: chunk.content,
568
963
  done: false,
569
- })}\n\n`);
964
+ });
570
965
  }
571
966
  else if (chunk.type === 'reasoning' && chunk.content) {
572
967
  fullThinking += chunk.content;
573
- res.write(`data: ${JSON.stringify({
968
+ await emitDurable({
574
969
  type: 'reasoning',
575
970
  content: chunk.content,
576
971
  done: false,
577
- })}\n\n`);
972
+ });
578
973
  }
579
974
  else if (chunk.type === 'tool_call' && chunk.toolCall) {
580
975
  toolCalls.push(chunk.toolCall);
@@ -592,14 +987,15 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
592
987
  : assistantProviderMetadata;
593
988
  }
594
989
  }
990
+ throwIfChatGenerationCancelled(signal);
595
991
  const toolContent = formatPluginStreamToolCalls(toolCalls);
596
992
  if (toolContent) {
597
993
  fullResponse += toolContent;
598
- res.write(`data: ${JSON.stringify({
994
+ await emitDurable({
599
995
  type: 'chunk',
600
996
  content: toolContent,
601
997
  done: false,
602
- })}\n\n`);
998
+ });
603
999
  }
604
1000
  }
605
1001
  else {
@@ -609,34 +1005,38 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
609
1005
  pluginMessages,
610
1006
  userId,
611
1007
  pluginFallbackPolicy: 'allow',
1008
+ signal,
612
1009
  });
613
1010
  fullResponse = generationResult.assistantContent;
614
1011
  fullThinking = generationResult.assistantThinking || '';
615
1012
  assistantProviderMetadata =
616
1013
  generationResult.response.message.providerMetadata;
617
1014
  if (fullThinking) {
618
- res.write(`data: ${JSON.stringify({
1015
+ await emitDurable({
619
1016
  type: 'reasoning',
620
1017
  content: fullThinking,
621
1018
  done: false,
622
- })}\n\n`);
1019
+ });
623
1020
  }
624
- res.write(`data: ${JSON.stringify({
1021
+ await emitDurable({
625
1022
  type: 'chunk',
626
1023
  content: fullResponse,
627
1024
  done: false,
628
- })}\n\n`);
1025
+ });
629
1026
  }
1027
+ throwIfChatGenerationCancelled(signal);
630
1028
  if (fullResponse || fullThinking) {
631
- chatService.addMessage(sessionId, {
1029
+ await chatService.addMessage(sessionId, {
632
1030
  role: 'assistant',
633
1031
  content: fullResponse,
634
1032
  thinking: fullThinking || undefined,
635
1033
  model: session.model,
636
1034
  providerMetadata: withSearchSources(assistantProviderMetadata),
637
- }, userId);
1035
+ }, userId, {
1036
+ assertPersistenceAllowed: () => throwIfChatGenerationCancelled(signal),
1037
+ });
638
1038
  }
639
- res.write(`data: ${JSON.stringify({ type: 'done' })}\n\n`);
1039
+ await emitDurable({ type: 'done' });
640
1040
  res.end();
641
1041
  return;
642
1042
  }
@@ -645,41 +1045,64 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
645
1045
  const thinkingDelta = chunk.message.thinking || '';
646
1046
  if (thinkingDelta) {
647
1047
  fullThinking += thinkingDelta;
648
- res.write(`data: ${JSON.stringify({
1048
+ void emitDurable({
649
1049
  type: 'reasoning',
650
1050
  content: thinkingDelta,
651
1051
  done: false,
652
- })}\n\n`);
1052
+ }).catch(() => controller.abort());
653
1053
  }
654
- // Send chunk to client
655
- res.write(`data: ${JSON.stringify({
1054
+ void emitDurable({
656
1055
  type: 'chunk',
657
1056
  content: chunk.message.content || '',
658
1057
  done: chunk.done,
659
- })}\n\n`);
1058
+ }).catch(() => controller.abort());
660
1059
  // Accumulate response content
661
1060
  if (chunk.message.content) {
662
1061
  fullResponse += chunk.message.content;
663
1062
  }
664
1063
  }, error => {
665
- res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`);
666
- res.end();
1064
+ if (signal.aborted || res.writableEnded)
1065
+ return;
1066
+ void emitDurable({ type: 'error', error: error.message })
1067
+ .catch(() => undefined)
1068
+ .finally(() => res.end());
667
1069
  }, () => {
668
- // Add complete assistant response to session
669
- if (fullResponse || fullThinking) {
670
- chatService.addMessage(sessionId, {
671
- role: 'assistant',
672
- content: fullResponse,
673
- thinking: fullThinking || undefined,
674
- model: session.model,
675
- providerMetadata: withSearchSources(undefined),
676
- }, userId);
677
- }
678
- res.write(`data: ${JSON.stringify({ type: 'done' })}\n\n`);
679
- res.end();
680
- }, undefined, { userId });
1070
+ if (signal.aborted || res.writableEnded)
1071
+ return;
1072
+ void (async () => {
1073
+ if (fullResponse || fullThinking) {
1074
+ await chatService.addMessage(sessionId, {
1075
+ role: 'assistant',
1076
+ content: fullResponse,
1077
+ thinking: fullThinking || undefined,
1078
+ model: session.model,
1079
+ providerMetadata: withSearchSources(undefined),
1080
+ }, userId, {
1081
+ assertPersistenceAllowed: () => throwIfChatGenerationCancelled(signal),
1082
+ });
1083
+ }
1084
+ if (signal.aborted || res.writableEnded)
1085
+ return;
1086
+ await emitDurable({ type: 'done' });
1087
+ res.end();
1088
+ })().catch(error => {
1089
+ if (signal.aborted || res.writableEnded)
1090
+ return;
1091
+ void emitDurable({
1092
+ type: 'error',
1093
+ error: getErrorMessage(error, 'Failed to save response'),
1094
+ })
1095
+ .catch(() => undefined)
1096
+ .finally(() => res.end());
1097
+ });
1098
+ }, signal, { userId });
681
1099
  }
682
1100
  catch (error) {
1101
+ if (isChatGenerationCancelled(error, signal)) {
1102
+ if (!res.writableEnded)
1103
+ res.end();
1104
+ return;
1105
+ }
683
1106
  if (!res.headersSent) {
684
1107
  res
685
1108
  .status(error instanceof ChatProviderSelectionError ? 400 : 500)
@@ -689,9 +1112,17 @@ router.post('/sessions/:sessionId/generate/stream', async (req, res) => {
689
1112
  });
690
1113
  return;
691
1114
  }
692
- res.write(`data: ${JSON.stringify({ type: 'error', error: getErrorMessage(error, 'Failed to generate stream response') })}\n\n`);
1115
+ if (emitDurable) {
1116
+ await emitDurable({
1117
+ type: 'error',
1118
+ error: getErrorMessage(error, 'Failed to generate stream response'),
1119
+ }).catch(() => undefined);
1120
+ }
693
1121
  res.end();
694
1122
  }
1123
+ finally {
1124
+ cleanup();
1125
+ }
695
1126
  });
696
1127
  // Generate a title for a chat session based on the first message
697
1128
  router.post('/sessions/:sessionId/generate-title', async (req, res) => {
@@ -745,10 +1176,13 @@ router.post('/sessions/:sessionId/generate-title', async (req, res) => {
745
1176
  }
746
1177
  });
747
1178
  // Session folders
748
- router.get('/folders', (req, res) => {
1179
+ router.get('/folders', async (req, res) => {
749
1180
  try {
750
1181
  const userId = req.user?.userId || 'default';
751
- res.json({ success: true, data: chatService.getSessionFolders(userId) });
1182
+ res.json({
1183
+ success: true,
1184
+ data: await chatService.getSessionFolders(userId),
1185
+ });
752
1186
  }
753
1187
  catch (error) {
754
1188
  res.status(500).json({
@@ -757,24 +1191,24 @@ router.get('/folders', (req, res) => {
757
1191
  });
758
1192
  }
759
1193
  });
760
- router.post('/folders', (req, res) => {
1194
+ router.post('/folders', async (req, res) => {
761
1195
  try {
762
1196
  const { name } = req.body;
763
1197
  const userId = req.user?.userId || 'default';
764
1198
  res.json({
765
1199
  success: true,
766
- data: chatService.createSessionFolder(name, userId),
1200
+ data: await chatService.createSessionFolder(name, userId),
767
1201
  });
768
1202
  }
769
1203
  catch (error) {
770
1204
  sendSessionFolderError(res, error, 'Failed to create folder');
771
1205
  }
772
1206
  });
773
- router.put('/folders/:folderId', (req, res) => {
1207
+ router.put('/folders/:folderId', async (req, res) => {
774
1208
  try {
775
1209
  const { name } = req.body;
776
1210
  const userId = req.user?.userId || 'default';
777
- const folder = chatService.renameSessionFolder(req.params.folderId, name, userId);
1211
+ const folder = await chatService.renameSessionFolder(req.params.folderId, name, userId);
778
1212
  if (!folder) {
779
1213
  res.status(404).json({ success: false, error: 'Folder not found' });
780
1214
  return;
@@ -785,10 +1219,10 @@ router.put('/folders/:folderId', (req, res) => {
785
1219
  sendSessionFolderError(res, error, 'Failed to rename folder');
786
1220
  }
787
1221
  });
788
- router.delete('/folders/:folderId', (req, res) => {
1222
+ router.delete('/folders/:folderId', async (req, res) => {
789
1223
  try {
790
1224
  const userId = req.user?.userId || 'default';
791
- const deleted = chatService.deleteSessionFolder(req.params.folderId, userId);
1225
+ const deleted = await chatService.deleteSessionFolder(req.params.folderId, userId);
792
1226
  if (!deleted) {
793
1227
  res.status(404).json({ success: false, error: 'Folder not found' });
794
1228
  return;
@@ -844,7 +1278,7 @@ router.post('/sessions/:sessionId/messages/:messageId/branch', authenticate, cha
844
1278
  });
845
1279
  return;
846
1280
  }
847
- const updatedMessage = chatService.switchMessageBranch(sessionId, messageId, branchIndex, userId);
1281
+ const updatedMessage = await chatService.switchMessageBranch(sessionId, messageId, branchIndex, userId);
848
1282
  if (!updatedMessage) {
849
1283
  res.status(404).json({
850
1284
  success: false,
@@ -853,7 +1287,7 @@ router.post('/sessions/:sessionId/messages/:messageId/branch', authenticate, cha
853
1287
  return;
854
1288
  }
855
1289
  // Return the updated session
856
- const session = chatService.getSession(sessionId, userId);
1290
+ const session = await chatService.getSession(sessionId, userId);
857
1291
  res.json({
858
1292
  success: true,
859
1293
  data: session,
@@ -876,7 +1310,7 @@ router.get('/sessions/:sessionId/messages/:messageId/branches', authenticate, ch
876
1310
  const sessionId = req.params.sessionId;
877
1311
  const messageId = req.params.messageId;
878
1312
  const userId = req.user?.userId || 'default';
879
- const branches = chatService.getMessageBranches(sessionId, messageId, userId);
1313
+ const branches = await chatService.getMessageBranches(sessionId, messageId, userId);
880
1314
  res.json({
881
1315
  success: true,
882
1316
  data: branches,
@@ -907,7 +1341,7 @@ router.post('/sessions/:sessionId/messages/:messageId/branches', authenticate, c
907
1341
  });
908
1342
  return;
909
1343
  }
910
- const newBranch = chatService.createMessageBranch(sessionId, messageId, messageData, userId);
1344
+ const newBranch = await chatService.createMessageBranch(sessionId, messageId, messageData, userId);
911
1345
  if (!newBranch) {
912
1346
  res.status(404).json({
913
1347
  success: false,