libre-webui 0.25.0 → 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 (510) hide show
  1. package/README.md +32 -22
  2. package/backend/dist/index.d.ts.map +1 -1
  3. package/backend/dist/index.js +26 -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 +10 -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/postgresResourceRepositories.d.ts.map +1 -1
  51. package/backend/dist/persistence/postgresResourceRepositories.js +1646 -11
  52. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  53. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts +9 -0
  54. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts.map +1 -0
  55. package/backend/dist/persistence/postgresSkillFilesMigration.js +50 -0
  56. package/backend/dist/persistence/postgresSkillFilesMigration.js.map +1 -0
  57. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts +10 -0
  58. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts.map +1 -0
  59. package/backend/dist/persistence/postgresTeamCollaborationMigration.js +161 -0
  60. package/backend/dist/persistence/postgresTeamCollaborationMigration.js.map +1 -0
  61. package/backend/dist/persistence/resourceTypes.d.ts +541 -3
  62. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
  63. package/backend/dist/persistence/resourceTypes.js.map +1 -1
  64. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  65. package/backend/dist/persistence/sqliteExtensionRepositories.js +26 -4
  66. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  67. package/backend/dist/persistence/sqliteMigrations.d.ts +9 -0
  68. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
  69. package/backend/dist/persistence/sqliteMigrations.js +1196 -29
  70. package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
  71. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
  72. package/backend/dist/persistence/sqliteResourceRepositories.js +1523 -134
  73. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  74. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
  75. package/backend/dist/persistence/sqliteToPostgresMigration.js +257 -3
  76. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
  77. package/backend/dist/platform/jobs/domainJobContracts.d.ts +8 -0
  78. package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -1
  79. package/backend/dist/platform/jobs/domainJobContracts.js +8 -0
  80. package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -1
  81. package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
  82. package/backend/dist/platform/jobs/domainJobHandlers.js +310 -3
  83. package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
  84. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -1
  85. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +4 -2
  86. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -1
  87. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -1
  88. package/backend/dist/platform/jobs/postgresDurableJobWorker.js +4 -2
  89. package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -1
  90. package/backend/dist/platform/storage/pgVectorStore.d.ts +2 -1
  91. package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -1
  92. package/backend/dist/platform/storage/pgVectorStore.js +51 -0
  93. package/backend/dist/platform/storage/pgVectorStore.js.map +1 -1
  94. package/backend/dist/platform/storage/platformDomainRepositories.d.ts +8 -2
  95. package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -1
  96. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -1
  97. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +25 -4
  98. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -1
  99. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +2 -1
  100. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -1
  101. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +35 -0
  102. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -1
  103. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -1
  104. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +26 -3
  105. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -1
  106. package/backend/dist/platform/storage/vectorStore.d.ts +14 -0
  107. package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -1
  108. package/backend/dist/platform/storage/vectorStore.js.map +1 -1
  109. package/backend/dist/routes/access.d.ts.map +1 -1
  110. package/backend/dist/routes/access.js +84 -3
  111. package/backend/dist/routes/access.js.map +1 -1
  112. package/backend/dist/routes/calendar.d.ts.map +1 -1
  113. package/backend/dist/routes/calendar.js +125 -22
  114. package/backend/dist/routes/calendar.js.map +1 -1
  115. package/backend/dist/routes/channels.d.ts +3 -0
  116. package/backend/dist/routes/channels.d.ts.map +1 -0
  117. package/backend/dist/routes/channels.js +447 -0
  118. package/backend/dist/routes/channels.js.map +1 -0
  119. package/backend/dist/routes/chat.d.ts.map +1 -1
  120. package/backend/dist/routes/chat.js +195 -7
  121. package/backend/dist/routes/chat.js.map +1 -1
  122. package/backend/dist/routes/costs.d.ts +3 -0
  123. package/backend/dist/routes/costs.d.ts.map +1 -0
  124. package/backend/dist/routes/costs.js +191 -0
  125. package/backend/dist/routes/costs.js.map +1 -0
  126. package/backend/dist/routes/documents.d.ts.map +1 -1
  127. package/backend/dist/routes/documents.js +64 -21
  128. package/backend/dist/routes/documents.js.map +1 -1
  129. package/backend/dist/routes/evaluations.d.ts +3 -0
  130. package/backend/dist/routes/evaluations.d.ts.map +1 -0
  131. package/backend/dist/routes/evaluations.js +352 -0
  132. package/backend/dist/routes/evaluations.js.map +1 -0
  133. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  134. package/backend/dist/routes/imageGen.js +2 -1
  135. package/backend/dist/routes/imageGen.js.map +1 -1
  136. package/backend/dist/routes/media.d.ts.map +1 -1
  137. package/backend/dist/routes/media.js +228 -7
  138. package/backend/dist/routes/media.js.map +1 -1
  139. package/backend/dist/routes/notes.d.ts.map +1 -1
  140. package/backend/dist/routes/notes.js +149 -36
  141. package/backend/dist/routes/notes.js.map +1 -1
  142. package/backend/dist/routes/notifications.d.ts +3 -0
  143. package/backend/dist/routes/notifications.d.ts.map +1 -0
  144. package/backend/dist/routes/notifications.js +213 -0
  145. package/backend/dist/routes/notifications.js.map +1 -0
  146. package/backend/dist/routes/openaiCompat.d.ts +3 -0
  147. package/backend/dist/routes/openaiCompat.d.ts.map +1 -0
  148. package/backend/dist/routes/openaiCompat.js +314 -0
  149. package/backend/dist/routes/openaiCompat.js.map +1 -0
  150. package/backend/dist/routes/personas.js +1 -1
  151. package/backend/dist/routes/personas.js.map +1 -1
  152. package/backend/dist/routes/prompts.d.ts +3 -0
  153. package/backend/dist/routes/prompts.d.ts.map +1 -0
  154. package/backend/dist/routes/prompts.js +173 -0
  155. package/backend/dist/routes/prompts.js.map +1 -0
  156. package/backend/dist/routes/search.d.ts.map +1 -1
  157. package/backend/dist/routes/search.js +29 -1
  158. package/backend/dist/routes/search.js.map +1 -1
  159. package/backend/dist/routes/skills.d.ts +3 -0
  160. package/backend/dist/routes/skills.d.ts.map +1 -0
  161. package/backend/dist/routes/skills.js +246 -0
  162. package/backend/dist/routes/skills.js.map +1 -0
  163. package/backend/dist/routes/stt.d.ts.map +1 -1
  164. package/backend/dist/routes/stt.js +2 -1
  165. package/backend/dist/routes/stt.js.map +1 -1
  166. package/backend/dist/routes/tools.d.ts +3 -0
  167. package/backend/dist/routes/tools.d.ts.map +1 -0
  168. package/backend/dist/routes/tools.js +359 -0
  169. package/backend/dist/routes/tools.js.map +1 -0
  170. package/backend/dist/routes/tts.d.ts.map +1 -1
  171. package/backend/dist/routes/tts.js +63 -8
  172. package/backend/dist/routes/tts.js.map +1 -1
  173. package/backend/dist/routes/voiceAccess.d.ts +3 -0
  174. package/backend/dist/routes/voiceAccess.d.ts.map +1 -0
  175. package/backend/dist/routes/voiceAccess.js +102 -0
  176. package/backend/dist/routes/voiceAccess.js.map +1 -0
  177. package/backend/dist/services/apiTokenService.d.ts +2 -2
  178. package/backend/dist/services/apiTokenService.d.ts.map +1 -1
  179. package/backend/dist/services/apiTokenService.js +7 -0
  180. package/backend/dist/services/apiTokenService.js.map +1 -1
  181. package/backend/dist/services/authorizationService.d.ts +8 -4
  182. package/backend/dist/services/authorizationService.d.ts.map +1 -1
  183. package/backend/dist/services/authorizationService.js +31 -1
  184. package/backend/dist/services/authorizationService.js.map +1 -1
  185. package/backend/dist/services/automationSchedulerService.d.ts.map +1 -1
  186. package/backend/dist/services/automationSchedulerService.js +33 -3
  187. package/backend/dist/services/automationSchedulerService.js.map +1 -1
  188. package/backend/dist/services/automationService.d.ts +4 -1
  189. package/backend/dist/services/automationService.d.ts.map +1 -1
  190. package/backend/dist/services/automationService.js +25 -2
  191. package/backend/dist/services/automationService.js.map +1 -1
  192. package/backend/dist/services/builtinToolsService.d.ts +20 -0
  193. package/backend/dist/services/builtinToolsService.d.ts.map +1 -0
  194. package/backend/dist/services/builtinToolsService.js +661 -0
  195. package/backend/dist/services/builtinToolsService.js.map +1 -0
  196. package/backend/dist/services/calendarService.d.ts +74 -0
  197. package/backend/dist/services/calendarService.d.ts.map +1 -0
  198. package/backend/dist/services/calendarService.js +339 -0
  199. package/backend/dist/services/calendarService.js.map +1 -0
  200. package/backend/dist/services/channelService.d.ts +195 -0
  201. package/backend/dist/services/channelService.d.ts.map +1 -0
  202. package/backend/dist/services/channelService.js +1057 -0
  203. package/backend/dist/services/channelService.js.map +1 -0
  204. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  205. package/backend/dist/services/chatRequestService.js +29 -1
  206. package/backend/dist/services/chatRequestService.js.map +1 -1
  207. package/backend/dist/services/chatService.d.ts +61 -1
  208. package/backend/dist/services/chatService.d.ts.map +1 -1
  209. package/backend/dist/services/chatService.js +218 -1
  210. package/backend/dist/services/chatService.js.map +1 -1
  211. package/backend/dist/services/chatToolRuntimeService.d.ts +55 -0
  212. package/backend/dist/services/chatToolRuntimeService.d.ts.map +1 -0
  213. package/backend/dist/services/chatToolRuntimeService.js +389 -0
  214. package/backend/dist/services/chatToolRuntimeService.js.map +1 -0
  215. package/backend/dist/services/costGovernanceService.d.ts +102 -0
  216. package/backend/dist/services/costGovernanceService.d.ts.map +1 -0
  217. package/backend/dist/services/costGovernanceService.js +463 -0
  218. package/backend/dist/services/costGovernanceService.js.map +1 -0
  219. package/backend/dist/services/dataArchiveService.d.ts +6 -0
  220. package/backend/dist/services/dataArchiveService.d.ts.map +1 -1
  221. package/backend/dist/services/dataArchiveService.js +23 -4
  222. package/backend/dist/services/dataArchiveService.js.map +1 -1
  223. package/backend/dist/services/documentService.d.ts +58 -1
  224. package/backend/dist/services/documentService.d.ts.map +1 -1
  225. package/backend/dist/services/documentService.js +289 -84
  226. package/backend/dist/services/documentService.js.map +1 -1
  227. package/backend/dist/services/durableChatGenerationService.d.ts +9 -0
  228. package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -1
  229. package/backend/dist/services/durableChatGenerationService.js +152 -11
  230. package/backend/dist/services/durableChatGenerationService.js.map +1 -1
  231. package/backend/dist/services/evaluationService.d.ts +111 -0
  232. package/backend/dist/services/evaluationService.d.ts.map +1 -0
  233. package/backend/dist/services/evaluationService.js +403 -0
  234. package/backend/dist/services/evaluationService.js.map +1 -0
  235. package/backend/dist/services/galleryService.d.ts +6 -0
  236. package/backend/dist/services/galleryService.d.ts.map +1 -1
  237. package/backend/dist/services/galleryService.js +26 -0
  238. package/backend/dist/services/galleryService.js.map +1 -1
  239. package/backend/dist/services/mcpClientService.d.ts +29 -0
  240. package/backend/dist/services/mcpClientService.d.ts.map +1 -0
  241. package/backend/dist/services/mcpClientService.js +189 -0
  242. package/backend/dist/services/mcpClientService.js.map +1 -0
  243. package/backend/dist/services/noteService.d.ts +71 -0
  244. package/backend/dist/services/noteService.d.ts.map +1 -0
  245. package/backend/dist/services/noteService.js +397 -0
  246. package/backend/dist/services/noteService.js.map +1 -0
  247. package/backend/dist/services/notificationService.d.ts +55 -0
  248. package/backend/dist/services/notificationService.d.ts.map +1 -0
  249. package/backend/dist/services/notificationService.js +308 -0
  250. package/backend/dist/services/notificationService.js.map +1 -0
  251. package/backend/dist/services/openApiToolService.d.ts +38 -0
  252. package/backend/dist/services/openApiToolService.d.ts.map +1 -0
  253. package/backend/dist/services/openApiToolService.js +254 -0
  254. package/backend/dist/services/openApiToolService.js.map +1 -0
  255. package/backend/dist/services/personaService.d.ts +18 -2
  256. package/backend/dist/services/personaService.d.ts.map +1 -1
  257. package/backend/dist/services/personaService.js +113 -4
  258. package/backend/dist/services/personaService.js.map +1 -1
  259. package/backend/dist/services/pluginImageGenerationService.d.ts +19 -0
  260. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  261. package/backend/dist/services/pluginImageGenerationService.js +121 -0
  262. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  263. package/backend/dist/services/pluginService.d.ts +7 -0
  264. package/backend/dist/services/pluginService.d.ts.map +1 -1
  265. package/backend/dist/services/pluginService.js +8 -2
  266. package/backend/dist/services/pluginService.js.map +1 -1
  267. package/backend/dist/services/promptService.d.ts +74 -0
  268. package/backend/dist/services/promptService.d.ts.map +1 -0
  269. package/backend/dist/services/promptService.js +513 -0
  270. package/backend/dist/services/promptService.js.map +1 -0
  271. package/backend/dist/services/resourceGrantService.d.ts.map +1 -1
  272. package/backend/dist/services/resourceGrantService.js +62 -17
  273. package/backend/dist/services/resourceGrantService.js.map +1 -1
  274. package/backend/dist/services/searchService.d.ts +29 -0
  275. package/backend/dist/services/searchService.d.ts.map +1 -0
  276. package/backend/dist/services/searchService.js +0 -0
  277. package/backend/dist/services/searchService.js.map +1 -0
  278. package/backend/dist/services/securityAuditService.d.ts.map +1 -1
  279. package/backend/dist/services/securityAuditService.js +2 -1
  280. package/backend/dist/services/securityAuditService.js.map +1 -1
  281. package/backend/dist/services/sharedResourceAccess.d.ts +25 -0
  282. package/backend/dist/services/sharedResourceAccess.d.ts.map +1 -0
  283. package/backend/dist/services/sharedResourceAccess.js +59 -0
  284. package/backend/dist/services/sharedResourceAccess.js.map +1 -0
  285. package/backend/dist/services/skillService.d.ts +137 -0
  286. package/backend/dist/services/skillService.d.ts.map +1 -0
  287. package/backend/dist/services/skillService.js +852 -0
  288. package/backend/dist/services/skillService.js.map +1 -0
  289. package/backend/dist/services/toolAccessService.d.ts +9 -0
  290. package/backend/dist/services/toolAccessService.d.ts.map +1 -0
  291. package/backend/dist/services/toolAccessService.js +60 -0
  292. package/backend/dist/services/toolAccessService.js.map +1 -0
  293. package/backend/dist/services/toolApprovalService.d.ts +34 -0
  294. package/backend/dist/services/toolApprovalService.d.ts.map +1 -0
  295. package/backend/dist/services/toolApprovalService.js +188 -0
  296. package/backend/dist/services/toolApprovalService.js.map +1 -0
  297. package/backend/dist/services/toolGatewayService.d.ts +53 -0
  298. package/backend/dist/services/toolGatewayService.d.ts.map +1 -0
  299. package/backend/dist/services/toolGatewayService.js +249 -0
  300. package/backend/dist/services/toolGatewayService.js.map +1 -0
  301. package/backend/dist/services/toolServerService.d.ts +57 -0
  302. package/backend/dist/services/toolServerService.d.ts.map +1 -0
  303. package/backend/dist/services/toolServerService.js +521 -0
  304. package/backend/dist/services/toolServerService.js.map +1 -0
  305. package/backend/dist/services/voiceAccessService.d.ts +10 -0
  306. package/backend/dist/services/voiceAccessService.d.ts.map +1 -0
  307. package/backend/dist/services/voiceAccessService.js +74 -0
  308. package/backend/dist/services/voiceAccessService.js.map +1 -0
  309. package/backend/dist/services/voiceProfileService.d.ts +20 -0
  310. package/backend/dist/services/voiceProfileService.d.ts.map +1 -1
  311. package/backend/dist/services/voiceProfileService.js +60 -0
  312. package/backend/dist/services/voiceProfileService.js.map +1 -1
  313. package/backend/dist/storage.d.ts +28 -1
  314. package/backend/dist/storage.d.ts.map +1 -1
  315. package/backend/dist/storage.js +100 -1
  316. package/backend/dist/storage.js.map +1 -1
  317. package/backend/dist/storageMappers.d.ts +2 -2
  318. package/backend/dist/storageMappers.d.ts.map +1 -1
  319. package/backend/dist/storageMappers.js.map +1 -1
  320. package/backend/dist/types/index.d.ts +197 -2
  321. package/backend/dist/types/index.d.ts.map +1 -1
  322. package/backend/dist/types/index.js.map +1 -1
  323. package/backend/dist/types/tools.d.ts +137 -0
  324. package/backend/dist/types/tools.d.ts.map +1 -0
  325. package/backend/dist/types/tools.js +25 -0
  326. package/backend/dist/types/tools.js.map +1 -0
  327. package/backend/dist/utils/chatDocumentContext.d.ts +26 -1
  328. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  329. package/backend/dist/utils/chatDocumentContext.js +87 -18
  330. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  331. package/backend/dist/utils/documentExtraction.d.ts +69 -0
  332. package/backend/dist/utils/documentExtraction.d.ts.map +1 -0
  333. package/backend/dist/utils/documentExtraction.js +545 -0
  334. package/backend/dist/utils/documentExtraction.js.map +1 -0
  335. package/backend/dist/utils/hybridRetrieval.d.ts +34 -0
  336. package/backend/dist/utils/hybridRetrieval.d.ts.map +1 -0
  337. package/backend/dist/utils/hybridRetrieval.js +119 -0
  338. package/backend/dist/utils/hybridRetrieval.js.map +1 -0
  339. package/backend/dist/utils/icsCalendar.d.ts +27 -0
  340. package/backend/dist/utils/icsCalendar.d.ts.map +1 -0
  341. package/backend/dist/utils/icsCalendar.js +313 -0
  342. package/backend/dist/utils/icsCalendar.js.map +1 -0
  343. package/backend/dist/utils/imageEditUpload.d.ts +29 -0
  344. package/backend/dist/utils/imageEditUpload.d.ts.map +1 -0
  345. package/backend/dist/utils/imageEditUpload.js +82 -0
  346. package/backend/dist/utils/imageEditUpload.js.map +1 -0
  347. package/backend/dist/utils/logRedaction.d.ts +2 -0
  348. package/backend/dist/utils/logRedaction.d.ts.map +1 -0
  349. package/backend/dist/utils/logRedaction.js +66 -0
  350. package/backend/dist/utils/logRedaction.js.map +1 -0
  351. package/backend/dist/utils/logger.d.ts +3 -0
  352. package/backend/dist/utils/logger.d.ts.map +1 -1
  353. package/backend/dist/utils/logger.js +63 -20
  354. package/backend/dist/utils/logger.js.map +1 -1
  355. package/backend/dist/utils/pluginChatAdapter.d.ts +5 -1
  356. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  357. package/backend/dist/utils/pluginChatAdapter.js +83 -0
  358. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  359. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  360. package/backend/dist/utils/resourceLimits.d.ts +61 -2
  361. package/backend/dist/utils/resourceLimits.d.ts.map +1 -1
  362. package/backend/dist/utils/resourceLimits.js +59 -0
  363. package/backend/dist/utils/resourceLimits.js.map +1 -1
  364. package/backend/dist/utils/toolEgress.d.ts +22 -0
  365. package/backend/dist/utils/toolEgress.d.ts.map +1 -0
  366. package/backend/dist/utils/toolEgress.js +157 -0
  367. package/backend/dist/utils/toolEgress.js.map +1 -0
  368. package/backend/dist/utils/websocketMessages.d.ts +6 -0
  369. package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
  370. package/backend/dist/utils/websocketMessages.js +8 -0
  371. package/backend/dist/utils/websocketMessages.js.map +1 -1
  372. package/backend/dist/utils/zipArchive.d.ts +32 -0
  373. package/backend/dist/utils/zipArchive.d.ts.map +1 -0
  374. package/backend/dist/utils/zipArchive.js +171 -0
  375. package/backend/dist/utils/zipArchive.js.map +1 -0
  376. package/backend/dist/websocketServer.d.ts.map +1 -1
  377. package/backend/dist/websocketServer.js +142 -35
  378. package/backend/dist/websocketServer.js.map +1 -1
  379. package/backend/package.json +1 -1
  380. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  381. package/frontend/dist/assets/index-BPsH9FII.js +80 -0
  382. package/frontend/dist/assets/index-BtXF0Oxa.css +1 -0
  383. package/frontend/dist/index.html +18 -18
  384. package/frontend/dist/js/{ArtifactContainer-CpUi6ekF.js → ArtifactContainer-CIoFoMv8.js} +1 -1
  385. package/frontend/dist/js/{ArtifactDemoPage-BeNs3gHp.js → ArtifactDemoPage-D0JEIAbZ.js} +1 -1
  386. package/frontend/dist/js/{ArtifactSandboxFrame-qsj_Y3LV.js → ArtifactSandboxFrame-REazyIrx.js} +2 -2
  387. package/frontend/dist/js/ArtifactSlideOutPanel-A-i94ghF.js +1 -0
  388. package/frontend/dist/js/AutomationsPage-Dow_lbIf.js +1 -0
  389. package/frontend/dist/js/{Button-BPf_pOxH.js → Button-C0r3J9G_.js} +1 -1
  390. package/frontend/dist/js/CalendarPage-DLjasZOd.js +1 -0
  391. package/frontend/dist/js/ChannelsPage-C8hvTD7J.js +1 -0
  392. package/frontend/dist/js/ChatPage-BAgBHUES.js +16 -0
  393. package/frontend/dist/js/EvaluationsPage-Bm8FRoeX.js +2 -0
  394. package/frontend/dist/js/{FirstTimeSetup-Df0YJni3.js → FirstTimeSetup-BxJapNul.js} +1 -1
  395. package/frontend/dist/js/GalleryPage-DHz9DkK7.js +1 -0
  396. package/frontend/dist/js/HomePage-BqNy-FWX.js +1 -0
  397. package/frontend/dist/js/LibreClawPage-BDzDILjY.js +1 -0
  398. package/frontend/dist/js/{ModelManagerModals-DcLGYN3l.js → ModelManagerModals-DX9eT5r2.js} +1 -1
  399. package/frontend/dist/js/ModelSelector-ol8mK2ja.js +1 -0
  400. package/frontend/dist/js/NotesPage-DzHEx2O4.js +3 -0
  401. package/frontend/dist/js/{OptimizedSyntaxHighlighter-Dz7D1LPB.js → OptimizedSyntaxHighlighter-CZNPwN0i.js} +1 -1
  402. package/frontend/dist/js/PersonasPage-M_WKH2a9.js +13 -0
  403. package/frontend/dist/js/PluginUsagePage-Ctoka6JZ.js +1 -0
  404. package/frontend/dist/js/RichMessageContent-BqgafH4p.js +3 -0
  405. package/frontend/dist/js/SettingsModal-R9EDadAV.js +19 -0
  406. package/frontend/dist/js/{SettingsToggle-woG_WebF.js → SettingsToggle-BIVyfGjl.js} +1 -1
  407. package/frontend/dist/js/SystemPage-aOkrSuY7.js +1 -0
  408. package/frontend/dist/js/UserManagementPage-BOuaX3ay.js +1 -0
  409. package/frontend/dist/js/WorkPage-DxZISerQ.js +6 -0
  410. package/frontend/dist/js/api-6bSMtSNh.js +14 -0
  411. package/frontend/dist/js/{appStore-0JnCUlEq.js → appStore-CdObhQBb.js} +2 -2
  412. package/frontend/dist/js/ar-DT_VLBO3.js +2 -0
  413. package/frontend/dist/js/{authStore-DbMdvNgJ.js → authStore-DbqqrfZv.js} +3 -3
  414. package/frontend/dist/js/{babel-BsYoxD-7.js → babel-DSqqk5kt.js} +1 -1
  415. package/frontend/dist/js/bn-BrvEqhGA.js +2 -0
  416. package/frontend/dist/js/chatStore-DbZPJNsu.js +3 -0
  417. package/frontend/dist/js/{config-DSOYQ9a3.js → config-8KdgjtEx.js} +1 -1
  418. package/frontend/dist/js/cs-BthnM_YI.js +2 -0
  419. package/frontend/dist/js/da-DCth-6_j.js +2 -0
  420. package/frontend/dist/js/de-BBWt0gJ_.js +2 -0
  421. package/frontend/dist/js/es-DuslOPqM.js +2 -0
  422. package/frontend/dist/js/{estree-BcnBcOAx.js → estree-BU5-LV_1.js} +3 -3
  423. package/frontend/dist/js/evaluationsApi-CwZJsgeG.js +1 -0
  424. package/frontend/dist/js/fr-DZAeg46S.js +2 -0
  425. package/frontend/dist/js/hi-ijDSiY77.js +2 -0
  426. package/frontend/dist/js/{html-DkY55Jys.js → html-DeoAy2bo.js} +2 -2
  427. package/frontend/dist/js/id-BS6qS0oq.js +2 -0
  428. package/frontend/dist/js/is-CO2PMDte.js +2 -0
  429. package/frontend/dist/js/it-ChhxT4hs.js +2 -0
  430. package/frontend/dist/js/ja-cyeqUeJN.js +2 -0
  431. package/frontend/dist/js/ko-CfqHTLXj.js +2 -0
  432. package/frontend/dist/js/{markdown-IZSI9DXw.js → markdown-DOLsYkBY.js} +3 -3
  433. package/frontend/dist/js/markdown-core-BK7WVOb7.js +32 -0
  434. package/frontend/dist/js/{markdown-math-DK846gXU.js → markdown-math-e1ByS3KY.js} +5 -5
  435. package/frontend/dist/js/{messageCodeStyles-BFNR9Wv6.js → messageCodeStyles-DhVgizF-.js} +2 -2
  436. package/frontend/dist/js/ms-DZ5pACe1.js +2 -0
  437. package/frontend/dist/js/nl-BsRsnOVp.js +2 -0
  438. package/frontend/dist/js/pl-DXSTAW4M.js +2 -0
  439. package/frontend/dist/js/{postcss-BJ0okz7n.js → postcss-Bg15EcFE.js} +1 -1
  440. package/frontend/dist/js/pt-DmDx0JxB.js +2 -0
  441. package/frontend/dist/js/{react-vendor-C5yShNlM.js → react-vendor-BG_HPV6X.js} +1 -1
  442. package/frontend/dist/js/router-vendor-CbexJIsv.js +1 -0
  443. package/frontend/dist/js/ru-d2g8EWfY.js +2 -0
  444. package/frontend/dist/js/{standalone-Csw3jfJ_.js → standalone-BO5pzI8_.js} +3 -3
  445. package/frontend/dist/js/sv-CIhYUTVQ.js +2 -0
  446. package/frontend/dist/js/{syntax-highlight-3EEX6CGL.js → syntax-highlight-DcR9Vhb7.js} +3 -3
  447. package/frontend/dist/js/th-B3wSxanB.js +2 -0
  448. package/frontend/dist/js/tr-R4UGgPOY.js +2 -0
  449. package/frontend/dist/js/{typescript-CnF4UVx7.js → typescript-6GJ8APmn.js} +1 -1
  450. package/frontend/dist/js/ui-CV0LYmkM.js +2 -0
  451. package/frontend/dist/js/ui-vendor-CWjIBW-z.js +177 -0
  452. package/frontend/dist/js/uk-BzUF4Vkt.js +2 -0
  453. package/frontend/dist/js/{useTranslation-Bho4HCyg.js → useTranslation-5b5UhAc9.js} +1 -1
  454. package/frontend/dist/js/{utils-D9W1Lnkn.js → utils-BGrdX9ie.js} +1 -1
  455. package/frontend/dist/js/{utils-vendor-DWh39_3x.js → utils-vendor-9bQ62WeD.js} +1 -1
  456. package/frontend/dist/js/vi-CKc6Fg4h.js +2 -0
  457. package/frontend/dist/js/{workApi-C3uy9EDT.js → workApi-BruWTlHM.js} +3 -3
  458. package/frontend/dist/js/{yaml-DzT5hBSH.js → yaml-DUeWcOOH.js} +2 -2
  459. package/frontend/dist/js/zh-CXL-kDe8.js +2 -0
  460. package/package.json +2 -2
  461. package/plugins/openai.json +52 -9
  462. package/frontend/dist/assets/index-6o-Hc2wS.js +0 -41
  463. package/frontend/dist/assets/index-D-pM957b.css +0 -1
  464. package/frontend/dist/js/ArtifactSlideOutPanel-CSFRluWA.js +0 -1
  465. package/frontend/dist/js/AutomationsPage-KUeWoZNv.js +0 -1
  466. package/frontend/dist/js/CalendarPage-D9I972w8.js +0 -1
  467. package/frontend/dist/js/ChatPage-CmBx4oAL.js +0 -16
  468. package/frontend/dist/js/GalleryPage-bLCrdJN_.js +0 -1
  469. package/frontend/dist/js/HomePage-Uc6PEg-U.js +0 -1
  470. package/frontend/dist/js/LibreClawPage-CG63DHg1.js +0 -1
  471. package/frontend/dist/js/ModelSelector-yxJC64rM.js +0 -1
  472. package/frontend/dist/js/ModelsPage-1R_TxgmJ.js +0 -2
  473. package/frontend/dist/js/NotesPage-L65j5HoW.js +0 -1
  474. package/frontend/dist/js/PersonasPage-CKeBpHIH.js +0 -13
  475. package/frontend/dist/js/PluginUsagePage-BX1SKMbW.js +0 -1
  476. package/frontend/dist/js/RichMessageContent-DiySVYGB.js +0 -3
  477. package/frontend/dist/js/SettingsModal-68SG1uZ2.js +0 -1
  478. package/frontend/dist/js/SystemPage-CytpZiQV.js +0 -1
  479. package/frontend/dist/js/UserManagementPage-BzJBvZiS.js +0 -1
  480. package/frontend/dist/js/WorkPage-C8gr0QJe.js +0 -6
  481. package/frontend/dist/js/api-BDtqBtqw.js +0 -14
  482. package/frontend/dist/js/ar-CSpi37Gr.js +0 -2
  483. package/frontend/dist/js/bn-CyH1BeDD.js +0 -2
  484. package/frontend/dist/js/chatStore-CHQ2uINS.js +0 -3
  485. package/frontend/dist/js/cs-Cv2NfRK5.js +0 -2
  486. package/frontend/dist/js/da-D6D6IvPK.js +0 -2
  487. package/frontend/dist/js/de-BNoJJTrT.js +0 -2
  488. package/frontend/dist/js/es-kzo9C7q_.js +0 -2
  489. package/frontend/dist/js/fr-CjHYvJRp.js +0 -2
  490. package/frontend/dist/js/hi-BU98AdCQ.js +0 -2
  491. package/frontend/dist/js/id-CpdedejX.js +0 -2
  492. package/frontend/dist/js/is-Cp5dDWBH.js +0 -2
  493. package/frontend/dist/js/it-CuH_cK4U.js +0 -2
  494. package/frontend/dist/js/ja-BWXXXiHn.js +0 -2
  495. package/frontend/dist/js/ko-DQgv2M1t.js +0 -2
  496. package/frontend/dist/js/markdown-core-BmPPZiuD.js +0 -31
  497. package/frontend/dist/js/ms-DCcRoIcX.js +0 -2
  498. package/frontend/dist/js/nl-CbKR1_EU.js +0 -2
  499. package/frontend/dist/js/pl-CRyJZccn.js +0 -2
  500. package/frontend/dist/js/pt-BXYmHFGH.js +0 -2
  501. package/frontend/dist/js/router-vendor-DGFGM3EP.js +0 -1
  502. package/frontend/dist/js/ru-M9SyZG4b.js +0 -2
  503. package/frontend/dist/js/sv-DJ486LTU.js +0 -2
  504. package/frontend/dist/js/th-Ch7gKtZv.js +0 -2
  505. package/frontend/dist/js/tr-ClehWhSC.js +0 -2
  506. package/frontend/dist/js/ui-CC-K19wO.js +0 -2
  507. package/frontend/dist/js/ui-vendor-B1UgO3vd.js +0 -177
  508. package/frontend/dist/js/uk-BqAd5zHF.js +0 -2
  509. package/frontend/dist/js/vi-D9gjlDVB.js +0 -2
  510. package/frontend/dist/js/zh-DKTyHkiR.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatToolRuntimeService.js","sourceRoot":"","sources":["../../src/services/chatToolRuntimeService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { StoredModelTariffRecord, StoredUsageBudgetRecord } from '../persistence/resourceTypes.js';
