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
@@ -14,263 +14,150 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- import fs from 'fs';
18
- import path from 'path';
19
- import { fileURLToPath } from 'url';
20
17
  import { v4 as uuidv4 } from 'uuid';
21
- import bcrypt from 'bcrypt';
22
- import getDatabase, { isDatabaseInitialized } from './db.js';
23
18
  import { encryptionService } from './services/encryptionService.js';
19
+ import { getPersistence } from './persistence/index.js';
20
+ import { PersistenceResourceLimitError } from './persistence/resourceTypes.js';
24
21
  import { createLogger } from './utils/logger.js';
25
22
  import { MAX_NOTE_CONTENT_LENGTH, MAX_NOTES_PER_USER, MAX_NOTE_TITLE_LENGTH, MAX_SESSION_FOLDER_NAME_LENGTH, MAX_SESSION_FOLDERS_PER_USER, ResourcePolicyError, } from './utils/resourceLimits.js';
26
- import { mapDocumentChunkRow, mapDocumentRow, mapSessionRow, } from './storageMappers.js';
23
+ import { mapSessionRow, } from './storageMappers.js';
24
+ import { getPlatformStorageRuntime } from './platform/storage/index.js';
25
+ import { getDurableJobRuntime } from './platform/jobs/durableJobRuntime.js';
27
26
  const logger = createLogger('storage');
