@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,37 @@
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 { validateParams } from "@capybara-hq/plugin-sdk";
11
+ import { Inject, Injectable } from "@nestjs/common";
3
12
  import { sql } from "kysely";
4
13
  import { ApiError } from "../errors.js";
5
- import { cancelEvalRuns } from "../evals/budget.js";
14
+ import { EvalBudget } from "../evals/budget.js";
6
15
  import { audit } from "../identity/audit.js";
16
+ import { KernelDb } from "../infra/database/kernel-db.js";
17
+ import { TransactionHost } from "../infra/database/transaction-host.js";
18
+ import { Transactional } from "../infra/database/transactional.decorator.js";
19
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
7
20
  import { rejectAnonymousGuest } from "../orgs/members.service.js";
8
- import { lockOrgAndAuthorize } from "../orgs/org-lock.js";
21
+ import { OrgLock } from "../orgs/org-lock.js";
9
22
  import { roleAtLeast } from "../orgs/roles.js";
23
+ import { ProviderRegistry } from "../runtime/providers.js";
24
+ import { SandboxJobs } from "../sandbox/jobs.js";
25
+ import { SkillChangesService } from "../skills/changes.service.js";
10
26
  import { assertOrgSkills, assertPinnedSkills } from "../skills/skills.service.js";
