@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
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Waits for `p` at most `ms`: resolves true when it resolved in time, false when the time ran out
3
+ * (`p` keeps running; nothing is aborted). A rejection of `p` in time is thrown. The one "wait at
4
+ * most N ms" of the kernel's stop path.
5
+ */
6
+ export async function waitWithin(p, ms) {
7
+ let timer;
8
+ const timeout = new Promise((resolve) => {
9
+ timer = setTimeout(() => resolve(false), Math.max(0, ms));
10
+ timer.unref();
11
+ });
12
+ try {
13
+ return await Promise.race([p.then(() => true), timeout]);
14
+ }
15
+ finally {
16
+ clearTimeout(timer);
17
+ }
18
+ }
19
+ /**
20
+ * Waits for an infra resource to close at shutdown (the bus subscriber, Redis, the pool) at most
21
+ * `budgetMs`, the share of the total stop budget left (`GracefulShutdown.remainingMs()`): a close
22
+ * that does not finish in time (Redis unreachable, a client never released) is abandoned with a
23
+ * warning, so the shutdown never hangs on it. Resolves true when `p` settled successfully in time.
24
+ */
25
+ export async function closeWithin(label, p, budgetMs, log) {
26
+ try {
27
+ const done = await waitWithin(p, budgetMs);
28
+ if (!done)
29
+ log.warn("shutdown step timed out", { step: label });
30
+ return done;
31
+ }
32
+ catch (err) {
33
+ log.warn("shutdown step failed", { step: label, err });
34
+ return false;
35
+ }
36
+ }
@@ -0,0 +1,13 @@
1
+ import { type DynamicModule } from "@nestjs/common";
2
+ import type { KernelConfig } from "../../config/schema.js";
3
+ export interface ConfigModuleOptions {
4
+ /** Environment overrides re-applied on reload; default `process.env`. */
5
+ env?: NodeJS.ProcessEnv;
6
+ }
7
+ /**
8
+ * Global: `KernelConfigService` for the startup config and the master `KEYRING`. Needs
9
+ * `LoggingModule` in the same app.
10
+ */
11
+ export declare class ConfigModule {
12
+ static forRoot(config: KernelConfig, opts?: ConfigModuleOptions): DynamicModule;
13
+ }
@@ -0,0 +1,39 @@
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 ConfigModule_1;
8
+ import { Global, Module } from "@nestjs/common";
9
+ import { createKeyring } from "../../ctx/secrets.js";
10
+ import { KERNEL_CONFIG_INPUT, KEYRING } from "../tokens.js";
11
+ import { KernelConfigService } from "./kernel-config.service.js";
12
+ /**
13
+ * Global: `KernelConfigService` for the startup config and the master `KEYRING`. Needs
14
+ * `LoggingModule` in the same app.
15
+ */
16
+ let ConfigModule = ConfigModule_1 = class ConfigModule {
17
+ static forRoot(config, opts = {}) {
18
+ return {
19
+ module: ConfigModule_1,
20
+ global: true,
21
+ providers: [
22
+ { provide: KERNEL_CONFIG_INPUT, useValue: { config, env: opts.env } },
23
+ KernelConfigService,
24
+ {
25
+ // the master key is not hot: the keyring of the startup config
26
+ provide: KEYRING,
27
+ useFactory: () => createKeyring(Buffer.from(config.masterKey, "base64"), config.masterKeyPrevious.map((k) => Buffer.from(k, "base64"))),
28
+ },
29
+ ],
30
+ exports: [KernelConfigService, KEYRING],
31
+ };
32
+ }
33
+ };
34
+ ConfigModule = ConfigModule_1 = __decorate([
35
+ Global(),
36
+ Module({})
37
+ // biome-ignore lint/complexity/noStaticOnlyClass: a Nest dynamic module
38
+ ], ConfigModule);
39
+ export { ConfigModule };
@@ -0,0 +1,25 @@
1
+ import { type KernelConfig } from "../../config/schema.js";
2
+ import type { KernelLogger } from "../../log.js";
3
+ export interface KernelConfigInput {
4
+ /** The validated startup config. */
5
+ config: KernelConfig;
6
+ /** The environment overrides re-applied on every reload (default `process.env`). */
7
+ env?: NodeJS.ProcessEnv;
8
+ }
9
+ export type ConfigChangeListener = (next: KernelConfig, changed: string[]) => void;
10
+ /** The current kernel config: `get()` always returns the latest hot-applied value. */
11
+ export declare class KernelConfigService {
12
+ private readonly log;
13
+ private current;
14
+ private readonly env;
15
+ private readonly listeners;
16
+ constructor(input: KernelConfigInput, log: KernelLogger);
17
+ get(): KernelConfig;
18
+ /** Subscribes to applied changes (hot fields only); returns the unsubscribe function. */
19
+ onChange(listener: ConfigChangeListener): () => void;
20
+ /**
21
+ * Hot reload: re-validates the raw config; only hot fields are applied, other changes warn and
22
+ * list the keys needing a restart; a validation failure keeps the current config.
23
+ */
24
+ apply(raw: unknown): void;
25
+ }
@@ -0,0 +1,126 @@
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 { Inject, Injectable } from "@nestjs/common";
11
+ import { changedPaths, configFields, getPath, secretValues, setPath } from "../../config/fields.js";
12
+ import { resolveConfig } from "../../config/load.js";
13
+ import { KernelConfigSchema } from "../../config/schema.js";
14
+ import { KERNEL_CONFIG_INPUT, KERNEL_LOGGER } from "../tokens.js";
15
+ /**
16
+ * Appliers of the hot-reloadable fields: the key is a dotted path marked `hot` in the schema. A
17
+ * hot field without an applier here makes the service refuse to start, so "marked hot but never
18
+ * takes effect" cannot happen.
19
+ */
20
+ const HOT_APPLIERS = {
21
+ "log.level": (k, v) => k.log.setLevel(String(v)),
22
+ // The runtime reads the concurrency cap through the config service on every quota request.
23
+ "runtime.orgConcurrency": () => { },
24
+ // Eval org concurrency is read the same way at every quota request.
25
+ "evals.orgConcurrency": () => { },
26
+ // Login methods and trusted identity sources are read on every request.
27
+ "auth.loginSources": () => { },
28
+ "auth.trustedIdentitySources": () => { },
29
+ // The hook registry reads the time limit on every run.
30
+ "hooks.timeoutMs": () => { },
31
+ // SandboxService reads the shared-lease cap at every acquisition.
32
+ "sandbox.maxConcurrentCommands": () => { },
33
+ // Sub-agent limits are read at every dispatch, child step and tool resolution.
34
+ "subagents.maxConcurrentPerRun": () => { },
35
+ "subagents.maxDispatchesPerRun": () => { },
36
+ "subagents.maxTokensPerRun": () => { },
37
+ };
38
+ const HOT_PATHS = configFields(KernelConfigSchema)
39
+ .filter((f) => f.meta?.hot)
40
+ .map((f) => f.path);
41
+ const errMsg = (e) => (e instanceof Error ? e.message : String(e));
42
+ /** The current kernel config: `get()` always returns the latest hot-applied value. */
43
+ let KernelConfigService = class KernelConfigService {
44
+ log;
45
+ current;
46
+ env;
47
+ listeners = new Set();
48
+ constructor(input, log) {
49
+ this.log = log;
50
+ for (const p of HOT_PATHS) {
51
+ if (!HOT_APPLIERS[p])
52
+ throw new Error(`config field ${p} is marked hot but has no applier`);
53
+ }
54
+ this.current = input.config;
55
+ this.env = input.env ?? process.env;
56
+ log.setLevel(input.config.log.level);
57
+ log.addSecrets(secretValues(KernelConfigSchema, input.config));
58
+ }
59
+ get() {
60
+ return this.current;
61
+ }
62
+ /** Subscribes to applied changes (hot fields only); returns the unsubscribe function. */
63
+ onChange(listener) {
64
+ this.listeners.add(listener);
65
+ return () => {
66
+ this.listeners.delete(listener);
67
+ };
68
+ }
69
+ /**
70
+ * Hot reload: re-validates the raw config; only hot fields are applied, other changes warn and
71
+ * list the keys needing a restart; a validation failure keeps the current config.
72
+ */
73
+ apply(raw) {
74
+ const log = this.log;
75
+ let next;
76
+ try {
77
+ next = resolveConfig(raw, this.env);
78
+ }
79
+ catch (e) {
80
+ log.error("config reload rejected; keeping current config", { error: errMsg(e) });
81
+ return;
82
+ }
83
+ log.addSecrets(secretValues(KernelConfigSchema, next));
84
+ const changed = changedPaths(KernelConfigSchema, this.current, next);
85
+ if (changed.length === 0)
86
+ return;
87
+ const hot = changed.filter((p) => HOT_PATHS.includes(p));
88
+ const restart = changed.filter((p) => !HOT_PATHS.includes(p));
89
+ const updated = structuredClone(this.current);
90
+ const applied = [];
91
+ for (const p of hot) {
92
+ try {
93
+ HOT_APPLIERS[p]({ log }, getPath(next, p));
94
+ setPath(updated, p, getPath(next, p));
95
+ applied.push(p);
96
+ }
97
+ catch (e) {
98
+ log.error("config reload: cannot apply field; keeping current value", {
99
+ key: p,
100
+ error: errMsg(e),
101
+ });
102
+ }
103
+ }
104
+ this.current = updated;
105
+ if (applied.length > 0) {
106
+ log.info("config reloaded", { applied });
107
+ for (const l of [...this.listeners]) {
108
+ try {
109
+ l(updated, applied);
110
+ }
111
+ catch (e) {
112
+ log.error("config change listener threw", { error: errMsg(e) });
113
+ }
114
+ }
115
+ }
116
+ if (restart.length > 0) {
117
+ log.warn("config changed but requires restart to take effect", { keys: restart });
118
+ }
119
+ }
120
+ };
121
+ KernelConfigService = __decorate([
122
+ Injectable(),
123
+ __param(0, Inject(KERNEL_CONFIG_INPUT)),
124
+ __param(1, Inject(KERNEL_LOGGER))
125
+ ], KernelConfigService);
126
+ export { KernelConfigService };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Runs a side effect (enqueue a job, publish on the bus) only after the root transaction commits;
3
+ * a rollback drops it; it runs outside any transaction. Outside a transaction it runs immediately.
4
+ * A failing hook is logged and never fails the committed call.
5
+ */
6
+ export declare function afterCommit(fn: () => void | Promise<void>): void;
@@ -0,0 +1,9 @@
1
+ import { queueAfterCommit } from "./transaction-host.js";
2
+ /**
3
+ * Runs a side effect (enqueue a job, publish on the bus) only after the root transaction commits;
4
+ * a rollback drops it; it runs outside any transaction. Outside a transaction it runs immediately.
5
+ * A failing hook is logged and never fails the committed call.
6
+ */
7
+ export function afterCommit(fn) {
8
+ queueAfterCommit(fn);
9
+ }
@@ -0,0 +1,25 @@
1
+ import { type DynamicModule } from "@nestjs/common";
2
+ import type { Kysely } from "kysely";
3
+ import type { KernelLogger } from "../../log.js";
4
+ import { GracefulShutdown } from "../lifecycle/graceful-shutdown.service.js";
5
+ /**
6
+ * Closes the pool at the end of the shutdown (`GracefulShutdown.closeLast`: after everything that
7
+ * uses it has stopped, together with Redis), within what is left of the total stop budget.
8
+ */
9
+ export declare class PoolLifecycle {
10
+ private readonly pool;
11
+ private readonly log;
12
+ private readonly shutdown;
13
+ constructor(pool: Kysely<any>, log: KernelLogger, shutdown: GracefulShutdown);
14
+ close(): Promise<void>;
15
+ }
16
+ /** Global: the Kysely pool, `TransactionHost`, the context-aware `KernelDb` and `XactLock`. */
17
+ export declare class DatabaseModule {
18
+ /** The pool `db.*` of the config describes, closed at shutdown ({@link PoolLifecycle}). */
19
+ static forRoot(): DynamicModule;
20
+ /**
21
+ * The handles over a pool the caller owns and closes (`@capybara-hq/testing`'s
22
+ * `createLocalAccount`, which has a pool and no config): the context never closes it.
23
+ */
24
+ static borrowing(pool: Kysely<any>): DynamicModule;
25
+ }
@@ -0,0 +1,90 @@
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 { Global, Inject, Injectable, Module, } from "@nestjs/common";
11
+ import { createDb } from "../../db/pool.js";
12
+ import { closeWithin } from "../close-within.js";
13
+ import { KernelConfigService } from "../config/kernel-config.service.js";
14
+ import { GracefulShutdownModule } from "../lifecycle/graceful-shutdown.module.js";
15
+ import { GracefulShutdown } from "../lifecycle/graceful-shutdown.service.js";
16
+ import { KERNEL_LOGGER, KERNEL_POOL } from "../tokens.js";
17
+ import { KernelDb } from "./kernel-db.js";
18
+ import { TransactionHost } from "./transaction-host.js";
19
+ import { XactLock } from "./xact-lock.js";
20
+ /**
21
+ * Closes the pool at the end of the shutdown (`GracefulShutdown.closeLast`: after everything that
22
+ * uses it has stopped, together with Redis), within what is left of the total stop budget.
23
+ */
24
+ let PoolLifecycle = class PoolLifecycle {
25
+ pool;
26
+ log;
27
+ shutdown;
28
+ constructor(
29
+ // biome-ignore lint/suspicious/noExplicitAny: the pool carries no schema types
30
+ pool, log, shutdown) {
31
+ this.pool = pool;
32
+ this.log = log;
33
+ this.shutdown = shutdown;
34
+ shutdown.closeLast(() => this.close());
35
+ }
36
+ async close() {
37
+ await closeWithin("pg", this.pool.destroy(), this.shutdown.remainingMs(), this.log);
38
+ }
39
+ };
40
+ PoolLifecycle = __decorate([
41
+ Injectable(),
42
+ __param(0, Inject(KERNEL_POOL)),
43
+ __param(1, Inject(KERNEL_LOGGER)),
44
+ __param(2, Inject(GracefulShutdown))
45
+ ], PoolLifecycle);
46
+ export { PoolLifecycle };
47
+ /** The handles over the pool, the same for both pool sources. */
48
+ function databaseModule(pool, imports) {
49
+ return {
50
+ module: DatabaseModule,
51
+ global: true,
52
+ imports,
53
+ providers: [...pool, TransactionHost, KernelDb, XactLock],
54
+ exports: [KERNEL_POOL, TransactionHost, KernelDb, XactLock],
55
+ };
56
+ }
57
+ /** Global: the Kysely pool, `TransactionHost`, the context-aware `KernelDb` and `XactLock`. */
58
+ let DatabaseModule = class DatabaseModule {
59
+ /** The pool `db.*` of the config describes, closed at shutdown ({@link PoolLifecycle}). */
60
+ static forRoot() {
61
+ return databaseModule([
62
+ {
63
+ provide: KERNEL_POOL,
64
+ inject: [KernelConfigService, KERNEL_LOGGER],
65
+ useFactory: (config, log) => {
66
+ const { db } = config.get();
67
+ return createDb(db.url, db.poolMax, (err) => log.error("pg idle client error", { err }), {
68
+ connectTimeoutMs: db.connectTimeoutMs,
69
+ onClientError: (err) => log.warn("pg client error", { err }),
70
+ });
71
+ },
72
+ },
73
+ PoolLifecycle,
74
+ ], [GracefulShutdownModule]);
75
+ }
76
+ /**
77
+ * The handles over a pool the caller owns and closes (`@capybara-hq/testing`'s
78
+ * `createLocalAccount`, which has a pool and no config): the context never closes it.
79
+ */
80
+ // biome-ignore lint/suspicious/noExplicitAny: the pool carries no schema types
81
+ static borrowing(pool) {
82
+ return databaseModule([{ provide: KERNEL_POOL, useValue: pool }], []);
83
+ }
84
+ };
85
+ DatabaseModule = __decorate([
86
+ Global(),
87
+ Module({})
88
+ // biome-ignore lint/complexity/noStaticOnlyClass: a Nest dynamic module
89
+ ], DatabaseModule);
90
+ export { DatabaseModule };
@@ -0,0 +1,22 @@
1
+ import type { Kysely, Transaction } from "kysely";
2
+ import { type KernelDatabase } from "../../db/kernel-schema.js";
3
+ import { TransactionHost } from "./transaction-host.js";
4
+ type View = Kysely<KernelDatabase>;
5
+ /** The Kysely query entry points services use; each resolves to the context transaction or the pool. */
6
+ declare const QUERY_METHODS: readonly ["selectFrom", "selectNoFrom", "insertInto", "replaceInto", "updateTable", "deleteFrom", "mergeInto", "with", "withRecursive", "executeQuery"];
7
+ type QueryMethod = (typeof QUERY_METHODS)[number];
8
+ export interface KernelDb extends Pick<View, QueryMethod | "fn"> {
9
+ }
10
+ /**
11
+ * What services inject instead of a Kysely instance: every call resolves to the transaction of
12
+ * the current async context (opened by `@Transactional()`), else to the pool; the `capybara`
13
+ * schema view applies either way. No `trx` parameters are passed around.
14
+ */
15
+ export declare class KernelDb {
16
+ readonly pool: Kysely<any>;
17
+ private readonly txHost;
18
+ constructor(pool: Kysely<any>, txHost: TransactionHost);
19
+ /** The kernel-schema handle of the current context (transaction or pool). */
20
+ get db(): View | Transaction<KernelDatabase>;
21
+ }
22
+ export {};
@@ -0,0 +1,65 @@
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 { Inject, Injectable } from "@nestjs/common";
11
+ import { kernelDb } from "../../db/kernel-schema.js";
12
+ import { KERNEL_POOL } from "../tokens.js";
13
+ import { TransactionHost } from "./transaction-host.js";
14
+ /** The Kysely query entry points services use; each resolves to the context transaction or the pool. */
15
+ const QUERY_METHODS = [
16
+ "selectFrom",
17
+ "selectNoFrom",
18
+ "insertInto",
19
+ "replaceInto",
20
+ "updateTable",
21
+ "deleteFrom",
22
+ "mergeInto",
23
+ "with",
24
+ "withRecursive",
25
+ "executeQuery",
26
+ ];
27
+ /**
28
+ * What services inject instead of a Kysely instance: every call resolves to the transaction of
29
+ * the current async context (opened by `@Transactional()`), else to the pool; the `capybara`
30
+ * schema view applies either way. No `trx` parameters are passed around.
31
+ */
32
+ let KernelDb = class KernelDb {
33
+ pool;
34
+ txHost;
35
+ constructor(
36
+ // biome-ignore lint/suspicious/noExplicitAny: the pool carries no schema types
37
+ pool, txHost) {
38
+ this.pool = pool;
39
+ this.txHost = txHost;
40
+ }
41
+ /** The kernel-schema handle of the current context (transaction or pool). */
42
+ get db() {
43
+ return kernelDb(this.txHost.current() ?? this.pool);
44
+ }
45
+ };
46
+ KernelDb = __decorate([
47
+ Injectable()
48
+ // biome-ignore lint/suspicious/noUnsafeDeclarationMerging: types the prototype-attached query methods
49
+ ,
50
+ __param(0, Inject(KERNEL_POOL)),
51
+ __param(1, Inject(TransactionHost))
52
+ ], KernelDb);
53
+ export { KernelDb };
54
+ for (const name of QUERY_METHODS) {
55
+ Object.defineProperty(KernelDb.prototype, name, {
56
+ value(...args) {
57
+ return this.db[name](...args);
58
+ },
59
+ });
60
+ }
61
+ Object.defineProperty(KernelDb.prototype, "fn", {
62
+ get() {
63
+ return this.db.fn;
64
+ },
65
+ });
@@ -0,0 +1,50 @@
1
+ import type { AccessMode, IsolationLevel, Kysely, Transaction } from "kysely";
2
+ import type { KernelLogger } from "../../log.js";
3
+ type AfterCommitHook = () => void | Promise<void>;
4
+ interface TransactionStore {
5
+ pool: Kysely<any>;
6
+ trx: Transaction<any>;
7
+ /** Side effects queued by `afterCommit`, run after this root transaction commits. */
8
+ hooks: AfterCommitHook[];
9
+ /** Set once the transaction settled: continuations that outlive it must not use it. */
10
+ done: boolean;
11
+ }
12
+ export type Propagation = "required" | "requires_new" | "mandatory";
13
+ export interface TransactionOptions {
14
+ /**
15
+ * `required` (default): join the transaction in context, else open one. `requires_new`: a
16
+ * separate transaction on the pool, whatever the context. `mandatory`: join the transaction in
17
+ * context, and throw outside one (for methods whose correctness depends on a lock the caller
18
+ * took in its transaction).
19
+ */
20
+ propagation?: Propagation;
21
+ /** Isolation level of a transaction this call opens (ignored when it joins one). */
22
+ isolationLevel?: IsolationLevel;
23
+ /** Access mode of a transaction this call opens (ignored when it joins one). */
24
+ accessMode?: AccessMode;
25
+ }
26
+ /** Queues `fn` on the current live root transaction; with none open, runs it at once. */
27
+ export declare function queueAfterCommit(fn: AfterCommitHook): void;
28
+ /** The transaction store in the current async context (used by `afterCommit`). */
29
+ export declare function currentStore(): TransactionStore | undefined;
30
+ /**
31
+ * Runs `fn` with no transaction in context, whatever the caller had open. Queue processors and
32
+ * scheduled jobs start from here: a job outlives the transaction that enqueued it and must never
33
+ * join (or write through) a transaction that may already be committed or rolled back.
34
+ */
35
+ export declare function runOutsideTransaction<T>(fn: () => T): T;
36
+ export declare class TransactionHost {
37
+ private readonly pool;
38
+ private readonly log;
39
+ constructor(pool: Kysely<any>, log: KernelLogger);
40
+ /** The transaction of the current async context on this pool, if any. */
41
+ current(): Transaction<any> | undefined;
42
+ /**
43
+ * Runs `fn` in a transaction: a throw rolls back, a return commits. REQUIRED (default) joins the
44
+ * transaction in context; `requires_new` always opens its own on the pool; `mandatory` joins the
45
+ * one in context and throws when there is none. Hooks queued by `afterCommit` run after the
46
+ * root's COMMIT, outside any transaction, and are dropped on rollback.
47
+ */
48
+ run<T>(fn: () => Promise<T>, opts?: TransactionOptions): Promise<T>;
49
+ }
50
+ export {};
@@ -0,0 +1,125 @@
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
+ // Ported from octok-platform libs/common/src/typeorm/transaction-context.ts (owner-approved, 2026-10-28).
11
+ // Adapted to Kysely: the context holds a Kysely `Transaction` instead of a TypeORM QueryRunner.
12
+ import { AsyncLocalStorage } from "node:async_hooks";
13
+ import { Inject, Injectable } from "@nestjs/common";
14
+ import { KERNEL_LOGGER, KERNEL_POOL } from "../tokens.js";
15
+ /** One store for the process: `afterCommit` (a free function) reads it without a host instance. */
16
+ const storage = new AsyncLocalStorage();
17
+ /** Logger for hook failures outside a transaction; set by `TransactionHost`, console until then. */
18
+ let hookLog = {
19
+ error: (msg, fields) => console.error(`[afterCommit] ${msg}`, fields ?? ""),
20
+ };
21
+ const errMsg = (e) => (e instanceof Error ? e.message : String(e));
22
+ /** Queues `fn` on the current live root transaction; with none open, runs it at once. */
23
+ export function queueAfterCommit(fn) {
24
+ const store = liveStore();
25
+ if (store) {
26
+ store.hooks.push(fn);
27
+ return;
28
+ }
29
+ try {
30
+ const r = fn();
31
+ if (r instanceof Promise) {
32
+ r.catch((e) => hookLog.error("afterCommit hook failed", { error: errMsg(e) }));
33
+ }
34
+ }
35
+ catch (e) {
36
+ hookLog.error("afterCommit hook failed", { error: errMsg(e) });
37
+ }
38
+ }
39
+ /** The store of the current context unless its transaction already finished. */
40
+ function liveStore() {
41
+ const store = storage.getStore();
42
+ return store && !store.done ? store : undefined;
43
+ }
44
+ /** The transaction store in the current async context (used by `afterCommit`). */
45
+ export function currentStore() {
46
+ return liveStore();
47
+ }
48
+ /**
49
+ * Runs `fn` with no transaction in context, whatever the caller had open. Queue processors and
50
+ * scheduled jobs start from here: a job outlives the transaction that enqueued it and must never
51
+ * join (or write through) a transaction that may already be committed or rolled back.
52
+ */
53
+ export function runOutsideTransaction(fn) {
54
+ return storage.exit(fn);
55
+ }
56
+ let TransactionHost = class TransactionHost {
57
+ pool;
58
+ log;
59
+ constructor(
60
+ // biome-ignore lint/suspicious/noExplicitAny: the pool carries no schema types
61
+ pool, log) {
62
+ this.pool = pool;
63
+ this.log = log;
64
+ hookLog = log;
65
+ }
66
+ /** The transaction of the current async context on this pool, if any. */
67
+ // biome-ignore lint/suspicious/noExplicitAny: the pool carries no schema types
68
+ current() {
69
+ const store = liveStore();
70
+ return store?.pool === this.pool ? store.trx : undefined;
71
+ }
72
+ /**
73
+ * Runs `fn` in a transaction: a throw rolls back, a return commits. REQUIRED (default) joins the
74
+ * transaction in context; `requires_new` always opens its own on the pool; `mandatory` joins the
75
+ * one in context and throws when there is none. Hooks queued by `afterCommit` run after the
76
+ * root's COMMIT, outside any transaction, and are dropped on rollback.
77
+ */
78
+ async run(fn, opts = {}) {
79
+ const propagation = opts.propagation ?? "required";
80
+ if (propagation === "mandatory") {
81
+ if (!this.current()) {
82
+ throw new Error('propagation "mandatory": no transaction in context (the caller must open one and ' +
83
+ "hold the locks this method relies on)");
84
+ }
85
+ return fn();
86
+ }
87
+ if (propagation === "required" && this.current())
88
+ return fn();
89
+ const hooks = [];
90
+ let store;
91
+ let result;
92
+ try {
93
+ let builder = this.pool.transaction();
94
+ if (opts.isolationLevel !== undefined)
95
+ builder = builder.setIsolationLevel(opts.isolationLevel);
96
+ if (opts.accessMode !== undefined)
97
+ builder = builder.setAccessMode(opts.accessMode);
98
+ result = await builder.execute((trx) => {
99
+ store = { pool: this.pool, trx, hooks, done: false };
100
+ return storage.run(store, fn);
101
+ });
102
+ }
103
+ finally {
104
+ if (store)
105
+ store.done = true;
106
+ }
107
+ for (const hook of hooks) {
108
+ try {
109
+ // outside any transaction: a requires_new nested in an outer one must not have its side
110
+ // effects join (and roll back with) the outer transaction
111
+ await runOutsideTransaction(hook);
112
+ }
113
+ catch (e) {
114
+ this.log.error("afterCommit hook failed", { error: errMsg(e) });
115
+ }
116
+ }
117
+ return result;
118
+ }
119
+ };
120
+ TransactionHost = __decorate([
121
+ Injectable(),
122
+ __param(0, Inject(KERNEL_POOL)),
123
+ __param(1, Inject(KERNEL_LOGGER))
124
+ ], TransactionHost);
125
+ export { TransactionHost };
@@ -0,0 +1,15 @@
1
+ import type { TransactionOptions } from "./transaction-host.js";
2
+ /**
3
+ * Method decorator: runs the method in a database transaction (REQUIRED by default: join the one
4
+ * in context, else open it; a throw rolls back, a normal return commits). The class must inject
5
+ * the host as a property named `txHost`:
6
+ *
7
+ * ```ts
8
+ * constructor(@Inject(TransactionHost) readonly txHost: TransactionHost) {}
9
+ * ```
10
+ *
11
+ * Use `{ propagation: "requires_new" }` for a transaction independent of the caller's, and
12
+ * `{ propagation: "mandatory" }` for a method whose correctness depends on a lock its caller holds
13
+ * (it joins the caller's transaction and throws when called outside one).
14
+ */
15
+ export declare function Transactional(opts?: TransactionOptions): (_target: object, _key: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;