@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.2

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 (626) hide show
  1. package/bootstrap.json +10 -6
  2. package/dist/admin/admin.controller.d.ts +17 -17
  3. package/dist/admin/admin.controller.js +43 -26
  4. package/dist/admin/admin.module.d.ts +3 -0
  5. package/dist/admin/admin.module.js +22 -0
  6. package/dist/admin/extensions.controller.d.ts +14 -14
  7. package/dist/admin/extensions.controller.js +30 -17
  8. package/dist/admin/setup-lock.d.ts +16 -0
  9. package/dist/admin/setup-lock.js +47 -0
  10. package/dist/admin/setup.controller.d.ts +8 -8
  11. package/dist/admin/setup.controller.js +27 -25
  12. package/dist/admin/setup.service.d.ts +19 -27
  13. package/dist/admin/setup.service.js +61 -61
  14. package/dist/agents/agent-lookup.d.ts +53 -0
  15. package/dist/agents/agent-lookup.js +179 -0
  16. package/dist/agents/agents.controller.d.ts +1 -1
  17. package/dist/agents/agents.controller.js +14 -8
  18. package/dist/agents/agents.module.d.ts +7 -0
  19. package/dist/agents/agents.module.js +41 -0
  20. package/dist/agents/agents.service.d.ts +39 -58
  21. package/dist/agents/agents.service.js +261 -329
  22. package/dist/agents/definition.d.ts +8 -0
  23. package/dist/agents/definition.js +8 -0
  24. package/dist/agents/models.controller.d.ts +1 -1
  25. package/dist/agents/models.controller.js +2 -2
  26. package/dist/agents/templates.controller.d.ts +1 -1
  27. package/dist/agents/templates.controller.js +2 -2
  28. package/dist/agents/templates.d.ts +6 -8
  29. package/dist/agents/templates.js +20 -4
  30. package/dist/app.d.ts +93 -0
  31. package/dist/app.js +150 -0
  32. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  33. package/dist/catalog/admin-catalog.controller.js +27 -13
  34. package/dist/catalog/catalog-content.d.ts +185 -0
  35. package/dist/catalog/catalog-content.js +323 -0
  36. package/dist/catalog/catalog-items.d.ts +186 -0
  37. package/dist/catalog/catalog-items.js +410 -0
  38. package/dist/catalog/catalog.module.d.ts +14 -0
  39. package/dist/catalog/catalog.module.js +71 -0
  40. package/dist/catalog/catalog.service.d.ts +34 -188
  41. package/dist/catalog/catalog.service.js +155 -489
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +30 -13
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +2 -2
  70. package/dist/channels/channels.module.d.ts +40 -0
  71. package/dist/channels/channels.module.js +128 -0
  72. package/dist/channels/connections.controller.d.ts +1 -1
  73. package/dist/channels/connections.controller.js +11 -6
  74. package/dist/channels/connections.service.d.ts +43 -21
  75. package/dist/channels/connections.service.js +236 -131
  76. package/dist/channels/inbound.d.ts +34 -38
  77. package/dist/channels/inbound.js +107 -41
  78. package/dist/channels/job-ids.d.ts +10 -0
  79. package/dist/channels/job-ids.js +10 -0
  80. package/dist/channels/jobs.d.ts +85 -0
  81. package/dist/channels/jobs.js +157 -0
  82. package/dist/channels/outbound.d.ts +60 -82
  83. package/dist/channels/outbound.js +165 -193
  84. package/dist/channels/supervisor.d.ts +88 -46
  85. package/dist/channels/supervisor.js +230 -132
  86. package/dist/channels/threads.d.ts +29 -8
  87. package/dist/channels/threads.js +71 -13
  88. package/dist/channels/webhook.d.ts +20 -14
  89. package/dist/channels/webhook.js +51 -20
  90. package/dist/config/load.d.ts +3 -2
  91. package/dist/config/load.js +3 -2
  92. package/dist/config/nacos-source.js +11 -2
  93. package/dist/config/schema.d.ts +16 -1
  94. package/dist/config/schema.js +54 -7
  95. package/dist/conversations/access.d.ts +29 -0
  96. package/dist/conversations/access.js +86 -0
  97. package/dist/conversations/artifacts.d.ts +10 -10
  98. package/dist/conversations/artifacts.js +35 -9
  99. package/dist/conversations/attachments.controller.d.ts +1 -1
  100. package/dist/conversations/attachments.controller.js +8 -6
  101. package/dist/conversations/attachments.module.d.ts +7 -0
  102. package/dist/conversations/attachments.module.js +25 -0
  103. package/dist/conversations/attachments.service.d.ts +30 -22
  104. package/dist/conversations/attachments.service.js +119 -46
  105. package/dist/conversations/conversations.controller.d.ts +8 -7
  106. package/dist/conversations/conversations.controller.js +59 -29
  107. package/dist/conversations/conversations.module.d.ts +8 -0
  108. package/dist/conversations/conversations.module.js +69 -0
  109. package/dist/conversations/conversations.service.d.ts +40 -38
  110. package/dist/conversations/conversations.service.js +130 -140
  111. package/dist/conversations/event-log.d.ts +28 -18
  112. package/dist/conversations/event-log.js +74 -27
  113. package/dist/conversations/files.d.ts +10 -10
  114. package/dist/conversations/files.js +37 -11
  115. package/dist/conversations/idem-keys.d.ts +5 -0
  116. package/dist/conversations/idem-keys.js +5 -0
  117. package/dist/conversations/job-ids.d.ts +6 -0
  118. package/dist/conversations/job-ids.js +6 -0
  119. package/dist/conversations/outputs-read.d.ts +11 -11
  120. package/dist/conversations/outputs-read.js +31 -7
  121. package/dist/conversations/queue.d.ts +48 -56
  122. package/dist/conversations/queue.js +13 -289
  123. package/dist/conversations/queue.service.d.ts +60 -0
  124. package/dist/conversations/queue.service.js +343 -0
  125. package/dist/conversations/sandbox-status.d.ts +13 -10
  126. package/dist/conversations/sandbox-status.js +36 -8
  127. package/dist/conversations/titles.d.ts +71 -24
  128. package/dist/conversations/titles.js +159 -62
  129. package/dist/ctx/bus.js +9 -3
  130. package/dist/ctx/create-ctx.d.ts +6 -0
  131. package/dist/ctx/create-ctx.js +7 -9
  132. package/dist/ctx/lock.d.ts +7 -3
  133. package/dist/ctx/lock.js +9 -20
  134. package/dist/ctx/queue.js +3 -2
  135. package/dist/ctx/secrets.d.ts +10 -2
  136. package/dist/ctx/secrets.js +7 -3
  137. package/dist/db/kernel-schema.d.ts +2 -2
  138. package/dist/db/pool.d.ts +5 -0
  139. package/dist/db/pool.js +1 -0
  140. package/dist/errors.d.ts +2 -0
  141. package/dist/errors.js +2 -0
  142. package/dist/evals/budget.d.ts +42 -21
  143. package/dist/evals/budget.js +114 -62
  144. package/dist/evals/evals.module.d.ts +31 -0
  145. package/dist/evals/evals.module.js +114 -0
  146. package/dist/evals/jobs.d.ts +20 -0
  147. package/dist/evals/jobs.js +45 -0
  148. package/dist/evals/run-replay.d.ts +56 -8
  149. package/dist/evals/run-replay.js +140 -80
  150. package/dist/evals/runs.controller.d.ts +1 -1
  151. package/dist/evals/runs.controller.js +17 -8
  152. package/dist/evals/runs.service.d.ts +23 -45
  153. package/dist/evals/runs.service.js +245 -234
  154. package/dist/evals/sets.controller.d.ts +1 -1
  155. package/dist/evals/sets.controller.js +17 -8
  156. package/dist/evals/sets.service.d.ts +22 -6
  157. package/dist/evals/sets.service.js +248 -194
  158. package/dist/evals/snapshot.d.ts +2 -2
  159. package/dist/evals/step-replay.d.ts +2 -2
  160. package/dist/evals/step-replay.js +1 -1
  161. package/dist/evals/trajectory.controller.d.ts +1 -1
  162. package/dist/evals/trajectory.controller.js +11 -7
  163. package/dist/evals/trajectory.service.d.ts +5 -4
  164. package/dist/evals/trajectory.service.js +30 -7
  165. package/dist/evals/worker.d.ts +44 -27
  166. package/dist/evals/worker.js +220 -120
  167. package/dist/extensions/admin-ops.d.ts +61 -33
  168. package/dist/extensions/admin-ops.js +248 -154
  169. package/dist/extensions/admin-view.d.ts +38 -27
  170. package/dist/extensions/admin-view.js +126 -55
  171. package/dist/extensions/approvals.d.ts +12 -8
  172. package/dist/extensions/approvals.js +73 -46
  173. package/dist/extensions/blobs.d.ts +27 -10
  174. package/dist/extensions/blobs.js +111 -45
  175. package/dist/extensions/bootstrap.d.ts +96 -42
  176. package/dist/extensions/bootstrap.js +303 -155
  177. package/dist/extensions/cli.d.ts +20 -10
  178. package/dist/extensions/cli.js +41 -96
  179. package/dist/extensions/config-issues.d.ts +7 -0
  180. package/dist/extensions/config-issues.js +31 -0
  181. package/dist/extensions/deployment-config-store.d.ts +49 -0
  182. package/dist/extensions/deployment-config-store.js +133 -0
  183. package/dist/extensions/deployment-config.d.ts +58 -67
  184. package/dist/extensions/deployment-config.js +202 -230
  185. package/dist/extensions/enabled.d.ts +5 -5
  186. package/dist/extensions/extensions.module.d.ts +8 -0
  187. package/dist/extensions/extensions.module.js +77 -0
  188. package/dist/extensions/hooks.d.ts +3 -2
  189. package/dist/extensions/hooks.js +1 -1
  190. package/dist/extensions/host.d.ts +72 -68
  191. package/dist/extensions/host.js +191 -152
  192. package/dist/extensions/installs.d.ts +49 -16
  193. package/dist/extensions/installs.js +128 -32
  194. package/dist/extensions/job-ids.d.ts +6 -0
  195. package/dist/extensions/job-ids.js +6 -0
  196. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  197. package/dist/extensions/lifecycle-topics.js +18 -0
  198. package/dist/extensions/lifecycle.d.ts +35 -47
  199. package/dist/extensions/lifecycle.js +103 -39
  200. package/dist/extensions/locks.d.ts +33 -0
  201. package/dist/extensions/locks.js +86 -0
  202. package/dist/extensions/migrate-lock.d.ts +3 -4
  203. package/dist/extensions/org-config.controller.d.ts +1 -1
  204. package/dist/extensions/org-config.controller.js +8 -5
  205. package/dist/extensions/org-config.d.ts +48 -46
  206. package/dist/extensions/org-config.js +284 -226
  207. package/dist/extensions/registry.d.ts +50 -2
  208. package/dist/extensions/registry.js +89 -4
  209. package/dist/extensions/sources.d.ts +12 -8
  210. package/dist/extensions/sources.js +34 -13
  211. package/dist/files/files.module.d.ts +3 -0
  212. package/dist/files/files.module.js +22 -0
  213. package/dist/files/previewers.controller.d.ts +7 -2
  214. package/dist/files/previewers.controller.js +17 -9
  215. package/dist/files/previewers.d.ts +13 -18
  216. package/dist/files/previewers.js +83 -36
  217. package/dist/http/adapter.d.ts +3 -0
  218. package/dist/http/adapter.js +25 -0
  219. package/dist/http/api.module.d.ts +3 -110
  220. package/dist/http/api.module.js +47 -355
  221. package/dist/http/app.d.ts +11 -15
  222. package/dist/http/app.js +52 -47
  223. package/dist/http/error-filter.module.d.ts +5 -0
  224. package/dist/http/error-filter.module.js +18 -0
  225. package/dist/http/error.filter.js +2 -2
  226. package/dist/identity/accounts.d.ts +82 -29
  227. package/dist/identity/accounts.js +294 -175
  228. package/dist/identity/api-tokens.d.ts +11 -7
  229. package/dist/identity/api-tokens.js +71 -44
  230. package/dist/identity/audit.d.ts +7 -4
  231. package/dist/identity/audit.js +5 -1
  232. package/dist/identity/auth.controller.d.ts +11 -10
  233. package/dist/identity/auth.controller.js +31 -25
  234. package/dist/identity/auth.guard.d.ts +3 -3
  235. package/dist/identity/auth.guard.js +6 -4
  236. package/dist/identity/binding.d.ts +9 -11
  237. package/dist/identity/binding.js +41 -13
  238. package/dist/identity/enterprise-admin.d.ts +18 -12
  239. package/dist/identity/enterprise-admin.js +67 -13
  240. package/dist/identity/external-identity-lock.d.ts +17 -0
  241. package/dist/identity/external-identity-lock.js +39 -0
  242. package/dist/identity/external.d.ts +19 -15
  243. package/dist/identity/external.js +163 -125
  244. package/dist/identity/identity.module.d.ts +6 -0
  245. package/dist/identity/identity.module.js +56 -0
  246. package/dist/identity/me.controller.d.ts +16 -15
  247. package/dist/identity/me.controller.js +37 -31
  248. package/dist/identity/sessions.d.ts +12 -10
  249. package/dist/identity/sessions.js +74 -42
  250. package/dist/identity/settings.d.ts +20 -14
  251. package/dist/identity/settings.js +85 -57
  252. package/dist/identity/sso.controller.d.ts +7 -7
  253. package/dist/identity/sso.controller.js +13 -9
  254. package/dist/identity/sso.d.ts +9 -12
  255. package/dist/identity/sso.js +54 -24
  256. package/dist/inbox/inbox.module.d.ts +3 -0
  257. package/dist/inbox/inbox.module.js +22 -0
  258. package/dist/inbox/inbox.service.d.ts +7 -9
  259. package/dist/inbox/inbox.service.js +32 -11
  260. package/dist/index.d.ts +19 -12
  261. package/dist/index.js +13 -8
  262. package/dist/infra/cache/cache.module.d.ts +3 -0
  263. package/dist/infra/cache/cache.module.js +16 -0
  264. package/dist/infra/cache/cache.service.d.ts +21 -0
  265. package/dist/infra/cache/cache.service.js +80 -0
  266. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  267. package/dist/infra/cache/cacheable.decorator.js +83 -0
  268. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  269. package/dist/infra/cli/kernel-cli.module.js +165 -0
  270. package/dist/infra/close-within.d.ts +15 -0
  271. package/dist/infra/close-within.js +36 -0
  272. package/dist/infra/config/config.module.d.ts +13 -0
  273. package/dist/infra/config/config.module.js +39 -0
  274. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  275. package/dist/infra/config/kernel-config.service.js +126 -0
  276. package/dist/infra/database/after-commit.d.ts +6 -0
  277. package/dist/infra/database/after-commit.js +9 -0
  278. package/dist/infra/database/database.module.d.ts +25 -0
  279. package/dist/infra/database/database.module.js +90 -0
  280. package/dist/infra/database/kernel-db.d.ts +22 -0
  281. package/dist/infra/database/kernel-db.js +65 -0
  282. package/dist/infra/database/transaction-host.d.ts +50 -0
  283. package/dist/infra/database/transaction-host.js +125 -0
  284. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  285. package/dist/infra/database/transactional.decorator.js +27 -0
  286. package/dist/infra/database/xact-lock.d.ts +17 -0
  287. package/dist/infra/database/xact-lock.js +43 -0
  288. package/dist/infra/events/kernel-events.d.ts +96 -0
  289. package/dist/infra/events/kernel-events.js +65 -0
  290. package/dist/infra/health/health.controller.d.ts +26 -0
  291. package/dist/infra/health/health.controller.js +104 -0
  292. package/dist/infra/health/health.module.d.ts +9 -0
  293. package/dist/infra/health/health.module.js +24 -0
  294. package/dist/infra/health/health.options.d.ts +10 -0
  295. package/dist/infra/health/health.options.js +15 -0
  296. package/dist/infra/health/shutdown-state.d.ts +6 -0
  297. package/dist/infra/health/shutdown-state.js +2 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  300. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  301. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  302. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  303. package/dist/infra/lifecycle/process-guards.js +86 -0
  304. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  305. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  306. package/dist/infra/lock/key-template.d.ts +13 -0
  307. package/dist/infra/lock/key-template.js +46 -0
  308. package/dist/infra/lock/lock.module.d.ts +3 -0
  309. package/dist/infra/lock/lock.module.js +16 -0
  310. package/dist/infra/lock/lock.service.d.ts +120 -0
  311. package/dist/infra/lock/lock.service.js +343 -0
  312. package/dist/infra/lock/shared-lease.d.ts +44 -0
  313. package/dist/infra/lock/shared-lease.js +121 -0
  314. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  315. package/dist/infra/lock/with-lock.decorator.js +49 -0
  316. package/dist/infra/logging/logging.module.d.ts +16 -0
  317. package/dist/infra/logging/logging.module.js +34 -0
  318. package/dist/infra/queue/configured-processor.d.ts +18 -0
  319. package/dist/infra/queue/configured-processor.js +23 -0
  320. package/dist/infra/queue/job-failure.d.ts +18 -0
  321. package/dist/infra/queue/job-failure.js +26 -0
  322. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  323. package/dist/infra/queue/queue-shutdown.js +81 -0
  324. package/dist/infra/queue/queue.module.d.ts +16 -0
  325. package/dist/infra/queue/queue.module.js +61 -0
  326. package/dist/infra/queue/redis-connection.d.ts +7 -0
  327. package/dist/infra/queue/redis-connection.js +18 -0
  328. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  329. package/dist/infra/queue/retired-schedulers.js +9 -0
  330. package/dist/infra/queue/run-job.d.ts +16 -0
  331. package/dist/infra/queue/run-job.js +19 -0
  332. package/dist/infra/redis/redis.module.d.ts +24 -0
  333. package/dist/infra/redis/redis.module.js +87 -0
  334. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  335. package/dist/infra/schedule/cron-tick.js +25 -0
  336. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  337. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  338. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  339. package/dist/infra/schedule/locked-interval.js +190 -0
  340. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  341. package/dist/infra/schedule/locked-tick.js +137 -0
  342. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  343. package/dist/infra/schedule/schedule.module.js +27 -0
  344. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  345. package/dist/infra/schedule/scheduled-runs.js +163 -0
  346. package/dist/infra/swagger/swagger.d.ts +16 -0
  347. package/dist/infra/swagger/swagger.js +31 -0
  348. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  349. package/dist/infra/throttler/credential-throttler.js +77 -0
  350. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  351. package/dist/infra/throttler/named-throttlers.js +119 -0
  352. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  353. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  354. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  355. package/dist/infra/throttler/throttler.guard.js +68 -0
  356. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  357. package/dist/infra/throttler/throttler.module.js +53 -0
  358. package/dist/infra/tokens.d.ts +15 -0
  359. package/dist/infra/tokens.js +15 -0
  360. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  361. package/dist/infra/validation/create-zod-dto.js +35 -0
  362. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  363. package/dist/infra/validation/parse-with-zod.js +12 -0
  364. package/dist/infra/validation/validation.module.d.ts +3 -0
  365. package/dist/infra/validation/validation.module.js +16 -0
  366. package/dist/infra/validation/zod-params.d.ts +7 -0
  367. package/dist/infra/validation/zod-params.js +42 -0
  368. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  369. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  370. package/dist/kernel.d.ts +9 -241
  371. package/dist/kernel.js +8 -1305
  372. package/dist/kernel.module.d.ts +17 -0
  373. package/dist/kernel.module.js +136 -0
  374. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  375. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  376. package/dist/lifecycle/tokens.d.ts +3 -0
  377. package/dist/lifecycle/tokens.js +3 -0
  378. package/dist/log-config.d.ts +9 -0
  379. package/dist/log-config.js +27 -0
  380. package/dist/log-context.d.ts +34 -0
  381. package/dist/log-context.js +44 -0
  382. package/dist/log-loki.d.ts +34 -0
  383. package/dist/log-loki.js +145 -0
  384. package/dist/log.d.ts +41 -10
  385. package/dist/log.js +91 -17
  386. package/dist/models/models.module.d.ts +3 -0
  387. package/dist/models/models.module.js +24 -0
  388. package/dist/models/prices.d.ts +8 -2
  389. package/dist/models/prices.js +65 -37
  390. package/dist/models/purposes.controller.d.ts +1 -1
  391. package/dist/models/purposes.controller.js +5 -6
  392. package/dist/models/purposes.d.ts +35 -13
  393. package/dist/models/purposes.js +101 -51
  394. package/dist/net/public-address.js +3 -2
  395. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  396. package/dist/orgs/directory-sync.controller.js +2 -2
  397. package/dist/orgs/directory-sync.d.ts +61 -31
  398. package/dist/orgs/directory-sync.js +212 -125
  399. package/dist/orgs/invitations.controller.d.ts +8 -8
  400. package/dist/orgs/invitations.controller.js +27 -26
  401. package/dist/orgs/invitations.service.d.ts +12 -9
  402. package/dist/orgs/invitations.service.js +130 -92
  403. package/dist/orgs/job-ids.d.ts +8 -0
  404. package/dist/orgs/job-ids.js +8 -0
  405. package/dist/orgs/members.service.d.ts +19 -12
  406. package/dist/orgs/members.service.js +161 -117
  407. package/dist/orgs/offboarding.d.ts +54 -57
  408. package/dist/orgs/offboarding.js +161 -71
  409. package/dist/orgs/org-lock.d.ts +28 -19
  410. package/dist/orgs/org-lock.js +81 -35
  411. package/dist/orgs/org.guard.d.ts +1 -1
  412. package/dist/orgs/org.guard.js +2 -2
  413. package/dist/orgs/orgs.controller.d.ts +13 -13
  414. package/dist/orgs/orgs.controller.js +29 -17
  415. package/dist/orgs/orgs.module.d.ts +6 -0
  416. package/dist/orgs/orgs.module.js +68 -0
  417. package/dist/orgs/orgs.service.d.ts +30 -19
  418. package/dist/orgs/orgs.service.js +139 -86
  419. package/dist/orgs/settings.controller.d.ts +1 -1
  420. package/dist/orgs/settings.controller.js +8 -6
  421. package/dist/orgs/settings.service.d.ts +14 -8
  422. package/dist/orgs/settings.service.js +75 -46
  423. package/dist/overrides.d.ts +56 -0
  424. package/dist/overrides.js +30 -0
  425. package/dist/roles/gateway-role.d.ts +43 -0
  426. package/dist/roles/gateway-role.js +98 -0
  427. package/dist/roles/gateway.module.d.ts +8 -0
  428. package/dist/roles/gateway.module.js +28 -0
  429. package/dist/roles/worker-role.d.ts +63 -0
  430. package/dist/roles/worker-role.js +144 -0
  431. package/dist/roles/worker.module.d.ts +14 -0
  432. package/dist/roles/worker.module.js +90 -0
  433. package/dist/runtime/abort.js +19 -2
  434. package/dist/runtime/checkpointer.d.ts +8 -3
  435. package/dist/runtime/checkpointer.js +87 -55
  436. package/dist/runtime/conversation-lock.d.ts +20 -11
  437. package/dist/runtime/conversation-lock.js +62 -72
  438. package/dist/runtime/hook-calls.d.ts +3 -3
  439. package/dist/runtime/hook-calls.js +1 -6
  440. package/dist/runtime/job-ids.d.ts +10 -0
  441. package/dist/runtime/job-ids.js +10 -0
  442. package/dist/runtime/langgraph-loop.js +1 -1
  443. package/dist/runtime/loop.d.ts +7 -0
  444. package/dist/runtime/loop.js +14 -0
  445. package/dist/runtime/maintenance-queue.d.ts +10 -0
  446. package/dist/runtime/maintenance-queue.js +10 -0
  447. package/dist/runtime/maintenance.d.ts +45 -74
  448. package/dist/runtime/maintenance.js +139 -136
  449. package/dist/runtime/model-call.d.ts +7 -4
  450. package/dist/runtime/model-call.js +24 -57
  451. package/dist/runtime/providers.d.ts +17 -6
  452. package/dist/runtime/providers.js +66 -25
  453. package/dist/runtime/quota.d.ts +17 -3
  454. package/dist/runtime/quota.js +27 -2
  455. package/dist/runtime/retired-schedulers.d.ts +7 -0
  456. package/dist/runtime/retired-schedulers.js +31 -0
  457. package/dist/runtime/run-control.d.ts +33 -0
  458. package/dist/runtime/run-control.js +77 -0
  459. package/dist/runtime/run-finish.d.ts +26 -17
  460. package/dist/runtime/run-finish.js +98 -51
  461. package/dist/runtime/run-jobs.d.ts +48 -0
  462. package/dist/runtime/run-jobs.js +95 -0
  463. package/dist/runtime/run-processors.d.ts +60 -0
  464. package/dist/runtime/run-processors.js +185 -0
  465. package/dist/runtime/run-queue.d.ts +32 -57
  466. package/dist/runtime/run-queue.js +291 -295
  467. package/dist/runtime/run-steps.d.ts +39 -0
  468. package/dist/runtime/run-steps.js +96 -0
  469. package/dist/runtime/run-worker.d.ts +121 -75
  470. package/dist/runtime/run-worker.js +340 -225
  471. package/dist/runtime/runtime.module.d.ts +10 -0
  472. package/dist/runtime/runtime.module.js +112 -0
  473. package/dist/runtime/step-log.d.ts +40 -0
  474. package/dist/runtime/step-log.js +94 -0
  475. package/dist/runtime/stream.controller.d.ts +5 -8
  476. package/dist/runtime/stream.controller.js +14 -12
  477. package/dist/runtime/stream.d.ts +24 -6
  478. package/dist/runtime/stream.js +78 -7
  479. package/dist/runtime/subagents/child.d.ts +3 -44
  480. package/dist/runtime/subagents/child.js +0 -79
  481. package/dist/runtime/subagents/definition.d.ts +4 -4
  482. package/dist/runtime/subagents/definition.js +2 -2
  483. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  484. package/dist/runtime/subagents/dispatch.js +135 -140
  485. package/dist/runtime/subagents/limits.d.ts +9 -4
  486. package/dist/runtime/subagents/limits.js +4 -2
  487. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  488. package/dist/runtime/subagents/org-agents.js +1 -1
  489. package/dist/runtime/subagents/progress.d.ts +2 -2
  490. package/dist/runtime/subagents/roster.d.ts +3 -3
  491. package/dist/runtime/subagents/roster.js +1 -1
  492. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  493. package/dist/runtime/subagents/skill-fork.js +16 -5
  494. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  495. package/dist/runtime/subagents/subagents.service.js +101 -0
  496. package/dist/runtime/usage-report.d.ts +94 -52
  497. package/dist/runtime/usage-report.js +200 -99
  498. package/dist/runtime/waits.d.ts +125 -57
  499. package/dist/runtime/waits.js +431 -208
  500. package/dist/sandbox/job-ids.d.ts +10 -0
  501. package/dist/sandbox/job-ids.js +10 -0
  502. package/dist/sandbox/jobs.d.ts +41 -0
  503. package/dist/sandbox/jobs.js +113 -0
  504. package/dist/sandbox/leases.d.ts +39 -31
  505. package/dist/sandbox/leases.js +117 -257
  506. package/dist/sandbox/providers.d.ts +19 -0
  507. package/dist/sandbox/providers.js +38 -0
  508. package/dist/sandbox/sandbox.module.d.ts +8 -0
  509. package/dist/sandbox/sandbox.module.js +30 -0
  510. package/dist/sandbox/sandbox.service.d.ts +24 -29
  511. package/dist/sandbox/sandbox.service.js +106 -75
  512. package/dist/skills/catalog.d.ts +33 -20
  513. package/dist/skills/catalog.js +96 -53
  514. package/dist/skills/changes.controller.d.ts +4 -4
  515. package/dist/skills/changes.controller.js +15 -9
  516. package/dist/skills/changes.service.d.ts +28 -18
  517. package/dist/skills/changes.service.js +421 -364
  518. package/dist/skills/invocable.controller.d.ts +1 -1
  519. package/dist/skills/invocable.controller.js +8 -5
  520. package/dist/skills/invoke.d.ts +16 -15
  521. package/dist/skills/invoke.js +48 -17
  522. package/dist/skills/skills.controller.d.ts +1 -1
  523. package/dist/skills/skills.controller.js +11 -6
  524. package/dist/skills/skills.module.d.ts +6 -0
  525. package/dist/skills/skills.module.js +30 -0
  526. package/dist/skills/skills.service.d.ts +47 -30
  527. package/dist/skills/skills.service.js +221 -158
  528. package/dist/storage/job-ids.d.ts +6 -0
  529. package/dist/storage/job-ids.js +6 -0
  530. package/dist/storage/purge.d.ts +22 -7
  531. package/dist/storage/purge.js +55 -3
  532. package/dist/storage/storage.module.d.ts +6 -0
  533. package/dist/storage/storage.module.js +23 -0
  534. package/dist/storage/storage.service.d.ts +18 -4
  535. package/dist/storage/storage.service.js +44 -3
  536. package/dist/tools/approvals.controller.d.ts +1 -1
  537. package/dist/tools/approvals.controller.js +12 -8
  538. package/dist/tools/approvals.service.d.ts +27 -25
  539. package/dist/tools/approvals.service.js +324 -258
  540. package/dist/tools/breaker.d.ts +2 -2
  541. package/dist/tools/breaker.js +21 -3
  542. package/dist/tools/builtins/ask-user.d.ts +2 -2
  543. package/dist/tools/builtins/ask-user.js +1 -1
  544. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  545. package/dist/tools/builtins/builtin-tools.js +80 -0
  546. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  547. package/dist/tools/builtins/read-tool-output.js +1 -1
  548. package/dist/tools/builtins/sandbox/bash.js +2 -2
  549. package/dist/tools/builtins/sandbox/common.d.ts +7 -4
  550. package/dist/tools/builtins/sandbox/common.js +5 -3
  551. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  552. package/dist/tools/builtins/sandbox/edit.js +1 -1
  553. package/dist/tools/builtins/sandbox/glob.js +2 -2
  554. package/dist/tools/builtins/sandbox/grep.js +2 -2
  555. package/dist/tools/builtins/sandbox/read.js +1 -1
  556. package/dist/tools/builtins/sandbox/write.js +1 -1
  557. package/dist/tools/builtins/skill-load.d.ts +3 -3
  558. package/dist/tools/builtins/skill-load.js +1 -1
  559. package/dist/tools/canonical-json.d.ts +6 -0
  560. package/dist/tools/canonical-json.js +16 -0
  561. package/dist/tools/connector-content.controller.d.ts +1 -1
  562. package/dist/tools/connector-content.controller.js +11 -6
  563. package/dist/tools/connector-content.d.ts +12 -15
  564. package/dist/tools/connector-content.js +53 -18
  565. package/dist/tools/connectors.controller.d.ts +1 -1
  566. package/dist/tools/connectors.controller.js +21 -10
  567. package/dist/tools/connectors.service.d.ts +31 -13
  568. package/dist/tools/connectors.service.js +434 -344
  569. package/dist/tools/credentials.d.ts +17 -20
  570. package/dist/tools/credentials.js +55 -34
  571. package/dist/tools/drift.d.ts +29 -41
  572. package/dist/tools/drift.js +111 -79
  573. package/dist/tools/info.d.ts +12 -9
  574. package/dist/tools/info.js +33 -7
  575. package/dist/tools/job-ids.d.ts +13 -0
  576. package/dist/tools/job-ids.js +15 -0
  577. package/dist/tools/jobs.d.ts +24 -0
  578. package/dist/tools/jobs.js +69 -0
  579. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  580. package/dist/tools/oauth/flow-paths.js +38 -0
  581. package/dist/tools/oauth/flow.d.ts +30 -30
  582. package/dist/tools/oauth/flow.js +109 -81
  583. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  584. package/dist/tools/oauth/oauth.controller.js +12 -9
  585. package/dist/tools/oauth/tokens.d.ts +11 -3
  586. package/dist/tools/oauth/tokens.js +15 -14
  587. package/dist/tools/outputs.d.ts +13 -4
  588. package/dist/tools/outputs.js +47 -3
  589. package/dist/tools/pipeline.d.ts +62 -46
  590. package/dist/tools/pipeline.js +145 -64
  591. package/dist/tools/policy.d.ts +2 -2
  592. package/dist/tools/questions.controller.d.ts +1 -1
  593. package/dist/tools/questions.controller.js +8 -5
  594. package/dist/tools/questions.service.d.ts +25 -24
  595. package/dist/tools/questions.service.js +201 -142
  596. package/dist/tools/registry.d.ts +30 -20
  597. package/dist/tools/registry.js +73 -37
  598. package/dist/tools/specs.d.ts +5 -4
  599. package/dist/tools/specs.js +3 -1
  600. package/dist/tools/tools.module.d.ts +10 -0
  601. package/dist/tools/tools.module.js +91 -0
  602. package/dist/ui/call-extension.d.ts +16 -0
  603. package/dist/ui/call-extension.js +38 -0
  604. package/dist/ui/embed-token.d.ts +9 -5
  605. package/dist/ui/embed-token.js +34 -6
  606. package/dist/ui/ui-stream.d.ts +22 -17
  607. package/dist/ui/ui-stream.js +72 -12
  608. package/dist/ui/ui.module.d.ts +7 -0
  609. package/dist/ui/ui.module.js +28 -0
  610. package/dist/ui/views.controller.d.ts +14 -12
  611. package/dist/ui/views.controller.js +32 -25
  612. package/dist/ui/views.d.ts +9 -57
  613. package/dist/ui/views.js +43 -45
  614. package/package.json +11 -2
  615. package/dist/http/health.controller.d.ts +0 -26
  616. package/dist/http/health.controller.js +0 -79
  617. package/dist/http/tokens.d.ts +0 -131
  618. package/dist/http/tokens.js +0 -131
  619. package/dist/http/zod.pipe.d.ts +0 -8
  620. package/dist/http/zod.pipe.js +0 -14
  621. package/dist/identity/rate-limit.d.ts +0 -55
  622. package/dist/identity/rate-limit.js +0 -121
  623. package/dist/sandbox/lifecycle.d.ts +0 -21
  624. package/dist/sandbox/lifecycle.js +0 -68
  625. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  626. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,8 +1,27 @@
