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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +179 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +261 -329
  21. package/dist/agents/definition.d.ts +8 -0
  22. package/dist/agents/definition.js +8 -0
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +20 -4
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +323 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/cli.d.ts +3 -2
  42. package/dist/catalog/cli.js +13 -31
  43. package/dist/catalog/job-ids.d.ts +15 -0
  44. package/dist/catalog/job-ids.js +15 -0
  45. package/dist/catalog/jobs.d.ts +27 -0
  46. package/dist/catalog/jobs.js +70 -0
  47. package/dist/catalog/locks.d.ts +24 -0
  48. package/dist/catalog/locks.js +63 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  50. package/dist/catalog/marketplaces.controller.js +22 -11
  51. package/dist/catalog/marketplaces.service.d.ts +30 -13
  52. package/dist/catalog/marketplaces.service.js +330 -256
  53. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  54. package/dist/catalog/org-catalog.controller.js +29 -14
  55. package/dist/catalog/org-catalog.service.d.ts +32 -198
  56. package/dist/catalog/org-catalog.service.js +159 -400
  57. package/dist/catalog/plugin-import.d.ts +73 -34
  58. package/dist/catalog/plugin-import.js +356 -217
  59. package/dist/catalog/plugin-install.d.ts +83 -41
  60. package/dist/catalog/plugin-install.js +421 -269
  61. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  62. package/dist/catalog/plugin-upgrade.js +407 -282
  63. package/dist/catalog/requests.service.d.ts +27 -15
  64. package/dist/catalog/requests.service.js +201 -145
  65. package/dist/catalog/upgrade-targets.d.ts +4 -7
  66. package/dist/channels/actions.d.ts +6 -4
  67. package/dist/channels/actions.js +1 -1
  68. package/dist/channels/cards.d.ts +2 -2
  69. package/dist/channels/channels.module.d.ts +40 -0
  70. package/dist/channels/channels.module.js +128 -0
  71. package/dist/channels/connections.controller.d.ts +1 -1
  72. package/dist/channels/connections.controller.js +11 -6
  73. package/dist/channels/connections.service.d.ts +43 -21
  74. package/dist/channels/connections.service.js +236 -131
  75. package/dist/channels/inbound.d.ts +34 -38
  76. package/dist/channels/inbound.js +107 -41
  77. package/dist/channels/job-ids.d.ts +10 -0
  78. package/dist/channels/job-ids.js +10 -0
  79. package/dist/channels/jobs.d.ts +85 -0
  80. package/dist/channels/jobs.js +157 -0
  81. package/dist/channels/outbound.d.ts +60 -82
  82. package/dist/channels/outbound.js +165 -194
  83. package/dist/channels/supervisor.d.ts +88 -46
  84. package/dist/channels/supervisor.js +230 -132
  85. package/dist/channels/threads.d.ts +29 -8
  86. package/dist/channels/threads.js +71 -13
  87. package/dist/channels/webhook.d.ts +20 -14
  88. package/dist/channels/webhook.js +51 -20
  89. package/dist/config/load.d.ts +3 -2
  90. package/dist/config/load.js +3 -2
  91. package/dist/config/nacos-source.js +11 -2
  92. package/dist/config/schema.d.ts +1 -0
  93. package/dist/config/schema.js +10 -4
  94. package/dist/conversations/access.d.ts +29 -0
  95. package/dist/conversations/access.js +86 -0
  96. package/dist/conversations/artifacts.d.ts +10 -10
  97. package/dist/conversations/artifacts.js +35 -9
  98. package/dist/conversations/attachments.controller.d.ts +1 -1
  99. package/dist/conversations/attachments.controller.js +8 -6
  100. package/dist/conversations/attachments.module.d.ts +7 -0
  101. package/dist/conversations/attachments.module.js +25 -0
  102. package/dist/conversations/attachments.service.d.ts +30 -22
  103. package/dist/conversations/attachments.service.js +119 -46
  104. package/dist/conversations/conversations.controller.d.ts +8 -7
  105. package/dist/conversations/conversations.controller.js +59 -29
  106. package/dist/conversations/conversations.module.d.ts +8 -0
  107. package/dist/conversations/conversations.module.js +69 -0
  108. package/dist/conversations/conversations.service.d.ts +40 -38
  109. package/dist/conversations/conversations.service.js +130 -140
  110. package/dist/conversations/event-log.d.ts +28 -18
  111. package/dist/conversations/event-log.js +74 -27
  112. package/dist/conversations/files.d.ts +10 -10
  113. package/dist/conversations/files.js +37 -11
  114. package/dist/conversations/idem-keys.d.ts +5 -0
  115. package/dist/conversations/idem-keys.js +5 -0
  116. package/dist/conversations/job-ids.d.ts +6 -0
  117. package/dist/conversations/job-ids.js +6 -0
  118. package/dist/conversations/outputs-read.d.ts +11 -11
  119. package/dist/conversations/outputs-read.js +31 -7
  120. package/dist/conversations/queue.d.ts +48 -56
  121. package/dist/conversations/queue.js +13 -289
  122. package/dist/conversations/queue.service.d.ts +60 -0
  123. package/dist/conversations/queue.service.js +343 -0
  124. package/dist/conversations/sandbox-status.d.ts +13 -10
  125. package/dist/conversations/sandbox-status.js +36 -8
  126. package/dist/conversations/titles.d.ts +71 -24
  127. package/dist/conversations/titles.js +159 -63
  128. package/dist/ctx/bus.js +9 -3
  129. package/dist/ctx/create-ctx.d.ts +6 -0
  130. package/dist/ctx/create-ctx.js +7 -9
  131. package/dist/ctx/lock.d.ts +7 -3
  132. package/dist/ctx/lock.js +9 -20
  133. package/dist/ctx/secrets.d.ts +10 -2
  134. package/dist/ctx/secrets.js +7 -3
  135. package/dist/db/kernel-schema.d.ts +2 -2
  136. package/dist/db/pool.d.ts +5 -0
  137. package/dist/db/pool.js +1 -0
  138. package/dist/errors.d.ts +1 -0
  139. package/dist/errors.js +1 -0
  140. package/dist/evals/budget.d.ts +42 -21
  141. package/dist/evals/budget.js +114 -62
  142. package/dist/evals/evals.module.d.ts +31 -0
  143. package/dist/evals/evals.module.js +114 -0
  144. package/dist/evals/jobs.d.ts +20 -0
  145. package/dist/evals/jobs.js +45 -0
  146. package/dist/evals/run-replay.d.ts +56 -8
  147. package/dist/evals/run-replay.js +140 -80
  148. package/dist/evals/runs.controller.d.ts +1 -1
  149. package/dist/evals/runs.controller.js +17 -8
  150. package/dist/evals/runs.service.d.ts +23 -45
  151. package/dist/evals/runs.service.js +245 -234
  152. package/dist/evals/sets.controller.d.ts +1 -1
  153. package/dist/evals/sets.controller.js +17 -8
  154. package/dist/evals/sets.service.d.ts +22 -6
  155. package/dist/evals/sets.service.js +248 -194
  156. package/dist/evals/snapshot.d.ts +2 -2
  157. package/dist/evals/step-replay.d.ts +2 -2
  158. package/dist/evals/step-replay.js +1 -1
  159. package/dist/evals/trajectory.controller.d.ts +1 -1
  160. package/dist/evals/trajectory.controller.js +11 -7
  161. package/dist/evals/trajectory.service.d.ts +5 -4
  162. package/dist/evals/trajectory.service.js +30 -7
  163. package/dist/evals/worker.d.ts +44 -27
  164. package/dist/evals/worker.js +220 -121
  165. package/dist/extensions/admin-ops.d.ts +61 -33
  166. package/dist/extensions/admin-ops.js +248 -154
  167. package/dist/extensions/admin-view.d.ts +38 -27
  168. package/dist/extensions/admin-view.js +126 -55
  169. package/dist/extensions/approvals.d.ts +12 -8
  170. package/dist/extensions/approvals.js +73 -46
  171. package/dist/extensions/blobs.d.ts +27 -10
  172. package/dist/extensions/blobs.js +111 -45
  173. package/dist/extensions/bootstrap.d.ts +58 -31
  174. package/dist/extensions/bootstrap.js +175 -121
  175. package/dist/extensions/cli.d.ts +20 -10
  176. package/dist/extensions/cli.js +41 -96
  177. package/dist/extensions/config-issues.d.ts +7 -0
  178. package/dist/extensions/config-issues.js +31 -0
  179. package/dist/extensions/deployment-config-store.d.ts +49 -0
  180. package/dist/extensions/deployment-config-store.js +133 -0
  181. package/dist/extensions/deployment-config.d.ts +58 -67
  182. package/dist/extensions/deployment-config.js +202 -230
  183. package/dist/extensions/enabled.d.ts +5 -5
  184. package/dist/extensions/extensions.module.d.ts +8 -0
  185. package/dist/extensions/extensions.module.js +77 -0
  186. package/dist/extensions/hooks.d.ts +3 -2
  187. package/dist/extensions/hooks.js +1 -1
  188. package/dist/extensions/host.d.ts +72 -68
  189. package/dist/extensions/host.js +191 -152
  190. package/dist/extensions/installs.d.ts +49 -16
  191. package/dist/extensions/installs.js +128 -32
  192. package/dist/extensions/job-ids.d.ts +6 -0
  193. package/dist/extensions/job-ids.js +6 -0
  194. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  195. package/dist/extensions/lifecycle-topics.js +18 -0
  196. package/dist/extensions/lifecycle.d.ts +35 -47
  197. package/dist/extensions/lifecycle.js +103 -39
  198. package/dist/extensions/locks.d.ts +33 -0
  199. package/dist/extensions/locks.js +86 -0
  200. package/dist/extensions/migrate-lock.d.ts +3 -4
  201. package/dist/extensions/org-config.controller.d.ts +1 -1
  202. package/dist/extensions/org-config.controller.js +8 -5
  203. package/dist/extensions/org-config.d.ts +48 -46
  204. package/dist/extensions/org-config.js +284 -226
  205. package/dist/extensions/registry.d.ts +50 -2
  206. package/dist/extensions/registry.js +89 -4
  207. package/dist/extensions/sources.d.ts +12 -8
  208. package/dist/extensions/sources.js +34 -13
  209. package/dist/files/files.module.d.ts +3 -0
  210. package/dist/files/files.module.js +22 -0
  211. package/dist/files/previewers.controller.d.ts +7 -2
  212. package/dist/files/previewers.controller.js +17 -9
  213. package/dist/files/previewers.d.ts +13 -18
  214. package/dist/files/previewers.js +83 -36
  215. package/dist/http/adapter.d.ts +3 -0
  216. package/dist/http/adapter.js +25 -0
  217. package/dist/http/api.module.d.ts +3 -110
  218. package/dist/http/api.module.js +47 -355
  219. package/dist/http/app.d.ts +11 -15
  220. package/dist/http/app.js +17 -62
  221. package/dist/http/error-filter.module.d.ts +5 -0
  222. package/dist/http/error-filter.module.js +18 -0
  223. package/dist/http/error.filter.js +2 -2
  224. package/dist/identity/accounts.d.ts +82 -29
  225. package/dist/identity/accounts.js +294 -175
  226. package/dist/identity/api-tokens.d.ts +11 -7
  227. package/dist/identity/api-tokens.js +71 -44
  228. package/dist/identity/audit.d.ts +7 -4
  229. package/dist/identity/audit.js +5 -1
  230. package/dist/identity/auth.controller.d.ts +11 -10
  231. package/dist/identity/auth.controller.js +31 -25
  232. package/dist/identity/auth.guard.d.ts +3 -3
  233. package/dist/identity/auth.guard.js +6 -4
  234. package/dist/identity/binding.d.ts +9 -11
  235. package/dist/identity/binding.js +41 -13
  236. package/dist/identity/enterprise-admin.d.ts +18 -12
  237. package/dist/identity/enterprise-admin.js +67 -13
  238. package/dist/identity/external-identity-lock.d.ts +17 -0
  239. package/dist/identity/external-identity-lock.js +39 -0
  240. package/dist/identity/external.d.ts +19 -15
  241. package/dist/identity/external.js +163 -125
  242. package/dist/identity/identity.module.d.ts +6 -0
  243. package/dist/identity/identity.module.js +56 -0
  244. package/dist/identity/me.controller.d.ts +16 -15
  245. package/dist/identity/me.controller.js +37 -31
  246. package/dist/identity/sessions.d.ts +12 -10
  247. package/dist/identity/sessions.js +74 -42
  248. package/dist/identity/settings.d.ts +20 -14
  249. package/dist/identity/settings.js +85 -57
  250. package/dist/identity/sso.controller.d.ts +7 -7
  251. package/dist/identity/sso.controller.js +13 -9
  252. package/dist/identity/sso.d.ts +9 -12
  253. package/dist/identity/sso.js +54 -24
  254. package/dist/inbox/inbox.module.d.ts +3 -0
  255. package/dist/inbox/inbox.module.js +22 -0
  256. package/dist/inbox/inbox.service.d.ts +7 -9
  257. package/dist/inbox/inbox.service.js +32 -11
  258. package/dist/index.d.ts +16 -11
  259. package/dist/index.js +9 -6
  260. package/dist/infra/cache/cache.module.d.ts +3 -0
  261. package/dist/infra/cache/cache.module.js +16 -0
  262. package/dist/infra/cache/cache.service.d.ts +21 -0
  263. package/dist/infra/cache/cache.service.js +80 -0
  264. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  265. package/dist/infra/cache/cacheable.decorator.js +83 -0
  266. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  267. package/dist/infra/cli/kernel-cli.module.js +165 -0
  268. package/dist/infra/close-within.d.ts +15 -0
  269. package/dist/infra/close-within.js +36 -0
  270. package/dist/infra/config/config.module.d.ts +13 -0
  271. package/dist/infra/config/config.module.js +39 -0
  272. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  273. package/dist/infra/config/kernel-config.service.js +126 -0
  274. package/dist/infra/database/after-commit.d.ts +6 -0
  275. package/dist/infra/database/after-commit.js +9 -0
  276. package/dist/infra/database/database.module.d.ts +25 -0
  277. package/dist/infra/database/database.module.js +90 -0
  278. package/dist/infra/database/kernel-db.d.ts +22 -0
  279. package/dist/infra/database/kernel-db.js +65 -0
  280. package/dist/infra/database/transaction-host.d.ts +50 -0
  281. package/dist/infra/database/transaction-host.js +125 -0
  282. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  283. package/dist/infra/database/transactional.decorator.js +27 -0
  284. package/dist/infra/database/xact-lock.d.ts +17 -0
  285. package/dist/infra/database/xact-lock.js +43 -0
  286. package/dist/infra/events/kernel-events.d.ts +96 -0
  287. package/dist/infra/events/kernel-events.js +65 -0
  288. package/dist/infra/health/health.controller.d.ts +26 -0
  289. package/dist/infra/health/health.controller.js +104 -0
  290. package/dist/infra/health/health.module.d.ts +9 -0
  291. package/dist/infra/health/health.module.js +24 -0
  292. package/dist/infra/health/health.options.d.ts +10 -0
  293. package/dist/infra/health/health.options.js +15 -0
  294. package/dist/infra/health/shutdown-state.d.ts +6 -0
  295. package/dist/infra/health/shutdown-state.js +2 -0
  296. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  297. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  300. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  301. package/dist/infra/lifecycle/process-guards.js +86 -0
  302. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  303. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  304. package/dist/infra/lock/key-template.d.ts +13 -0
  305. package/dist/infra/lock/key-template.js +46 -0
  306. package/dist/infra/lock/lock.module.d.ts +3 -0
  307. package/dist/infra/lock/lock.module.js +16 -0
  308. package/dist/infra/lock/lock.service.d.ts +120 -0
  309. package/dist/infra/lock/lock.service.js +343 -0
  310. package/dist/infra/lock/shared-lease.d.ts +44 -0
  311. package/dist/infra/lock/shared-lease.js +121 -0
  312. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  313. package/dist/infra/lock/with-lock.decorator.js +49 -0
  314. package/dist/infra/logging/logging.module.d.ts +16 -0
  315. package/dist/infra/logging/logging.module.js +34 -0
  316. package/dist/infra/queue/configured-processor.d.ts +18 -0
  317. package/dist/infra/queue/configured-processor.js +23 -0
  318. package/dist/infra/queue/job-failure.d.ts +18 -0
  319. package/dist/infra/queue/job-failure.js +26 -0
  320. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  321. package/dist/infra/queue/queue-shutdown.js +81 -0
  322. package/dist/infra/queue/queue.module.d.ts +16 -0
  323. package/dist/infra/queue/queue.module.js +61 -0
  324. package/dist/infra/queue/redis-connection.d.ts +7 -0
  325. package/dist/infra/queue/redis-connection.js +18 -0
  326. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  327. package/dist/infra/queue/retired-schedulers.js +9 -0
  328. package/dist/infra/queue/run-job.d.ts +16 -0
  329. package/dist/infra/queue/run-job.js +19 -0
  330. package/dist/infra/redis/redis.module.d.ts +24 -0
  331. package/dist/infra/redis/redis.module.js +87 -0
  332. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  333. package/dist/infra/schedule/cron-tick.js +25 -0
  334. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  335. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  336. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  337. package/dist/infra/schedule/locked-interval.js +190 -0
  338. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  339. package/dist/infra/schedule/locked-tick.js +137 -0
  340. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  341. package/dist/infra/schedule/schedule.module.js +27 -0
  342. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  343. package/dist/infra/schedule/scheduled-runs.js +163 -0
  344. package/dist/infra/swagger/swagger.d.ts +16 -0
  345. package/dist/infra/swagger/swagger.js +31 -0
  346. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  347. package/dist/infra/throttler/credential-throttler.js +77 -0
  348. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  349. package/dist/infra/throttler/named-throttlers.js +119 -0
  350. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  351. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  352. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  353. package/dist/infra/throttler/throttler.guard.js +68 -0
  354. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  355. package/dist/infra/throttler/throttler.module.js +53 -0
  356. package/dist/infra/tokens.d.ts +15 -0
  357. package/dist/infra/tokens.js +15 -0
  358. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  359. package/dist/infra/validation/create-zod-dto.js +35 -0
  360. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  361. package/dist/infra/validation/parse-with-zod.js +12 -0
  362. package/dist/infra/validation/validation.module.d.ts +3 -0
  363. package/dist/infra/validation/validation.module.js +16 -0
  364. package/dist/infra/validation/zod-params.d.ts +7 -0
  365. package/dist/infra/validation/zod-params.js +42 -0
  366. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  367. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  368. package/dist/kernel.d.ts +9 -244
  369. package/dist/kernel.js +8 -1305
  370. package/dist/kernel.module.d.ts +17 -0
  371. package/dist/kernel.module.js +136 -0
  372. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  373. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  374. package/dist/lifecycle/tokens.d.ts +3 -0
  375. package/dist/lifecycle/tokens.js +3 -0
  376. package/dist/log-context.d.ts +2 -0
  377. package/dist/log-context.js +4 -0
  378. package/dist/models/models.module.d.ts +3 -0
  379. package/dist/models/models.module.js +24 -0
  380. package/dist/models/prices.d.ts +8 -2
  381. package/dist/models/prices.js +65 -37
  382. package/dist/models/purposes.controller.d.ts +1 -1
  383. package/dist/models/purposes.controller.js +5 -6
  384. package/dist/models/purposes.d.ts +35 -13
  385. package/dist/models/purposes.js +101 -51
  386. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  387. package/dist/orgs/directory-sync.controller.js +2 -2
  388. package/dist/orgs/directory-sync.d.ts +61 -31
  389. package/dist/orgs/directory-sync.js +212 -125
  390. package/dist/orgs/invitations.controller.d.ts +8 -8
  391. package/dist/orgs/invitations.controller.js +27 -26
  392. package/dist/orgs/invitations.service.d.ts +12 -9
  393. package/dist/orgs/invitations.service.js +130 -92
  394. package/dist/orgs/job-ids.d.ts +8 -0
  395. package/dist/orgs/job-ids.js +8 -0
  396. package/dist/orgs/members.service.d.ts +19 -12
  397. package/dist/orgs/members.service.js +161 -117
  398. package/dist/orgs/offboarding.d.ts +54 -57
  399. package/dist/orgs/offboarding.js +161 -71
  400. package/dist/orgs/org-lock.d.ts +28 -19
  401. package/dist/orgs/org-lock.js +81 -35
  402. package/dist/orgs/org.guard.d.ts +1 -1
  403. package/dist/orgs/org.guard.js +2 -2
  404. package/dist/orgs/orgs.controller.d.ts +13 -13
  405. package/dist/orgs/orgs.controller.js +29 -17
  406. package/dist/orgs/orgs.module.d.ts +6 -0
  407. package/dist/orgs/orgs.module.js +68 -0
  408. package/dist/orgs/orgs.service.d.ts +30 -19
  409. package/dist/orgs/orgs.service.js +139 -86
  410. package/dist/orgs/settings.controller.d.ts +1 -1
  411. package/dist/orgs/settings.controller.js +8 -6
  412. package/dist/orgs/settings.service.d.ts +14 -8
  413. package/dist/orgs/settings.service.js +75 -46
  414. package/dist/overrides.d.ts +56 -0
  415. package/dist/overrides.js +30 -0
  416. package/dist/roles/gateway-role.d.ts +43 -0
  417. package/dist/roles/gateway-role.js +98 -0
  418. package/dist/roles/gateway.module.d.ts +8 -0
  419. package/dist/roles/gateway.module.js +28 -0
  420. package/dist/roles/worker-role.d.ts +63 -0
  421. package/dist/roles/worker-role.js +144 -0
  422. package/dist/roles/worker.module.d.ts +14 -0
  423. package/dist/roles/worker.module.js +90 -0
  424. package/dist/runtime/abort.js +19 -2
  425. package/dist/runtime/checkpointer.d.ts +8 -3
  426. package/dist/runtime/checkpointer.js +87 -55
  427. package/dist/runtime/conversation-lock.d.ts +20 -11
  428. package/dist/runtime/conversation-lock.js +62 -72
  429. package/dist/runtime/hook-calls.d.ts +3 -3
  430. package/dist/runtime/hook-calls.js +1 -6
  431. package/dist/runtime/job-ids.d.ts +10 -0
  432. package/dist/runtime/job-ids.js +10 -0
  433. package/dist/runtime/langgraph-loop.js +1 -1
  434. package/dist/runtime/loop.d.ts +7 -0
  435. package/dist/runtime/loop.js +14 -0
  436. package/dist/runtime/maintenance-queue.d.ts +10 -0
  437. package/dist/runtime/maintenance-queue.js +10 -0
  438. package/dist/runtime/maintenance.d.ts +45 -74
  439. package/dist/runtime/maintenance.js +139 -137
  440. package/dist/runtime/model-call.d.ts +7 -4
  441. package/dist/runtime/model-call.js +24 -57
  442. package/dist/runtime/providers.d.ts +17 -6
  443. package/dist/runtime/providers.js +66 -25
  444. package/dist/runtime/quota.d.ts +17 -3
  445. package/dist/runtime/quota.js +27 -2
  446. package/dist/runtime/retired-schedulers.d.ts +7 -0
  447. package/dist/runtime/retired-schedulers.js +31 -0
  448. package/dist/runtime/run-control.d.ts +33 -0
  449. package/dist/runtime/run-control.js +77 -0
  450. package/dist/runtime/run-finish.d.ts +26 -17
  451. package/dist/runtime/run-finish.js +98 -51
  452. package/dist/runtime/run-jobs.d.ts +48 -0
  453. package/dist/runtime/run-jobs.js +95 -0
  454. package/dist/runtime/run-processors.d.ts +60 -0
  455. package/dist/runtime/run-processors.js +185 -0
  456. package/dist/runtime/run-queue.d.ts +32 -57
  457. package/dist/runtime/run-queue.js +291 -295
  458. package/dist/runtime/run-steps.d.ts +39 -0
  459. package/dist/runtime/run-steps.js +96 -0
  460. package/dist/runtime/run-worker.d.ts +121 -75
  461. package/dist/runtime/run-worker.js +340 -226
  462. package/dist/runtime/runtime.module.d.ts +10 -0
  463. package/dist/runtime/runtime.module.js +112 -0
  464. package/dist/runtime/step-log.d.ts +40 -0
  465. package/dist/runtime/step-log.js +94 -0
  466. package/dist/runtime/stream.controller.d.ts +5 -8
  467. package/dist/runtime/stream.controller.js +14 -12
  468. package/dist/runtime/stream.d.ts +24 -6
  469. package/dist/runtime/stream.js +78 -7
  470. package/dist/runtime/subagents/child.d.ts +3 -44
  471. package/dist/runtime/subagents/child.js +0 -79
  472. package/dist/runtime/subagents/definition.d.ts +4 -4
  473. package/dist/runtime/subagents/definition.js +2 -2
  474. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  475. package/dist/runtime/subagents/dispatch.js +135 -140
  476. package/dist/runtime/subagents/limits.d.ts +9 -4
  477. package/dist/runtime/subagents/limits.js +4 -2
  478. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  479. package/dist/runtime/subagents/org-agents.js +1 -1
  480. package/dist/runtime/subagents/progress.d.ts +2 -2
  481. package/dist/runtime/subagents/roster.d.ts +3 -3
  482. package/dist/runtime/subagents/roster.js +1 -1
  483. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  484. package/dist/runtime/subagents/skill-fork.js +16 -5
  485. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  486. package/dist/runtime/subagents/subagents.service.js +101 -0
  487. package/dist/runtime/usage-report.d.ts +94 -52
  488. package/dist/runtime/usage-report.js +200 -100
  489. package/dist/runtime/waits.d.ts +125 -57
  490. package/dist/runtime/waits.js +431 -208
  491. package/dist/sandbox/job-ids.d.ts +10 -0
  492. package/dist/sandbox/job-ids.js +10 -0
  493. package/dist/sandbox/jobs.d.ts +41 -0
  494. package/dist/sandbox/jobs.js +113 -0
  495. package/dist/sandbox/leases.d.ts +39 -31
  496. package/dist/sandbox/leases.js +117 -257
  497. package/dist/sandbox/providers.d.ts +19 -0
  498. package/dist/sandbox/providers.js +38 -0
  499. package/dist/sandbox/sandbox.module.d.ts +8 -0
  500. package/dist/sandbox/sandbox.module.js +30 -0
  501. package/dist/sandbox/sandbox.service.d.ts +24 -29
  502. package/dist/sandbox/sandbox.service.js +106 -75
  503. package/dist/skills/catalog.d.ts +33 -20
  504. package/dist/skills/catalog.js +96 -53
  505. package/dist/skills/changes.controller.d.ts +4 -4
  506. package/dist/skills/changes.controller.js +15 -9
  507. package/dist/skills/changes.service.d.ts +28 -18
  508. package/dist/skills/changes.service.js +421 -364
  509. package/dist/skills/invocable.controller.d.ts +1 -1
  510. package/dist/skills/invocable.controller.js +8 -5
  511. package/dist/skills/invoke.d.ts +16 -15
  512. package/dist/skills/invoke.js +48 -17
  513. package/dist/skills/skills.controller.d.ts +1 -1
  514. package/dist/skills/skills.controller.js +11 -6
  515. package/dist/skills/skills.module.d.ts +6 -0
  516. package/dist/skills/skills.module.js +30 -0
  517. package/dist/skills/skills.service.d.ts +47 -30
  518. package/dist/skills/skills.service.js +221 -158
  519. package/dist/storage/job-ids.d.ts +6 -0
  520. package/dist/storage/job-ids.js +6 -0
  521. package/dist/storage/purge.d.ts +22 -7
  522. package/dist/storage/purge.js +55 -3
  523. package/dist/storage/storage.module.d.ts +6 -0
  524. package/dist/storage/storage.module.js +23 -0
  525. package/dist/storage/storage.service.d.ts +18 -4
  526. package/dist/storage/storage.service.js +44 -3
  527. package/dist/tools/approvals.controller.d.ts +1 -1
  528. package/dist/tools/approvals.controller.js +12 -8
  529. package/dist/tools/approvals.service.d.ts +27 -25
  530. package/dist/tools/approvals.service.js +324 -258
  531. package/dist/tools/breaker.d.ts +2 -2
  532. package/dist/tools/breaker.js +21 -3
  533. package/dist/tools/builtins/ask-user.d.ts +2 -2
  534. package/dist/tools/builtins/ask-user.js +1 -1
  535. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  536. package/dist/tools/builtins/builtin-tools.js +80 -0
  537. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  538. package/dist/tools/builtins/read-tool-output.js +1 -1
  539. package/dist/tools/builtins/sandbox/bash.js +2 -2
  540. package/dist/tools/builtins/sandbox/common.d.ts +2 -1
  541. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  542. package/dist/tools/builtins/sandbox/edit.js +1 -1
  543. package/dist/tools/builtins/sandbox/glob.js +2 -2
  544. package/dist/tools/builtins/sandbox/grep.js +2 -2
  545. package/dist/tools/builtins/sandbox/read.js +1 -1
  546. package/dist/tools/builtins/sandbox/write.js +1 -1
  547. package/dist/tools/builtins/skill-load.d.ts +3 -3
  548. package/dist/tools/builtins/skill-load.js +1 -1
  549. package/dist/tools/canonical-json.d.ts +6 -0
  550. package/dist/tools/canonical-json.js +16 -0
  551. package/dist/tools/connector-content.controller.d.ts +1 -1
  552. package/dist/tools/connector-content.controller.js +11 -6
  553. package/dist/tools/connector-content.d.ts +12 -15
  554. package/dist/tools/connector-content.js +53 -18
  555. package/dist/tools/connectors.controller.d.ts +1 -1
  556. package/dist/tools/connectors.controller.js +21 -10
  557. package/dist/tools/connectors.service.d.ts +31 -13
  558. package/dist/tools/connectors.service.js +434 -344
  559. package/dist/tools/credentials.d.ts +17 -20
  560. package/dist/tools/credentials.js +55 -34
  561. package/dist/tools/drift.d.ts +29 -41
  562. package/dist/tools/drift.js +111 -79
  563. package/dist/tools/info.d.ts +12 -9
  564. package/dist/tools/info.js +33 -7
  565. package/dist/tools/job-ids.d.ts +13 -0
  566. package/dist/tools/job-ids.js +15 -0
  567. package/dist/tools/jobs.d.ts +24 -0
  568. package/dist/tools/jobs.js +69 -0
  569. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  570. package/dist/tools/oauth/flow-paths.js +38 -0
  571. package/dist/tools/oauth/flow.d.ts +30 -30
  572. package/dist/tools/oauth/flow.js +109 -81
  573. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  574. package/dist/tools/oauth/oauth.controller.js +12 -9
  575. package/dist/tools/oauth/tokens.d.ts +11 -3
  576. package/dist/tools/oauth/tokens.js +15 -14
  577. package/dist/tools/outputs.d.ts +13 -4
  578. package/dist/tools/outputs.js +47 -3
  579. package/dist/tools/pipeline.d.ts +62 -46
  580. package/dist/tools/pipeline.js +145 -64
  581. package/dist/tools/policy.d.ts +2 -2
  582. package/dist/tools/questions.controller.d.ts +1 -1
  583. package/dist/tools/questions.controller.js +8 -5
  584. package/dist/tools/questions.service.d.ts +25 -24
  585. package/dist/tools/questions.service.js +201 -142
  586. package/dist/tools/registry.d.ts +30 -20
  587. package/dist/tools/registry.js +73 -37
  588. package/dist/tools/specs.d.ts +5 -4
  589. package/dist/tools/specs.js +3 -1
  590. package/dist/tools/tools.module.d.ts +10 -0
  591. package/dist/tools/tools.module.js +91 -0
  592. package/dist/ui/call-extension.d.ts +16 -0
  593. package/dist/ui/call-extension.js +38 -0
  594. package/dist/ui/embed-token.d.ts +9 -5
  595. package/dist/ui/embed-token.js +34 -6
  596. package/dist/ui/ui-stream.d.ts +22 -17
  597. package/dist/ui/ui-stream.js +72 -12
  598. package/dist/ui/ui.module.d.ts +7 -0
  599. package/dist/ui/ui.module.js +28 -0
  600. package/dist/ui/views.controller.d.ts +14 -12
  601. package/dist/ui/views.controller.js +32 -25
  602. package/dist/ui/views.d.ts +9 -57
  603. package/dist/ui/views.js +43 -45
  604. package/package.json +9 -2
  605. package/dist/http/health.controller.d.ts +0 -26
  606. package/dist/http/health.controller.js +0 -79
  607. package/dist/http/tokens.d.ts +0 -131
  608. package/dist/http/tokens.js +0 -131
  609. package/dist/http/zod.pipe.d.ts +0 -8
  610. package/dist/http/zod.pipe.js +0 -14
  611. package/dist/identity/rate-limit.d.ts +0 -55
  612. package/dist/identity/rate-limit.js +0 -121
  613. package/dist/sandbox/lifecycle.d.ts +0 -21
  614. package/dist/sandbox/lifecycle.js +0 -68
  615. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  616. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,24 +1,42 @@
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 { hostname } from "node:os";
3
11
  import { isModelError, isRetryableKind } from "@capybara-hq/plugin-sdk";
