@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
@@ -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";
@@ -20,7 +20,7 @@ const GENERAL_ENTRY = {
20
20
  /** Idempotency key of the parent's `subagent_dispatched` event. */
21
21
  export const dispatchedIdemKey = (runId, callId) => `subagent_dispatched:${runId}:${callId}`;
22
22
  /**
23
- * Dispatches the sub-agent of one `agent` call (spec §7.1), after the pipeline's validation,
23
+ * Dispatches the sub-agent of one `Agent` call (spec §7.1), after the pipeline's validation,
24
24
  * policy, approval and `tool.preExecute` stages. A new sub-agent: resolves its type and effective
25
25
  * definition, then in one transaction (holding the parent run's row lock, so the dispatches of one
26
26
  * run serialize) inserts the child conversation, appends `subagent_started` and the task message,
@@ -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
  }
@@ -272,7 +274,7 @@ async function orgAgentGates(db, a, agentId, agentType, resumed) {
272
274
  }
273
275
  const taskMessage = (ctx, callId, prompt, narrowed,
274
276
  /**
275
- * A fork invocation's record: the child's log then holds the invocation, so its `skill_load`
277
+ * A fork invocation's record: the child's log then holds the invocation, so its `Skill`
276
278
  * is offered and resolves the invoked version (phase D).
277
279
  */
278
280
  skill) => ({
@@ -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;
@@ -1,6 +1,7 @@
1
- import { isAgentVisibleTo } from "../../agents/agents.service.js";
1
+ import { isAgentVisibleTo } from "../../agents/agent-lookup.js";
2
2
  import { normalizeStoredDefinition } from "../../agents/definition.js";
3
3
  import { audit } from "../../identity/audit.js";
4
+ import { normalizeStoredDefinitionIn } from "../../tools/legacy-data.js";
4
5
  /**
5
6
  * Checks the gates for dispatching `agentId` from a parent whose current definition is
6
7
  * `parentDefinition` (read live by the caller: R5, removing an allowlist entry stops new
@@ -23,7 +24,7 @@ export async function checkOrgAgent(db, a) {
23
24
  if (!(a.parentDefinition.subagents?.agents ?? []).some((x) => x.agentId === a.agentId)) {
24
25
  return { ok: false, gate: "allowlist" };
25
26
  }
26
- const definition = normalizeStoredDefinition(row.definition);
27
+ const definition = await normalizeStoredDefinitionIn(db, a.orgId, row.definition);
27
28
  if (definition.subagents?.dispatchable !== true)
28
29
  return { ok: false, gate: "dispatchable" };
29
30
  if (!(await isAgentVisibleTo(db, a.agentId, a.triggerAccountId))) {
@@ -1,5 +1,5 @@
1
1
  import type { Logger } from "@capybara-hq/plugin-sdk";
2
- import type { KernelDb } from "../../db/kernel-schema.js";
2
+ import type { KernelSchemaDb } from "../../db/kernel-schema.js";
3
3
  /** A finished step of a sub-agent run, as the loop reports it. */
4
4
  export interface SubagentStep {
5
5
  /** The parent conversation, whose topic gets the message. */
@@ -10,7 +10,7 @@ export interface SubagentStep {
10
10
  step: number;
11
11
  }
12
12
  export interface SubagentProgressDeps {
13
- db: KernelDb;
13
+ db: KernelSchemaDb;
14
14
  bus: {
15
15
  publish(topic: string, payload: unknown): Promise<void>;
16
16
  };
@@ -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 sub-agent roster of an agent version (phase C, spec §4.3, §5.1): the agent types its `agent`
5
5
  * tool offers, in the order the description lists them.
@@ -31,7 +31,7 @@ export declare const templateType: (plugin: string, name: string) => string;
31
31
  * since the save are skipped; allowlisted org agents stay listed (the dispatch checks their gates
32
32
  * and refuses with the §4.5 text), with `agentName` only while the agent is live.
33
33
  */
34
- export declare function resolveRoster(db: KernelDb, orgId: string, parent: Pick<AgentDefinition, "subagents">): Promise<RosterEntry[]>;
34
+ export declare function resolveRoster(db: KernelSchemaDb, orgId: string, parent: Pick<AgentDefinition, "subagents">): Promise<RosterEntry[]>;
35
35
  /**
36
36
  * The roster entry for a requested `subagent_type`: an exact type first; else a bare `<name>`
37
37
  * matches the plugin template `<plugin>:<name>` when exactly one has it (as Claude Code accepts
@@ -45,10 +45,10 @@ export declare const isGeneralAlias: (agent: string) => boolean;
45
45
  * `general-purpose` for no `agent` and Claude's built-in types; else a roster type (a bare name
46
46
  * prefers the skill's own plugin's template `<plugin>:<name>`, then {@link findType}). An `agent`
47
47
  * that does not resolve falls back to `general-purpose` and is returned as `unknown`. `inRoster`:
48
- * the type is one the parent's `agent` tool offers (`general-purpose` is not when
48
+ * the type is one the parent's `Agent` tool offers (`general-purpose` is not when
49
49
  * `subagents.general === false`, which does not block a person's fork invocation).
50
50
  */
51
- export declare function resolveSkillForkType(db: KernelDb, orgId: string, parent: Pick<AgentDefinition, "subagents">, agent: string | undefined, plugin: string | undefined): Promise<{
51
+ export declare function resolveSkillForkType(db: KernelSchemaDb, orgId: string, parent: Pick<AgentDefinition, "subagents">, agent: string | undefined, plugin: string | undefined): Promise<{
52
52
  agentType: string;
53
53
  unknown?: string;
54
54
  inRoster: boolean;
@@ -1,4 +1,4 @@
1
- import { SUBAGENT_ROSTER_MAX } from "../../agents/agents.service.js";
1
+ import { SUBAGENT_ROSTER_MAX } from "../../agents/definition.js";
2
2
  import { loadTemplates } from "../../agents/templates.js";
3
3
  export const ROSTER_DESCRIPTION_MAX = 1024;
4
4
  /** The description of `general-purpose` in the roster (spec §4.3, model-visible). */
@@ -90,7 +90,7 @@ export const isGeneralAlias = (agent) => GENERAL_ALIASES.has(agent);
90
90
  * `general-purpose` for no `agent` and Claude's built-in types; else a roster type (a bare name
91
91
  * prefers the skill's own plugin's template `<plugin>:<name>`, then {@link findType}). An `agent`
92
92
  * that does not resolve falls back to `general-purpose` and is returned as `unknown`. `inRoster`:
93
- * the type is one the parent's `agent` tool offers (`general-purpose` is not when
93
+ * the type is one the parent's `Agent` tool offers (`general-purpose` is not when
94
94
  * `subagents.general === false`, which does not block a person's fork invocation).
95
95
  */
96
96
  export async function resolveSkillForkType(db, orgId, parent, agent, plugin) {
@@ -1,21 +1,19 @@
1
- import type { Transaction } from "kysely";
2
1
  import type { EventLog } from "../../conversations/event-log.js";
3
2
  import type { ConversationEvent, EventPayload } from "../../conversations/events.js";
4
- import type { KernelDatabase } from "../../db/kernel-schema.js";
3
+ import type { KernelSchemaDb } from "../../db/kernel-schema.js";
5
4
  import { ApiError } from "../../errors.js";
6
5
  import type { SkillInvoker } from "../../skills/invoke.js";
7
- import type { LoopContext, WaitingFor } from "../loop.js";
6
+ import { type LoopContext, type WaitingFor } from "../loop.js";
8
7
  import { type DispatchDeps } from "./dispatch.js";
9
8
  /**
10
9
  * Forked skills (phase D spec §6): a person's invocation of a `context: fork` skill starts its own
11
10
  * run (the run boundary, {@link forkBoundary}), whose `prepare` node dispatches the sub-agent
12
- * through phase C's `dispatchSubagent` before any model call and waits on it like an `agent` call
11
+ * through phase C's `dispatchSubagent` before any model call and waits on it like an `Agent` call
13
12
  * (`subagents` wait `sa-<runId>-0`). When the child has ended, `prepare` appends the model-visible
14
13
  * `skill_fork_result` and the parent's model answers. Every terminal path of the run (and the wait
15
14
  * sweep) pairs a fork invocation without a report ({@link pairStoppedForks}), so the log never holds
16
15
  * a fork lead whose report is missing before the next model call.
17
16
  */
18
- type KernelTrx = Transaction<KernelDatabase>;
19
17
  /** The dispatch's parent call id (no `:`; there is no tool call). */
20
18
  export declare const skillCallId: (seq: number) => string;
21
19
  /** Idempotency key of a fork invocation's report (one per invocation, whatever the run). */
@@ -109,15 +107,16 @@ export declare const recordedSkillForks: (eventLog: Pick<EventLog, "append" | "f
109
107
  payload: unknown;
110
108
  }[]) => SkillForks;
111
109
  /**
112
- * In the transaction `t` of a run's terminal path (or the wait sweep): the run's fork invocation
110
+ * In the transaction of a run's terminal path (or the wait sweep): the run's fork invocation
113
111
  * (its trigger message, by the run boundary) without a report gets one now: the ended child's
114
112
  * result (and the parent's missing `subagent_finished`), {@link AGENT_STOPPED_WITH_RUN_TEXT} for a
115
- * child still active (the caller stops it after its commit, as for `agent` calls), or
113
+ * child still active (the caller stops it after its commit, as for `Agent` calls), or
116
114
  * {@link FORK_NOT_STARTED_TEXT} when nothing was dispatched. Returns the call ids written
117
115
  * (`skill-<seq>`) and the highest seq; the caller notifies after its commit.
118
116
  */
119
- export declare function pairStoppedForks(t: KernelTrx, eventLog: EventLog, runId: string): Promise<{
117
+ export declare function pairStoppedForks(
118
+ /** The caller's transaction (the context's handle). */
119
+ t: KernelSchemaDb, eventLog: EventLog, runId: string): Promise<{
120
120
  callIds: string[];
121
121
  toSeq: number | null;
122
122
  }>;
123
- export {};
@@ -1,9 +1,18 @@
1
1
  import { ApiError } from "../../errors.js";
2
2
  import { AGENT_STOPPED_WITH_RUN_TEXT } from "../../tools/builtins/agent.js";
3
- import { subagentsWait } from "../../tools/pipeline.js";
3
+ import { subagentsWait } from "../loop.js";
4
4
  import { TERMINAL_STATUSES } from "../run-finish.js";
5
5
  import { childResult, dispatchOfCall, finishedEvent } from "./child.js";
6
6
  import { dispatchSubagent } from "./dispatch.js";
7
+ /**
8
+ * Forked skills (phase D spec §6): a person's invocation of a `context: fork` skill starts its own
9
+ * run (the run boundary, {@link forkBoundary}), whose `prepare` node dispatches the sub-agent
10
+ * through phase C's `dispatchSubagent` before any model call and waits on it like an `Agent` call
11
+ * (`subagents` wait `sa-<runId>-0`). When the child has ended, `prepare` appends the model-visible
12
+ * `skill_fork_result` and the parent's model answers. Every terminal path of the run (and the wait
13
+ * sweep) pairs a fork invocation without a report ({@link pairStoppedForks}), so the log never holds
14
+ * a fork lead whose report is missing before the next model call.
15
+ */
7
16
  /** The dispatch's parent call id (no `:`; there is no tool call). */
8
17
  export const skillCallId = (seq) => `skill-${seq}`;
9
18
  /** Idempotency key of a fork invocation's report (one per invocation, whatever the run). */
@@ -146,7 +155,7 @@ export async function advanceSkillForks(d, a) {
146
155
  }
147
156
  const suspend = (d, ctx) => ({
148
157
  kind: "suspend",
149
- waitingFor: subagentsWait(ctx.runId, FORK_STEP, d.config()),
158
+ waitingFor: subagentsWait(ctx.runId, FORK_STEP, d.config.get()),
150
159
  });
151
160
  /** The live handler for the loop (`LoopDeps.skillForks`). */
152
161
  export const liveSkillForks = (d) => ({
@@ -178,14 +187,16 @@ export const recordedSkillForks = (eventLog, recorded) => ({
178
187
  },
179
188
  });
180
189
  /**
181
- * In the transaction `t` of a run's terminal path (or the wait sweep): the run's fork invocation
190
+ * In the transaction of a run's terminal path (or the wait sweep): the run's fork invocation
182
191
  * (its trigger message, by the run boundary) without a report gets one now: the ended child's
183
192
  * result (and the parent's missing `subagent_finished`), {@link AGENT_STOPPED_WITH_RUN_TEXT} for a
184
- * child still active (the caller stops it after its commit, as for `agent` calls), or
193
+ * child still active (the caller stops it after its commit, as for `Agent` calls), or
185
194
  * {@link FORK_NOT_STARTED_TEXT} when nothing was dispatched. Returns the call ids written
186
195
  * (`skill-<seq>`) and the highest seq; the caller notifies after its commit.
187
196
  */
188
- export async function pairStoppedForks(t, eventLog, runId) {
197
+ export async function pairStoppedForks(
198
+ /** The caller's transaction (the context's handle). */
199
+ t, eventLog, runId) {
189
200
  const none = { callIds: [], toSeq: null };
190
201
  const run = await t
191
202
  .selectFrom("runs as r")
@@ -254,6 +265,6 @@ export async function pairStoppedForks(t, eventLog, runId) {
254
265
  events.push(finishedEvent(row, ended.finished));
255
266
  events.push(reportEvent(runId, seq, forkReportText(skill.name, ended ? ended.content : AGENT_STOPPED_WITH_RUN_TEXT), row));
256
267
  }
257
- const out = await eventLog.append(conversationId, events, t);
268
+ const out = await eventLog.appendIn(conversationId, events);
258
269
  return { callIds: [callId], toSeq: Math.max(...out.map((e) => e.seq)) };
259
270
  }
@@ -0,0 +1,40 @@
1
+ import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
2
+ import { EventLog } from "../../conversations/event-log.js";
3
+ import { KernelConfigService } from "../../infra/config/kernel-config.service.js";
4
+ import { KernelDb } from "../../infra/database/kernel-db.js";
5
+ import { TransactionHost } from "../../infra/database/transaction-host.js";
6
+ import type { KernelLogger } from "../../log.js";
7
+ import { ModelPurposesService } from "../../models/purposes.js";
8
+ import { SkillInvoker } from "../../skills/invoke.js";
9
+ import { ProviderRegistry } from "../providers.js";
10
+ import { RunJobs } from "../run-jobs.js";
11
+ import { type ChildWriter, type DispatchArgs, type DispatchCommit, type DispatchOutcome, type DispatchPlan } from "./dispatch.js";
12
+ import { type SubagentStep } from "./progress.js";
13
+ import { type SkillForkDeps, type SkillForks } from "./skill-fork.js";
14
+ /**
15
+ * Sub-agents (phase C, spec §7) and forked skills (phase D): the `Agent` tool's dispatch (the
16
+ * tool pipeline calls {@link dispatch}), a run's fork invocation ({@link skillForks}, the loop's
17
+ * `prepare`) and a child step's progress on the parent's stream ({@link progress}). Child runs go
18
+ * to the sub-agent run queue through {@link RunJobs}. The child lifecycle after dispatch (a
19
+ * finished child resumes its parent, a stopped parent stops its children) is the waits'
20
+ * (`Waits.childFinished` / `stopChildren`).
21
+ */
22
+ export declare class SubagentsService {
23
+ private readonly bus;
24
+ private readonly log;
25
+ readonly txHost: TransactionHost;
26
+ /** The dispatch's dependencies (`dispatch.ts`, `skill-fork.ts`). */
27
+ readonly deps: SkillForkDeps;
28
+ /** The live fork handler of the loop (`LoopDeps.skillForks`). */
29
+ readonly skillForks: SkillForks;
30
+ constructor(kdb: KernelDb, eventLog: EventLog, purposes: ModelPurposesService, registry: ProviderRegistry, config: KernelConfigService, jobs: RunJobs, invoker: SkillInvoker, bus: ExtensionContext["bus"], log: KernelLogger, txHost: TransactionHost);
31
+ /** Dispatches the sub-agent of one `Agent` call (`dispatchSubagent`). */
32
+ dispatch(a: DispatchArgs): Promise<DispatchOutcome>;
33
+ /** The dispatch's writes in a transaction of their own (see `commitDispatchIn`). */
34
+ commitDispatch(a: DispatchArgs, plan: DispatchPlan, child: ChildWriter): Promise<DispatchCommit | null>;
35
+ /** A sub-agent's finished step on its parent's stream (sub-agents spec §14.2). Never throws. */
36
+ progress(s: SubagentStep): Promise<void>;
37
+ }
38
+ /** Sub-agent dispatch (the tools domain's `Agent` tool and the run loop use it). */
39
+ export declare class SubagentsModule {
40
+ }