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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +179 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +261 -329
  21. package/dist/agents/definition.d.ts +8 -0
  22. package/dist/agents/definition.js +8 -0
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +20 -4
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +323 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/cli.d.ts +3 -2
  42. package/dist/catalog/cli.js +13 -31
  43. package/dist/catalog/job-ids.d.ts +15 -0
  44. package/dist/catalog/job-ids.js +15 -0
  45. package/dist/catalog/jobs.d.ts +27 -0
  46. package/dist/catalog/jobs.js +70 -0
  47. package/dist/catalog/locks.d.ts +24 -0
  48. package/dist/catalog/locks.js +63 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  50. package/dist/catalog/marketplaces.controller.js +22 -11
  51. package/dist/catalog/marketplaces.service.d.ts +30 -13
  52. package/dist/catalog/marketplaces.service.js +330 -256
  53. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  54. package/dist/catalog/org-catalog.controller.js +29 -14
  55. package/dist/catalog/org-catalog.service.d.ts +32 -198
  56. package/dist/catalog/org-catalog.service.js +159 -400
  57. package/dist/catalog/plugin-import.d.ts +73 -34
  58. package/dist/catalog/plugin-import.js +356 -217
  59. package/dist/catalog/plugin-install.d.ts +83 -41
  60. package/dist/catalog/plugin-install.js +421 -269
  61. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  62. package/dist/catalog/plugin-upgrade.js +407 -282
  63. package/dist/catalog/requests.service.d.ts +27 -15
  64. package/dist/catalog/requests.service.js +201 -145
  65. package/dist/catalog/upgrade-targets.d.ts +4 -7
  66. package/dist/channels/actions.d.ts +6 -4
  67. package/dist/channels/actions.js +1 -1
  68. package/dist/channels/cards.d.ts +2 -2
  69. package/dist/channels/channels.module.d.ts +40 -0
  70. package/dist/channels/channels.module.js +128 -0
  71. package/dist/channels/connections.controller.d.ts +1 -1
  72. package/dist/channels/connections.controller.js +11 -6
  73. package/dist/channels/connections.service.d.ts +43 -21
  74. package/dist/channels/connections.service.js +236 -131
  75. package/dist/channels/inbound.d.ts +34 -38
  76. package/dist/channels/inbound.js +107 -41
  77. package/dist/channels/job-ids.d.ts +10 -0
  78. package/dist/channels/job-ids.js +10 -0
  79. package/dist/channels/jobs.d.ts +85 -0
  80. package/dist/channels/jobs.js +157 -0
  81. package/dist/channels/outbound.d.ts +60 -82
  82. package/dist/channels/outbound.js +165 -194
  83. package/dist/channels/supervisor.d.ts +88 -46
  84. package/dist/channels/supervisor.js +230 -132
  85. package/dist/channels/threads.d.ts +29 -8
  86. package/dist/channels/threads.js +71 -13
  87. package/dist/channels/webhook.d.ts +20 -14
  88. package/dist/channels/webhook.js +51 -20
  89. package/dist/config/load.d.ts +3 -2
  90. package/dist/config/load.js +3 -2
  91. package/dist/config/nacos-source.js +11 -2
  92. package/dist/config/schema.d.ts +1 -0
  93. package/dist/config/schema.js +10 -4
  94. package/dist/conversations/access.d.ts +29 -0
  95. package/dist/conversations/access.js +86 -0
  96. package/dist/conversations/artifacts.d.ts +10 -10
  97. package/dist/conversations/artifacts.js +35 -9
  98. package/dist/conversations/attachments.controller.d.ts +1 -1
  99. package/dist/conversations/attachments.controller.js +8 -6
  100. package/dist/conversations/attachments.module.d.ts +7 -0
  101. package/dist/conversations/attachments.module.js +25 -0
  102. package/dist/conversations/attachments.service.d.ts +30 -22
  103. package/dist/conversations/attachments.service.js +119 -46
  104. package/dist/conversations/conversations.controller.d.ts +8 -7
  105. package/dist/conversations/conversations.controller.js +59 -29
  106. package/dist/conversations/conversations.module.d.ts +8 -0
  107. package/dist/conversations/conversations.module.js +69 -0
  108. package/dist/conversations/conversations.service.d.ts +40 -38
  109. package/dist/conversations/conversations.service.js +130 -140
  110. package/dist/conversations/event-log.d.ts +28 -18
  111. package/dist/conversations/event-log.js +74 -27
  112. package/dist/conversations/files.d.ts +10 -10
  113. package/dist/conversations/files.js +37 -11
  114. package/dist/conversations/idem-keys.d.ts +5 -0
  115. package/dist/conversations/idem-keys.js +5 -0
  116. package/dist/conversations/job-ids.d.ts +6 -0
  117. package/dist/conversations/job-ids.js +6 -0
  118. package/dist/conversations/outputs-read.d.ts +11 -11
  119. package/dist/conversations/outputs-read.js +31 -7
  120. package/dist/conversations/queue.d.ts +48 -56
  121. package/dist/conversations/queue.js +13 -289
  122. package/dist/conversations/queue.service.d.ts +60 -0
  123. package/dist/conversations/queue.service.js +343 -0
  124. package/dist/conversations/sandbox-status.d.ts +13 -10
  125. package/dist/conversations/sandbox-status.js +36 -8
  126. package/dist/conversations/titles.d.ts +71 -24
  127. package/dist/conversations/titles.js +159 -63
  128. package/dist/ctx/bus.js +9 -3
  129. package/dist/ctx/create-ctx.d.ts +6 -0
  130. package/dist/ctx/create-ctx.js +7 -9
  131. package/dist/ctx/lock.d.ts +7 -3
  132. package/dist/ctx/lock.js +9 -20
  133. package/dist/ctx/secrets.d.ts +10 -2
  134. package/dist/ctx/secrets.js +7 -3
  135. package/dist/db/kernel-schema.d.ts +2 -2
  136. package/dist/db/pool.d.ts +5 -0
  137. package/dist/db/pool.js +1 -0
  138. package/dist/errors.d.ts +1 -0
  139. package/dist/errors.js +1 -0
  140. package/dist/evals/budget.d.ts +42 -21
  141. package/dist/evals/budget.js +114 -62
  142. package/dist/evals/evals.module.d.ts +31 -0
  143. package/dist/evals/evals.module.js +114 -0
  144. package/dist/evals/jobs.d.ts +20 -0
  145. package/dist/evals/jobs.js +45 -0
  146. package/dist/evals/run-replay.d.ts +56 -8
  147. package/dist/evals/run-replay.js +140 -80
  148. package/dist/evals/runs.controller.d.ts +1 -1
  149. package/dist/evals/runs.controller.js +17 -8
  150. package/dist/evals/runs.service.d.ts +23 -45
  151. package/dist/evals/runs.service.js +245 -234
  152. package/dist/evals/sets.controller.d.ts +1 -1
  153. package/dist/evals/sets.controller.js +17 -8
  154. package/dist/evals/sets.service.d.ts +22 -6
  155. package/dist/evals/sets.service.js +248 -194
  156. package/dist/evals/snapshot.d.ts +2 -2
  157. package/dist/evals/step-replay.d.ts +2 -2
  158. package/dist/evals/step-replay.js +1 -1
  159. package/dist/evals/trajectory.controller.d.ts +1 -1
  160. package/dist/evals/trajectory.controller.js +11 -7
  161. package/dist/evals/trajectory.service.d.ts +5 -4
  162. package/dist/evals/trajectory.service.js +30 -7
  163. package/dist/evals/worker.d.ts +44 -27
  164. package/dist/evals/worker.js +220 -121
  165. package/dist/extensions/admin-ops.d.ts +61 -33
  166. package/dist/extensions/admin-ops.js +248 -154
  167. package/dist/extensions/admin-view.d.ts +38 -27
  168. package/dist/extensions/admin-view.js +126 -55
  169. package/dist/extensions/approvals.d.ts +12 -8
  170. package/dist/extensions/approvals.js +73 -46
  171. package/dist/extensions/blobs.d.ts +27 -10
  172. package/dist/extensions/blobs.js +111 -45
  173. package/dist/extensions/bootstrap.d.ts +58 -31
  174. package/dist/extensions/bootstrap.js +175 -121
  175. package/dist/extensions/cli.d.ts +20 -10
  176. package/dist/extensions/cli.js +41 -96
  177. package/dist/extensions/config-issues.d.ts +7 -0
  178. package/dist/extensions/config-issues.js +31 -0
  179. package/dist/extensions/deployment-config-store.d.ts +49 -0
  180. package/dist/extensions/deployment-config-store.js +133 -0
  181. package/dist/extensions/deployment-config.d.ts +58 -67
  182. package/dist/extensions/deployment-config.js +202 -230
  183. package/dist/extensions/enabled.d.ts +5 -5
  184. package/dist/extensions/extensions.module.d.ts +8 -0
  185. package/dist/extensions/extensions.module.js +77 -0
  186. package/dist/extensions/hooks.d.ts +3 -2
  187. package/dist/extensions/hooks.js +1 -1
  188. package/dist/extensions/host.d.ts +72 -68
  189. package/dist/extensions/host.js +191 -152
  190. package/dist/extensions/installs.d.ts +49 -16
  191. package/dist/extensions/installs.js +128 -32
  192. package/dist/extensions/job-ids.d.ts +6 -0
  193. package/dist/extensions/job-ids.js +6 -0
  194. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  195. package/dist/extensions/lifecycle-topics.js +18 -0
  196. package/dist/extensions/lifecycle.d.ts +35 -47
  197. package/dist/extensions/lifecycle.js +103 -39
  198. package/dist/extensions/locks.d.ts +33 -0
  199. package/dist/extensions/locks.js +86 -0
  200. package/dist/extensions/migrate-lock.d.ts +3 -4
  201. package/dist/extensions/org-config.controller.d.ts +1 -1
  202. package/dist/extensions/org-config.controller.js +8 -5
  203. package/dist/extensions/org-config.d.ts +48 -46
  204. package/dist/extensions/org-config.js +284 -226
  205. package/dist/extensions/registry.d.ts +50 -2
  206. package/dist/extensions/registry.js +89 -4
  207. package/dist/extensions/sources.d.ts +12 -8
  208. package/dist/extensions/sources.js +34 -13
  209. package/dist/files/files.module.d.ts +3 -0
  210. package/dist/files/files.module.js +22 -0
  211. package/dist/files/previewers.controller.d.ts +7 -2
  212. package/dist/files/previewers.controller.js +17 -9
  213. package/dist/files/previewers.d.ts +13 -18
  214. package/dist/files/previewers.js +83 -36
  215. package/dist/http/adapter.d.ts +3 -0
  216. package/dist/http/adapter.js +25 -0
  217. package/dist/http/api.module.d.ts +3 -110
  218. package/dist/http/api.module.js +47 -355
  219. package/dist/http/app.d.ts +11 -15
  220. package/dist/http/app.js +17 -62
  221. package/dist/http/error-filter.module.d.ts +5 -0
  222. package/dist/http/error-filter.module.js +18 -0
  223. package/dist/http/error.filter.js +2 -2
  224. package/dist/identity/accounts.d.ts +82 -29
  225. package/dist/identity/accounts.js +294 -175
  226. package/dist/identity/api-tokens.d.ts +11 -7
  227. package/dist/identity/api-tokens.js +71 -44
  228. package/dist/identity/audit.d.ts +7 -4
  229. package/dist/identity/audit.js +5 -1
  230. package/dist/identity/auth.controller.d.ts +11 -10
  231. package/dist/identity/auth.controller.js +31 -25
  232. package/dist/identity/auth.guard.d.ts +3 -3
  233. package/dist/identity/auth.guard.js +6 -4
  234. package/dist/identity/binding.d.ts +9 -11
  235. package/dist/identity/binding.js +41 -13
  236. package/dist/identity/enterprise-admin.d.ts +18 -12
  237. package/dist/identity/enterprise-admin.js +67 -13
  238. package/dist/identity/external-identity-lock.d.ts +17 -0
  239. package/dist/identity/external-identity-lock.js +39 -0
  240. package/dist/identity/external.d.ts +19 -15
  241. package/dist/identity/external.js +163 -125
  242. package/dist/identity/identity.module.d.ts +6 -0
  243. package/dist/identity/identity.module.js +56 -0
  244. package/dist/identity/me.controller.d.ts +16 -15
  245. package/dist/identity/me.controller.js +37 -31
  246. package/dist/identity/sessions.d.ts +12 -10
  247. package/dist/identity/sessions.js +74 -42
  248. package/dist/identity/settings.d.ts +20 -14
  249. package/dist/identity/settings.js +85 -57
  250. package/dist/identity/sso.controller.d.ts +7 -7
  251. package/dist/identity/sso.controller.js +13 -9
  252. package/dist/identity/sso.d.ts +9 -12
  253. package/dist/identity/sso.js +54 -24
  254. package/dist/inbox/inbox.module.d.ts +3 -0
  255. package/dist/inbox/inbox.module.js +22 -0
  256. package/dist/inbox/inbox.service.d.ts +7 -9
  257. package/dist/inbox/inbox.service.js +32 -11
  258. package/dist/index.d.ts +16 -11
  259. package/dist/index.js +9 -6
  260. package/dist/infra/cache/cache.module.d.ts +3 -0
  261. package/dist/infra/cache/cache.module.js +16 -0
  262. package/dist/infra/cache/cache.service.d.ts +21 -0
  263. package/dist/infra/cache/cache.service.js +80 -0
  264. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  265. package/dist/infra/cache/cacheable.decorator.js +83 -0
  266. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  267. package/dist/infra/cli/kernel-cli.module.js +165 -0
  268. package/dist/infra/close-within.d.ts +15 -0
  269. package/dist/infra/close-within.js +36 -0
  270. package/dist/infra/config/config.module.d.ts +13 -0
  271. package/dist/infra/config/config.module.js +39 -0
  272. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  273. package/dist/infra/config/kernel-config.service.js +126 -0
  274. package/dist/infra/database/after-commit.d.ts +6 -0
  275. package/dist/infra/database/after-commit.js +9 -0
  276. package/dist/infra/database/database.module.d.ts +25 -0
  277. package/dist/infra/database/database.module.js +90 -0
  278. package/dist/infra/database/kernel-db.d.ts +22 -0
  279. package/dist/infra/database/kernel-db.js +65 -0
  280. package/dist/infra/database/transaction-host.d.ts +50 -0
  281. package/dist/infra/database/transaction-host.js +125 -0
  282. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  283. package/dist/infra/database/transactional.decorator.js +27 -0
  284. package/dist/infra/database/xact-lock.d.ts +17 -0
  285. package/dist/infra/database/xact-lock.js +43 -0
  286. package/dist/infra/events/kernel-events.d.ts +96 -0
  287. package/dist/infra/events/kernel-events.js +65 -0
  288. package/dist/infra/health/health.controller.d.ts +26 -0
  289. package/dist/infra/health/health.controller.js +104 -0
  290. package/dist/infra/health/health.module.d.ts +9 -0
  291. package/dist/infra/health/health.module.js +24 -0
  292. package/dist/infra/health/health.options.d.ts +10 -0
  293. package/dist/infra/health/health.options.js +15 -0
  294. package/dist/infra/health/shutdown-state.d.ts +6 -0
  295. package/dist/infra/health/shutdown-state.js +2 -0
  296. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  297. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  300. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  301. package/dist/infra/lifecycle/process-guards.js +86 -0
  302. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  303. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  304. package/dist/infra/lock/key-template.d.ts +13 -0
  305. package/dist/infra/lock/key-template.js +46 -0
  306. package/dist/infra/lock/lock.module.d.ts +3 -0
  307. package/dist/infra/lock/lock.module.js +16 -0
  308. package/dist/infra/lock/lock.service.d.ts +120 -0
  309. package/dist/infra/lock/lock.service.js +343 -0
  310. package/dist/infra/lock/shared-lease.d.ts +44 -0
  311. package/dist/infra/lock/shared-lease.js +121 -0
  312. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  313. package/dist/infra/lock/with-lock.decorator.js +49 -0
  314. package/dist/infra/logging/logging.module.d.ts +16 -0
  315. package/dist/infra/logging/logging.module.js +34 -0
  316. package/dist/infra/queue/configured-processor.d.ts +18 -0
  317. package/dist/infra/queue/configured-processor.js +23 -0
  318. package/dist/infra/queue/job-failure.d.ts +18 -0
  319. package/dist/infra/queue/job-failure.js +26 -0
  320. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  321. package/dist/infra/queue/queue-shutdown.js +81 -0
  322. package/dist/infra/queue/queue.module.d.ts +16 -0
  323. package/dist/infra/queue/queue.module.js +61 -0
  324. package/dist/infra/queue/redis-connection.d.ts +7 -0
  325. package/dist/infra/queue/redis-connection.js +18 -0
  326. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  327. package/dist/infra/queue/retired-schedulers.js +9 -0
  328. package/dist/infra/queue/run-job.d.ts +16 -0
  329. package/dist/infra/queue/run-job.js +19 -0
  330. package/dist/infra/redis/redis.module.d.ts +24 -0
  331. package/dist/infra/redis/redis.module.js +87 -0
  332. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  333. package/dist/infra/schedule/cron-tick.js +25 -0
  334. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  335. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  336. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  337. package/dist/infra/schedule/locked-interval.js +190 -0
  338. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  339. package/dist/infra/schedule/locked-tick.js +137 -0
  340. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  341. package/dist/infra/schedule/schedule.module.js +27 -0
  342. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  343. package/dist/infra/schedule/scheduled-runs.js +163 -0
  344. package/dist/infra/swagger/swagger.d.ts +16 -0
  345. package/dist/infra/swagger/swagger.js +31 -0
  346. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  347. package/dist/infra/throttler/credential-throttler.js +77 -0
  348. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  349. package/dist/infra/throttler/named-throttlers.js +119 -0
  350. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  351. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  352. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  353. package/dist/infra/throttler/throttler.guard.js +68 -0
  354. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  355. package/dist/infra/throttler/throttler.module.js +53 -0
  356. package/dist/infra/tokens.d.ts +15 -0
  357. package/dist/infra/tokens.js +15 -0
  358. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  359. package/dist/infra/validation/create-zod-dto.js +35 -0
  360. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  361. package/dist/infra/validation/parse-with-zod.js +12 -0
  362. package/dist/infra/validation/validation.module.d.ts +3 -0
  363. package/dist/infra/validation/validation.module.js +16 -0
  364. package/dist/infra/validation/zod-params.d.ts +7 -0
  365. package/dist/infra/validation/zod-params.js +42 -0
  366. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  367. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  368. package/dist/kernel.d.ts +9 -244
  369. package/dist/kernel.js +8 -1305
  370. package/dist/kernel.module.d.ts +17 -0
  371. package/dist/kernel.module.js +136 -0
  372. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  373. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  374. package/dist/lifecycle/tokens.d.ts +3 -0
  375. package/dist/lifecycle/tokens.js +3 -0
  376. package/dist/log-context.d.ts +2 -0
  377. package/dist/log-context.js +4 -0
  378. package/dist/models/models.module.d.ts +3 -0
  379. package/dist/models/models.module.js +24 -0
  380. package/dist/models/prices.d.ts +8 -2
  381. package/dist/models/prices.js +65 -37
  382. package/dist/models/purposes.controller.d.ts +1 -1
  383. package/dist/models/purposes.controller.js +5 -6
  384. package/dist/models/purposes.d.ts +35 -13
  385. package/dist/models/purposes.js +101 -51
  386. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  387. package/dist/orgs/directory-sync.controller.js +2 -2
  388. package/dist/orgs/directory-sync.d.ts +61 -31
  389. package/dist/orgs/directory-sync.js +212 -125
  390. package/dist/orgs/invitations.controller.d.ts +8 -8
  391. package/dist/orgs/invitations.controller.js +27 -26
  392. package/dist/orgs/invitations.service.d.ts +12 -9
  393. package/dist/orgs/invitations.service.js +130 -92
  394. package/dist/orgs/job-ids.d.ts +8 -0
  395. package/dist/orgs/job-ids.js +8 -0
  396. package/dist/orgs/members.service.d.ts +19 -12
  397. package/dist/orgs/members.service.js +161 -117
  398. package/dist/orgs/offboarding.d.ts +54 -57
  399. package/dist/orgs/offboarding.js +161 -71
  400. package/dist/orgs/org-lock.d.ts +28 -19
  401. package/dist/orgs/org-lock.js +81 -35
  402. package/dist/orgs/org.guard.d.ts +1 -1
  403. package/dist/orgs/org.guard.js +2 -2
  404. package/dist/orgs/orgs.controller.d.ts +13 -13
  405. package/dist/orgs/orgs.controller.js +29 -17
  406. package/dist/orgs/orgs.module.d.ts +6 -0
  407. package/dist/orgs/orgs.module.js +68 -0
  408. package/dist/orgs/orgs.service.d.ts +30 -19
  409. package/dist/orgs/orgs.service.js +139 -86
  410. package/dist/orgs/settings.controller.d.ts +1 -1
  411. package/dist/orgs/settings.controller.js +8 -6
  412. package/dist/orgs/settings.service.d.ts +14 -8
  413. package/dist/orgs/settings.service.js +75 -46
  414. package/dist/overrides.d.ts +56 -0
  415. package/dist/overrides.js +30 -0
  416. package/dist/roles/gateway-role.d.ts +43 -0
  417. package/dist/roles/gateway-role.js +98 -0
  418. package/dist/roles/gateway.module.d.ts +8 -0
  419. package/dist/roles/gateway.module.js +28 -0
  420. package/dist/roles/worker-role.d.ts +63 -0
  421. package/dist/roles/worker-role.js +144 -0
  422. package/dist/roles/worker.module.d.ts +14 -0
  423. package/dist/roles/worker.module.js +90 -0
  424. package/dist/runtime/abort.js +19 -2
  425. package/dist/runtime/checkpointer.d.ts +8 -3
  426. package/dist/runtime/checkpointer.js +87 -55
  427. package/dist/runtime/conversation-lock.d.ts +20 -11
  428. package/dist/runtime/conversation-lock.js +62 -72
  429. package/dist/runtime/hook-calls.d.ts +3 -3
  430. package/dist/runtime/hook-calls.js +1 -6
  431. package/dist/runtime/job-ids.d.ts +10 -0
  432. package/dist/runtime/job-ids.js +10 -0
  433. package/dist/runtime/langgraph-loop.js +1 -1
  434. package/dist/runtime/loop.d.ts +7 -0
  435. package/dist/runtime/loop.js +14 -0
  436. package/dist/runtime/maintenance-queue.d.ts +10 -0
  437. package/dist/runtime/maintenance-queue.js +10 -0
  438. package/dist/runtime/maintenance.d.ts +45 -74
  439. package/dist/runtime/maintenance.js +139 -137
  440. package/dist/runtime/model-call.d.ts +7 -4
  441. package/dist/runtime/model-call.js +24 -57
  442. package/dist/runtime/providers.d.ts +17 -6
  443. package/dist/runtime/providers.js +66 -25
  444. package/dist/runtime/quota.d.ts +17 -3
  445. package/dist/runtime/quota.js +27 -2
  446. package/dist/runtime/retired-schedulers.d.ts +7 -0
  447. package/dist/runtime/retired-schedulers.js +31 -0
  448. package/dist/runtime/run-control.d.ts +33 -0
  449. package/dist/runtime/run-control.js +77 -0
  450. package/dist/runtime/run-finish.d.ts +26 -17
  451. package/dist/runtime/run-finish.js +98 -51
  452. package/dist/runtime/run-jobs.d.ts +48 -0
  453. package/dist/runtime/run-jobs.js +95 -0
  454. package/dist/runtime/run-processors.d.ts +60 -0
  455. package/dist/runtime/run-processors.js +185 -0
  456. package/dist/runtime/run-queue.d.ts +32 -57
  457. package/dist/runtime/run-queue.js +291 -295
  458. package/dist/runtime/run-steps.d.ts +39 -0
  459. package/dist/runtime/run-steps.js +96 -0
  460. package/dist/runtime/run-worker.d.ts +121 -75
  461. package/dist/runtime/run-worker.js +340 -226
  462. package/dist/runtime/runtime.module.d.ts +10 -0
  463. package/dist/runtime/runtime.module.js +112 -0
  464. package/dist/runtime/step-log.d.ts +40 -0
  465. package/dist/runtime/step-log.js +94 -0
  466. package/dist/runtime/stream.controller.d.ts +5 -8
  467. package/dist/runtime/stream.controller.js +14 -12
  468. package/dist/runtime/stream.d.ts +24 -6
  469. package/dist/runtime/stream.js +78 -7
  470. package/dist/runtime/subagents/child.d.ts +3 -44
  471. package/dist/runtime/subagents/child.js +0 -79
  472. package/dist/runtime/subagents/definition.d.ts +4 -4
  473. package/dist/runtime/subagents/definition.js +2 -2
  474. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  475. package/dist/runtime/subagents/dispatch.js +135 -140
  476. package/dist/runtime/subagents/limits.d.ts +9 -4
  477. package/dist/runtime/subagents/limits.js +4 -2
  478. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  479. package/dist/runtime/subagents/org-agents.js +1 -1
  480. package/dist/runtime/subagents/progress.d.ts +2 -2
  481. package/dist/runtime/subagents/roster.d.ts +3 -3
  482. package/dist/runtime/subagents/roster.js +1 -1
  483. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  484. package/dist/runtime/subagents/skill-fork.js +16 -5
  485. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  486. package/dist/runtime/subagents/subagents.service.js +101 -0
  487. package/dist/runtime/usage-report.d.ts +94 -52
  488. package/dist/runtime/usage-report.js +200 -100
  489. package/dist/runtime/waits.d.ts +125 -57
  490. package/dist/runtime/waits.js +431 -208
  491. package/dist/sandbox/job-ids.d.ts +10 -0
  492. package/dist/sandbox/job-ids.js +10 -0
  493. package/dist/sandbox/jobs.d.ts +41 -0
  494. package/dist/sandbox/jobs.js +113 -0
  495. package/dist/sandbox/leases.d.ts +39 -31
  496. package/dist/sandbox/leases.js +117 -257
  497. package/dist/sandbox/providers.d.ts +19 -0
  498. package/dist/sandbox/providers.js +38 -0
  499. package/dist/sandbox/sandbox.module.d.ts +8 -0
  500. package/dist/sandbox/sandbox.module.js +30 -0
  501. package/dist/sandbox/sandbox.service.d.ts +24 -29
  502. package/dist/sandbox/sandbox.service.js +106 -75
  503. package/dist/skills/catalog.d.ts +33 -20
  504. package/dist/skills/catalog.js +96 -53
  505. package/dist/skills/changes.controller.d.ts +4 -4
  506. package/dist/skills/changes.controller.js +15 -9
  507. package/dist/skills/changes.service.d.ts +28 -18
  508. package/dist/skills/changes.service.js +421 -364
  509. package/dist/skills/invocable.controller.d.ts +1 -1
  510. package/dist/skills/invocable.controller.js +8 -5
  511. package/dist/skills/invoke.d.ts +16 -15
  512. package/dist/skills/invoke.js +48 -17
  513. package/dist/skills/skills.controller.d.ts +1 -1
  514. package/dist/skills/skills.controller.js +11 -6
  515. package/dist/skills/skills.module.d.ts +6 -0
  516. package/dist/skills/skills.module.js +30 -0
  517. package/dist/skills/skills.service.d.ts +47 -30
  518. package/dist/skills/skills.service.js +221 -158
  519. package/dist/storage/job-ids.d.ts +6 -0
  520. package/dist/storage/job-ids.js +6 -0
  521. package/dist/storage/purge.d.ts +22 -7
  522. package/dist/storage/purge.js +55 -3
  523. package/dist/storage/storage.module.d.ts +6 -0
  524. package/dist/storage/storage.module.js +23 -0
  525. package/dist/storage/storage.service.d.ts +18 -4
  526. package/dist/storage/storage.service.js +44 -3
  527. package/dist/tools/approvals.controller.d.ts +1 -1
  528. package/dist/tools/approvals.controller.js +12 -8
  529. package/dist/tools/approvals.service.d.ts +27 -25
  530. package/dist/tools/approvals.service.js +324 -258
  531. package/dist/tools/breaker.d.ts +2 -2
  532. package/dist/tools/breaker.js +21 -3
  533. package/dist/tools/builtins/ask-user.d.ts +2 -2
  534. package/dist/tools/builtins/ask-user.js +1 -1
  535. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  536. package/dist/tools/builtins/builtin-tools.js +80 -0
  537. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  538. package/dist/tools/builtins/read-tool-output.js +1 -1
  539. package/dist/tools/builtins/sandbox/bash.js +2 -2
  540. package/dist/tools/builtins/sandbox/common.d.ts +2 -1
  541. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  542. package/dist/tools/builtins/sandbox/edit.js +1 -1
  543. package/dist/tools/builtins/sandbox/glob.js +2 -2
  544. package/dist/tools/builtins/sandbox/grep.js +2 -2
  545. package/dist/tools/builtins/sandbox/read.js +1 -1
  546. package/dist/tools/builtins/sandbox/write.js +1 -1
  547. package/dist/tools/builtins/skill-load.d.ts +3 -3
  548. package/dist/tools/builtins/skill-load.js +1 -1
  549. package/dist/tools/canonical-json.d.ts +6 -0
  550. package/dist/tools/canonical-json.js +16 -0
  551. package/dist/tools/connector-content.controller.d.ts +1 -1
  552. package/dist/tools/connector-content.controller.js +11 -6
  553. package/dist/tools/connector-content.d.ts +12 -15
  554. package/dist/tools/connector-content.js +53 -18
  555. package/dist/tools/connectors.controller.d.ts +1 -1
  556. package/dist/tools/connectors.controller.js +21 -10
  557. package/dist/tools/connectors.service.d.ts +31 -13
  558. package/dist/tools/connectors.service.js +434 -344
  559. package/dist/tools/credentials.d.ts +17 -20
  560. package/dist/tools/credentials.js +55 -34
  561. package/dist/tools/drift.d.ts +29 -41
  562. package/dist/tools/drift.js +111 -79
  563. package/dist/tools/info.d.ts +12 -9
  564. package/dist/tools/info.js +33 -7
  565. package/dist/tools/job-ids.d.ts +13 -0
  566. package/dist/tools/job-ids.js +15 -0
  567. package/dist/tools/jobs.d.ts +24 -0
  568. package/dist/tools/jobs.js +69 -0
  569. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  570. package/dist/tools/oauth/flow-paths.js +38 -0
  571. package/dist/tools/oauth/flow.d.ts +30 -30
  572. package/dist/tools/oauth/flow.js +109 -81
  573. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  574. package/dist/tools/oauth/oauth.controller.js +12 -9
  575. package/dist/tools/oauth/tokens.d.ts +11 -3
  576. package/dist/tools/oauth/tokens.js +15 -14
  577. package/dist/tools/outputs.d.ts +13 -4
  578. package/dist/tools/outputs.js +47 -3
  579. package/dist/tools/pipeline.d.ts +62 -46
  580. package/dist/tools/pipeline.js +145 -64
  581. package/dist/tools/policy.d.ts +2 -2
  582. package/dist/tools/questions.controller.d.ts +1 -1
  583. package/dist/tools/questions.controller.js +8 -5
  584. package/dist/tools/questions.service.d.ts +25 -24
  585. package/dist/tools/questions.service.js +201 -142
  586. package/dist/tools/registry.d.ts +30 -20
  587. package/dist/tools/registry.js +73 -37
  588. package/dist/tools/specs.d.ts +5 -4
  589. package/dist/tools/specs.js +3 -1
  590. package/dist/tools/tools.module.d.ts +10 -0
  591. package/dist/tools/tools.module.js +91 -0
  592. package/dist/ui/call-extension.d.ts +16 -0
  593. package/dist/ui/call-extension.js +38 -0
  594. package/dist/ui/embed-token.d.ts +9 -5
  595. package/dist/ui/embed-token.js +34 -6
  596. package/dist/ui/ui-stream.d.ts +22 -17
  597. package/dist/ui/ui-stream.js +72 -12
  598. package/dist/ui/ui.module.d.ts +7 -0
  599. package/dist/ui/ui.module.js +28 -0
  600. package/dist/ui/views.controller.d.ts +14 -12
  601. package/dist/ui/views.controller.js +32 -25
  602. package/dist/ui/views.d.ts +9 -57
  603. package/dist/ui/views.js +43 -45
  604. package/package.json +9 -2
  605. package/dist/http/health.controller.d.ts +0 -26
  606. package/dist/http/health.controller.js +0 -79
  607. package/dist/http/tokens.d.ts +0 -131
  608. package/dist/http/tokens.js +0 -131
  609. package/dist/http/zod.pipe.d.ts +0 -8
  610. package/dist/http/zod.pipe.js +0 -14
  611. package/dist/identity/rate-limit.d.ts +0 -55
  612. package/dist/identity/rate-limit.js +0 -121
  613. package/dist/sandbox/lifecycle.d.ts +0 -21
  614. package/dist/sandbox/lifecycle.js +0 -68
  615. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  616. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,7 +1,5 @@
