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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/bootstrap.json +10 -6
  2. package/dist/admin/admin.controller.d.ts +17 -17
  3. package/dist/admin/admin.controller.js +43 -26
  4. package/dist/admin/admin.module.d.ts +3 -0
  5. package/dist/admin/admin.module.js +22 -0
  6. package/dist/admin/extensions.controller.d.ts +14 -14
  7. package/dist/admin/extensions.controller.js +30 -17
  8. package/dist/admin/setup-lock.d.ts +16 -0
  9. package/dist/admin/setup-lock.js +47 -0
  10. package/dist/admin/setup.controller.d.ts +8 -8
  11. package/dist/admin/setup.controller.js +27 -25
  12. package/dist/admin/setup.service.d.ts +19 -27
  13. package/dist/admin/setup.service.js +61 -61
  14. package/dist/agents/agent-lookup.d.ts +53 -0
  15. package/dist/agents/agent-lookup.js +179 -0
  16. package/dist/agents/agents.controller.d.ts +1 -1
  17. package/dist/agents/agents.controller.js +14 -8
  18. package/dist/agents/agents.module.d.ts +7 -0
  19. package/dist/agents/agents.module.js +41 -0
  20. package/dist/agents/agents.service.d.ts +39 -58
  21. package/dist/agents/agents.service.js +261 -329
  22. package/dist/agents/definition.d.ts +8 -0
  23. package/dist/agents/definition.js +8 -0
  24. package/dist/agents/models.controller.d.ts +1 -1
  25. package/dist/agents/models.controller.js +2 -2
  26. package/dist/agents/templates.controller.d.ts +1 -1
  27. package/dist/agents/templates.controller.js +2 -2
  28. package/dist/agents/templates.d.ts +6 -8
  29. package/dist/agents/templates.js +20 -4
  30. package/dist/app.d.ts +93 -0
  31. package/dist/app.js +150 -0
  32. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  33. package/dist/catalog/admin-catalog.controller.js +27 -13
  34. package/dist/catalog/catalog-content.d.ts +185 -0
  35. package/dist/catalog/catalog-content.js +323 -0
  36. package/dist/catalog/catalog-items.d.ts +186 -0
  37. package/dist/catalog/catalog-items.js +410 -0
  38. package/dist/catalog/catalog.module.d.ts +14 -0
  39. package/dist/catalog/catalog.module.js +71 -0
  40. package/dist/catalog/catalog.service.d.ts +34 -188
  41. package/dist/catalog/catalog.service.js +155 -489
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +30 -13
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +2 -2
  70. package/dist/channels/channels.module.d.ts +40 -0
  71. package/dist/channels/channels.module.js +128 -0
  72. package/dist/channels/connections.controller.d.ts +1 -1
  73. package/dist/channels/connections.controller.js +11 -6
  74. package/dist/channels/connections.service.d.ts +43 -21
  75. package/dist/channels/connections.service.js +236 -131
  76. package/dist/channels/inbound.d.ts +34 -38
  77. package/dist/channels/inbound.js +107 -41
  78. package/dist/channels/job-ids.d.ts +10 -0
  79. package/dist/channels/job-ids.js +10 -0
  80. package/dist/channels/jobs.d.ts +85 -0
  81. package/dist/channels/jobs.js +157 -0
  82. package/dist/channels/outbound.d.ts +60 -82
  83. package/dist/channels/outbound.js +165 -193
  84. package/dist/channels/supervisor.d.ts +88 -46
  85. package/dist/channels/supervisor.js +230 -132
  86. package/dist/channels/threads.d.ts +29 -8
  87. package/dist/channels/threads.js +71 -13
  88. package/dist/channels/webhook.d.ts +20 -14
  89. package/dist/channels/webhook.js +51 -20
  90. package/dist/config/load.d.ts +3 -2
  91. package/dist/config/load.js +3 -2
  92. package/dist/config/nacos-source.js +11 -2
  93. package/dist/config/schema.d.ts +16 -1
  94. package/dist/config/schema.js +54 -7
  95. package/dist/conversations/access.d.ts +29 -0
  96. package/dist/conversations/access.js +86 -0
  97. package/dist/conversations/artifacts.d.ts +10 -10
  98. package/dist/conversations/artifacts.js +35 -9
  99. package/dist/conversations/attachments.controller.d.ts +1 -1
  100. package/dist/conversations/attachments.controller.js +8 -6
  101. package/dist/conversations/attachments.module.d.ts +7 -0
  102. package/dist/conversations/attachments.module.js +25 -0
  103. package/dist/conversations/attachments.service.d.ts +30 -22
  104. package/dist/conversations/attachments.service.js +119 -46
  105. package/dist/conversations/conversations.controller.d.ts +8 -7
  106. package/dist/conversations/conversations.controller.js +59 -29
  107. package/dist/conversations/conversations.module.d.ts +8 -0
  108. package/dist/conversations/conversations.module.js +69 -0
  109. package/dist/conversations/conversations.service.d.ts +40 -38
  110. package/dist/conversations/conversations.service.js +130 -140
  111. package/dist/conversations/event-log.d.ts +28 -18
  112. package/dist/conversations/event-log.js +74 -27
  113. package/dist/conversations/files.d.ts +10 -10
  114. package/dist/conversations/files.js +37 -11
  115. package/dist/conversations/idem-keys.d.ts +5 -0
  116. package/dist/conversations/idem-keys.js +5 -0
  117. package/dist/conversations/job-ids.d.ts +6 -0
  118. package/dist/conversations/job-ids.js +6 -0
  119. package/dist/conversations/outputs-read.d.ts +11 -11
  120. package/dist/conversations/outputs-read.js +31 -7
  121. package/dist/conversations/queue.d.ts +48 -56
  122. package/dist/conversations/queue.js +13 -289
  123. package/dist/conversations/queue.service.d.ts +60 -0
  124. package/dist/conversations/queue.service.js +343 -0
  125. package/dist/conversations/sandbox-status.d.ts +13 -10
  126. package/dist/conversations/sandbox-status.js +36 -8
  127. package/dist/conversations/titles.d.ts +71 -24
  128. package/dist/conversations/titles.js +159 -62
  129. package/dist/ctx/bus.js +9 -3
  130. package/dist/ctx/create-ctx.d.ts +6 -0
  131. package/dist/ctx/create-ctx.js +7 -9
  132. package/dist/ctx/lock.d.ts +7 -3
  133. package/dist/ctx/lock.js +9 -20
  134. package/dist/ctx/queue.js +3 -2
  135. package/dist/ctx/secrets.d.ts +10 -2
  136. package/dist/ctx/secrets.js +7 -3
  137. package/dist/db/kernel-schema.d.ts +2 -2
  138. package/dist/db/pool.d.ts +5 -0
  139. package/dist/db/pool.js +1 -0
  140. package/dist/errors.d.ts +2 -0
  141. package/dist/errors.js +2 -0
  142. package/dist/evals/budget.d.ts +42 -21
  143. package/dist/evals/budget.js +114 -62
  144. package/dist/evals/evals.module.d.ts +31 -0
  145. package/dist/evals/evals.module.js +114 -0
  146. package/dist/evals/jobs.d.ts +20 -0
  147. package/dist/evals/jobs.js +45 -0
  148. package/dist/evals/run-replay.d.ts +56 -8
  149. package/dist/evals/run-replay.js +140 -80
  150. package/dist/evals/runs.controller.d.ts +1 -1
  151. package/dist/evals/runs.controller.js +17 -8
  152. package/dist/evals/runs.service.d.ts +23 -45
  153. package/dist/evals/runs.service.js +245 -234
  154. package/dist/evals/sets.controller.d.ts +1 -1
  155. package/dist/evals/sets.controller.js +17 -8
  156. package/dist/evals/sets.service.d.ts +22 -6
  157. package/dist/evals/sets.service.js +248 -194
  158. package/dist/evals/snapshot.d.ts +2 -2
  159. package/dist/evals/step-replay.d.ts +2 -2
  160. package/dist/evals/step-replay.js +1 -1
  161. package/dist/evals/trajectory.controller.d.ts +1 -1
  162. package/dist/evals/trajectory.controller.js +11 -7
  163. package/dist/evals/trajectory.service.d.ts +5 -4
  164. package/dist/evals/trajectory.service.js +30 -7
  165. package/dist/evals/worker.d.ts +44 -27
  166. package/dist/evals/worker.js +220 -120
  167. package/dist/extensions/admin-ops.d.ts +61 -33
  168. package/dist/extensions/admin-ops.js +248 -154
  169. package/dist/extensions/admin-view.d.ts +38 -27
  170. package/dist/extensions/admin-view.js +126 -55
  171. package/dist/extensions/approvals.d.ts +12 -8
  172. package/dist/extensions/approvals.js +73 -46
  173. package/dist/extensions/blobs.d.ts +27 -10
  174. package/dist/extensions/blobs.js +111 -45
  175. package/dist/extensions/bootstrap.d.ts +96 -42
  176. package/dist/extensions/bootstrap.js +303 -155
  177. package/dist/extensions/cli.d.ts +20 -10
  178. package/dist/extensions/cli.js +41 -96
  179. package/dist/extensions/config-issues.d.ts +7 -0
  180. package/dist/extensions/config-issues.js +31 -0
  181. package/dist/extensions/deployment-config-store.d.ts +49 -0
  182. package/dist/extensions/deployment-config-store.js +133 -0
  183. package/dist/extensions/deployment-config.d.ts +58 -67
  184. package/dist/extensions/deployment-config.js +202 -230
  185. package/dist/extensions/enabled.d.ts +5 -5
  186. package/dist/extensions/extensions.module.d.ts +8 -0
  187. package/dist/extensions/extensions.module.js +77 -0
  188. package/dist/extensions/hooks.d.ts +3 -2
  189. package/dist/extensions/hooks.js +1 -1
  190. package/dist/extensions/host.d.ts +72 -68
  191. package/dist/extensions/host.js +191 -152
  192. package/dist/extensions/installs.d.ts +49 -16
  193. package/dist/extensions/installs.js +128 -32
  194. package/dist/extensions/job-ids.d.ts +6 -0
  195. package/dist/extensions/job-ids.js +6 -0
  196. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  197. package/dist/extensions/lifecycle-topics.js +18 -0
  198. package/dist/extensions/lifecycle.d.ts +35 -47
  199. package/dist/extensions/lifecycle.js +103 -39
  200. package/dist/extensions/locks.d.ts +33 -0
  201. package/dist/extensions/locks.js +86 -0
  202. package/dist/extensions/migrate-lock.d.ts +3 -4
  203. package/dist/extensions/org-config.controller.d.ts +1 -1
  204. package/dist/extensions/org-config.controller.js +8 -5
  205. package/dist/extensions/org-config.d.ts +48 -46
  206. package/dist/extensions/org-config.js +284 -226
  207. package/dist/extensions/registry.d.ts +50 -2
  208. package/dist/extensions/registry.js +89 -4
  209. package/dist/extensions/sources.d.ts +12 -8
  210. package/dist/extensions/sources.js +34 -13
  211. package/dist/files/files.module.d.ts +3 -0
  212. package/dist/files/files.module.js +22 -0
  213. package/dist/files/previewers.controller.d.ts +7 -2
  214. package/dist/files/previewers.controller.js +17 -9
  215. package/dist/files/previewers.d.ts +13 -18
  216. package/dist/files/previewers.js +83 -36
  217. package/dist/http/adapter.d.ts +3 -0
  218. package/dist/http/adapter.js +25 -0
  219. package/dist/http/api.module.d.ts +3 -110
  220. package/dist/http/api.module.js +47 -355
  221. package/dist/http/app.d.ts +11 -15
  222. package/dist/http/app.js +52 -47
  223. package/dist/http/error-filter.module.d.ts +5 -0
  224. package/dist/http/error-filter.module.js +18 -0
  225. package/dist/http/error.filter.js +2 -2
  226. package/dist/identity/accounts.d.ts +82 -29
  227. package/dist/identity/accounts.js +294 -175
  228. package/dist/identity/api-tokens.d.ts +11 -7
  229. package/dist/identity/api-tokens.js +71 -44
  230. package/dist/identity/audit.d.ts +7 -4
  231. package/dist/identity/audit.js +5 -1
  232. package/dist/identity/auth.controller.d.ts +11 -10
  233. package/dist/identity/auth.controller.js +31 -25
  234. package/dist/identity/auth.guard.d.ts +3 -3
  235. package/dist/identity/auth.guard.js +6 -4
  236. package/dist/identity/binding.d.ts +9 -11
  237. package/dist/identity/binding.js +41 -13
  238. package/dist/identity/enterprise-admin.d.ts +18 -12
  239. package/dist/identity/enterprise-admin.js +67 -13
  240. package/dist/identity/external-identity-lock.d.ts +17 -0
  241. package/dist/identity/external-identity-lock.js +39 -0
  242. package/dist/identity/external.d.ts +19 -15
  243. package/dist/identity/external.js +163 -125
  244. package/dist/identity/identity.module.d.ts +6 -0
  245. package/dist/identity/identity.module.js +56 -0
  246. package/dist/identity/me.controller.d.ts +16 -15
  247. package/dist/identity/me.controller.js +37 -31
  248. package/dist/identity/sessions.d.ts +12 -10
  249. package/dist/identity/sessions.js +74 -42
  250. package/dist/identity/settings.d.ts +20 -14
  251. package/dist/identity/settings.js +85 -57
  252. package/dist/identity/sso.controller.d.ts +7 -7
  253. package/dist/identity/sso.controller.js +13 -9
  254. package/dist/identity/sso.d.ts +9 -12
  255. package/dist/identity/sso.js +54 -24
  256. package/dist/inbox/inbox.module.d.ts +3 -0
  257. package/dist/inbox/inbox.module.js +22 -0
  258. package/dist/inbox/inbox.service.d.ts +7 -9
  259. package/dist/inbox/inbox.service.js +32 -11
  260. package/dist/index.d.ts +19 -12
  261. package/dist/index.js +13 -8
  262. package/dist/infra/cache/cache.module.d.ts +3 -0
  263. package/dist/infra/cache/cache.module.js +16 -0
  264. package/dist/infra/cache/cache.service.d.ts +21 -0
  265. package/dist/infra/cache/cache.service.js +80 -0
  266. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  267. package/dist/infra/cache/cacheable.decorator.js +83 -0
  268. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  269. package/dist/infra/cli/kernel-cli.module.js +165 -0
  270. package/dist/infra/close-within.d.ts +15 -0
  271. package/dist/infra/close-within.js +36 -0
  272. package/dist/infra/config/config.module.d.ts +13 -0
  273. package/dist/infra/config/config.module.js +39 -0
  274. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  275. package/dist/infra/config/kernel-config.service.js +126 -0
  276. package/dist/infra/database/after-commit.d.ts +6 -0
  277. package/dist/infra/database/after-commit.js +9 -0
  278. package/dist/infra/database/database.module.d.ts +25 -0
  279. package/dist/infra/database/database.module.js +90 -0
  280. package/dist/infra/database/kernel-db.d.ts +22 -0
  281. package/dist/infra/database/kernel-db.js +65 -0
  282. package/dist/infra/database/transaction-host.d.ts +50 -0
  283. package/dist/infra/database/transaction-host.js +125 -0
  284. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  285. package/dist/infra/database/transactional.decorator.js +27 -0
  286. package/dist/infra/database/xact-lock.d.ts +17 -0
  287. package/dist/infra/database/xact-lock.js +43 -0
  288. package/dist/infra/events/kernel-events.d.ts +96 -0
  289. package/dist/infra/events/kernel-events.js +65 -0
  290. package/dist/infra/health/health.controller.d.ts +26 -0
  291. package/dist/infra/health/health.controller.js +104 -0
  292. package/dist/infra/health/health.module.d.ts +9 -0
  293. package/dist/infra/health/health.module.js +24 -0
  294. package/dist/infra/health/health.options.d.ts +10 -0
  295. package/dist/infra/health/health.options.js +15 -0
  296. package/dist/infra/health/shutdown-state.d.ts +6 -0
  297. package/dist/infra/health/shutdown-state.js +2 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  300. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  301. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  302. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  303. package/dist/infra/lifecycle/process-guards.js +86 -0
  304. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  305. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  306. package/dist/infra/lock/key-template.d.ts +13 -0
  307. package/dist/infra/lock/key-template.js +46 -0
  308. package/dist/infra/lock/lock.module.d.ts +3 -0
  309. package/dist/infra/lock/lock.module.js +16 -0
  310. package/dist/infra/lock/lock.service.d.ts +120 -0
  311. package/dist/infra/lock/lock.service.js +343 -0
  312. package/dist/infra/lock/shared-lease.d.ts +44 -0
  313. package/dist/infra/lock/shared-lease.js +121 -0
  314. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  315. package/dist/infra/lock/with-lock.decorator.js +49 -0
  316. package/dist/infra/logging/logging.module.d.ts +16 -0
  317. package/dist/infra/logging/logging.module.js +34 -0
  318. package/dist/infra/queue/configured-processor.d.ts +18 -0
  319. package/dist/infra/queue/configured-processor.js +23 -0
  320. package/dist/infra/queue/job-failure.d.ts +18 -0
  321. package/dist/infra/queue/job-failure.js +26 -0
  322. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  323. package/dist/infra/queue/queue-shutdown.js +81 -0
  324. package/dist/infra/queue/queue.module.d.ts +16 -0
  325. package/dist/infra/queue/queue.module.js +61 -0
  326. package/dist/infra/queue/redis-connection.d.ts +7 -0
  327. package/dist/infra/queue/redis-connection.js +18 -0
  328. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  329. package/dist/infra/queue/retired-schedulers.js +9 -0
  330. package/dist/infra/queue/run-job.d.ts +16 -0
  331. package/dist/infra/queue/run-job.js +19 -0
  332. package/dist/infra/redis/redis.module.d.ts +24 -0
  333. package/dist/infra/redis/redis.module.js +87 -0
  334. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  335. package/dist/infra/schedule/cron-tick.js +25 -0
  336. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  337. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  338. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  339. package/dist/infra/schedule/locked-interval.js +190 -0
  340. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  341. package/dist/infra/schedule/locked-tick.js +137 -0
  342. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  343. package/dist/infra/schedule/schedule.module.js +27 -0
  344. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  345. package/dist/infra/schedule/scheduled-runs.js +163 -0
  346. package/dist/infra/swagger/swagger.d.ts +16 -0
  347. package/dist/infra/swagger/swagger.js +31 -0
  348. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  349. package/dist/infra/throttler/credential-throttler.js +77 -0
  350. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  351. package/dist/infra/throttler/named-throttlers.js +119 -0
  352. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  353. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  354. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  355. package/dist/infra/throttler/throttler.guard.js +68 -0
  356. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  357. package/dist/infra/throttler/throttler.module.js +53 -0
  358. package/dist/infra/tokens.d.ts +15 -0
  359. package/dist/infra/tokens.js +15 -0
  360. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  361. package/dist/infra/validation/create-zod-dto.js +35 -0
  362. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  363. package/dist/infra/validation/parse-with-zod.js +12 -0
  364. package/dist/infra/validation/validation.module.d.ts +3 -0
  365. package/dist/infra/validation/validation.module.js +16 -0
  366. package/dist/infra/validation/zod-params.d.ts +7 -0
  367. package/dist/infra/validation/zod-params.js +42 -0
  368. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  369. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  370. package/dist/kernel.d.ts +9 -241
  371. package/dist/kernel.js +8 -1305
  372. package/dist/kernel.module.d.ts +17 -0
  373. package/dist/kernel.module.js +136 -0
  374. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  375. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  376. package/dist/lifecycle/tokens.d.ts +3 -0
  377. package/dist/lifecycle/tokens.js +3 -0
  378. package/dist/log-config.d.ts +9 -0
  379. package/dist/log-config.js +27 -0
  380. package/dist/log-context.d.ts +34 -0
  381. package/dist/log-context.js +44 -0
  382. package/dist/log-loki.d.ts +34 -0
  383. package/dist/log-loki.js +145 -0
  384. package/dist/log.d.ts +41 -10
  385. package/dist/log.js +91 -17
  386. package/dist/models/models.module.d.ts +3 -0
  387. package/dist/models/models.module.js +24 -0
  388. package/dist/models/prices.d.ts +8 -2
  389. package/dist/models/prices.js +65 -37
  390. package/dist/models/purposes.controller.d.ts +1 -1
  391. package/dist/models/purposes.controller.js +5 -6
  392. package/dist/models/purposes.d.ts +35 -13
  393. package/dist/models/purposes.js +101 -51
  394. package/dist/net/public-address.js +3 -2
  395. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  396. package/dist/orgs/directory-sync.controller.js +2 -2
  397. package/dist/orgs/directory-sync.d.ts +61 -31
  398. package/dist/orgs/directory-sync.js +212 -125
  399. package/dist/orgs/invitations.controller.d.ts +8 -8
  400. package/dist/orgs/invitations.controller.js +27 -26
  401. package/dist/orgs/invitations.service.d.ts +12 -9
  402. package/dist/orgs/invitations.service.js +130 -92
  403. package/dist/orgs/job-ids.d.ts +8 -0
  404. package/dist/orgs/job-ids.js +8 -0
  405. package/dist/orgs/members.service.d.ts +19 -12
  406. package/dist/orgs/members.service.js +161 -117
  407. package/dist/orgs/offboarding.d.ts +54 -57
  408. package/dist/orgs/offboarding.js +161 -71
  409. package/dist/orgs/org-lock.d.ts +28 -19
  410. package/dist/orgs/org-lock.js +81 -35
  411. package/dist/orgs/org.guard.d.ts +1 -1
  412. package/dist/orgs/org.guard.js +2 -2
  413. package/dist/orgs/orgs.controller.d.ts +13 -13
  414. package/dist/orgs/orgs.controller.js +29 -17
  415. package/dist/orgs/orgs.module.d.ts +6 -0
  416. package/dist/orgs/orgs.module.js +68 -0
  417. package/dist/orgs/orgs.service.d.ts +30 -19
  418. package/dist/orgs/orgs.service.js +139 -86
  419. package/dist/orgs/settings.controller.d.ts +1 -1
  420. package/dist/orgs/settings.controller.js +8 -6
  421. package/dist/orgs/settings.service.d.ts +14 -8
  422. package/dist/orgs/settings.service.js +75 -46
  423. package/dist/overrides.d.ts +56 -0
  424. package/dist/overrides.js +30 -0
  425. package/dist/roles/gateway-role.d.ts +43 -0
  426. package/dist/roles/gateway-role.js +98 -0
  427. package/dist/roles/gateway.module.d.ts +8 -0
  428. package/dist/roles/gateway.module.js +28 -0
  429. package/dist/roles/worker-role.d.ts +63 -0
  430. package/dist/roles/worker-role.js +144 -0
  431. package/dist/roles/worker.module.d.ts +14 -0
  432. package/dist/roles/worker.module.js +90 -0
  433. package/dist/runtime/abort.js +19 -2
  434. package/dist/runtime/checkpointer.d.ts +8 -3
  435. package/dist/runtime/checkpointer.js +87 -55
  436. package/dist/runtime/conversation-lock.d.ts +20 -11
  437. package/dist/runtime/conversation-lock.js +62 -72
  438. package/dist/runtime/hook-calls.d.ts +3 -3
  439. package/dist/runtime/hook-calls.js +1 -6
  440. package/dist/runtime/job-ids.d.ts +10 -0
  441. package/dist/runtime/job-ids.js +10 -0
  442. package/dist/runtime/langgraph-loop.js +1 -1
  443. package/dist/runtime/loop.d.ts +7 -0
  444. package/dist/runtime/loop.js +14 -0
  445. package/dist/runtime/maintenance-queue.d.ts +10 -0
  446. package/dist/runtime/maintenance-queue.js +10 -0
  447. package/dist/runtime/maintenance.d.ts +45 -74
  448. package/dist/runtime/maintenance.js +139 -136
  449. package/dist/runtime/model-call.d.ts +7 -4
  450. package/dist/runtime/model-call.js +24 -57
  451. package/dist/runtime/providers.d.ts +17 -6
  452. package/dist/runtime/providers.js +66 -25
  453. package/dist/runtime/quota.d.ts +17 -3
  454. package/dist/runtime/quota.js +27 -2
  455. package/dist/runtime/retired-schedulers.d.ts +7 -0
  456. package/dist/runtime/retired-schedulers.js +31 -0
  457. package/dist/runtime/run-control.d.ts +33 -0
  458. package/dist/runtime/run-control.js +77 -0
  459. package/dist/runtime/run-finish.d.ts +26 -17
  460. package/dist/runtime/run-finish.js +98 -51
  461. package/dist/runtime/run-jobs.d.ts +48 -0
  462. package/dist/runtime/run-jobs.js +95 -0
  463. package/dist/runtime/run-processors.d.ts +60 -0
  464. package/dist/runtime/run-processors.js +185 -0
  465. package/dist/runtime/run-queue.d.ts +32 -57
  466. package/dist/runtime/run-queue.js +291 -295
  467. package/dist/runtime/run-steps.d.ts +39 -0
  468. package/dist/runtime/run-steps.js +96 -0
  469. package/dist/runtime/run-worker.d.ts +121 -75
  470. package/dist/runtime/run-worker.js +340 -225
  471. package/dist/runtime/runtime.module.d.ts +10 -0
  472. package/dist/runtime/runtime.module.js +112 -0
  473. package/dist/runtime/step-log.d.ts +40 -0
  474. package/dist/runtime/step-log.js +94 -0
  475. package/dist/runtime/stream.controller.d.ts +5 -8
  476. package/dist/runtime/stream.controller.js +14 -12
  477. package/dist/runtime/stream.d.ts +24 -6
  478. package/dist/runtime/stream.js +78 -7
  479. package/dist/runtime/subagents/child.d.ts +3 -44
  480. package/dist/runtime/subagents/child.js +0 -79
  481. package/dist/runtime/subagents/definition.d.ts +4 -4
  482. package/dist/runtime/subagents/definition.js +2 -2
  483. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  484. package/dist/runtime/subagents/dispatch.js +135 -140
  485. package/dist/runtime/subagents/limits.d.ts +9 -4
  486. package/dist/runtime/subagents/limits.js +4 -2
  487. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  488. package/dist/runtime/subagents/org-agents.js +1 -1
  489. package/dist/runtime/subagents/progress.d.ts +2 -2
  490. package/dist/runtime/subagents/roster.d.ts +3 -3
  491. package/dist/runtime/subagents/roster.js +1 -1
  492. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  493. package/dist/runtime/subagents/skill-fork.js +16 -5
  494. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  495. package/dist/runtime/subagents/subagents.service.js +101 -0
  496. package/dist/runtime/usage-report.d.ts +94 -52
  497. package/dist/runtime/usage-report.js +200 -99
  498. package/dist/runtime/waits.d.ts +125 -57
  499. package/dist/runtime/waits.js +431 -208
  500. package/dist/sandbox/job-ids.d.ts +10 -0
  501. package/dist/sandbox/job-ids.js +10 -0
  502. package/dist/sandbox/jobs.d.ts +41 -0
  503. package/dist/sandbox/jobs.js +113 -0
  504. package/dist/sandbox/leases.d.ts +39 -31
  505. package/dist/sandbox/leases.js +117 -257
  506. package/dist/sandbox/providers.d.ts +19 -0
  507. package/dist/sandbox/providers.js +38 -0
  508. package/dist/sandbox/sandbox.module.d.ts +8 -0
  509. package/dist/sandbox/sandbox.module.js +30 -0
  510. package/dist/sandbox/sandbox.service.d.ts +24 -29
  511. package/dist/sandbox/sandbox.service.js +106 -75
  512. package/dist/skills/catalog.d.ts +33 -20
  513. package/dist/skills/catalog.js +96 -53
  514. package/dist/skills/changes.controller.d.ts +4 -4
  515. package/dist/skills/changes.controller.js +15 -9
  516. package/dist/skills/changes.service.d.ts +28 -18
  517. package/dist/skills/changes.service.js +421 -364
  518. package/dist/skills/invocable.controller.d.ts +1 -1
  519. package/dist/skills/invocable.controller.js +8 -5
  520. package/dist/skills/invoke.d.ts +16 -15
  521. package/dist/skills/invoke.js +48 -17
  522. package/dist/skills/skills.controller.d.ts +1 -1
  523. package/dist/skills/skills.controller.js +11 -6
  524. package/dist/skills/skills.module.d.ts +6 -0
  525. package/dist/skills/skills.module.js +30 -0
  526. package/dist/skills/skills.service.d.ts +47 -30
  527. package/dist/skills/skills.service.js +221 -158
  528. package/dist/storage/job-ids.d.ts +6 -0
  529. package/dist/storage/job-ids.js +6 -0
  530. package/dist/storage/purge.d.ts +22 -7
  531. package/dist/storage/purge.js +55 -3
  532. package/dist/storage/storage.module.d.ts +6 -0
  533. package/dist/storage/storage.module.js +23 -0
  534. package/dist/storage/storage.service.d.ts +18 -4
  535. package/dist/storage/storage.service.js +44 -3
  536. package/dist/tools/approvals.controller.d.ts +1 -1
  537. package/dist/tools/approvals.controller.js +12 -8
  538. package/dist/tools/approvals.service.d.ts +27 -25
  539. package/dist/tools/approvals.service.js +324 -258
  540. package/dist/tools/breaker.d.ts +2 -2
  541. package/dist/tools/breaker.js +21 -3
  542. package/dist/tools/builtins/ask-user.d.ts +2 -2
  543. package/dist/tools/builtins/ask-user.js +1 -1
  544. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  545. package/dist/tools/builtins/builtin-tools.js +80 -0
  546. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  547. package/dist/tools/builtins/read-tool-output.js +1 -1
  548. package/dist/tools/builtins/sandbox/bash.js +2 -2
  549. package/dist/tools/builtins/sandbox/common.d.ts +7 -4
  550. package/dist/tools/builtins/sandbox/common.js +5 -3
  551. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  552. package/dist/tools/builtins/sandbox/edit.js +1 -1
  553. package/dist/tools/builtins/sandbox/glob.js +2 -2
  554. package/dist/tools/builtins/sandbox/grep.js +2 -2
  555. package/dist/tools/builtins/sandbox/read.js +1 -1
  556. package/dist/tools/builtins/sandbox/write.js +1 -1
  557. package/dist/tools/builtins/skill-load.d.ts +3 -3
  558. package/dist/tools/builtins/skill-load.js +1 -1
  559. package/dist/tools/canonical-json.d.ts +6 -0
  560. package/dist/tools/canonical-json.js +16 -0
  561. package/dist/tools/connector-content.controller.d.ts +1 -1
  562. package/dist/tools/connector-content.controller.js +11 -6
  563. package/dist/tools/connector-content.d.ts +12 -15
  564. package/dist/tools/connector-content.js +53 -18
  565. package/dist/tools/connectors.controller.d.ts +1 -1
  566. package/dist/tools/connectors.controller.js +21 -10
  567. package/dist/tools/connectors.service.d.ts +31 -13
  568. package/dist/tools/connectors.service.js +434 -344
  569. package/dist/tools/credentials.d.ts +17 -20
  570. package/dist/tools/credentials.js +55 -34
  571. package/dist/tools/drift.d.ts +29 -41
  572. package/dist/tools/drift.js +111 -79
  573. package/dist/tools/info.d.ts +12 -9
  574. package/dist/tools/info.js +33 -7
  575. package/dist/tools/job-ids.d.ts +13 -0
  576. package/dist/tools/job-ids.js +15 -0
  577. package/dist/tools/jobs.d.ts +24 -0
  578. package/dist/tools/jobs.js +69 -0
  579. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  580. package/dist/tools/oauth/flow-paths.js +38 -0
  581. package/dist/tools/oauth/flow.d.ts +30 -30
  582. package/dist/tools/oauth/flow.js +109 -81
  583. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  584. package/dist/tools/oauth/oauth.controller.js +12 -9
  585. package/dist/tools/oauth/tokens.d.ts +11 -3
  586. package/dist/tools/oauth/tokens.js +15 -14
  587. package/dist/tools/outputs.d.ts +13 -4
  588. package/dist/tools/outputs.js +47 -3
  589. package/dist/tools/pipeline.d.ts +62 -46
  590. package/dist/tools/pipeline.js +145 -64
  591. package/dist/tools/policy.d.ts +2 -2
  592. package/dist/tools/questions.controller.d.ts +1 -1
  593. package/dist/tools/questions.controller.js +8 -5
  594. package/dist/tools/questions.service.d.ts +25 -24
  595. package/dist/tools/questions.service.js +201 -142
  596. package/dist/tools/registry.d.ts +30 -20
  597. package/dist/tools/registry.js +73 -37
  598. package/dist/tools/specs.d.ts +5 -4
  599. package/dist/tools/specs.js +3 -1
  600. package/dist/tools/tools.module.d.ts +10 -0
  601. package/dist/tools/tools.module.js +91 -0
  602. package/dist/ui/call-extension.d.ts +16 -0
  603. package/dist/ui/call-extension.js +38 -0
  604. package/dist/ui/embed-token.d.ts +9 -5
  605. package/dist/ui/embed-token.js +34 -6
  606. package/dist/ui/ui-stream.d.ts +22 -17
  607. package/dist/ui/ui-stream.js +72 -12
  608. package/dist/ui/ui.module.d.ts +7 -0
  609. package/dist/ui/ui.module.js +28 -0
  610. package/dist/ui/views.controller.d.ts +14 -12
  611. package/dist/ui/views.controller.js +32 -25
  612. package/dist/ui/views.d.ts +9 -57
  613. package/dist/ui/views.js +43 -45
  614. package/package.json +11 -2
  615. package/dist/http/health.controller.d.ts +0 -26
  616. package/dist/http/health.controller.js +0 -79
  617. package/dist/http/tokens.d.ts +0 -131
  618. package/dist/http/tokens.js +0 -131
  619. package/dist/http/zod.pipe.d.ts +0 -8
  620. package/dist/http/zod.pipe.js +0 -14
  621. package/dist/identity/rate-limit.d.ts +0 -55
  622. package/dist/identity/rate-limit.js +0 -121
  623. package/dist/sandbox/lifecycle.d.ts +0 -21
  624. package/dist/sandbox/lifecycle.js +0 -68
  625. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  626. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,92 +1,82 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