4
- import { DelayedError, Worker } from "bullmq";
12
+ import { Inject, Injectable, Optional } from "@nestjs/common";
13
+ import { DelayedError } from "bullmq";
5
14
  import { sql } from "kysely";
6
15
  import { loadTemplates } from "../agents/templates.js";
16
+ import { EventLog } from "../conversations/event-log.js";
7
17
  import { ApiError } from "../errors.js";
8
18
  import { ExtensionUnloadedError } from "../extensions/inflight.js";
9
- import { withJobContext } from "../log-context.js";
10
- import { PurposeAttemptError } from "../models/purposes.js";
19
+ import { waitWithin } from "../infra/close-within.js";
20
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
21
+ import { KernelDb } from "../infra/database/kernel-db.js";
22
+ import { TransactionHost } from "../infra/database/transaction-host.js";
23
+ import { Transactional } from "../infra/database/transactional.decorator.js";
24
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
25
+ import { ModelPurposesService, PurposeAttemptError } from "../models/purposes.js";
26
+ import { KyselyCheckpointSaver } from "../runtime/checkpointer.js";
11
27
  import { MediaUnavailableError, RunError } from "../runtime/model-call.js";
12
- import { ProviderListError } from "../runtime/providers.js";
13
- import { ORG_QUOTA_LEASE_MS } from "../runtime/quota.js";
14
- import { bullConnection } from "../runtime/run-queue.js";
15
- import { consumeTokens, recordOutcome, recountCases, runActive, skipPendingJudges, usageTokens, } from "./budget.js";
28
+ import { ProviderListError, ProviderRegistry } from "../runtime/providers.js";
29
+ import { EVAL_QUOTA, ORG_QUOTA_LEASE_MS } from "../runtime/quota.js";
30
+ import { RunFinish } from "../runtime/run-finish.js";
31
+ import { AgentLoops, RunSteps } from "../runtime/run-steps.js";
32
+ import { consumeTokens, EvalBudget, recordOutcome, runActive, skipPendingJudges, usageTokens, } from "./budget.js";
16
33
  import { replyParts, structuralDiff } from "./diff.js";