1
1
  import { usageTokens } from "../../evals/budget.js";
2
2
  import { agentResultText } from "../../tools/builtins/agent.js";
3
- import { TERMINAL_STATUSES } from "../run-finish.js";
4
- import { ACTIVE_RUN_STATUSES } from "../run-queue.js";
5
3
  /** Idempotency key of the parent's `subagent_finished` event. */
6
4
  export const finishedIdemKey = (childRunId) => `subagent_finished:${childRunId}`;
7
5
  const DISPATCH_COLUMNS = [
@@ -146,80 +144,3 @@ export const finishedEvent = (row, finished) => ({
146
144
  idemKey: finishedIdemKey(row.childRunId),
147
145
  payload: finished,
148
146
  });
149
- /**
150
- * After a child run's terminal state committed (spec §7.3): appends `subagent_finished` to the
151
- * parent log (idempotent; allowed while the parent waits, it is not model-visible) and tries
152
- * `Waits.resume(parentRunId, childRunId)`. Every finishing child tries; the conditional resume lets
153
- * exactly one succeed, the last to see all its siblings terminal. A run that is not a dispatched
154
- * child, or not terminal yet, is left alone. A crash in between is repaired by the wait sweep and
155
- * by the parent's tools node, which writes a missing `subagent_finished` itself.
156
- */
157
- export async function onChildFinished(d, childRunId) {
158
- const row = await dispatchOfChildRun(d.db, childRunId);
159
- if (!row)
160
- return;
161
- const run = await d.db
162
- .selectFrom("runs")
163
- .select("status")
164
- .where("id", "=", childRunId)
165
- .executeTakeFirst();
166
- if (!run || !TERMINAL_STATUSES.has(run.status))
167
- return;
168
- const r = await childResult(d.eventLog, row);
169
- if (!r) {
170
- d.log.warn("sub-agent run is terminal without a terminal event", { childRunId });
171
- return;
172
- }
173
- await d.eventLog.append(row.parentConversationId, [finishedEvent(row, r.finished)]);
174
- await d.waits.resume(row.parentRunId, childRunId);
175
- }
176
- /**
177
- * Stops the active children of a parent run (sub-agents spec §12), or only those dispatched in
178
- * `opts.step`: a `waiting` child through its own `abortWaiting`, a `queued` / `running` one that
179
- * no worker holds directly (`abortIfOrphaned`), any other through `RunAbort.request` (the
180
- * cross-replica broadcast plus the marker key, so a child that starts later still sees it), after
181
- * which a child found `waiting` is stopped through `abortWaiting` too. A child stopped here is
182
- * reported to the parent at once (by `abortWaiting` itself, or {@link onChildFinished} after
183
- * `abortIfOrphaned`); one stopped by its worker is reported by that worker. Returns the number of
184
- * children asked to stop.
185
- *
186
- * `byAccountId` is the person whose action stops them, or null when the kernel stops them on the
187
- * parent's behalf; a child stopped with null reports the §4.4 "parent's stop" text.
188
- */
189
- export async function stopChildren(d, parentRunId, byAccountId, opts = {}) {
190
- let q = d.db
191
- .selectFrom("subagent_dispatches as sd")
192
- .innerJoin("runs as cr", "cr.id", "sd.child_run_id")
193
- .select(["sd.child_conversation_id", "sd.child_run_id", "cr.status"])
194
- .where("sd.parent_run_id", "=", parentRunId)
195
- .where("cr.status", "in", ACTIVE_RUN_STATUSES);
196
- if (opts.step !== undefined)
197
- q = q.where("sd.step", "=", opts.step);
198
- const children = await q.execute();
199
- for (const c of children) {
200
- const conv = c.child_conversation_id;
201
- const runId = c.child_run_id;
202
- // abortWaiting reports the stopped child to the parent itself (Waits.subagents.finished)
203
- if (c.status === "waiting" &&
204
- (await d.waits.abortWaiting(conv, runId, byAccountId, opts.detail))) {
205
- continue;
206
- }
207
- if (await d.runQueue.abortIfOrphaned(conv, runId, byAccountId, opts.detail)) {
208
- await onChildFinished(d, runId);
209
- continue;
210
- }
211
- await d.abort.request(runId, byAccountId, opts.detail);
212
- // the suspend handshake (see Waits.suspend): a child that became `waiting` after the read
213
- // above may have checked the marker before it was set, so check `waiting` again after setting
214
- // it (review M1)
215
- const now = await d.db
216
- .selectFrom("runs")
217
- .select("status")
218
- .where("id", "=", runId)
219
- .executeTakeFirst();
220
- if (now?.status === "waiting") {
221
- await d.waits.abortWaiting(conv, runId, byAccountId, opts.detail);
222
- }
223
- }
224
- return children.length;
225
- }
@@ -1,8 +1,8 @@
1
1
  import { type AgentTemplateTier } from "@capybara-hq/plugin-sdk";
2
2
  import type { AgentDefinition, AgentToolRef, ModelRef } from "../../agents/definition.js";
3
- import type { KernelConfig } from "../../config/schema.js";
4
3
  import type { EventPayload } from "../../conversations/events.js";
5
- import type { KernelDb } from "../../db/kernel-schema.js";
4
+ import type { KernelSchemaDb } from "../../db/kernel-schema.js";
5
+ import type { KernelConfigService } from "../../infra/config/kernel-config.service.js";
6
6
  import type { ModelPurposesService } from "../../models/purposes.js";
7
7
  import type { ProviderRegistry } from "../providers.js";
8
8
  import type { RosterEntry } from "./roster.js";
@@ -29,11 +29,11 @@ export interface EffectiveDefinition {
29
29
  warnings: string[];
30
30
  }
31
31
  export interface EffectiveDefinitionDeps {
32
- db: KernelDb;
32
+ db: KernelSchemaDb;
33
33
  purposes: Pick<ModelPurposesService, "resolve">;
34
34
  /** Reads the resolved model's parameter declarations (a template `effort`). */
35
35
  registry: Pick<ProviderRegistry, "resolve">;
36
- config: () => KernelConfig;
36
+ config: Pick<KernelConfigService, "get">;
37
37
  }
38
38
  type Policy = "ask" | "deny";
39
39
  /**
@@ -246,7 +246,7 @@ function orgAgentDefinition(d, a) {
246
246
  return {
247
247
  definition,
248
248
  template: { source: "agent", id: agentId, version: a.orgAgent.version },
249
- maxSteps: d.config().runtime.maxSteps,
249
+ maxSteps: d.config.get().runtime.maxSteps,
250
250
  warnings: [],
251
251
  model: own.model,
252
252
  tierFallback: false,
@@ -268,7 +268,7 @@ function orgAgentDefinition(d, a) {
268
268
  export async function effectiveDefinition(d, a) {
269
269
  if (a.entry.source === "agent")
270
270
  return orgAgentDefinition(d, a);
271
- const runtimeMax = d.config().runtime.maxSteps;
271
+ const runtimeMax = d.config.get().runtime.maxSteps;
272
272
  const { parent, entry } = a;
273
273
  let template = null;
274
274
  let ref = { source: entry.source };
@@ -1,24 +1,44 @@
1
1
  import type { Logger } from "@capybara-hq/plugin-sdk";
2
2
  import { type AgentDefinition } from "../../agents/definition.js";
3
- import type { KernelConfig } from "../../config/schema.js";
4
3
  import type { EventLog } from "../../conversations/event-log.js";
5
- import type { EventPayload } from "../../conversations/events.js";
6
- import type { ConversationKind, KernelDb } from "../../db/kernel-schema.js";
4
+ import type { ConversationEvent, EventPayload } from "../../conversations/events.js";
5
+ import type { ConversationKind, KernelSchemaDb } from "../../db/kernel-schema.js";
6
+ import type { KernelConfigService } from "../../infra/config/kernel-config.service.js";
7
7
  import type { ModelPurposesService } from "../../models/purposes.js";
8
8
  import { type AgentToolInputT } from "../../tools/builtins/agent.js";
9
9
  import type { ToolStepContext } from "../../tools/pipeline.js";
10
10
  import type { ProviderRegistry } from "../providers.js";
11
- import { type RunJobData } from "../run-queue.js";
11
+ import { type RunJobData } from "../run-jobs.js";
12
+ import { type CheckedOrgAgent } from "./definition.js";
13
+ import { type RosterEntry } from "./roster.js";
12
14
  export interface DispatchDeps {
13
- db: KernelDb;
15
+ /** The context's handle: inside {@link commitDispatchIn} it is the dispatch's transaction. */
16
+ db: KernelSchemaDb;
14
17
  eventLog: EventLog;
15
18
  purposes: Pick<ModelPurposesService, "resolve">;
16
19
  registry: Pick<ProviderRegistry, "resolve">;
17
- config: () => KernelConfig;
20
+ config: Pick<KernelConfigService, "get">;
18
21
  /** Enqueues a child run (on the sub-agent run queue: `kind` is always `subagent`). */
19
22
  enqueue: (data: RunJobData, jobId: string, kind: ConversationKind) => Promise<void>;
20
23
  log: Pick<Logger, "error" | "warn">;
24
+ /**
25
+ * Runs {@link commitDispatchIn} in a transaction of its own (`SubagentsService.commitDispatch`,
26
+ * a `@Transactional` method).
27
+ */
28
+ commitDispatch: (a: DispatchArgs, plan: DispatchPlan, child: ChildWriter) => Promise<DispatchCommit | null>;
21
29
  }
