@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3

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 (670) 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 +187 -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 +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  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 +39 -8
  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 +326 -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/claude/agents.js +13 -10
  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 +31 -14
  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 +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -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;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Method decorator: runs the method in a database transaction (REQUIRED by default: join the one
3
+ * in context, else open it; a throw rolls back, a normal return commits). The class must inject
4
+ * the host as a property named `txHost`:
5
+ *
6
+ * ```ts
7
+ * constructor(@Inject(TransactionHost) readonly txHost: TransactionHost) {}
8
+ * ```
9
+ *
10
+ * Use `{ propagation: "requires_new" }` for a transaction independent of the caller's, and
11
+ * `{ propagation: "mandatory" }` for a method whose correctness depends on a lock its caller holds
12
+ * (it joins the caller's transaction and throws when called outside one).
13
+ */
14
+ export function Transactional(opts = {}) {
15
+ return (_target, _key, descriptor) => {
16
+ const original = descriptor.value;
17
+ descriptor.value = function (...args) {
18
+ const host = this.txHost;
19
+ if (!host) {
20
+ throw new Error("@Transactional() needs the class to inject `TransactionHost` as `txHost` " +
21
+ "(`@Inject(TransactionHost) readonly txHost: TransactionHost`).");
22
+ }
23
+ return host.run(() => original.apply(this, args), opts);
24
+ };
25
+ return descriptor;
26
+ };
27
+ }