libre-webui 0.24.1 → 0.26.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 (543) hide show
  1. package/README.md +36 -15
  2. package/backend/dist/index.d.ts.map +1 -1
  3. package/backend/dist/index.js +35 -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/postgresMigrationRegistry.d.ts.map +1 -1
  44. package/backend/dist/persistence/postgresMigrationRegistry.js +12 -0
  45. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
  46. package/backend/dist/persistence/postgresNotesV2Migration.d.ts +4 -0
  47. package/backend/dist/persistence/postgresNotesV2Migration.d.ts.map +1 -0
  48. package/backend/dist/persistence/postgresNotesV2Migration.js +57 -0
  49. package/backend/dist/persistence/postgresNotesV2Migration.js.map +1 -0
  50. package/backend/dist/persistence/postgresPersonalAutomationsMigration.d.ts +8 -0
  51. package/backend/dist/persistence/postgresPersonalAutomationsMigration.d.ts.map +1 -0
  52. package/backend/dist/persistence/postgresPersonalAutomationsMigration.js +98 -0
  53. package/backend/dist/persistence/postgresPersonalAutomationsMigration.js.map +1 -0
  54. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
  55. package/backend/dist/persistence/postgresResourceRepositories.js +1972 -63
  56. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  57. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts +9 -0
  58. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts.map +1 -0
  59. package/backend/dist/persistence/postgresSkillFilesMigration.js +50 -0
  60. package/backend/dist/persistence/postgresSkillFilesMigration.js.map +1 -0
  61. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts +10 -0
  62. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts.map +1 -0
  63. package/backend/dist/persistence/postgresTeamCollaborationMigration.js +161 -0
  64. package/backend/dist/persistence/postgresTeamCollaborationMigration.js.map +1 -0
  65. package/backend/dist/persistence/resourceTypes.d.ts +622 -3
  66. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
  67. package/backend/dist/persistence/resourceTypes.js.map +1 -1
  68. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  69. package/backend/dist/persistence/sqliteExtensionRepositories.js +26 -4
  70. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  71. package/backend/dist/persistence/sqliteMigrations.d.ts +10 -0
  72. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
  73. package/backend/dist/persistence/sqliteMigrations.js +1396 -48
  74. package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
  75. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
  76. package/backend/dist/persistence/sqliteResourceRepositories.js +1680 -58
  77. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  78. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
  79. package/backend/dist/persistence/sqliteToPostgresMigration.js +297 -2
  80. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
  81. package/backend/dist/platform/jobs/domainJobContracts.d.ts +11 -0
  82. package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -1
  83. package/backend/dist/platform/jobs/domainJobContracts.js +11 -0
  84. package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -1
  85. package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
  86. package/backend/dist/platform/jobs/domainJobHandlers.js +409 -2
  87. package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
  88. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -1
  89. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +4 -2
  90. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -1
  91. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -1
  92. package/backend/dist/platform/jobs/postgresDurableJobWorker.js +4 -2
  93. package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -1
  94. package/backend/dist/platform/storage/pgVectorStore.d.ts +2 -1
  95. package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -1
  96. package/backend/dist/platform/storage/pgVectorStore.js +51 -0
  97. package/backend/dist/platform/storage/pgVectorStore.js.map +1 -1
  98. package/backend/dist/platform/storage/platformDomainRepositories.d.ts +8 -2
  99. package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -1
  100. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -1
  101. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +25 -4
  102. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -1
  103. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +2 -1
  104. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -1
  105. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +35 -0
  106. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -1
  107. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -1
  108. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +26 -3
  109. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -1
  110. package/backend/dist/platform/storage/vectorStore.d.ts +14 -0
  111. package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -1
  112. package/backend/dist/platform/storage/vectorStore.js.map +1 -1
  113. package/backend/dist/routes/access.d.ts.map +1 -1
  114. package/backend/dist/routes/access.js +84 -3
  115. package/backend/dist/routes/access.js.map +1 -1
  116. package/backend/dist/routes/automations.d.ts +3 -0
  117. package/backend/dist/routes/automations.d.ts.map +1 -0
  118. package/backend/dist/routes/automations.js +232 -0
  119. package/backend/dist/routes/automations.js.map +1 -0
  120. package/backend/dist/routes/calendar.d.ts +3 -0
  121. package/backend/dist/routes/calendar.d.ts.map +1 -0
  122. package/backend/dist/routes/calendar.js +309 -0
  123. package/backend/dist/routes/calendar.js.map +1 -0
  124. package/backend/dist/routes/channels.d.ts +3 -0
  125. package/backend/dist/routes/channels.d.ts.map +1 -0
  126. package/backend/dist/routes/channels.js +447 -0
  127. package/backend/dist/routes/channels.js.map +1 -0
  128. package/backend/dist/routes/chat.d.ts.map +1 -1
  129. package/backend/dist/routes/chat.js +237 -10
  130. package/backend/dist/routes/chat.js.map +1 -1
  131. package/backend/dist/routes/costs.d.ts +3 -0
  132. package/backend/dist/routes/costs.d.ts.map +1 -0
  133. package/backend/dist/routes/costs.js +191 -0
  134. package/backend/dist/routes/costs.js.map +1 -0
  135. package/backend/dist/routes/documents.d.ts.map +1 -1
  136. package/backend/dist/routes/documents.js +64 -21
  137. package/backend/dist/routes/documents.js.map +1 -1
  138. package/backend/dist/routes/evaluations.d.ts +3 -0
  139. package/backend/dist/routes/evaluations.d.ts.map +1 -0
  140. package/backend/dist/routes/evaluations.js +352 -0
  141. package/backend/dist/routes/evaluations.js.map +1 -0
  142. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  143. package/backend/dist/routes/imageGen.js +2 -1
  144. package/backend/dist/routes/imageGen.js.map +1 -1
  145. package/backend/dist/routes/media.d.ts.map +1 -1
  146. package/backend/dist/routes/media.js +228 -7
  147. package/backend/dist/routes/media.js.map +1 -1
  148. package/backend/dist/routes/notes.d.ts.map +1 -1
  149. package/backend/dist/routes/notes.js +149 -36
  150. package/backend/dist/routes/notes.js.map +1 -1
  151. package/backend/dist/routes/notifications.d.ts +3 -0
  152. package/backend/dist/routes/notifications.d.ts.map +1 -0
  153. package/backend/dist/routes/notifications.js +213 -0
  154. package/backend/dist/routes/notifications.js.map +1 -0
  155. package/backend/dist/routes/ollama.d.ts.map +1 -1
  156. package/backend/dist/routes/ollama.js +4 -1
  157. package/backend/dist/routes/ollama.js.map +1 -1
  158. package/backend/dist/routes/openaiCompat.d.ts +3 -0
  159. package/backend/dist/routes/openaiCompat.d.ts.map +1 -0
  160. package/backend/dist/routes/openaiCompat.js +314 -0
  161. package/backend/dist/routes/openaiCompat.js.map +1 -0
  162. package/backend/dist/routes/personas.js +1 -1
  163. package/backend/dist/routes/personas.js.map +1 -1
  164. package/backend/dist/routes/prompts.d.ts +3 -0
  165. package/backend/dist/routes/prompts.d.ts.map +1 -0
  166. package/backend/dist/routes/prompts.js +173 -0
  167. package/backend/dist/routes/prompts.js.map +1 -0
  168. package/backend/dist/routes/search.d.ts.map +1 -1
  169. package/backend/dist/routes/search.js +34 -4
  170. package/backend/dist/routes/search.js.map +1 -1
  171. package/backend/dist/routes/skills.d.ts +3 -0
  172. package/backend/dist/routes/skills.d.ts.map +1 -0
  173. package/backend/dist/routes/skills.js +246 -0
  174. package/backend/dist/routes/skills.js.map +1 -0
  175. package/backend/dist/routes/stt.d.ts.map +1 -1
  176. package/backend/dist/routes/stt.js +2 -1
  177. package/backend/dist/routes/stt.js.map +1 -1
  178. package/backend/dist/routes/tools.d.ts +3 -0
  179. package/backend/dist/routes/tools.d.ts.map +1 -0
  180. package/backend/dist/routes/tools.js +359 -0
  181. package/backend/dist/routes/tools.js.map +1 -0
  182. package/backend/dist/routes/tts.d.ts.map +1 -1
  183. package/backend/dist/routes/tts.js +63 -8
  184. package/backend/dist/routes/tts.js.map +1 -1
  185. package/backend/dist/routes/voiceAccess.d.ts +3 -0
  186. package/backend/dist/routes/voiceAccess.d.ts.map +1 -0
  187. package/backend/dist/routes/voiceAccess.js +102 -0
  188. package/backend/dist/routes/voiceAccess.js.map +1 -0
  189. package/backend/dist/services/apiTokenService.d.ts +2 -2
  190. package/backend/dist/services/apiTokenService.d.ts.map +1 -1
  191. package/backend/dist/services/apiTokenService.js +7 -0
  192. package/backend/dist/services/apiTokenService.js.map +1 -1
  193. package/backend/dist/services/authorizationService.d.ts +8 -4
  194. package/backend/dist/services/authorizationService.d.ts.map +1 -1
  195. package/backend/dist/services/authorizationService.js +31 -1
  196. package/backend/dist/services/authorizationService.js.map +1 -1
  197. package/backend/dist/services/automationSchedulerService.d.ts +28 -0
  198. package/backend/dist/services/automationSchedulerService.d.ts.map +1 -0
  199. package/backend/dist/services/automationSchedulerService.js +221 -0
  200. package/backend/dist/services/automationSchedulerService.js.map +1 -0
  201. package/backend/dist/services/automationService.d.ts +56 -0
  202. package/backend/dist/services/automationService.d.ts.map +1 -0
  203. package/backend/dist/services/automationService.js +247 -0
  204. package/backend/dist/services/automationService.js.map +1 -0
  205. package/backend/dist/services/builtinToolsService.d.ts +20 -0
  206. package/backend/dist/services/builtinToolsService.d.ts.map +1 -0
  207. package/backend/dist/services/builtinToolsService.js +661 -0
  208. package/backend/dist/services/builtinToolsService.js.map +1 -0
  209. package/backend/dist/services/calendarService.d.ts +74 -0
  210. package/backend/dist/services/calendarService.d.ts.map +1 -0
  211. package/backend/dist/services/calendarService.js +339 -0
  212. package/backend/dist/services/calendarService.js.map +1 -0
  213. package/backend/dist/services/channelService.d.ts +195 -0
  214. package/backend/dist/services/channelService.d.ts.map +1 -0
  215. package/backend/dist/services/channelService.js +1057 -0
  216. package/backend/dist/services/channelService.js.map +1 -0
  217. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  218. package/backend/dist/services/chatGenerationService.js +7 -1
  219. package/backend/dist/services/chatGenerationService.js.map +1 -1
  220. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  221. package/backend/dist/services/chatRequestService.js +29 -1
  222. package/backend/dist/services/chatRequestService.js.map +1 -1
  223. package/backend/dist/services/chatService.d.ts +62 -1
  224. package/backend/dist/services/chatService.d.ts.map +1 -1
  225. package/backend/dist/services/chatService.js +242 -1
  226. package/backend/dist/services/chatService.js.map +1 -1
  227. package/backend/dist/services/chatToolRuntimeService.d.ts +55 -0
  228. package/backend/dist/services/chatToolRuntimeService.d.ts.map +1 -0
  229. package/backend/dist/services/chatToolRuntimeService.js +389 -0
  230. package/backend/dist/services/chatToolRuntimeService.js.map +1 -0
  231. package/backend/dist/services/costGovernanceService.d.ts +102 -0
  232. package/backend/dist/services/costGovernanceService.d.ts.map +1 -0
  233. package/backend/dist/services/costGovernanceService.js +463 -0
  234. package/backend/dist/services/costGovernanceService.js.map +1 -0
  235. package/backend/dist/services/dataArchiveService.d.ts +6 -0
  236. package/backend/dist/services/dataArchiveService.d.ts.map +1 -1
  237. package/backend/dist/services/dataArchiveService.js +23 -4
  238. package/backend/dist/services/dataArchiveService.js.map +1 -1
  239. package/backend/dist/services/documentService.d.ts +58 -1
  240. package/backend/dist/services/documentService.d.ts.map +1 -1
  241. package/backend/dist/services/documentService.js +289 -84
  242. package/backend/dist/services/documentService.js.map +1 -1
  243. package/backend/dist/services/durableChatGenerationService.d.ts +9 -0
  244. package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -1
  245. package/backend/dist/services/durableChatGenerationService.js +160 -13
  246. package/backend/dist/services/durableChatGenerationService.js.map +1 -1
  247. package/backend/dist/services/evaluationService.d.ts +111 -0
  248. package/backend/dist/services/evaluationService.d.ts.map +1 -0
  249. package/backend/dist/services/evaluationService.js +403 -0
  250. package/backend/dist/services/evaluationService.js.map +1 -0
  251. package/backend/dist/services/galleryService.d.ts +6 -0
  252. package/backend/dist/services/galleryService.d.ts.map +1 -1
  253. package/backend/dist/services/galleryService.js +26 -0
  254. package/backend/dist/services/galleryService.js.map +1 -1
  255. package/backend/dist/services/mcpClientService.d.ts +29 -0
  256. package/backend/dist/services/mcpClientService.d.ts.map +1 -0
  257. package/backend/dist/services/mcpClientService.js +189 -0
  258. package/backend/dist/services/mcpClientService.js.map +1 -0
  259. package/backend/dist/services/noteService.d.ts +71 -0
  260. package/backend/dist/services/noteService.d.ts.map +1 -0
  261. package/backend/dist/services/noteService.js +397 -0
  262. package/backend/dist/services/noteService.js.map +1 -0
  263. package/backend/dist/services/notificationService.d.ts +55 -0
  264. package/backend/dist/services/notificationService.d.ts.map +1 -0
  265. package/backend/dist/services/notificationService.js +308 -0
  266. package/backend/dist/services/notificationService.js.map +1 -0
  267. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  268. package/backend/dist/services/ollamaService.js +3 -1
  269. package/backend/dist/services/ollamaService.js.map +1 -1
  270. package/backend/dist/services/openApiToolService.d.ts +38 -0
  271. package/backend/dist/services/openApiToolService.d.ts.map +1 -0
  272. package/backend/dist/services/openApiToolService.js +254 -0
  273. package/backend/dist/services/openApiToolService.js.map +1 -0
  274. package/backend/dist/services/personaService.d.ts +18 -2
  275. package/backend/dist/services/personaService.d.ts.map +1 -1
  276. package/backend/dist/services/personaService.js +113 -4
  277. package/backend/dist/services/personaService.js.map +1 -1
  278. package/backend/dist/services/pluginImageGenerationService.d.ts +19 -0
  279. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  280. package/backend/dist/services/pluginImageGenerationService.js +121 -0
  281. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  282. package/backend/dist/services/pluginService.d.ts +7 -0
  283. package/backend/dist/services/pluginService.d.ts.map +1 -1
  284. package/backend/dist/services/pluginService.js +8 -2
  285. package/backend/dist/services/pluginService.js.map +1 -1
  286. package/backend/dist/services/promptService.d.ts +74 -0
  287. package/backend/dist/services/promptService.d.ts.map +1 -0
  288. package/backend/dist/services/promptService.js +513 -0
  289. package/backend/dist/services/promptService.js.map +1 -0
  290. package/backend/dist/services/resourceGrantService.d.ts.map +1 -1
  291. package/backend/dist/services/resourceGrantService.js +62 -17
  292. package/backend/dist/services/resourceGrantService.js.map +1 -1
  293. package/backend/dist/services/searchService.d.ts +29 -0
  294. package/backend/dist/services/searchService.d.ts.map +1 -0
  295. package/backend/dist/services/searchService.js +0 -0
  296. package/backend/dist/services/searchService.js.map +1 -0
  297. package/backend/dist/services/securityAuditService.d.ts.map +1 -1
  298. package/backend/dist/services/securityAuditService.js +2 -1
  299. package/backend/dist/services/securityAuditService.js.map +1 -1
  300. package/backend/dist/services/sharedResourceAccess.d.ts +25 -0
  301. package/backend/dist/services/sharedResourceAccess.d.ts.map +1 -0
  302. package/backend/dist/services/sharedResourceAccess.js +59 -0
  303. package/backend/dist/services/sharedResourceAccess.js.map +1 -0
  304. package/backend/dist/services/skillService.d.ts +137 -0
  305. package/backend/dist/services/skillService.d.ts.map +1 -0
  306. package/backend/dist/services/skillService.js +852 -0
  307. package/backend/dist/services/skillService.js.map +1 -0
  308. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  309. package/backend/dist/services/titleGenerationService.js +5 -1
  310. package/backend/dist/services/titleGenerationService.js.map +1 -1
  311. package/backend/dist/services/toolAccessService.d.ts +9 -0
  312. package/backend/dist/services/toolAccessService.d.ts.map +1 -0
  313. package/backend/dist/services/toolAccessService.js +60 -0
  314. package/backend/dist/services/toolAccessService.js.map +1 -0
  315. package/backend/dist/services/toolApprovalService.d.ts +34 -0
  316. package/backend/dist/services/toolApprovalService.d.ts.map +1 -0
  317. package/backend/dist/services/toolApprovalService.js +188 -0
  318. package/backend/dist/services/toolApprovalService.js.map +1 -0
  319. package/backend/dist/services/toolGatewayService.d.ts +53 -0
  320. package/backend/dist/services/toolGatewayService.d.ts.map +1 -0
  321. package/backend/dist/services/toolGatewayService.js +249 -0
  322. package/backend/dist/services/toolGatewayService.js.map +1 -0
  323. package/backend/dist/services/toolServerService.d.ts +57 -0
  324. package/backend/dist/services/toolServerService.d.ts.map +1 -0
  325. package/backend/dist/services/toolServerService.js +521 -0
  326. package/backend/dist/services/toolServerService.js.map +1 -0
  327. package/backend/dist/services/voiceAccessService.d.ts +10 -0
  328. package/backend/dist/services/voiceAccessService.d.ts.map +1 -0
  329. package/backend/dist/services/voiceAccessService.js +74 -0
  330. package/backend/dist/services/voiceAccessService.js.map +1 -0
  331. package/backend/dist/services/voiceProfileService.d.ts +20 -0
  332. package/backend/dist/services/voiceProfileService.d.ts.map +1 -1
  333. package/backend/dist/services/voiceProfileService.js +60 -0
  334. package/backend/dist/services/voiceProfileService.js.map +1 -1
  335. package/backend/dist/services/webSearchPlanService.d.ts +18 -0
  336. package/backend/dist/services/webSearchPlanService.d.ts.map +1 -0
  337. package/backend/dist/services/webSearchPlanService.js +160 -0
  338. package/backend/dist/services/webSearchPlanService.js.map +1 -0
  339. package/backend/dist/services/webSearchService.d.ts +9 -3
  340. package/backend/dist/services/webSearchService.d.ts.map +1 -1
  341. package/backend/dist/services/webSearchService.js +8 -2
  342. package/backend/dist/services/webSearchService.js.map +1 -1
  343. package/backend/dist/storage.d.ts +34 -1
  344. package/backend/dist/storage.d.ts.map +1 -1
  345. package/backend/dist/storage.js +164 -1
  346. package/backend/dist/storage.js.map +1 -1
  347. package/backend/dist/storageMappers.d.ts +2 -2
  348. package/backend/dist/storageMappers.d.ts.map +1 -1
  349. package/backend/dist/storageMappers.js.map +1 -1
  350. package/backend/dist/types/index.d.ts +269 -2
  351. package/backend/dist/types/index.d.ts.map +1 -1
  352. package/backend/dist/types/index.js.map +1 -1
  353. package/backend/dist/types/tools.d.ts +137 -0
  354. package/backend/dist/types/tools.d.ts.map +1 -0
  355. package/backend/dist/types/tools.js +25 -0
  356. package/backend/dist/types/tools.js.map +1 -0
  357. package/backend/dist/utils/automationSchedule.d.ts +26 -0
  358. package/backend/dist/utils/automationSchedule.d.ts.map +1 -0
  359. package/backend/dist/utils/automationSchedule.js +231 -0
  360. package/backend/dist/utils/automationSchedule.js.map +1 -0
  361. package/backend/dist/utils/chatDocumentContext.d.ts +26 -1
  362. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  363. package/backend/dist/utils/chatDocumentContext.js +87 -18
  364. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  365. package/backend/dist/utils/documentExtraction.d.ts +69 -0
  366. package/backend/dist/utils/documentExtraction.d.ts.map +1 -0
  367. package/backend/dist/utils/documentExtraction.js +545 -0
  368. package/backend/dist/utils/documentExtraction.js.map +1 -0
  369. package/backend/dist/utils/hybridRetrieval.d.ts +34 -0
  370. package/backend/dist/utils/hybridRetrieval.d.ts.map +1 -0
  371. package/backend/dist/utils/hybridRetrieval.js +119 -0
  372. package/backend/dist/utils/hybridRetrieval.js.map +1 -0
  373. package/backend/dist/utils/icsCalendar.d.ts +27 -0
  374. package/backend/dist/utils/icsCalendar.d.ts.map +1 -0
  375. package/backend/dist/utils/icsCalendar.js +313 -0
  376. package/backend/dist/utils/icsCalendar.js.map +1 -0
  377. package/backend/dist/utils/imageEditUpload.d.ts +29 -0
  378. package/backend/dist/utils/imageEditUpload.d.ts.map +1 -0
  379. package/backend/dist/utils/imageEditUpload.js +82 -0
  380. package/backend/dist/utils/imageEditUpload.js.map +1 -0
  381. package/backend/dist/utils/logRedaction.d.ts +2 -0
  382. package/backend/dist/utils/logRedaction.d.ts.map +1 -0
  383. package/backend/dist/utils/logRedaction.js +66 -0
  384. package/backend/dist/utils/logRedaction.js.map +1 -0
  385. package/backend/dist/utils/logger.d.ts +3 -0
  386. package/backend/dist/utils/logger.d.ts.map +1 -1
  387. package/backend/dist/utils/logger.js +63 -20
  388. package/backend/dist/utils/logger.js.map +1 -1
  389. package/backend/dist/utils/pluginChatAdapter.d.ts +5 -1
  390. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  391. package/backend/dist/utils/pluginChatAdapter.js +83 -0
  392. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  393. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  394. package/backend/dist/utils/resourceLimits.d.ts +68 -2
  395. package/backend/dist/utils/resourceLimits.d.ts.map +1 -1
  396. package/backend/dist/utils/resourceLimits.js +66 -0
  397. package/backend/dist/utils/resourceLimits.js.map +1 -1
  398. package/backend/dist/utils/toolEgress.d.ts +22 -0
  399. package/backend/dist/utils/toolEgress.d.ts.map +1 -0
  400. package/backend/dist/utils/toolEgress.js +157 -0
  401. package/backend/dist/utils/toolEgress.js.map +1 -0
  402. package/backend/dist/utils/websocketMessages.d.ts +6 -0
  403. package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
  404. package/backend/dist/utils/websocketMessages.js +8 -0
  405. package/backend/dist/utils/websocketMessages.js.map +1 -1
  406. package/backend/dist/utils/zipArchive.d.ts +32 -0
  407. package/backend/dist/utils/zipArchive.d.ts.map +1 -0
  408. package/backend/dist/utils/zipArchive.js +171 -0
  409. package/backend/dist/utils/zipArchive.js.map +1 -0
  410. package/backend/dist/websocketServer.d.ts.map +1 -1
  411. package/backend/dist/websocketServer.js +150 -37
  412. package/backend/dist/websocketServer.js.map +1 -1
  413. package/backend/package.json +1 -1
  414. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  415. package/frontend/dist/assets/index-BPsH9FII.js +80 -0
  416. package/frontend/dist/assets/index-BtXF0Oxa.css +1 -0
  417. package/frontend/dist/index.html +18 -18
  418. package/frontend/dist/js/{ArtifactContainer-B-hs0F5K.js → ArtifactContainer-CIoFoMv8.js} +1 -1
  419. package/frontend/dist/js/{ArtifactDemoPage-QFtJw-u4.js → ArtifactDemoPage-D0JEIAbZ.js} +1 -1
  420. package/frontend/dist/js/{ArtifactSandboxFrame-S9g_q47-.js → ArtifactSandboxFrame-REazyIrx.js} +2 -2
  421. package/frontend/dist/js/ArtifactSlideOutPanel-A-i94ghF.js +1 -0
  422. package/frontend/dist/js/AutomationsPage-Dow_lbIf.js +1 -0
  423. package/frontend/dist/js/{Button-BPf_pOxH.js → Button-C0r3J9G_.js} +1 -1
  424. package/frontend/dist/js/CalendarPage-DLjasZOd.js +1 -0
  425. package/frontend/dist/js/ChannelsPage-C8hvTD7J.js +1 -0
  426. package/frontend/dist/js/ChatPage-BAgBHUES.js +16 -0
  427. package/frontend/dist/js/EvaluationsPage-Bm8FRoeX.js +2 -0
  428. package/frontend/dist/js/FirstTimeSetup-BxJapNul.js +1 -0
  429. package/frontend/dist/js/GalleryPage-DHz9DkK7.js +1 -0
  430. package/frontend/dist/js/HomePage-BqNy-FWX.js +1 -0
  431. package/frontend/dist/js/LibreClawPage-BDzDILjY.js +1 -0
  432. package/frontend/dist/js/{ModelManagerModals-DBmm_slu.js → ModelManagerModals-DX9eT5r2.js} +1 -1
  433. package/frontend/dist/js/ModelSelector-ol8mK2ja.js +1 -0
  434. package/frontend/dist/js/NotesPage-DzHEx2O4.js +3 -0
  435. package/frontend/dist/js/{OptimizedSyntaxHighlighter-Dz7D1LPB.js → OptimizedSyntaxHighlighter-CZNPwN0i.js} +1 -1
  436. package/frontend/dist/js/PersonasPage-M_WKH2a9.js +13 -0
  437. package/frontend/dist/js/PluginUsagePage-Ctoka6JZ.js +1 -0
  438. package/frontend/dist/js/RichMessageContent-BqgafH4p.js +3 -0
  439. package/frontend/dist/js/SettingsModal-R9EDadAV.js +19 -0
  440. package/frontend/dist/js/{SettingsToggle-woG_WebF.js → SettingsToggle-BIVyfGjl.js} +1 -1
  441. package/frontend/dist/js/{SystemPage-Xr7XJv8c.js → SystemPage-aOkrSuY7.js} +1 -1
  442. package/frontend/dist/js/UserManagementPage-BOuaX3ay.js +1 -0
  443. package/frontend/dist/js/WorkPage-DxZISerQ.js +6 -0
  444. package/frontend/dist/js/api-6bSMtSNh.js +14 -0
  445. package/frontend/dist/js/{appStore-DXlmTjIC.js → appStore-CdObhQBb.js} +2 -2
  446. package/frontend/dist/js/ar-DT_VLBO3.js +2 -0
  447. package/frontend/dist/js/{authStore-B97lJ5Ee.js → authStore-DbqqrfZv.js} +3 -3
  448. package/frontend/dist/js/{babel-D24oDI9y.js → babel-DSqqk5kt.js} +1 -1
  449. package/frontend/dist/js/bn-BrvEqhGA.js +2 -0
  450. package/frontend/dist/js/calendarDates-Co3o_05Y.js +1 -0
  451. package/frontend/dist/js/chatStore-DbZPJNsu.js +3 -0
  452. package/frontend/dist/js/{config-CmEh9o8U.js → config-8KdgjtEx.js} +1 -1
  453. package/frontend/dist/js/cs-BthnM_YI.js +2 -0
  454. package/frontend/dist/js/da-DCth-6_j.js +2 -0
  455. package/frontend/dist/js/de-BBWt0gJ_.js +2 -0
  456. package/frontend/dist/js/es-DuslOPqM.js +2 -0
  457. package/frontend/dist/js/{estree-CZO8RS52.js → estree-BU5-LV_1.js} +7 -7
  458. package/frontend/dist/js/evaluationsApi-CwZJsgeG.js +1 -0
  459. package/frontend/dist/js/fr-DZAeg46S.js +2 -0
  460. package/frontend/dist/js/hi-ijDSiY77.js +2 -0
  461. package/frontend/dist/js/{html-C31pxhBG.js → html-DeoAy2bo.js} +10 -10
  462. package/frontend/dist/js/id-BS6qS0oq.js +2 -0
  463. package/frontend/dist/js/is-CO2PMDte.js +2 -0
  464. package/frontend/dist/js/it-ChhxT4hs.js +2 -0
  465. package/frontend/dist/js/ja-cyeqUeJN.js +2 -0
  466. package/frontend/dist/js/ko-CfqHTLXj.js +2 -0
  467. package/frontend/dist/js/{markdown-C1CEqXpL.js → markdown-DOLsYkBY.js} +6 -6
  468. package/frontend/dist/js/markdown-core-BK7WVOb7.js +32 -0
  469. package/frontend/dist/js/{markdown-math-DK846gXU.js → markdown-math-e1ByS3KY.js} +5 -5
  470. package/frontend/dist/js/{messageCodeStyles-BqQ6kOSU.js → messageCodeStyles-DhVgizF-.js} +2 -2
  471. package/frontend/dist/js/ms-DZ5pACe1.js +2 -0
  472. package/frontend/dist/js/nl-BsRsnOVp.js +2 -0
  473. package/frontend/dist/js/pl-DXSTAW4M.js +2 -0
  474. package/frontend/dist/js/{postcss-Bx9CTcIc.js → postcss-Bg15EcFE.js} +1 -1
  475. package/frontend/dist/js/pt-DmDx0JxB.js +2 -0
  476. package/frontend/dist/js/{react-vendor-C5yShNlM.js → react-vendor-BG_HPV6X.js} +1 -1
  477. package/frontend/dist/js/router-vendor-CbexJIsv.js +1 -0
  478. package/frontend/dist/js/ru-d2g8EWfY.js +2 -0
  479. package/frontend/dist/js/{standalone-Dz0pkxn0.js → standalone-BO5pzI8_.js} +5 -5
  480. package/frontend/dist/js/sv-CIhYUTVQ.js +2 -0
  481. package/frontend/dist/js/{syntax-highlight-3EEX6CGL.js → syntax-highlight-DcR9Vhb7.js} +3 -3
  482. package/frontend/dist/js/th-B3wSxanB.js +2 -0
  483. package/frontend/dist/js/tr-R4UGgPOY.js +2 -0
  484. package/frontend/dist/js/{typescript-DeXPhp90.js → typescript-6GJ8APmn.js} +2 -2
  485. package/frontend/dist/js/ui-CV0LYmkM.js +2 -0
  486. package/frontend/dist/js/ui-vendor-CWjIBW-z.js +177 -0
  487. package/frontend/dist/js/uk-BzUF4Vkt.js +2 -0
  488. package/frontend/dist/js/{useTranslation-Bho4HCyg.js → useTranslation-5b5UhAc9.js} +1 -1
  489. package/frontend/dist/js/{utils-D9W1Lnkn.js → utils-BGrdX9ie.js} +1 -1
  490. package/frontend/dist/js/{utils-vendor-DWh39_3x.js → utils-vendor-9bQ62WeD.js} +1 -1
  491. package/frontend/dist/js/vi-CKc6Fg4h.js +2 -0
  492. package/frontend/dist/js/{workApi-C4QtuhcE.js → workApi-BruWTlHM.js} +2 -2
  493. package/frontend/dist/js/{yaml-DioTxVLA.js → yaml-DUeWcOOH.js} +5 -5
  494. package/frontend/dist/js/zh-CXL-kDe8.js +2 -0
  495. package/package.json +2 -2
  496. package/plugins/openai.json +52 -9
  497. package/frontend/dist/assets/index-CDQ12KBq.js +0 -34
  498. package/frontend/dist/assets/index-DkFWzmFD.css +0 -1
  499. package/frontend/dist/js/ArtifactSlideOutPanel-D0UOo8RW.js +0 -1
  500. package/frontend/dist/js/ChatPage-fdd8500b.js +0 -23
  501. package/frontend/dist/js/FirstTimeSetup-BTjafGOq.js +0 -1
  502. package/frontend/dist/js/GalleryPage-hR9AJ6b-.js +0 -1
  503. package/frontend/dist/js/HomePage-JvTzq-Pp.js +0 -1
  504. package/frontend/dist/js/LibreClawPage-CLJvtXft.js +0 -1
  505. package/frontend/dist/js/ModelSelector-A-viVFEc.js +0 -1
  506. package/frontend/dist/js/ModelsPage-C4Rm-TZF.js +0 -2
  507. package/frontend/dist/js/NotesPage-C7bPU_KF.js +0 -1
  508. package/frontend/dist/js/PersonasPage-DpvxbFzv.js +0 -13
  509. package/frontend/dist/js/PluginUsagePage-laF-M2X9.js +0 -1
  510. package/frontend/dist/js/RichMessageContent-D0mK9vRA.js +0 -3
  511. package/frontend/dist/js/SettingsModal-DNEQ5sTt.js +0 -1
  512. package/frontend/dist/js/UserManagementPage-DGmbGTC2.js +0 -1
  513. package/frontend/dist/js/WorkPage-DNKFD9gS.js +0 -6
  514. package/frontend/dist/js/api-DGVZHSkS.js +0 -14
  515. package/frontend/dist/js/ar-DW79oSyN.js +0 -2
  516. package/frontend/dist/js/bn-BEAmE7VH.js +0 -2
  517. package/frontend/dist/js/chatStore-zilBUd1p.js +0 -3
  518. package/frontend/dist/js/cs-irpRMzRo.js +0 -2
  519. package/frontend/dist/js/da-cgilTVxc.js +0 -2
  520. package/frontend/dist/js/de-BU-eH3gU.js +0 -2
  521. package/frontend/dist/js/es-B2LRpZ0p.js +0 -2
  522. package/frontend/dist/js/fr-Cd5JM-oQ.js +0 -2
  523. package/frontend/dist/js/hi-CvOhdtiK.js +0 -2
  524. package/frontend/dist/js/id-BtRK5nR_.js +0 -2
  525. package/frontend/dist/js/is-CnEqwgRF.js +0 -2
  526. package/frontend/dist/js/it-CI6WjId6.js +0 -2
  527. package/frontend/dist/js/ja-B6gFOHi6.js +0 -2
  528. package/frontend/dist/js/ko-DuAhnmMf.js +0 -2
  529. package/frontend/dist/js/markdown-core-BmPPZiuD.js +0 -31
  530. package/frontend/dist/js/ms-C8BIP7MZ.js +0 -2
  531. package/frontend/dist/js/nl-DnEdspER.js +0 -2
  532. package/frontend/dist/js/pl-Ddyyvbse.js +0 -2
  533. package/frontend/dist/js/pt-BYuzm70F.js +0 -2
  534. package/frontend/dist/js/router-vendor-CbPDks39.js +0 -1
  535. package/frontend/dist/js/ru-CmSPFxPX.js +0 -2
  536. package/frontend/dist/js/sv-Dd6SQ9f1.js +0 -2
  537. package/frontend/dist/js/th-CpH8745B.js +0 -2
  538. package/frontend/dist/js/tr-DuVD75iJ.js +0 -2
  539. package/frontend/dist/js/ui-CO0DPqrI.js +0 -2
  540. package/frontend/dist/js/ui-vendor-mqjSfAaS.js +0 -177
  541. package/frontend/dist/js/uk-B0MU-M8k.js +0 -2
  542. package/frontend/dist/js/vi-BLmFNp_z.js +0 -2
  543. package/frontend/dist/js/zh-BQu0TLhw.js +0 -2