30
+ /** One dispatch's call. */
31
+ export interface DispatchArgs {
32
+ ctx: ToolStepContext;
33
+ callId: string;
34
+ input: AgentToolInputT;
35
+ forSkill?: SkillForkDispatch;
36
+ }
37
+ /**
38
+ * Writes the child's events in the dispatch's transaction (`db` is its handle); `checked` is the
39
+ * org agent version the in-lock gates passed. Null refuses.
40
+ */
41
+ export type ChildWriter = (db: KernelSchemaDb, checked?: CheckedOrgAgent) => Promise<ConversationEvent | null>;
22
42
  export type DispatchOutcome = {
23
43
  kind: "dispatched";
24
44
  childRunId: string;
@@ -44,6 +64,24 @@ export interface SkillForkDispatch {
44
64
  }
45
65
  /** Idempotency key of the parent's `subagent_dispatched` event. */
46
66
  export declare const dispatchedIdemKey: (runId: string, callId: string) => string;
67
+ /** What one dispatch writes, decided before its transaction. */
68
+ export interface DispatchPlan {
69
+ childConversationId: string;
70
+ agentType: string;
71
+ source: RosterEntry["source"];
72
+ /**
73
+ * The child conversation's agent and its run's `agent_version`: the parent's for
74
+ * general-purpose and templates, the dispatched agent's frozen version for an org agent (§5.5).
75
+ */
76
+ agentId: string;
77
+ agentVersion: number;
78
+ resumed: boolean;
79
+ model: {
80
+ provider: string;
81
+ model: string;
82
+ };
83
+ tierFallback: boolean;
84
+ }
47
85
  /**
48
86
  * Dispatches the sub-agent of one `agent` call (spec §7.1), after the pipeline's validation,
49
87
  * policy, approval and `tool.preExecute` stages. A new sub-agent: resolves its type and effective
@@ -67,3 +105,46 @@ export declare function dispatchSubagent(d: DispatchDeps, a: {
67
105
  /** Phase D: a person's fork invocation (see {@link SkillForkDispatch}). */
68
106
  forSkill?: SkillForkDispatch;
69
107
  }): Promise<DispatchOutcome>;