1
- import { DelayedError, Job, Queue, UnrecoverableError, Worker } from "bullmq";
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { getQueueToken } from "@nestjs/bullmq";
11
+ import { Inject, Injectable, Module, Optional } from "@nestjs/common";
12
+ import { DelayedError, Job, UnrecoverableError, } from "bullmq";
2
13
  import { sql } from "kysely";
3
14
  import { enabledExtensionsQuery } from "../extensions/enabled.js";
15
+ import { ExtensionsModule } from "../extensions/extensions.module.js";
4
16
  import { deepFreeze, errMsg } from "../extensions/hooks.js";
5
- import { bullConnection } from "./run-queue.js";
17
+ import { ExtensionHost } from "../extensions/host.js";
18
+ import { STALE_RECONCILE_PERIODS } from "../extensions/lifecycle-topics.js";
19
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
20
+ import { KernelDb } from "../infra/database/kernel-db.js";
21
+ import { LockService } from "../infra/lock/lock.service.js";
22
+ import { QueueModule } from "../infra/queue/queue.module.js";
23
+ import { LockedCron } from "../infra/schedule/locked-cron.decorator.js";
24
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
6
25
  /** Queue of `usage.report` deliveries (no `:` in the name). */
7
26
  export const USAGE_REPORT_QUEUE = "cap-kernel-usage-report";
