libre-webui 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/README.md +32 -22
  2. package/backend/dist/index.d.ts.map +1 -1
  3. package/backend/dist/index.js +33 -4
  4. package/backend/dist/index.js.map +1 -1
  5. package/backend/dist/middleware/auth.d.ts +7 -0
  6. package/backend/dist/middleware/auth.d.ts.map +1 -1
  7. package/backend/dist/middleware/auth.js +26 -0
  8. package/backend/dist/middleware/auth.js.map +1 -1
  9. package/backend/dist/middleware/index.d.ts +20 -0
  10. package/backend/dist/middleware/index.d.ts.map +1 -1
  11. package/backend/dist/middleware/index.js +105 -2
  12. package/backend/dist/middleware/index.js.map +1 -1
  13. package/backend/dist/models/personaModel.d.ts.map +1 -1
  14. package/backend/dist/models/personaModel.js +2 -0
  15. package/backend/dist/models/personaModel.js.map +1 -1
  16. package/backend/dist/observability/otel.d.ts +40 -0
  17. package/backend/dist/observability/otel.d.ts.map +1 -0
  18. package/backend/dist/observability/otel.js +337 -0
  19. package/backend/dist/observability/otel.js.map +1 -0
  20. package/backend/dist/observability/requestContext.d.ts +14 -0
  21. package/backend/dist/observability/requestContext.d.ts.map +1 -0
  22. package/backend/dist/observability/requestContext.js +21 -0
  23. package/backend/dist/observability/requestContext.js.map +1 -0
  24. package/backend/dist/persistence/chatGenerationTypes.d.ts +9 -0
  25. package/backend/dist/persistence/chatGenerationTypes.d.ts.map +1 -1
  26. package/backend/dist/persistence/extensionTypes.d.ts +13 -0
  27. package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
  28. package/backend/dist/persistence/extensionTypes.js.map +1 -1
  29. package/backend/dist/persistence/index.d.ts +1 -1
  30. package/backend/dist/persistence/index.d.ts.map +1 -1
  31. package/backend/dist/persistence/index.js.map +1 -1
  32. package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts +9 -0
  33. package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts.map +1 -0
  34. package/backend/dist/persistence/postgresAgentFoundationMigration.js +164 -0
  35. package/backend/dist/persistence/postgresAgentFoundationMigration.js.map +1 -0
  36. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
  37. package/backend/dist/persistence/postgresExtensionRepositories.js +46 -2
  38. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
  39. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts +10 -0
  40. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts.map +1 -0
  41. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js +148 -0
  42. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js.map +1 -0
  43. package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts +9 -0
  44. package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts.map +1 -0
  45. package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js +107 -0
  46. package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js.map +1 -0
  47. package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
  48. package/backend/dist/persistence/postgresMigrationRegistry.js +12 -0
  49. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
  50. package/backend/dist/persistence/postgresNotesV2Migration.d.ts +4 -0
  51. package/backend/dist/persistence/postgresNotesV2Migration.d.ts.map +1 -0
  52. package/backend/dist/persistence/postgresNotesV2Migration.js +57 -0
  53. package/backend/dist/persistence/postgresNotesV2Migration.js.map +1 -0
  54. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
  55. package/backend/dist/persistence/postgresResourceRepositories.js +1930 -133
  56. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  57. package/backend/dist/persistence/postgresSecurityRepositories.d.ts.map +1 -1
  58. package/backend/dist/persistence/postgresSecurityRepositories.js +150 -0
  59. package/backend/dist/persistence/postgresSecurityRepositories.js.map +1 -1
  60. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts +9 -0
  61. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts.map +1 -0
  62. package/backend/dist/persistence/postgresSkillFilesMigration.js +50 -0
  63. package/backend/dist/persistence/postgresSkillFilesMigration.js.map +1 -0
  64. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts +10 -0
  65. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts.map +1 -0
  66. package/backend/dist/persistence/postgresTeamCollaborationMigration.js +161 -0
  67. package/backend/dist/persistence/postgresTeamCollaborationMigration.js.map +1 -0
  68. package/backend/dist/persistence/resourceTypes.d.ts +600 -3
  69. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
  70. package/backend/dist/persistence/resourceTypes.js.map +1 -1
  71. package/backend/dist/persistence/securityTypes.d.ts +59 -0
  72. package/backend/dist/persistence/securityTypes.d.ts.map +1 -1
  73. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  74. package/backend/dist/persistence/sqliteExtensionRepositories.js +26 -4
  75. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  76. package/backend/dist/persistence/sqliteMigrations.d.ts +10 -0
  77. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
  78. package/backend/dist/persistence/sqliteMigrations.js +1492 -131
  79. package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
  80. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
  81. package/backend/dist/persistence/sqliteResourceRepositories.js +1657 -134
  82. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  83. package/backend/dist/persistence/sqliteSecurityRepositories.d.ts.map +1 -1
  84. package/backend/dist/persistence/sqliteSecurityRepositories.js +134 -0
  85. package/backend/dist/persistence/sqliteSecurityRepositories.js.map +1 -1
  86. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
  87. package/backend/dist/persistence/sqliteToPostgresMigration.js +302 -3
  88. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
  89. package/backend/dist/platform/jobs/domainJobContracts.d.ts +10 -0
  90. package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -1
  91. package/backend/dist/platform/jobs/domainJobContracts.js +10 -0
  92. package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -1
  93. package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
  94. package/backend/dist/platform/jobs/domainJobHandlers.js +374 -4
  95. package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
  96. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -1
  97. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +4 -2
  98. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -1
  99. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -1
  100. package/backend/dist/platform/jobs/postgresDurableJobWorker.js +4 -2
  101. package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -1
  102. package/backend/dist/platform/storage/pgVectorStore.d.ts +2 -1
  103. package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -1
  104. package/backend/dist/platform/storage/pgVectorStore.js +51 -0
  105. package/backend/dist/platform/storage/pgVectorStore.js.map +1 -1
  106. package/backend/dist/platform/storage/platformDomainRepositories.d.ts +8 -2
  107. package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -1
  108. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -1
  109. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +25 -4
  110. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -1
  111. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +2 -1
  112. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -1
  113. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +35 -0
  114. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -1
  115. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -1
  116. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +26 -3
  117. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -1
  118. package/backend/dist/platform/storage/vectorStore.d.ts +14 -0
  119. package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -1
  120. package/backend/dist/platform/storage/vectorStore.js.map +1 -1
  121. package/backend/dist/routes/access.d.ts.map +1 -1
  122. package/backend/dist/routes/access.js +84 -3
  123. package/backend/dist/routes/access.js.map +1 -1
  124. package/backend/dist/routes/auth.d.ts.map +1 -1
  125. package/backend/dist/routes/auth.js +419 -1
  126. package/backend/dist/routes/auth.js.map +1 -1
  127. package/backend/dist/routes/calendar.d.ts.map +1 -1
  128. package/backend/dist/routes/calendar.js +125 -22
  129. package/backend/dist/routes/calendar.js.map +1 -1
  130. package/backend/dist/routes/channels.d.ts +3 -0
  131. package/backend/dist/routes/channels.d.ts.map +1 -0
  132. package/backend/dist/routes/channels.js +447 -0
  133. package/backend/dist/routes/channels.js.map +1 -0
  134. package/backend/dist/routes/chat.d.ts.map +1 -1
  135. package/backend/dist/routes/chat.js +195 -7
  136. package/backend/dist/routes/chat.js.map +1 -1
  137. package/backend/dist/routes/costs.d.ts +3 -0
  138. package/backend/dist/routes/costs.d.ts.map +1 -0
  139. package/backend/dist/routes/costs.js +191 -0
  140. package/backend/dist/routes/costs.js.map +1 -0
  141. package/backend/dist/routes/documents.d.ts.map +1 -1
  142. package/backend/dist/routes/documents.js +68 -21
  143. package/backend/dist/routes/documents.js.map +1 -1
  144. package/backend/dist/routes/evaluations.d.ts +3 -0
  145. package/backend/dist/routes/evaluations.d.ts.map +1 -0
  146. package/backend/dist/routes/evaluations.js +352 -0
  147. package/backend/dist/routes/evaluations.js.map +1 -0
  148. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  149. package/backend/dist/routes/imageGen.js +2 -1
  150. package/backend/dist/routes/imageGen.js.map +1 -1
  151. package/backend/dist/routes/media.d.ts.map +1 -1
  152. package/backend/dist/routes/media.js +228 -7
  153. package/backend/dist/routes/media.js.map +1 -1
  154. package/backend/dist/routes/notes.d.ts.map +1 -1
  155. package/backend/dist/routes/notes.js +149 -36
  156. package/backend/dist/routes/notes.js.map +1 -1
  157. package/backend/dist/routes/notifications.d.ts +3 -0
  158. package/backend/dist/routes/notifications.d.ts.map +1 -0
  159. package/backend/dist/routes/notifications.js +213 -0
  160. package/backend/dist/routes/notifications.js.map +1 -0
  161. package/backend/dist/routes/openaiCompat.d.ts +3 -0
  162. package/backend/dist/routes/openaiCompat.d.ts.map +1 -0
  163. package/backend/dist/routes/openaiCompat.js +314 -0
  164. package/backend/dist/routes/openaiCompat.js.map +1 -0
  165. package/backend/dist/routes/personas.js +1 -1
  166. package/backend/dist/routes/personas.js.map +1 -1
  167. package/backend/dist/routes/prompts.d.ts +3 -0
  168. package/backend/dist/routes/prompts.d.ts.map +1 -0
  169. package/backend/dist/routes/prompts.js +173 -0
  170. package/backend/dist/routes/prompts.js.map +1 -0
  171. package/backend/dist/routes/push.d.ts +3 -0
  172. package/backend/dist/routes/push.d.ts.map +1 -0
  173. package/backend/dist/routes/push.js +105 -0
  174. package/backend/dist/routes/push.js.map +1 -0
  175. package/backend/dist/routes/recovery.d.ts +3 -0
  176. package/backend/dist/routes/recovery.d.ts.map +1 -0
  177. package/backend/dist/routes/recovery.js +83 -0
  178. package/backend/dist/routes/recovery.js.map +1 -0
  179. package/backend/dist/routes/search.d.ts.map +1 -1
  180. package/backend/dist/routes/search.js +29 -1
  181. package/backend/dist/routes/search.js.map +1 -1
  182. package/backend/dist/routes/skills.d.ts +3 -0
  183. package/backend/dist/routes/skills.d.ts.map +1 -0
  184. package/backend/dist/routes/skills.js +246 -0
  185. package/backend/dist/routes/skills.js.map +1 -0
  186. package/backend/dist/routes/stt.d.ts.map +1 -1
  187. package/backend/dist/routes/stt.js +2 -1
  188. package/backend/dist/routes/stt.js.map +1 -1
  189. package/backend/dist/routes/tools.d.ts +3 -0
  190. package/backend/dist/routes/tools.d.ts.map +1 -0
  191. package/backend/dist/routes/tools.js +359 -0
  192. package/backend/dist/routes/tools.js.map +1 -0
  193. package/backend/dist/routes/tts.d.ts.map +1 -1
  194. package/backend/dist/routes/tts.js +63 -8
  195. package/backend/dist/routes/tts.js.map +1 -1
  196. package/backend/dist/routes/users.d.ts.map +1 -1
  197. package/backend/dist/routes/users.js +35 -0
  198. package/backend/dist/routes/users.js.map +1 -1
  199. package/backend/dist/routes/voiceAccess.d.ts +3 -0
  200. package/backend/dist/routes/voiceAccess.d.ts.map +1 -0
  201. package/backend/dist/routes/voiceAccess.js +102 -0
  202. package/backend/dist/routes/voiceAccess.js.map +1 -0
  203. package/backend/dist/services/apiTokenService.d.ts +2 -2
  204. package/backend/dist/services/apiTokenService.d.ts.map +1 -1
  205. package/backend/dist/services/apiTokenService.js +7 -0
  206. package/backend/dist/services/apiTokenService.js.map +1 -1
  207. package/backend/dist/services/authService.d.ts +6 -0
  208. package/backend/dist/services/authService.d.ts.map +1 -1
  209. package/backend/dist/services/authService.js +9 -0
  210. package/backend/dist/services/authService.js.map +1 -1
  211. package/backend/dist/services/authorizationService.d.ts +8 -4
  212. package/backend/dist/services/authorizationService.d.ts.map +1 -1
  213. package/backend/dist/services/authorizationService.js +31 -1
  214. package/backend/dist/services/authorizationService.js.map +1 -1
  215. package/backend/dist/services/automationSchedulerService.d.ts.map +1 -1
  216. package/backend/dist/services/automationSchedulerService.js +40 -3
  217. package/backend/dist/services/automationSchedulerService.js.map +1 -1
  218. package/backend/dist/services/automationService.d.ts +4 -1
  219. package/backend/dist/services/automationService.d.ts.map +1 -1
  220. package/backend/dist/services/automationService.js +25 -2
  221. package/backend/dist/services/automationService.js.map +1 -1
  222. package/backend/dist/services/builtinToolsService.d.ts +20 -0
  223. package/backend/dist/services/builtinToolsService.d.ts.map +1 -0
  224. package/backend/dist/services/builtinToolsService.js +661 -0
  225. package/backend/dist/services/builtinToolsService.js.map +1 -0
  226. package/backend/dist/services/calendarService.d.ts +74 -0
  227. package/backend/dist/services/calendarService.d.ts.map +1 -0
  228. package/backend/dist/services/calendarService.js +339 -0
  229. package/backend/dist/services/calendarService.js.map +1 -0
  230. package/backend/dist/services/channelService.d.ts +195 -0
  231. package/backend/dist/services/channelService.d.ts.map +1 -0
  232. package/backend/dist/services/channelService.js +1057 -0
  233. package/backend/dist/services/channelService.js.map +1 -0
  234. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  235. package/backend/dist/services/chatRequestService.js +29 -1
  236. package/backend/dist/services/chatRequestService.js.map +1 -1
  237. package/backend/dist/services/chatService.d.ts +61 -1
  238. package/backend/dist/services/chatService.d.ts.map +1 -1
  239. package/backend/dist/services/chatService.js +218 -1
  240. package/backend/dist/services/chatService.js.map +1 -1
  241. package/backend/dist/services/chatToolRuntimeService.d.ts +55 -0
  242. package/backend/dist/services/chatToolRuntimeService.d.ts.map +1 -0
  243. package/backend/dist/services/chatToolRuntimeService.js +389 -0
  244. package/backend/dist/services/chatToolRuntimeService.js.map +1 -0
  245. package/backend/dist/services/costGovernanceService.d.ts +102 -0
  246. package/backend/dist/services/costGovernanceService.d.ts.map +1 -0
  247. package/backend/dist/services/costGovernanceService.js +463 -0
  248. package/backend/dist/services/costGovernanceService.js.map +1 -0
  249. package/backend/dist/services/dataArchiveService.d.ts +6 -0
  250. package/backend/dist/services/dataArchiveService.d.ts.map +1 -1
  251. package/backend/dist/services/dataArchiveService.js +26 -4
  252. package/backend/dist/services/dataArchiveService.js.map +1 -1
  253. package/backend/dist/services/documentMediaExtractionService.d.ts +40 -0
  254. package/backend/dist/services/documentMediaExtractionService.d.ts.map +1 -0
  255. package/backend/dist/services/documentMediaExtractionService.js +157 -0
  256. package/backend/dist/services/documentMediaExtractionService.js.map +1 -0
  257. package/backend/dist/services/documentService.d.ts +64 -1
  258. package/backend/dist/services/documentService.d.ts.map +1 -1
  259. package/backend/dist/services/documentService.js +342 -83
  260. package/backend/dist/services/documentService.js.map +1 -1
  261. package/backend/dist/services/durableChatGenerationService.d.ts +9 -0
  262. package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -1
  263. package/backend/dist/services/durableChatGenerationService.js +152 -11
  264. package/backend/dist/services/durableChatGenerationService.js.map +1 -1
  265. package/backend/dist/services/encryptionService.d.ts +6 -0
  266. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  267. package/backend/dist/services/encryptionService.js +12 -0
  268. package/backend/dist/services/encryptionService.js.map +1 -1
  269. package/backend/dist/services/evaluationService.d.ts +111 -0
  270. package/backend/dist/services/evaluationService.d.ts.map +1 -0
  271. package/backend/dist/services/evaluationService.js +403 -0
  272. package/backend/dist/services/evaluationService.js.map +1 -0
  273. package/backend/dist/services/galleryService.d.ts +6 -0
  274. package/backend/dist/services/galleryService.d.ts.map +1 -1
  275. package/backend/dist/services/galleryService.js +26 -0
  276. package/backend/dist/services/galleryService.js.map +1 -1
  277. package/backend/dist/services/mcpClientService.d.ts +29 -0
  278. package/backend/dist/services/mcpClientService.d.ts.map +1 -0
  279. package/backend/dist/services/mcpClientService.js +189 -0
  280. package/backend/dist/services/mcpClientService.js.map +1 -0
  281. package/backend/dist/services/mfaService.d.ts +64 -0
  282. package/backend/dist/services/mfaService.d.ts.map +1 -0
  283. package/backend/dist/services/mfaService.js +263 -0
  284. package/backend/dist/services/mfaService.js.map +1 -0
  285. package/backend/dist/services/noteService.d.ts +71 -0
  286. package/backend/dist/services/noteService.d.ts.map +1 -0
  287. package/backend/dist/services/noteService.js +397 -0
  288. package/backend/dist/services/noteService.js.map +1 -0
  289. package/backend/dist/services/notificationService.d.ts +60 -0
  290. package/backend/dist/services/notificationService.d.ts.map +1 -0
  291. package/backend/dist/services/notificationService.js +340 -0
  292. package/backend/dist/services/notificationService.js.map +1 -0
  293. package/backend/dist/services/openApiToolService.d.ts +38 -0
  294. package/backend/dist/services/openApiToolService.d.ts.map +1 -0
  295. package/backend/dist/services/openApiToolService.js +254 -0
  296. package/backend/dist/services/openApiToolService.js.map +1 -0
  297. package/backend/dist/services/personaService.d.ts +18 -2
  298. package/backend/dist/services/personaService.d.ts.map +1 -1
  299. package/backend/dist/services/personaService.js +113 -4
  300. package/backend/dist/services/personaService.js.map +1 -1
  301. package/backend/dist/services/pluginImageGenerationService.d.ts +19 -0
  302. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  303. package/backend/dist/services/pluginImageGenerationService.js +121 -0
  304. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  305. package/backend/dist/services/pluginService.d.ts +7 -0
  306. package/backend/dist/services/pluginService.d.ts.map +1 -1
  307. package/backend/dist/services/pluginService.js +8 -2
  308. package/backend/dist/services/pluginService.js.map +1 -1
  309. package/backend/dist/services/preferencesService.d.ts +1 -1
  310. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  311. package/backend/dist/services/preferencesService.js +1 -0
  312. package/backend/dist/services/preferencesService.js.map +1 -1
  313. package/backend/dist/services/promptService.d.ts +74 -0
  314. package/backend/dist/services/promptService.d.ts.map +1 -0
  315. package/backend/dist/services/promptService.js +513 -0
  316. package/backend/dist/services/promptService.js.map +1 -0
  317. package/backend/dist/services/recoveryDrillService.d.ts +57 -0
  318. package/backend/dist/services/recoveryDrillService.d.ts.map +1 -0
  319. package/backend/dist/services/recoveryDrillService.js +363 -0
  320. package/backend/dist/services/recoveryDrillService.js.map +1 -0
  321. package/backend/dist/services/resourceGrantService.d.ts.map +1 -1
  322. package/backend/dist/services/resourceGrantService.js +62 -17
  323. package/backend/dist/services/resourceGrantService.js.map +1 -1
  324. package/backend/dist/services/searchService.d.ts +29 -0
  325. package/backend/dist/services/searchService.d.ts.map +1 -0
  326. package/backend/dist/services/searchService.js +0 -0
  327. package/backend/dist/services/searchService.js.map +1 -0
  328. package/backend/dist/services/securityAuditService.d.ts.map +1 -1
  329. package/backend/dist/services/securityAuditService.js +2 -1
  330. package/backend/dist/services/securityAuditService.js.map +1 -1
  331. package/backend/dist/services/sharedResourceAccess.d.ts +25 -0
  332. package/backend/dist/services/sharedResourceAccess.d.ts.map +1 -0
  333. package/backend/dist/services/sharedResourceAccess.js +59 -0
  334. package/backend/dist/services/sharedResourceAccess.js.map +1 -0
  335. package/backend/dist/services/skillService.d.ts +137 -0
  336. package/backend/dist/services/skillService.d.ts.map +1 -0
  337. package/backend/dist/services/skillService.js +852 -0
  338. package/backend/dist/services/skillService.js.map +1 -0
  339. package/backend/dist/services/toolAccessService.d.ts +9 -0
  340. package/backend/dist/services/toolAccessService.d.ts.map +1 -0
  341. package/backend/dist/services/toolAccessService.js +60 -0
  342. package/backend/dist/services/toolAccessService.js.map +1 -0
  343. package/backend/dist/services/toolApprovalService.d.ts +34 -0
  344. package/backend/dist/services/toolApprovalService.d.ts.map +1 -0
  345. package/backend/dist/services/toolApprovalService.js +188 -0
  346. package/backend/dist/services/toolApprovalService.js.map +1 -0
  347. package/backend/dist/services/toolGatewayService.d.ts +53 -0
  348. package/backend/dist/services/toolGatewayService.d.ts.map +1 -0
  349. package/backend/dist/services/toolGatewayService.js +249 -0
  350. package/backend/dist/services/toolGatewayService.js.map +1 -0
  351. package/backend/dist/services/toolServerService.d.ts +57 -0
  352. package/backend/dist/services/toolServerService.d.ts.map +1 -0
  353. package/backend/dist/services/toolServerService.js +521 -0
  354. package/backend/dist/services/toolServerService.js.map +1 -0
  355. package/backend/dist/services/voiceAccessService.d.ts +10 -0
  356. package/backend/dist/services/voiceAccessService.d.ts.map +1 -0
  357. package/backend/dist/services/voiceAccessService.js +74 -0
  358. package/backend/dist/services/voiceAccessService.js.map +1 -0
  359. package/backend/dist/services/voiceProfileService.d.ts +20 -0
  360. package/backend/dist/services/voiceProfileService.d.ts.map +1 -1
  361. package/backend/dist/services/voiceProfileService.js +60 -0
  362. package/backend/dist/services/voiceProfileService.js.map +1 -1
  363. package/backend/dist/services/webPushService.d.ts +71 -0
  364. package/backend/dist/services/webPushService.d.ts.map +1 -0
  365. package/backend/dist/services/webPushService.js +328 -0
  366. package/backend/dist/services/webPushService.js.map +1 -0
  367. package/backend/dist/services/webauthnService.d.ts +58 -0
  368. package/backend/dist/services/webauthnService.d.ts.map +1 -0
  369. package/backend/dist/services/webauthnService.js +300 -0
  370. package/backend/dist/services/webauthnService.js.map +1 -0
  371. package/backend/dist/storage.d.ts +28 -1
  372. package/backend/dist/storage.d.ts.map +1 -1
  373. package/backend/dist/storage.js +100 -1
  374. package/backend/dist/storage.js.map +1 -1
  375. package/backend/dist/storageMappers.d.ts +2 -2
  376. package/backend/dist/storageMappers.d.ts.map +1 -1
  377. package/backend/dist/storageMappers.js.map +1 -1
  378. package/backend/dist/types/index.d.ts +199 -3
  379. package/backend/dist/types/index.d.ts.map +1 -1
  380. package/backend/dist/types/index.js.map +1 -1
  381. package/backend/dist/types/tools.d.ts +137 -0
  382. package/backend/dist/types/tools.d.ts.map +1 -0
  383. package/backend/dist/types/tools.js +25 -0
  384. package/backend/dist/types/tools.js.map +1 -0
  385. package/backend/dist/utils/chatDocumentContext.d.ts +26 -1
  386. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  387. package/backend/dist/utils/chatDocumentContext.js +87 -18
  388. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  389. package/backend/dist/utils/documentExtraction.d.ts +97 -0
  390. package/backend/dist/utils/documentExtraction.d.ts.map +1 -0
  391. package/backend/dist/utils/documentExtraction.js +651 -0
  392. package/backend/dist/utils/documentExtraction.js.map +1 -0
  393. package/backend/dist/utils/hybridRetrieval.d.ts +34 -0
  394. package/backend/dist/utils/hybridRetrieval.d.ts.map +1 -0
  395. package/backend/dist/utils/hybridRetrieval.js +119 -0
  396. package/backend/dist/utils/hybridRetrieval.js.map +1 -0
  397. package/backend/dist/utils/icsCalendar.d.ts +27 -0
  398. package/backend/dist/utils/icsCalendar.d.ts.map +1 -0
  399. package/backend/dist/utils/icsCalendar.js +313 -0
  400. package/backend/dist/utils/icsCalendar.js.map +1 -0
  401. package/backend/dist/utils/imageEditUpload.d.ts +29 -0
  402. package/backend/dist/utils/imageEditUpload.d.ts.map +1 -0
  403. package/backend/dist/utils/imageEditUpload.js +82 -0
  404. package/backend/dist/utils/imageEditUpload.js.map +1 -0
  405. package/backend/dist/utils/logRedaction.d.ts +2 -0
  406. package/backend/dist/utils/logRedaction.d.ts.map +1 -0
  407. package/backend/dist/utils/logRedaction.js +66 -0
  408. package/backend/dist/utils/logRedaction.js.map +1 -0
  409. package/backend/dist/utils/logger.d.ts +3 -0
  410. package/backend/dist/utils/logger.d.ts.map +1 -1
  411. package/backend/dist/utils/logger.js +63 -20
  412. package/backend/dist/utils/logger.js.map +1 -1
  413. package/backend/dist/utils/pluginChatAdapter.d.ts +5 -1
  414. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  415. package/backend/dist/utils/pluginChatAdapter.js +83 -0
  416. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  417. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  418. package/backend/dist/utils/resourceLimits.d.ts +61 -2
  419. package/backend/dist/utils/resourceLimits.d.ts.map +1 -1
  420. package/backend/dist/utils/resourceLimits.js +59 -0
  421. package/backend/dist/utils/resourceLimits.js.map +1 -1
  422. package/backend/dist/utils/toolEgress.d.ts +23 -0
  423. package/backend/dist/utils/toolEgress.d.ts.map +1 -0
  424. package/backend/dist/utils/toolEgress.js +169 -0
  425. package/backend/dist/utils/toolEgress.js.map +1 -0
  426. package/backend/dist/utils/totp.d.ts +19 -0
  427. package/backend/dist/utils/totp.d.ts.map +1 -0
  428. package/backend/dist/utils/totp.js +117 -0
  429. package/backend/dist/utils/totp.js.map +1 -0
  430. package/backend/dist/utils/webauthn.d.ts +43 -0
  431. package/backend/dist/utils/webauthn.d.ts.map +1 -0
  432. package/backend/dist/utils/webauthn.js +294 -0
  433. package/backend/dist/utils/webauthn.js.map +1 -0
  434. package/backend/dist/utils/websocketMessages.d.ts +6 -0
  435. package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
  436. package/backend/dist/utils/websocketMessages.js +8 -0
  437. package/backend/dist/utils/websocketMessages.js.map +1 -1
  438. package/backend/dist/utils/zipArchive.d.ts +32 -0
  439. package/backend/dist/utils/zipArchive.d.ts.map +1 -0
  440. package/backend/dist/utils/zipArchive.js +171 -0
  441. package/backend/dist/utils/zipArchive.js.map +1 -0
  442. package/backend/dist/websocketServer.d.ts.map +1 -1
  443. package/backend/dist/websocketServer.js +142 -35
  444. package/backend/dist/websocketServer.js.map +1 -1
  445. package/backend/package.json +1 -1
  446. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  447. package/frontend/dist/assets/index-DBAf_VaS.js +47 -0
  448. package/frontend/dist/assets/index-kn_Axjts.css +1 -0
  449. package/frontend/dist/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  450. package/frontend/dist/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
  451. package/frontend/dist/fonts/jetbrains-mono.css +24 -0
  452. package/frontend/dist/index.html +27 -20
  453. package/frontend/dist/js/ArtifactContainer-C9zNtCay.js +1 -0
  454. package/frontend/dist/js/{ArtifactDemoPage-BeNs3gHp.js → ArtifactDemoPage-C-EBFBCt.js} +1 -1
  455. package/frontend/dist/js/ArtifactSandboxFrame-CTA1j_d1.js +111 -0
  456. package/frontend/dist/js/ArtifactSlideOutPanel-BOENbOiv.js +1 -0
  457. package/frontend/dist/js/AutomationsPage-C58MQ4te.js +1 -0
  458. package/frontend/dist/js/{Button-BPf_pOxH.js → Button-C0r3J9G_.js} +1 -1
  459. package/frontend/dist/js/CalendarPage-BcdAZ292.js +1 -0
  460. package/frontend/dist/js/ChannelsPage-DPr9Yajs.js +1 -0
  461. package/frontend/dist/js/ChatPage-DsbB748s.js +14 -0
  462. package/frontend/dist/js/EvaluationsPage-FWIJu2fI.js +2 -0
  463. package/frontend/dist/js/FirstTimeSetup-Cy-w6xko.js +1 -0
  464. package/frontend/dist/js/GalleryPage-DDAtxM-x.js +1 -0
  465. package/frontend/dist/js/HomePage-DLKwmE7n.js +1 -0
  466. package/frontend/dist/js/LibreClawPage-vKOj-9w9.js +1 -0
  467. package/frontend/dist/js/{ModelManagerModals-DcLGYN3l.js → ModelManagerModals-BY5TK38_.js} +1 -1
  468. package/frontend/dist/js/ModelSelector-CoCS6MZ9.js +1 -0
  469. package/frontend/dist/js/NotesPage-BElIpXgA.js +3 -0
  470. package/frontend/dist/js/OptimizedSyntaxHighlighter-xgyE3dRA.js +1 -0
  471. package/frontend/dist/js/PersonasPage-P40jVbfU.js +13 -0
  472. package/frontend/dist/js/PluginUsagePage-CKUEPCJN.js +1 -0
  473. package/frontend/dist/js/RichMessageContent-Bm2WaEGi.js +3 -0
  474. package/frontend/dist/js/SettingsModal-DxSGzx9A.js +19 -0
  475. package/frontend/dist/js/{SettingsToggle-woG_WebF.js → SettingsToggle-BIVyfGjl.js} +1 -1
  476. package/frontend/dist/js/SystemPage-BT07dTMT.js +1 -0
  477. package/frontend/dist/js/UserManagementPage-B9Vz5cm3.js +1 -0
  478. package/frontend/dist/js/WorkPage-qoN_e_jK.js +6 -0
  479. package/frontend/dist/js/api-D7Ff5M2Q.js +14 -0
  480. package/frontend/dist/js/appStore-DmV5wqDz.js +2 -0
  481. package/frontend/dist/js/ar-YHHTVP8f.js +2 -0
  482. package/frontend/dist/js/artifactHtml-DDmfpcB0.js +41 -0
  483. package/frontend/dist/js/{authStore-DbMdvNgJ.js → authStore-BYW8-kP6.js} +3 -3
  484. package/frontend/dist/js/{babel-BsYoxD-7.js → babel-DSqqk5kt.js} +1 -1
  485. package/frontend/dist/js/bn-C8VTxBVl.js +2 -0
  486. package/frontend/dist/js/chatStore-D-NTlArO.js +3 -0
  487. package/frontend/dist/js/{config-DSOYQ9a3.js → config-BqZ5304Q.js} +1 -1
  488. package/frontend/dist/js/cs-CCngB5fC.js +2 -0
  489. package/frontend/dist/js/da-CM2PP2ma.js +2 -0
  490. package/frontend/dist/js/de-BqVkD-dw.js +2 -0
  491. package/frontend/dist/js/es-BtWsWBjZ.js +2 -0
  492. package/frontend/dist/js/{estree-BcnBcOAx.js → estree-DPkpBuOU.js} +3 -3
  493. package/frontend/dist/js/evaluationsApi-Dnf2dTd-.js +1 -0
  494. package/frontend/dist/js/fr-C68w9abT.js +2 -0
  495. package/frontend/dist/js/hi-DtBlcyXZ.js +2 -0
  496. package/frontend/dist/js/{html-DkY55Jys.js → html-BpGUXG8E.js} +2 -2
  497. package/frontend/dist/js/id-BWzIu8tn.js +2 -0
  498. package/frontend/dist/js/is-yeFwu4dJ.js +2 -0
  499. package/frontend/dist/js/it-AxEMG8Jg.js +2 -0
  500. package/frontend/dist/js/ja-B-VyokB8.js +2 -0
  501. package/frontend/dist/js/ko-CvwzYr9k.js +2 -0
  502. package/frontend/dist/js/{markdown-IZSI9DXw.js → markdown-DCBRWJSK.js} +3 -3
  503. package/frontend/dist/js/markdown-core-BK7WVOb7.js +32 -0
  504. package/frontend/dist/js/{markdown-math-DK846gXU.js → markdown-math-e1ByS3KY.js} +5 -5
  505. package/frontend/dist/js/messageCodeStyles-BQwf7sSz.js +2 -0
  506. package/frontend/dist/js/ms-BhEwb4b7.js +2 -0
  507. package/frontend/dist/js/nl-Dq-QRx1L.js +2 -0
  508. package/frontend/dist/js/pl-BNEy8mQm.js +2 -0
  509. package/frontend/dist/js/{postcss-BJ0okz7n.js → postcss-Bg15EcFE.js} +1 -1
  510. package/frontend/dist/js/pt-_3Jl3FdY.js +2 -0
  511. package/frontend/dist/js/{react-vendor-C5yShNlM.js → react-vendor-BG_HPV6X.js} +1 -1
  512. package/frontend/dist/js/router-vendor-CbexJIsv.js +1 -0
  513. package/frontend/dist/js/ru-IhQiJ8ta.js +2 -0
  514. package/frontend/dist/js/{standalone-Csw3jfJ_.js → standalone-BFrK0R2A.js} +3 -3
  515. package/frontend/dist/js/sv-DWunXUNz.js +2 -0
  516. package/frontend/dist/js/{syntax-highlight-3EEX6CGL.js → syntax-highlight-P2zo9o06.js} +4 -4
  517. package/frontend/dist/js/th-DVnW2yyh.js +2 -0
  518. package/frontend/dist/js/tr-Do8CFmhR.js +2 -0
  519. package/frontend/dist/js/{typescript-CnF4UVx7.js → typescript-DYVyvmm_.js} +1 -1
  520. package/frontend/dist/js/ui-db9meqAB.js +2 -0
  521. package/frontend/dist/js/ui-vendor-C0DZ8-Cm.js +177 -0
  522. package/frontend/dist/js/uk-BNPKIZga.js +2 -0
  523. package/frontend/dist/js/{useTranslation-Bho4HCyg.js → useTranslation-5b5UhAc9.js} +1 -1
  524. package/frontend/dist/js/{utils-D9W1Lnkn.js → utils-BGrdX9ie.js} +1 -1
  525. package/frontend/dist/js/{utils-vendor-DWh39_3x.js → utils-vendor-9bQ62WeD.js} +1 -1
  526. package/frontend/dist/js/vi-CZMFo9je.js +2 -0
  527. package/frontend/dist/js/{workApi-C3uy9EDT.js → workApi-CcprMH_1.js} +3 -3
  528. package/frontend/dist/js/{yaml-DzT5hBSH.js → yaml-DUeWcOOH.js} +2 -2
  529. package/frontend/dist/js/zh-Pg0881v0.js +2 -0
  530. package/frontend/dist/manifest.webmanifest +32 -0
  531. package/frontend/dist/sw.js +125 -0
  532. package/package.json +2 -2
  533. package/plugins/openai.json +52 -9
  534. package/frontend/dist/assets/index-6o-Hc2wS.js +0 -41
  535. package/frontend/dist/assets/index-D-pM957b.css +0 -1
  536. package/frontend/dist/js/ArtifactContainer-CpUi6ekF.js +0 -1
  537. package/frontend/dist/js/ArtifactSandboxFrame-qsj_Y3LV.js +0 -151
  538. package/frontend/dist/js/ArtifactSlideOutPanel-CSFRluWA.js +0 -1
  539. package/frontend/dist/js/AutomationsPage-KUeWoZNv.js +0 -1
  540. package/frontend/dist/js/CalendarPage-D9I972w8.js +0 -1
  541. package/frontend/dist/js/ChatPage-CmBx4oAL.js +0 -16
  542. package/frontend/dist/js/FirstTimeSetup-Df0YJni3.js +0 -1
  543. package/frontend/dist/js/GalleryPage-bLCrdJN_.js +0 -1
  544. package/frontend/dist/js/HomePage-Uc6PEg-U.js +0 -1
  545. package/frontend/dist/js/LibreClawPage-CG63DHg1.js +0 -1
  546. package/frontend/dist/js/ModelSelector-yxJC64rM.js +0 -1
  547. package/frontend/dist/js/ModelsPage-1R_TxgmJ.js +0 -2
  548. package/frontend/dist/js/NotesPage-L65j5HoW.js +0 -1
  549. package/frontend/dist/js/OptimizedSyntaxHighlighter-Dz7D1LPB.js +0 -1
  550. package/frontend/dist/js/PersonasPage-CKeBpHIH.js +0 -13
  551. package/frontend/dist/js/PluginUsagePage-BX1SKMbW.js +0 -1
  552. package/frontend/dist/js/RichMessageContent-DiySVYGB.js +0 -3
  553. package/frontend/dist/js/SettingsModal-68SG1uZ2.js +0 -1
  554. package/frontend/dist/js/SystemPage-CytpZiQV.js +0 -1
  555. package/frontend/dist/js/UserManagementPage-BzJBvZiS.js +0 -1
  556. package/frontend/dist/js/WorkPage-C8gr0QJe.js +0 -6
  557. package/frontend/dist/js/api-BDtqBtqw.js +0 -14
  558. package/frontend/dist/js/appStore-0JnCUlEq.js +0 -2
  559. package/frontend/dist/js/ar-CSpi37Gr.js +0 -2
  560. package/frontend/dist/js/bn-CyH1BeDD.js +0 -2
  561. package/frontend/dist/js/chatStore-CHQ2uINS.js +0 -3
  562. package/frontend/dist/js/cs-Cv2NfRK5.js +0 -2
  563. package/frontend/dist/js/da-D6D6IvPK.js +0 -2
  564. package/frontend/dist/js/de-BNoJJTrT.js +0 -2
  565. package/frontend/dist/js/es-kzo9C7q_.js +0 -2
  566. package/frontend/dist/js/fr-CjHYvJRp.js +0 -2
  567. package/frontend/dist/js/hi-BU98AdCQ.js +0 -2
  568. package/frontend/dist/js/id-CpdedejX.js +0 -2
  569. package/frontend/dist/js/is-Cp5dDWBH.js +0 -2
  570. package/frontend/dist/js/it-CuH_cK4U.js +0 -2
  571. package/frontend/dist/js/ja-BWXXXiHn.js +0 -2
  572. package/frontend/dist/js/ko-DQgv2M1t.js +0 -2
  573. package/frontend/dist/js/markdown-core-BmPPZiuD.js +0 -31
  574. package/frontend/dist/js/messageCodeStyles-BFNR9Wv6.js +0 -2
  575. package/frontend/dist/js/ms-DCcRoIcX.js +0 -2
  576. package/frontend/dist/js/nl-CbKR1_EU.js +0 -2
  577. package/frontend/dist/js/pl-CRyJZccn.js +0 -2
  578. package/frontend/dist/js/pt-BXYmHFGH.js +0 -2
  579. package/frontend/dist/js/router-vendor-DGFGM3EP.js +0 -1
  580. package/frontend/dist/js/ru-M9SyZG4b.js +0 -2
  581. package/frontend/dist/js/sv-DJ486LTU.js +0 -2
  582. package/frontend/dist/js/th-Ch7gKtZv.js +0 -2
  583. package/frontend/dist/js/tr-ClehWhSC.js +0 -2
  584. package/frontend/dist/js/ui-CC-K19wO.js +0 -2
  585. package/frontend/dist/js/ui-vendor-B1UgO3vd.js +0 -177
  586. package/frontend/dist/js/uk-BqAd5zHF.js +0 -2
  587. package/frontend/dist/js/vi-D9gjlDVB.js +0 -2
  588. package/frontend/dist/js/zh-DKTyHkiR.js +0 -2