1
10
  import { randomUUID } from "node:crypto";
2
- import { Queue } from "bullmq";
3
- import { Redis } from "ioredis";
11
+ import { Inject, Injectable } from "@nestjs/common";
4
12
  import { sql } from "kysely";
5
- import { visibleTo } from "../agents/agents.service.js";
13
+ import { visibleTo } from "../agents/agent-lookup.js";
14
+ import { EventLog } from "../conversations/event-log.js";
6
15
  import { dispatchQueuedIn, pauseQueueWith } from "../conversations/queue.js";
7
- import { finishRunIn, notifyFinished } from "./run-finish.js";
8
- /** 内核运行队列的 BullMQ 队列名(不含 `:`;与插件队列 `cap.<插件>.<名>` 不会重名)。 */
9
- export const RUN_QUEUE_NAME = "cap-kernel-runs";
10
- /**
11
- * Queue of sub-agent (child) runs (sub-agents spec §7.4): a replica still on a version without
12
- * sub-agents never takes a child job, and child load shows apart from conversations.
13
- */
14
- export const SUBAGENT_RUN_QUEUE_NAME = "cap-kernel-subagent-runs";
15
- /** The run queue of a conversation kind: sub-agent conversations have their own. */
16
- export const runQueueNameFor = (kind) => kind === "subagent" ? SUBAGENT_RUN_QUEUE_NAME : RUN_QUEUE_NAME;
17
- /** 同一触发点(会话 + 最新用户消息 seq)只投递一次。 */
18
- export const runJobId = (conversationId, maxUserSeq) => `run-${conversationId}-${maxUserSeq}`;
19
- /** 未结束的运行状态(waiting:等人处理审批 / 输入请求,没有任务、不占会话锁与配额)。 */
20
- export const ACTIVE_RUN_STATUSES = ["queued", "running", "waiting"];
16
+ import { KernelDb } from "../infra/database/kernel-db.js";
17
+ import { TransactionHost } from "../infra/database/transaction-host.js";
18
+ import { Transactional } from "../infra/database/transactional.decorator.js";
19
+ import { KernelEvents } from "../infra/events/kernel-events.js";
20
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
21
+ import { ToolPipeline } from "../tools/pipeline.js";
22
+ import { KyselyCheckpointSaver } from "./checkpointer.js";
23
+ import { ConversationLock } from "./conversation-lock.js";
24
+ import { notifyFinished, RunFinish } from "./run-finish.js";
25
+ import { ACTIVE_RUN_STATUSES, RunJobs, runJobId, runQueueNameFor, } from "./run-jobs.js";
26
+ export { ACTIVE_RUN_STATUSES, RUN_QUEUE_NAME, runJobId, runQueueNameFor, SUBAGENT_RUN_QUEUE_NAME, } from "./run-jobs.js";
21
27
  /**
22
28
  * queued 运行的宽限期(秒):`ensureRun` / 续跑先提交 runs 行、再投递任务,两步之间任务暂时不存在;
23
29
  * 只有进入 queued 超过这么久(`COALESCE(queued_at, created_at)`)仍没有任务的 queued 行才视为孤儿。
24
30
  */