11
- import { normalizeStoredDefinition, SUBAGENT_NAME_RE } from "./definition.js";
12
- export const AGENT_VISIBILITIES = ["private", "org", "members"];
27
+ import { ToolRegistry } from "../tools/registry.js";
28
+ import { AgentLookup, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
29
+ import { normalizeStoredDefinition, paramIssues, SUBAGENT_NAME_RE, SUBAGENT_ROSTER_MAX, } from "./definition.js";
30
+ export { AGENT_VISIBILITIES, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
31
+ export { paramIssues, SUBAGENT_ROSTER_MAX } from "./definition.js";
13
32
  /** 删除 agent 时每个销毁任务带的对话数。 */
14
33
  const SANDBOX_DESTROY_BATCH = 500;
15
34
  const notFound = () => new ApiError("agent.not_found", "Agent not found");
16
- /** 按模型声明严格校验一组参数,返回 `{ path: "<field>.<key>", message }[]`(评测候选也用它)。 */
17
- export function paramIssues(field, decl, params) {
18
- const r = validateParams(decl, params);
19
- return r.ok ? [] : r.issues.map((i) => ({ path: `${field}.${i.key}`, message: i.message }));
20
- }
21
35
  /** 键排序后的 JSON:jsonb 不保留键顺序,比较定义是否变化时用。 */
22
36
  function canonical(v) {
23
37
  if (Array.isArray(v))
@@ -30,60 +44,6 @@ function canonical(v) {
30
44
  }
31
45
  return JSON.stringify(v);
32
46
  }
33
- /**
34
- * 可见性判定(`canUse`)的 SQL 条件:agent 未删除、所属组织未删除,且
35
- * - viewer 为账号:仍是该组织成员(含访客),并且是负责人 / visibility='org' / 在 agent_members 名单中;
36
- * - viewer 为 null(该组织的服务令牌):只认 visibility='org'。
37
- */
38
- export function visibleTo(viewerAccountId) {
39
- return (eb) => {
40
- const orgLive = eb.exists(eb
41
- .selectFrom("orgs")
42
- .select(sql `1`.as("one"))
43
- .whereRef("orgs.id", "=", "agents.org_id")
44
- .where("orgs.deleted_at", "is", null));
45
- if (viewerAccountId === null) {
46
- return eb.and([orgLive, eb("agents.visibility", "=", "org")]);
47
- }
48
- return eb.and([
49
- orgLive,
50
- eb.exists(eb
51
- .selectFrom("memberships")
52
- .select(sql `1`.as("one"))
53
- .whereRef("memberships.org_id", "=", "agents.org_id")
54
- .where("memberships.account_id", "=", viewerAccountId)),
55
- eb.or([
56
- eb("agents.owner_account_id", "=", viewerAccountId),
57
- eb("agents.visibility", "=", "org"),
58
- eb.and([
59
- eb("agents.visibility", "=", "members"),
60
- eb.exists(eb
61
- .selectFrom("agent_members")
62
- .select(sql `1`.as("one"))
63
- .whereRef("agent_members.agent_id", "=", "agents.id")
64
- .where("agent_members.account_id", "=", viewerAccountId)),
65
- ]),
66
- ]),
67
- ]);
68
- };
69
- }
70
- /**
71
- * Whether the live agent `agentId` is visible to `accountId` under the normal visibility rule
72
- * ({@link visibleTo}: owner, `visibility = 'org'`, or listed in `agent_members`, while a member of
73
- * the live org). Deleted agents are never visible.
74
- */
75
- export async function isAgentVisibleTo(db, agentId, accountId) {
76
- const row = await db
77
- .selectFrom("agents")
78
- .select("id")
79
- .where("id", "=", agentId)
80
- .where("deleted_at", "is", null)
81
- .where(visibleTo(accountId))
82
- .executeTakeFirst();
83
- return row !== undefined;
84
- }
85
- /** Roster entries an agent may list (spec §4.3), general-purpose included. */
86
- export const SUBAGENT_ROSTER_MAX = 20;
87
47
  /**
88
48
  * Checks `subagents` of an agent definition in the caller's transaction (spec §5.2); throws 400
89
49
  * `agent.subagents_invalid` with one detail per problem (`{ reason, path, value? }`):
@@ -214,27 +174,41 @@ export async function assertSubagents(t, a) {
214
174
  * Agent 定义、版本与可见范围。写操作都在组织行锁内实时复核发起人角色(spec 3.6 R5);
215
175
  * 服务只接收发起人账号 id。不可见的 agent 一律 `agent.not_found`。
216
176
  */
217
- export class AgentsService {
177
+ let AgentsService = class AgentsService {
218
178
  db;
219
- registry;
179
+ lookup;
220
180
  tools;
221
181
  skillChanges;
222
- sandboxes;
182
+ orgLock;
183
+ providers;
184
+ sandboxJobs;
223
185
  log;
224
- constructor(db, registry, tools,
186
+ txHost;
187
+ evalBudget;
188
+ constructor(db, lookup, tools,
225
189
  /** 删除 agent 时取消它待处理的技能改动(T15)。 */
226
190
  skillChanges,
191
+ /** The org row lock (orgs/org-lock.ts): joins the caller's transaction. */
192
+ orgLock,
193
+ /** Resolves the agent's models (and their parameter declarations) when it is saved. */
194
+ providers,
227
195
  /**
228
- * 删除 agent 后销毁它各对话的沙箱(内核投递一次性维护任务 `sandbox-destroy-for`,worker 在锁内逐个销毁,
229
- * 幂等)。不给时留给不活跃销毁扫描。
196
+ * The sandbox destruction after a delete (内核投递一次性维护任务 `sandbox-destroy-for`,worker
197
+ * 在锁内逐个销毁,幂等).
230
198
  */
231
- sandboxes, log) {
199
+ sandboxJobs, log, txHost,
200
+ /** Cancels the deleted agent's running eval runs (in the delete's transaction). */
201
+ evalBudget) {
232
202
  this.db = db;
233
- this.registry = registry;
203
+ this.lookup = lookup;
234
204
  this.tools = tools;
235
205
  this.skillChanges = skillChanges;
236
- this.sandboxes = sandboxes;
206
+ this.orgLock = orgLock;
207
+ this.providers = providers;
208
+ this.sandboxJobs = sandboxJobs;
237
209
  this.log = log;
210
+ this.txHost = txHost;
211
+ this.evalBudget = evalBudget;
238
212
  }
239
213
  /**
240
214
  * 校验工具引用与工具策略:引用的内置 / 插件 / 连接器工具必须存在(见 `ToolRegistry.checkRefs`);
@@ -262,8 +236,9 @@ export class AgentsService {
262
236
  * (没有兜底时 `fallbackParams` 必须为空);不合法 → `validation_failed`,details 逐键点名。返回提示。
263
237
  */
264
238
  async checkModels(def) {
265
- const main = await this.registry.resolve(def.model);
266
- const fallback = def.fallback === null ? null : await this.registry.resolve(def.fallback);
239
+ const registry = this.providers;
240
+ const main = await registry.resolve(def.model);
241
+ const fallback = def.fallback === null ? null : await registry.resolve(def.fallback);
267
242
  const details = [
268
243
  ...paramIssues("modelParams", main.info.parameters, def.modelParams),
269
244
  ...paramIssues("fallbackParams", fallback?.info.parameters ?? [], def.fallbackParams),
@@ -300,64 +275,6 @@ export class AgentsService {
300
275
  .execute();
301
276
  }
302
277
  }
303
- async view(db, agentId) {
304
- const views = await this.views(db, [agentId]);
305
- const v = views[0];
306
- if (!v)
307
- throw notFound();
308
- return v;
309
- }
310
- /** 按给定 id 顺序组装视图(调用方已完成可见性判定)。 */
311
- async views(db, ids) {
312
- if (ids.length === 0)
313
- return [];
314
- const rows = await db
315
- .selectFrom("agents")
316
- .innerJoin("agent_versions", (j) => j
317
- .onRef("agent_versions.agent_id", "=", "agents.id")
318
- .onRef("agent_versions.version", "=", "agents.current_version"))
319
- .select([
320
- "agents.id",
321
- "agents.org_id",
322
- "agents.owner_account_id",
323
- "agents.visibility",
324
- "agents.current_version",
325
- "agents.needs_reassignment",
326
- "agents.created_at",
327
- "agents.updated_at",
328
- "agent_versions.definition",
329
- ])
330
- .where("agents.id", "in", ids)
331
- .execute();
332
- const memberRows = await db
333
- .selectFrom("agent_members")
334
- .select(["agent_id", "account_id"])
335
- .where("agent_id", "in", ids)
336
- .orderBy("account_id")
337
- .execute();
338
- const byId = new Map(rows.map((r) => [r.id, r]));
339
- return ids.flatMap((id) => {
340
- const r = byId.get(id);
341
- if (!r)
342
- return [];
343
- return [
344
- {
345
- id: r.id,
346
- orgId: r.org_id,
347
- ownerAccountId: r.owner_account_id,
348
- visibility: r.visibility,
349
- currentVersion: r.current_version,
350
- definition: normalizeStoredDefinition(r.definition),
351
- memberIds: r.visibility === "members"
352
- ? memberRows.filter((m) => m.agent_id === id).map((m) => m.account_id)
353
- : null,
354
- needsReassignment: r.needs_reassignment,
355
- createdAt: r.created_at,
356
- updatedAt: r.updated_at,
357
- },
358
- ];
359
- });
360
- }
361
278
  /**
362
279
  * 新建 agent(版本 1):在组织行锁内授权 `agents.create`;主模型与兜底都必须可解析
363
280
  * (`agent.model_unavailable`);兜底与主模型同一供应商只提示 `fallback_same_provider`。
@@ -369,59 +286,62 @@ export class AgentsService {
369
286
  if (input.visibility !== "members" && (input.memberIds?.length ?? 0) > 0) {
370
287
  throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
371
288
  }
372
- const agent = await this.db.transaction().execute(async (t) => {
373
- await lockOrgAndAuthorize(t, orgId, actorAccountId, "agents.create");
374
- await assertOrgSkills(t, orgId, input.definition.skills?.orgSkills ?? []);
375
- await assertPinnedSkills(t, orgId, null, input.definition.skills);
376
- await assertSubagents(t, {
377
- orgId,
378
- agentId: null,
379
- actorAccountId,
380
- definition: input.definition,
381
- toolKeys,
382
- });
383
- const memberIds = input.visibility === "members"
384
- ? await this.checkMembers(t, orgId, input.memberIds ?? [])
385
- : [];
386
- const id = randomUUID();
387
- await t
388
- .insertInto("agents")
389
- .values({
390
- id,
391
- org_id: orgId,
392
- owner_account_id: actorAccountId,
393
- visibility: input.visibility,
394
- current_version: 1,
395
- })
396
- .execute();
397
- await t
398
- .insertInto("agent_versions")
399
- .values({
400
- agent_id: id,
401
- version: 1,
402
- definition: JSON.stringify(input.definition),
403
- created_by: actorAccountId,
404
- })
405
- .execute();
406
- await this.setMembers(t, id, memberIds);
407
- await audit(t, {
408
- actorAccountId,
409
- ...(actorTokenId !== undefined && { actorTokenId }),
410
- orgId,
411
- action: "agent.created",
412
- target: id,
413
- detail: { version: 1, visibility: input.visibility },
414
- });
415
- return this.view(t, id);
416
- });
289
+ const agent = await this.createIn(orgId, actorAccountId, input, toolKeys, actorTokenId);
417
290
  return { agent, warnings };
418
291
  }
292
+ async createIn(orgId, actorAccountId, input, toolKeys, actorTokenId) {
293
+ const t = this.db.db;
294
+ await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
295
+ await assertOrgSkills(t, orgId, input.definition.skills?.orgSkills ?? []);
296
+ await assertPinnedSkills(t, orgId, null, input.definition.skills);
297
+ await assertSubagents(t, {
298
+ orgId,
299
+ agentId: null,
300
+ actorAccountId,
301
+ definition: input.definition,
302
+ toolKeys,
303
+ });
304
+ const memberIds = input.visibility === "members"
305
+ ? await this.checkMembers(t, orgId, input.memberIds ?? [])
306
+ : [];
307
+ const id = randomUUID();
308
+ await t
309
+ .insertInto("agents")
310
+ .values({
311
+ id,
312
+ org_id: orgId,
313
+ owner_account_id: actorAccountId,
314
+ visibility: input.visibility,
315
+ current_version: 1,
316
+ })
317
+ .execute();
318
+ await t
319
+ .insertInto("agent_versions")
320
+ .values({
321
+ agent_id: id,
322
+ version: 1,
323
+ definition: JSON.stringify(input.definition),
324
+ created_by: actorAccountId,
325
+ })
326
+ .execute();
327
+ await this.setMembers(t, id, memberIds);
328
+ await audit(t, {
329
+ actorAccountId,
330
+ ...(actorTokenId !== undefined && { actorTokenId }),
331
+ orgId,
332
+ action: "agent.created",
333
+ target: id,
334
+ detail: { version: 1, visibility: input.visibility },
335
+ });
336
+ return this.lookup.view(id);
337
+ }
419
338
  /**
420
339
  * 锁组织行并复核发起人,再锁 agent 行:发起人须仍具备 `agents.create`(member 以上),且是负责人或组织管理员以上;
421
340
  * 对发起人不可见的 agent(非管理员)→ `agent.not_found`,可见但无权 → `forbidden`。
422
341
  */
423
- async lockForWrite(t, orgId, agentId, actorAccountId) {
424
- const { role } = await lockOrgAndAuthorize(t, orgId, actorAccountId, "agents.create");
342
+ async lockForWrite(orgId, agentId, actorAccountId) {
343
+ const t = this.db.db;
344
+ const { role } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
425
345
  // NO KEY UPDATE: a soft delete then appends revert snapshots to conversations; FOR UPDATE would
426
346
  // block the agent foreign key check of an append already holding one of them (40P01)
427
347
  const agent = await t
@@ -453,104 +373,107 @@ export class AgentsService {
453
373
  async update(orgId, agentId, actorAccountId, patch, actorTokenId) {
454
374
  const warnings = patch.definition ? await this.checkModels(patch.definition) : [];
455
375
  const toolKeys = patch.definition ? await this.checkTools(orgId, patch.definition) : null;
456
- const agent = await this.db.transaction().execute(async (t) => {
457
- const before = await this.lockForWrite(t, orgId, agentId, actorAccountId);
458
- if (patch.expectedVersion !== undefined && patch.expectedVersion !== before.current_version) {
459
- throw new ApiError("agent.version_conflict", `The agent was changed by someone else (now version ${before.current_version}, expected ${patch.expectedVersion}); reload it and apply your changes again`);
460
- }
461
- const visibility = patch.visibility ?? before.visibility;
462
- if (visibility !== "members" && (patch.memberIds?.length ?? 0) > 0) {
463
- throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
464
- }
465
- let toVersion = before.current_version;
466
- if (patch.definition) {
467
- const current = await t
468
- .selectFrom("agent_versions")
469
- .select("definition")
470
- .where("agent_id", "=", agentId)
471
- .where("version", "=", before.current_version)
472
- .executeTakeFirstOrThrow();
473
- // 当前版本已有的技能引用保存时合法,不再核对(被删的技能不挡住其他改动);新加的照常核对
474
- const kept = new Set(current.definition.skills?.orgSkills ?? []);
475
- await assertOrgSkills(t, orgId, patch.definition.skills?.orgSkills ?? [], kept);
476
- await assertPinnedSkills(t, orgId, agentId, patch.definition.skills, current.definition.skills?.pinned ?? []);
477
- await assertSubagents(t, {
478
- orgId,
479
- agentId,
480
- actorAccountId,
481
- definition: patch.definition,
482
- toolKeys: toolKeys ?? new Set(),
483
- kept: current.definition.subagents,
484
- });
485
- if (canonical(current.definition) !== canonical(patch.definition)) {
486
- toVersion = before.current_version + 1;
487
- await t
488
- .insertInto("agent_versions")
489
- .values({
490
- agent_id: agentId,
491
- version: toVersion,
492
- definition: JSON.stringify(patch.definition),
493
- created_by: actorAccountId,
494
- })
495
- .execute();
496
- }
497
- }
498
- if (visibility !== "members") {
499
- await this.setMembers(t, agentId, []);
500
- }
501
- else if (patch.memberIds !== undefined) {
502
- await this.setMembers(t, agentId, await this.checkMembers(t, orgId, patch.memberIds));
503
- }
504
- await t
505
- .updateTable("agents")
506
- .set({ visibility, current_version: toVersion, updated_at: sql `now()` })
507
- .where("id", "=", agentId)
508
- .execute();
509
- await audit(t, {
510
- actorAccountId,
511
- ...(actorTokenId !== undefined && { actorTokenId }),
376
+ const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId);
377
+ return { agent, warnings };
378
+ }
379
+ async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId) {
380
+ const t = this.db.db;
381
+ const before = await this.lockForWrite(orgId, agentId, actorAccountId);
382
+ if (patch.expectedVersion !== undefined && patch.expectedVersion !== before.current_version) {
383
+ throw new ApiError("agent.version_conflict", `The agent was changed by someone else (now version ${before.current_version}, expected ${patch.expectedVersion}); reload it and apply your changes again`);
384
+ }
385
+ const visibility = patch.visibility ?? before.visibility;
386
+ if (visibility !== "members" && (patch.memberIds?.length ?? 0) > 0) {
387
+ throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
388
+ }
389
+ let toVersion = before.current_version;
390
+ if (patch.definition) {
391
+ const current = await t
392
+ .selectFrom("agent_versions")
393
+ .select("definition")
394
+ .where("agent_id", "=", agentId)
395
+ .where("version", "=", before.current_version)
396
+ .executeTakeFirstOrThrow();
397
+ // 当前版本已有的技能引用保存时合法,不再核对(被删的技能不挡住其他改动);新加的照常核对
398
+ const kept = new Set(current.definition.skills?.orgSkills ?? []);
399
+ await assertOrgSkills(t, orgId, patch.definition.skills?.orgSkills ?? [], kept);
400
+ await assertPinnedSkills(t, orgId, agentId, patch.definition.skills, current.definition.skills?.pinned ?? []);
401
+ await assertSubagents(t, {
512
402
  orgId,
513
- action: "agent.updated",
514
- target: agentId,
515
- detail: {
516
- fromVersion: before.current_version,
517
- toVersion,
518
- ...(visibility !== before.visibility && {
519
- visibility: { from: before.visibility, to: visibility },
520
- }),
521
- },
403
+ agentId,
404
+ actorAccountId,
405
+ definition: patch.definition,
406
+ toolKeys: toolKeys ?? new Set(),
407
+ kept: current.definition.subagents,
522
408
  });
523
- return this.view(t, agentId);
409
+ if (canonical(current.definition) !== canonical(patch.definition)) {
410
+ toVersion = before.current_version + 1;
411
+ await t
412
+ .insertInto("agent_versions")
413
+ .values({
414
+ agent_id: agentId,
415
+ version: toVersion,
416
+ definition: JSON.stringify(patch.definition),
417
+ created_by: actorAccountId,
418
+ })
419
+ .execute();
420
+ }
421
+ }
422
+ if (visibility !== "members") {
423
+ await this.setMembers(t, agentId, []);
424
+ }
425
+ else if (patch.memberIds !== undefined) {
426
+ await this.setMembers(t, agentId, await this.checkMembers(t, orgId, patch.memberIds));
427
+ }
428
+ await t
429
+ .updateTable("agents")
430
+ .set({ visibility, current_version: toVersion, updated_at: sql `now()` })
431
+ .where("id", "=", agentId)
432
+ .execute();
433
+ await audit(t, {
434
+ actorAccountId,
435
+ ...(actorTokenId !== undefined && { actorTokenId }),
436
+ orgId,
437
+ action: "agent.updated",
438
+ target: agentId,
439
+ detail: {
440
+ fromVersion: before.current_version,
441
+ toVersion,
442
+ ...(visibility !== before.visibility && {
443
+ visibility: { from: before.visibility, to: visibility },
444
+ }),
445
+ },
524
446
  });
525
- return { agent, warnings };
447
+ return this.lookup.view(agentId);
526
448
  }
527
449
  /** 软删除:权限同 update。待处理的技能改动与该 agent 评测集在执行的评测运行一并取消,提交后删除草稿(T15)。 */
528
450
  async softDelete(orgId, agentId, actorAccountId, actorTokenId) {
529
- const cancelled = await this.db.transaction().execute(async (t) => {
530
- await this.lockForWrite(t, orgId, agentId, actorAccountId);
531
- await t
532
- .updateTable("agents")
533
- .set({ deleted_at: sql `now()`, updated_at: sql `now()` })
534
- .where("id", "=", agentId)
535
- .execute();
536
- await audit(t, {
537
- actorAccountId,
538
- ...(actorTokenId !== undefined && { actorTokenId }),
539
- orgId,
540
- action: "agent.deleted",
541
- target: agentId,
542
- });
543
- // 评测集的 agent 删除后其评测运行不再花钱:显式取消(审计带原因)
544
- await cancelEvalRuns(t, { orgId, agentId }, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "agent_deleted");
545
- return this.skillChanges.cancelPendingForAgent(t, orgId, agentId, actorAccountId, "agent_deleted", actorTokenId);
546
- });
451
+ const cancelled = await this.softDeleteIn(orgId, agentId, actorAccountId, actorTokenId);
547
452
  await this.skillChanges.finishCancel(orgId, cancelled);
548
453
  await this.destroySandboxes(orgId, agentId);
549
454
  }
455
+ async softDeleteIn(orgId, agentId, actorAccountId, actorTokenId) {
456
+ const t = this.db.db;
457
+ await this.lockForWrite(orgId, agentId, actorAccountId);
458
+ await t
459
+ .updateTable("agents")
460
+ .set({ deleted_at: sql `now()`, updated_at: sql `now()` })
461
+ .where("id", "=", agentId)
462
+ .execute();
463
+ await audit(t, {
464
+ actorAccountId,
465
+ ...(actorTokenId !== undefined && { actorTokenId }),
466
+ orgId,
467
+ action: "agent.deleted",
468
+ target: agentId,
469
+ });
470
+ // 评测集的 agent 删除后其评测运行不再花钱:显式取消(审计带原因)
471
+ await this.evalBudget.cancelRuns({ orgId, agentId }, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "agent_deleted");
472
+ // joins this transaction (mandatory: it relies on the agent row lock taken above)
473
+ return this.skillChanges.cancelPendingForAgent(orgId, agentId, actorAccountId, "agent_deleted", actorTokenId);
474
+ }
550
475
  /** 提交后尽力而为:投递销毁这个 agent 各对话还没销毁的沙箱(失败只记日志,留给不活跃销毁扫描)。 */
551
476
  async destroySandboxes(orgId, agentId) {
552
- if (!this.sandboxes)
553
- return;
554
477
  try {
555
478
  const rows = await this.db
556
479
  .selectFrom("sandboxes as s")
@@ -562,11 +485,11 @@ export class AgentsService {
562
485
  .execute();
563
486
  const ids = rows.map((r) => r.conversation_id);
564
487
  for (let i = 0; i < ids.length; i += SANDBOX_DESTROY_BATCH) {
565
- await this.sandboxes.destroy(ids.slice(i, i + SANDBOX_DESTROY_BATCH));
488
+ await this.sandboxJobs.destroy(ids.slice(i, i + SANDBOX_DESTROY_BATCH));
566
489
  }
567
490
  }
568
491
  catch (err) {
569
- this.log?.warn("cannot schedule sandbox destruction for a deleted agent", { agentId, err });
492
+ this.log.warn("cannot schedule sandbox destruction for a deleted agent", { agentId, err });
570
493
  }
571
494
  }
572
495
  /**
@@ -575,73 +498,53 @@ export class AgentsService {
575
498
  * 清除 `needs_reassignment`,审计 `agent.owner_changed`。
576
499
  */
577
500
  async reassignOwner(orgId, agentId, newOwnerId, actorAccountId, actorTokenId) {
578
- return this.db.transaction().execute(async (t) => {
579
- await lockOrgAndAuthorize(t, orgId, actorAccountId, "agents.manage");
580
- const agent = await t
581
- .selectFrom("agents")
582
- .select(["owner_account_id", "needs_reassignment"])
583
- .where("id", "=", agentId)
584
- .where("org_id", "=", orgId)
585
- .where("deleted_at", "is", null)
586
- .forUpdate()
587
- .executeTakeFirst();
588
- if (!agent)
589
- throw notFound();
590
- const member = await t
591
- .selectFrom("memberships")
592
- .select("role")
593
- .where("org_id", "=", orgId)
594
- .where("account_id", "=", newOwnerId)
595
- .executeTakeFirst();
596
- if (!member)
597
- throw new ApiError("member.not_found", "Member not found");
598
- await rejectAnonymousGuest(t, newOwnerId);
599
- await t
600
- .updateTable("agents")
601
- .set({ owner_account_id: newOwnerId, needs_reassignment: false, updated_at: sql `now()` })
602
- .where("id", "=", agentId)
603
- .execute();
604
- await audit(t, {
605
- actorAccountId,
606
- ...(actorTokenId !== undefined && { actorTokenId }),
607
- orgId,
608
- action: "agent.owner_changed",
609
- target: agentId,
610
- detail: {
611
- from: agent.owner_account_id,
612
- to: newOwnerId,
613
- neededReassignment: agent.needs_reassignment,
614
- },
615
- });
616
- return this.view(t, agentId);
617
- });
618
- }
619
- /** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
620
- async get(orgId, agentId, viewerAccountId) {
621
- const row = await this.db
501
+ const t = this.db.db;
502
+ await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.manage");
503
+ const agent = await t
622
504
  .selectFrom("agents")
623
- .select("id")
505
+ .select(["owner_account_id", "needs_reassignment"])
624
506
  .where("id", "=", agentId)
625
507
  .where("org_id", "=", orgId)
626
508
  .where("deleted_at", "is", null)
627
- .where(visibleTo(viewerAccountId))
509
+ .forUpdate()
628
510
  .executeTakeFirst();
629
- if (!row)
511
+ if (!agent)
630
512
  throw notFound();
631
- return this.view(this.db, agentId);
632
- }
633
- /** 组织内对 viewer 可见的全部 agent(按创建时间)。 */
634
- async listVisible(orgId, viewerAccountId) {
635
- const rows = await this.db
636
- .selectFrom("agents")
637
- .select("id")
513
+ const member = await t
514
+ .selectFrom("memberships")
515
+ .select("role")
638
516
  .where("org_id", "=", orgId)
639
- .where("deleted_at", "is", null)
640
- .where(visibleTo(viewerAccountId))
641
- .orderBy("created_at")
642
- .orderBy("id")
517
+ .where("account_id", "=", newOwnerId)
518
+ .executeTakeFirst();
519
+ if (!member)
520
+ throw new ApiError("member.not_found", "Member not found");
521
+ await rejectAnonymousGuest(t, newOwnerId);
522
+ await t
523
+ .updateTable("agents")
524
+ .set({ owner_account_id: newOwnerId, needs_reassignment: false, updated_at: sql `now()` })
525
+ .where("id", "=", agentId)
643
526
  .execute();
644
- return this.views(this.db, rows.map((r) => r.id));
527
+ await audit(t, {
528
+ actorAccountId,
529
+ ...(actorTokenId !== undefined && { actorTokenId }),
530
+ orgId,
531
+ action: "agent.owner_changed",
532
+ target: agentId,
533
+ detail: {
534
+ from: agent.owner_account_id,
535
+ to: newOwnerId,
536
+ neededReassignment: agent.needs_reassignment,
537
+ },
538
+ });
539
+ return this.lookup.view(agentId);
540
+ }
541
+ /** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
542
+ get(orgId, agentId, viewerAccountId) {
543
+ return this.lookup.get(orgId, agentId, viewerAccountId);
544
+ }
545
+ /** 组织内对 viewer 可见的全部 agent(按创建时间)。 */
546
+ listVisible(orgId, viewerAccountId) {
547
+ return this.lookup.listVisible(orgId, viewerAccountId);
645
548
  }
646
549
  /** 读某个版本(不做可见性判定,调用方负责);不存在 → `agent.not_found`。 */
647
550
  async getVersion(agentId, version) {
@@ -674,4 +577,33 @@ export class AgentsService {
674
577
  createdAt: r.created_at,
675
578
  }));
676
579
  }
677
- }
580
+ };
581
+ __decorate([
582
+ Transactional()
583
+ ], AgentsService.prototype, "createIn", null);
584
+ __decorate([
585
+ Transactional({ propagation: "mandatory" })
586
+ ], AgentsService.prototype, "lockForWrite", null);
587
+ __decorate([
588
+ Transactional()
589
+ ], AgentsService.prototype, "updateIn", null);
590
+ __decorate([
591
+ Transactional()
592
+ ], AgentsService.prototype, "softDeleteIn", null);
593
+ __decorate([
594
+ Transactional()
595
+ ], AgentsService.prototype, "reassignOwner", null);
596
+ AgentsService = __decorate([
597
+ Injectable(),
598
+ __param(0, Inject(KernelDb)),
599
+ __param(1, Inject(AgentLookup)),
600
+ __param(2, Inject(ToolRegistry)),
601
+ __param(3, Inject(SkillChangesService)),
602
+ __param(4, Inject(OrgLock)),
603
+ __param(5, Inject(ProviderRegistry)),
604
+ __param(6, Inject(SandboxJobs)),
605
+ __param(7, Inject(KERNEL_LOGGER)),
606
+ __param(8, Inject(TransactionHost)),
607
+ __param(9, Inject(EvalBudget))
608
+ ], AgentsService);
609
+ export { AgentsService };