108
+ /**
109
+ * The dispatch transaction shared by new sub-agents and follow-ups: locks the parent conversation
110
+ * row, then the parent run row (the order every terminal path uses),
111
+ * runs `child` (writes the child conversation's first events and returns the task message, or
112
+ * null to refuse), then inserts the child run and the dispatch row, appends `subagent_dispatched`
113
+ * and the audit row. After commit: notifies both conversations and enqueues the child run.
114
+ * Returns null when `child` refused.
115
+ *
116
+ * Under the parent run's row lock it first re-checks what the pipeline checked without it: a call
117
+ * already dispatched (a second holder of the same step, e.g. after a stalled-job takeover) gets
118
+ * the existing child run back and writes nothing, and a parent run that is no longer `running`
119
+ * (stopped, orphaned) dispatches nothing. Then the run's limits (§8.2, {@link subagentLimits}),
120
+ * read fresh: its children's token counter at or over the cap, its dispatches (follow-ups
121
+ * included) at the cap, or as many active children as may run at once each refuse with the §4.5
122
+ * text. The lock serializes the dispatches of one run, so the counts cannot race.
123
+ */
124
+ /** What the dispatch transaction did. */
125
+ export type DispatchCommit = {
126
+ kind: "existing";
127
+ childRunId: string;
128
+ requeue: {
129
+ conversationId: string;
130
+ seq: number;
131
+ } | null;
132
+ } | {
133
+ kind: "stopped";
134
+ } | {
135
+ kind: "limit";
136
+ content: string;
137
+ } | {
138
+ kind: "gate";
139
+ outcome: DispatchOutcome;
140
+ } | {
141
+ kind: "written";
142
+ childRunId: string;
143
+ childSeq: number;
144
+ parentSeq: number;
145
+ };
146
+ /**
147
+ * {@link commit}'s transaction (run by `SubagentsService.commitDispatch`, `d.db` its handle).
148
+ * Null when `child` refused.
149
+ */
150
+ export declare function commitDispatchIn(d: Pick<DispatchDeps, "db" | "eventLog" | "config">, a: DispatchArgs, plan: DispatchPlan, child: ChildWriter): Promise<DispatchCommit | null>;
@@ -4,7 +4,7 @@ import { normalizeStoredDefinition } from "../../agents/definition.js";
4
4
  import { audit } from "../../identity/audit.js";
