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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +187 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +39 -8
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +326 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,5 +1,18 @@
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
+ };
10
+ import { Inject, Injectable, Module } from "@nestjs/common";
1
11
  import { sql } from "kysely";
2
12
  import { audit } from "../identity/audit.js";
13
+ import { KernelDb } from "../infra/database/kernel-db.js";
14
+ import { TransactionHost } from "../infra/database/transaction-host.js";
15
+ import { Transactional } from "../infra/database/transactional.decorator.js";
3
16
  /**
4
17
  * 评测运行的 token 预算(C7):`eval_runs.tokens_used` 在 PG 里原子累加,达到 `token_cap` 的同一条语句把
5
18
  * 状态置为 `capped`;worker 每次请求前查 {@link runActive},不活跃就不再发新请求。在途请求可以越过上限,
@@ -83,13 +96,44 @@ export async function skipPendingJudges(db, runId, caseId) {
83
96
  await q.execute();
84
97
  }
85
98
  /**
86
- * 重算 `cases_done` = 结果全部结束、且没有等评委的结果的用例数(幂等:任务重做不会重复计数),达到 `cases_total` 且运行仍在执行 →
87
- * `completed`。先锁运行行再数(READ COMMITTED 下新语句看得到其他任务已提交的结果),并发完成的任务不会互相覆盖。
88
- * worker 每做完一个用例、取消、入队失败时都调用。在事务里调用时锁随事务释放。
99
+ * 运行仍在执行(queued / running),且所属组织与评测集的 agent 都没有删除:取消、达到上限、已结束、运行行已删除、
100
+ * 组织或 agent 已删除都为 false(删除组织 / agent 时会显式取消运行,这里再兜一次底,挡住删除与请求之间的竞争)。
89
101
  */
