@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,23 +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 { 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";
10
27
  import { MediaUnavailableError, RunError } from "../runtime/model-call.js";
11
- import { ProviderListError } from "../runtime/providers.js";
12
- import { ORG_QUOTA_LEASE_MS } from "../runtime/quota.js";
13
- import { bullConnection } from "../runtime/run-queue.js";
14
- 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";
15
33
  import { replyParts, structuralDiff } from "./diff.js";
34
+ import { evalJobId } from "./jobs.js";
16
35
  import { JUDGE_PROVIDER_UNAVAILABLE, judge } from "./judge.js";
17
36
  import { userRequestOf } from "./plan.js";
18
37
  import { subagentCaseChanged, subagentStartedOf } from "./reconstruct.js";
19
- import { deleteEvalConversation, ReplayClaimLost, replayRun, runBaseline, } from "./run-replay.js";
20
- 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";
21
40
  import { readSnapshot, replayableCalls, toEvents } from "./snapshot.js";
22
41
  import { ReplayAttemptError, replayStep, resolveCandidate, } from "./step-replay.js";
23
42
  /**
@@ -41,7 +60,13 @@ export const EVAL_MAX_RETRIES = 3;
41
60
  /** 第 n 次重试前的等待(毫秒);供应商给了 `retryAfterMs` 时取它(不超过 30 秒)。 */
42
61
  const RETRY_DELAYS_MS = [1000, 2000, 4000];
43
62
  const MAX_RETRY_AFTER_MS = 30_000;
44
- 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");
45
70
  /** 供应商插件在调用途中被撤销(错误本身或其 cause)。 */
46
71
  const isPluginUnloaded = (err) => err instanceof ExtensionUnloadedError ||
47
72
  (err instanceof Error && err.cause instanceof ExtensionUnloadedError);
@@ -134,42 +159,90 @@ function judgeInputOf(s, mode, modelCallSeq, baseline, candidate, rubric) {
134
159
  rubric,
135
160
  };
136
161
  }
137
- export class EvalWorker {
138
- d;
162
+ let EvalWorker = class EvalWorker {
163
+ txHost;
139
164
  worker;
140
- conn;
141
165
  /** 本进程在执行的任务:停机时中止,任务回到队列。 */
142
166
  active = new Set();
143
167
  closing = false;
144
- constructor(d) {
145
- 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
+ };
146
219
  }
147
- start() {
148
- 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)
149
226
  return;
150
- const { runtime, evals } = this.d.config();
151
- this.conn = bullConnection(this.d.redisUrl, this.d.log);
152
- this.worker = new Worker(EVAL_QUEUE_NAME, (job, token) => this.process(job, token), {
153
- name: `${hostname()}-${process.pid}`,
154
- connection: this.conn,
155
- concurrency: evals.workerConcurrency,
156
- lockDuration: runtime.jobLockMs,
157
- stalledInterval: runtime.stalledIntervalMs,
158
- maxStalledCount: MAX_STALLED_COUNT,
159
- });
160
- this.worker.on("error", (err) => this.d.log.error("eval worker error", { err }));
161
- this.worker.on("failed", (job, err) => {
162
- if (!job)
163
- return;
164
- // 处理函数外的暂时故障(PG / Redis)由 BullMQ 按 attempts 指数退避重试;用尽(或 stalled 超限)才算失败
165
- if (job.attemptsMade < (job.opts.attempts ?? 1) && !/stalled/i.test(err.message)) {
166
- this.d.log.warn("eval job attempt failed; retrying", { jobId: job.id, err });
167
- return;
168
- }
169
- this.d.log.error("eval job failed", { jobId: job.id, err });
170
- // 任务不会再执行:该用例剩下的结果记 error,运行不因此卡住
171
- void this.failCase(job.data, err).catch((e) => this.d.log.error("cannot mark failed eval job", { jobId: job.id, err: e }));
172
- });
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 }));
173
246
  }
174
247
  /** 停止领取;中止本进程在执行的任务(回到队列由别的 worker 接着做),在 budgetMs 内等它们退出。 */