5
5
  import { forkAgentUnknownText } from "../../skills/invoke.js";
6
6
  import { AGENT_REFUSALS } from "../../tools/builtins/agent.js";
7
- import { ACTIVE_RUN_STATUSES, runJobId } from "../run-queue.js";
7
+ import { ACTIVE_RUN_STATUSES, runJobId } from "../run-jobs.js";
8
8
  import { effectiveDefinition, narrowFollowUp, SubagentTypeGoneError, } from "./definition.js";
9
9
  import { subagentLimits } from "./limits.js";
10
10
  import { auditRefusal, checkOrgAgent, currentAgentDefinition } from "./org-agents.js";
@@ -118,7 +118,7 @@ export async function dispatchSubagent(d, a) {
118
118
  subagent_type: entry.type,
119
119
  })
120
120
  .execute();
121
- const [, task] = await d.eventLog.append(childId, [
121
+ const [, task] = await d.eventLog.appendIn(childId, [
122
122
  {
123
123
  type: "subagent_started",
124
124
  idemKey: "subagent_started",
@@ -149,7 +149,7 @@ export async function dispatchSubagent(d, a) {
149
149
  },
150
150
  },
151
151
  taskMessage(ctx, a.callId, fork === undefined ? input.prompt : fork.task(eff.definition), undefined, fork?.skill),
152
- ], t);
152
+ ]);
153
153
  return task;