90
- export async function recountCases(db, runId) {
91
- const run = async (trx) => {
92
- const row = await trx
102
+ export async function runActive(db, runId) {
103
+ const r = await db
104
+ .selectFrom("eval_runs as r")
105
+ .innerJoin("eval_sets as s", "s.id", "r.set_id")
106
+ .innerJoin("agents as a", "a.id", "s.agent_id")
107
+ .innerJoin("orgs as o", "o.id", "r.org_id")
108
+ .select("r.id")
109
+ .where("r.id", "=", runId)
110
+ .where("r.status", "in", [...ACTIVE_EVAL_STATUSES])
111
+ .where("a.deleted_at", "is", null)
112
+ .where("o.deleted_at", "is", null)
113
+ .executeTakeFirst();
114
+ return r !== undefined;
115
+ }
116
+ /**
117
+ * The eval run bookkeeping that needs a transaction: the progress recount (it locks the run row)
118
+ * and the cancellation of an org's or agent's runs when it is deleted. One provider, shared by the
119
+ * evals, the agents and the orgs.
120
+ */
121
+ let EvalBudget = class EvalBudget {
122
+ db;
123
+ txHost;
124
+ constructor(db, txHost) {
125
+ this.db = db;
126
+ this.txHost = txHost;
127
+ }
128
+ /**
129
+ * 重算 `cases_done` = 结果全部结束、且没有等评委的结果的用例数(幂等:任务重做不会重复计数),达到 `cases_total` 且运行仍在执行 →
130
+ * `completed`。先锁运行行再数(READ COMMITTED 下新语句看得到其他任务已提交的结果),并发完成的任务不会互相覆盖。
131
+ * worker 每做完一个用例、取消、入队失败时都调用。Joins the caller's transaction (the lock is released with it),
132
+ * else runs in its own.
133
+ */
134
+ async recountCases(runId) {
135
+ const db = this.db.db;
136
+ const row = await db
93
137
  .selectFrom("eval_runs")
94
138
  .select(["cases_total", "status"])
95
139
  .where("id", "=", runId)
@@ -102,10 +146,10 @@ export async function recountCases(db, runId) {
102
146
  SELECT case_id FROM capybara.eval_results WHERE run_id = ${runId}
103
147
  GROUP BY case_id
104
148
  HAVING bool_and(status IN ('done', 'error', 'skipped') AND judge_status <> 'pending')
105
- ) finished`.execute(trx);
149
+ ) finished`.execute(db);
106
150
  const done = Number(r.rows[0]?.n ?? 0);
107
151
  const complete = done >= row.cases_total && ACTIVE_EVAL_STATUSES.includes(row.status);
108
- await trx
152
+ await db
109
153
  .updateTable("eval_runs")
110
154
  .set({
111
155
  cases_done: done,
@@ -113,66 +157,74 @@ export async function recountCases(db, runId) {
113
157
  })
114
158
  .where("id", "=", runId)
115
159
  .execute();
116
- };
117
- if (db.isTransaction)
118
- await run(db);
119
- else
120
- await db.transaction().execute((trx) => run(trx));
121
- }
122
- /**
123
- * 运行仍在执行(queued / running),且所属组织与评测集的 agent 都没有删除:取消、达到上限、已结束、运行行已删除、
124
- * 组织或 agent 已删除都为 false(删除组织 / agent 时会显式取消运行,这里再兜一次底,挡住删除与请求之间的竞争)。
125
- */
126
- export async function runActive(db, runId) {
127
- const r = await db
128
- .selectFrom("eval_runs as r")
129
- .innerJoin("eval_sets as s", "s.id", "r.set_id")
130
- .innerJoin("agents as a", "a.id", "s.agent_id")
131
- .innerJoin("orgs as o", "o.id", "r.org_id")
132
- .select("r.id")
133
- .where("r.id", "=", runId)
134
- .where("r.status", "in", [...ACTIVE_EVAL_STATUSES])
135
- .where("a.deleted_at", "is", null)
136
- .where("o.deleted_at", "is", null)
137
- .executeTakeFirst();
138
- return r !== undefined;
139
- }
140
- /**
141
- * 删除组织或 agent 时(调用方的事务内)取消其在执行的评测运行:运行置 `cancelled`,未开始的结果 `skipped`、
142
- * 等评委的记 `skipped`,重算进度,每个运行写审计 `eval.run_cancelled`(detail 带原因)。在途请求做完后写不进新的请求
143
- * (worker 每次请求前查 {@link runActive})。运行创建者离开组织不取消(Ruling S1-b:管理员的评测运行是组织的工作)。
144
- */
145
- export async function cancelEvalRuns(trx, scope, actor, reason) {
146
- let q = trx
147
- .updateTable("eval_runs")
148
- .set({ status: "cancelled", finished_at: sql `now()` })
149
- .where("org_id", "=", scope.orgId)
150
- .where("status", "in", [...ACTIVE_EVAL_STATUSES]);
151
- if (scope.agentId !== undefined) {
152
- const agentId = scope.agentId;
153
- q = q.where("set_id", "in", (eb) => eb.selectFrom("eval_sets").select("id").where("agent_id", "=", agentId));
154
160
  }
155
- const runs = await q.returning("id").execute();
156
- for (const r of runs) {
157
- await trx
161
+ /**
162
+ * 删除组织或 agent 时(调用方的事务内)取消其在执行的评测运行:运行置 `cancelled`,未开始的结果 `skipped`、
163
+ * 等评委的记 `skipped`,重算进度,每个运行写审计 `eval.run_cancelled`(detail 带原因)。在途请求做完后写不进新的请求
164
+ * (worker 每次请求前查 {@link runActive})。运行创建者离开组织不取消(Ruling S1-b:管理员的评测运行是组织的工作)。
165
+ */
166
+ async cancelRuns(scope, actor, reason) {
167
+ const db = this.db.db;
168
+ let q = db
169
+ .updateTable("eval_runs")
170
+ .set({ status: "cancelled", finished_at: sql `now()` })
171
+ .where("org_id", "=", scope.orgId)
172
+ .where("status", "in", [...ACTIVE_EVAL_STATUSES]);
173
+ if (scope.agentId !== undefined) {
174
+ const agentId = scope.agentId;
175
+ q = q.where("set_id", "in", (eb) => eb.selectFrom("eval_sets").select("id").where("agent_id", "=", agentId));
176
+ }
177
+ const runs = await q.returning("id").execute();
178
+ for (const r of runs) {
179
+ await this.skipRun(r.id);
180
+ await audit(db, {
181
+ actorAccountId: actor.accountId,
182
+ ...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
183
+ orgId: scope.orgId,
184
+ action: "eval.run_cancelled",
185
+ target: r.id,
186
+ detail: { reason },
187
+ });
188
+ }
189
+ return runs.map((r) => r.id);
190
+ }
191
+ /**
192
+ * A run that stopped (cancelled, its set deleted): its results not started yet are `skipped`,
193
+ * the pending judges too, and the progress is recounted, in the caller's transaction.
194
+ */
195
+ async skipRun(runId) {
196
+ await this.db
158
197
  .updateTable("eval_results")
159
198
  .set({ status: "skipped", updated_at: sql `now()` })
160
- .where("run_id", "=", r.id)
199
+ .where("run_id", "=", runId)
161
200
  .where("status", "=", "pending")
162
201
  .execute();
163
- await skipPendingJudges(trx, r.id);
164
- await recountCases(trx, r.id);
165
- await audit(trx, {
166
- actorAccountId: actor.accountId,
167
- ...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
168
- orgId: scope.orgId,
169
- action: "eval.run_cancelled",
170
- target: r.id,
171
- detail: { reason },
172
- });
202
+ await skipPendingJudges(this.db.db, runId);
203
+ await this.recountCases(runId);
173
204
  }
174
- return runs.map((r) => r.id);
175
- }
205
+ };
206
+ __decorate([
207
+ Transactional()
208
+ ], EvalBudget.prototype, "recountCases", null);
209
+ __decorate([
210
+ Transactional({ propagation: "mandatory" })
211
+ ], EvalBudget.prototype, "cancelRuns", null);
212
+ __decorate([
213
+ Transactional({ propagation: "mandatory" })
214
+ ], EvalBudget.prototype, "skipRun", null);
215
+ EvalBudget = __decorate([
216
+ Injectable(),
217
+ __param(0, Inject(KernelDb)),
218
+ __param(1, Inject(TransactionHost))
219
+ ], EvalBudget);
220
+ export { EvalBudget };
221
+ /** {@link EvalBudget} on its own: the agents and the orgs import it without the evals. */
222
+ let EvalBudgetModule = class EvalBudgetModule {
223
+ };
224
+ EvalBudgetModule = __decorate([
225
+ Module({ providers: [EvalBudget], exports: [EvalBudget] })
226
+ ], EvalBudgetModule);
227
+ export { EvalBudgetModule };
176
228
  export const addUsage = (a, b) => ({
177
229
  inputTokens: a.inputTokens + b.inputTokens,
178
230
  outputTokens: a.outputTokens + b.outputTokens,
@@ -0,0 +1,31 @@
1
+ import { WorkerHost } from "@nestjs/bullmq";
2
+ import { type DynamicModule } from "@nestjs/common";
3
+ import type { Job, Worker } from "bullmq";
4
+ import type { KernelConfig } from "../config/schema.js";
5
+ import { type EvalJobData } from "./jobs.js";
6
+ import { EvalWorker } from "./worker.js";
7
+ /**
8
+ * Evals: the trajectory viewer, eval sets and cases, eval runs (the producer of
9
+ * `cap-kernel-evals`) and the run bookkeeping ({@link EvalBudgetModule}, re-exported).
10
+ */
11
+ export declare class EvalsModule {
12
+ }
13
+ /** The consumer of `cap-kernel-evals` (one case per job): {@link EvalWorker}. */
14
+ export declare class EvalsProcessor extends WorkerHost<Worker<EvalJobData>> {
15
+ private readonly evals;
16
+ constructor(evals: EvalWorker);
17
+ process(job: Job<EvalJobData>, token?: string): Promise<void>;
18
+ failed(job: Job<EvalJobData> | undefined, err: Error): void;
19
+ error(err: Error): void;
20
+ }
21
+ /**
22
+ * The eval worker (step and full-run replays, the judge) over the runtime's loop and model
23
+ * registry, and the consumer of `cap-kernel-evals`, its options from the startup config
24
+ * (concurrency `evals.workerConcurrency`, the run queues' job lock and stalled detection). Imported
25
+ * only by the worker role (`WorkerModule`), so other roles get no processor and no BullMQ worker.
26
+ * The worker never starts by itself: the worker role (`WorkerRole`) starts it after the extensions
27
+ * loaded, and drains it on stop.
28
+ */
29
+ export declare class EvalWorkersModule {
30
+ static forRoot(config: KernelConfig): DynamicModule;
31
+ }
@@ -0,0 +1,114 @@
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
+ };
10
+ var EvalWorkersModule_1;
11
+ import { hostname } from "node:os";
12
+ import { OnWorkerEvent, WorkerHost } from "@nestjs/bullmq";
13
+ import { Inject, Injectable, Module } from "@nestjs/common";
14
+ import { EventLogModule } from "../conversations/event-log.js";
15
+ import { IdentityModule } from "../identity/identity.module.js";
16
+ import { configuredProcessor } from "../infra/queue/configured-processor.js";
17
+ import { QueueModule } from "../infra/queue/queue.module.js";
18
+ import { runJob } from "../infra/queue/run-job.js";
19
+ import { ModelsModule } from "../models/models.module.js";
20
+ import { OrgLockModule } from "../orgs/org-lock.js";
21
+ import { ProvidersModule } from "../runtime/providers.js";
22
+ import { RuntimeModule } from "../runtime/runtime.module.js";
23
+ import { EvalBudgetModule } from "./budget.js";
24
+ import { EVAL_QUEUE_NAME, EvalJobs } from "./jobs.js";
25
+ import { EvalReplaySeeder } from "./run-replay.js";
26
+ import { EvalRunsService } from "./runs.service.js";
27
+ import { EvalSetsService } from "./sets.service.js";
28
+ import { TrajectoryService } from "./trajectory.service.js";
29
+ import { EVAL_MAX_STALLED_COUNT, EvalWorker } from "./worker.js";
30
+ /**
31
+ * Evals: the trajectory viewer, eval sets and cases, eval runs (the producer of
32
+ * `cap-kernel-evals`) and the run bookkeeping ({@link EvalBudgetModule}, re-exported).
33
+ */
34
+ let EvalsModule = class EvalsModule {
35
+ };
36
+ EvalsModule = __decorate([
37
+ Module({
38
+ imports: [
39
+ EventLogModule,
40
+ ModelsModule,
41
+ IdentityModule,
42
+ OrgLockModule,
43
+ ProvidersModule,
44
+ EvalBudgetModule,
45
+ QueueModule.registerQueue(EVAL_QUEUE_NAME),
46
+ ],
47
+ providers: [TrajectoryService, EvalSetsService, EvalRunsService, EvalJobs],
48
+ exports: [TrajectoryService, EvalSetsService, EvalRunsService, EvalJobs, EvalBudgetModule],
49
+ })
50
+ ], EvalsModule);
51
+ export { EvalsModule };
52
+ /** The consumer of `cap-kernel-evals` (one case per job): {@link EvalWorker}. */
53
+ let EvalsProcessor = class EvalsProcessor extends WorkerHost {
54
+ evals;
55
+ constructor(evals) {
56
+ super();
57
+ this.evals = evals;
58
+ }
59
+ process(job, token) {
60
+ return runJob(EVAL_QUEUE_NAME, job, () => this.evals.process(job, token));
61
+ }
62
+ failed(job, err) {
63
+ this.evals.onFailed(job, err);
64
+ }
65
+ error(err) {
66
+ this.evals.onError(err);
67
+ }
68
+ };
69
+ __decorate([
70
+ OnWorkerEvent("failed")
71
+ ], EvalsProcessor.prototype, "failed", null);
72
+ __decorate([
73
+ OnWorkerEvent("error")
74
+ ], EvalsProcessor.prototype, "error", null);
75
+ EvalsProcessor = __decorate([
76
+ Injectable(),
77
+ __param(0, Inject(EvalWorker))
78
+ ], EvalsProcessor);
79
+ export { EvalsProcessor };
80
+ /**
81
+ * The eval worker (step and full-run replays, the judge) over the runtime's loop and model
82
+ * registry, and the consumer of `cap-kernel-evals`, its options from the startup config
83
+ * (concurrency `evals.workerConcurrency`, the run queues' job lock and stalled detection). Imported
84
+ * only by the worker role (`WorkerModule`), so other roles get no processor and no BullMQ worker.
85
+ * The worker never starts by itself: the worker role (`WorkerRole`) starts it after the extensions
86
+ * loaded, and drains it on stop.
87
+ */
88
+ let EvalWorkersModule = EvalWorkersModule_1 = class EvalWorkersModule {
89
+ static forRoot(config) {
90
+ const { jobLockMs, stalledIntervalMs } = config.runtime;
91
+ return {
92
+ module: EvalWorkersModule_1,
93
+ imports: [EvalsModule, RuntimeModule, EventLogModule, ModelsModule],
94
+ providers: [
95
+ EvalReplaySeeder,
96
+ EvalWorker,
97
+ configuredProcessor(EvalsProcessor, EVAL_QUEUE_NAME, {
98
+ // the worker name is recorded on the job (BullMQ processedBy): which replica ran it
99
+ name: `${hostname()}-${process.pid}`,
100
+ concurrency: config.evals.workerConcurrency,
101
+ lockDuration: jobLockMs,
102
+ stalledInterval: stalledIntervalMs,
103
+ maxStalledCount: EVAL_MAX_STALLED_COUNT,
104
+ }),
105
+ ],
106
+ exports: [EvalWorker, EvalsProcessor],
107
+ };
108
+ }
109
+ };
110
+ EvalWorkersModule = EvalWorkersModule_1 = __decorate([
111
+ Module({})
112
+ // biome-ignore lint/complexity/noStaticOnlyClass: a Nest dynamic module
113
+ ], EvalWorkersModule);
114
+ export { EvalWorkersModule };
@@ -0,0 +1,20 @@
1
+ import type { Queue } from "bullmq";
2
+ /** 评测队列的 BullMQ 队列名(不含 `:`,C7)。 */
3
+ export declare const EVAL_QUEUE_NAME = "cap-kernel-evals";
4
+ /** 每个用例一个任务(C7;不含 `:`)。 */
5
+ export declare const evalJobId: (runId: string, caseId: string) => string;
6
+ /** 评测任务的数据。 */
7
+ export interface EvalJobData {
8
+ runId: string;
9
+ caseId: string;
10
+ orgId: string;
11
+ }
12
+ /**
13
+ * The producer of `cap-kernel-evals` (one job per case, {@link evalJobId}); the eval worker
14
+ * consumes it on the worker role. A leaf module: the runs service and the worker import it.
15
+ */
16
+ export declare class EvalJobs {
17
+ private readonly queue;
18
+ constructor(queue: Pick<Queue, "addBulk">);
19
+ enqueue(jobs: EvalJobData[]): Promise<void>;
20
+ }
@@ -0,0 +1,45 @@
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
+ };
10
+ import { getQueueToken } from "@nestjs/bullmq";
11
+ import { Inject, Injectable } from "@nestjs/common";
12
+ /** 评测队列的 BullMQ 队列名(不含 `:`,C7)。 */
13
+ export const EVAL_QUEUE_NAME = "cap-kernel-evals";
14
+ /** 每个用例一个任务(C7;不含 `:`)。 */
15
+ export const evalJobId = (runId, caseId) => `eval-${runId}-${caseId}`;
16
+ /**
17
+ * The producer of `cap-kernel-evals` (one job per case, {@link evalJobId}); the eval worker
18
+ * consumes it on the worker role. A leaf module: the runs service and the worker import it.
19
+ */
20
+ let EvalJobs = class EvalJobs {
21
+ queue;
22
+ constructor(queue) {
23
+ this.queue = queue;
24
+ }
25
+ async enqueue(jobs) {
26
+ await this.queue.addBulk(jobs.map((data) => ({
27
+ name: "case",
28
+ data,
29
+ opts: {
30
+ jobId: evalJobId(data.runId, data.caseId),
31
+ // 处理函数外的暂时故障(PG / Redis):指数退避重试,不让整个用例一次失败。
32
+ // 结果按认领号写入,重做不会重复写结果
33
+ attempts: 3,
34
+ backoff: { type: "exponential", delay: 1000 },
35
+ removeOnComplete: true,
36
+ removeOnFail: 1000,
37
+ },
38
+ })));
39
+ }
40
+ };
41
+ EvalJobs = __decorate([
42
+ Injectable(),
43
+ __param(0, Inject(getQueueToken(EVAL_QUEUE_NAME)))
44
+ ], EvalJobs);
45
+ export { EvalJobs };
@@ -1,4 +1,5 @@
1
1
  import type { EventLog } from "../conversations/event-log.js";
2
+ import { type LegacyScope } from "../tools/legacy-keys.js";
2
3
  import { type ToolPipeline, type ToolStepContext } from "../tools/pipeline.js";
3
4
  import type { CaseSnapshot } from "./snapshot.js";
4
5
  /**
@@ -15,12 +16,34 @@ export interface RecordedCall {
15
16
  inputKey: string;
16
17
  content: string;
17
18
  isError: boolean;
18
- /** 原结果里的 `tool_search` 已加载工具(照抄:之后请求的已加载集合由日志还原)。 */
19
+ /** 原结果里的 `ToolSearch` 已加载工具(照抄:之后请求的已加载集合由日志还原)。 */
19
20
  loadedTools?: string[];
20
21
  contentTypes?: string[];
21
22
  /** 原 `tool_call_started` 的定义指纹(没有开始事件的调用为空串)。 */
22
23
  specHash: string;
24
+ /** The recorded call used release-candidate names; `toolKey` and `inputKey` are already the current ones. */
25
+ legacy?: true;
23
26
  }
27
+ /**
28
+ * The connectors and extensions an rc `<x>__<tool>` key can name, from positive evidence in the
29
+ * snapshot only (a head with no evidence, or evidence of both kinds, stays unmapped, so its
30
+ * recorded calls are unmatched, which is a safe miss):
31
+ * - a connector: the tool definition the key was recorded with (`toolSpecs`, found by the specHash of
32
+ * its `tool_call_started` or its `model_call` tools / catalog entry) has `connectorData`;
33
+ * - an extension: that definition exists without `connectorData` and its name is the key's tool
34
+ * part, or an agent definition names exactly that tool as a `{ kind: "plugin", plugin: x, name }` ref.
35
+ */
36
+ export declare function legacyScopeOf(s: CaseSnapshot): LegacyScope;
37
+ /**
38
+ * A recorded call in the current names: an rc builtin or `<x>__<tool>` key becomes its current
39
+ * key with the input's parameters renamed. Only the recorded side is ever normalized; a call
40
+ * already in current names (or one that cannot be mapped) is returned as is.
41
+ */
42
+ export declare function currentCall(name: string, input: unknown, scope: LegacyScope): {
43
+ name: string;
44
+ input: unknown;
45
+ legacy: boolean;
46
+ };
24
47
  /** 规范化 JSON:对象键递归按码点排序,数组保持顺序;`undefined` 按 JSON 规则省略。 */
25
48
  export declare function canonicalJson(v: unknown): string;
26
49
  /** The matching key of a call: the canonical JSON of its input without the ignored fields. */
@@ -43,7 +66,10 @@ export declare class RecordedToolPipeline implements Pick<ToolPipeline, "runStep
43
66
  private readonly d;
44
67
  private readonly used;
45
68
  private misses;
69
+ private legacyHits;
46
70
  constructor(d: RecordedToolPipelineDeps);
71
+ /** Calls so far matched with a recording made under release-candidate tool names. */
72
+ legacyMatches(): number;
47
73
  /** 至今没有匹配到记录的调用数。 */
48
74
  unmatched(): number;
49
75
  runStep(ctx: ToolStepContext): Promise<{
@@ -1,4 +1,6 @@
1
1
  import { assistantIdemKey } from "../runtime/model-call.js";
2
+ import { MATCH_IGNORED_FIELDS } from "../tools/builtin-names.js";
3
+ import { isLegacyPrefixedKey, legacyToolInput, legacyToolKey, } from "../tools/legacy-keys.js";
2
4
  import { RUN_STOPPED_TEXT } from "../tools/pipeline.js";
3
5
  /**
4
6
  * 整轮回放的工具管线(C6 / Review Focus 3):只回放原运行记录的工具结果,**从不执行任何工具**——
@@ -7,6 +9,77 @@ import { RUN_STOPPED_TEXT } from "../tools/pipeline.js";
7
9
  */
8
10
  /** 没有匹配记录时模型看到的工具结果(模型可见,英文)。 */
9
11
  export const REPLAY_NO_RECORDING = "[replay] No recorded result matches this tool call (same tool and arguments); the tool was not executed during replay.";
12
+ /**
13
+ * The connectors and extensions an rc `<x>__<tool>` key can name, from positive evidence in the
14
+ * snapshot only (a head with no evidence, or evidence of both kinds, stays unmapped, so its
15
+ * recorded calls are unmatched, which is a safe miss):
16
+ * - a connector: the tool definition the key was recorded with (`toolSpecs`, found by the specHash of
17
+ * its `tool_call_started` or its `model_call` tools / catalog entry) has `connectorData`;
18
+ * - an extension: that definition exists without `connectorData` and its name is the key's tool
19
+ * part, or an agent definition names exactly that tool as a `{ kind: "plugin", plugin: x, name }` ref.
20
+ */
21
+ export function legacyScopeOf(s) {
22
+ const hashes = new Map();
23
+ const note = (key, hash) => {
24
+ if (!isLegacyPrefixedKey(key))
25
+ return;
26
+ const set = hashes.get(key) ?? new Set();
27
+ if (hash !== undefined && hash !== "")
28
+ set.add(hash);
29
+ hashes.set(key, set);
30
+ };
31
+ for (const e of s.events) {
32
+ if (e.type === "tool_call_started") {
33
+ const p = e.payload;
34
+ note(p.toolKey, p.specHash);
35
+ }
36
+ else if (e.type === "model_call") {
37
+ const r = e.payload.request;
38
+ for (const t of [...(r?.tools ?? []), ...(r?.catalog ?? [])])
39
+ note(t.key, t.specHash);
40
+ }
41
+ }
42
+ const extensionNames = new Set();
43
+ const connectorSlugs = new Set();
44
+ const planted = new Set();
45
+ for (const def of Object.values(s.definitions)) {
46
+ for (const t of def.tools)
47
+ if (t.kind === "plugin")
48
+ planted.add(`${t.plugin}__${t.name}`);
49
+ }
50
+ for (const [key, set] of hashes) {
51
+ const i = key.indexOf("__");
52
+ const head = key.slice(0, i);
53
+ const tool = key.slice(i + 2);
54
+ for (const h of set) {
55
+ const spec = s.toolSpecs[h];
56
+ if (spec === undefined)
57
+ continue;
58
+ if (spec.connectorData !== undefined) {
59
+ connectorSlugs.add(head);
60
+ }
61
+ else if (spec.name === tool) {
62
+ extensionNames.add(head);
63
+ }
64
+ }
65
+ }
66
+ for (const key of planted) {
67
+ if (hashes.has(key))
68
+ extensionNames.add(key.slice(0, key.indexOf("__")));
69
+ }
70
+ return { connectorSlugs, extensionNames };
71
+ }
72
+ /**
73
+ * A recorded call in the current names: an rc builtin or `<x>__<tool>` key becomes its current
74
+ * key with the input's parameters renamed. Only the recorded side is ever normalized; a call
75
+ * already in current names (or one that cannot be mapped) is returned as is.
76
+ */
77
+ export function currentCall(name, input, scope) {
78
+ const key = legacyToolKey(name, scope);
79
+ if (key === null)
80
+ return { name, input, legacy: false };
81
+ return { name: key, input: legacyToolInput(name, input), legacy: true };
82
+ }
10
83
  /** 规范化 JSON:对象键递归按码点排序,数组保持顺序;`undefined` 按 JSON 规则省略。 */
11
84
  export function canonicalJson(v) {
12
85
  const norm = (x) => {
@@ -23,14 +96,6 @@ export function canonicalJson(v) {
23
96
  };
24
97
  return JSON.stringify(norm(v) ?? null);
25
98
  }
26
- /**
27
- * Input fields left out when matching, per tool: display-only arguments the model writes that do not
28
- * change what the tool does. `sandbox_bash`'s `description` became required in UI refresh B, so a
29
- * recording without it and a replayed call with one (or a different wording) still match.
30
- */
31
- const MATCH_IGNORED_FIELDS = {
32
- sandbox_bash: ["description"],
33
- };
34
99
  /** The matching key of a call: the canonical JSON of its input without the ignored fields. */
35
100
  export function matchKey(toolKey, input) {
36
101
  const ignored = MATCH_IGNORED_FIELDS[toolKey];
@@ -64,6 +129,7 @@ export function recordedCalls(s) {
64
129
  started.set(p.callId, p.specHash);
65
130
  }
66
131
  }
132
+ const scope = legacyScopeOf(s);
67
133
  const out = [];
68
134
  for (const e of own) {
69
135
  if (e.type !== "assistant_message")
@@ -76,9 +142,11 @@ export function recordedCalls(s) {
76
142
  const r = results.get(call.id);
77
143
  if (!r)
78
144
  continue;
145
+ const cur = currentCall(call.name, call.input, scope);
79
146
  out.push({
80
- toolKey: call.name,
81
- inputKey: matchKey(call.name, call.input),
147
+ toolKey: cur.name,
148
+ inputKey: matchKey(cur.name, cur.input),
149
+ ...(cur.legacy && { legacy: true }),
82
150
  content: r.content,
83
151
  isError: r.isError,
84
152
  ...(r.loadedTools !== undefined && { loadedTools: r.loadedTools }),
@@ -98,9 +166,14 @@ export class RecordedToolPipeline {
98
166
  d;
99
167
  used = new Set();
100
168
  misses = 0;
169
+ legacyHits = 0;
101
170
  constructor(d) {
102
171
  this.d = d;
103
172
  }
173
+ /** Calls so far matched with a recording made under release-candidate tool names. */
174
+ legacyMatches() {
175
+ return this.legacyHits;
176
+ }
104
177
  /** 至今没有匹配到记录的调用数。 */
105
178
  unmatched() {
106
179
  return this.misses;
@@ -162,6 +235,8 @@ export class RecordedToolPipeline {
162
235
  if (i < 0)
163
236
  return undefined;
164
237
  this.used.add(i);
238
+ if (this.d.recordings[i]?.legacy === true)
239
+ this.legacyHits++;
165
240
  return this.d.recordings[i];
166
241
  }
167
242
  }