@@ -702,6 +702,317 @@ const TRUST_FOUNDATION_REQUIRED_SCHEMA = {
702
702
  'details',
703
703
  ],
704
704
  };
705
+ const PERSONAL_AUTOMATIONS_REQUIRED_SCHEMA = {
706
+ calendar_events: [
707
+ 'id',
708
+ 'user_id',
709
+ 'title',
710
+ 'notes',
711
+ 'start_at',
712
+ 'end_at',
713
+ 'all_day',
714
+ 'recurrence',
715
+ 'created_at',
716
+ 'updated_at',
717
+ ],
718
+ automations: [
719
+ 'id',
720
+ 'user_id',
721
+ 'name',
722
+ 'instructions',
723
+ 'triggers',
724
+ 'provider',
725
+ 'model',
726
+ 'notify',
727
+ 'status',
728
+ 'next_run_at',
729
+ 'last_run_at',
730
+ 'created_at',
731
+ 'updated_at',
732
+ ],
733
+ automation_runs: [
734
+ 'id',
735
+ 'automation_id',
736
+ 'user_id',
737
+ 'scheduled_for',
738
+ 'started_at',
739
+ 'finished_at',
740
+ 'status',
741
+ 'session_id',
742
+ 'assistant_message_id',
743
+ 'error',
744
+ 'seen_at',
745
+ 'created_at',
746
+ ],
747
+ };
748
+ const AGENT_FOUNDATION_REQUIRED_SCHEMA = {
749
+ personas: ['bindings'],
750
+ tool_servers: [
751
+ 'id',
752
+ 'user_id',
753
+ 'name',
754
+ 'description',
755
+ 'kind',
756
+ 'base_url',
757
+ 'spec',
758
+ 'spec_digest',
759
+ 'spec_revision',
760
+ 'auth_mode',
761
+ 'auth_header',
762
+ 'access_mode',
763
+ 'enabled',
764
+ 'timeout_ms',
765
+ 'max_response_bytes',
766
+ 'created_at',
767
+ 'updated_at',
768
+ ],
769
+ tool_server_tools: [
770
+ 'id',
771
+ 'server_id',
772
+ 'name',
773
+ 'description',
774
+ 'params_schema',
775
+ 'detail',
776
+ 'side_effect',
777
+ 'enabled',
778
+ 'created_at',
779
+ 'updated_at',
780
+ ],
781
+ tool_server_credentials: [
782
+ 'id',
783
+ 'server_id',
784
+ 'user_id',
785
+ 'secret',
786
+ 'created_at',
787
+ 'updated_at',
788
+ ],
789
+ tool_approvals: [
790
+ 'id',
791
+ 'user_id',
792
+ 'session_id',
793
+ 'server_id',
794
+ 'tool_name',
795
+ 'call_id',
796
+ 'arguments_digest',
797
+ 'scope',
798
+ 'status',
799
+ 'created_at',
800
+ 'resolved_at',
801
+ 'expires_at',
802
+ ],
803
+ prompts: [
804
+ 'id',
805
+ 'user_id',
806
+ 'slug',
807
+ 'title',
808
+ 'description',
809
+ 'content',
810
+ 'variables',
811
+ 'tags',
812
+ 'version',
813
+ 'created_at',
814
+ 'updated_at',
815
+ ],
816
+ prompt_versions: [
817
+ 'id',
818
+ 'prompt_id',
819
+ 'version',
820
+ 'content',
821
+ 'variables',
822
+ 'created_at',
823
+ ],
824
+ skills: [
825
+ 'id',
826
+ 'user_id',
827
+ 'slug',
828
+ 'name',
829
+ 'description',
830
+ 'instructions',
831
+ 'enabled',
832
+ 'version',
833
+ 'created_at',
834
+ 'updated_at',
835
+ ],
836
+ skill_versions: ['id', 'skill_id', 'version', 'instructions', 'created_at'],
837
+ };
838
+ const SKILL_FILES_REQUIRED_SCHEMA = {
839
+ skill_files: [
840
+ 'id',
841
+ 'skill_id',
842
+ 'path',
843
+ 'content',
844
+ 'size',
845
+ 'created_at',
846
+ 'updated_at',
847
+ ],
848
+ };
849
+ const NOTES_V2_REQUIRED_SCHEMA = {
850
+ notes: ['pinned'],
851
+ note_revisions: ['id', 'note_id', 'title', 'content', 'created_at'],
852
+ note_attachments: [
853
+ 'id',
854
+ 'note_id',
855
+ 'blob_id',
856
+ 'filename',
857
+ 'content_type',
858
+ 'size',
859
+ 'created_at',
860
+ ],
861
+ };
862
+ const TEAM_COLLABORATION_REQUIRED_SCHEMA = {
863
+ calendar_events: [
864
+ 'calendar_id',
865
+ 'reminder_minutes',
866
+ 'last_reminded_occurrence',
867
+ ],
868
+ calendars: ['id', 'user_id', 'name', 'color', 'created_at', 'updated_at'],
869
+ channels: [
870
+ 'id',
871
+ 'type',
872
+ 'name',
873
+ 'description',
874
+ 'dm_key',
875
+ 'created_by',
876
+ 'created_at',
877
+ 'updated_at',
878
+ 'archived_at',
879
+ ],
880
+ channel_members: [
881
+ 'channel_id',
882
+ 'user_id',
883
+ 'role',
884
+ 'joined_at',
885
+ 'last_read_at',
886
+ ],
887
+ channel_messages: [
888
+ 'id',
889
+ 'channel_id',
890
+ 'user_id',
891
+ 'parent_id',
892
+ 'author_kind',
893
+ 'model',
894
+ 'content',
895
+ 'metadata',
896
+ 'created_at',
897
+ 'updated_at',
898
+ 'edited_at',
899
+ 'deleted_at',
900
+ 'pinned_at',
901
+ 'pinned_by',
902
+ ],
903
+ channel_reactions: ['id', 'message_id', 'user_id', 'emoji', 'created_at'],
904
+ channel_attachments: [
905
+ 'id',
906
+ 'message_id',
907
+ 'channel_id',
908
+ 'blob_id',
909
+ 'filename',
910
+ 'content_type',
911
+ 'size',
912
+ 'created_by',
913
+ 'created_at',
914
+ ],
915
+ notifications: [
916
+ 'id',
917
+ 'user_id',
918
+ 'type',
919
+ 'title',
920
+ 'body',
921
+ 'href',
922
+ 'source_key',
923
+ 'created_at',
924
+ 'read_at',
925
+ ],
926
+ webhook_targets: [
927
+ 'id',
928
+ 'name',
929
+ 'url',
930
+ 'secret',
931
+ 'events',
932
+ 'enabled',
933
+ 'created_by',
934
+ 'created_at',
935
+ 'updated_at',
936
+ ],
937
+ };
938
+ const MEDIA_ENTERPRISE_OPS_REQUIRED_SCHEMA = {
939
+ voice_profiles: [
940
+ 'consent_expires_at',
941
+ 'revoked_at',
942
+ 'transfer_count',
943
+ 'last_transfer_at',
944
+ ],
945
+ model_tariffs: [
946
+ 'id',
947
+ 'plugin_id',
948
+ 'model',
949
+ 'input_per_million',
950
+ 'output_per_million',
951
+ 'unit_price',
952
+ 'currency',
953
+ 'effective_from',
954
+ 'created_by',
955
+ 'created_at',
956
+ ],
957
+ usage_budgets: [
958
+ 'id',
959
+ 'name',
960
+ 'principal_type',
961
+ 'principal_id',
962
+ 'period',
963
+ 'amount_usd',
964
+ 'mode',
965
+ 'created_by',
966
+ 'created_at',
967
+ 'updated_at',
968
+ ],
969
+ message_feedback: [
970
+ 'id',
971
+ 'user_id',
972
+ 'session_id',
973
+ 'message_id',
974
+ 'rating',
975
+ 'tags',
976
+ 'comment',
977
+ 'model',
978
+ 'plugin_id',
979
+ 'snapshot',
980
+ 'created_at',
981
+ 'updated_at',
982
+ ],
983
+ arena_votes: [
984
+ 'id',
985
+ 'user_id',
986
+ 'compare_group',
987
+ 'model_a',
988
+ 'model_b',
989
+ 'winner',
990
+ 'created_at',
991
+ ],
992
+ eval_sets: [
993
+ 'id',
994
+ 'user_id',
995
+ 'name',
996
+ 'description',
997
+ 'items',
998
+ 'created_at',
999
+ 'updated_at',
1000
+ ],
1001
+ eval_runs: [
1002
+ 'id',
1003
+ 'set_id',
1004
+ 'user_id',
1005
+ 'label',
1006
+ 'plugin_id',
1007
+ 'model',
1008
+ 'status',
1009
+ 'results',
1010
+ 'error',
1011
+ 'created_at',
1012
+ 'updated_at',
1013
+ 'completed_at',
1014
+ ],
1015
+ };
705
1016
  export const IDENTITY_EMAIL_LOOKUP_SCHEMA_SQL = `
706
1017
  ALTER TABLE users ADD COLUMN email_lookup TEXT;
707
1018
  CREATE UNIQUE INDEX idx_users_email_lookup
@@ -912,6 +1223,494 @@ export const TRUST_FOUNDATION_SCHEMA_SQL = `
912
1223
  CREATE INDEX IF NOT EXISTS idx_security_audit_action