154
154
  });
155
155
  // a new sub-agent's writer never refuses
@@ -234,7 +234,9 @@ async function resume(d, a) {
234
234
  .executeTakeFirst();
235
235
  if (await activeRun())
236
236
  return null;
237
- const [task] = await d.eventLog.append(child.id, [taskMessage(ctx, a.callId, a.input.prompt, narrowFollowUp(frozen, current))], t);
237
+ const [task] = await d.eventLog.appendIn(child.id, [
238
+ taskMessage(ctx, a.callId, a.input.prompt, narrowFollowUp(frozen, current)),
239
+ ]);
238
240
  return task;
239
241
  }).then((r) => r ?? refused(AGENT_REFUSALS.stillRunning(a.id)));
240
242
  }
@@ -290,153 +292,145 @@ skill) => ({
290
292
  },
291
293
  });
292
294
  /**
293
- * The dispatch transaction shared by new sub-agents and follow-ups: locks the parent conversation
294
- * row, then the parent run row (the order every terminal path uses),
295
- * runs `child` (writes the child conversation's first events and returns the task message, or
296
- * null to refuse), then inserts the child run and the dispatch row, appends `subagent_dispatched`
297
- * and the audit row. After commit: notifies both conversations and enqueues the child run.
298
- * Returns null when `child` refused.
299
- *
300
- * Under the parent run's row lock it first re-checks what the pipeline checked without it: a call
301
- * already dispatched (a second holder of the same step, e.g. after a stalled-job takeover) gets
302
- * the existing child run back and writes nothing, and a parent run that is no longer `running`
303
- * (stopped, orphaned) dispatches nothing. Then the run's limits (§8.2, {@link subagentLimits}),
304
- * read fresh: its children's token counter at or over the cap, its dispatches (follow-ups
305
- * included) at the cap, or as many active children as may run at once each refuse with the §4.5
306
- * text. The lock serializes the dispatches of one run, so the counts cannot race.
295
+ * {@link commit}'s transaction (run by `SubagentsService.commitDispatch`, `d.db` its handle).
296
+ * Null when `child` refused.
307
297
  */