@@ -60,6 +60,8 @@ export interface StoredNamedResourceRecord {
60
60
  }
61
61
  export interface KnowledgeCollectionRepository {
62
62
  listByOwner(userId: string): Promise<StoredNamedResourceRecord[]>;
63
+ /** Cross-owner read; callers must authorize before returning content. */
64
+ findById(collectionId: string): Promise<StoredNamedResourceRecord | null>;
63
65
  replace(collection: StoredNamedResourceRecord): Promise<void>;
64
66
  deleteAndDetach(collectionId: string, userId: string): Promise<boolean>;
65
67
  }
@@ -68,20 +70,50 @@ export interface StoredNoteRecord {
68
70
  user_id: string;
69
71
  title: string;
70
72
  content: string;
73
+ pinned: number;
71
74
  created_at: number;
72
75
  updated_at: number;
73
76
  }
74
77
  export interface StoredNotePatch {
75
78
  title?: string;
76
79
  content?: string;
80
+ pinned?: number;
77
81
  updated_at: number;
78
82
  }
83
+ export interface StoredNoteRevisionRecord {
84
+ id: string;
85
+ note_id: string;
86
+ title: string;
87
+ content: string;
88
+ created_at: number;
89
+ }
90
+ export interface StoredNoteAttachmentRecord {
91
+ id: string;
92
+ note_id: string;
93
+ blob_id: string;
94
+ filename: string;
95
+ content_type: string;
96
+ size: number;
97
+ created_at: number;
98
+ }
79
99
  export interface NoteRepository {
80
100
  listByOwner(userId: string, maximum: number): Promise<StoredNoteRecord[]>;
81
101
  findByOwner(noteId: string, userId: string): Promise<StoredNoteRecord | null>;
102
+ /** Cross-owner read; callers must authorize before returning content. */
103
+ findById(noteId: string): Promise<StoredNoteRecord | null>;
82
104
  replaceWithLimit(note: StoredNoteRecord, maximum: number): Promise<void>;
83
105
  patchByOwner(noteId: string, userId: string, patch: StoredNotePatch): Promise<StoredNoteRecord | null>;
106
+ /** Cross-owner patch; callers must authorize write before invoking. */
107
+ patchById(noteId: string, patch: StoredNotePatch): Promise<StoredNoteRecord | null>;
84
108
  deleteByOwner(noteId: string, userId: string): Promise<boolean>;
109
+ listRevisions(noteId: string, maximum: number): Promise<StoredNoteRevisionRecord[]>;
110
+ findRevision(revisionId: string): Promise<StoredNoteRevisionRecord | null>;
111
+ /** Inserts a revision and prunes the oldest beyond the per-note cap. */
112
+ insertRevision(revision: StoredNoteRevisionRecord, maximum: number): Promise<void>;
113
+ listAttachments(noteId: string): Promise<StoredNoteAttachmentRecord[]>;
114
+ findAttachment(attachmentId: string): Promise<StoredNoteAttachmentRecord | null>;
115
+ insertAttachmentWithLimit(attachment: StoredNoteAttachmentRecord, maximum: number): Promise<void>;
116
+ deleteAttachment(attachmentId: string): Promise<boolean>;
85
117
  }