8
27
  /** One job per `usage` event (no `:`: conversation ids are UUIDs, seq is a number). */
@@ -11,6 +30,8 @@ export const usageReportJobId = (conversationId, seq) => `usage-${conversationId
11
30
  export const USAGE_REPORT_ATTEMPTS = 6;
12
31
  /** Retry backoff: 2 s, doubling (2, 4, 8, 16, 32 s). */
13
32
  export const USAGE_REPORT_BACKOFF_MS = 2000;
33
+ /** Optional provider: the {@link UsageReportRetry} instead of the defaults above (tests). */
34
+ export const USAGE_REPORT_RETRY = Symbol("USAGE_REPORT_RETRY");
14
35
  /** Failed jobs (given up) are kept for inspection, at most {@link KEEP_FAILED_MAX} of them. */
15
36
  const KEEP_FAILED_S = 7 * 86_400;
16
37
  /** Upper bound on kept failed jobs (I-2): a long outage of a billing endpoint cannot grow Redis. */
@@ -22,10 +43,10 @@ const WARN_WINDOW_MS = 60_000;
22
43
  * ~1.1 usage events per second sustained for a day; dedupe needs the jobs only for the sweeper overlap.
23
44
  */
24
45
  const KEEP_COMPLETED_MAX = 100_000;
25
- /** Maintenance job of the sweeper (no `:`), its scheduler id and period. */
46
+ /** The sweeper's cron job name (no `:`; every minute, once across replicas). */
26
47
  export const USAGE_SWEEP_JOB = "usage-report-sweep";
27
- export const USAGE_SWEEP_SCHEDULER_ID = "usage-report-sweep-every";
28
- export const USAGE_SWEEP_EVERY_MS = 60_000;
48
+ /** The maintenance scheduler the sweep ran on before it became a `@LockedCron` (retired). */
49
+ export { USAGE_SWEEP_SCHEDULER_ID } from "./job-ids.js";
29
50
  /** The sweep leaves the newest events to the fast path (and to transactions still committing). */
30
51
  export const USAGE_SWEEP_LAG_MS = 30_000;
31
52
  /**
@@ -142,24 +163,74 @@ export function narrowPending(stored, failed) {
142
163
  * as are conversation title calls (`purpose: "title"`, no run: `runId` is "").
143
164
  * Single-step eval replays and judge requests log no usage: not reported (M7).
144
165
  */
145
- export class UsageReporter {
146
- d;
166
+ let UsageReporter = class UsageReporter {
167
+ kdb;
147
168
  queue;
148
- queueConn;
169
+ host;
170
+ config;
171
+ locks;
172
+ log;
173
+ retry;
149
174
  worker;
150
- workerConn;
151
175
  closed = false;
152
176
  stopping = new AbortController();
153
- constructor(d) {
154
- this.d = d;
177
+ constructor(kdb, queue,
178
+ /**
179
+ * The host's hook registry: handlers of the current local plugin generations (through
180
+ * inflight.run), and `has("usage.report")`, the in-process check that lets `enqueue` skip all
181
+ * I/O without handlers; and whether a plugin's current instance is active here.
182
+ */
183
+ host, config,
184
+ /** The warning throttle's markers (`capk:usage-warn:<plugin>:<kind>`, SET NX PX). */
185
+ locks, log, retry = {
186
+ attempts: USAGE_REPORT_ATTEMPTS,
187
+ backoffMs: USAGE_REPORT_BACKOFF_MS,
188
+ }) {
189
+ this.kdb = kdb;
190
+ this.queue = queue;
191
+ this.host = host;
192
+ this.config = config;
193
+ this.locks = locks;
194
+ this.log = log;
195
+ this.retry = retry;
196
+ queue.on("error", (err) => this.log.error("usage report queue error", { err }));
197
+ }
198
+ get db() {
199
+ return this.kdb.db;
200
+ }
201
+ get hooks() {
202
+ return this.host.hooks;
203
+ }
204
+ /**
205
+ * Whether the plugin's current instance is active on this replica (I-2): an active instance that
206
+ * registered no `usage.report` handler is not a subscriber, and its target is dropped.
207
+ */
208
+ isActive(plugin) {
209
+ return this.host.current(plugin) !== undefined;
210
+ }
211
+ /**
212
+ * Of these plugins, the ones no replica can serve right now (I-2): replicas report them (live
213
+ * `extension_replica_status` rows) and none has them loaded. Their targets are dropped at once
214
+ * instead of failing every attempt. See {@link queryUnservable}.
215
+ */
216
+ unservable(plugins) {
217
+ return queryUnservable(this.db, plugins, STALE_RECONCILE_PERIODS * this.config.get().extensionHost.reconcileIntervalSeconds);
218
+ }
219
+ /**
220
+ * Plugins that subscribe to `usage.report`, from deployment state (approved manifests in PG),
221
+ * not from this replica's loaded handlers. With `orgId`: only those the organization enabled.
222
+ * See {@link queryUsageSubscribers}.
223
+ */
224
+ subscribers(orgId) {
225
+ return queryUsageSubscribers(this.db, orgId);
155
226
  }
156
227
  jobOpts(conversationId, seq) {
157
228
  return {
158
229
  jobId: usageReportJobId(conversationId, seq),
159
- attempts: this.d.retry?.attempts ?? USAGE_REPORT_ATTEMPTS,
160
- backoff: { type: "exponential", delay: this.d.retry?.backoffMs ?? USAGE_REPORT_BACKOFF_MS },
230
+ attempts: this.retry.attempts,
231
+ backoff: { type: "exponential", delay: this.retry.backoffMs },
161
232
  removeOnComplete: {
162
- age: this.d.config().hooks.usageReportKeepHours * 3600,
233
+ age: this.config.get().hooks.usageReportKeepHours * 3600,
163
234
  count: KEEP_COMPLETED_MAX,
164
235
  },
165
236
  removeOnFail: { age: KEEP_FAILED_S, count: KEEP_FAILED_MAX },
@@ -174,15 +245,15 @@ export class UsageReporter {
174
245
  return;
175
246
  // M-2: no usage.report handler on this replica → no I/O at all. A plugin loaded only on other
176
247
  // replicas still gets the event: the sweeper re-offers it within about a minute and a half.
177
- if (!this.d.hooks.has("usage.report"))
248
+ if (!this.hooks.has("usage.report"))
178
249
  return;
179
250
  try {
180
- if ((await this.d.subscribers()).size === 0)
251
+ if ((await this.subscribers()).size === 0)
181
252
  return;
182
- await this.getQueue().add(JOB, { conversationId, seq }, this.jobOpts(conversationId, seq));
253
+ await this.queue.add(JOB, { conversationId, seq }, this.jobOpts(conversationId, seq));
183
254
  }
184
255
  catch (err) {
185
- this.d.log.warn("cannot enqueue usage report", { conversationId, seq, err });
256
+ this.log.warn("cannot enqueue usage report", { conversationId, seq, err });
186
257
  }
187
258
  }
188
259
  /**
@@ -195,20 +266,20 @@ export class UsageReporter {
195
266
  // unless a test fixes "now" (m-a, m-c)
196
267
  const to = opts.now !== undefined
197
268
  ? new Date(opts.now - USAGE_SWEEP_LAG_MS).toISOString()
198
- : (await sql `SELECT (now() - make_interval(secs => ${USAGE_SWEEP_LAG_MS / 1000}))::text AS to`.execute(this.d.db)).rows[0]?.to;
269
+ : (await sql `SELECT (now() - make_interval(secs => ${USAGE_SWEEP_LAG_MS / 1000}))::text AS to`.execute(this.db)).rows[0]?.to;
199
270
  if (to === undefined)
200
271
  return 0;
201
- const row = await this.d.db
272
+ const row = await this.db
202
273
  .selectFrom("usage_report_sweep")
203
274
  .select(sql `watermark::text`.as("watermark"))
204
275
  .where("id", "=", 1)
205
276
  .executeTakeFirst();
206
277
  const watermark = row?.watermark ?? to;
207
278
  let offered = 0;
208
- if ((await this.d.subscribers()).size > 0) {
279
+ if ((await this.subscribers()).size > 0) {
209
280
  let after;
210
281
  for (;;) {
211
- let q = this.d.db
282
+ let q = this.db
212
283
  .selectFrom("conversation_events")
213
284
  .select(["conversation_id", "seq", sql `created_at::text`.as("at")])
214
285
  .where("type", "=", "usage")
@@ -224,7 +295,7 @@ export class UsageReporter {
224
295
  .limit(SWEEP_PAGE)
225
296
  .execute();
226
297
  if (page.length > 0) {
227
- await this.getQueue().addBulk(page.map((r) => ({
298
+ await this.queue.addBulk(page.map((r) => ({
228
299
  name: JOB,
229
300
  data: { conversationId: r.conversation_id, seq: Number(r.seq) },
230
301
  opts: this.jobOpts(r.conversation_id, Number(r.seq)),
@@ -237,7 +308,7 @@ export class UsageReporter {
237
308
  after = { at: last.at, conv: last.conversation_id, seq: String(last.seq) };
238
309
  }
239
310
  }
240
- await this.d.db
311
+ await this.db
241
312
  .insertInto("usage_report_sweep")
242
313
  .values({ id: 1, watermark: sql `${to}::timestamptz` })
243
314
  .onConflict((oc) => oc.column("id").doUpdateSet({
@@ -247,75 +318,55 @@ export class UsageReporter {
247
318
  .execute();
248
319
  return offered;
249
320
  }
250
- /** Starts the worker (worker role only). Job lock and stalled detection follow the run queue. */
251
- startWorker() {
321
+ /**
322
+ * Starts consuming (worker role only): `worker` is the `@Processor` worker of
323
+ * {@link USAGE_REPORT_QUEUE} (built with the run queue's job lock and stalled detection).
324
+ */
325
+ startWorker(worker) {
252
326
  if (this.worker || this.closed)
253
327
  return;
254
- const { jobLockMs, stalledIntervalMs } = this.d.config().runtime;
255
- // the queue exists before any job runs: in-flight jobs fence and requeue through it, even on a
256
- // replica that never enqueued (m-b)
257
- this.getQueue();
258
- this.workerConn = bullConnection(this.d.redisUrl, this.d.log);
259
- this.worker = new Worker(USAGE_REPORT_QUEUE, (j, t) => this.process(j, t), {
260
- connection: this.workerConn,
261
- concurrency: this.d.config().hooks.usageReportConcurrency,
262
- lockDuration: jobLockMs,
263
- stalledInterval: stalledIntervalMs,
264
- maxStalledCount: 3,
265
- });
266
- this.worker.on("error", (err) => this.d.log.error("usage report worker error", { err }));
267
- this.worker.on("failed", (j, err) => {
268
- if (!j || err instanceof DelayedError || err.name === "DelayedError")
269
- return;
270
- // a definite drop (N-3) was already warned about (throttled); the failed job is the trace
271
- if (err instanceof UnrecoverableError || err.name === "UnrecoverableError")
272
- return;
273
- const final = j.attemptsMade >= (j.opts.attempts ?? 1);
274
- const fields = {
275
- jobId: j.id,
276
- conversationId: j.data.conversationId,
277
- seq: j.data.seq,
278
- pending: j.data.pending,
279
- attempt: j.attemptsMade,
280
- error: err.message,
281
- };
282
- if (final)
283
- this.d.log.error("usage report given up after retries", fields);
284
- else
285
- this.d.log.warn("usage report attempt failed; retrying", fields);
286
- });
328
+ this.worker = worker;
329
+ void worker.run().catch((err) => this.log.error("usage report worker error", { err }));
330
+ }
331
+ /** The worker's `error` event. */
332
+ onError(err) {
333
+ this.log.error("usage report worker error", { err });
287
334
  }
288
- /** Stops the worker (in-flight calls are aborted, their jobs requeued) and the queue. */
335
+ /** A job failed (the worker's `failed` event): logs retries and the final failure. */
336
+ onFailed(j, err) {
337
+ if (!j || err instanceof DelayedError || err.name === "DelayedError")
338
+ return;
339
+ // a definite drop (N-3) was already warned about (throttled); the failed job is the trace
340
+ if (err instanceof UnrecoverableError || err.name === "UnrecoverableError")
341
+ return;
342
+ const final = j.attemptsMade >= (j.opts.attempts ?? 1);
343
+ const fields = {
344
+ jobId: j.id,
345
+ conversationId: j.data.conversationId,
346
+ seq: j.data.seq,
347
+ pending: j.data.pending,
348
+ attempt: j.attemptsMade,
349
+ error: err.message,
350
+ };
351
+ if (final)
352
+ this.log.error("usage report given up after retries", fields);
353
+ else
354
+ this.log.warn("usage report attempt failed; retrying", fields);
355
+ }
356
+ /**
357
+ * Stops: no more enqueues, in-flight calls are aborted (their jobs requeued) and the worker
358
+ * closes. The queue itself closes with the application.
359
+ */
289
360
  async stop() {
290
361
  this.closed = true;
291
362
  this.stopping.abort();
292
363
  const w = this.worker;
293
364
  this.worker = undefined;
294
- // the worker first: its in-flight jobs still use the queue to fence and requeue
295
365
  await w?.close().catch(() => { });
296
- const q = this.queue;
297
- this.queue = undefined;
298
- await q?.close().catch(() => { });
299
- for (const c of [this.workerConn, this.queueConn]) {
300
- if (c)
301
- await c.quit().catch(() => c.disconnect());
302
- }
303
- this.workerConn = undefined;
304
- this.queueConn = undefined;
305
- }
306
- getQueue() {
307
- if (!this.queue) {
308
- if (this.closed)
309
- throw new Error("usage report queue is closed");
310
- this.queueConn = bullConnection(this.d.redisUrl, this.d.log);
311
- this.queue = new Queue(USAGE_REPORT_QUEUE, { connection: this.queueConn });
312
- this.queue.on("error", (err) => this.d.log.error("usage report queue error", { err }));
313
- }
314
- return this.queue;
315
366
  }
316
367
  /** The payload of one usage event, read from the log; null when the event no longer exists. */
317
368
  async payloadOf(conversationId, seq) {
318
- const row = await this.d.db
369
+ const row = await this.db
319
370
  .selectFrom("conversation_events as e")
320
371
  .innerJoin("conversations as c", "c.id", "e.conversation_id")
321
372
  .leftJoin("runs as r", "r.id", "e.run_id")
@@ -377,7 +428,7 @@ export class UsageReporter {
377
428
  * dropped can stay, so a plugin another execution delivered never comes back.
378
429
  */
379
430
  async writePending(j, next, dropped) {
380
- const fresh = j.id === undefined ? undefined : await Job.fromId(this.getQueue(), j.id);
431
+ const fresh = j.id === undefined ? undefined : await Job.fromId(this.queue, j.id);
381
432
  const data = fresh?.data;
382
433
  const stored = data?.pending ?? j.data.pending;
383
434
  const storedDropped = data?.dropped ?? j.data.dropped ?? {};
@@ -392,12 +443,13 @@ export class UsageReporter {
392
443
  await j.updateData(out);
393
444
  j.data = out;
394
445
  }
446
+ /** One delivery job (the `@Processor` of {@link USAGE_REPORT_QUEUE} calls it). */
395
447
  async process(j, token) {
396
448
  const { conversationId, seq } = j.data;
397
449
  const payload = await this.payloadOf(conversationId, seq);
398
450
  if (payload === null)
399
451
  return; // conversation deleted meanwhile: nothing to report
400
- const subscribers = await this.d.subscribers(payload.orgId);
452
+ const subscribers = await this.subscribers(payload.orgId);
401
453
  if (j.data.pending === undefined) {
402
454
  // first attempt: the targets come from deployment state, recorded so later attempts (on any
403
455
  // replica) deliver exactly the plugins that have not succeeded yet
@@ -410,15 +462,15 @@ export class UsageReporter {
410
462
  if (targets.length === 0)
411
463
  return;
412
464
  const byPlugin = new Map();
413
- for (const h of this.d.hooks.handlers("usage.report")) {
465
+ for (const h of this.hooks.handlers("usage.report")) {
414
466
  byPlugin.set(h.plugin, [...(byPlugin.get(h.plugin) ?? []), h.handler]);
415
467
  }
416
468
  const frozen = deepFreeze(structuredClone(payload));
417
- const timeoutMs = this.d.config().hooks.timeoutMs;
469
+ const timeoutMs = this.config.get().hooks.timeoutMs;
418
470
  const results = await Promise.allSettled(targets.map(async (plugin) => {
419
471
  const handlers = byPlugin.get(plugin);
420
472
  if (!handlers || handlers.length === 0) {
421
- throw new Undeliverable(plugin, this.d.isActive?.(plugin) ? "no_handler" : "not_loaded");
473
+ throw new Undeliverable(plugin, this.isActive(plugin) ? "no_handler" : "not_loaded");
422
474
  }
423
475
  for (const h of handlers)
424
476
  await this.call(h, frozen, timeoutMs);
@@ -442,7 +494,7 @@ export class UsageReporter {
442
494
  }
443
495
  failed.push(plugin);
444
496
  if (!this.stopping.signal.aborted) {
445
- this.d.log.warn("usage.report delivery to a plugin failed", {
497
+ this.log.warn("usage.report delivery to a plugin failed", {
446
498
  plugin,
447
499
  eventId: payload.eventId,
448
500
  error: errMsg(r.reason),
@@ -453,7 +505,7 @@ export class UsageReporter {
453
505
  // target is dropped only when it is definitely unservable; unknown ones fail the job as before.
454
506
  const final = j.attemptsMade + 1 >= (j.opts.attempts ?? 1);
455
507
  const gone = final && notHere.length > 0 && !this.stopping.signal.aborted
456
- ? await this.unservable(notHere)
508
+ ? await this.unservableOrNone(notHere)
457
509
  : new Set();
458
510
  for (const plugin of notHere) {
459
511
  if (gone.has(plugin))
@@ -495,15 +547,13 @@ export class UsageReporter {
495
547
  }
496
548
  throw new UnrecoverableError(`usage.report delivered to the rest;${droppedNote(traced)}`);
497
549
  }
498
- /** {@link UsageReporterDeps.unservable}; a lookup failure counts as "unknown" (keep retrying). */
499
- async unservable(plugins) {
500
- if (!this.d.unservable)
501
- return new Set();
550
+ /** {@link unservable}; a lookup failure counts as "unknown" (keep retrying). */
551
+ async unservableOrNone(plugins) {
502
552
  try {
503
- return await this.d.unservable(plugins);
553
+ return await this.unservable(plugins);
504
554
  }
505
555
  catch (err) {
506
- this.d.log.warn("cannot read plugin replica status for usage.report", { err });
556
+ this.log.warn("cannot read plugin replica status for usage.report", { err });
507
557
  return new Set();
508
558
  }
509
559
  }
@@ -511,15 +561,13 @@ export class UsageReporter {
511
561
  async warnOnce(plugin, kind, msg, fields) {
512
562
  let first = true;
513
563
  try {
514
- this.getQueue();
515
- const key = `capk:usage-warn:${plugin}:${kind}`;
516
- first = (await this.queueConn?.set(key, "1", "PX", WARN_WINDOW_MS, "NX")) !== null;
564
+ first = await this.locks.lease(`capk:usage-warn:${plugin}:${kind}`, "1", WARN_WINDOW_MS);
517
565
  }
518
566
  catch {
519
567
  // Redis unavailable: log anyway rather than hiding it
520
568
  }
521
569
  if (first)
522
- this.d.log.warn(msg, fields);
570
+ this.log.warn(msg, fields);
523
571
  }
524
572
  /** One handler call with its own signal (timeout or replica stop aborts it); rejects on either. */
525
573
  async call(h, payload, timeoutMs) {
@@ -547,4 +595,57 @@ export class UsageReporter {
547
595
  this.stopping.signal.removeEventListener("abort", onStop);
548
596
  }
549
597
  }
550
- }
598
+ };
599
+ UsageReporter = __decorate([
600
+ Injectable(),
601
+ __param(0, Inject(KernelDb)),
602
+ __param(1, Inject(getQueueToken(USAGE_REPORT_QUEUE))),
603
+ __param(2, Inject(ExtensionHost)),
604
+ __param(3, Inject(KernelConfigService)),
605
+ __param(4, Inject(LockService)),
606
+ __param(5, Inject(KERNEL_LOGGER)),
607
+ __param(6, Optional()),
608
+ __param(6, Inject(USAGE_REPORT_RETRY))
609
+ ], UsageReporter);
610
+ export { UsageReporter };
611
+ /**
612
+ * The usage sweeper (R13), every minute, once across replicas: {@link UsageReporter.sweep}.
613
+ * Replaces the maintenance scheduler `usage-report-sweep-every` (retired at worker start).
614
+ */
615
+ let UsageSweepJob = class UsageSweepJob {
616
+ reporter;
617
+ lockService;
618
+ log;
619
+ constructor(reporter, lockService, log) {
620
+ this.reporter = reporter;
621
+ this.lockService = lockService;
622
+ this.log = log;
623
+ }
624
+ async run() {
625
+ await this.reporter.sweep();
626
+ }
627
+ };
628
+ __decorate([
629
+ LockedCron("* * * * *", { name: USAGE_SWEEP_JOB })
630
+ ], UsageSweepJob.prototype, "run", null);
631
+ UsageSweepJob = __decorate([
632
+ Injectable(),
633
+ __param(0, Inject(UsageReporter)),
634
+ __param(1, Inject(LockService)),
635
+ __param(2, Inject(KERNEL_LOGGER))
636
+ ], UsageSweepJob);
637
+ export { UsageSweepJob };
638
+ /**
639
+ * `usage.report` delivery: the producer on every role; the consumer and the sweep ({@link UsageSweepJob})
640
+ * on the worker role (`WorkerModule`).
641
+ */
642
+ let UsageReportModule = class UsageReportModule {
643
+ };
644
+ UsageReportModule = __decorate([
645
+ Module({
646
+ imports: [ExtensionsModule, QueueModule.registerQueue(USAGE_REPORT_QUEUE)],
647
+ providers: [UsageReporter],
648
+ exports: [UsageReporter],
649
+ })
650
+ ], UsageReportModule);
651
+ export { UsageReportModule };