2
+ import type { StoredPluginUsageEvent } from '../persistence/extensionTypes.js';
3
+ export type BudgetPeriod = StoredUsageBudgetRecord['period'];
4
+ export type BudgetMode = StoredUsageBudgetRecord['mode'];
5
+ export type BudgetPrincipalType = StoredUsageBudgetRecord['principal_type'];
6
+ export declare class BudgetExceededError extends Error {
7
+ readonly budgetName: string;
8
+ readonly statusCode = 429;
9
+ constructor(budgetName: string);
10
+ }
11
+ export interface TariffInput {
12
+ pluginId: string;
13
+ model?: string | null;
14
+ inputPerMillion?: number | null;
15
+ outputPerMillion?: number | null;
16
+ unitPrice?: number | null;
17
+ effectiveFrom?: number;
18
+ }
19
+ export interface BudgetInput {
20
+ name: string;
21
+ principalType: BudgetPrincipalType;
22
+ principalId?: string | null;
23
+ period: BudgetPeriod;
24
+ amountUsd: number;
25
+ mode: BudgetMode;
26
+ }
27
+ export interface CostAnalytics {
28
+ from: number;
29
+ to: number;
30
+ totalUsd: number;
31
+ meteredEvents: number;
32
+ unmeteredEvents: number;
33
+ byPlugin: Array<{
34
+ pluginId: string;
35
+ usd: number;
36
+ events: number;
37
+ }>;
38
+ byModel: Array<{
39
+ pluginId: string;
40
+ model: string;
41
+ usd: number;
42
+ events: number;
43
+ }>;
44
+ byUser: Array<{
45
+ userId: string;
46
+ usd: number;
47
+ events: number;
48
+ }>;
49
+ byDay: Array<{
50
+ day: string;
51
+ usd: number;
52
+ }>;
53
+ budgets: Array<{
54
+ id: string;
55
+ name: string;
56
+ principalType: BudgetPrincipalType;
57
+ principalId: string | null;
58
+ period: BudgetPeriod;
59
+ mode: BudgetMode;
60
+ amountUsd: number;
61
+ spentUsd: number;
62
+ periodStart: number;
63
+ }>;
64
+ }
65
+ /** UTC period boundary for a budget window. */
66
+ export declare const periodStart: (period: BudgetPeriod, now: number) => number;
67
+ /** Stable per-period key used to deduplicate alert notifications. */
68
+ export declare const periodKey: (period: BudgetPeriod, now: number) => string;
69
+ /**
70
+ * The applicable tariff for one event: exact-model rows beat plugin-wide
71
+ * rows; within a group, the newest `effective_from` at or before the event.
72
+ */
73
+ export declare const resolveTariff: (tariffs: readonly StoredModelTariffRecord[], pluginId: string, model: string, atMs: number) => StoredModelTariffRecord | null;
74
+ /** USD cost of one usage event, or null when it cannot be priced. */
75
+ export declare const costForEvent: (event: StoredPluginUsageEvent, tariffs: readonly StoredModelTariffRecord[]) => number | null;
76
+ declare class CostGovernanceService {
77
+ listTariffs(): Promise<StoredModelTariffRecord[]>;
78
+ createTariff(input: TariffInput, createdBy: string): Promise<StoredModelTariffRecord>;
79
+ deleteTariff(tariffId: string): Promise<boolean>;
80
+ listBudgets(): Promise<StoredUsageBudgetRecord[]>;
81
+ saveBudget(input: BudgetInput, createdBy: string, budgetId?: string): Promise<StoredUsageBudgetRecord>;
82
+ deleteBudget(budgetId: string): Promise<boolean>;
83
+ getCostAnalytics(days: number, now?: number): Promise<CostAnalytics>;
84
+ /** CSV export of priced usage events for external accounting. */
85
+ exportCostsCsv(days: number, now?: number): Promise<string>;
86
+ private spendForBudget;
87
+ private invalidateSpendCache;
88
+ /**
89
+ * Admission gate for interactive generation requests. Throws
90
+ * BudgetExceededError when a hard budget covering the user is exhausted.
91
+ * Cache/compute failures fail open: availability beats cent-exactness.
92
+ */
93
+ assertWithinBudget(userId: string, now?: number): Promise<void>;
94
+ /**
95
+ * Threshold alerts for soft and hard budgets, deduplicated per budget,
96
+ * period, and threshold through the notification source key.
97
+ */
98
+ sweepBudgetAlerts(now?: number): Promise<void>;
99
+ }
100
+ export declare const costGovernanceService: CostGovernanceService;
101
+ export default costGovernanceService;
102
+ //# sourceMappingURL=costGovernanceService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costGovernanceService.d.ts","sourceRoot":"","sources":["../../src/services/costGovernanceService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,463 @@
1
+ /*
2
+ * Libre WebUI
3
+ * Copyright (C) 2025 Kroonen AI, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at:
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * Cost and quota governance (ADMIN-01).
19
+ *
20
+ * Tariffs are versioned price rows (`effective_from`) per plugin and model —
21
+ * an exact model row wins over a plugin-wide row (model = null), and the
22
+ * newest row at or before the usage event's time applies. Costs are computed
23
+ * from the recorded usage ledger: provider-reported token counts price
24
+ * against per-million rates, media units price against a unit rate, and
25
+ * events without a matching tariff (or without provider-reported usage) are
26
+ * surfaced as unmetered rather than silently costed at zero.
27
+ *
28
+ * Budgets attach to the whole instance, one user, or one group, over a UTC
29
+ * day, ISO week, or calendar month. `observe` budgets only appear in
30
+ * analytics; `soft` budgets alert at 80% and 100%; `hard` budgets alert and
31
+ * additionally block new interactive generations once exhausted. Enforcement
32
+ * reads a coordinator-cached spend figure so admission stays cheap, and a
33
+ * cache outage fails open for availability — hard budgets bound spend within
34
+ * one cache interval, not to the cent.
35
+ */
36
+ import { randomUUID } from 'crypto';
37
+ import { getPersistence } from '../persistence/index.js';
38
+ import { encryptionService } from './encryptionService.js';
39
+ import { listGroupsWithMembers } from './groupService.js';
40
+ import { notificationService } from './notificationService.js';
41
+ import { getCoordinator } from '../platform/coordination/service.js';
42
+ import { createLogger } from '../utils/logger.js';
43
+ const logger = createLogger('services:cost-governance');
44
+ const MAX_TARIFFS = 500;
45
+ const MAX_BUDGETS = 200;
46
+ const MAX_COST_EVENTS = 100000;
47
+ const SPEND_CACHE_TTL_MS = 30000;
48
+ const ALERT_THRESHOLDS = [0.8, 1];
49
+ export class BudgetExceededError extends Error {
50
+ constructor(budgetName) {
51
+ super(`The "${budgetName}" budget is exhausted for this period; new generations are paused`);
52
+ this.budgetName = budgetName;
53
+ this.statusCode = 429;
54
+ this.name = 'BudgetExceededError';
55
+ }
56
+ }
57
+ const repositories = () => getPersistence(encryptionService).repositories.resources;
58
+ const usageRepository = () => getPersistence(encryptionService).repositories.extensions.pluginUsage;
59
+ /** UTC period boundary for a budget window. */
60
+ export const periodStart = (period, now) => {
61
+ const date = new Date(now);
62
+ if (period === 'daily') {
63
+ return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
64
+ }
65
+ if (period === 'weekly') {
66
+ const day = date.getUTCDay();
67
+ const sinceMonday = (day + 6) % 7;
68
+ return (Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()) -
69
+ sinceMonday * 24 * 60 * 60 * 1000);
70
+ }
71
+ return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1);
72
+ };
73
+ /** Stable per-period key used to deduplicate alert notifications. */
74
+ export const periodKey = (period, now) => `${period}:${periodStart(period, now)}`;
75
+ /**
76
+ * The applicable tariff for one event: exact-model rows beat plugin-wide
77
+ * rows; within a group, the newest `effective_from` at or before the event.
78
+ */
79
+ export const resolveTariff = (tariffs, pluginId, model, atMs) => {
80
+ let exact = null;
81
+ let pluginWide = null;
82
+ for (const tariff of tariffs) {
83
+ if (tariff.plugin_id !== pluginId)
84
+ continue;
85
+ if (tariff.effective_from > atMs)
86
+ continue;
87
+ if (tariff.model === model) {
88
+ if (!exact || tariff.effective_from > exact.effective_from) {
89
+ exact = tariff;
90
+ }
91
+ }
92
+ else if (tariff.model === null) {
93
+ if (!pluginWide || tariff.effective_from > pluginWide.effective_from) {
94
+ pluginWide = tariff;
95
+ }
96
+ }
97
+ }
98
+ return exact ?? pluginWide;
99
+ };
100
+ /** USD cost of one usage event, or null when it cannot be priced. */
101
+ export const costForEvent = (event, tariffs) => {
102
+ const tariff = resolveTariff(tariffs, event.plugin_id, event.model, event.created_at);
103
+ if (!tariff)
104
+ return null;
105
+ let usd = 0;
106
+ let priced = false;
107
+ if (tariff.input_per_million !== null && event.prompt_tokens !== null) {
108
+ usd += (event.prompt_tokens / 1000000) * tariff.input_per_million;
109
+ priced = true;
110
+ }
111
+ if (tariff.output_per_million !== null && event.completion_tokens !== null) {
112
+ usd += (event.completion_tokens / 1000000) * tariff.output_per_million;
113
+ priced = true;
114
+ }
115
+ if (tariff.unit_price !== null && event.output_units > 0) {
116
+ usd += event.output_units * tariff.unit_price;
117
+ priced = true;
118
+ }
119
+ return priced ? usd : null;
120
+ };
121
+ class CostGovernanceService {
122
+ // ---------------------------------------------------------------- tariffs
123
+ async listTariffs() {
124
+ return repositories().modelTariffs.listAll(MAX_TARIFFS);
125
+ }
126
+ async createTariff(input, createdBy) {
127
+ if (!input.pluginId || typeof input.pluginId !== 'string') {
128
+ throw new Error('A plugin id is required');
129
+ }
130
+ const rates = [
131
+ input.inputPerMillion,
132
+ input.outputPerMillion,
133
+ input.unitPrice,
134
+ ];
135
+ if (!rates.some(rate => typeof rate === 'number')) {
136
+ throw new Error('At least one price must be provided');
137
+ }
138
+ for (const rate of rates) {
139
+ if (rate !== undefined &&
140
+ rate !== null &&
141
+ (!Number.isFinite(rate) || rate < 0 || rate > 1000000)) {
142
+ throw new Error('Prices must be non-negative finite USD amounts');
143
+ }
144
+ }
145
+ const effectiveFrom = input.effectiveFrom ?? Date.now();
146
+ if (!Number.isInteger(effectiveFrom)) {
147
+ throw new Error('effectiveFrom must be a timestamp in milliseconds');
148
+ }
149
+ const record = {
150
+ id: randomUUID(),
151
+ plugin_id: input.pluginId,
152
+ model: typeof input.model === 'string' && input.model.trim()
153
+ ? input.model.trim()
154
+ : null,
155
+ input_per_million: input.inputPerMillion ?? null,
156
+ output_per_million: input.outputPerMillion ?? null,
157
+ unit_price: input.unitPrice ?? null,
158
+ currency: 'USD',
159
+ effective_from: effectiveFrom,
160
+ created_by: createdBy,
161
+ created_at: Date.now(),
162
+ };
163
+ await repositories().modelTariffs.insert(record);
164
+ return record;
165
+ }
166
+ async deleteTariff(tariffId) {
167
+ return repositories().modelTariffs.deleteById(tariffId);
168
+ }
169
+ // ---------------------------------------------------------------- budgets
170
+ async listBudgets() {
171
+ return repositories().usageBudgets.listAll(MAX_BUDGETS);
172
+ }
173
+ async saveBudget(input, createdBy, budgetId) {
174
+ if (!input.name?.trim() || input.name.length > 120) {
175
+ throw new Error('A budget name up to 120 characters is required');
176
+ }
177
+ if (!['instance', 'user', 'group'].includes(input.principalType)) {
178
+ throw new Error('Unknown budget principal type');
179
+ }
180
+ if (input.principalType !== 'instance' && !input.principalId) {
181
+ throw new Error('A principal id is required for user and group budgets');
182
+ }
183
+ if (!['daily', 'weekly', 'monthly'].includes(input.period)) {
184
+ throw new Error('Unknown budget period');
185
+ }
186
+ if (!['observe', 'soft', 'hard'].includes(input.mode)) {
187
+ throw new Error('Unknown budget mode');
188
+ }
189
+ if (!Number.isFinite(input.amountUsd) ||
190
+ input.amountUsd <= 0 ||
191
+ input.amountUsd > 10000000) {
192
+ throw new Error('The budget amount must be a positive USD value');
193
+ }
194
+ const now = Date.now();
195
+ const existing = budgetId
196
+ ? await repositories().usageBudgets.findById(budgetId)
197
+ : null;
198
+ if (budgetId && !existing)
199
+ throw new Error('Budget not found');
200
+ const record = {
201
+ id: budgetId ?? randomUUID(),
202
+ name: input.name.trim(),
203
+ principal_type: input.principalType,
204
+ principal_id: input.principalType === 'instance' ? null : (input.principalId ?? null),
205
+ period: input.period,
206
+ amount_usd: input.amountUsd,
207
+ mode: input.mode,
208
+ created_by: existing?.created_by ?? createdBy,
209
+ created_at: existing?.created_at ?? now,
210
+ updated_at: now,
211
+ };
212
+ await repositories().usageBudgets.replace(record);
213
+ this.invalidateSpendCache();
214
+ return record;
215
+ }
216
+ async deleteBudget(budgetId) {
217
+ const removed = await repositories().usageBudgets.deleteById(budgetId);
218
+ if (removed)
219
+ this.invalidateSpendCache();
220
+ return removed;
221
+ }
222
+ // ------------------------------------------------------------- analytics
223
+ async getCostAnalytics(days, now = Date.now()) {
224
+ const from = now - days * 24 * 60 * 60 * 1000;
225
+ const [tariffs, events, budgets] = await Promise.all([
226
+ this.listTariffs(),
227
+ usageRepository().listSince(from, MAX_COST_EVENTS),
228
+ this.listBudgets(),
229
+ ]);
230
+ const byPlugin = new Map();
231
+ const byModel = new Map();
232
+ const byUser = new Map();
233
+ const byDay = new Map();
234
+ let totalUsd = 0;
235
+ let metered = 0;
236
+ let unmetered = 0;
237
+ for (const event of events) {
238
+ const usd = costForEvent(event, tariffs);
239
+ if (usd === null) {
240
+ unmetered += 1;
241
+ continue;
242
+ }
243
+ metered += 1;
244
+ totalUsd += usd;
245
+ const bump = (map, key) => {
246
+ const entry = map.get(key) ?? { usd: 0, events: 0 };
247
+ entry.usd += usd;
248
+ entry.events += 1;
249
+ map.set(key, entry);
250
+ };
251
+ bump(byPlugin, event.plugin_id);
252
+ bump(byModel, `${event.plugin_id}${event.model}`);
253
+ bump(byUser, event.user_id);
254
+ const day = new Date(event.created_at).toISOString().slice(0, 10);
255
+ byDay.set(day, (byDay.get(day) ?? 0) + usd);
256
+ }
257
+ const budgetViews = [];
258
+ for (const budget of budgets) {
259
+ budgetViews.push({
260
+ id: budget.id,
261
+ name: budget.name,
262
+ principalType: budget.principal_type,
263
+ principalId: budget.principal_id,
264
+ period: budget.period,
265
+ mode: budget.mode,
266
+ amountUsd: budget.amount_usd,
267
+ spentUsd: await this.spendForBudget(budget, tariffs, now),
268
+ periodStart: periodStart(budget.period, now),
269
+ });
270
+ }
271
+ const descending = (a, b) => b.usd - a.usd;
272
+ return {
273
+ from,
274
+ to: now,
275
+ totalUsd,
276
+ meteredEvents: metered,
277
+ unmeteredEvents: unmetered,
278
+ byPlugin: [...byPlugin.entries()]
279
+ .map(([pluginId, value]) => ({ pluginId, ...value }))
280
+ .sort(descending),
281
+ byModel: [...byModel.entries()]
282
+ .map(([key, value]) => {
283
+ const [pluginId, model] = key.split('');
284
+ return { pluginId, model, ...value };
285
+ })
286
+ .sort(descending),
287
+ byUser: [...byUser.entries()]
288
+ .map(([userId, value]) => ({ userId, ...value }))
289
+ .sort(descending),
290
+ byDay: [...byDay.entries()]
291
+ .map(([day, usd]) => ({ day, usd }))
292
+ .sort((a, b) => a.day.localeCompare(b.day)),
293
+ budgets: budgetViews,
294
+ };
295
+ }
296
+ /** CSV export of priced usage events for external accounting. */
297
+ async exportCostsCsv(days, now = Date.now()) {
298
+ const from = now - days * 24 * 60 * 60 * 1000;
299
+ const [tariffs, events] = await Promise.all([
300
+ this.listTariffs(),
301
+ usageRepository().listSince(from, MAX_COST_EVENTS),
302
+ ]);
303
+ const escape = (value) => {
304
+ const text = String(value ?? '');
305
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
306
+ };
307
+ const lines = [
308
+ 'timestamp,user_id,plugin_id,model,capability,status,prompt_tokens,completion_tokens,output_units,cost_usd',
309
+ ];
310
+ for (const event of events) {
311
+ const usd = costForEvent(event, tariffs);
312
+ lines.push([
313
+ new Date(event.created_at).toISOString(),
314
+ event.user_id,
315
+ event.plugin_id,
316
+ event.model,
317
+ event.capability,
318
+ event.status,
319
+ event.prompt_tokens ?? '',
320
+ event.completion_tokens ?? '',
321
+ event.output_units,
322
+ usd === null ? '' : usd.toFixed(6),
323
+ ]
324
+ .map(escape)
325
+ .join(','));
326
+ }
327
+ return `${lines.join('\n')}\n`;
328
+ }
329
+ // ----------------------------------------------------------- enforcement
330
+ async spendForBudget(budget, tariffs, now) {
331
+ const from = periodStart(budget.period, now);
332
+ const events = await usageRepository().listSince(from, MAX_COST_EVENTS);
333
+ let scope = null;
334
+ if (budget.principal_type === 'user' && budget.principal_id) {
335
+ scope = new Set([budget.principal_id]);
336
+ }
337
+ else if (budget.principal_type === 'group' && budget.principal_id) {
338
+ const groups = await listGroupsWithMembers();
339
+ const group = groups.find(entry => entry.id === budget.principal_id);
340
+ scope = new Set(group?.members.map(member => member.user_id) ?? []);
341
+ }
342
+ let usd = 0;
343
+ for (const event of events) {
344
+ if (scope && !scope.has(event.user_id))
345
+ continue;
346
+ usd += costForEvent(event, tariffs) ?? 0;
347
+ }
348
+ return usd;
349
+ }
350
+ invalidateSpendCache() {
351
+ // The cache key embeds the minute bucket, so a short TTL suffices;
352
+ // budget edits simply wait out at most one interval.
353
+ }
354
+ /**
355
+ * Admission gate for interactive generation requests. Throws
356
+ * BudgetExceededError when a hard budget covering the user is exhausted.
357
+ * Cache/compute failures fail open: availability beats cent-exactness.
358
+ */
359
+ async assertWithinBudget(userId, now = Date.now()) {
360
+ try {
361
+ const budgets = await this.listBudgets();
362
+ const hard = budgets.filter(budget => budget.mode === 'hard');
363
+ if (hard.length === 0)
364
+ return;
365
+ const cacheKey = `budget-gate:${userId}`;
366
+ const coordinator = getCoordinator();
367
+ const cached = await coordinator
368
+ .getCache(cacheKey)
369
+ .catch(() => undefined);
370
+ if (typeof cached === 'string' && cached) {
371
+ const parsed = JSON.parse(cached);
372
+ if (now - parsed.at < SPEND_CACHE_TTL_MS) {
373
+ if (parsed.blockedBy)
374
+ throw new BudgetExceededError(parsed.blockedBy);
375
+ return;
376
+ }
377
+ }
378
+ const [tariffs, groupIds] = await Promise.all([
379
+ this.listTariffs(),
380
+ getPersistence(encryptionService).repositories.security.groups.listGroupIdsForUser(userId),
381
+ ]);
382
+ let blockedBy = null;
383
+ for (const budget of hard) {
384
+ const applies = budget.principal_type === 'instance' ||
385
+ (budget.principal_type === 'user' &&
386
+ budget.principal_id === userId) ||
387
+ (budget.principal_type === 'group' &&
388
+ budget.principal_id !== null &&
389
+ groupIds.includes(budget.principal_id));
390
+ if (!applies)
391
+ continue;
392
+ const spent = await this.spendForBudget(budget, tariffs, now);
393
+ if (spent >= budget.amount_usd) {
394
+ blockedBy = budget.name;
395
+ break;
396
+ }
397
+ }
398
+ await coordinator
399
+ .setCache(cacheKey, JSON.stringify({ blockedBy, at: now }), SPEND_CACHE_TTL_MS)
400
+ .catch(() => undefined);
401
+ if (blockedBy)
402
+ throw new BudgetExceededError(blockedBy);
403
+ }
404
+ catch (error) {
405
+ if (error instanceof BudgetExceededError)
406
+ throw error;
407
+ logger.warn('Budget admission check failed open', { error });
408
+ }
409
+ }
410
+ // ---------------------------------------------------------------- sweeps
411
+ /**
412
+ * Threshold alerts for soft and hard budgets, deduplicated per budget,
413
+ * period, and threshold through the notification source key.
414
+ */
415
+ async sweepBudgetAlerts(now = Date.now()) {
416
+ const budgets = await this.listBudgets();
417
+ const alerting = budgets.filter(budget => budget.mode !== 'observe');
418
+ if (alerting.length === 0)
419
+ return;
420
+ const tariffs = await this.listTariffs();
421
+ for (const budget of alerting) {
422
+ let spent;
423
+ try {
424
+ spent = await this.spendForBudget(budget, tariffs, now);
425
+ }
426
+ catch (error) {
427
+ logger.warn('Budget sweep spend computation failed', { error });
428
+ continue;
429
+ }
430
+ const ratio = spent / budget.amount_usd;
431
+ for (const threshold of ALERT_THRESHOLDS) {
432
+ if (ratio < threshold)
433
+ continue;
434
+ const recipients = new Set();
435
+ if (budget.created_by)
436
+ recipients.add(budget.created_by);
437
+ if (budget.principal_type === 'user' && budget.principal_id) {
438
+ recipients.add(budget.principal_id);
439
+ }
440
+ const key = periodKey(budget.period, now);
441
+ for (const userId of recipients) {
442
+ try {
443
+ await notificationService.publish({
444
+ userId,
445
+ type: 'budget-alert',
446
+ title: threshold >= 1
447
+ ? `Budget "${budget.name}" is exhausted (${Math.round(ratio * 100)}%)`
448
+ : `Budget "${budget.name}" reached ${Math.round(ratio * 100)}%`,
449
+ href: '/usage',
450
+ sourceKey: `budget:${budget.id}:${key}:${threshold}`,
451
+ });
452
+ }
453
+ catch (error) {
454
+ logger.warn('Budget alert publish failed', { error });
455
+ }
456
+ }
457
+ }
458
+ }
459
+ }
460
+ }
461
+ export const costGovernanceService = new CostGovernanceService();
462
+ export default costGovernanceService;
463
+ //# sourceMappingURL=costGovernanceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costGovernanceService.js","sourceRoot":"","sources":["../../src/services/costGovernanceService.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,12 @@ export interface DataArchiveExclusion {
10
10
  reason: string;
11
11
  }
12
12
  export declare const DATA_ARCHIVE_EXCLUSIONS: DataArchiveExclusion[];
13
+ /**
14
+ * Disclosed in every new export but not demanded on import: archives sealed
15
+ * before these features existed remain valid, and their exclusion lists were
16
+ * accurate for the data they could contain.
17
+ */
18
+ export declare const DATA_ARCHIVE_EXPORT_ONLY_EXCLUSIONS: DataArchiveExclusion[];
13
19
  export interface ArchivedDocument extends Document {
14
20
  chunks: Array<Omit<DocumentChunk, 'embedding'>>;
15
21
  }