34
+ import { evalJobId } from "./jobs.js";
17
35
  import { JUDGE_PROVIDER_UNAVAILABLE, judge } from "./judge.js";
18
36
  import { userRequestOf } from "./plan.js";
19
37
  import { subagentCaseChanged, subagentStartedOf } from "./reconstruct.js";
20
- import { deleteEvalConversation, ReplayClaimLost, replayRun, runBaseline, } from "./run-replay.js";
21
- import { caseBase, EVAL_QUEUE_NAME, evalJobId, versionDefinition, } from "./runs.service.js";
38
+ import { deleteEvalConversation, EvalReplaySeeder, ReplayClaimLost, replayRun, runBaseline, } from "./run-replay.js";
39
+ import { caseBase, versionDefinition } from "./runs.service.js";
22
40
  import { readSnapshot, replayableCalls, toEvents } from "./snapshot.js";
23
41
  import { ReplayAttemptError, replayStep, resolveCandidate, } from "./step-replay.js";
24
42
  /**
@@ -42,7 +60,13 @@ export const EVAL_MAX_RETRIES = 3;
42
60
  /** 第 n 次重试前的等待(毫秒);供应商给了 `retryAfterMs` 时取它(不超过 30 秒)。 */
43
61
  const RETRY_DELAYS_MS = [1000, 2000, 4000];