86
118
  export interface StoredCalendarEventRecord {
87
119
  id: string;
@@ -92,16 +124,268 @@ export interface StoredCalendarEventRecord {
92
124
  end_at: number | null;
93
125
  all_day: number;
94
126
  recurrence: string | null;
127
+ calendar_id: string | null;
128
+ reminder_minutes: number | null;
129
+ last_reminded_occurrence: number | null;
95
130
  created_at: number;
96
131
  updated_at: number;
97
132
  }
133
+ export interface StoredCalendarRecord {
134
+ id: string;
135
+ user_id: string;
136
+ name: string;
137
+ color: string | null;
138
+ created_at: number;
139
+ updated_at: number;
140
+ }
141
+ export interface CalendarRepository {
142
+ listByOwner(userId: string, maximum: number): Promise<StoredCalendarRecord[]>;
143
+ findByOwner(calendarId: string, userId: string): Promise<StoredCalendarRecord | null>;
144
+ /** Cross-owner read; callers must authorize before returning content. */
145
+ findById(calendarId: string): Promise<StoredCalendarRecord | null>;
146
+ replaceWithLimit(calendar: StoredCalendarRecord, maximum: number): Promise<void>;
147
+ /** Deletes the calendar and detaches its events back to the default scope. */
148
+ deleteAndDetach(calendarId: string, userId: string): Promise<boolean>;
149
+ }
98
150
  export interface CalendarEventRepository {
99
151
  listByOwnerBetween(userId: string, from: number, to: number, maximum: number): Promise<StoredCalendarEventRecord[]>;
100
152
  listRecurringByOwner(userId: string, maximum: number): Promise<StoredCalendarEventRecord[]>;
153
+ /** Cross-owner reads for shared calendars; callers authorize per calendar. */
154
+ listByCalendarsBetween(calendarIds: readonly string[], from: number, to: number, maximum: number): Promise<StoredCalendarEventRecord[]>;
155
+ listRecurringByCalendars(calendarIds: readonly string[], maximum: number): Promise<StoredCalendarEventRecord[]>;
101
156
  findByOwner(eventId: string, userId: string): Promise<StoredCalendarEventRecord | null>;
157
+ /** Cross-owner read; callers must authorize before returning content. */
158
+ findById(eventId: string): Promise<StoredCalendarEventRecord | null>;
159
+ /** Events carrying a reminder offset, for the scheduler sweep. */
160
+ listWithReminders(maximum: number): Promise<StoredCalendarEventRecord[]>;
161
+ /**
162
+ * Record that a reminder fired for the given occurrence start. Only
163
+ * advances forward, so concurrent sweeps notify each occurrence once.
164
+ */
165
+ markReminded(eventId: string, occurrenceStart: number): Promise<boolean>;
102
166
  replaceWithLimit(event: StoredCalendarEventRecord, maximum: number): Promise<void>;
103
167
  deleteByOwner(eventId: string, userId: string): Promise<boolean>;
104
168
  }
169
+ export interface StoredChannelRecord {
170
+ id: string;
171
+ type: string;
172
+ name: string;
173
+ description: string | null;
174
+ dm_key: string | null;
175
+ created_by: string | null;
176
+ created_at: number;
177
+ updated_at: number;
178
+ archived_at: number | null;
179
+ }
180
+ export interface StoredChannelMemberRecord {
181
+ channel_id: string;
182
+ user_id: string;
183
+ role: string;
184
+ joined_at: number;
185
+ last_read_at: number;
186
+ }
187
+ export interface StoredChannelMembershipView {
188
+ channel: StoredChannelRecord;
189
+ member: StoredChannelMemberRecord;
190
+ }
191
+ export interface StoredChannelUnreadRow {
192
+ channel_id: string;
193
+ unread_count: number;
194
+ latest_message_at: number | null;
195
+ }
196
+ export interface StoredChannelMessageRecord {
197
+ id: string;
198
+ channel_id: string;
199
+ user_id: string | null;
200
+ parent_id: string | null;
201
+ author_kind: string;
202
+ model: string | null;
203
+ content: string;
204
+ metadata: string | null;
205
+ created_at: number;
206
+ updated_at: number;
207
+ edited_at: number | null;
208
+ deleted_at: number | null;
209
+ pinned_at: number | null;
210
+ pinned_by: string | null;
211
+ }
212
+ export interface StoredChannelReactionRecord {
213
+ id: string;
214
+ message_id: string;
215
+ user_id: string;
216
+ emoji: string;
217
+ created_at: number;
218
+ }
219
+ export interface StoredChannelAttachmentRecord {
220
+ id: string;
221
+ message_id: string;
222
+ channel_id: string;
223
+ blob_id: string;
224
+ filename: string;
225
+ content_type: string;
226
+ size: number;
227
+ created_by: string | null;
228
+ created_at: number;
229
+ }
230
+ export interface ChannelTimelineCursor {
231
+ created_at: number;
232
+ id: string;
233
+ }
234
+ export interface ChannelRepository {
235
+ /** Creates the channel and its owner membership atomically. */
236
+ insertWithOwner(channel: StoredChannelRecord, owner: StoredChannelMemberRecord, maximumPerUser: number): Promise<void>;
237
+ findById(channelId: string): Promise<StoredChannelRecord | null>;
238
+ findByDmKey(dmKey: string): Promise<StoredChannelRecord | null>;
239
+ listForUser(userId: string, maximum: number): Promise<StoredChannelMembershipView[]>;
240
+ listPublic(maximum: number): Promise<StoredChannelRecord[]>;
241
+ update(channel: StoredChannelRecord): Promise<void>;
242
+ delete(channelId: string): Promise<boolean>;
243
+ upsertMember(member: StoredChannelMemberRecord, maximumMembers: number): Promise<void>;
244
+ findMember(channelId: string, userId: string): Promise<StoredChannelMemberRecord | null>;
245
+ listMembers(channelId: string, maximum: number): Promise<StoredChannelMemberRecord[]>;
246
+ removeMember(channelId: string, userId: string): Promise<boolean>;
247
+ /** Advances the read cursor monotonically; never moves it backwards. */
248
+ advanceLastRead(channelId: string, userId: string, lastReadAt: number): Promise<boolean>;
249
+ /** Per-channel unread counts for every channel the user belongs to. */
250
+ unreadSummaryForUser(userId: string): Promise<StoredChannelUnreadRow[]>;
251
+ }
252
+ export interface ChannelMessageRepository {
253
+ /**
254
+ * Idempotent append: when the id already exists the stored row is
255
+ * returned unchanged and `inserted` is false, so client retries and
256
+ * duplicate deliveries never duplicate timeline entries.
257
+ */
258
+ insertIfAbsent(message: StoredChannelMessageRecord, attachments: readonly StoredChannelAttachmentRecord[], maximumPerChannel: number): Promise<{
259
+ stored: StoredChannelMessageRecord;
260
+ inserted: boolean;
261
+ }>;
262
+ findById(messageId: string): Promise<StoredChannelMessageRecord | null>;
263
+ listPage(channelId: string, options: {
264
+ before?: ChannelTimelineCursor;
265
+ after?: ChannelTimelineCursor;
266
+ parentId?: string | null;
267
+ limit: number;
268
+ }): Promise<StoredChannelMessageRecord[]>;
269
+ listThread(parentId: string, maximum: number): Promise<StoredChannelMessageRecord[]>;
270
+ countThreadReplies(parentIds: readonly string[]): Promise<Record<string, number>>;
271
+ /** Cross-owner patch; callers must authorize before invoking. */
272
+ update(message: StoredChannelMessageRecord): Promise<void>;
273
+ listPinned(channelId: string, maximum: number): Promise<StoredChannelMessageRecord[]>;
274
+ /** Recent decryptable candidates for in-process search scoring. */
275
+ listRecentForChannels(channelIds: readonly string[], maximum: number): Promise<StoredChannelMessageRecord[]>;
276
+ addReaction(reaction: StoredChannelReactionRecord, maximumPerMessage: number): Promise<boolean>;
277
+ removeReaction(messageId: string, userId: string, emoji: string): Promise<boolean>;
278
+ listReactionsForMessages(messageIds: readonly string[]): Promise<StoredChannelReactionRecord[]>;
279
+ findAttachment(attachmentId: string): Promise<StoredChannelAttachmentRecord | null>;
280
+ listAttachmentsForMessages(messageIds: readonly string[]): Promise<StoredChannelAttachmentRecord[]>;
281
+ /** Blob references of a channel's attachments, for deletion hygiene. */
282
+ listAttachmentBlobIds(channelId: string): Promise<Array<{
283
+ blob_id: string;
284
+ created_by: string | null;
285
+ }>>;
286
+ }
287
+ export interface StoredNotificationRecord {
288
+ id: string;
289
+ user_id: string;
290
+ type: string;
291
+ title: string;
292
+ body: string | null;
293
+ href: string | null;
294
+ source_key: string | null;
295
+ created_at: number;
296
+ read_at: number | null;
297
+ }
298
+ export interface NotificationRepository {
299
+ /**
300
+ * Inserts unless the (user, source_key) pair already exists; prunes the
301
+ * oldest rows beyond the per-user cap in the same transaction. Returns
302
+ * false when deduplicated.
303
+ */
304
+ insertWithLimit(notification: StoredNotificationRecord, maximumPerUser: number): Promise<boolean>;
305
+ listByOwner(userId: string, options: {
306
+ before?: number;
307
+ limit: number;
308
+ unreadOnly?: boolean;
309
+ }): Promise<StoredNotificationRecord[]>;
310
+ countUnread(userId: string): Promise<number>;
311
+ markRead(notificationId: string, userId: string, readAt: number): Promise<boolean>;
312
+ markAllRead(userId: string, readAt: number): Promise<number>;
313
+ deleteByOwner(notificationId: string, userId: string): Promise<boolean>;
314
+ }
315
+ export interface StoredWebhookTargetRecord {
316
+ id: string;
317
+ name: string;
318
+ url: string;
319
+ secret: string | null;
320
+ events: string;
321
+ enabled: number;
322
+ created_by: string | null;
323
+ created_at: number;
324
+ updated_at: number;
325
+ }
326
+ export interface WebhookTargetRepository {
327
+ list(maximum: number): Promise<StoredWebhookTargetRecord[]>;
328
+ findById(targetId: string): Promise<StoredWebhookTargetRecord | null>;
329
+ replaceWithLimit(target: StoredWebhookTargetRecord, maximum: number): Promise<void>;
330
+ delete(targetId: string): Promise<boolean>;
331
+ }
332
+ export interface StoredPushSubscriptionRecord {
333
+ id: string;
334
+ user_id: string;
335
+ session_id: string | null;
336
+ /** Keyed one-way lookup token of the push endpoint URL. */
337
+ endpoint_lookup: string;
338
+ /** Encrypted JSON: endpoint URL plus the browser's p256dh/auth keys. */
339
+ subscription: string;
340
+ user_agent: string | null;
341
+ created_at: number;
342
+ last_used_at: number | null;
343
+ }
344
+ export interface PushSubscriptionRepository {
345
+ /** Insert, or refresh owner/session/keys when the endpoint re-registers. */
346
+ upsertByEndpoint(record: StoredPushSubscriptionRecord): Promise<void>;
347
+ listByUser(userId: string): Promise<StoredPushSubscriptionRecord[]>;
348
+ findByLookup(endpointLookup: string): Promise<StoredPushSubscriptionRecord | null>;
349
+ findById(id: string): Promise<StoredPushSubscriptionRecord | null>;
350
+ touch(id: string, lastUsedAt: number): Promise<boolean>;
351
+ delete(id: string): Promise<boolean>;
352
+ deleteByLookup(userId: string, endpointLookup: string): Promise<boolean>;
353
+ deleteForSession(sessionId: string): Promise<number>;
354
+ deleteForUser(userId: string): Promise<number>;
355
+ }
356
+ export interface StoredRecoveryDrillRecord {
357
+ id: string;
358
+ status: string;
359
+ origin: string;
360
+ started_at: number;
361
+ finished_at: number | null;
362
+ snapshot_bytes: number | null;
363
+ rpo_seconds: number | null;
364
+ restore_ms: number | null;
365
+ error: string | null;
366
+ /** Encrypted JSON step-by-step drill report. */
367
+ report: string | null;
368
+ created_by: string | null;
369
+ created_at: number;
370
+ }
371
+ export interface RecoveryDrillRepository {
372
+ insert(record: StoredRecoveryDrillRecord): Promise<void>;
373
+ update(id: string, patch: {
374
+ status?: string;
375
+ finished_at?: number | null;
376
+ snapshot_bytes?: number | null;
377
+ rpo_seconds?: number | null;
378
+ restore_ms?: number | null;
379
+ error?: string | null;
380
+ report?: string | null;
381
+ }): Promise<boolean>;
382
+ findById(id: string): Promise<StoredRecoveryDrillRecord | null>;
383
+ list(limit: number): Promise<StoredRecoveryDrillRecord[]>;
384
+ findLatestFinished(): Promise<StoredRecoveryDrillRecord | null>;
385
+ findRunning(): Promise<StoredRecoveryDrillRecord | null>;
386
+ /** Delete the oldest finished rows beyond the retained count. */
387
+ pruneToLimit(limit: number): Promise<number>;
388
+ }
105
389
  export interface StoredAutomationRecord {
106
390
  id: string;
107
391
  user_id: string;
@@ -161,6 +445,173 @@ export interface AutomationRunRepository {
161
445
  countUnseenFinished(userId: string): Promise<number>;
162
446
  markSeenBefore(userId: string, seenAt: number): Promise<number>;
163
447
  }
448
+ export interface StoredToolServerRecord {
449
+ id: string;
450
+ user_id: string;
451
+ name: string;
452
+ description: string | null;
453
+ kind: string;
454
+ base_url: string;
455
+ spec: string | null;
456
+ spec_digest: string | null;
457
+ spec_revision: number;
458
+ auth_mode: string;
459
+ auth_header: string | null;
460
+ access_mode: string;
461
+ enabled: number;
462
+ timeout_ms: number;
463
+ max_response_bytes: number;
464
+ created_at: number;
465
+ updated_at: number;
466
+ }
467
+ export interface StoredToolServerToolRecord {
468
+ id: string;
469
+ server_id: string;
470
+ name: string;
471
+ description: string | null;
472
+ params_schema: string | null;
473
+ detail: string | null;
474
+ side_effect: number;
475
+ enabled: number;
476
+ created_at: number;
477
+ updated_at: number;
478
+ }
479
+ export interface StoredToolServerCredentialRecord {
480
+ id: string;
481
+ server_id: string;
482
+ user_id: string;
483
+ secret: string;
484
+ created_at: number;
485
+ updated_at: number;
486
+ }
487
+ export interface StoredToolApprovalRecord {
488
+ id: string;
489
+ user_id: string;
490
+ session_id: string | null;
491
+ server_id: string | null;
492
+ tool_name: string;
493
+ call_id: string | null;
494
+ arguments_digest: string | null;
495
+ scope: string;
496
+ status: string;
497
+ created_at: number;
498
+ resolved_at: number | null;
499
+ expires_at: number | null;
500
+ }
501
+ export interface ToolServerRepository {
502
+ list(maximum: number): Promise<StoredToolServerRecord[]>;
503
+ findById(serverId: string): Promise<StoredToolServerRecord | null>;
504
+ replaceWithLimit(server: StoredToolServerRecord, maximum: number): Promise<void>;
505
+ delete(serverId: string): Promise<boolean>;
506
+ }
507
+ export interface ToolServerToolRepository {
508
+ listByServer(serverId: string): Promise<StoredToolServerToolRecord[]>;
509
+ /** Re-pin a server's tool inventory atomically, preserving admin overrides by tool name. */
510
+ replaceAllForServer(serverId: string, tools: readonly StoredToolServerToolRecord[]): Promise<void>;
511
+ updateOverrides(serverId: string, toolName: string, overrides: {
512
+ enabled?: number;
513
+ side_effect?: number;
514
+ }, updatedAt: number): Promise<StoredToolServerToolRecord | null>;
515
+ }
516
+ export interface ToolServerCredentialRepository {
517
+ find(serverId: string, userId: string): Promise<StoredToolServerCredentialRecord | null>;
518
+ upsert(credential: StoredToolServerCredentialRecord): Promise<void>;
519
+ delete(serverId: string, userId: string): Promise<boolean>;
520
+ }
521
+ export interface ToolApprovalRepository {
522
+ insert(approval: StoredToolApprovalRecord): Promise<void>;
523
+ findByOwner(approvalId: string, userId: string): Promise<StoredToolApprovalRecord | null>;
524
+ /**
525
+ * Find a standing decision covering this tool: an approved `always` grant,
526
+ * or an approved `session` grant bound to the given session.
527
+ */
528
+ findStanding(userId: string, serverId: string | null, toolName: string, sessionId: string | null): Promise<StoredToolApprovalRecord | null>;
529
+ /** Resolve a pending approval exactly once; returns null when it is no longer pending. */
530
+ resolvePending(approvalId: string, userId: string, status: string, scope: string, resolvedAt: number): Promise<StoredToolApprovalRecord | null>;
531
+ listPendingByOwner(userId: string, maximum: number): Promise<StoredToolApprovalRecord[]>;
532
+ listStandingByOwner(userId: string, maximum: number): Promise<StoredToolApprovalRecord[]>;
533
+ expirePending(now: number): Promise<number>;
534
+ deleteByOwner(approvalId: string, userId: string): Promise<boolean>;
535
+ }
536
+ export interface StoredPromptRecord {
537
+ id: string;
538
+ user_id: string;
539
+ slug: string;
540
+ title: string;
541
+ description: string | null;
542
+ content: string;
543
+ variables: string | null;
544
+ tags: string | null;
545
+ version: number;
546
+ created_at: number;
547
+ updated_at: number;
548
+ }
549
+ export interface StoredPromptVersionRecord {
550
+ id: string;
551
+ prompt_id: string;
552
+ version: number;
553
+ content: string;
554
+ variables: string | null;
555
+ created_at: number;
556
+ }
557
+ export interface PromptRepository {
558
+ listByOwner(userId: string, maximum: number): Promise<StoredPromptRecord[]>;
559
+ findByOwner(promptId: string, userId: string): Promise<StoredPromptRecord | null>;
560
+ findById(promptId: string): Promise<StoredPromptRecord | null>;
561
+ findBySlug(userId: string, slug: string): Promise<StoredPromptRecord | null>;
562
+ /** Upsert the prompt and archive the given prior revision in one transaction. */
563
+ replaceWithLimit(prompt: StoredPromptRecord, maximum: number, archivedVersion: StoredPromptVersionRecord | null): Promise<void>;
564
+ listVersions(promptId: string, maximum: number): Promise<StoredPromptVersionRecord[]>;
565
+ findVersion(promptId: string, version: number): Promise<StoredPromptVersionRecord | null>;
566
+ deleteByOwner(promptId: string, userId: string): Promise<boolean>;
567
+ }
568
+ export interface StoredSkillRecord {
569
+ id: string;
570
+ user_id: string;
571
+ slug: string;
572
+ name: string;
573
+ description: string;
574
+ instructions: string;
575
+ enabled: number;
576
+ version: number;
577
+ created_at: number;
578
+ updated_at: number;
579
+ }
580
+ export interface StoredSkillVersionRecord {
581
+ id: string;
582
+ skill_id: string;
583
+ version: number;
584
+ instructions: string;
585
+ created_at: number;
586
+ }
587
+ export interface StoredSkillFileRecord {
588
+ id: string;
589
+ skill_id: string;
590
+ path: string;
591
+ content: string;
592
+ size: number;
593
+ created_at: number;
594
+ updated_at: number;
595
+ }
596
+ export interface SkillFileRepository {
597
+ listBySkill(skillId: string): Promise<StoredSkillFileRecord[]>;
598
+ find(skillId: string, path: string): Promise<StoredSkillFileRecord | null>;
599
+ upsert(file: StoredSkillFileRecord, maximumPerSkill: number): Promise<void>;
600
+ /** Replace a skill's whole bundle atomically (imports and full saves). */
601
+ replaceAllForSkill(skillId: string, files: readonly StoredSkillFileRecord[]): Promise<void>;
602
+ delete(skillId: string, path: string): Promise<boolean>;
603
+ }
604
+ export interface SkillRepository {
605
+ listByOwner(userId: string, maximum: number): Promise<StoredSkillRecord[]>;
606
+ findByOwner(skillId: string, userId: string): Promise<StoredSkillRecord | null>;
607
+ findById(skillId: string): Promise<StoredSkillRecord | null>;
608
+ findBySlug(userId: string, slug: string): Promise<StoredSkillRecord | null>;
609
+ /** Upsert the skill and archive the given prior revision in one transaction. */
610
+ replaceWithLimit(skill: StoredSkillRecord, maximum: number, archivedVersion: StoredSkillVersionRecord | null): Promise<void>;
611
+ listVersions(skillId: string, maximum: number): Promise<StoredSkillVersionRecord[]>;
612
+ findVersion(skillId: string, version: number): Promise<StoredSkillVersionRecord | null>;
613
+ deleteByOwner(skillId: string, userId: string): Promise<boolean>;
614
+ }
164
615
  export interface SessionFolderRepository {
165
616
  listByOwner(userId: string, maximum: number): Promise<StoredNamedResourceRecord[]>;
166
617
  replaceWithLimit(folder: StoredNamedResourceRecord, maximum: number): Promise<void>;
@@ -195,6 +646,13 @@ export interface SystemSettingRepository {
195
646
  }
196
647
  export type ArchiveOwnedResource = 'session' | 'session-folder' | 'note' | 'knowledge-collection' | 'document' | 'persona';
197
648
  export type ArchiveNestedResource = 'session-message' | 'document-chunk';
649
+ /**
650
+ * Resources that can carry access grants. Archive-owned resources are always
651
+ * grantable; prompts, skills, and tool servers are grantable without being
652
+ * part of the portable user archive (tool servers are instance-level, and
653
+ * prompt/skill portability uses their dedicated import/export surfaces).
654
+ */
655
+ export type GrantableResource = ArchiveOwnedResource | 'prompt' | 'skill' | 'tool-server' | 'calendar';
198
656
  export interface ArchiveNestedOwner {
199
657
  userId: string;
200
658
  parentId: string;
@@ -254,24 +712,163 @@ export interface DataArchiveApplyPlan {
254
712
  documents: StoredArchiveDocumentAggregate[];
255
713
  }
256
714
  export interface DataArchiveRepository {
257
- ownerOf(resource: ArchiveOwnedResource, id: string): Promise<string | null>;
715
+ ownerOf(resource: GrantableResource, id: string): Promise<string | null>;
258
716
  nestedOwnerOf(resource: ArchiveNestedResource, id: string): Promise<ArchiveNestedOwner | null>;
259
717
  countByOwner(resource: 'session-folder' | 'note', userId: string): Promise<number>;
260
718
  resourceDeletionReserved(resource: 'document', id: string): Promise<boolean>;
261
719
  /** Apply every included archive section in one database transaction. */
262
720
  applyImport(plan: DataArchiveApplyPlan): Promise<void>;
263
721
  }
722
+ export interface StoredModelTariffRecord {
723
+ id: string;
724
+ plugin_id: string;
725
+ model: string | null;
726
+ input_per_million: number | null;
727
+ output_per_million: number | null;
728
+ unit_price: number | null;
729
+ currency: string;
730
+ effective_from: number;
731
+ created_by: string | null;
732
+ created_at: number;
733
+ }
734
+ export interface ModelTariffRepository {
735
+ listAll(maximum: number): Promise<StoredModelTariffRecord[]>;
736
+ insert(tariff: StoredModelTariffRecord): Promise<void>;
737
+ deleteById(tariffId: string): Promise<boolean>;
738
+ }
739
+ export interface StoredUsageBudgetRecord {
740
+ id: string;
741
+ name: string;
742
+ principal_type: 'instance' | 'user' | 'group';
743
+ principal_id: string | null;
744
+ period: 'daily' | 'weekly' | 'monthly';
745
+ amount_usd: number;
746
+ mode: 'observe' | 'soft' | 'hard';
747
+ created_by: string | null;
748
+ created_at: number;
749
+ updated_at: number;
750
+ }
751
+ export interface UsageBudgetRepository {
752
+ listAll(maximum: number): Promise<StoredUsageBudgetRecord[]>;
753
+ findById(budgetId: string): Promise<StoredUsageBudgetRecord | null>;
754
+ replace(budget: StoredUsageBudgetRecord): Promise<void>;
755
+ deleteById(budgetId: string): Promise<boolean>;
756
+ }
757
+ export interface StoredMessageFeedbackRecord {
758
+ id: string;
759
+ user_id: string;
760
+ session_id: string;
761
+ message_id: string;
762
+ rating: number;
763
+ /** Plain JSON array of short topic tags. */
764
+ tags: string | null;
765
+ /** Encrypted free-text comment. */
766
+ comment: string | null;
767
+ model: string | null;
768
+ plugin_id: string | null;
769
+ /** Encrypted JSON snapshot of the rated exchange. */
770
+ snapshot: string | null;
771
+ created_at: number;
772
+ updated_at: number;
773
+ }
774
+ export interface MessageFeedbackRepository {
775
+ /** Insert or update the caller's feedback for one message. */
776
+ upsertByMessage(feedback: StoredMessageFeedbackRecord): Promise<void>;
777
+ deleteByMessage(userId: string, messageId: string): Promise<boolean>;
778
+ listByOwner(userId: string, maximum: number): Promise<StoredMessageFeedbackRecord[]>;
779
+ /** Instance-wide feedback for administrators, newest first. */
780
+ listAll(maximum: number): Promise<StoredMessageFeedbackRecord[]>;
781
+ }
782
+ export interface StoredArenaVoteRecord {
783
+ id: string;
784
+ user_id: string;
785
+ compare_group: string;
786
+ model_a: string;
787
+ model_b: string;
788
+ winner: 'a' | 'b' | 'tie' | 'both-bad';
789
+ created_at: number;
790
+ }
791
+ export interface ArenaVoteRepository {
792
+ /** Returns false when this user already voted on the comparison. */
793
+ insertOnce(vote: StoredArenaVoteRecord): Promise<boolean>;
794
+ /** Deterministic replay order (created_at, id) for rating computation. */
795
+ listAllOrdered(maximum: number): Promise<StoredArenaVoteRecord[]>;
796
+ }
797
+ export interface StoredEvalSetRecord {
798
+ id: string;
799
+ user_id: string;
800
+ name: string;
801
+ description: string | null;
802
+ /** Encrypted JSON array of evaluation items. */
803
+ items: string;
804
+ created_at: number;
805
+ updated_at: number;
806
+ }
807
+ export interface EvalSetRepository {
808
+ listByOwner(userId: string, maximum: number): Promise<StoredEvalSetRecord[]>;
809
+ findByOwner(setId: string, userId: string): Promise<StoredEvalSetRecord | null>;
810
+ replaceWithLimit(set: StoredEvalSetRecord, maximum: number): Promise<void>;
811
+ deleteByOwner(setId: string, userId: string): Promise<boolean>;
812
+ }
813
+ export interface StoredEvalRunRecord {
814
+ id: string;
815
+ set_id: string;
816
+ user_id: string;
817
+ label: string | null;
818
+ plugin_id: string | null;
819
+ model: string;
820
+ status: 'queued' | 'running' | 'completed' | 'failed' | 'cancelled';
821
+ /** Encrypted JSON array of per-item results. */
822
+ results: string | null;
823
+ error: string | null;
824
+ created_at: number;
825
+ updated_at: number;
826
+ completed_at: number | null;
827
+ }
828
+ export interface EvalRunRepository {
829
+ listByOwner(userId: string, maximum: number): Promise<StoredEvalRunRecord[]>;
830
+ listBySet(setId: string, userId: string, maximum: number): Promise<StoredEvalRunRecord[]>;
831
+ findByOwner(runId: string, userId: string): Promise<StoredEvalRunRecord | null>;
832
+ insert(run: StoredEvalRunRecord): Promise<void>;
833
+ update(runId: string, userId: string, changes: {
834
+ status: StoredEvalRunRecord['status'];
835
+ results?: string | null;
836
+ error?: string | null;
837
+ updated_at: number;
838
+ completed_at?: number | null;
839
+ }): Promise<boolean>;
840
+ }
264
841
  export interface ApplicationResourceRepositories {
265
842
  chatSessions: ChatSessionRepository;
266
843
  knowledgeCollections: KnowledgeCollectionRepository;
267
844
  notes: NoteRepository;
845
+ calendars: CalendarRepository;
268
846
  calendarEvents: CalendarEventRepository;
847
+ channels: ChannelRepository;
848
+ channelMessages: ChannelMessageRepository;
849
+ notifications: NotificationRepository;
850
+ webhookTargets: WebhookTargetRepository;
851
+ pushSubscriptions: PushSubscriptionRepository;
852
+ recoveryDrills: RecoveryDrillRepository;
269
853
  automations: AutomationRepository;
270
854
  automationRuns: AutomationRunRepository;
855
+ toolServers: ToolServerRepository;
856
+ toolServerTools: ToolServerToolRepository;
857
+ toolServerCredentials: ToolServerCredentialRepository;
858
+ toolApprovals: ToolApprovalRepository;
859
+ prompts: PromptRepository;
860
+ skills: SkillRepository;
861
+ skillFiles: SkillFileRepository;
271
862
  sessionFolders: SessionFolderRepository;
272
863
  preferences: PreferenceRepository;
273
864
  systemSettings: SystemSettingRepository;
274
865
  archive: DataArchiveRepository;
866
+ modelTariffs: ModelTariffRepository;
867
+ usageBudgets: UsageBudgetRepository;
868
+ messageFeedback: MessageFeedbackRepository;
869
+ arenaVotes: ArenaVoteRepository;
870
+ evalSets: EvalSetRepository;
871
+ evalRuns: EvalRunRepository;
275
872
  }
276
873
  export declare class PersistenceResourceConflictError extends Error {
277
874
  constructor();
@@ -281,8 +878,8 @@ export declare class PersistenceResourceDeletionReservedError extends Error {
281
878
  constructor(resourceId: string);
282
879
  }
283
880
  export declare class PersistenceResourceLimitError extends Error {
284
- readonly resource: 'note' | 'session-folder' | 'calendar-event' | 'automation';
881
+ readonly resource: 'note' | 'session-folder' | 'calendar-event' | 'calendar' | 'automation' | 'tool-server' | 'prompt' | 'skill' | 'skill-file' | 'note-attachment' | 'channel' | 'channel-member' | 'channel-message' | 'channel-reaction' | 'notification' | 'webhook-target' | 'eval-set';
285
882
  readonly maximum: number;
286
- constructor(resource: 'note' | 'session-folder' | 'calendar-event' | 'automation', maximum: number);
883
+ constructor(resource: 'note' | 'session-folder' | 'calendar-event' | 'calendar' | 'automation' | 'tool-server' | 'prompt' | 'skill' | 'skill-file' | 'note-attachment' | 'channel' | 'channel-member' | 'channel-message' | 'channel-reaction' | 'notification' | 'webhook-target' | 'eval-set', maximum: number);
287
884
  }
288
885
  //# sourceMappingURL=resourceTypes.d.ts.map