@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,23 +1,38 @@
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 { legacyKeySaveText } from "../tools/legacy-keys.js";
28
+ import { ToolRegistry } from "../tools/registry.js";
29
+ import { AgentLookup, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
30
+ import { normalizeStoredDefinition, paramIssues, SUBAGENT_NAME_RE, SUBAGENT_ROSTER_MAX, } from "./definition.js";
31
+ export { AGENT_VISIBILITIES, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
32
+ export { paramIssues, SUBAGENT_ROSTER_MAX } from "./definition.js";
13
33
  /** 删除 agent 时每个销毁任务带的对话数。 */
14
34
  const SANDBOX_DESTROY_BATCH = 500;
15
35
  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
36
  /** 键排序后的 JSON:jsonb 不保留键顺序,比较定义是否变化时用。 */
22
37
  function canonical(v) {
23
38
  if (Array.isArray(v))
@@ -30,60 +45,6 @@ function canonical(v) {
30
45
  }
31
46
  return JSON.stringify(v);
32
47
  }
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
48
  /**
88
49
  * Checks `subagents` of an agent definition in the caller's transaction (spec §5.2); throws 400
89
50
  * `agent.subagents_invalid` with one detail per problem (`{ reason, path, value? }`):
@@ -107,8 +68,13 @@ export async function assertSubagents(t, a) {
107
68
  if (sub === undefined)
108
69
  return;
109
70
  const details = [];
110
- const add = (reason, path, value) => {
111
- details.push({ reason, path, ...(value !== undefined && { value }) });
71
+ const add = (reason, path, value, message) => {
72
+ details.push({
73
+ reason,
74
+ path,
75
+ ...(value !== undefined && { value }),
76
+ ...(message !== undefined && { message }),
77
+ });
112
78
  };
113
79
  const types = new Set(sub.general === false ? [] : ["general-purpose"]);
114
80
  const claim = (type, path) => {
@@ -163,8 +129,11 @@ export async function assertSubagents(t, a) {
163
129
  const base = `subagents.inline.${i}`;
164
130
  name(x.name, `${base}.name`);
165
131
  const tool = (key, path) => {
166
- if (!a.toolKeys.has(key))
167
- add("tool_not_selected", path, key);
132
+ if (a.toolKeys.has(key))
133
+ return;
134
+ // an rc key names its current key(s) (tool naming spec §8.3)
135
+ const renamed = legacyKeySaveText(key, a.toolKeys);
136
+ add("tool_not_selected", path, key, renamed ?? undefined);
168
137
  };
169
138
  for (const [j, key] of (x.tools ?? []).entries())
170
139
  tool(key, `${base}.tools.${j}`);
@@ -207,34 +176,50 @@ export async function assertSubagents(t, a) {
207
176
  if (count > SUBAGENT_ROSTER_MAX)
208
177
  add("too_many", "subagents");
209
178
  if (details.length > 0) {
210
- throw new ApiError("agent.subagents_invalid", `Invalid sub-agents: ${details.map((d) => `${d.path} (${d.reason})`).join(", ")}`, details);
179
+ throw new ApiError("agent.subagents_invalid", `Invalid sub-agents: ${details
180
+ .map((d) => `${d.path} (${d.reason}${d.message === undefined ? "" : `: ${d.message}`})`)
181
+ .join(", ")}`, details);
211
182
  }
212
183
  }
213
184
  /**
214
185
  * Agent 定义、版本与可见范围。写操作都在组织行锁内实时复核发起人角色(spec 3.6 R5);
215
186
  * 服务只接收发起人账号 id。不可见的 agent 一律 `agent.not_found`。
216
187
  */
217
- export class AgentsService {
188
+ let AgentsService = class AgentsService {
218
189
  db;
219
- registry;
190
+ lookup;
220
191
  tools;
221
192
  skillChanges;
222
- sandboxes;
193
+ orgLock;
194
+ providers;
195
+ sandboxJobs;
223
196
  log;
224
- constructor(db, registry, tools,
197
+ txHost;
198
+ evalBudget;
199
+ constructor(db, lookup, tools,
225
200
  /** 删除 agent 时取消它待处理的技能改动(T15)。 */
226
201
  skillChanges,
202
+ /** The org row lock (orgs/org-lock.ts): joins the caller's transaction. */
203
+ orgLock,
204
+ /** Resolves the agent's models (and their parameter declarations) when it is saved. */
205
+ providers,
227
206
  /**
228
- * 删除 agent 后销毁它各对话的沙箱(内核投递一次性维护任务 `sandbox-destroy-for`,worker 在锁内逐个销毁,
229
- * 幂等)。不给时留给不活跃销毁扫描。
207
+ * The sandbox destruction after a delete (内核投递一次性维护任务 `sandbox-destroy-for`,worker
208
+ * 在锁内逐个销毁,幂等).
230
209
  */
231
- sandboxes, log) {
210
+ sandboxJobs, log, txHost,
211
+ /** Cancels the deleted agent's running eval runs (in the delete's transaction). */
212
+ evalBudget) {
232
213
  this.db = db;
233
- this.registry = registry;
214
+ this.lookup = lookup;
234
215
  this.tools = tools;
235
216
  this.skillChanges = skillChanges;
236
- this.sandboxes = sandboxes;
217
+ this.orgLock = orgLock;
218
+ this.providers = providers;
219
+ this.sandboxJobs = sandboxJobs;
237
220
  this.log = log;
221
+ this.txHost = txHost;
222
+ this.evalBudget = evalBudget;
238
223
  }
239
224
  /**
240
225
  * 校验工具引用与工具策略:引用的内置 / 插件 / 连接器工具必须存在(见 `ToolRegistry.checkRefs`);
@@ -246,9 +231,11 @@ export class AgentsService {
246
231
  const details = [...issues];
247
232
  for (const key of Object.keys(def.toolPolicies)) {
248
233
  if (!keys.has(key)) {
234
+ // an rc key (tool naming spec §8.3): saving writes current keys only, so name them
235
+ const renamed = legacyKeySaveText(key, keys);
249
236
  details.push({
250
237
  path: `toolPolicies.${key}`,
251
- message: `"${key}" is not a tool of this agent`,
238
+ message: renamed ?? `"${key}" is not a tool of this agent`,
252
239
  });
253
240
  }
254
241
  }
@@ -262,8 +249,9 @@ export class AgentsService {
262
249
  * (没有兜底时 `fallbackParams` 必须为空);不合法 → `validation_failed`,details 逐键点名。返回提示。
263
250
  */
264
251
  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);
252
+ const registry = this.providers;
253
+ const main = await registry.resolve(def.model);
254
+ const fallback = def.fallback === null ? null : await registry.resolve(def.fallback);
267
255
  const details = [
268
256
  ...paramIssues("modelParams", main.info.parameters, def.modelParams),
269
257
  ...paramIssues("fallbackParams", fallback?.info.parameters ?? [], def.fallbackParams),
@@ -300,64 +288,6 @@ export class AgentsService {
300
288
  .execute();
301
289
  }
302
290
  }
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
291
  /**
362
292
  * 新建 agent(版本 1):在组织行锁内授权 `agents.create`;主模型与兜底都必须可解析
363
293
  * (`agent.model_unavailable`);兜底与主模型同一供应商只提示 `fallback_same_provider`。
@@ -369,59 +299,62 @@ export class AgentsService {
369
299
  if (input.visibility !== "members" && (input.memberIds?.length ?? 0) > 0) {
370
300
  throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
371
301
  }
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
- });
302
+ const agent = await this.createIn(orgId, actorAccountId, input, toolKeys, actorTokenId);
417
303
  return { agent, warnings };
418
304
  }
305
+ async createIn(orgId, actorAccountId, input, toolKeys, actorTokenId) {
306
+ const t = this.db.db;
307
+ await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
308
+ await assertOrgSkills(t, orgId, input.definition.skills?.orgSkills ?? []);
309
+ await assertPinnedSkills(t, orgId, null, input.definition.skills);
310
+ await assertSubagents(t, {
311
+ orgId,
312
+ agentId: null,
313
+ actorAccountId,
314
+ definition: input.definition,
315
+ toolKeys,
316
+ });
317
+ const memberIds = input.visibility === "members"
318
+ ? await this.checkMembers(t, orgId, input.memberIds ?? [])
319
+ : [];
320
+ const id = randomUUID();
321
+ await t
322
+ .insertInto("agents")
323
+ .values({
324
+ id,
325
+ org_id: orgId,
326
+ owner_account_id: actorAccountId,
327
+ visibility: input.visibility,
328
+ current_version: 1,
329
+ })
330
+ .execute();
331
+ await t
332
+ .insertInto("agent_versions")
333
+ .values({
334
+ agent_id: id,
335
+ version: 1,
336
+ definition: JSON.stringify(input.definition),
337
+ created_by: actorAccountId,
338
+ })
339
+ .execute();
340
+ await this.setMembers(t, id, memberIds);
341
+ await audit(t, {
342
+ actorAccountId,
343
+ ...(actorTokenId !== undefined && { actorTokenId }),
344
+ orgId,
345
+ action: "agent.created",
346
+ target: id,
347
+ detail: { version: 1, visibility: input.visibility },
348
+ });
349
+ return this.lookup.view(id);
350
+ }
419
351
  /**
420
352
  * 锁组织行并复核发起人,再锁 agent 行:发起人须仍具备 `agents.create`(member 以上),且是负责人或组织管理员以上;
421
353
  * 对发起人不可见的 agent(非管理员)→ `agent.not_found`,可见但无权 → `forbidden`。
422
354
  */
423
- async lockForWrite(t, orgId, agentId, actorAccountId) {
424
- const { role } = await lockOrgAndAuthorize(t, orgId, actorAccountId, "agents.create");
355
+ async lockForWrite(orgId, agentId, actorAccountId) {
356
+ const t = this.db.db;
357
+ const { role } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
425
358
  // NO KEY UPDATE: a soft delete then appends revert snapshots to conversations; FOR UPDATE would
426
359
  // block the agent foreign key check of an append already holding one of them (40P01)
427
360
  const agent = await t
@@ -453,104 +386,107 @@ export class AgentsService {
453
386
  async update(orgId, agentId, actorAccountId, patch, actorTokenId) {
454
387
  const warnings = patch.definition ? await this.checkModels(patch.definition) : [];
455
388
  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 }),
389
+ const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId);
390
+ return { agent, warnings };
391
+ }
392
+ async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId) {
393
+ const t = this.db.db;
394
+ const before = await this.lockForWrite(orgId, agentId, actorAccountId);
395
+ if (patch.expectedVersion !== undefined && patch.expectedVersion !== before.current_version) {
396
+ 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`);
397
+ }
398
+ const visibility = patch.visibility ?? before.visibility;
399
+ if (visibility !== "members" && (patch.memberIds?.length ?? 0) > 0) {
400
+ throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
401
+ }
402
+ let toVersion = before.current_version;
403
+ if (patch.definition) {
404
+ const current = await t
405
+ .selectFrom("agent_versions")
406
+ .select("definition")
407
+ .where("agent_id", "=", agentId)
408
+ .where("version", "=", before.current_version)
409
+ .executeTakeFirstOrThrow();
410
+ // 当前版本已有的技能引用保存时合法,不再核对(被删的技能不挡住其他改动);新加的照常核对
411
+ const kept = new Set(current.definition.skills?.orgSkills ?? []);
412
+ await assertOrgSkills(t, orgId, patch.definition.skills?.orgSkills ?? [], kept);
413
+ await assertPinnedSkills(t, orgId, agentId, patch.definition.skills, current.definition.skills?.pinned ?? []);
414
+ await assertSubagents(t, {
512
415
  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
- },
416
+ agentId,
417
+ actorAccountId,
418
+ definition: patch.definition,
419
+ toolKeys: toolKeys ?? new Set(),
420
+ kept: current.definition.subagents,
522
421
  });
523
- return this.view(t, agentId);
422
+ if (canonical(current.definition) !== canonical(patch.definition)) {
423
+ toVersion = before.current_version + 1;
424
+ await t
425
+ .insertInto("agent_versions")
426
+ .values({
427
+ agent_id: agentId,
428
+ version: toVersion,
429
+ definition: JSON.stringify(patch.definition),
430
+ created_by: actorAccountId,
431
+ })
432
+ .execute();
433
+ }
434
+ }
435
+ if (visibility !== "members") {
436
+ await this.setMembers(t, agentId, []);
437
+ }
438
+ else if (patch.memberIds !== undefined) {
439
+ await this.setMembers(t, agentId, await this.checkMembers(t, orgId, patch.memberIds));
440
+ }
441
+ await t
442
+ .updateTable("agents")
443
+ .set({ visibility, current_version: toVersion, updated_at: sql `now()` })
444
+ .where("id", "=", agentId)
445
+ .execute();
446
+ await audit(t, {
447
+ actorAccountId,
448
+ ...(actorTokenId !== undefined && { actorTokenId }),
449
+ orgId,
450
+ action: "agent.updated",
451
+ target: agentId,
452
+ detail: {
453
+ fromVersion: before.current_version,
454
+ toVersion,
455
+ ...(visibility !== before.visibility && {
456
+ visibility: { from: before.visibility, to: visibility },
457
+ }),
458
+ },
524
459
  });
525
- return { agent, warnings };
460
+ return this.lookup.view(agentId);
526
461
  }
527
462
  /** 软删除:权限同 update。待处理的技能改动与该 agent 评测集在执行的评测运行一并取消,提交后删除草稿(T15)。 */
528
463
  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
- });
464
+ const cancelled = await this.softDeleteIn(orgId, agentId, actorAccountId, actorTokenId);
547
465
  await this.skillChanges.finishCancel(orgId, cancelled);
548
466
  await this.destroySandboxes(orgId, agentId);
549
467
  }
468
+ async softDeleteIn(orgId, agentId, actorAccountId, actorTokenId) {
469
+ const t = this.db.db;
470
+ await this.lockForWrite(orgId, agentId, actorAccountId);
471
+ await t
472
+ .updateTable("agents")
473
+ .set({ deleted_at: sql `now()`, updated_at: sql `now()` })
474
+ .where("id", "=", agentId)
475
+ .execute();
476
+ await audit(t, {
477
+ actorAccountId,
478
+ ...(actorTokenId !== undefined && { actorTokenId }),
479
+ orgId,
480
+ action: "agent.deleted",
481
+ target: agentId,
482
+ });
483
+ // 评测集的 agent 删除后其评测运行不再花钱:显式取消(审计带原因)
484
+ await this.evalBudget.cancelRuns({ orgId, agentId }, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "agent_deleted");
485
+ // joins this transaction (mandatory: it relies on the agent row lock taken above)
486
+ return this.skillChanges.cancelPendingForAgent(orgId, agentId, actorAccountId, "agent_deleted", actorTokenId);
487
+ }
550
488
  /** 提交后尽力而为:投递销毁这个 agent 各对话还没销毁的沙箱(失败只记日志,留给不活跃销毁扫描)。 */
551
489
  async destroySandboxes(orgId, agentId) {
552
- if (!this.sandboxes)
553
- return;
554
490
  try {
555
491
  const rows = await this.db
556
492
  .selectFrom("sandboxes as s")
@@ -562,11 +498,11 @@ export class AgentsService {
562
498
  .execute();
563
499
  const ids = rows.map((r) => r.conversation_id);
564
500
  for (let i = 0; i < ids.length; i += SANDBOX_DESTROY_BATCH) {
565
- await this.sandboxes.destroy(ids.slice(i, i + SANDBOX_DESTROY_BATCH));
501
+ await this.sandboxJobs.destroy(ids.slice(i, i + SANDBOX_DESTROY_BATCH));
566
502
  }
567
503
  }
568
504
  catch (err) {
569
- this.log?.warn("cannot schedule sandbox destruction for a deleted agent", { agentId, err });
505
+ this.log.warn("cannot schedule sandbox destruction for a deleted agent", { agentId, err });
570
506
  }
571
507
  }
572
508
  /**
@@ -575,73 +511,53 @@ export class AgentsService {
575
511
  * 清除 `needs_reassignment`,审计 `agent.owner_changed`。
576
512
  */
577
513
  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
514
+ const t = this.db.db;
515
+ await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.manage");
516
+ const agent = await t
622
517
  .selectFrom("agents")
623
- .select("id")
518
+ .select(["owner_account_id", "needs_reassignment"])
624
519
  .where("id", "=", agentId)
625
520
  .where("org_id", "=", orgId)
626
521
  .where("deleted_at", "is", null)
627
- .where(visibleTo(viewerAccountId))
522
+ .forUpdate()
628
523
  .executeTakeFirst();
629
- if (!row)
524
+ if (!agent)
630
525
  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")
526
+ const member = await t
527
+ .selectFrom("memberships")
528
+ .select("role")
638
529
  .where("org_id", "=", orgId)
639
- .where("deleted_at", "is", null)
640
- .where(visibleTo(viewerAccountId))
641
- .orderBy("created_at")
642
- .orderBy("id")
530
+ .where("account_id", "=", newOwnerId)
531
+ .executeTakeFirst();
532
+ if (!member)
533
+ throw new ApiError("member.not_found", "Member not found");
534
+ await rejectAnonymousGuest(t, newOwnerId);
535
+ await t
536
+ .updateTable("agents")
537
+ .set({ owner_account_id: newOwnerId, needs_reassignment: false, updated_at: sql `now()` })
538
+ .where("id", "=", agentId)
643
539
  .execute();
644
- return this.views(this.db, rows.map((r) => r.id));
540
+ await audit(t, {
541
+ actorAccountId,
542
+ ...(actorTokenId !== undefined && { actorTokenId }),
543
+ orgId,
544
+ action: "agent.owner_changed",
545
+ target: agentId,
546
+ detail: {
547
+ from: agent.owner_account_id,
548
+ to: newOwnerId,
549
+ neededReassignment: agent.needs_reassignment,
550
+ },
551
+ });
552
+ return this.lookup.view(agentId);
553
+ }
554
+ /** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
555
+ get(orgId, agentId, viewerAccountId) {
556
+ return this.lookup.get(orgId, agentId, viewerAccountId);
557
+ }
558
+ /** 组织内对 viewer 可见的全部 agent(按创建时间)。 */
559
+ listVisible(orgId, viewerAccountId) {
560
+ return this.lookup.listVisible(orgId, viewerAccountId);
645
561
  }
646
562
  /** 读某个版本(不做可见性判定,调用方负责);不存在 → `agent.not_found`。 */
647
563
  async getVersion(agentId, version) {
@@ -674,4 +590,33 @@ export class AgentsService {
674
590
  createdAt: r.created_at,
675
591
  }));
676
592
  }
677
- }
593
+ };
594
+ __decorate([
595
+ Transactional()
596
+ ], AgentsService.prototype, "createIn", null);
597
+ __decorate([
598
+ Transactional({ propagation: "mandatory" })
599
+ ], AgentsService.prototype, "lockForWrite", null);
600
+ __decorate([
601
+ Transactional()
602
+ ], AgentsService.prototype, "updateIn", null);
603
+ __decorate([
604
+ Transactional()
605
+ ], AgentsService.prototype, "softDeleteIn", null);
606
+ __decorate([
607
+ Transactional()
608
+ ], AgentsService.prototype, "reassignOwner", null);
609
+ AgentsService = __decorate([
610
+ Injectable(),
611
+ __param(0, Inject(KernelDb)),
612
+ __param(1, Inject(AgentLookup)),
613
+ __param(2, Inject(ToolRegistry)),
614
+ __param(3, Inject(SkillChangesService)),
615
+ __param(4, Inject(OrgLock)),
616
+ __param(5, Inject(ProviderRegistry)),
617
+ __param(6, Inject(SandboxJobs)),
618
+ __param(7, Inject(KERNEL_LOGGER)),
619
+ __param(8, Inject(TransactionHost)),
620
+ __param(9, Inject(EvalBudget))
621
+ ], AgentsService);
622
+ export { AgentsService };