28
- // Get __dirname equivalent for ES modules
29
- const __filename = fileURLToPath(import.meta.url);
30
- const __dirname = path.dirname(__filename);
31
27
  class StorageService {
32
- constructor() {
33
- this.useSQLite = false;
34
- this.sessionsFile = path.join(__dirname, '..', 'sessions.json');
35
- this.preferencesFile = path.join(__dirname, '..', 'preferences.json');
36
- this.documentsFile = path.join(__dirname, '..', 'documents.json');
37
- this.documentChunksFile = path.join(__dirname, '..', 'document-chunks.json');
38
- // Check if SQLite should be used
39
- this.useSQLite = isDatabaseInitialized();
40
- logger.debug(`Storage mode: ${this.useSQLite ? 'SQLite' : 'JSON'}`);
41
- }
42
- // =================================
43
- // USER MANAGEMENT
44
- // =================================
45
- async createUser(username, email, password, role = 'user') {
46
- const userId = uuidv4();
47
- const passwordHash = await bcrypt.hash(password, 12);
48
- const now = Date.now();
49
- const user = {
50
- id: userId,
51
- username,
52
- email,
53
- password_hash: passwordHash,
54
- role,
55
- created_at: now,
56
- updated_at: now,
57
- };
58
- if (this.useSQLite) {
59
- const db = getDatabase();
60
- const stmt = db.prepare(`
61
- INSERT INTO users (id, username, email, password_hash, role, created_at, updated_at)
62
- VALUES (?, ?, ?, ?, ?, ?, ?)
63
- `);
64
- // Encrypt sensitive user data
65
- const encryptedEmail = user.email
66
- ? encryptionService.encrypt(user.email)
67
- : null;
68
- stmt.run(user.id, user.username, encryptedEmail, user.password_hash, user.role, user.created_at, user.updated_at);
69
- }
70
- return user;
71
- }
72
- getUser(userId) {
73
- if (this.useSQLite) {
74
- const db = getDatabase();
75
- const stmt = db.prepare('SELECT * FROM users WHERE id = ?');
76
- const user = stmt.get(userId);
77
- if (user && user.email) {
78
- // Decrypt email
79
- user.email = encryptionService.decrypt(user.email);
80
- }
81
- return user;
82
- }
83
- return undefined;
84
- }
85
- getUserByUsername(username) {
86
- if (this.useSQLite) {
87
- const db = getDatabase();
88
- const stmt = db.prepare('SELECT * FROM users WHERE username = ?');
89
- const user = stmt.get(username);
90
- if (user && user.email) {
91
- // Decrypt email
92
- user.email = encryptionService.decrypt(user.email);
93
- }
94
- return user;
95
- }
96
- return undefined;
97
- }
98
28
  // =================================
99
29
  // SESSION MANAGEMENT
100
30
  // =================================
101
- getAllSessions(userId = 'default') {
102
- if (this.useSQLite) {
103
- const db = getDatabase();
104
- // Get sessions
105
- const sessionsStmt = db.prepare(`
106
- SELECT * FROM sessions WHERE user_id = ? ORDER BY updated_at DESC
107
- `);
108
- const sessions = sessionsStmt.all(userId);
109
- // Get ALL messages for each session (including branches for side-by-side display)
110
- const messagesStmt = db.prepare(`
111
- SELECT * FROM session_messages
112
- WHERE session_id = ?
113
- ORDER BY message_index ASC, branch_index ASC
114
- `);
115
- // Get sibling counts for branching (count all variants for each parent)
116
- const siblingCountStmt = db.prepare(`
117
- SELECT parent_id, COUNT(*) as count FROM session_messages
118
- WHERE session_id = ? AND parent_id IS NOT NULL
119
- GROUP BY parent_id
120
- `);
121
- return sessions.map(session => {
122
- const messages = messagesStmt.all(session.id);
123
- const siblingCounts = siblingCountStmt.all(session.id);
124
- return mapSessionRow(session, messages, siblingCounts);
125
- });
126
- }
127
- else {
128
- // Fallback to JSON
129
- try {
130
- if (fs.existsSync(this.sessionsFile)) {
131
- const data = fs.readFileSync(this.sessionsFile, 'utf8');
132
- return JSON.parse(data);
133
- }
134
- }
135
- catch (error) {
136
- logger.error('Failed to load sessions from JSON:', error);
137
- }
138
- }
139
- return [];
140
- }
141
- getSession(sessionId, userId = 'default') {
142
- if (this.useSQLite) {
143
- const db = getDatabase();
144
- // Get session
145
- const sessionStmt = db.prepare(`
146
- SELECT * FROM sessions WHERE id = ? AND user_id = ?
147
- `);
148
- const session = sessionStmt.get(sessionId, userId);
149
- if (!session)
150
- return undefined;
151
- // Get ALL messages (including branches for side-by-side display)
152
- const messagesStmt = db.prepare(`
153
- SELECT * FROM session_messages
154
- WHERE session_id = ?
155
- ORDER BY message_index ASC, branch_index ASC
156
- `);
157
- const messages = messagesStmt.all(sessionId);
158
- // Get sibling counts for branching
159
- const siblingCountStmt = db.prepare(`
160
- SELECT parent_id, COUNT(*) as count FROM session_messages
161
- WHERE session_id = ? AND parent_id IS NOT NULL
162
- GROUP BY parent_id
163
- `);
164
- const siblingCounts = siblingCountStmt.all(sessionId);
165
- return mapSessionRow(session, messages, siblingCounts);
166
- }
167
- else {
168
- // Fallback to JSON
169
- const sessions = this.getAllSessions();
170
- return sessions.find(s => s.id === sessionId);
171
- }
31
+ async getAllSessions(userId = 'default') {
32
+ const aggregates = await getPersistence(encryptionService).repositories.resources.chatSessions.listByOwner(userId);
33
+ return aggregates.map(({ session, messages }) => mapSessionRow(session, messages, this.siblingCounts(messages)));
34
+ }
35
+ async getSession(sessionId, userId = 'default') {
36
+ const aggregate = await getPersistence(encryptionService).repositories.resources.chatSessions.findByOwner(sessionId, userId);
37
+ if (!aggregate)
38
+ return undefined;
39
+ return mapSessionRow(aggregate.session, aggregate.messages, this.siblingCounts(aggregate.messages));
172
40
  }
173
- saveSession(session, userId = 'default') {
174
- if (this.useSQLite) {
175
- const db = getDatabase();
176
- // Use transaction for consistency
177
- const transaction = db.transaction((session) => {
178
- // Insert or update session
179
- const sessionStmt = db.prepare(`
180
- INSERT OR REPLACE INTO sessions (id, user_id, title, model, persona_id, provider_type, provider_id, created_at, updated_at, archived, settings, folder_id, pinned)
181
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
182
- `);
183
- // Encrypt sensitive session data
184
- const encryptedTitle = encryptionService.encrypt(session.title);
185
- sessionStmt.run(session.id, userId, encryptedTitle, session.model, session.personaId || null, session.providerType || null, session.providerId || null, session.createdAt, session.updatedAt, session.archived ? 1 : 0, session.settings
41
+ protectMessage(sessionId, message, messageIndex) {
42
+ return {
43
+ id: message.id || uuidv4(),
44
+ session_id: sessionId,
45
+ role: message.role,
46
+ content: encryptionService.encrypt(message.content),
47
+ thinking: message.thinking
48
+ ? encryptionService.encrypt(message.thinking)
49
+ : null,
50
+ timestamp: message.timestamp,
51
+ message_index: messageIndex,
52
+ model: message.model || null,
53
+ provider_metadata: message.providerMetadata
54
+ ? encryptionService.encrypt(JSON.stringify(message.providerMetadata))
55
+ : null,
56
+ images: message.images
57
+ ? encryptionService.encrypt(JSON.stringify(message.images))
58
+ : null,
59
+ statistics: message.statistics
60
+ ? encryptionService.encrypt(JSON.stringify(message.statistics))
61
+ : null,
62
+ artifacts: message.artifacts
63
+ ? encryptionService.encrypt(JSON.stringify(message.artifacts))
64
+ : null,
65
+ parent_id: message.parentId || null,
66
+ branch_index: message.branchIndex ?? 0,
67
+ is_active: message.isActive !== false ? 1 : 0,
68
+ rating: message.rating ?? null,
69
+ };
70
+ }
71
+ protectSession(session, userId) {
72
+ return {
73
+ session: {
74
+ id: session.id,
75
+ user_id: userId,
76
+ title: encryptionService.encrypt(session.title),
77
+ model: session.model,
78
+ persona_id: session.personaId || null,
79
+ provider_type: session.providerType || null,
80
+ provider_id: session.providerId || null,
81
+ created_at: session.createdAt,
82
+ updated_at: session.updatedAt,
83
+ archived: session.archived ? 1 : 0,
84
+ settings: session.settings
186
85
  ? encryptionService.encrypt(JSON.stringify(session.settings))
187
- : null, session.folderId || null, session.pinned ? 1 : 0);
188
- // Delete existing messages
189
- const deleteMessagesStmt = db.prepare('DELETE FROM session_messages WHERE session_id = ?');
190
- deleteMessagesStmt.run(session.id);
191
- // Insert messages
192
- if (session.messages && session.messages.length > 0) {
193
- const insertMessageStmt = db.prepare(`
194
- INSERT INTO session_messages (id, session_id, role, content, thinking, timestamp, message_index, model, provider_metadata, images, statistics, artifacts, parent_id, branch_index, is_active, rating)
195
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
196
- `);
197
- session.messages.forEach((message, index) => {
198
- // Encrypt sensitive data before storing
199
- const encryptedContent = encryptionService.encrypt(message.content);
200
- const encryptedThinking = message.thinking
201
- ? encryptionService.encrypt(message.thinking)
202
- : null;
203
- const encryptedImages = message.images
204
- ? encryptionService.encrypt(JSON.stringify(message.images))
205
- : null;
206
- const encryptedProviderMetadata = message.providerMetadata
207
- ? encryptionService.encrypt(JSON.stringify(message.providerMetadata))
208
- : null;
209
- const encryptedStatistics = message.statistics
210
- ? encryptionService.encrypt(JSON.stringify(message.statistics))
211
- : null;
212
- const encryptedArtifacts = message.artifacts
213
- ? encryptionService.encrypt(JSON.stringify(message.artifacts))
214
- : null;
215
- // Use the message's own ID if it has one, otherwise generate a new one
216
- const messageId = message.id || uuidv4();
217
- insertMessageStmt.run(messageId, session.id, message.role, encryptedContent, encryptedThinking, message.timestamp, index, message.model || null, encryptedProviderMetadata, encryptedImages, encryptedStatistics, encryptedArtifacts, message.parentId || null, message.branchIndex ?? 0, message.isActive !== false ? 1 : 0, message.rating ?? null);
218
- });
219
- }
220
- });
221
- transaction(session);
222
- }
223
- else {
224
- // Fallback to JSON
225
- try {
226
- const sessions = this.getAllSessions();
227
- const existingIndex = sessions.findIndex(s => s.id === session.id);
228
- if (existingIndex >= 0) {
229
- sessions[existingIndex] = session;
230
- }
231
- else {
232
- sessions.push(session);
233
- }
234
- fs.writeFileSync(this.sessionsFile, JSON.stringify(sessions, null, 2));
235
- }
236
- catch (error) {
237
- logger.error('Failed to save session to JSON:', error);
238
- }
239
- }
86
+ : null,
87
+ folder_id: session.folderId || null,
88
+ pinned: session.pinned ? 1 : 0,
89
+ },
90
+ messages: (session.messages || []).map((message, index) => this.protectMessage(session.id, message, index)),
91
+ };
240
92
  }
241
- deleteSession(sessionId, userId = 'default') {
242
- if (this.useSQLite) {
243
- const db = getDatabase();
244
- const stmt = db.prepare('DELETE FROM sessions WHERE id = ? AND user_id = ?');
245
- const result = stmt.run(sessionId, userId);
246
- return result.changes > 0;
247
- }
248
- else {
249
- // Fallback to JSON
250
- try {
251
- const sessions = this.getAllSessions();
252
- const filteredSessions = sessions.filter(s => s.id !== sessionId);
253
- if (filteredSessions.length !== sessions.length) {
254
- fs.writeFileSync(this.sessionsFile, JSON.stringify(filteredSessions, null, 2));
255
- return true;
256
- }
257
- }
258
- catch (error) {
259
- logger.error('Failed to delete session from JSON:', error);
93
+ async saveSession(session, userId = 'default', beforeCommit) {
94
+ const persistence = getPersistence(encryptionService);
95
+ if (beforeCommit && persistence.dialect === 'sqlite')
96
+ await beforeCommit();
97
+ await persistence.repositories.resources.chatSessions.replace(this.protectSession(session, userId), persistence.dialect === 'postgres' ? beforeCommit : undefined);
98
+ }
99
+ async saveSessionAndEnqueueGeneration(session, userId, enqueuer, input, beforeCommit) {
100
+ const persistence = getPersistence(encryptionService);
101
+ if (beforeCommit && persistence.dialect === 'sqlite')
102
+ await beforeCommit();
103
+ await persistence.repositories.resources.chatSessions.replaceAndEnqueue(this.protectSession(session, userId), enqueuer, input, persistence.dialect === 'postgres' ? beforeCommit : undefined);
104
+ }
105
+ async publishDurableChatCompletion(input) {
106
+ const message = this.protectMessage(input.sessionId, input.message, 0);
107
+ const persistence = getPersistence(encryptionService);
108
+ if (input.beforeCommit && persistence.dialect === 'sqlite') {
109
+ await input.beforeCommit();
110
+ }
111
+ return getDurableJobRuntime().service.publishChatCompletion({
112
+ lease: input.lease,
113
+ actorUserId: input.userId,
114
+ sessionId: input.sessionId,
115
+ expectedJobType: input.expectedJobType,
116
+ message: {
117
+ id: message.id,
118
+ sessionId: message.session_id,
119
+ role: 'assistant',
120
+ content: message.content,
121
+ thinking: message.thinking,
122
+ timestamp: message.timestamp,
123
+ model: message.model,
124
+ providerMetadata: message.provider_metadata,
125
+ images: message.images,
126
+ statistics: message.statistics,
127
+ artifacts: message.artifacts,
128
+ parentId: message.parent_id,
129
+ isActive: message.is_active,
130
+ rating: message.rating,
131
+ },
132
+ event: input.event,
133
+ ...(persistence.dialect === 'postgres' && input.beforeCommit
134
+ ? { beforeCommit: input.beforeCommit }
135
+ : {}),
136
+ });
137
+ }
138
+ async removeSessionMessageIfCurrent(input) {
139
+ return getPersistence(encryptionService).repositories.resources.chatSessions.removeMessageIfCurrent(input.sessionId, input.userId, input.messageId, input.expectedTimestamp, input.expectedSessionUpdatedAt, input.previousSessionUpdatedAt, input.previousActiveMessageId);
140
+ }
141
+ async deleteSession(sessionId, userId = 'default', beforeCommit) {
142
+ const persistence = getPersistence(encryptionService);
143
+ if (beforeCommit && persistence.dialect === 'sqlite')
144
+ await beforeCommit();
145
+ return persistence.repositories.resources.chatSessions.deleteByOwner(sessionId, userId, persistence.dialect === 'postgres' ? beforeCommit : undefined);
146
+ }
147
+ siblingCounts(messages) {
148
+ const counts = new Map();
149
+ for (const message of messages) {
150
+ if (message.parent_id) {
151
+ counts.set(message.parent_id, (counts.get(message.parent_id) || 0) + 1);
260
152
  }
261
153
  }
262
- return false;
154
+ return [...counts].map(([parent_id, count]) => ({ parent_id, count }));
263
155
  }
264
156
  // =================================
265
157
  // KNOWLEDGE COLLECTIONS
266
158
  // =================================
267
- getKnowledgeCollections(userId = 'default') {
268
- if (!this.useSQLite)
269
- return [];
270
- const db = getDatabase();
271
- const rows = db
272
- .prepare('SELECT * FROM knowledge_collections WHERE user_id = ? ORDER BY name COLLATE NOCASE ASC')
273
- .all(userId);
159
+ async getKnowledgeCollections(userId = 'default') {
160
+ const rows = await getPersistence(encryptionService).repositories.resources.knowledgeCollections.listByOwner(userId);
274
161
  return rows.map(row => ({
275
162
  id: row.id,
276
163
  name: encryptionService.decrypt(row.name),
@@ -278,46 +165,26 @@ class StorageService {
278
165
  updatedAt: row.updated_at,
279
166
  }));
280
167
  }
281
- saveKnowledgeCollection(collection, userId = 'default') {
282
- if (!this.useSQLite)
283
- return;
284
- const db = getDatabase();
285
- db.prepare(`INSERT OR REPLACE INTO knowledge_collections (id, user_id, name, created_at, updated_at)
286
- VALUES (?, ?, ?, ?, ?)`).run(collection.id, userId, encryptionService.encrypt(collection.name), collection.createdAt, collection.updatedAt);
287
- }
288
- deleteKnowledgeCollection(collectionId, userId = 'default') {
289
- if (!this.useSQLite)
290
- return false;
291
- const db = getDatabase();
292
- const remove = db.transaction(() => {
293
- db.prepare('UPDATE documents SET collection_id = NULL WHERE collection_id = ? AND user_id = ?').run(collectionId, userId);
294
- return db
295
- .prepare('DELETE FROM knowledge_collections WHERE id = ? AND user_id = ?')
296
- .run(collectionId, userId).changes;
168
+ async saveKnowledgeCollection(collection, userId = 'default') {
169
+ await getPersistence(encryptionService).repositories.resources.knowledgeCollections.replace({
170
+ id: collection.id,
171
+ user_id: userId,
172
+ name: encryptionService.encrypt(collection.name),
173
+ created_at: collection.createdAt,
174
+ updated_at: collection.updatedAt,
297
175
  });
298
- return remove() > 0;
299
176
  }
300
- setDocumentCollection(documentId, collectionId, userId = 'default') {
301
- if (!this.useSQLite)
302
- return false;
303
- const db = getDatabase();
304
- return (db
305
- .prepare('UPDATE documents SET collection_id = ? WHERE id = ? AND user_id = ?')
306
- .run(collectionId, documentId, userId).changes > 0);
177
+ async deleteKnowledgeCollection(collectionId, userId = 'default') {
178
+ return getPersistence(encryptionService).repositories.resources.knowledgeCollections.deleteAndDetach(collectionId, userId);
179
+ }
180
+ async setDocumentCollection(documentId, collectionId, userId = 'default') {
181
+ return getPlatformStorageRuntime().domains.documents.setCollection(documentId, collectionId, userId);
307
182
  }
308
183
  // =================================
309
184
  // NOTES
310
185
  // =================================
311
- getNotes(userId = 'default') {
312
- if (!this.useSQLite)
313
- return [];
314
- const db = getDatabase();
315
- const rows = db
316
- .prepare(`SELECT * FROM notes
317
- WHERE user_id = ?
318
- ORDER BY updated_at DESC
319
- LIMIT ?`)
320
- .all(userId, MAX_NOTES_PER_USER);
186
+ async getNotes(userId = 'default') {
187
+ const rows = await getPersistence(encryptionService).repositories.resources.notes.listByOwner(userId, MAX_NOTES_PER_USER);
321
188
  return rows.map(row => ({
322
189
  id: row.id,
323
190
  title: encryptionService.decrypt(row.title),
@@ -326,12 +193,8 @@ class StorageService {
326
193
  updatedAt: row.updated_at,
327
194
  }));
328
195
  }
329
- getNote(noteId, userId = 'default') {
330
- if (!this.useSQLite)
331
- return undefined;
332
- const row = getDatabase()
333
- .prepare('SELECT * FROM notes WHERE id = ? AND user_id = ?')
334
- .get(noteId, userId);
196
+ async getNote(noteId, userId = 'default') {
197
+ const row = await getPersistence(encryptionService).repositories.resources.notes.findByOwner(noteId, userId);
335
198
  return row
336
199
  ? {
337
200
  id: row.id,
@@ -342,52 +205,62 @@ class StorageService {
342
205
  }
343
206
  : undefined;
344
207
  }
345
- saveNote(note, userId = 'default') {
346
- if (!this.useSQLite)
347
- return;
208
+ async saveNote(note, userId = 'default') {
348
209
  if (note.title.length > MAX_NOTE_TITLE_LENGTH ||
349
210
  note.content.length > MAX_NOTE_CONTENT_LENGTH) {
350
211
  throw new ResourcePolicyError('Note exceeds the maximum size', 400);
351
212
  }
352
- const db = getDatabase();
353
- const save = db.transaction(() => {
354
- const existing = db
355
- .prepare('SELECT 1 FROM notes WHERE id = ? AND user_id = ?')
356
- .get(note.id, userId);
357
- if (!existing) {
358
- const { count } = db
359
- .prepare('SELECT COUNT(*) AS count FROM notes WHERE user_id = ?')
360
- .get(userId);
361
- if (count >= MAX_NOTES_PER_USER) {
362
- throw new ResourcePolicyError(`A user may store at most ${MAX_NOTES_PER_USER} notes`, 409);
363
- }
213
+ try {
214
+ await getPersistence(encryptionService).repositories.resources.notes.replaceWithLimit({
215
+ id: note.id,
216
+ user_id: userId,
217
+ title: encryptionService.encrypt(note.title),
218
+ content: encryptionService.encrypt(note.content),
219
+ created_at: note.createdAt,
220
+ updated_at: note.updatedAt,
221
+ }, MAX_NOTES_PER_USER);
222
+ }
223
+ catch (error) {
224
+ if (error instanceof PersistenceResourceLimitError) {
225
+ throw new ResourcePolicyError(`A user may store at most ${MAX_NOTES_PER_USER} notes`, 409);
364
226
  }
365
- db.prepare(`INSERT OR REPLACE INTO notes (id, user_id, title, content, created_at, updated_at)
366
- VALUES (?, ?, ?, ?, ?, ?)`).run(note.id, userId, encryptionService.encrypt(note.title), encryptionService.encrypt(note.content), note.createdAt, note.updatedAt);
227
+ throw error;
228
+ }
229
+ }
230
+ async updateNote(noteId, updates, userId = 'default') {
231
+ if ((updates.title !== undefined &&
232
+ updates.title.length > MAX_NOTE_TITLE_LENGTH) ||
233
+ (updates.content !== undefined &&
234
+ updates.content.length > MAX_NOTE_CONTENT_LENGTH)) {
235
+ throw new ResourcePolicyError('Note exceeds the maximum size', 400);
236
+ }
237
+ const row = await getPersistence(encryptionService).repositories.resources.notes.patchByOwner(noteId, userId, {
238
+ ...(updates.title !== undefined
239
+ ? { title: encryptionService.encrypt(updates.title) }
240
+ : {}),
241
+ ...(updates.content !== undefined
242
+ ? { content: encryptionService.encrypt(updates.content) }
243
+ : {}),
244
+ updated_at: Date.now(),
367
245
  });
368
- save();
246
+ return row
247
+ ? {
248
+ id: row.id,
249
+ title: encryptionService.decrypt(row.title),
250
+ content: encryptionService.decrypt(row.content),
251
+ createdAt: row.created_at,
252
+ updatedAt: row.updated_at,
253
+ }
254
+ : undefined;
369
255
  }
370
- deleteNote(noteId, userId = 'default') {
371
- if (!this.useSQLite)
372
- return false;
373
- const db = getDatabase();
374
- return (db
375
- .prepare('DELETE FROM notes WHERE id = ? AND user_id = ?')
376
- .run(noteId, userId).changes > 0);
256
+ async deleteNote(noteId, userId = 'default') {
257
+ return getPersistence(encryptionService).repositories.resources.notes.deleteByOwner(noteId, userId);
377
258
  }
378
259
  // =================================
379
260
  // SESSION FOLDERS
380
261
  // =================================
381
- getSessionFolders(userId = 'default') {
382
- if (!this.useSQLite)
383
- return [];
384
- const db = getDatabase();
385
- const rows = db
386
- .prepare(`SELECT * FROM session_folders
387
- WHERE user_id = ?
388
- ORDER BY name COLLATE NOCASE ASC
389
- LIMIT ?`)
390
- .all(userId, MAX_SESSION_FOLDERS_PER_USER);
262
+ async getSessionFolders(userId = 'default') {
263
+ const rows = await getPersistence(encryptionService).repositories.resources.sessionFolders.listByOwner(userId, MAX_SESSION_FOLDERS_PER_USER);
391
264
  return rows.map(row => ({
392
265
  id: row.id,
393
266
  name: encryptionService.decrypt(row.name),
@@ -395,396 +268,175 @@ class StorageService {
395
268
  updatedAt: row.updated_at,
396
269
  }));
397
270
  }
398
- saveSessionFolder(folder, userId = 'default') {
399
- if (!this.useSQLite)
400
- return;
271
+ async saveSessionFolder(folder, userId = 'default') {
401
272
  if (!folder.name.trim() ||
402
273
  folder.name.length > MAX_SESSION_FOLDER_NAME_LENGTH) {
403
274
  throw new ResourcePolicyError('Invalid session folder name', 400);
404
275
  }
405
- const db = getDatabase();
406
- const save = db.transaction(() => {
407
- const existing = db
408
- .prepare('SELECT 1 FROM session_folders WHERE id = ? AND user_id = ?')
409
- .get(folder.id, userId);
410
- if (!existing) {
411
- const { count } = db
412
- .prepare('SELECT COUNT(*) AS count FROM session_folders WHERE user_id = ?')
413
- .get(userId);
414
- if (count >= MAX_SESSION_FOLDERS_PER_USER) {
415
- throw new ResourcePolicyError(`A user may store at most ${MAX_SESSION_FOLDERS_PER_USER} session folders`, 409);
416
- }
417
- }
418
- db.prepare(`INSERT OR REPLACE INTO session_folders (id, user_id, name, created_at, updated_at)
419
- VALUES (?, ?, ?, ?, ?)`).run(folder.id, userId, encryptionService.encrypt(folder.name), folder.createdAt, folder.updatedAt);
420
- });
421
- save();
422
- }
423
- deleteSessionFolder(folderId, userId = 'default') {
424
- if (!this.useSQLite)
425
- return false;
426
- const db = getDatabase();
427
- const remove = db.transaction(() => {
428
- db.prepare('UPDATE sessions SET folder_id = NULL WHERE folder_id = ? AND user_id = ?').run(folderId, userId);
429
- return db
430
- .prepare('DELETE FROM session_folders WHERE id = ? AND user_id = ?')
431
- .run(folderId, userId).changes;
432
- });
433
- return remove() > 0;
434
- }
435
- clearAllSessions(userId = 'default') {
436
- if (this.useSQLite) {
437
- const db = getDatabase();
438
- const stmt = db.prepare('DELETE FROM sessions WHERE user_id = ?');
439
- const result = stmt.run(userId);
440
- return result.changes;
276
+ try {
277
+ await getPersistence(encryptionService).repositories.resources.sessionFolders.replaceWithLimit({
278
+ id: folder.id,
279
+ user_id: userId,
280
+ name: encryptionService.encrypt(folder.name),
281
+ created_at: folder.createdAt,
282
+ updated_at: folder.updatedAt,
283
+ }, MAX_SESSION_FOLDERS_PER_USER);
441
284
  }
442
- else {
443
- // Fallback to JSON
444
- try {
445
- const currentSessions = this.getAllSessions();
446
- const deletedCount = currentSessions.length;
447
- fs.writeFileSync(this.sessionsFile, JSON.stringify([], null, 2));
448
- return deletedCount;
449
- }
450
- catch (error) {
451
- logger.error('Failed to clear all sessions from JSON:', error);
452
- return 0;
285
+ catch (error) {
286
+ if (error instanceof PersistenceResourceLimitError) {
287
+ throw new ResourcePolicyError(`A user may store at most ${MAX_SESSION_FOLDERS_PER_USER} session folders`, 409);
453
288
  }
289
+ throw error;
454
290
  }
455
291
  }
292
+ async deleteSessionFolder(folderId, userId = 'default') {
293
+ return getPersistence(encryptionService).repositories.resources.sessionFolders.deleteAndDetach(folderId, userId);
294
+ }
295
+ async clearAllSessions(userId = 'default') {
296
+ return getPersistence(encryptionService).repositories.resources.chatSessions.deleteAllByOwner(userId);
297
+ }
456
298
  // =================================
457
299
  // PREFERENCES MANAGEMENT
458
300
  // =================================
459
301
  /**
460
302
  * Safely decrypt and parse a preference value with proper error handling
461
- * Returns null for corrupted data (which will be cleaned up)
303
+ * while distinguishing valid JSON null from corrupted data.
462
304
  */
463
- safeDecryptPreference(key, value, _userId) {
305
+ safeDecryptPreference(value) {
464
306
  try {
465
307
  const decryptedValue = encryptionService.decrypt(value);
466
308
  try {
467
- return JSON.parse(decryptedValue);
309
+ return { valid: true, value: JSON.parse(decryptedValue) };
468
310
  }
469
311
  catch {
470
- // Corrupted - will be cleaned up
471
- return null;
312
+ return { valid: false };
472
313
  }
473
314
  }
474
315
  catch {
475
316
  // Try as unencrypted legacy data
476
317
  try {
477
- return JSON.parse(value);
318
+ return { valid: true, value: JSON.parse(value) };
478
319
  }
479
320
  catch {
480
- // Corrupted - will be cleaned up
481
- return null;
321
+ return { valid: false };
482
322
  }
483
323
  }
484
324
  }
325
+ decodePreferences(rows) {
326
+ const preferences = {};
327
+ const validRows = [];
328
+ let corruptedCount = 0;
329
+ for (const row of rows) {
330
+ const decoded = this.safeDecryptPreference(row.value);
331
+ if (!decoded.valid) {
332
+ corruptedCount += 1;
333
+ continue;
334
+ }
335
+ preferences[row.key] = decoded.value;
336
+ validRows.push(row);
337
+ }
338
+ return {
339
+ preferences: Object.keys(preferences).length > 0
340
+ ? preferences
341
+ : null,
342
+ validRows,
343
+ corruptedCount,
344
+ };
345
+ }
346
+ encodePreferences(preferences) {
347
+ return Object.entries(preferences).flatMap(([key, value]) => value === undefined
348
+ ? []
349
+ : [
350
+ {
351
+ key,
352
+ value: encryptionService.encrypt(JSON.stringify(value)),
353
+ },
354
+ ]);
355
+ }
485
356
  /**
486
- * Delete a corrupted preference from the database
357
+ * Map protected preference rows through a synchronous application mutation.
358
+ * Archive repositories use this only from their owner-locked transaction so
359
+ * merge imports derive from the latest committed preferences.
487
360
  */
488
- deleteCorruptedPreference(userId, key) {
489
- if (this.useSQLite) {
490
- const db = getDatabase();
491
- db.prepare('DELETE FROM user_preferences WHERE user_id = ? AND key = ?').run(userId, key);
492
- logger.debug(`Cleaned up corrupted preference: ${key}`);
493
- }
361
+ transformStoredPreferences(current, mutation) {
362
+ return this.encodePreferences(mutation(this.decodePreferences(current).preferences));
494
363
  }
495
- getPreferences(userId) {
496
- if (this.useSQLite) {
497
- const db = getDatabase();
498
- // If no userId provided, get the first user (single-user mode)
499
- if (!userId) {
500
- const firstUser = db.prepare('SELECT id FROM users LIMIT 1').get();
501
- if (firstUser) {
502
- userId = firstUser.id;
503
- }
504
- else {
505
- return null; // No users found, return null
506
- }
507
- }
508
- const stmt = db.prepare('SELECT key, value FROM user_preferences WHERE user_id = ?');
509
- const rows = stmt.all(userId);
510
- if (rows.length === 0)
511
- return null;
512
- const preferences = {};
513
- const corruptedKeys = [];
514
- rows.forEach(row => {
515
- const value = this.safeDecryptPreference(row.key, row.value, userId);
516
- if (value === null) {
517
- corruptedKeys.push(row.key);
518
- }
519
- else {
520
- preferences[row.key] = value;
521
- }
522
- });
523
- // Clean up corrupted preferences
524
- if (corruptedKeys.length > 0 && userId) {
525
- corruptedKeys.forEach(key => this.deleteCorruptedPreference(userId, key));
526
- }
527
- return Object.keys(preferences).length > 0
528
- ? preferences
529
- : null;
530
- }
531
- else {
532
- // Fallback to JSON
533
- try {
534
- if (fs.existsSync(this.preferencesFile)) {
535
- const data = fs.readFileSync(this.preferencesFile, 'utf8');
536
- return JSON.parse(data);
537
- }
538
- }
539
- catch (error) {
540
- logger.error('Failed to load preferences from JSON:', error);
541
- }
542
- }
543
- return null;
544
- }
545
- savePreferences(preferences, userId) {
546
- if (this.useSQLite) {
547
- const db = getDatabase();
548
- const now = Date.now();
549
- // If no userId provided, get the first user (single-user mode)
550
- if (!userId) {
551
- const firstUser = db.prepare('SELECT id FROM users LIMIT 1').get();
552
- if (firstUser) {
553
- userId = firstUser.id;
554
- }
555
- else {
556
- throw new Error('No users found in database');
557
- }
558
- }
559
- const transaction = db.transaction((preferences) => {
560
- // Delete existing preferences for this user
561
- const deleteStmt = db.prepare('DELETE FROM user_preferences WHERE user_id = ?');
562
- deleteStmt.run(userId);
563
- // Insert new preferences
564
- const insertStmt = db.prepare(`
565
- INSERT INTO user_preferences (id, user_id, key, value, created_at, updated_at)
566
- VALUES (?, ?, ?, ?, ?, ?)
567
- `);
568
- Object.entries(preferences).forEach(([key, value]) => {
569
- // Skip undefined values - they would cause NOT NULL constraint errors
570
- if (value === undefined) {
571
- return;
572
- }
573
- // Encrypt the preference value before storing
574
- const encryptedValue = encryptionService.encrypt(JSON.stringify(value));
575
- insertStmt.run(uuidv4(), userId, key, encryptedValue, now, now);
576
- });
577
- });
578
- transaction(preferences);
579
- }
580
- else {
581
- // Fallback to JSON
582
- try {
583
- fs.writeFileSync(this.preferencesFile, JSON.stringify(preferences, null, 2));
584
- }
585
- catch (error) {
586
- logger.error('Failed to save preferences to JSON:', error);
587
- }
364
+ async getPreferences(userId) {
365
+ const repository = getPersistence(encryptionService).repositories.resources.preferences;
366
+ const owner = await repository.resolveOwner(userId);
367
+ if (!owner)
368
+ return null;
369
+ const rows = await repository.listByOwner(owner);
370
+ if (rows.length === 0)
371
+ return null;
372
+ const decoded = this.decodePreferences(rows);
373
+ if (decoded.corruptedCount === 0)
374
+ return decoded.preferences;
375
+ // Re-read under the same serialization boundary used by writers. A stale
376
+ // read must never delete a value that another replica repaired meanwhile.
377
+ let cleaned = 0;
378
+ const result = await repository.mutateAll(owner, Date.now(), current => {
379
+ const fresh = this.decodePreferences(current);
380
+ cleaned = fresh.corruptedCount;
381
+ return fresh.corruptedCount > 0 ? fresh.validRows : undefined;
382
+ });
383
+ if (cleaned > 0) {
384
+ logger.debug(`Cleaned up ${cleaned} corrupted preference value(s)`);
588
385
  }
386
+ return result
387
+ ? this.decodePreferences(result.preferences).preferences
388
+ : null;
389
+ }
390
+ /**
391
+ * Atomically derive a preference set from the latest committed value.
392
+ * Returning undefined from the callback performs no logical update (while
393
+ * still removing any corrupt rows encountered under the lock).
394
+ */
395
+ async mutatePreferences(mutation, userId) {
396
+ const repository = getPersistence(encryptionService).repositories.resources.preferences;
397
+ const result = await repository.mutateAll(userId, Date.now(), current => {
398
+ const decoded = this.decodePreferences(current);
399
+ const requested = mutation(decoded.preferences);
400
+ if (requested !== undefined) {
401
+ return this.transformStoredPreferences(current, () => requested);
402
+ }
403
+ return decoded.corruptedCount > 0 ? decoded.validRows : undefined;
404
+ });
405
+ return result
406
+ ? this.decodePreferences(result.preferences).preferences
407
+ : null;
408
+ }
409
+ async savePreferences(preferences, userId) {
410
+ const saved = await this.mutatePreferences(() => preferences, userId);
411
+ if (!saved)
412
+ throw new Error('No users found in database');
589
413
  }
590
414
  // =================================
591
415
  // DOCUMENT MANAGEMENT
592
416
  // =================================
593
- getAllDocuments(userId = 'default') {
594
- if (this.useSQLite) {
595
- const db = getDatabase();
596
- const stmt = db.prepare(`
597
- SELECT * FROM documents WHERE user_id = ? ORDER BY uploaded_at DESC
598
- `);
599
- const rows = stmt.all(userId);
600
- return rows.map(mapDocumentRow);
601
- }
602
- else {
603
- // Fallback to JSON
604
- try {
605
- if (fs.existsSync(this.documentsFile)) {
606
- const data = fs.readFileSync(this.documentsFile, 'utf8');
607
- return JSON.parse(data);
608
- }
609
- }
610
- catch (error) {
611
- logger.error('Failed to load documents from JSON:', error);
612
- }
613
- }
614
- return [];
615
- }
616
- getDocument(documentId, userId = 'default') {
617
- if (this.useSQLite) {
618
- const db = getDatabase();
619
- const stmt = db.prepare('SELECT * FROM documents WHERE id = ? AND user_id = ?');
620
- const row = stmt.get(documentId, userId);
621
- if (!row)
622
- return undefined;
623
- return mapDocumentRow(row);
624
- }
625
- else {
626
- // Fallback to JSON
627
- const documents = this.getAllDocuments();
628
- return documents.find(d => d.id === documentId);
629
- }
417
+ async getAllDocuments(userId = 'default') {
418
+ return getPlatformStorageRuntime().domains.documents.listByOwner(userId);
630
419
  }
631
- saveDocument(document, userId = 'default') {
632
- if (this.useSQLite) {
633
- const db = getDatabase();
634
- const now = Date.now();
635
- const stmt = db.prepare(`
636
- INSERT OR REPLACE INTO documents
637
- (id, user_id, filename, title, content, file_type, size, session_id, collection_id, metadata, uploaded_at, created_at, updated_at)
638
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
639
- `);
640
- // Encrypt sensitive document data
641
- const encryptedTitle = document.title
642
- ? encryptionService.encrypt(document.title)
643
- : null;
644
- const encryptedContent = document.content
645
- ? encryptionService.encrypt(document.content)
646
- : null;
647
- const encryptedMetadata = document.metadata
648
- ? encryptionService.encrypt(JSON.stringify(document.metadata))
649
- : null;
650
- stmt.run(document.id, userId, document.filename, encryptedTitle, encryptedContent, document.fileType || null, document.size || null, document.sessionId || null, document.collectionId || null, encryptedMetadata, document.uploadedAt, document.createdAt || now, now);
651
- }
652
- else {
653
- // Fallback to JSON
654
- try {
655
- const documents = this.getAllDocuments();
656
- const existingIndex = documents.findIndex(d => d.id === document.id);
657
- if (existingIndex >= 0) {
658
- documents[existingIndex] = document;
659
- }
660
- else {
661
- documents.push(document);
662
- }
663
- fs.writeFileSync(this.documentsFile, JSON.stringify(documents, null, 2));
664
- }
665
- catch (error) {
666
- logger.error('Failed to save document to JSON:', error);
667
- }
668
- }
420
+ async getDocument(documentId, userId = 'default') {
421
+ return getPlatformStorageRuntime().domains.documents.findByOwner(documentId, userId);
669
422
  }
670
- deleteDocument(documentId, userId = 'default') {
671
- if (this.useSQLite) {
672
- const db = getDatabase();
673
- const stmt = db.prepare('DELETE FROM documents WHERE id = ? AND user_id = ?');
674
- const result = stmt.run(documentId, userId);
675
- return result.changes > 0;
676
- }
677
- else {
678
- // Fallback to JSON
679
- try {
680
- const documents = this.getAllDocuments();
681
- const filteredDocuments = documents.filter(d => d.id !== documentId);
682
- if (filteredDocuments.length !== documents.length) {
683
- fs.writeFileSync(this.documentsFile, JSON.stringify(filteredDocuments, null, 2));
684
- return true;
685
- }
686
- }
687
- catch (error) {
688
- logger.error('Failed to delete document from JSON:', error);
689
- }
690
- }
691
- return false;
423
+ async saveDocument(document, userId = 'default') {
424
+ await getPlatformStorageRuntime().domains.documents.upsert(document, userId);
425
+ }
426
+ async deleteDocument(documentId, userId = 'default') {
427
+ return getPlatformStorageRuntime().domains.documents.deleteByOwner(documentId, userId);
692
428
  }
693
429
  // =================================
694
430
  // DOCUMENT CHUNKS MANAGEMENT
695
431
  // =================================
696
- getDocumentChunks(documentId) {
697
- if (this.useSQLite) {
698
- const db = getDatabase();
699
- const stmt = db.prepare(`
700
- SELECT * FROM document_chunks WHERE document_id = ? ORDER BY chunk_index ASC
701
- `);
702
- const rows = stmt.all(documentId);
703
- return rows.map(mapDocumentChunkRow);
704
- }
705
- else {
706
- // Fallback to JSON
707
- try {
708
- if (fs.existsSync(this.documentChunksFile)) {
709
- const data = fs.readFileSync(this.documentChunksFile, 'utf8');
710
- const chunksData = JSON.parse(data);
711
- return chunksData[documentId] || [];
712
- }
713
- }
714
- catch (error) {
715
- logger.error('Failed to load document chunks from JSON:', error);
716
- }
717
- }
718
- return [];
719
- }
720
- saveDocumentChunks(documentId, chunks) {
721
- if (this.useSQLite) {
722
- const db = getDatabase();
723
- const now = Date.now();
724
- const transaction = db.transaction((documentId, chunks) => {
725
- // Delete existing chunks
726
- const deleteStmt = db.prepare('DELETE FROM document_chunks WHERE document_id = ?');
727
- deleteStmt.run(documentId);
728
- // Insert new chunks
729
- if (chunks.length > 0) {
730
- const insertStmt = db.prepare(`
731
- INSERT INTO document_chunks
732
- (id, document_id, chunk_index, content, start_char, end_char, embedding, created_at)
733
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
734
- `);
735
- chunks.forEach(chunk => {
736
- // Encrypt chunk data
737
- const encryptedContent = encryptionService.encrypt(chunk.content);
738
- const encryptedEmbedding = chunk.embedding
739
- ? encryptionService.encrypt(JSON.stringify(chunk.embedding))
740
- : null;
741
- insertStmt.run(chunk.id, documentId, chunk.chunkIndex, encryptedContent, chunk.startChar || null, chunk.endChar || null, encryptedEmbedding, now);
742
- });
743
- }
744
- });
745
- transaction(documentId, chunks);
746
- }
747
- else {
748
- // Fallback to JSON
749
- try {
750
- let chunksData = {};
751
- if (fs.existsSync(this.documentChunksFile)) {
752
- const data = fs.readFileSync(this.documentChunksFile, 'utf8');
753
- chunksData = JSON.parse(data);
754
- }
755
- chunksData[documentId] = chunks;
756
- fs.writeFileSync(this.documentChunksFile, JSON.stringify(chunksData, null, 2));
757
- }
758
- catch (error) {
759
- logger.error('Failed to save document chunks to JSON:', error);
760
- }
761
- }
432
+ async getDocumentChunks(documentId) {
433
+ return getPlatformStorageRuntime().domains.documents.listChunks(documentId);
762
434
  }
763
- deleteDocumentChunks(documentId) {
764
- if (this.useSQLite) {
765
- const db = getDatabase();
766
- const stmt = db.prepare('DELETE FROM document_chunks WHERE document_id = ?');
767
- const result = stmt.run(documentId);
768
- return result.changes > 0;
769
- }
770
- else {
771
- // Fallback to JSON
772
- try {
773
- if (fs.existsSync(this.documentChunksFile)) {
774
- const data = fs.readFileSync(this.documentChunksFile, 'utf8');
775
- const chunksData = JSON.parse(data);
776
- if (chunksData[documentId]) {
777
- delete chunksData[documentId];
778
- fs.writeFileSync(this.documentChunksFile, JSON.stringify(chunksData, null, 2));
779
- return true;
780
- }
781
- }
782
- }
783
- catch (error) {
784
- logger.error('Failed to delete document chunks from JSON:', error);
785
- }
786
- }
787
- return false;
435
+ async saveDocumentChunks(documentId, chunks) {
436
+ await getPlatformStorageRuntime().domains.documents.replaceChunks(documentId, chunks);
437
+ }
438
+ async deleteDocumentChunks(documentId) {
439
+ return getPlatformStorageRuntime().domains.documents.deleteChunks(documentId);
788
440
  }
789
441
  }
790
442
  // Export singleton instance