913
1224
  ON security_audit_events(action, occurred_at);
914
1225
  `;
1226
+ export const PERSONAL_AUTOMATIONS_SCHEMA_SQL = `
1227
+ CREATE TABLE IF NOT EXISTS calendar_events (
1228
+ id TEXT PRIMARY KEY,
1229
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1230
+ title TEXT NOT NULL,
1231
+ notes TEXT,
1232
+ start_at INTEGER NOT NULL,
1233
+ end_at INTEGER,
1234
+ all_day INTEGER NOT NULL DEFAULT 0,
1235
+ recurrence TEXT,
1236
+ created_at INTEGER NOT NULL,
1237
+ updated_at INTEGER NOT NULL
1238
+ );
1239
+
1240
+ CREATE INDEX IF NOT EXISTS idx_calendar_events_owner_start
1241
+ ON calendar_events(user_id, start_at);
1242
+
1243
+ CREATE TABLE IF NOT EXISTS automations (
1244
+ id TEXT PRIMARY KEY,
1245
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1246
+ name TEXT NOT NULL,
1247
+ instructions TEXT NOT NULL,
1248
+ triggers TEXT NOT NULL,
1249
+ provider TEXT,
1250
+ model TEXT,
1251
+ notify TEXT NOT NULL CHECK (notify IN ('app', 'off')),
1252
+ status TEXT NOT NULL CHECK (status IN ('active', 'paused')),
1253
+ next_run_at INTEGER,
1254
+ last_run_at INTEGER,
1255
+ created_at INTEGER NOT NULL,
1256
+ updated_at INTEGER NOT NULL
1257
+ );
1258
+
1259
+ CREATE INDEX IF NOT EXISTS idx_automations_owner
1260
+ ON automations(user_id, updated_at);
1261
+
1262
+ CREATE INDEX IF NOT EXISTS idx_automations_due
1263
+ ON automations(status, next_run_at);
1264
+
1265
+ CREATE TABLE IF NOT EXISTS automation_runs (
1266
+ id TEXT PRIMARY KEY,
1267
+ automation_id TEXT NOT NULL REFERENCES automations(id) ON DELETE CASCADE,
1268
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1269
+ scheduled_for INTEGER NOT NULL,
1270
+ started_at INTEGER,
1271
+ finished_at INTEGER,
1272
+ status TEXT NOT NULL
1273
+ CHECK (status IN ('queued', 'running', 'succeeded', 'failed')),
1274
+ session_id TEXT,
1275
+ assistant_message_id TEXT,
1276
+ error TEXT,
1277
+ seen_at INTEGER,
1278
+ created_at INTEGER NOT NULL
1279
+ );
1280
+
1281
+ CREATE INDEX IF NOT EXISTS idx_automation_runs_automation
1282
+ ON automation_runs(automation_id, scheduled_for);
1283
+
1284
+ CREATE INDEX IF NOT EXISTS idx_automation_runs_owner_time
1285
+ ON automation_runs(user_id, scheduled_for);
1286
+ `;
1287
+ export const AGENT_FOUNDATION_TABLES_SQL = `
1288
+ CREATE TABLE IF NOT EXISTS tool_servers (
1289
+ id TEXT PRIMARY KEY,
1290
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1291
+ name TEXT NOT NULL,
1292
+ description TEXT,
1293
+ kind TEXT NOT NULL CHECK (kind IN ('openapi', 'mcp')),
1294
+ base_url TEXT NOT NULL,
1295
+ spec TEXT,
1296
+ spec_digest TEXT,
1297
+ spec_revision INTEGER NOT NULL DEFAULT 1,
1298
+ auth_mode TEXT NOT NULL CHECK (auth_mode IN ('none', 'bearer', 'header')),
1299
+ auth_header TEXT,
1300
+ access_mode TEXT NOT NULL
1301
+ CHECK (access_mode IN ('admins-only', 'all-users', 'granted')),
1302
+ enabled INTEGER NOT NULL DEFAULT 1,
1303
+ timeout_ms INTEGER NOT NULL,
1304
+ max_response_bytes INTEGER NOT NULL,
1305
+ created_at INTEGER NOT NULL,
1306
+ updated_at INTEGER NOT NULL
1307
+ );
1308
+
1309
+ CREATE INDEX IF NOT EXISTS idx_tool_servers_updated
1310
+ ON tool_servers(updated_at);
1311
+
1312
+ CREATE TABLE IF NOT EXISTS tool_server_tools (
1313
+ id TEXT PRIMARY KEY,
1314
+ server_id TEXT NOT NULL REFERENCES tool_servers(id) ON DELETE CASCADE,
1315
+ name TEXT NOT NULL,
1316
+ description TEXT,
1317
+ params_schema TEXT,
1318
+ detail TEXT,
1319
+ side_effect INTEGER NOT NULL DEFAULT 1,
1320
+ enabled INTEGER NOT NULL DEFAULT 1,
1321
+ created_at INTEGER NOT NULL,
1322
+ updated_at INTEGER NOT NULL,
1323
+ UNIQUE (server_id, name)
1324
+ );
1325
+
1326
+ CREATE TABLE IF NOT EXISTS tool_server_credentials (
1327
+ id TEXT PRIMARY KEY,
1328
+ server_id TEXT NOT NULL REFERENCES tool_servers(id) ON DELETE CASCADE,
1329
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1330
+ secret TEXT NOT NULL,
1331
+ created_at INTEGER NOT NULL,
1332
+ updated_at INTEGER NOT NULL,
1333
+ UNIQUE (server_id, user_id)
1334
+ );
1335
+
1336
+ CREATE TABLE IF NOT EXISTS tool_approvals (
1337
+ id TEXT PRIMARY KEY,
1338
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1339
+ session_id TEXT REFERENCES sessions(id) ON DELETE CASCADE,
1340
+ server_id TEXT REFERENCES tool_servers(id) ON DELETE CASCADE,
1341
+ tool_name TEXT NOT NULL,
1342
+ call_id TEXT,
1343
+ arguments_digest TEXT,
1344
+ scope TEXT NOT NULL CHECK (scope IN ('once', 'session', 'always')),
1345
+ status TEXT NOT NULL
1346
+ CHECK (status IN ('pending', 'approved', 'denied', 'expired')),
1347
+ created_at INTEGER NOT NULL,
1348
+ resolved_at INTEGER,
1349
+ expires_at INTEGER
1350
+ );
1351
+
1352
+ CREATE INDEX IF NOT EXISTS idx_tool_approvals_owner
1353
+ ON tool_approvals(user_id, status, created_at);
1354
+
1355
+ CREATE TABLE IF NOT EXISTS prompts (
1356
+ id TEXT PRIMARY KEY,
1357
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1358
+ slug TEXT NOT NULL,
1359
+ title TEXT NOT NULL,
1360
+ description TEXT,
1361
+ content TEXT NOT NULL,
1362
+ variables TEXT,
1363
+ tags TEXT,
1364
+ version INTEGER NOT NULL DEFAULT 1,
1365
+ created_at INTEGER NOT NULL,
1366
+ updated_at INTEGER NOT NULL,
1367
+ UNIQUE (user_id, slug)
1368
+ );
1369
+
1370
+ CREATE INDEX IF NOT EXISTS idx_prompts_owner
1371
+ ON prompts(user_id, updated_at);
1372
+
1373
+ CREATE TABLE IF NOT EXISTS prompt_versions (
1374
+ id TEXT PRIMARY KEY,
1375
+ prompt_id TEXT NOT NULL REFERENCES prompts(id) ON DELETE CASCADE,
1376
+ version INTEGER NOT NULL,
1377
+ content TEXT NOT NULL,
1378
+ variables TEXT,
1379
+ created_at INTEGER NOT NULL,
1380
+ UNIQUE (prompt_id, version)
1381
+ );
1382
+
1383
+ CREATE TABLE IF NOT EXISTS skills (
1384
+ id TEXT PRIMARY KEY,
1385
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1386
+ slug TEXT NOT NULL,
1387
+ name TEXT NOT NULL,
1388
+ description TEXT NOT NULL,
1389
+ instructions TEXT NOT NULL,
1390
+ enabled INTEGER NOT NULL DEFAULT 1,
1391
+ version INTEGER NOT NULL DEFAULT 1,
1392
+ created_at INTEGER NOT NULL,
1393
+ updated_at INTEGER NOT NULL,
1394
+ UNIQUE (user_id, slug)
1395
+ );
1396
+
1397
+ CREATE INDEX IF NOT EXISTS idx_skills_owner
1398
+ ON skills(user_id, updated_at);
1399
+
1400
+ CREATE TABLE IF NOT EXISTS skill_versions (
1401
+ id TEXT PRIMARY KEY,
1402
+ skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,
1403
+ version INTEGER NOT NULL,
1404
+ instructions TEXT NOT NULL,
1405
+ created_at INTEGER NOT NULL,
1406
+ UNIQUE (skill_id, version)
1407
+ );
1408
+ `;
1409
+ export const AGENT_FOUNDATION_SCHEMA_SQL = `
1410
+ ALTER TABLE personas ADD COLUMN bindings TEXT;
1411
+ ${AGENT_FOUNDATION_TABLES_SQL}`;
1412
+ export const SKILL_FILES_SCHEMA_SQL = `
1413
+ CREATE TABLE IF NOT EXISTS skill_files (
1414
+ id TEXT PRIMARY KEY,
1415
+ skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,
1416
+ path TEXT NOT NULL,
1417
+ content TEXT NOT NULL,
1418
+ size INTEGER NOT NULL,
1419
+ created_at INTEGER NOT NULL,
1420
+ updated_at INTEGER NOT NULL,
1421
+ UNIQUE (skill_id, path)
1422
+ );
1423
+
1424
+ CREATE INDEX IF NOT EXISTS idx_skill_files_skill
1425
+ ON skill_files(skill_id);
1426
+ `;
1427
+ export const NOTES_V2_TABLES_SQL = `
1428
+ CREATE TABLE IF NOT EXISTS note_revisions (
1429
+ id TEXT PRIMARY KEY,
1430
+ note_id TEXT NOT NULL REFERENCES notes(id) ON DELETE CASCADE,
1431
+ title TEXT NOT NULL,
1432
+ content TEXT NOT NULL,
1433
+ created_at INTEGER NOT NULL
1434
+ );
1435
+
1436
+ CREATE INDEX IF NOT EXISTS idx_note_revisions_note
1437
+ ON note_revisions(note_id, created_at);
1438
+
1439
+ CREATE TABLE IF NOT EXISTS note_attachments (
1440
+ id TEXT PRIMARY KEY,
1441
+ note_id TEXT NOT NULL REFERENCES notes(id) ON DELETE CASCADE,
1442
+ blob_id TEXT NOT NULL,
1443
+ filename TEXT NOT NULL,
1444
+ content_type TEXT NOT NULL,
1445
+ size INTEGER NOT NULL,
1446
+ created_at INTEGER NOT NULL
1447
+ );
1448
+
1449
+ CREATE INDEX IF NOT EXISTS idx_note_attachments_note
1450
+ ON note_attachments(note_id);
1451
+ `;
1452
+ export const NOTES_V2_SCHEMA_SQL = `
1453
+ ALTER TABLE notes ADD COLUMN pinned INTEGER DEFAULT 0;
1454
+
1455
+ CREATE TABLE IF NOT EXISTS note_revisions (
1456
+ id TEXT PRIMARY KEY,
1457
+ note_id TEXT NOT NULL REFERENCES notes(id) ON DELETE CASCADE,
1458
+ title TEXT NOT NULL,
1459
+ content TEXT NOT NULL,
1460
+ created_at INTEGER NOT NULL
1461
+ );
1462
+
1463
+ CREATE INDEX IF NOT EXISTS idx_note_revisions_note
1464
+ ON note_revisions(note_id, created_at);
1465
+
1466
+ CREATE TABLE IF NOT EXISTS note_attachments (
1467
+ id TEXT PRIMARY KEY,
1468
+ note_id TEXT NOT NULL REFERENCES notes(id) ON DELETE CASCADE,
1469
+ blob_id TEXT NOT NULL,
1470
+ filename TEXT NOT NULL,
1471
+ content_type TEXT NOT NULL,
1472
+ size INTEGER NOT NULL,
1473
+ created_at INTEGER NOT NULL
1474
+ );
1475
+
1476
+ CREATE INDEX IF NOT EXISTS idx_note_attachments_note
1477
+ ON note_attachments(note_id);
1478
+ `;
1479
+ export const TEAM_COLLABORATION_TABLES_SQL = `
1480
+ CREATE INDEX IF NOT EXISTS idx_calendar_scoped_events
1481
+ ON calendar_events(calendar_id)
1482
+ WHERE calendar_id IS NOT NULL;
1483
+
1484
+ CREATE TABLE IF NOT EXISTS calendars (
1485
+ id TEXT PRIMARY KEY,
1486
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1487
+ name TEXT NOT NULL,
1488
+ color TEXT,
1489
+ created_at INTEGER NOT NULL,
1490
+ updated_at INTEGER NOT NULL
1491
+ );
1492
+
1493
+ CREATE INDEX IF NOT EXISTS idx_calendars_owner
1494
+ ON calendars(user_id, updated_at);
1495
+
1496
+ CREATE TABLE IF NOT EXISTS channels (
1497
+ id TEXT PRIMARY KEY,
1498
+ type TEXT NOT NULL CHECK (type IN ('public', 'private', 'dm')),
1499
+ name TEXT NOT NULL,
1500
+ description TEXT,
1501
+ dm_key TEXT,
1502
+ created_by TEXT,
1503
+ created_at INTEGER NOT NULL,
1504
+ updated_at INTEGER NOT NULL,
1505
+ archived_at INTEGER
1506
+ );
1507
+
1508
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_channels_dm_key
1509
+ ON channels(dm_key)
1510
+ WHERE dm_key IS NOT NULL;
1511
+
1512
+ CREATE TABLE IF NOT EXISTS channel_members (
1513
+ channel_id TEXT NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
1514
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1515
+ role TEXT NOT NULL CHECK (role IN ('owner', 'member')),
1516
+ joined_at INTEGER NOT NULL,
1517
+ last_read_at INTEGER NOT NULL DEFAULT 0,
1518
+ PRIMARY KEY (channel_id, user_id)
1519
+ );
1520
+
1521
+ CREATE INDEX IF NOT EXISTS idx_channel_members_user
1522
+ ON channel_members(user_id);
1523
+
1524
+ CREATE TABLE IF NOT EXISTS channel_messages (
1525
+ id TEXT PRIMARY KEY,
1526
+ channel_id TEXT NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
1527
+ user_id TEXT,
1528
+ parent_id TEXT,
1529
+ author_kind TEXT NOT NULL DEFAULT 'user' CHECK (author_kind IN ('user', 'model')),
1530
+ model TEXT,
1531
+ content TEXT NOT NULL,
1532
+ metadata TEXT,
1533
+ created_at INTEGER NOT NULL,
1534
+ updated_at INTEGER NOT NULL,
1535
+ edited_at INTEGER,
1536
+ deleted_at INTEGER,
1537
+ pinned_at INTEGER,
1538
+ pinned_by TEXT
1539
+ );
1540
+
1541
+ CREATE INDEX IF NOT EXISTS idx_channel_messages_timeline
1542
+ ON channel_messages(channel_id, created_at, id);
1543
+
1544
+ CREATE INDEX IF NOT EXISTS idx_channel_messages_thread
1545
+ ON channel_messages(parent_id)
1546
+ WHERE parent_id IS NOT NULL;
1547
+
1548
+ CREATE TABLE IF NOT EXISTS channel_reactions (
1549
+ id TEXT PRIMARY KEY,
1550
+ message_id TEXT NOT NULL REFERENCES channel_messages(id) ON DELETE CASCADE,
1551
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1552
+ emoji TEXT NOT NULL,
1553
+ created_at INTEGER NOT NULL,
1554
+ UNIQUE (message_id, user_id, emoji)
1555
+ );
1556
+
1557
+ CREATE TABLE IF NOT EXISTS channel_attachments (
1558
+ id TEXT PRIMARY KEY,
1559
+ message_id TEXT NOT NULL REFERENCES channel_messages(id) ON DELETE CASCADE,
1560
+ channel_id TEXT NOT NULL,
1561
+ blob_id TEXT NOT NULL,
1562
+ filename TEXT NOT NULL,
1563
+ content_type TEXT NOT NULL,
1564
+ size INTEGER NOT NULL,
1565
+ created_by TEXT,
1566
+ created_at INTEGER NOT NULL
1567
+ );
1568
+
1569
+ CREATE INDEX IF NOT EXISTS idx_channel_attachments_message
1570
+ ON channel_attachments(message_id);
1571
+
1572
+ CREATE TABLE IF NOT EXISTS notifications (
1573
+ id TEXT PRIMARY KEY,
1574
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1575
+ type TEXT NOT NULL,
1576
+ title TEXT NOT NULL,
1577
+ body TEXT,
1578
+ href TEXT,
1579
+ source_key TEXT,
1580
+ created_at INTEGER NOT NULL,
1581
+ read_at INTEGER
1582
+ );
1583
+
1584
+ CREATE INDEX IF NOT EXISTS idx_notifications_user
1585
+ ON notifications(user_id, created_at);
1586
+
1587
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_notifications_dedupe
1588
+ ON notifications(user_id, source_key)
1589
+ WHERE source_key IS NOT NULL;
1590
+
1591
+ CREATE TABLE IF NOT EXISTS webhook_targets (
1592
+ id TEXT PRIMARY KEY,
1593
+ name TEXT NOT NULL,
1594
+ url TEXT NOT NULL,
1595
+ secret TEXT,
1596
+ events TEXT NOT NULL,
1597
+ enabled INTEGER NOT NULL DEFAULT 1 CHECK (enabled IN (0, 1)),
1598
+ created_by TEXT,
1599
+ created_at INTEGER NOT NULL,
1600
+ updated_at INTEGER NOT NULL
1601
+ );
1602
+ `;
1603
+ export const TEAM_COLLABORATION_SCHEMA_SQL = `
1604
+ ALTER TABLE calendar_events ADD COLUMN calendar_id TEXT;
1605
+ ALTER TABLE calendar_events ADD COLUMN reminder_minutes INTEGER;
1606
+ ALTER TABLE calendar_events ADD COLUMN last_reminded_occurrence INTEGER;
1607
+ ${TEAM_COLLABORATION_TABLES_SQL}`;
1608
+ export const MEDIA_ENTERPRISE_OPS_TABLES_SQL = `
1609
+ CREATE TABLE IF NOT EXISTS model_tariffs (
1610
+ id TEXT PRIMARY KEY,
1611
+ plugin_id TEXT NOT NULL,
1612
+ model TEXT,
1613
+ input_per_million REAL,
1614
+ output_per_million REAL,
1615
+ unit_price REAL,
1616
+ currency TEXT NOT NULL DEFAULT 'USD',
1617
+ effective_from INTEGER NOT NULL,
1618
+ created_by TEXT,
1619
+ created_at INTEGER NOT NULL
1620
+ );
1621
+
1622
+ CREATE INDEX IF NOT EXISTS idx_model_tariffs_lookup
1623
+ ON model_tariffs(plugin_id, model, effective_from);
1624
+
1625
+ CREATE TABLE IF NOT EXISTS usage_budgets (
1626
+ id TEXT PRIMARY KEY,
1627
+ name TEXT NOT NULL,
1628
+ principal_type TEXT NOT NULL CHECK (principal_type IN ('instance', 'user', 'group')),
1629
+ principal_id TEXT,
1630
+ period TEXT NOT NULL CHECK (period IN ('daily', 'weekly', 'monthly')),
1631
+ amount_usd REAL NOT NULL,
1632
+ mode TEXT NOT NULL CHECK (mode IN ('observe', 'soft', 'hard')),
1633
+ created_by TEXT,
1634
+ created_at INTEGER NOT NULL,
1635
+ updated_at INTEGER NOT NULL
1636
+ );
1637
+
1638
+ CREATE INDEX IF NOT EXISTS idx_usage_budgets_principal
1639
+ ON usage_budgets(principal_type, principal_id);
1640
+
1641
+ CREATE TABLE IF NOT EXISTS message_feedback (
1642
+ id TEXT PRIMARY KEY,
1643
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1644
+ session_id TEXT NOT NULL,
1645
+ message_id TEXT NOT NULL,
1646
+ rating INTEGER NOT NULL CHECK (rating IN (-1, 1)),
1647
+ tags TEXT,
1648
+ comment TEXT,
1649
+ model TEXT,
1650
+ plugin_id TEXT,
1651
+ snapshot TEXT,
1652
+ created_at INTEGER NOT NULL,
1653
+ updated_at INTEGER NOT NULL,
1654
+ UNIQUE (user_id, message_id)
1655
+ );
1656
+
1657
+ CREATE INDEX IF NOT EXISTS idx_message_feedback_owner
1658
+ ON message_feedback(user_id, created_at);
1659
+
1660
+ CREATE TABLE IF NOT EXISTS arena_votes (
1661
+ id TEXT PRIMARY KEY,
1662
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1663
+ compare_group TEXT NOT NULL,
1664
+ model_a TEXT NOT NULL,
1665
+ model_b TEXT NOT NULL,
1666
+ winner TEXT NOT NULL CHECK (winner IN ('a', 'b', 'tie', 'both-bad')),
1667
+ created_at INTEGER NOT NULL,
1668
+ UNIQUE (user_id, compare_group)
1669
+ );
1670
+
1671
+ CREATE INDEX IF NOT EXISTS idx_arena_votes_order
1672
+ ON arena_votes(created_at, id);
1673
+
1674
+ CREATE TABLE IF NOT EXISTS eval_sets (
1675
+ id TEXT PRIMARY KEY,
1676
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1677
+ name TEXT NOT NULL,
1678
+ description TEXT,
1679
+ items TEXT NOT NULL,
1680
+ created_at INTEGER NOT NULL,
1681
+ updated_at INTEGER NOT NULL
1682
+ );
1683
+
1684
+ CREATE INDEX IF NOT EXISTS idx_eval_sets_owner
1685
+ ON eval_sets(user_id, updated_at);
1686
+
1687
+ CREATE TABLE IF NOT EXISTS eval_runs (
1688
+ id TEXT PRIMARY KEY,
1689
+ set_id TEXT NOT NULL REFERENCES eval_sets(id) ON DELETE CASCADE,
1690
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
1691
+ label TEXT,
1692
+ plugin_id TEXT,
1693
+ model TEXT NOT NULL,
1694
+ status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'completed', 'failed', 'cancelled')),
1695
+ results TEXT,
1696
+ error TEXT,
1697
+ created_at INTEGER NOT NULL,
1698
+ updated_at INTEGER NOT NULL,
1699
+ completed_at INTEGER
1700
+ );
1701
+
1702
+ CREATE INDEX IF NOT EXISTS idx_eval_runs_owner
1703
+ ON eval_runs(user_id, created_at);
1704
+
1705
+ CREATE INDEX IF NOT EXISTS idx_eval_runs_parent
1706
+ ON eval_runs(set_id);
1707
+ `;
1708
+ export const MEDIA_ENTERPRISE_OPS_SCHEMA_SQL = `
1709
+ ALTER TABLE voice_profiles ADD COLUMN consent_expires_at INTEGER;
1710
+ ALTER TABLE voice_profiles ADD COLUMN revoked_at INTEGER;
1711
+ ALTER TABLE voice_profiles ADD COLUMN transfer_count INTEGER NOT NULL DEFAULT 0;
1712
+ ALTER TABLE voice_profiles ADD COLUMN last_transfer_at INTEGER;
1713
+ ${MEDIA_ENTERPRISE_OPS_TABLES_SQL}`;
915
1714
  const REQUIRED_SCHEMA = {
916
1715
  ...LEGACY_REQUIRED_SCHEMA,
917
1716
  users: [
@@ -1080,6 +1879,34 @@ const REQUIRED_PRIMARY_KEYS = {
1080
1879
  api_tokens: ['id'],
1081
1880
  oauth_identities: ['provider', 'subject'],
1082
1881
  security_audit_events: ['id'],
1882
+ calendar_events: ['id'],
1883
+ automations: ['id'],
1884
+ automation_runs: ['id'],
1885
+ tool_servers: ['id'],
1886
+ tool_server_tools: ['id'],
1887
+ tool_server_credentials: ['id'],
1888
+ tool_approvals: ['id'],
1889
+ prompts: ['id'],
1890
+ prompt_versions: ['id'],
1891
+ skills: ['id'],
1892
+ skill_versions: ['id'],
1893
+ skill_files: ['id'],
1894
+ note_revisions: ['id'],
1895
+ note_attachments: ['id'],
1896
+ calendars: ['id'],
1897
+ channels: ['id'],
1898
+ channel_members: ['channel_id', 'user_id'],
1899
+ channel_messages: ['id'],
1900
+ channel_reactions: ['id'],
1901
+ channel_attachments: ['id'],
1902
+ notifications: ['id'],
1903
+ webhook_targets: ['id'],
1904
+ model_tariffs: ['id'],
1905
+ usage_budgets: ['id'],
1906
+ message_feedback: ['id'],
1907
+ arena_votes: ['id'],
1908
+ eval_sets: ['id'],
1909
+ eval_runs: ['id'],
1083
1910
  };
1084
1911
  const REQUIRED_UNIQUE_KEYS = {
1085
1912
  [MIGRATION_TABLE]: [['name']],
@@ -1099,148 +1926,360 @@ const REQUIRED_UNIQUE_KEYS = {
1099
1926
  ['resource_type', 'resource_id', 'principal_type', 'principal_id'],
1100
1927
  ],
1101
1928
  api_tokens: [['token_hash']],
1929
+ tool_server_tools: [['server_id', 'name']],
1930
+ tool_server_credentials: [['server_id', 'user_id']],
1931
+ prompts: [['user_id', 'slug']],
1932
+ prompt_versions: [['prompt_id', 'version']],
1933
+ skills: [['user_id', 'slug']],
1934
+ skill_versions: [['skill_id', 'version']],
1935
+ skill_files: [['skill_id', 'path']],
1936
+ message_feedback: [['user_id', 'message_id']],
1937
+ arena_votes: [['user_id', 'compare_group']],
1102
1938
  };
1103
1939
  const REQUIRED_FOREIGN_KEYS = [
1104
1940
  {
1105
- table: 'sessions',
1941
+ table: 'sessions',
1942
+ columns: ['user_id'],
1943
+ referencedTable: 'users',
1944
+ referencedColumns: ['id'],
1945
+ onDelete: 'CASCADE',
1946
+ },
1947
+ {
1948
+ table: 'session_messages',
1949
+ columns: ['session_id'],
1950
+ referencedTable: 'sessions',
1951
+ referencedColumns: ['id'],
1952
+ onDelete: 'CASCADE',
1953
+ },
1954
+ {
1955
+ table: 'plugin_credentials',
1956
+ columns: ['user_id'],
1957
+ referencedTable: 'users',
1958
+ referencedColumns: ['id'],
1959
+ onDelete: 'CASCADE',
1960
+ },
1961
+ {
1962
+ table: 'work_tasks',
1963
+ columns: ['user_id'],
1964
+ referencedTable: 'users',
1965
+ referencedColumns: ['id'],
1966
+ onDelete: 'CASCADE',
1967
+ },
1968
+ {
1969
+ table: 'work_runs',
1970
+ columns: ['task_id'],
1971
+ referencedTable: 'work_tasks',
1972
+ referencedColumns: ['id'],
1973
+ onDelete: 'CASCADE',
1974
+ },
1975
+ {
1976
+ table: 'work_messages',
1977
+ columns: ['task_id'],
1978
+ referencedTable: 'work_tasks',
1979
+ referencedColumns: ['id'],
1980
+ onDelete: 'CASCADE',
1981
+ },
1982
+ {
1983
+ table: 'work_messages',
1984
+ columns: ['run_id'],
1985
+ referencedTable: 'work_runs',
1986
+ referencedColumns: ['id'],
1987
+ onDelete: 'SET NULL',
1988
+ },
1989
+ {
1990
+ table: 'persona_memories',
1991
+ columns: ['user_id'],
1992
+ referencedTable: 'users',
1993
+ referencedColumns: ['id'],
1994
+ onDelete: 'CASCADE',
1995
+ },
1996
+ {
1997
+ table: 'persona_memories',
1998
+ columns: ['persona_id'],
1999
+ referencedTable: 'personas',
2000
+ referencedColumns: ['id'],
2001
+ onDelete: 'CASCADE',
2002
+ },
2003
+ {
2004
+ table: 'persona_states',
2005
+ columns: ['persona_id'],
2006
+ referencedTable: 'personas',
2007
+ referencedColumns: ['id'],
2008
+ onDelete: 'CASCADE',
2009
+ },
2010
+ {
2011
+ table: 'platform_vector_acl',
2012
+ columns: ['namespace', 'owner_user_id', 'vector_id'],
2013
+ referencedTable: 'platform_vector_entries',
2014
+ referencedColumns: ['namespace', 'owner_user_id', 'id'],
2015
+ onDelete: 'CASCADE',
2016
+ },
2017
+ {
2018
+ table: 'platform_vector_attributes',
2019
+ columns: ['namespace', 'owner_user_id', 'vector_id'],
2020
+ referencedTable: 'platform_vector_entries',
2021
+ referencedColumns: ['namespace', 'owner_user_id', 'id'],
2022
+ onDelete: 'CASCADE',
2023
+ },
2024
+ {
2025
+ table: 'platform_job_attempts',
2026
+ columns: ['job_id'],
2027
+ referencedTable: 'platform_jobs',
2028
+ referencedColumns: ['id'],
2029
+ onDelete: 'CASCADE',
2030
+ },
2031
+ {
2032
+ table: 'platform_events',
2033
+ columns: ['stream_id'],
2034
+ referencedTable: 'platform_event_stream_heads',
2035
+ referencedColumns: ['stream_id'],
2036
+ onDelete: 'CASCADE',
2037
+ },
2038
+ {
2039
+ table: 'user_group_members',
2040
+ columns: ['group_id'],
2041
+ referencedTable: 'user_groups',
2042
+ referencedColumns: ['id'],
2043
+ onDelete: 'CASCADE',
2044
+ },
2045
+ {
2046
+ table: 'user_group_members',
1106
2047
  columns: ['user_id'],
1107
2048
  referencedTable: 'users',
1108
2049
  referencedColumns: ['id'],
1109
2050
  onDelete: 'CASCADE',
1110
2051
  },
1111
2052
  {
1112
- table: 'session_messages',
1113
- columns: ['session_id'],
1114
- referencedTable: 'sessions',
2053
+ table: 'resource_grants',
2054
+ columns: ['owner_user_id'],
2055
+ referencedTable: 'users',
1115
2056
  referencedColumns: ['id'],
1116
2057
  onDelete: 'CASCADE',
1117
2058
  },
1118
2059
  {
1119
- table: 'plugin_credentials',
2060
+ table: 'auth_sessions',
1120
2061
  columns: ['user_id'],
1121
2062
  referencedTable: 'users',
1122
2063
  referencedColumns: ['id'],
1123
2064
  onDelete: 'CASCADE',
1124
2065
  },
1125
2066
  {
1126
- table: 'work_tasks',
2067
+ table: 'api_tokens',
1127
2068
  columns: ['user_id'],
1128
2069
  referencedTable: 'users',
1129
2070
  referencedColumns: ['id'],
1130
2071
  onDelete: 'CASCADE',
1131
2072
  },
1132
2073
  {
1133
- table: 'work_runs',
1134
- columns: ['task_id'],
1135
- referencedTable: 'work_tasks',
2074
+ table: 'oauth_identities',
2075
+ columns: ['user_id'],
2076
+ referencedTable: 'users',
1136
2077
  referencedColumns: ['id'],
1137
2078
  onDelete: 'CASCADE',
1138
2079
  },
1139
2080
  {
1140
- table: 'work_messages',
1141
- columns: ['task_id'],
1142
- referencedTable: 'work_tasks',
2081
+ table: 'calendar_events',
2082
+ columns: ['user_id'],
2083
+ referencedTable: 'users',
1143
2084
  referencedColumns: ['id'],
1144
2085
  onDelete: 'CASCADE',
1145
2086
  },
1146
2087
  {
1147
- table: 'work_messages',
1148
- columns: ['run_id'],
1149
- referencedTable: 'work_runs',
2088
+ table: 'automations',
2089
+ columns: ['user_id'],
2090
+ referencedTable: 'users',
1150
2091
  referencedColumns: ['id'],
1151
- onDelete: 'SET NULL',
2092
+ onDelete: 'CASCADE',
1152
2093
  },
1153
2094
  {
1154
- table: 'persona_memories',
2095
+ table: 'automation_runs',
2096
+ columns: ['automation_id'],
2097
+ referencedTable: 'automations',
2098
+ referencedColumns: ['id'],
2099
+ onDelete: 'CASCADE',
2100
+ },
2101
+ {
2102
+ table: 'automation_runs',
1155
2103
  columns: ['user_id'],
1156
2104
  referencedTable: 'users',
1157
2105
  referencedColumns: ['id'],
1158
2106
  onDelete: 'CASCADE',
1159
2107
  },
1160
2108
  {
1161
- table: 'persona_memories',
1162
- columns: ['persona_id'],
1163
- referencedTable: 'personas',
2109
+ table: 'tool_servers',
2110
+ columns: ['user_id'],
2111
+ referencedTable: 'users',
1164
2112
  referencedColumns: ['id'],
1165
2113
  onDelete: 'CASCADE',
1166
2114
  },
1167
2115
  {
1168
- table: 'persona_states',
1169
- columns: ['persona_id'],
1170
- referencedTable: 'personas',
2116
+ table: 'tool_server_tools',
2117
+ columns: ['server_id'],
2118
+ referencedTable: 'tool_servers',
1171
2119
  referencedColumns: ['id'],
1172
2120
  onDelete: 'CASCADE',
1173
2121
  },
1174
2122
  {
1175
- table: 'platform_vector_acl',
1176
- columns: ['namespace', 'owner_user_id', 'vector_id'],
1177
- referencedTable: 'platform_vector_entries',
1178
- referencedColumns: ['namespace', 'owner_user_id', 'id'],
2123
+ table: 'tool_server_credentials',
2124
+ columns: ['server_id'],
2125
+ referencedTable: 'tool_servers',
2126
+ referencedColumns: ['id'],
1179
2127
  onDelete: 'CASCADE',
1180
2128
  },
1181
2129
  {
1182
- table: 'platform_vector_attributes',
1183
- columns: ['namespace', 'owner_user_id', 'vector_id'],
1184
- referencedTable: 'platform_vector_entries',
1185
- referencedColumns: ['namespace', 'owner_user_id', 'id'],
2130
+ table: 'tool_server_credentials',
2131
+ columns: ['user_id'],
2132
+ referencedTable: 'users',
2133
+ referencedColumns: ['id'],
1186
2134
  onDelete: 'CASCADE',
1187
2135
  },
1188
2136
  {
1189
- table: 'platform_job_attempts',
1190
- columns: ['job_id'],
1191
- referencedTable: 'platform_jobs',
2137
+ table: 'tool_approvals',
2138
+ columns: ['user_id'],
2139
+ referencedTable: 'users',
1192
2140
  referencedColumns: ['id'],
1193
2141
  onDelete: 'CASCADE',
1194
2142
  },
1195
2143
  {
1196
- table: 'platform_events',
1197
- columns: ['stream_id'],
1198
- referencedTable: 'platform_event_stream_heads',
1199
- referencedColumns: ['stream_id'],
2144
+ table: 'tool_approvals',
2145
+ columns: ['session_id'],
2146
+ referencedTable: 'sessions',
2147
+ referencedColumns: ['id'],
1200
2148
  onDelete: 'CASCADE',
1201
2149
  },
1202
2150
  {
1203
- table: 'user_group_members',
1204
- columns: ['group_id'],
1205
- referencedTable: 'user_groups',
2151
+ table: 'prompts',
2152
+ columns: ['user_id'],
2153
+ referencedTable: 'users',
1206
2154
  referencedColumns: ['id'],
1207
2155
  onDelete: 'CASCADE',
1208
2156
  },
1209
2157
  {
1210
- table: 'user_group_members',
2158
+ table: 'prompt_versions',
2159
+ columns: ['prompt_id'],
2160
+ referencedTable: 'prompts',
2161
+ referencedColumns: ['id'],
2162
+ onDelete: 'CASCADE',
2163
+ },
2164
+ {
2165
+ table: 'skills',
1211
2166
  columns: ['user_id'],
1212
2167
  referencedTable: 'users',
1213
2168
  referencedColumns: ['id'],
1214
2169
  onDelete: 'CASCADE',
1215
2170
  },
1216
2171
  {
1217
- table: 'resource_grants',
1218
- columns: ['owner_user_id'],
2172
+ table: 'skill_versions',
2173
+ columns: ['skill_id'],
2174
+ referencedTable: 'skills',
2175
+ referencedColumns: ['id'],
2176
+ onDelete: 'CASCADE',
2177
+ },
2178
+ {
2179
+ table: 'skill_files',
2180
+ columns: ['skill_id'],
2181
+ referencedTable: 'skills',
2182
+ referencedColumns: ['id'],
2183
+ onDelete: 'CASCADE',
2184
+ },
2185
+ {
2186
+ table: 'note_revisions',
2187
+ columns: ['note_id'],
2188
+ referencedTable: 'notes',
2189
+ referencedColumns: ['id'],
2190
+ onDelete: 'CASCADE',
2191
+ },
2192
+ {
2193
+ table: 'note_attachments',
2194
+ columns: ['note_id'],
2195
+ referencedTable: 'notes',
2196
+ referencedColumns: ['id'],
2197
+ onDelete: 'CASCADE',
2198
+ },
2199
+ {
2200
+ table: 'calendars',
2201
+ columns: ['user_id'],
1219
2202
  referencedTable: 'users',
1220
2203
  referencedColumns: ['id'],
1221
2204
  onDelete: 'CASCADE',
1222
2205
  },
1223
2206
  {
1224
- table: 'auth_sessions',
2207
+ table: 'channel_members',
2208
+ columns: ['channel_id'],
2209
+ referencedTable: 'channels',
2210
+ referencedColumns: ['id'],
2211
+ onDelete: 'CASCADE',
2212
+ },
2213
+ {
2214
+ table: 'channel_members',
1225
2215
  columns: ['user_id'],
1226
2216
  referencedTable: 'users',
1227
2217
  referencedColumns: ['id'],
1228
2218
  onDelete: 'CASCADE',
1229
2219
  },
1230
2220
  {
1231
- table: 'api_tokens',
2221
+ table: 'channel_messages',
2222
+ columns: ['channel_id'],
2223
+ referencedTable: 'channels',
2224
+ referencedColumns: ['id'],
2225
+ onDelete: 'CASCADE',
2226
+ },
2227
+ {
2228
+ table: 'channel_reactions',
2229
+ columns: ['message_id'],
2230
+ referencedTable: 'channel_messages',
2231
+ referencedColumns: ['id'],
2232
+ onDelete: 'CASCADE',
2233
+ },
2234
+ {
2235
+ table: 'channel_attachments',
2236
+ columns: ['message_id'],
2237
+ referencedTable: 'channel_messages',
2238
+ referencedColumns: ['id'],
2239
+ onDelete: 'CASCADE',
2240
+ },
2241
+ {
2242
+ table: 'notifications',
1232
2243
  columns: ['user_id'],
1233
2244
  referencedTable: 'users',
1234
2245
  referencedColumns: ['id'],
1235
2246
  onDelete: 'CASCADE',
1236
2247
  },
1237
2248
  {
1238
- table: 'oauth_identities',
2249
+ table: 'message_feedback',
2250
+ columns: ['user_id'],
2251
+ referencedTable: 'users',
2252
+ referencedColumns: ['id'],
2253
+ onDelete: 'CASCADE',
2254
+ },
2255
+ {
2256
+ table: 'arena_votes',
2257
+ columns: ['user_id'],
2258
+ referencedTable: 'users',
2259
+ referencedColumns: ['id'],
2260
+ onDelete: 'CASCADE',
2261
+ },
2262
+ {
2263
+ table: 'eval_sets',
1239
2264
  columns: ['user_id'],
1240
2265
  referencedTable: 'users',
1241
2266
  referencedColumns: ['id'],
1242
2267
  onDelete: 'CASCADE',
1243
2268
  },
2269
+ {
2270
+ table: 'eval_runs',
2271
+ columns: ['user_id'],
2272
+ referencedTable: 'users',
2273
+ referencedColumns: ['id'],
2274
+ onDelete: 'CASCADE',
2275
+ },
2276
+ {
2277
+ table: 'eval_runs',
2278
+ columns: ['set_id'],
2279
+ referencedTable: 'eval_sets',
2280
+ referencedColumns: ['id'],
2281
+ onDelete: 'CASCADE',
2282
+ },
1244
2283
  ];
1245
2284
  const REQUIRED_INDEXES = [
1246
2285
  {
@@ -1438,6 +2477,151 @@ const REQUIRED_INDEXES = [
1438
2477
  table: 'security_audit_events',
1439
2478
  columns: ['action', 'occurred_at'],
1440
2479
  },
2480
+ {
2481
+ name: 'idx_calendar_events_owner_start',
2482
+ table: 'calendar_events',
2483
+ columns: ['user_id', 'start_at'],
2484
+ },
2485
+ {
2486
+ name: 'idx_automations_owner',
2487
+ table: 'automations',
2488
+ columns: ['user_id', 'updated_at'],
2489
+ },
2490
+ {
2491
+ name: 'idx_automations_due',
2492
+ table: 'automations',
2493
+ columns: ['status', 'next_run_at'],
2494
+ },
2495
+ {
2496
+ name: 'idx_automation_runs_automation',
2497
+ table: 'automation_runs',
2498
+ columns: ['automation_id', 'scheduled_for'],
2499
+ },
2500
+ {
2501
+ name: 'idx_automation_runs_owner_time',
2502
+ table: 'automation_runs',
2503
+ columns: ['user_id', 'scheduled_for'],
2504
+ },
2505
+ {
2506
+ name: 'idx_tool_servers_updated',
2507
+ table: 'tool_servers',
2508
+ columns: ['updated_at'],
2509
+ },
2510
+ {
2511
+ name: 'idx_tool_approvals_owner',
2512
+ table: 'tool_approvals',
2513
+ columns: ['user_id', 'status', 'created_at'],
2514
+ },
2515
+ {
2516
+ name: 'idx_prompts_owner',
2517
+ table: 'prompts',
2518
+ columns: ['user_id', 'updated_at'],
2519
+ },
2520
+ {
2521
+ name: 'idx_skills_owner',
2522
+ table: 'skills',
2523
+ columns: ['user_id', 'updated_at'],
2524
+ },
2525
+ {
2526
+ name: 'idx_skill_files_skill',
2527
+ table: 'skill_files',
2528
+ columns: ['skill_id'],
2529
+ },
2530
+ {
2531
+ name: 'idx_note_revisions_note',
2532
+ table: 'note_revisions',
2533
+ columns: ['note_id', 'created_at'],
2534
+ },
2535
+ {
2536
+ name: 'idx_note_attachments_note',
2537
+ table: 'note_attachments',
2538
+ columns: ['note_id'],
2539
+ },
2540
+ {
2541
+ name: 'idx_calendar_scoped_events',
2542
+ table: 'calendar_events',
2543
+ columns: ['calendar_id'],
2544
+ sqlFragment: 'WHERE calendar_id IS NOT NULL',
2545
+ },
2546
+ {
2547
+ name: 'idx_calendars_owner',
2548
+ table: 'calendars',
2549
+ columns: ['user_id', 'updated_at'],
2550
+ },
2551
+ {
2552
+ name: 'idx_channels_dm_key',
2553
+ table: 'channels',
2554
+ columns: ['dm_key'],
2555
+ unique: true,
2556
+ sqlFragment: 'WHERE dm_key IS NOT NULL',
2557
+ },
2558
+ {
2559
+ name: 'idx_channel_members_user',
2560
+ table: 'channel_members',
2561
+ columns: ['user_id'],
2562
+ },
2563
+ {
2564
+ name: 'idx_channel_messages_timeline',
2565
+ table: 'channel_messages',
2566
+ columns: ['channel_id', 'created_at', 'id'],
2567
+ },
2568
+ {
2569
+ name: 'idx_channel_messages_thread',
2570
+ table: 'channel_messages',
2571
+ columns: ['parent_id'],
2572
+ },
2573
+ {
2574
+ name: 'idx_channel_attachments_message',
2575
+ table: 'channel_attachments',
2576
+ columns: ['message_id'],
2577
+ },
2578
+ {
2579
+ name: 'idx_notifications_user',
2580
+ table: 'notifications',
2581
+ columns: ['user_id', 'created_at'],
2582
+ },
2583
+ {
2584
+ name: 'idx_notifications_dedupe',
2585
+ table: 'notifications',
2586
+ columns: ['user_id', 'source_key'],
2587
+ unique: true,
2588
+ sqlFragment: 'WHERE source_key IS NOT NULL',
2589
+ },
2590
+ {
2591
+ name: 'idx_model_tariffs_lookup',
2592
+ table: 'model_tariffs',
2593
+ columns: ['plugin_id', 'model', 'effective_from'],
2594
+ },
2595
+ {
2596
+ name: 'idx_usage_budgets_principal',
2597
+ table: 'usage_budgets',
2598
+ columns: ['principal_type', 'principal_id'],
2599
+ },
2600
+ {
2601
+ name: 'idx_message_feedback_owner',
2602
+ table: 'message_feedback',
2603
+ columns: ['user_id', 'created_at'],
2604
+ },
2605
+ {
2606
+ name: 'idx_arena_votes_order',
2607
+ table: 'arena_votes',
2608
+ columns: ['created_at', 'id'],
2609
+ },
2610
+ {
2611
+ name: 'idx_eval_sets_owner',
2612
+ table: 'eval_sets',
2613
+ columns: ['user_id', 'updated_at'],
2614
+ },
2615
+ {
2616
+ name: 'idx_eval_runs_owner',
2617
+ table: 'eval_runs',
2618
+ columns: ['user_id', 'created_at'],
2619
+ },
2620
+ {
2621
+ name: 'idx_eval_runs_parent',
2622
+ table: 'eval_runs',
2623
+ columns: ['set_id'],
2624
+ },
1441
2625
  ];
1442
2626
  const REQUIRED_TABLE_SQL_FRAGMENTS = {
1443
2627
  platform_vector_entries: ['CHECK(dimensions > 0)'],
@@ -1474,6 +2658,33 @@ const REQUIRED_TABLE_SQL_FRAGMENTS = {
1474
2658
  "permission IN ('read', 'write', 'admin')",
1475
2659
  ],
1476
2660
  security_audit_events: ["result IN ('success', 'denied', 'failure')"],
2661
+ tool_servers: [
2662
+ "kind IN ('openapi', 'mcp')",
2663
+ "auth_mode IN ('none', 'bearer', 'header')",
2664
+ "access_mode IN ('admins-only', 'all-users', 'granted')",
2665
+ ],
2666
+ tool_approvals: [
2667
+ "scope IN ('once', 'session', 'always')",
2668
+ "status IN ('pending', 'approved', 'denied', 'expired')",
2669
+ ],
2670
+ channels: ["type IN ('public', 'private', 'dm')"],
2671
+ channel_members: ["role IN ('owner', 'member')"],
2672
+ channel_messages: ["author_kind IN ('user', 'model')"],
2673
+ channel_reactions: ['UNIQUE (message_id, user_id, emoji)'],
2674
+ webhook_targets: ['enabled IN (0, 1)'],
2675
+ usage_budgets: [
2676
+ "principal_type IN ('instance', 'user', 'group')",
2677
+ "period IN ('daily', 'weekly', 'monthly')",
2678
+ "mode IN ('observe', 'soft', 'hard')",
2679
+ ],
2680
+ message_feedback: ['rating IN (-1, 1)', 'UNIQUE (user_id, message_id)'],
2681
+ arena_votes: [
2682
+ "winner IN ('a', 'b', 'tie', 'both-bad')",
2683
+ 'UNIQUE (user_id, compare_group)',
2684
+ ],
2685
+ eval_runs: [
2686
+ "status IN ('queued', 'running', 'completed', 'failed', 'cancelled')",
2687
+ ],
1477
2688
  };
1478
2689
  const quoteIdentifier = (identifier) => `"${identifier.replace(/"/g, '""')}"`;
