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