308
- async function commit(d, a, plan,
309
- /** Writes the child's events; `checked` is the org agent version the in-lock gates passed. */
310
- child) {
298
+ export async function commitDispatchIn(d, a, plan, child) {
311
299
  const { ctx, callId, input } = a;
312
300
  const childRunId = randomUUID();
313
- const out = await d.db.transaction().execute(async (t) => {
314
- // the documented order, conversation row then run row (run-finish.ts, abortWaiting): the
315
- // append to the parent below takes the conversation row, so it is taken first here, or a stop
316
- // racing this commit could deadlock (final review m2); the child's row comes last
301
+ const t = d.db;
302
+ // the documented order, conversation row then run row (run-finish.ts, abortWaiting): the
303
+ // append to the parent below takes the conversation row, so it is taken first here, or a stop
304
+ // racing this commit could deadlock (final review m2); the child's row comes last
305
+ await t
306
+ .selectFrom("conversations")
307
+ .select("id")
308
+ .where("id", "=", ctx.conversationId)
309
+ .forUpdate()
310
+ .executeTakeFirst();
311
+ const parent = await t
312
+ .selectFrom("runs")
313
+ .select(["status", "subagent_tokens_used"])
314
+ .where("id", "=", ctx.runId)
315
+ .forUpdate()
316
+ .executeTakeFirst();
317
+ const existing = await t
318
+ .selectFrom("subagent_dispatches as sd")
319
+ .leftJoin("runs as cr", "cr.id", "sd.child_run_id")
320
+ .select(["sd.child_run_id", "sd.child_conversation_id", "cr.status", "cr.trigger_seq"])
321
+ .where("sd.parent_run_id", "=", ctx.runId)
322
+ .where("sd.parent_call_id", "=", callId)
323
+ .executeTakeFirst();
324
+ if (existing) {
325
+ return {
326
+ kind: "existing",
327
+ childRunId: existing.child_run_id,
328
+ // still queued: the first holder may have died before its enqueue (review M4)
329
+ requeue: existing.status === "queued" && existing.trigger_seq !== null
330
+ ? {
331
+ conversationId: existing.child_conversation_id,
332
+ seq: Number(existing.trigger_seq),
333
+ }
334
+ : null,
335
+ };
336
+ }
337
+ if (parent?.status !== "running")
338
+ return { kind: "stopped" };
339
+ const limit = await limitRefusal(t, d, ctx, parent.subagent_tokens_used);
340
+ if (limit !== null)
341
+ return { kind: "limit", content: limit };
342
+ let checked;
343
+ if (plan.source === "agent") {
344
+ // the org agent's gates again, under the parent run's lock, with both agents' rows held
345
+ // FOR SHARE (in id order) so a concurrent save of either serializes with this dispatch
317
346
  await t
318
- .selectFrom("conversations")
347
+ .selectFrom("agents")
319
348
  .select("id")
320
- .where("id", "=", ctx.conversationId)
321
- .forUpdate()
322
- .executeTakeFirst();
323
- const parent = await t
324
- .selectFrom("runs")
325
- .select(["status", "subagent_tokens_used"])
326
- .where("id", "=", ctx.runId)
327
- .forUpdate()
328
- .executeTakeFirst();
329
- const existing = await t
330
- .selectFrom("subagent_dispatches as sd")
331
- .leftJoin("runs as cr", "cr.id", "sd.child_run_id")
332
- .select(["sd.child_run_id", "sd.child_conversation_id", "cr.status", "cr.trigger_seq"])
333
- .where("sd.parent_run_id", "=", ctx.runId)
334
- .where("sd.parent_call_id", "=", callId)
335
- .executeTakeFirst();
336
- if (existing) {
337
- return {
338
- kind: "existing",
339
- childRunId: existing.child_run_id,
340
- // still queued: the first holder may have died before its enqueue (review M4)
341
- requeue: existing.status === "queued" && existing.trigger_seq !== null
342
- ? {
343
- conversationId: existing.child_conversation_id,
344
- seq: Number(existing.trigger_seq),
345
- }
346
- : null,
347
- };
348
- }
349
- if (parent?.status !== "running")
350
- return { kind: "stopped" };
351
- const limit = await limitRefusal(t, d, ctx, parent.subagent_tokens_used);
352
- if (limit !== null)
353
- return { kind: "limit", content: limit };
354
- let checked;
355
- if (plan.source === "agent") {
356
- // the org agent's gates again, under the parent run's lock, with both agents' rows held
357
- // FOR SHARE (in id order) so a concurrent save of either serializes with this dispatch
358
- await t
359
- .selectFrom("agents")
360
- .select("id")
361
- .where("id", "in", [ctx.agentId, plan.agentId])
362
- .orderBy("id")
363
- .forShare()
364
- .execute();
365
- const gates = await orgAgentGates(t, a, plan.agentId, plan.agentType, plan.resumed);
366
- if ("refused" in gates)
367
- return { kind: "gate", outcome: gates.refused };
368
- checked = gates.checked;
369
- }
370
- const task = await child(t, checked);
371
- if (task === null)
372
- return null;
373
- await t
374
- .insertInto("runs")
375
- .values({
376
- id: childRunId,
377
- conversation_id: plan.childConversationId,
378
- status: "queued",
379
- agent_version: plan.agentVersion,
380
- trigger_account_id: ctx.accountId,
381
- trigger_seq: task.seq,
382
- })
349
+ .where("id", "in", [ctx.agentId, plan.agentId])
350
+ .orderBy("id")
351
+ .forShare()
383
352
  .execute();
384
- await t
385
- .insertInto("subagent_dispatches")
386
- .values({
387
- parent_run_id: ctx.runId,
388
- parent_call_id: callId,
389
- parent_conversation_id: ctx.conversationId,
390
- step: ctx.step,
391
- child_conversation_id: plan.childConversationId,
392
- child_run_id: childRunId,
393
- resumed: plan.resumed,
394
- })
395
- .execute();
396
- const [dispatched] = await d.eventLog.append(ctx.conversationId, [
397
- {
398
- type: "subagent_dispatched",
399
- runId: ctx.runId,
400
- idemKey: dispatchedIdemKey(ctx.runId, callId),
401
- payload: {
402
- step: ctx.step,
403
- callId,
404
- subagentId: plan.childConversationId,
405
- childRunId,
406
- agentType: plan.agentType,
407
- description: input.description,
408
- resumed: plan.resumed,
409
- model: { provider: plan.model.provider, model: plan.model.model },
410
- ...(plan.tierFallback && { tierFallback: true }),
411
- ...(a.forSkill !== undefined && { invokedSeq: a.forSkill.seq }),
412
- },
413
- },
414
- ], t);
415
- await audit(t, {
416
- actorAccountId: ctx.accountId,
417
- orgId: ctx.orgId,
418
- action: "subagent.dispatched",
419
- target: plan.childConversationId,
420
- detail: {
421
- parentConversationId: ctx.conversationId,
422
- parentRunId: ctx.runId,
353
+ const gates = await orgAgentGates(t, a, plan.agentId, plan.agentType, plan.resumed);
354
+ if ("refused" in gates)
355
+ return { kind: "gate", outcome: gates.refused };
356
+ checked = gates.checked;
357
+ }
358
+ const task = await child(t, checked);
359
+ if (task === null)
360
+ return null;
361
+ await t
362
+ .insertInto("runs")
363
+ .values({
364
+ id: childRunId,
365
+ conversation_id: plan.childConversationId,
366
+ status: "queued",
367
+ agent_version: plan.agentVersion,
368
+ trigger_account_id: ctx.accountId,
369
+ trigger_seq: task.seq,
370
+ })
371
+ .execute();
372
+ await t
373
+ .insertInto("subagent_dispatches")
374
+ .values({
375
+ parent_run_id: ctx.runId,
376
+ parent_call_id: callId,
377
+ parent_conversation_id: ctx.conversationId,
378
+ step: ctx.step,
379
+ child_conversation_id: plan.childConversationId,
380
+ child_run_id: childRunId,
381
+ resumed: plan.resumed,
382
+ })
383
+ .execute();
384
+ const [dispatched] = await d.eventLog.appendIn(ctx.conversationId, [
385
+ {
386
+ type: "subagent_dispatched",
387
+ runId: ctx.runId,
388
+ idemKey: dispatchedIdemKey(ctx.runId, callId),
389
+ payload: {
390
+ step: ctx.step,
423
391
  callId,
392
+ subagentId: plan.childConversationId,
393
+ childRunId,
424
394
  agentType: plan.agentType,
425
- source: plan.source,
426
- ...(plan.source === "agent" && {
427
- agentId: plan.agentId,
428
- agentVersion: plan.agentVersion,
429
- }),
395
+ description: input.description,
430
396
  resumed: plan.resumed,
431
- childRunId,
397
+ model: { provider: plan.model.provider, model: plan.model.model },
398
+ ...(plan.tierFallback && { tierFallback: true }),
399
+ ...(a.forSkill !== undefined && { invokedSeq: a.forSkill.seq }),
432
400
  },
433
- });
434
- return {
435
- kind: "written",
436
- childSeq: task.seq,
437
- parentSeq: dispatched.seq,
438
- };
401
+ },
402
+ ]);
403
+ await audit(t, {
404
+ actorAccountId: ctx.accountId,
405
+ orgId: ctx.orgId,
406
+ action: "subagent.dispatched",
407
+ target: plan.childConversationId,
408
+ detail: {
409
+ parentConversationId: ctx.conversationId,
410
+ parentRunId: ctx.runId,
411
+ callId,
412
+ agentType: plan.agentType,
413
+ source: plan.source,
414
+ ...(plan.source === "agent" && {
415
+ agentId: plan.agentId,
416
+ agentVersion: plan.agentVersion,
417
+ }),
418
+ resumed: plan.resumed,
419
+ childRunId,
420
+ },
439
421
  });
422
+ return {
423
+ kind: "written",
424
+ childRunId,
425
+ childSeq: task.seq,
426
+ parentSeq: dispatched.seq,
427
+ };
428
+ }
429
+ async function commit(d, a, plan,
430
+ /** Writes the child's events; `checked` is the org agent version the in-lock gates passed. */
431
+ child) {
432
+ const { ctx } = a;
433
+ const out = await d.commitDispatch(a, plan, child);
440
434
  if (out === null)
441
435
  return null;
442
436
  if (out.kind === "existing") {
@@ -464,6 +458,7 @@ child) {
464
458
  return out.outcome;
465
459
  await d.eventLog.notify(plan.childConversationId, out.childSeq);
466
460
  await d.eventLog.notify(ctx.conversationId, out.parentSeq);
461
+ const childRunId = out.childRunId;
467
462
  const jobId = runJobId(plan.childConversationId, out.childSeq);
468
463
  try {
469
464
  await d.enqueue({ runId: childRunId, conversationId: plan.childConversationId }, jobId, "subagent");
@@ -1,6 +1,9 @@
1
- import type { Transaction } from "kysely";
2
1
  import { type KernelConfig } from "../../config/schema.js";
3
- import type { KernelDatabase, KernelDb } from "../../db/kernel-schema.js";
2
+ import type { KernelSchemaDb } from "../../db/kernel-schema.js";
3
+ /** The config the limits read (`KernelConfigService`, live: `subagents.*` is hot). */
4
+ export interface SubagentsConfig {
5
+ get(): Pick<KernelConfig, "subagents">;
6
+ }
4
7
  /** The sub-agent limits of one parent run (sub-agents spec §8.2). */
5
8
  export interface SubagentLimits {
6
9
  maxConcurrentPerRun: number;
@@ -14,10 +17,12 @@ export declare const SUBAGENT_LIMIT_DEFAULTS: SubagentLimits;
14
17
  * `subagentLimitOverrides`, value by value, over the hot config `subagents.*`. Read live (no cache),
15
18
  * in the caller's transaction when one is given, so every replica applies a change at once.
16
19
  */
17
- export declare function subagentLimits(db: KernelDb | Transaction<KernelDatabase>, config: () => Pick<KernelConfig, "subagents">, orgId: string): Promise<SubagentLimits>;
20
+ export declare function subagentLimits(
21
+ /** The pool, or the context's handle (a `@Transactional` caller's transaction). */
22
+ db: KernelSchemaDb, config: SubagentsConfig, orgId: string): Promise<SubagentLimits>;
18
23
  /**
19
24
  * Whether the sub-agents of `parentRunId` have used their token budget (§8.3): its
20
25
  * `subagent_tokens_used`, read fresh, at or over `maxTokensPerRun`. A sub-agent's step checks it
21
26
  * before every model request and ends its run with `budget` when it is.
22
27
  */
23
- export declare function subagentBudgetUsedUp(db: KernelDb, config: () => Pick<KernelConfig, "subagents">, orgId: string, parentRunId: string): Promise<boolean>;
28
+ export declare function subagentBudgetUsedUp(db: KernelSchemaDb, config: SubagentsConfig, orgId: string, parentRunId: string): Promise<boolean>;
@@ -7,8 +7,10 @@ export const SUBAGENT_LIMIT_DEFAULTS = KernelConfigSchema.shape.subagents.parse(
7
7
  * `subagentLimitOverrides`, value by value, over the hot config `subagents.*`. Read live (no cache),
8
8
  * in the caller's transaction when one is given, so every replica applies a change at once.
9
9
  */
10
- export async function subagentLimits(db, config, orgId) {
11
- const base = config().subagents;
10
+ export async function subagentLimits(
11
+ /** The pool, or the context's handle (a `@Transactional` caller's transaction). */
12
+ db, config, orgId) {
13
+ const base = config.get().subagents;
12
14
  const over = await readSubagentLimitOverride(db, orgId);
13
15
  return {
14
16
  maxConcurrentPerRun: over?.maxConcurrentPerRun ?? base.maxConcurrentPerRun,
@@ -1,5 +1,5 @@
1
1
  import { type AgentDefinition } from "../../agents/definition.js";
2
- import type { KernelDb } from "../../db/kernel-schema.js";
2
+ import type { KernelSchemaDb } from "../../db/kernel-schema.js";
3
3
  /**
4
4
  * The gates an org agent sub-agent passes (spec §5.5), checked at every dispatch and every
5
5
  * follow-up: `deleted` (the agent is gone, or not of this org), `allowlist` (the parent agent's
@@ -22,7 +22,7 @@ export type OrgAgentCheck = {
22
22
  * dispatches at once). On success returns the agent's current version and definition, which the
23
23
  * caller freezes as is (never read again, so the frozen version is the one the gates saw).
24
24
  */
25
- export declare function checkOrgAgent(db: KernelDb, a: {
25
+ export declare function checkOrgAgent(db: KernelSchemaDb, a: {
26
26
  orgId: string;
27
27
  parentDefinition: Pick<AgentDefinition, "subagents">;
28
28
  agentId: string;
@@ -32,12 +32,12 @@ export declare function checkOrgAgent(db: KernelDb, a: {
32
32
  * The parent agent's current definition (the allowlist gate reads it, not the run's version), or
33
33
  * null when the agent no longer exists or is deleted.
34
34
  */
35
- export declare function currentAgentDefinition(db: KernelDb, agentId: string): Promise<AgentDefinition | null>;
35
+ export declare function currentAgentDefinition(db: KernelSchemaDb, agentId: string): Promise<AgentDefinition | null>;
36
36
  /**
37
37
  * Audits a refused org agent dispatch (`subagent.refused`, spec §5.5): actor the person who
38
38
  * started the parent run, target the refused agent, so its owner can see attempts to use it.
39
39
  */
40
- export declare function auditRefusal(db: KernelDb, a: {
40
+ export declare function auditRefusal(db: KernelSchemaDb, a: {
41
41
  orgId: string;
42
42
  triggerAccountId: string;
43
43
  agentId: string;