1479
2690
  const normalizeSql = (sql) => sql
@@ -1694,6 +2905,11 @@ const collectMissingSchema = (database) => [
1694
2905
  ...collectMissingDurableEventIdempotencySchema(database),
1695
2906
  ...collectMissingResourceDeletionLifecycleSchema(database),
1696
2907
  ...collectMissingTrustFoundationSchema(database),
2908
+ ...collectMissingPersonalAutomationsSchema(database),
2909
+ ...collectMissingAgentFoundationSchema(database),
2910
+ ...collectMissingSkillFilesSchema(database),
2911
+ ...collectMissingNotesV2Schema(database),
2912
+ ...collectMissingTeamCollaborationSchema(database),
1697
2913
  ];
1698
2914
  const collectMissingMigrationLedgerSchema = (database) => [
1699
2915
  ...collectMissingColumns(database, {
@@ -1705,7 +2921,8 @@ const collectMissingLegacySchema = (database) => [
1705
2921
  ...collectMissingColumns(database, LEGACY_REQUIRED_SCHEMA),
1706
2922
  ...collectMissingStructuralInvariants(database).filter(item => !item.includes('platform_') &&
1707
2923
  !item.includes('idx_users_email_lookup') &&
1708
- !item.includes('idx_voice_profiles_name_lookup')),
2924
+ !item.includes('idx_voice_profiles_name_lookup') &&
2925
+ !item.includes('idx_calendar_scoped_events')),
1709
2926
  ];
1710
2927
  const collectMissingIdentityEmailLookupSchema = (database) => [
1711
2928
  ...collectMissingColumns(database, IDENTITY_EMAIL_LOOKUP_REQUIRED_SCHEMA),
@@ -1754,6 +2971,44 @@ const collectMissingTrustFoundationSchema = (database) => [
1754
2971
  item.includes('oauth_identities') ||
1755
2972
  item.includes('security_audit')),
1756
2973
  ];
2974
+ const collectMissingPersonalAutomationsSchema = (database) => [
2975
+ ...collectMissingColumns(database, PERSONAL_AUTOMATIONS_REQUIRED_SCHEMA),
2976
+ ...collectMissingStructuralInvariants(database).filter(item => item.includes('calendar_events') ||
2977
+ item.includes('automations') ||
2978
+ item.includes('automation_runs')),
2979
+ ];
2980
+ const collectMissingAgentFoundationSchema = (database) => [
2981
+ ...collectMissingColumns(database, AGENT_FOUNDATION_REQUIRED_SCHEMA),
2982
+ ...collectMissingStructuralInvariants(database).filter(item => item.includes('tool_server') ||
2983
+ item.includes('tool_approvals') ||
2984
+ item.includes('prompt') ||
2985
+ item.includes('skill')),
2986
+ ];
2987
+ const collectMissingSkillFilesSchema = (database) => [
2988
+ ...collectMissingColumns(database, SKILL_FILES_REQUIRED_SCHEMA),
2989
+ ...collectMissingStructuralInvariants(database).filter(item => item.includes('skill_files')),
2990
+ ];
2991
+ const collectMissingNotesV2Schema = (database) => [
2992
+ ...collectMissingColumns(database, NOTES_V2_REQUIRED_SCHEMA),
2993
+ ...collectMissingStructuralInvariants(database).filter(item => item.includes('note_revisions') || item.includes('note_attachments')),
2994
+ ];
2995
+ const collectMissingTeamCollaborationSchema = (database) => [
2996
+ ...collectMissingColumns(database, TEAM_COLLABORATION_REQUIRED_SCHEMA),
2997
+ ...collectMissingStructuralInvariants(database).filter(item => item.includes('channel') ||
2998
+ item.includes('notifications') ||
2999
+ item.includes('webhook_targets') ||
3000
+ item.includes('calendars') ||
3001
+ item.includes('idx_calendar_scoped_events')),
3002
+ ];
3003
+ const collectMissingMediaEnterpriseOpsSchema = (database) => [
3004
+ ...collectMissingColumns(database, MEDIA_ENTERPRISE_OPS_REQUIRED_SCHEMA),
3005
+ ...collectMissingStructuralInvariants(database).filter(item => item.includes('model_tariffs') ||
3006
+ item.includes('usage_budgets') ||
3007
+ item.includes('message_feedback') ||
3008
+ item.includes('arena_votes') ||
3009
+ item.includes('eval_sets') ||
3010
+ item.includes('eval_runs')),
3011
+ ];
1757
3012
  const collectMissingIdentityAccountRetirementSchema = (database) => {
1758
3013
  const row = database
1759
3014
  .prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'users'")
@@ -1791,6 +3046,12 @@ function collectMissingSchemaAtVersion(database, version) {
1791
3046
  ? collectMissingDurableEventReplayIndexSchema(database)
1792
3047
  : []),
1793
3048
  ...(version >= 14 ? collectMissingTrustFoundationSchema(database) : []),
3049
+ ...(version >= 15 ? collectMissingPersonalAutomationsSchema(database) : []),
3050
+ ...(version >= 16 ? collectMissingAgentFoundationSchema(database) : []),
3051
+ ...(version >= 17 ? collectMissingSkillFilesSchema(database) : []),
3052
+ ...(version >= 18 ? collectMissingNotesV2Schema(database) : []),
3053
+ ...(version >= 19 ? collectMissingTeamCollaborationSchema(database) : []),
3054
+ ...(version >= 20 ? collectMissingMediaEnterpriseOpsSchema(database) : []),
1794
3055
  ];
1795
3056
  }
1796
3057
  const collectMissingLegacyBootstrapSchema = (database) => {
@@ -1840,6 +3101,12 @@ const RESOURCE_DELETION_LIFECYCLE_MIGRATION_CHECKSUM = 'a72e862afe109daf68b7ec8e
1840
3101
  const DURABLE_EVENT_REPLAY_INDEX_MIGRATION_CHECKSUM = '7d6b769ceadd08791c77ac5c5a1d7bd61a63d87cac87da56ae847c4067cacdad';
1841
3102
  const TRUST_FOUNDATION_MIGRATION_CHECKSUM = 'c5a73245de3cd3e37db8877c8457c975d789f98c1c71ae1e4fc891ba09e8de5a';
1842
3103
  const LEGACY_DURABLE_EVENT_REPLAY_INDEX_MIGRATION_CHECKSUM = 'DURABLE_EVENT_REPLAY_INDEX_CHECKSUM_TO_FREEZE';
3104
+ const PERSONAL_AUTOMATIONS_MIGRATION_CHECKSUM = '5bfb4a1789480a3cacc09c5a4359a4e77b82b0edafa80f6d78cde73e57ddc70b';
3105
+ const AGENT_FOUNDATION_MIGRATION_CHECKSUM = '7e3a346fae66c073aac800aa45847999a4300b2f17eb3eaf9ed6351e891e2941';
3106
+ const SKILL_FILES_MIGRATION_CHECKSUM = '584e1f9bca79eb5974f997088636d74d7f2c1e5fd816fcd0f6cf74ec30aea161';
3107
+ const NOTES_V2_MIGRATION_CHECKSUM = '05a6758ab2b2a54f9097a5d5604a2bd57e085f1dd16816b5dc96d1eb7a41a399';
3108
+ const TEAM_COLLABORATION_MIGRATION_CHECKSUM = '1cf021c941cfd9207a82e794e58d7553ae24a35b3f8f8a84bb4a0e06d0d77443';
3109
+ const MEDIA_ENTERPRISE_OPS_MIGRATION_CHECKSUM = 'c6bc6d98518f7a279ad7109cfdfcd8a75fbf7e3e157c50bca98142b50ac0f38b';
1843
3110
  const MIGRATIONS = [
1844
3111
  {
1845
3112
  version: 1,
@@ -2050,6 +3317,87 @@ const MIGRATIONS = [
2050
3317
  }
2051
3318
  },
2052
3319
  },
3320
+ {
3321
+ version: 15,
3322
+ name: 'personal-automations',
3323
+ checksum: PERSONAL_AUTOMATIONS_MIGRATION_CHECKSUM,
3324
+ apply(database) {
3325
+ database.exec(PERSONAL_AUTOMATIONS_SCHEMA_SQL);
3326
+ const missing = collectMissingPersonalAutomationsSchema(database);
3327
+ if (missing.length > 0) {
3328
+ throw new Error(`SQLite personal automations schema is incomplete; missing ${missing.join(', ')}`);
3329
+ }
3330
+ },
3331
+ },
3332
+ {
3333
+ version: 16,
3334
+ name: 'agent-foundation',
3335
+ checksum: AGENT_FOUNDATION_MIGRATION_CHECKSUM,
3336
+ apply(database) {
3337
+ addColumnIfMissing(database, 'personas', 'bindings', 'TEXT');
3338
+ database.exec(AGENT_FOUNDATION_TABLES_SQL);
3339
+ const missing = collectMissingAgentFoundationSchema(database);
3340
+ if (missing.length > 0) {
3341
+ throw new Error(`SQLite agent foundation schema is incomplete; missing ${missing.join(', ')}`);
3342
+ }
3343
+ },
3344
+ },
3345
+ {
3346
+ version: 17,
3347
+ name: 'skill-files',
3348
+ checksum: SKILL_FILES_MIGRATION_CHECKSUM,
3349
+ apply(database) {
3350
+ database.exec(SKILL_FILES_SCHEMA_SQL);
3351
+ const missing = collectMissingSkillFilesSchema(database);
3352
+ if (missing.length > 0) {
3353
+ throw new Error(`SQLite skill files schema is incomplete; missing ${missing.join(', ')}`);
3354
+ }
3355
+ },
3356
+ },
3357
+ {
3358
+ version: 18,
3359
+ name: 'notes-v2',
3360
+ checksum: NOTES_V2_MIGRATION_CHECKSUM,
3361
+ apply(database) {
3362
+ addColumnIfMissing(database, 'notes', 'pinned', 'INTEGER DEFAULT 0');
3363
+ database.exec(NOTES_V2_TABLES_SQL);
3364
+ const missing = collectMissingNotesV2Schema(database);
3365
+ if (missing.length > 0) {
3366
+ throw new Error(`SQLite notes v2 schema is incomplete; missing ${missing.join(', ')}`);
3367
+ }
3368
+ },
3369
+ },
3370
+ {
3371
+ version: 19,
3372
+ name: 'team-collaboration',
3373
+ checksum: TEAM_COLLABORATION_MIGRATION_CHECKSUM,
3374
+ apply(database) {
3375
+ addColumnIfMissing(database, 'calendar_events', 'calendar_id', 'TEXT');
3376
+ addColumnIfMissing(database, 'calendar_events', 'reminder_minutes', 'INTEGER');
3377
+ addColumnIfMissing(database, 'calendar_events', 'last_reminded_occurrence', 'INTEGER');
3378
+ database.exec(TEAM_COLLABORATION_TABLES_SQL);
3379
+ const missing = collectMissingTeamCollaborationSchema(database);
3380
+ if (missing.length > 0) {
3381
+ throw new Error(`SQLite team collaboration schema is incomplete; missing ${missing.join(', ')}`);
3382
+ }
3383
+ },
3384
+ },
3385
+ {
3386
+ version: 20,
3387
+ name: 'media-enterprise-ops',
3388
+ checksum: MEDIA_ENTERPRISE_OPS_MIGRATION_CHECKSUM,
3389
+ apply(database) {
3390
+ addColumnIfMissing(database, 'voice_profiles', 'consent_expires_at', 'INTEGER');
3391
+ addColumnIfMissing(database, 'voice_profiles', 'revoked_at', 'INTEGER');
3392
+ addColumnIfMissing(database, 'voice_profiles', 'transfer_count', 'INTEGER NOT NULL DEFAULT 0');
3393
+ addColumnIfMissing(database, 'voice_profiles', 'last_transfer_at', 'INTEGER');
3394
+ database.exec(MEDIA_ENTERPRISE_OPS_TABLES_SQL);
3395
+ const missing = collectMissingMediaEnterpriseOpsSchema(database);
3396
+ if (missing.length > 0) {
3397
+ throw new Error(`SQLite media enterprise ops schema is incomplete; missing ${missing.join(', ')}`);
3398
+ }
3399
+ },
3400
+ },
2053
3401
  ];
2054
3402
  /**
2055
3403
  * Whether a pending migration needs foreign-key enforcement suspended before