25
31
  const ORPHAN_QUEUED_GRACE_SECONDS = 30;
26
- /** BullMQ 连接要求 maxRetriesPerRequest 为 null(Worker 的阻塞连接);Queue 复用同样的配置。 */
27
- export function bullConnection(redisUrl, log) {
28
- const c = new Redis(redisUrl, { maxRetriesPerRequest: null });
29
- c.on("error", (err) => log.error("run queue redis connection error", { err }));
30
- return c;
31
- }
32
32
  /**
33
33
  * 运行队列(生产方):`ensureRun` 在会话有未消费的用户消息、且没有进行中的运行时插入 `runs` 行并投递任务。
34
34
  * 「是否已有运行」以 PG 为准(会话行锁内检查 `runs` 中的 queued / running),并参考会话锁的持有者;
35
35
  * 多副本并发调用对同一会话串行化,同一时刻至多一个未结束的运行。
36
36
  */
37
- export class RunQueue {
38
- db;
37
+ let RunQueue = class RunQueue {
38
+ kdb;
39
39
  eventLog;
40
40
  lock;
41
- redisUrl;
42
- log;
41
+ jobs;
42
+ finisher;
43
43
  checkpoints;
44
- subagents;
45
- queues = new Map();
46
- conn;
47
- closed = false;
48
- constructor(db, eventLog, lock, redisUrl, log,
44
+ pipeline;
45
+ events;
46
+ log;
47
+ txHost;
48
+ constructor(kdb, eventLog, lock, jobs, finisher,
49
49
  /** 运行以孤儿结束(标记失败 / 直接中止)后删除它的 checkpoint thread(thread_id = runId)。 */
50
50
  checkpoints,
51
- /** Sub-agent cleanup when an orphan repair ends a parent run (sub-agents spec §12). */
52
- subagents) {
53
- this.db = db;
51
+ /** The run's open `agent` call results, in the orphan repair's transaction (sub-agents spec §12). */
52
+ pipeline, events, log, txHost) {
53
+ this.kdb = kdb;
54
54
  this.eventLog = eventLog;
55
55
  this.lock = lock;
56
- this.redisUrl = redisUrl;
57
- this.log = log;
56
+ this.jobs = jobs;
57
+ this.finisher = finisher;
58
58
  this.checkpoints = checkpoints;
59
- this.subagents = subagents;
59
+ this.pipeline = pipeline;
60
+ this.events = events;
61
+ this.log = log;
62
+ this.txHost = txHost;
63
+ }
64
+ get db() {
65
+ return this.kdb.db;
60
66
  }
61
67
  /**
62
- * The `beforeTerminal` of an orphan repair: writes the run's open `agent` call results in `t`;
63
- * `fire()` runs their observe hooks after the commit (review m1).
68
+ * The `beforeTerminal` of an orphan repair: writes the run's open `agent` call results in the
69
+ * repair's transaction; `fire()` runs their observe hooks after the commit (review m1).
64
70
  */
65
71
  stopOpenCalls(runId) {
66
- const sub = this.subagents;
67
- if (!sub)
68
- return { fire: () => { } };
69
72
  let fire = () => { };
70
73
  return {
71
- beforeTerminal: async (t) => {
72
- fire = (await sub.stopOpenCalls(t, runId)).fire;
74
+ beforeTerminal: async () => {
75
+ fire = (await this.pipeline.stopOpenAgentCalls(runId)).fire;
73
76
  },
74
77
  fire: () => fire(),
75
78
  };
76
79
  }
77
- /** The BullMQ queue `name` (default: conversation runs); both share one connection. */
78
- getQueue(name = RUN_QUEUE_NAME) {
79
- if (this.closed)
80
- throw new Error("run queue is closed");
81
- let queue = this.queues.get(name);
82
- if (!queue) {
83
- this.conn ??= bullConnection(this.redisUrl, this.log);
84
- queue = new Queue(name, { connection: this.conn });
85
- queue.on("error", (err) => this.log.error("run queue error", { err, queue: name }));
86
- this.queues.set(name, queue);
87
- }
88
- return queue;
89
- }
90
80
  /**
91
81
  * 有未消费的用户消息(最新 user_message 的 seq > `consumed_seq`)、会话锁无人持有、
92
82
  * 且没有 queued / running / waiting 的运行时:插入 `runs`(queued)并投递任务,返回 runId;否则返回 null。
@@ -102,152 +92,16 @@ export class RunQueue {
102
92
  async ensureRun(conversationId) {
103
93
  if ((await this.lock.holder(conversationId)) !== null)
104
94
  return null;
105
- let orphanSeq = null;
106
- let orphanRunId = null;
107
- let dispatchedSeq = null;
108
- let dispatchedSwitch = false;
109
- /** The queue paused in this transaction: the open pages hear it after the commit. */
110
- let pausedNow = false;
111
- let orphanStop;
112
- const created = await this.db.transaction().execute(async (t) => {
113
- const conv = await t
114
- .selectFrom("conversations")
115
- .select(["consumed_seq", "agent_id", "kind", "queue_paused", "account_id"])
116
- .where("id", "=", conversationId)
117
- .forUpdate()
118
- .executeTakeFirst();
119
- // 评测回放的隐藏对话:运行由评测 worker 在里面直接驱动(工具只回放记录),绝不为它起真实运行
120
- if (conv?.kind !== "chat")
121
- return null;
122
- let last = await t
123
- .selectFrom("conversation_events")
124
- .select(["seq", "payload"])
125
- .where("conversation_id", "=", conversationId)
126
- .where("type", "=", "user_message")
127
- .orderBy("seq", "desc")
128
- .limit(1)
129
- .executeTakeFirst();
130
- if (!last || Number(last.seq) <= Number(conv.consumed_seq)) {
131
- // Nothing unconsumed: the queue's head goes out when the conversation is idle (no active
132
- // run, which includes runs waiting for approval or an answer) and the queue is not paused.
133
- // Interjections are always unconsumed messages, so the queue never jumps ahead of them.
134
- if (conv.queue_paused || (await this.activeRun(t, conversationId)))
135
- return null;
136
- const owner = await t
137
- .selectFrom("agents")
138
- .select("deleted_at")
139
- .where("id", "=", conv.agent_id)
140
- .executeTakeFirstOrThrow();
141
- if (owner.deleted_at !== null)
142
- return null;
143
- const head = await t
144
- .selectFrom("conversation_queue")
145
- .select("id")
146
- .where("conversation_id", "=", conversationId)
147
- .limit(1)
148
- .executeTakeFirst();
149
- if (!head)
150
- return null;
151
- // A queued message may wait for hours: it goes out only while its author can still use
152
- // the conversation (active, a member, the agent visible to them; the isAccessible rule).
153
- // Otherwise the queue pauses instead of posting as someone who lost access.
154
- if (!(await authorCanSend(t, conversationId, conv.account_id))) {
155
- await pauseQueueWith(t, conversationId, "author_cannot_send");
156
- pausedNow = true;
157
- this.log.warn("queued message not sent: its author can no longer use the conversation", {
158
- conversationId,
159
- });
160
- return null;
161
- }
162
- const sent = await dispatchQueuedIn(t, this.eventLog, conversationId);
163
- if (!sent)
164
- return null;
165
- if ("paused" in sent) {
166
- pausedNow = true;
167
- this.log.warn("queued skill invocation not sent: the skill can no longer be invoked", {
168
- conversationId,
169
- });
170
- return null;
171
- }
172
- dispatchedSeq = sent.event.seq;
173
- dispatchedSwitch = sent.switched;
174
- last = { seq: String(sent.event.seq), payload: sent.event.payload };
175
- }
176
- const active = await this.activeRun(t, conversationId);
177
- if (active) {
178
- if (!(await this.isOrphan(conversationId, active, conv.kind)))
179
- return null;
180
- this.log.warn("marking orphaned run as failed", { conversationId, runId: active.id });
181
- orphanRunId = active.id;
182
- const stop = this.stopOpenCalls(active.id);
183
- orphanStop = stop;
184
- orphanSeq = await finishRunIn(t, this.eventLog, {
185
- conversationId,
186
- runId: active.id,
187
- status: "failed",
188
- consumed: null,
189
- ...(stop.beforeTerminal !== undefined && { beforeTerminal: stop.beforeTerminal }),
190
- event: {
191
- type: "run_failed",
192
- payload: {
193
- error: { code: "run.orphaned", message: "The run was lost and will not continue" },
194
- },
195
- },
196
- });
197
- // 孤儿运行的触发消息已被消费:之后没有更新的消息就不起新一轮。
198
- if (Number(last.seq) <= Math.max(Number(conv.consumed_seq), Number(active.trigger_seq))) {
199
- return null;
200
- }
201
- }
202
- // what is consumed now (an orphan's failure consumed up to its trigger)
203
- const consumedNow = Math.max(Number(conv.consumed_seq), orphanRunId !== null && active ? Number(active.trigger_seq) : 0);
204
- // phase D run boundary: the first unconsumed fork invocation is the trigger of the run that
205
- // absorbs it (`forkBoundary`); later messages wait for the next run
206
- const fork = await t
207
- .selectFrom("conversation_events")
208
- .select(["seq", "payload"])
209
- .where("conversation_id", "=", conversationId)
210
- .where("type", "=", "user_message")
211
- .where("seq", ">", String(consumedNow))
212
- .where(sql `payload -> 'skill' ->> 'mode' = 'fork'`)
213
- .orderBy("seq")
214
- .limit(1)
215
- .executeTakeFirst();
216
- const trigger = fork ?? last;
217
- // BullMQ 对重复的 jobId 静默忽略(add 返回的 Job 由调用方数据构造,看不出是否真的入队):
218
- // 先显式查同一触发点的任务;仍存在(例如属于刚结束、尚未从队列移除的运行)就不插入 runs 行。
219
- const jobId = runJobId(conversationId, Number(trigger.seq));
220
- const existing = await this.getQueue().getJob(jobId);
221
- if (existing) {
222
- this.log.warn("run job for this trigger already exists; not enqueuing", {
223
- conversationId,
224
- jobId,
225
- existingRunId: existing.data?.runId,
226
- });
227
- return null;
228
- }
229
- const agent = await t
230
- .selectFrom("agents")
231
- .select(["current_version", "deleted_at"])
232
- .where("id", "=", conv.agent_id)
233
- .executeTakeFirstOrThrow();
234
- // agent 已软删除:会话对任何人都不可见,不再为它起运行。
235
- if (agent.deleted_at !== null)
236
- return null;
237
- const runId = randomUUID();
238
- await t
239
- .insertInto("runs")
240
- .values({
241
- id: runId,
242
- conversation_id: conversationId,
243
- status: "queued",
244
- agent_version: agent.current_version,
245
- trigger_account_id: trigger.payload.authorAccountId,
246
- trigger_seq: Number(trigger.seq),
247
- })
248
- .execute();
249
- return { runId, jobId };
250
- });
95
+ const st = {
96
+ orphanSeq: null,
97
+ orphanRunId: null,
98
+ dispatchedSeq: null,
99
+ dispatchedSwitch: false,
100
+ pausedNow: false,
101
+ orphanStop: undefined,
102
+ };
103
+ const created = await this.ensureRunIn(conversationId, st);
104
+ const { orphanSeq, orphanRunId, dispatchedSeq, dispatchedSwitch, pausedNow, orphanStop } = st;
251
105
  if (orphanSeq !== null) {
252
106
  await notifyFinished(this.eventLog, conversationId, orphanSeq, "failed");
253
107
  orphanStop?.fire();
@@ -265,18 +119,15 @@ export class RunQueue {
265
119
  await this.dropCheckpoints(orphanRunId);
266
120
  // a lost parent stops its children now, not at the next sweep (review m2)
267
121
  if (orphanSeq !== null) {
268
- await this.subagents?.stopChildren(orphanRunId).catch((err) => this.log.error("cannot stop the sub-agents of an orphaned run", {
269
- runId: orphanRunId,
270
- err,
271
- }));
122
+ await this.events.emit("run.orphaned", { runId: orphanRunId });
272
123
  }
273
124
  }
274
125
  if (!created)
275
126
  return null;
276
127
  const { runId, jobId } = created;
277
128
  try {
278
- const queue = this.getQueue();
279
- await queue.add("run", { runId, conversationId }, { jobId, attempts: 1, removeOnComplete: true, removeOnFail: true });
129
+ const queue = this.jobs.queue();
130
+ await this.jobs.add({ runId, conversationId }, jobId);
280
131
  // 从 Redis 读回核对:检查与 add 之间出现了同 jobId 的任务时 add 被静默忽略,撤销本次插入,
281
132
  // 不留下没有任务的 queued 行。读不到说明任务已被领取并移除(只可能是本次投递的),不撤销。
282
133
  const stored = await queue.getJob(jobId);
@@ -297,25 +148,153 @@ export class RunQueue {
297
148
  }
298
149
  return runId;
299
150
  }
151
+ /** {@link ensureRun}'s transaction: what it decided goes back through `st`. */
152
+ async ensureRunIn(conversationId, st) {
153
+ const t = this.db;
154
+ const conv = await t
155
+ .selectFrom("conversations")
156
+ .select(["consumed_seq", "agent_id", "kind", "queue_paused", "account_id"])
157
+ .where("id", "=", conversationId)
158
+ .forUpdate()
159
+ .executeTakeFirst();
160
+ // 评测回放的隐藏对话:运行由评测 worker 在里面直接驱动(工具只回放记录),绝不为它起真实运行
161
+ if (conv?.kind !== "chat")
162
+ return null;
163
+ let last = await t
164
+ .selectFrom("conversation_events")
165
+ .select(["seq", "payload"])
166
+ .where("conversation_id", "=", conversationId)
167
+ .where("type", "=", "user_message")
168
+ .orderBy("seq", "desc")
169
+ .limit(1)
170
+ .executeTakeFirst();
171
+ if (!last || Number(last.seq) <= Number(conv.consumed_seq)) {
172
+ // Nothing unconsumed: the queue's head goes out when the conversation is idle (no active
173
+ // run, which includes runs waiting for approval or an answer) and the queue is not paused.
174
+ // Interjections are always unconsumed messages, so the queue never jumps ahead of them.
175
+ if (conv.queue_paused || (await this.activeRun(t, conversationId)))
176
+ return null;
177
+ const owner = await t
178
+ .selectFrom("agents")
179
+ .select("deleted_at")
180
+ .where("id", "=", conv.agent_id)
181
+ .executeTakeFirstOrThrow();
182
+ if (owner.deleted_at !== null)
183
+ return null;
184
+ const head = await t
185
+ .selectFrom("conversation_queue")
186
+ .select("id")
187
+ .where("conversation_id", "=", conversationId)
188
+ .limit(1)
189
+ .executeTakeFirst();
190
+ if (!head)
191
+ return null;
192
+ // A queued message may wait for hours: it goes out only while its author can still use
193
+ // the conversation (active, a member, the agent visible to them; the isAccessible rule).
194
+ // Otherwise the queue pauses instead of posting as someone who lost access.
195
+ if (!(await authorCanSend(t, conversationId, conv.account_id))) {
196
+ await pauseQueueWith(t, conversationId, "author_cannot_send");
197
+ st.pausedNow = true;
198
+ this.log.warn("queued message not sent: its author can no longer use the conversation", {
199
+ conversationId,
200
+ });
201
+ return null;
202
+ }
203
+ const sent = await dispatchQueuedIn(t, this.eventLog, conversationId);
204
+ if (!sent)
205
+ return null;
206
+ if ("paused" in sent) {
207
+ st.pausedNow = true;
208
+ this.log.warn("queued skill invocation not sent: the skill can no longer be invoked", {
209
+ conversationId,
210
+ });
211
+ return null;
212
+ }
213
+ st.dispatchedSeq = sent.event.seq;
214
+ st.dispatchedSwitch = sent.switched;
215
+ last = { seq: String(sent.event.seq), payload: sent.event.payload };
216
+ }
217
+ const active = await this.activeRun(t, conversationId);
218
+ if (active) {
219
+ if (!(await this.isOrphan(conversationId, active, conv.kind)))
220
+ return null;
221
+ this.log.warn("marking orphaned run as failed", { conversationId, runId: active.id });
222
+ st.orphanRunId = active.id;
223
+ const stop = this.stopOpenCalls(active.id);
224
+ st.orphanStop = stop;
225
+ st.orphanSeq = await this.finisher.finishIn({
226
+ conversationId,
227
+ runId: active.id,
228
+ status: "failed",
229
+ consumed: null,
230
+ ...(stop.beforeTerminal !== undefined && { beforeTerminal: stop.beforeTerminal }),
231
+ event: {
232
+ type: "run_failed",
233
+ payload: {
234
+ error: { code: "run.orphaned", message: "The run was lost and will not continue" },
235
+ },
236
+ },
237
+ });
238
+ // 孤儿运行的触发消息已被消费:之后没有更新的消息就不起新一轮。
239
+ if (Number(last.seq) <= Math.max(Number(conv.consumed_seq), Number(active.trigger_seq))) {
240
+ return null;
241
+ }
242
+ }
243
+ // what is consumed now (an orphan's failure consumed up to its trigger)
244
+ const consumedNow = Math.max(Number(conv.consumed_seq), st.orphanRunId !== null && active ? Number(active.trigger_seq) : 0);
245
+ // phase D run boundary: the first unconsumed fork invocation is the trigger of the run that
246
+ // absorbs it (`forkBoundary`); later messages wait for the next run
247
+ const fork = await t
248
+ .selectFrom("conversation_events")
249
+ .select(["seq", "payload"])
250
+ .where("conversation_id", "=", conversationId)
251
+ .where("type", "=", "user_message")
252
+ .where("seq", ">", String(consumedNow))
253
+ .where(sql `payload -> 'skill' ->> 'mode' = 'fork'`)
254
+ .orderBy("seq")
255
+ .limit(1)
256
+ .executeTakeFirst();
257
+ const trigger = fork ?? last;
258
+ // BullMQ 对重复的 jobId 静默忽略(add 返回的 Job 由调用方数据构造,看不出是否真的入队):
259
+ // 先显式查同一触发点的任务;仍存在(例如属于刚结束、尚未从队列移除的运行)就不插入 runs 行。
260
+ const jobId = runJobId(conversationId, Number(trigger.seq));
261
+ const existing = await this.jobs.getJob(jobId);
262
+ if (existing) {
263
+ this.log.warn("run job for this trigger already exists; not enqueuing", {
264
+ conversationId,
265
+ jobId,
266
+ existingRunId: existing.data?.runId,
267
+ });
268
+ return null;
269
+ }
270
+ const agent = await t
271
+ .selectFrom("agents")
272
+ .select(["current_version", "deleted_at"])
273
+ .where("id", "=", conv.agent_id)
274
+ .executeTakeFirstOrThrow();
275
+ // agent 已软删除:会话对任何人都不可见,不再为它起运行。
276
+ if (agent.deleted_at !== null)
277
+ return null;
278
+ const runId = randomUUID();
279
+ await t
280
+ .insertInto("runs")
281
+ .values({
282
+ id: runId,
283
+ conversation_id: conversationId,
284
+ status: "queued",
285
+ agent_version: agent.current_version,
286
+ trigger_account_id: trigger.payload.authorAccountId,
287
+ trigger_seq: Number(trigger.seq),
288
+ })
289
+ .execute();
290
+ return { runId, jobId };
291
+ }
300
292
  /**
301
293
  * Enqueues a run job under the caller's job id (resumes, dispatches, repairs), with the same
302
- * options as {@link ensureRun}. The queue follows the conversation's kind (a sub-agent's runs go
303
- * to {@link SUBAGENT_RUN_QUEUE_NAME}); pass `kind` when the caller knows it, else it is read.
294
+ * options as {@link ensureRun} (see {@link RunJobs.enqueue}).
304
295
  */
305
- async enqueue(data, jobId, kind) {
306
- const k = kind ??
307
- (await this.db
308
- .selectFrom("conversations")
309
- .select("kind")
310
- .where("id", "=", data.conversationId)
311
- .executeTakeFirst())?.kind ??
312
- "chat";
313
- await this.getQueue(runQueueNameFor(k)).add("run", data, {
314
- jobId,
315
- attempts: 1,
316
- removeOnComplete: true,
317
- removeOnFail: true,
318
- });
296
+ enqueue(data, jobId, kind) {
297
+ return this.jobs.enqueue(data, jobId, kind);
319
298
  }
320
299
  /**
321
300
  * 中止一个孤儿运行(`POST .../abort` 用):运行仍是 queued / running、会话锁无人持有、BullMQ 任务已不存在
@@ -327,31 +306,7 @@ export class RunQueue {
327
306
  if ((await this.lock.holder(conversationId)) !== null)
328
307
  return false;
329
308
  const stop = this.stopOpenCalls(runId);
330
- const toSeq = await this.db.transaction().execute(async (t) => {
331
- const conv = await t
332
- .selectFrom("conversations")
333
- .select("kind")
334
- .where("id", "=", conversationId)
335
- .forUpdate()
336
- .executeTakeFirst();
337
- const active = await this.activeRun(t, conversationId);
338
- if (!conv || !active || active.id !== runId)
339
- return null;
340
- if (!(await this.isOrphan(conversationId, active, conv.kind)))
341
- return null;
342
- this.log.warn("aborting orphaned run directly", { conversationId, runId });
343
- return finishRunIn(t, this.eventLog, {
344
- conversationId,
345
- runId,
346
- status: "aborted",
347
- consumed: null,
348
- ...(stop.beforeTerminal !== undefined && { beforeTerminal: stop.beforeTerminal }),
349
- event: {
350
- type: "run_aborted",
351
- payload: { byAccountId, reason: "user", ...(detail !== undefined && { detail }) },
352
- },
353
- });
354
- });
309
+ const toSeq = await this.abortOrphanIn(conversationId, runId, byAccountId, detail, stop);
355
310
  if (toSeq === null)
356
311
  return false;
357
312
  await notifyFinished(this.eventLog, conversationId, toSeq, "aborted");
@@ -359,6 +314,32 @@ export class RunQueue {
359
314
  await this.dropCheckpoints(runId);
360
315
  return true;
361
316
  }
317
+ async abortOrphanIn(conversationId, runId, byAccountId, detail, stop) {
318
+ const t = this.db;
319
+ const conv = await t
320
+ .selectFrom("conversations")
321
+ .select("kind")
322
+ .where("id", "=", conversationId)
323
+ .forUpdate()
324
+ .executeTakeFirst();
325
+ const active = await this.activeRun(t, conversationId);
326
+ if (!conv || !active || active.id !== runId)
327
+ return null;
328
+ if (!(await this.isOrphan(conversationId, active, conv.kind)))
329
+ return null;
330
+ this.log.warn("aborting orphaned run directly", { conversationId, runId });
331
+ return this.finisher.finishIn({
332
+ conversationId,
333
+ runId,
334
+ status: "aborted",
335
+ consumed: null,
336
+ beforeTerminal: stop.beforeTerminal,
337
+ event: {
338
+ type: "run_aborted",
339
+ payload: { byAccountId, reason: "user", ...(detail !== undefined && { detail }) },
340
+ },
341
+ });
342
+ }
362
343
  /**
363
344
  * Repairs an orphaned run of a conversation nobody else repairs on demand (a sub-agent's: no
364
345
  * `ensureRun` ever runs for it; sub-agents spec §7.5), with the same orphan test as
@@ -374,37 +355,7 @@ export class RunQueue {
374
355
  async repairOrphan(conversationId, runId) {
375
356
  if ((await this.lock.holder(conversationId)) !== null)
376
357
  return null;
377
- const r = await this.db.transaction().execute(async (t) => {
378
- const conv = await t
379
- .selectFrom("conversations")
380
- .select("kind")
381
- .where("id", "=", conversationId)
382
- .forUpdate()
383
- .executeTakeFirst();
384
- const active = await this.activeRun(t, conversationId);
385
- if (!conv || !active || active.id !== runId)
386
- return null;
387
- if (!(await this.isOrphan(conversationId, active, conv.kind)))
388
- return null;
389
- if (active.status === "queued") {
390
- const jobId = active.job_id ?? runJobId(conversationId, Number(active.trigger_seq));
391
- return { kind: "requeued", jobId, convKind: conv.kind };
392
- }
393
- this.log.warn("marking orphaned run as failed", { conversationId, runId });
394
- const seq = await finishRunIn(t, this.eventLog, {
395
- conversationId,
396
- runId,
397
- status: "failed",
398
- consumed: null,
399
- event: {
400
- type: "run_failed",
401
- payload: {
402
- error: { code: "run.orphaned", message: "The run was lost and will not continue" },
403
- },
404
- },
405
- });
406
- return { kind: "failed", seq };
407
- });
358
+ const r = await this.repairOrphanIn(conversationId, runId);
408
359
  if (!r)
409
360
  return null;
410
361
  if (r.kind === "requeued") {
@@ -416,6 +367,38 @@ export class RunQueue {
416
367
  await this.dropCheckpoints(runId);
417
368
  return "failed";
418
369
  }
370
+ async repairOrphanIn(conversationId, runId) {
371
+ const t = this.db;
372
+ const conv = await t
373
+ .selectFrom("conversations")
374
+ .select("kind")
375
+ .where("id", "=", conversationId)
376
+ .forUpdate()
377
+ .executeTakeFirst();
378
+ const active = await this.activeRun(t, conversationId);
379
+ if (!conv || !active || active.id !== runId)
380
+ return null;
381
+ if (!(await this.isOrphan(conversationId, active, conv.kind)))
382
+ return null;
383
+ if (active.status === "queued") {
384
+ const jobId = active.job_id ?? runJobId(conversationId, Number(active.trigger_seq));
385
+ return { kind: "requeued", jobId, convKind: conv.kind };
386
+ }
387
+ this.log.warn("marking orphaned run as failed", { conversationId, runId });
388
+ const seq = await this.finisher.finishIn({
389
+ conversationId,
390
+ runId,
391
+ status: "failed",
392
+ consumed: null,
393
+ event: {
394
+ type: "run_failed",
395
+ payload: {
396
+ error: { code: "run.orphaned", message: "The run was lost and will not continue" },
397
+ },
398
+ },
399
+ });
400
+ return { kind: "failed", seq };
401
+ }
419
402
  /** 会话当前未结束的运行(调用方已持有会话行锁)。 */
420
403
  activeRun(t, conversationId) {
421
404
  return t
@@ -442,13 +425,13 @@ export class RunQueue {
442
425
  if (active.status === "queued" && !active.past_grace)
443
426
  return false;
444
427
  const jobId = active.job_id ?? runJobId(conversationId, Number(active.trigger_seq));
445
- const job = await this.getQueue(runQueueNameFor(kind)).getJob(jobId);
428
+ const job = await this.jobs.getJob(jobId, runQueueNameFor(kind));
446
429
  return !job;
447
430
  }
448
431
  /** 删除已结束运行的 checkpoint thread(失败只记日志)。 */
449
432
  async dropCheckpoints(runId) {
450
433
  await this.checkpoints
451
- ?.deleteThread(runId)
434
+ .deleteThread(runId)
452
435
  .catch((err) => this.log.warn("checkpoint delete failed", { runId, err }));
453
436
  }
454
437
  async deleteQueued(runId) {
@@ -458,17 +441,30 @@ export class RunQueue {
458
441
  .where("status", "=", "queued")
459
442
  .execute();
460
443
  }
461
- async close() {
462
- this.closed = true;
463
- const qs = [...this.queues.values()];
464
- const c = this.conn;
465
- this.queues.clear();
466
- this.conn = undefined;
467
- await Promise.all(qs.map((q) => q.close().catch(() => { })));
468
- if (c)
469
- await c.quit().catch(() => c.disconnect());
470
- }
471
- }
444
+ };
445
+ __decorate([
446
+ Transactional({ propagation: "requires_new" })
447
+ ], RunQueue.prototype, "ensureRunIn", null);
448
+ __decorate([
449
+ Transactional({ propagation: "requires_new" })
450
+ ], RunQueue.prototype, "abortOrphanIn", null);
451
+ __decorate([
452
+ Transactional({ propagation: "requires_new" })
453
+ ], RunQueue.prototype, "repairOrphanIn", null);
454
+ RunQueue = __decorate([
455
+ Injectable(),
456
+ __param(0, Inject(KernelDb)),
457
+ __param(1, Inject(EventLog)),
458
+ __param(2, Inject(ConversationLock)),
459
+ __param(3, Inject(RunJobs)),
460
+ __param(4, Inject(RunFinish)),
461
+ __param(5, Inject(KyselyCheckpointSaver)),
462
+ __param(6, Inject(ToolPipeline)),
463
+ __param(7, Inject(KernelEvents)),
464
+ __param(8, Inject(KERNEL_LOGGER)),
465
+ __param(9, Inject(TransactionHost))
466
+ ], RunQueue);
467
+ export { RunQueue };
472
468
  /** The conversation's owner is active and can still see its agent (`isAccessible`'s rule). */
473
469
  async function authorCanSend(t, conversationId, accountId) {
474
470
  const row = await t