175
248
  async close(budgetMs) {
@@ -181,48 +254,36 @@ export class EvalWorker {
181
254
  await worker.pause(true).catch(() => { });
182
255
  for (const ac of this.active)
183
256
  ac.abort();
184
- let timer;
185
- const done = await Promise.race([
186
- worker.close().then(() => true),
187
- new Promise((resolve) => {
188
- timer = setTimeout(() => resolve(false), Math.max(0, budgetMs));
189
- timer.unref();
190
- }),
191
- ]);
192
- clearTimeout(timer);
257
+ const done = await waitWithin(worker.close(), budgetMs);
193
258
  if (!done)
194
259
  await worker.close(true).catch(() => { });
195
- this.conn?.disconnect();
196
260
  }
261
+ /** One job: replays one case (the processor runs it in `runJob`). */
197
262
  async process(job, token) {
198
263
  const data = job.data;
199
264
  const { runId, orgId } = data;
200
265
  const jobId = job.id ?? evalJobId(runId, data.caseId);
201
266
  if (!(await runActive(this.d.db, runId))) {
202
267
  await this.skipCase(data);
203
- await recountCases(this.d.db, runId);
268
+ await this.d.budget.recountCases(runId);
204
269
  return;
205
270
  }
206
- const limit = this.d.config().evals.orgConcurrency;
271
+ const limit = this.d.config.get().evals.orgConcurrency;
207
272
  // 每次执行一个新的认领号:失去认领(stalled 后被别的 worker 接手)的旧执行写不进结果(用量照样计入)。
208
273
  // 配额成员 = 任务 id + 认领号:旧执行退出时只移除自己的名额,不会把接手执行的名额一起移掉
209
274
  const claim = randomUUID();
210
275
  const member = `${jobId}-${claim}`;
211
- 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) {
212
279
  // 配额满:固定 5 秒后再试,不按事件唤醒。评测是后台批任务,几秒空等可以接受,换来没有跨副本通知
213
- await job.moveToDelayed(Date.now() + (this.d.quotaRetryMs ?? EVAL_QUOTA_RETRY_MS), token);
280
+ await job.moveToDelayed(Date.now() + EVAL_QUOTA_RETRY_MS, token);
214
281
  throw new DelayedError();
215
282
  }
216
283
  const ac = new AbortController();
217
284
  this.active.add(ac);
218
285
  if (this.closing)
219
286
  ac.abort();
220
- const renew = setInterval(() => {
221
- this.d.quota
222
- .renew(orgId, member, ORG_QUOTA_LEASE_MS)
223
- .catch((err) => this.d.log.warn("eval quota renew failed", { jobId, err }));
224
- }, ORG_QUOTA_LEASE_MS / 3);
225
- renew.unref();
226
287
  try {
227
288
  await this.d.db
228
289
  .updateTable("eval_runs")
@@ -241,13 +302,12 @@ export class EvalWorker {
241
302
  throw err;
242
303
  }
243
304
  finally {
244
- clearInterval(renew);
245
305
  this.active.delete(ac);
246
- await this.d.quota
247
- .leave(orgId, member)
306
+ await slot
307
+ .release()
248
308
  .catch((err) => this.d.log.warn("eval quota leave failed", { jobId, err }));
249
309
  }
250
- await recountCases(this.d.db, runId);
310
+ await this.d.budget.recountCases(runId);
251
311
  }
252
312
  /** 单步回放每次请求前:运行仍在执行({@link runActive})且结果仍由本次执行认领。 */
253
313
  async mayRequest(runId, resultId, claim) {
@@ -277,7 +337,7 @@ export class EvalWorker {
277
337
  .executeTakeFirst();
278
338
  if (Number(w.numUpdatedRows) === 0)
279
339
  return true;
280
- 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);
281
341
  if (tripped) {
282
342
  this.d.log.warn("eval run stopped after too many consecutive errors", { runId: data.runId });
283
343
  await this.skipCase(data);
@@ -422,34 +482,7 @@ export class EvalWorker {
422
482
  const b = replyParts(result.baseline.content);
423
483
  const c = replyParts(result.candidate.content);
424
484
  const diff = structuralDiff({ ...b, stopReason: result.baseline.stopReason }, { ...c, stopReason: result.candidate.stopReason });
425
- const outcome = await db.transaction().execute(async (trx) => {
426
- // 只在仍由本次执行认领时写结果:stalled 后被接手的旧执行不覆盖结果。用量照样计入(请求确实发出且已付费,
427
- // 与失败尝试一样不以认领为条件),走同一个原子 consumeTokens
428
- const w = await trx
429
- .updateTable("eval_results")
430
- .set({
431
- status: "done",
432
- baseline: JSON.stringify(result.baseline),
433
- candidate: JSON.stringify(result.candidate),
434
- diff: JSON.stringify(diff),
435
- // 开了评委:评委做完之前用例不算做完(recountCases 不计 pending 的评委)
436
- judge_status: grade.judge ? "pending" : "none",
437
- drift: result.drift,
438
- error: null,
439
- updated_at: sql `now()`,
440
- })
441
- .where("id", "=", r.id)
442
- .where("status", "=", "running")
443
- .where("claimed_by", "=", claim)
444
- .executeTakeFirst();
445
- if (Number(w.numUpdatedRows) === 0) {
446
- await consumeTokens(trx, runId, tokens);
447
- return "lost";
448
- }
449
- await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
450
- const { capped } = await consumeTokens(trx, runId, tokens);
451
- return capped ? "capped" : "ok";
452
- });
485
+ const outcome = await this.writeStepResultIn(runId, r.id, claim, result, diff, grade, tokens);
453
486
  // 失去认领:这个用例已由别的执行接手,本次停下
454
487
  if (outcome === "lost")
455
488
  return;
@@ -510,7 +543,7 @@ export class EvalWorker {
510
543
  try {
511
544
  v = await judge({
512
545
  purposes: this.d.purposes,
513
- maxOutputTokens: this.d.config().evals.judgeMaxOutputTokens,
546
+ maxOutputTokens: this.d.config.get().evals.judgeMaxOutputTokens,
514
547
  }, data.orgId, input, signal);
515
548
  }
516
549
  catch (err) {
@@ -608,8 +641,9 @@ export class EvalWorker {
608
641
  out = await replayRun({
609
642
  ...this.d.runReplay,
610
643
  stillClaimed: () => held(),
611
- onSeeded: async (trx, conversationId) => {
612
- 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
613
647
  .updateTable("eval_results")
614
648
  .set({ eval_conversation_id: conversationId, updated_at: sql `now()` })
615
649
  .where("id", "=", resultId)
@@ -659,33 +693,73 @@ export class EvalWorker {
659
693
  const baseText = replyParts(baseline.finalContent).text;
660
694
  const candText = replyParts(out.finalContent).text;
661
695
  const diff = structuralDiff({ toolCalls: baseline.toolCalls, text: baseText, stopReason: baseline.stopReason }, { toolCalls: out.toolCalls, text: candText, stopReason: out.stopReason });
662
- const written = await db.transaction().execute(async (trx) => {
663
- const w = await trx
664
- .updateTable("eval_results")
665
- .set({
666
- status: "done",
667
- baseline: JSON.stringify(baseline),
668
- candidate: JSON.stringify(out),
669
- diff: JSON.stringify(diff),
670
- judge_status: grade.judge ? "pending" : "none",
671
- drift,
672
- error: null,
673
- eval_conversation_id: out.conversationId,
674
- updated_at: sql `now()`,
675
- })
676
- .where("id", "=", resultId)
677
- .where("status", "=", "running")
678
- .where("claimed_by", "=", claim)
679
- .executeTakeFirst();
680
- if (Number(w.numUpdatedRows) === 0)
681
- return false;
682
- await recordOutcome(trx, runId, true, this.d.config().evals.maxConsecutiveErrors);
683
- return true;
696
+ const written = await this.writeRunResultIn(runId, resultId, claim, {
697
+ baseline,
698
+ out,
699
+ diff,
700
+ drift,
701
+ judge: grade.judge,
684
702
  });
685
703
  if (!written || !grade.judge)
686
704
  return;
687
705
  await this.judgeResult(data, resultId, claim, signal, judgeInputOf(s, "run", null, baseline, out, grade.rubric));
688
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
+ }
689
763
  /**
690
764
  * 该用例剩下的结果标 skipped。整轮回放留下的评测对话里若还有没结束的运行(上一次执行崩溃在回放中途),删掉它,
691
765
  * 不留永远「执行中」的评测对话;已正常收尾(`run_aborted` / `run_finished`)的保留,轨迹里能看到停在哪里。
@@ -773,9 +847,35 @@ export class EvalWorker {
773
847
  .execute();
774
848
  // 已 done 但评委一直没做成的:评委记 skipped(结果本身保留)
775
849
  await skipPendingJudges(this.d.db, data.runId, data.caseId);
776
- await recountCases(this.d.db, data.runId);
850
+ await this.d.budget.recountCases(data.runId);
777
851
  }
778
- }
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 };
779
879
  /**
780
880
  * A plugin template's child case: the template's current version, which a new dispatch would use
781
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。 */