44
62
  const MAX_RETRY_AFTER_MS = 30_000;
45
- const MAX_STALLED_COUNT = 3;
63
+ /** The eval worker's BullMQ stalled-job limit (the processor's `maxStalledCount`). */
64
+ export const EVAL_MAX_STALLED_COUNT = 3;
65
+ /**
66
+ * Test hooks of the full-run replay and the judge (`EvalReplayHooks`): a provider override in tests
67
+ * (`overrides: [{ provide: EVAL_REPLAY_HOOKS, useValue }]`), absent in production.
68
+ */
69
+ export const EVAL_REPLAY_HOOKS = Symbol("EVAL_REPLAY_HOOKS");
46
70
  /** 供应商插件在调用途中被撤销(错误本身或其 cause)。 */
47
71
  const isPluginUnloaded = (err) => err instanceof ExtensionUnloadedError ||
48
72
  (err instanceof Error && err.cause instanceof ExtensionUnloadedError);
@@ -135,42 +159,90 @@ function judgeInputOf(s, mode, modelCallSeq, baseline, candidate, rubric) {
135
159
  rubric,
136
160
  };
137
161
  }
138
- export class EvalWorker {
139
- d;
162
+ let EvalWorker = class EvalWorker {
163
+ txHost;
140
164
  worker;
141
- conn;
142
165
  /** 本进程在执行的任务:停机时中止,任务回到队列。 */
143
166
  active = new Set();
144
167
  closing = false;
145
- constructor(d) {
146
- this.d = d;
168
+ d;
169
+ constructor(kdb, quota, config, log, purposes, registry, steps, loops, eventLog, runFinish, checkpoints, seeder, budget, txHost, hooks) {
170
+ this.txHost = txHost;
171
+ const stepDeps = steps.deps;
172
+ this.d = {
173
+ get db() {
174
+ return kdb.db;
175
+ },
176
+ quota,
177
+ config,
178
+ log,
179
+ purposes,
180
+ budget,
181
+ // 媒体按快照自己的组织与对话、经组织范围的附件接口取(C3)
182
+ replay: {
183
+ registry,
184
+ config,
185
+ ...(stepDeps.media !== undefined && { media: stepDeps.media }),
186
+ },
187
+ // 整轮回放(C6):同一个 loop 工厂(同一 LangGraphLoop),只换工具管线(RecordedToolPipeline,
188
+ // 从不执行工具)、计费的模型注册表与按原对话取附件的来源
189
+ runReplay: {
190
+ get db() {
191
+ return kdb.db;
192
+ },
193
+ eventLog,
194
+ seeder,
195
+ runFinish,
196
+ config,
197
+ log,
198
+ registry,
199
+ ...(stepDeps.media !== undefined && { media: stepDeps.media }),
200
+ checkpoints,
201
+ // explicitly without plugin hooks: eval replays never fire them (P-18); nor do they
202
+ // publish sub-agent progress on a live conversation's stream
203
+ loop: (d) => {
204
+ // nor dispatch fork invocations: run-replay passes the recorded reports instead
205
+ const { db: _snapshot, hooks: _noHooks, subagentProgress: _noProgress, skillForks: _noForks, ...replayDeps } = stepDeps;
206
+ // the object rest above copied `db` as a value: read it through the step deps' getter
207
+ // instead, so the loop always resolves the context-aware handle
208
+ return loops.create({
209
+ ...replayDeps,
210
+ get db() {
211
+ return stepDeps.db;
212
+ },
213
+ ...d,
214
+ });
215
+ },
216
+ ...(hooks !== undefined && { hooks }),
217
+ },
218
+ };
147
219
  }
148
- start() {
149
- if (this.worker)
220
+ /**
221
+ * Starts consuming with the `cap-kernel-evals` processor's worker (worker role, after the
222
+ * extensions loaded; built with `autorun: false`).
223
+ */
224
+ start(worker) {
225
+ if (this.worker || this.closing)
150
226
  return;
151
- const { runtime, evals } = this.d.config();
152
- this.conn = bullConnection(this.d.redisUrl, this.d.log);
153
- this.worker = new Worker(EVAL_QUEUE_NAME, (job, token) => withJobContext(EVAL_QUEUE_NAME, job, () => this.process(job, token)), {
154
- name: `${hostname()}-${process.pid}`,
155
- connection: this.conn,
156
- concurrency: evals.workerConcurrency,
157
- lockDuration: runtime.jobLockMs,
158
- stalledInterval: runtime.stalledIntervalMs,
159
- maxStalledCount: MAX_STALLED_COUNT,
160
- });
161
- this.worker.on("error", (err) => this.d.log.error("eval worker error", { err }));
162
- this.worker.on("failed", (job, err) => {
163
- if (!job)
164
- return;
165
- // 处理函数外的暂时故障(PG / Redis)由 BullMQ 按 attempts 指数退避重试;用尽(或 stalled 超限)才算失败
166
- if (job.attemptsMade < (job.opts.attempts ?? 1) && !/stalled/i.test(err.message)) {
167
- this.d.log.warn("eval job attempt failed; retrying", { jobId: job.id, err });
168
- return;
169
- }
170
- this.d.log.error("eval job failed", { jobId: job.id, err });
171
- // 任务不会再执行:该用例剩下的结果记 error,运行不因此卡住
172
- void this.failCase(job.data, err).catch((e) => this.d.log.error("cannot mark failed eval job", { jobId: job.id, err: e }));
173
- });
227
+ this.worker = worker;
228
+ void worker.run().catch((err) => this.onError(err));
229
+ }
230
+ /** The worker's `error` event. */
231
+ onError(err) {
232
+ this.d.log.error("eval worker error", { err });
233
+ }
234
+ /** The worker's `failed` event. */
235
+ onFailed(job, err) {
236
+ if (!job)
237
+ return;
238
+ // 处理函数外的暂时故障(PG / Redis)由 BullMQ 按 attempts 指数退避重试;用尽(或 stalled 超限)才算失败
239
+ if (job.attemptsMade < (job.opts.attempts ?? 1) && !/stalled/i.test(err.message)) {
240
+ this.d.log.warn("eval job attempt failed; retrying", { jobId: job.id, err });
241
+ return;
242
+ }
243
+ this.d.log.error("eval job failed", { jobId: job.id, err });
244
+ // 任务不会再执行:该用例剩下的结果记 error,运行不因此卡住
245
+ void this.failCase(job.data, err).catch((e) => this.d.log.error("cannot mark failed eval job", { jobId: job.id, err: e }));
174
246
  }
175
247
  /** 停止领取;中止本进程在执行的任务(回到队列由别的 worker 接着做),在 budgetMs 内等它们退出。 */
176
248
  async close(budgetMs) {
@@ -182,48 +254,36 @@ export class EvalWorker {
182
254
  await worker.pause(true).catch(() => { });
183
255
  for (const ac of this.active)
184
256
  ac.abort();
185
- let timer;
186
- const done = await Promise.race([
187
- worker.close().then(() => true),
188
- new Promise((resolve) => {
189
- timer = setTimeout(() => resolve(false), Math.max(0, budgetMs));
190
- timer.unref();
191
- }),
192
- ]);
193
- clearTimeout(timer);
257
+ const done = await waitWithin(worker.close(), budgetMs);
194
258
  if (!done)
195
259
  await worker.close(true).catch(() => { });
196
- this.conn?.disconnect();
197
260
  }
261
+ /** One job: replays one case (the processor runs it in `runJob`). */
198
262
  async process(job, token) {
199
263
  const data = job.data;
200
264
  const { runId, orgId } = data;
201
265
  const jobId = job.id ?? evalJobId(runId, data.caseId);
202
266
  if (!(await runActive(this.d.db, runId))) {
203
267
  await this.skipCase(data);
204
- await recountCases(this.d.db, runId);
268
+ await this.d.budget.recountCases(runId);
205
269
  return;
206
270
  }
207
- const limit = this.d.config().evals.orgConcurrency;
271
+ const limit = this.d.config.get().evals.orgConcurrency;
208
272
  // 每次执行一个新的认领号:失去认领(stalled 后被别的 worker 接手)的旧执行写不进结果(用量照样计入)。
209
273
  // 配额成员 = 任务 id + 认领号:旧执行退出时只移除自己的名额,不会把接手执行的名额一起移掉
210
274
  const claim = randomUUID();
211
275
  const member = `${jobId}-${claim}`;
212
- if (!(await this.d.quota.tryEnter(orgId, member, limit, ORG_QUOTA_LEASE_MS))) {
276
+ // the slot is renewed every lease / 3 by the lock service's watchdog until released
277
+ const slot = await this.d.quota.enter(orgId, member, limit, ORG_QUOTA_LEASE_MS);
278
+ if (!slot) {
213
279
  // 配额满:固定 5 秒后再试,不按事件唤醒。评测是后台批任务,几秒空等可以接受,换来没有跨副本通知
214
- await job.moveToDelayed(Date.now() + (this.d.quotaRetryMs ?? EVAL_QUOTA_RETRY_MS), token);
280
+ await job.moveToDelayed(Date.now() + EVAL_QUOTA_RETRY_MS, token);
215
281
  throw new DelayedError();
216
282
  }
217
283
  const ac = new AbortController();
218
284
  this.active.add(ac);
219
285
  if (this.closing)
220
286
  ac.abort();
221
- const renew = setInterval(() => {
222
- this.d.quota
223
- .renew(orgId, member, ORG_QUOTA_LEASE_MS)
224
- .catch((err) => this.d.log.warn("eval quota renew failed", { jobId, err }));
225
- }, ORG_QUOTA_LEASE_MS / 3);
226
- renew.unref();
227
287
  try {
228
288
  await this.d.db
229
289
  .updateTable("eval_runs")
@@ -242,13 +302,12 @@ export class EvalWorker {
242
302
  throw err;
243
303
  }
244
304
  finally {
245
- clearInterval(renew);
246
305
  this.active.delete(ac);
247
- await this.d.quota
248
- .leave(orgId, member)
306
+ await slot
307
+ .release()
249
308
  .catch((err) => this.d.log.warn("eval quota leave failed", { jobId, err }));
250
309
  }
251
- await recountCases(this.d.db, runId);
310
+ await this.d.budget.recountCases(runId);
252
311
  }
253
312
  /** 单步回放每次请求前:运行仍在执行({@link runActive})且结果仍由本次执行认领。 */
254
313
  async mayRequest(runId, resultId, claim) {
@@ -278,7 +337,7 @@ export class EvalWorker {
278
337
  .executeTakeFirst();
279
338
  if (Number(w.numUpdatedRows) === 0)
280
339
  return true;
281
- const { tripped } = await recordOutcome(db, data.runId, false, this.d.config().evals.maxConsecutiveErrors);
340
+ const { tripped } = await recordOutcome(db, data.runId, false, this.d.config.get().evals.maxConsecutiveErrors);
282
341
  if (tripped) {
283
342
  this.d.log.warn("eval run stopped after too many consecutive errors", { runId: data.runId });
284
343
  await this.skipCase(data);
@@ -423,34 +482,7 @@ export class EvalWorker {
423
482
  const b = replyParts(result.baseline.content);
424
483
  const c = replyParts(result.candidate.content);
425
484
  const diff = structuralDiff({ ...b, stopReason: result.baseline.stopReason }, { ...c, stopReason: result.candidate.stopReason });
426
- const outcome = await db.transaction().execute(async (trx) => {
427
- // 只在仍由本次执行认领时写结果:stalled 后被接手的旧执行不覆盖结果。用量照样计入(请求确实发出且已付费,
428
- // 与失败尝试一样不以认领为条件),走同一个原子 consumeTokens
429
- const w = await trx
430
- .updateTable("eval_results")
431
- .set({
432
- status: "done",
433
- baseline: JSON.stringify(result.baseline),
434
- candidate: JSON.stringify(result.candidate),
435
- diff: JSON.stringify(diff),
436
- // 开了评委:评委做完之前用例不算做完(recountCases 不计 pending 的评委)
437
- judge_status: grade.judge ? "pending" : "none",
438
- drift: result.drift,
439
- error: null,
440
- updated_at: sql `now()`,
441
- })
442
- .where("id", "=", r.id)
443
- .where("status", "=", "running")
444
- .where("claimed_by", "=", claim)
445
- .executeTakeFirst();
446
- if (Number(w.numUpdatedRows) === 0) {
447
- await consumeTokens(trx, runId, tokens);
448
- return "lost";
449
- }
450
- await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
451
- const { capped } = await consumeTokens(trx, runId, tokens);
452
- return capped ? "capped" : "ok";
453
- });
485
+ const outcome = await this.writeStepResultIn(runId, r.id, claim, result, diff, grade, tokens);
454
486
  // 失去认领:这个用例已由别的执行接手,本次停下
455
487
  if (outcome === "lost")
456
488
  return;
@@ -511,7 +543,7 @@ export class EvalWorker {
511
543
  try {
512
544
  v = await judge({
513
545
  purposes: this.d.purposes,
514
- maxOutputTokens: this.d.config().evals.judgeMaxOutputTokens,
546
+ maxOutputTokens: this.d.config.get().evals.judgeMaxOutputTokens,
515
547
  }, data.orgId, input, signal);
516
548
  }
517
549
  catch (err) {
@@ -609,8 +641,9 @@ export class EvalWorker {
609
641
  out = await replayRun({
610
642
  ...this.d.runReplay,
611
643
  stillClaimed: () => held(),
612
- onSeeded: async (trx, conversationId) => {
613
- const w = await trx
644
+ // runs inside the seed's transaction (the context-aware handle joins it)
645
+ onSeeded: async (conversationId) => {
646
+ const w = await this.d.db
614
647
  .updateTable("eval_results")
615
648
  .set({ eval_conversation_id: conversationId, updated_at: sql `now()` })
616
649
  .where("id", "=", resultId)
@@ -660,33 +693,73 @@ export class EvalWorker {
660
693
  const baseText = replyParts(baseline.finalContent).text;
661
694
  const candText = replyParts(out.finalContent).text;
662
695
  const diff = structuralDiff({ toolCalls: baseline.toolCalls, text: baseText, stopReason: baseline.stopReason }, { toolCalls: out.toolCalls, text: candText, stopReason: out.stopReason });
663
- const written = await db.transaction().execute(async (trx) => {
664
- const w = await trx
665
- .updateTable("eval_results")
666
- .set({
667
- status: "done",
668
- baseline: JSON.stringify(baseline),
669
- candidate: JSON.stringify(out),
670
- diff: JSON.stringify(diff),
671
- judge_status: grade.judge ? "pending" : "none",
672
- drift,
673
- error: null,
674
- eval_conversation_id: out.conversationId,
675
- updated_at: sql `now()`,
676
- })
677
- .where("id", "=", resultId)
678
- .where("status", "=", "running")
679
- .where("claimed_by", "=", claim)
680
- .executeTakeFirst();
681
- if (Number(w.numUpdatedRows) === 0)
682
- return false;
683
- await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
684
- return true;
696
+ const written = await this.writeRunResultIn(runId, resultId, claim, {
697
+ baseline,
698
+ out,
699
+ diff,
700
+ drift,
701
+ judge: grade.judge,
685
702
  });
686
703
  if (!written || !grade.judge)
687
704
  return;
688
705
  await this.judgeResult(data, resultId, claim, signal, judgeInputOf(s, "run", null, baseline, out, grade.rubric));
689
706
  }
707
+ /**
708
+ * 写一条单步回放的结果:只在仍由本次执行认领时写结果(stalled 后被接手的旧执行不覆盖结果)。用量照样计入(请求确实
709
+ * 发出且已付费,与失败尝试一样不以认领为条件),走同一个原子 consumeTokens。
710
+ */
711
+ async writeStepResultIn(runId, resultId, claim, result, diff, grade, tokens) {
712
+ const db = this.d.db;
713
+ const w = await db
714
+ .updateTable("eval_results")
715
+ .set({
716
+ status: "done",
717
+ baseline: JSON.stringify(result.baseline),
718
+ candidate: JSON.stringify(result.candidate),
719
+ diff: JSON.stringify(diff),
720
+ // 开了评委:评委做完之前用例不算做完(recountCases 不计 pending 的评委)
721
+ judge_status: grade.judge ? "pending" : "none",
722
+ drift: result.drift,
723
+ error: null,
724
+ updated_at: sql `now()`,
725
+ })
726
+ .where("id", "=", resultId)
727
+ .where("status", "=", "running")
728
+ .where("claimed_by", "=", claim)
729
+ .executeTakeFirst();
730
+ if (Number(w.numUpdatedRows) === 0) {
731
+ await consumeTokens(db, runId, tokens);
732
+ return "lost";
733
+ }
734
+ await recordOutcome(db, runId, true, this.d.config.get().evals.maxConsecutiveErrors);
735
+ const { capped } = await consumeTokens(db, runId, tokens);
736
+ return capped ? "capped" : "ok";
737
+ }
738
+ /** 写一条整轮回放的结果(仍由本次执行认领时);false = 已失去认领。 */
739
+ async writeRunResultIn(runId, resultId, claim, r) {
740
+ const db = this.d.db;
741
+ const w = await db
742
+ .updateTable("eval_results")
743
+ .set({
744
+ status: "done",
745
+ baseline: JSON.stringify(r.baseline),
746
+ candidate: JSON.stringify(r.out),
747
+ diff: JSON.stringify(r.diff),
748
+ judge_status: r.judge ? "pending" : "none",
749
+ drift: r.drift,
750
+ error: null,
751
+ eval_conversation_id: r.out.conversationId,
752
+ updated_at: sql `now()`,
753
+ })
754
+ .where("id", "=", resultId)
755
+ .where("status", "=", "running")
756
+ .where("claimed_by", "=", claim)
757
+ .executeTakeFirst();
758
+ if (Number(w.numUpdatedRows) === 0)
759
+ return false;
760
+ await recordOutcome(db, runId, true, this.d.config.get().evals.maxConsecutiveErrors);
761
+ return true;
762
+ }
690
763
  /**
691
764
  * 该用例剩下的结果标 skipped。整轮回放留下的评测对话里若还有没结束的运行(上一次执行崩溃在回放中途),删掉它,
692
765
  * 不留永远「执行中」的评测对话;已正常收尾(`run_aborted` / `run_finished`)的保留,轨迹里能看到停在哪里。
@@ -774,9 +847,35 @@ export class EvalWorker {
774
847
  .execute();
775
848
  // 已 done 但评委一直没做成的:评委记 skipped(结果本身保留)
776
849
  await skipPendingJudges(this.d.db, data.runId, data.caseId);
777
- await recountCases(this.d.db, data.runId);
850
+ await this.d.budget.recountCases(data.runId);
778
851
  }
779
- }
852
+ };
853
+ __decorate([
854
+ Transactional({ propagation: "requires_new" })
855
+ ], EvalWorker.prototype, "writeStepResultIn", null);
856
+ __decorate([
857
+ Transactional({ propagation: "requires_new" })
858
+ ], EvalWorker.prototype, "writeRunResultIn", null);
859
+ EvalWorker = __decorate([
860
+ Injectable(),
861
+ __param(0, Inject(KernelDb)),
862
+ __param(1, Inject(EVAL_QUOTA)),
863
+ __param(2, Inject(KernelConfigService)),
864
+ __param(3, Inject(KERNEL_LOGGER)),
865
+ __param(4, Inject(ModelPurposesService)),
866
+ __param(5, Inject(ProviderRegistry)),
867
+ __param(6, Inject(RunSteps)),
868
+ __param(7, Inject(AgentLoops)),
869
+ __param(8, Inject(EventLog)),
870
+ __param(9, Inject(RunFinish)),
871
+ __param(10, Inject(KyselyCheckpointSaver)),
872
+ __param(11, Inject(EvalReplaySeeder)),
873
+ __param(12, Inject(EvalBudget)),
874
+ __param(13, Inject(TransactionHost)),
875
+ __param(14, Optional()),
876
+ __param(14, Inject(EVAL_REPLAY_HOOKS))
877
+ ], EvalWorker);
878
+ export { EvalWorker };
780
879
  /**
781
880
  * A plugin template's child case: the template's current version, which a new dispatch would use
782
881
  * (a template removed since gets version 0, so it always differs). Undefined for other cases.
@@ -1,34 +1,14 @@
1
- import type { KernelConfig } from "../config/schema.js";
2
- import type { KernelDb } from "../db/kernel-schema.js";
1
+ import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
2
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
3
+ import { KernelDb } from "../infra/database/kernel-db.js";
4
+ import { TransactionHost } from "../infra/database/transaction-host.js";
5
+ import type { KernelLogger } from "../log.js";
6
+ import { ExtensionAdmin, type PublishBus } from "./admin-view.js";
7
+ import { ExtensionBlobs } from "./blobs.js";
8
+ import { ExtensionLifecycle } from "./lifecycle.js";
9
+ import { PluginInstallLock } from "./locks.js";
3
10
  import type { AdminExtensionView } from "./permission-view.js";
4
- import type { ExtensionSource } from "./sources.js";
5
- export interface ExtensionAdminOpsDeps {
6
- db: KernelDb;
7
- /**
8
- * Returns the admin view after the operation; when the package cannot be read it should return the
9
- * degraded item (`ExtensionAdmin.get(name, { allowUnreadable: true })`). If it throws, the operation
10
- * has already committed: ops logs an error and returns {@link fallbackView}, so an operation that
11
- * took effect is not reported as failed.
12
- */
13
- view(name: string): Promise<AdminExtensionView>;
14
- /** 配置声明的插件名 → 来源(这些插件不能安装 / 停用 / 卸载,C15)。 */
15
- declared(): ReadonlyMap<string, ExtensionSource>;
16
- /** 读包(降级时核对目标版本的迁移文件)。 */
17
- blobs: {
18
- get(sha256: string): Promise<Uint8Array>;
19
- };
20
- config: () => KernelConfig;
21
- /** 发布 `kernel.plugins.changed`。 */
22
- bus: {
23
- publish(topic: string, payload: unknown): Promise<void>;
24
- };
25
- /** 发布失败时本副本自己 reconcile(不等待;其他副本靠周期任务兜底)。CLI 没有。 */
26
- reconcile?: (reason: string) => Promise<void>;
27
- log: {
28
- warn(msg: string, fields?: Record<string, unknown>): void;
29
- error(msg: string, fields?: Record<string, unknown>): void;
30
- };
31
- }
11
+ import { ExtensionRegistry } from "./registry.js";
32
12
  /**
33
13
  * Deployment-level extension install / enable / disable / uninstall (C16 / D15): writes only the PG
34
14
  * desired state (`extension_installs`) and the audit, then publishes `kernel.plugins.changed` after
@@ -39,8 +19,53 @@ export interface ExtensionAdminOpsDeps {
39
19
  * then an advisory lock by extension name and a lock on the install record row.
40
20
  */
41
21
  export declare class ExtensionAdminOps {
42
- private readonly d;
43
- constructor(d: ExtensionAdminOpsDeps);
22
+ private readonly kdb;
23
+ readonly txHost: TransactionHost;
24
+ /** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
25
+ private readonly adminLock;
26
+ private readonly installLock;
27
+ /**
28
+ * The admin view after the operation, degraded when the package cannot be read
29
+ * (`get(name, { allowUnreadable: true })`). If it throws, the operation has already committed:
30
+ * ops logs an error and returns {@link fallbackView}, so an operation that took effect is not
31
+ * reported as failed.
32
+ */
33
+ private readonly admin;
34
+ /** The config-declared extension names (they cannot be installed / disabled / uninstalled, C15). */
35
+ private readonly registry;
36
+ /** Reads packages (a downgrade checks the target version's migration files). */
37
+ private readonly blobs;
38
+ private readonly config;
39
+ /** Publishes `kernel.plugins.changed`. */
40
+ private readonly bus;
41
+ /**
42
+ * When the publish fails this replica reconciles itself (not awaited; other replicas catch up
43
+ * periodically). A no-op where the lifecycle never started (the CLI).
44
+ */
45
+ private readonly lifecycle;
46
+ private readonly log;
47
+ constructor(kdb: KernelDb, txHost: TransactionHost,
48
+ /** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
49
+ adminLock: EnterpriseAdminLock, installLock: PluginInstallLock,
50
+ /**
51
+ * The admin view after the operation, degraded when the package cannot be read
52
+ * (`get(name, { allowUnreadable: true })`). If it throws, the operation has already committed:
53
+ * ops logs an error and returns {@link fallbackView}, so an operation that took effect is not
54
+ * reported as failed.
55
+ */
56
+ admin: ExtensionAdmin,
57
+ /** The config-declared extension names (they cannot be installed / disabled / uninstalled, C15). */
58
+ registry: ExtensionRegistry,
59
+ /** Reads packages (a downgrade checks the target version's migration files). */
60
+ blobs: ExtensionBlobs, config: KernelConfigService,
61
+ /** Publishes `kernel.plugins.changed`. */
62
+ bus: PublishBus,
63
+ /**
64
+ * When the publish fails this replica reconciles itself (not awaited; other replicas catch up
65
+ * periodically). A no-op where the lifecycle never started (the CLI).
66
+ */
67
+ lifecycle: ExtensionLifecycle, log: KernelLogger);
68
+ private get db();
44
69
  /**
45
70
  * New install or version change (upgrade / downgrade): the install record points at package
46
71
  * `sha256`; the desired state is unchanged (a new install is disabled). Audit `extension.installed`.
@@ -72,6 +97,7 @@ export declare class ExtensionAdminOps {
72
97
  install(name: string, sha256: string, actor: string | null, actorTokenId?: string, opts?: {
73
98
  catalogItemId?: string;
74
99
  }): Promise<AdminExtensionView>;
100
+ private writeInstall;
75
101
  /** Enable on the deployment (audit `extension.enabled`); no change when already enabled. Org enablement is unchanged. */
76
102
  enable(name: string, actor: string | null, actorTokenId?: string): Promise<AdminExtensionView>;
77
103
  /**
@@ -90,14 +116,16 @@ export declare class ExtensionAdminOps {
90
116
  * up).
91
117
  */
92
118
  uninstall(name: string, actor: string | null, actorTokenId?: string): Promise<void>;
119
+ private writeUninstall;
93
120
  private setState;
121
+ private writeState;
94
122
  /**
95
123
  * 提交后的视图:拼视图失败(读包、查状态行出错)时操作已经生效,不能再报失败——记 error,返回降级视图。
96
124
  */
97
125
  private viewAfterCommit;
98
126
  /** 配置声明的插件不经安装记录管理。 */
99
127
  private assertInstallable;
100
- /** 按插件名串行(咨询锁,覆盖「还没有行」的新装),再锁住已有的安装记录行。 */
128
+ /** 按插件名串行(`PluginInstallLock`,覆盖「还没有行」的新装),再锁住已有的安装记录行。 */
101
129
  private lockRow;
102
130
  private audit;
103
131
  /** 提交后通知各副本;发布失败只告警(周期 reconcile 兜底),本副本自己先 reconcile。 */