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

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 (1039) hide show
  1. package/bootstrap.json +85 -5
  2. package/dist/admin/admin-agents.controller.d.ts +28 -0
  3. package/dist/admin/admin-agents.controller.js +79 -0
  4. package/dist/admin/admin-connectors.controller.d.ts +29 -0
  5. package/dist/admin/admin-connectors.controller.js +79 -0
  6. package/dist/admin/admin-items.schemas.d.ts +42 -0
  7. package/dist/admin/admin-items.schemas.js +48 -0
  8. package/dist/admin/admin.controller.d.ts +52 -80
  9. package/dist/admin/admin.controller.js +112 -81
  10. package/dist/admin/admin.module.d.ts +4 -1
  11. package/dist/admin/admin.module.js +50 -4
  12. package/dist/admin/admin.schemas.d.ts +69 -0
  13. package/dist/admin/admin.schemas.js +53 -0
  14. package/dist/admin/audit.controller.d.ts +14 -0
  15. package/dist/admin/audit.controller.js +42 -0
  16. package/dist/admin/audit.schemas.d.ts +8 -0
  17. package/dist/admin/audit.schemas.js +17 -0
  18. package/dist/admin/extensions.controller.d.ts +34 -3
  19. package/dist/admin/extensions.controller.js +66 -8
  20. package/dist/admin/extensions.schemas.d.ts +7 -0
  21. package/dist/admin/extensions.schemas.js +10 -0
  22. package/dist/admin/health.service.d.ts +104 -0
  23. package/dist/admin/health.service.js +246 -0
  24. package/dist/admin/limit-defaults.d.ts +20 -0
  25. package/dist/admin/limit-defaults.js +10 -0
  26. package/dist/admin/overview.controller.d.ts +31 -0
  27. package/dist/admin/overview.controller.js +78 -0
  28. package/dist/admin/overview.schemas.d.ts +8 -0
  29. package/dist/admin/overview.schemas.js +13 -0
  30. package/dist/admin/overview.service.d.ts +112 -0
  31. package/dist/admin/overview.service.js +223 -0
  32. package/dist/admin/platform-audit.service.d.ts +41 -0
  33. package/dist/admin/platform-audit.service.js +70 -0
  34. package/dist/admin/setup-lock.d.ts +1 -1
  35. package/dist/admin/setup-lock.js +1 -1
  36. package/dist/admin/setup.controller.d.ts +1 -1
  37. package/dist/admin/setup.controller.js +1 -1
  38. package/dist/admin/setup.service.d.ts +4 -4
  39. package/dist/admin/setup.service.js +8 -8
  40. package/dist/admin/usage.service.d.ts +149 -0
  41. package/dist/admin/usage.service.js +321 -0
  42. package/dist/agents/admin-agents.d.ts +92 -0
  43. package/dist/agents/admin-agents.js +170 -0
  44. package/dist/agents/agent-lookup.d.ts +24 -0
  45. package/dist/agents/agent-lookup.js +46 -2
  46. package/dist/agents/agent-profile.service.d.ts +31 -0
  47. package/dist/agents/agent-profile.service.js +122 -0
  48. package/dist/agents/agents.controller.d.ts +53 -168
  49. package/dist/agents/agents.controller.js +163 -34
  50. package/dist/agents/agents.module.d.ts +6 -2
  51. package/dist/agents/agents.module.js +41 -7
  52. package/dist/agents/agents.schemas.d.ts +392 -0
  53. package/dist/agents/agents.schemas.js +126 -0
  54. package/dist/agents/agents.service.d.ts +121 -36
  55. package/dist/agents/agents.service.js +411 -121
  56. package/dist/agents/definition.d.ts +142 -21
  57. package/dist/agents/definition.js +389 -43
  58. package/dist/agents/from-template.d.ts +106 -0
  59. package/dist/agents/from-template.js +680 -0
  60. package/dist/agents/from-template.service.d.ts +72 -0
  61. package/dist/agents/from-template.service.js +178 -0
  62. package/dist/agents/instruction-files.d.ts +60 -0
  63. package/dist/agents/instruction-files.js +111 -0
  64. package/dist/agents/models.controller.d.ts +44 -6
  65. package/dist/agents/models.controller.js +84 -8
  66. package/dist/agents/org-templates.d.ts +186 -0
  67. package/dist/agents/org-templates.js +876 -0
  68. package/dist/agents/pending-connector-requests.d.ts +79 -0
  69. package/dist/agents/pending-connector-requests.js +215 -0
  70. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  71. package/dist/agents/pending-connectors.controller.js +91 -0
  72. package/dist/agents/pending-connectors.service.d.ts +62 -0
  73. package/dist/agents/pending-connectors.service.js +282 -0
  74. package/dist/agents/profile.d.ts +114 -0
  75. package/dist/agents/profile.js +55 -0
  76. package/dist/agents/readiness.controller.d.ts +26 -0
  77. package/dist/agents/readiness.controller.js +56 -0
  78. package/dist/agents/templates.controller.d.ts +77 -5
  79. package/dist/agents/templates.controller.js +153 -7
  80. package/dist/agents/templates.d.ts +127 -23
  81. package/dist/agents/templates.js +482 -44
  82. package/dist/agents/templates.schemas.d.ts +20 -0
  83. package/dist/agents/templates.schemas.js +45 -0
  84. package/dist/background/background.controller.d.ts +38 -0
  85. package/dist/background/background.controller.js +88 -0
  86. package/dist/background/background.module.d.ts +10 -0
  87. package/dist/background/background.module.js +39 -0
  88. package/dist/background/background.schemas.d.ts +10 -0
  89. package/dist/background/background.schemas.js +16 -0
  90. package/dist/background/finish.d.ts +44 -0
  91. package/dist/background/finish.js +95 -0
  92. package/dist/background/launch-lock.d.ts +15 -0
  93. package/dist/background/launch-lock.js +40 -0
  94. package/dist/background/launch.d.ts +42 -0
  95. package/dist/background/launch.js +77 -0
  96. package/dist/background/poll.job.d.ts +56 -0
  97. package/dist/background/poll.job.js +195 -0
  98. package/dist/background/render.d.ts +23 -0
  99. package/dist/background/render.js +48 -0
  100. package/dist/background/session.d.ts +48 -0
  101. package/dist/background/session.js +80 -0
  102. package/dist/background/status.d.ts +35 -0
  103. package/dist/background/status.js +57 -0
  104. package/dist/background/stop.d.ts +68 -0
  105. package/dist/background/stop.js +244 -0
  106. package/dist/background/store.d.ts +167 -0
  107. package/dist/background/store.js +361 -0
  108. package/dist/background/store.module.d.ts +6 -0
  109. package/dist/background/store.module.js +22 -0
  110. package/dist/background/tasks.service.d.ts +109 -0
  111. package/dist/background/tasks.service.js +271 -0
  112. package/dist/background/wake-rules.d.ts +66 -0
  113. package/dist/background/wake-rules.js +113 -0
  114. package/dist/background/wake.d.ts +30 -0
  115. package/dist/background/wake.js +63 -0
  116. package/dist/catalog/admin-catalog.controller.d.ts +136 -52
  117. package/dist/catalog/admin-catalog.controller.js +275 -65
  118. package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
  119. package/dist/catalog/admin-catalog.schemas.js +99 -0
  120. package/dist/catalog/appearance.schemas.d.ts +10 -0
  121. package/dist/catalog/appearance.schemas.js +20 -0
  122. package/dist/catalog/appearance.service.d.ts +105 -0
  123. package/dist/catalog/appearance.service.js +306 -0
  124. package/dist/catalog/catalog-content.d.ts +122 -35
  125. package/dist/catalog/catalog-content.js +122 -14
  126. package/dist/catalog/catalog-files.d.ts +42 -0
  127. package/dist/catalog/catalog-files.js +89 -0
  128. package/dist/catalog/catalog-import.module.d.ts +7 -0
  129. package/dist/catalog/catalog-import.module.js +63 -0
  130. package/dist/catalog/catalog-items.d.ts +122 -7
  131. package/dist/catalog/catalog-items.js +301 -13
  132. package/dist/catalog/catalog-scope.service.d.ts +293 -0
  133. package/dist/catalog/catalog-scope.service.js +1236 -0
  134. package/dist/catalog/catalog.module.d.ts +7 -9
  135. package/dist/catalog/catalog.module.js +47 -31
  136. package/dist/catalog/catalog.service.d.ts +122 -31
  137. package/dist/catalog/catalog.service.js +177 -105
  138. package/dist/catalog/claude/agents.js +15 -10
  139. package/dist/catalog/claude/translate.js +3 -0
  140. package/dist/catalog/cli.d.ts +11 -1
  141. package/dist/catalog/cli.js +29 -1
  142. package/dist/catalog/component-promotion.d.ts +96 -0
  143. package/dist/catalog/component-promotion.js +395 -0
  144. package/dist/catalog/component-scope.controller.d.ts +102 -0
  145. package/dist/catalog/component-scope.controller.js +257 -0
  146. package/dist/catalog/component-scope.schemas.d.ts +118 -0
  147. package/dist/catalog/component-scope.schemas.js +97 -0
  148. package/dist/catalog/component-scope.service.d.ts +394 -0
  149. package/dist/catalog/component-scope.service.js +1133 -0
  150. package/dist/catalog/component-state.d.ts +207 -0
  151. package/dist/catalog/component-state.js +484 -0
  152. package/dist/catalog/git-source.d.ts +9 -1
  153. package/dist/catalog/git-source.js +29 -2
  154. package/dist/catalog/job-ids.d.ts +30 -0
  155. package/dist/catalog/job-ids.js +25 -0
  156. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  157. package/dist/catalog/marketplace-icons.d.ts +64 -0
  158. package/dist/catalog/marketplace-icons.js +131 -0
  159. package/dist/catalog/marketplaces.controller.d.ts +50 -41
  160. package/dist/catalog/marketplaces.controller.js +130 -46
  161. package/dist/catalog/marketplaces.schemas.d.ts +48 -0
  162. package/dist/catalog/marketplaces.schemas.js +53 -0
  163. package/dist/catalog/marketplaces.service.d.ts +110 -17
  164. package/dist/catalog/marketplaces.service.js +337 -29
  165. package/dist/catalog/org-catalog.controller.d.ts +114 -62
  166. package/dist/catalog/org-catalog.controller.js +191 -98
  167. package/dist/catalog/org-catalog.schemas.d.ts +104 -0
  168. package/dist/catalog/org-catalog.schemas.js +107 -0
  169. package/dist/catalog/org-catalog.service.d.ts +72 -33
  170. package/dist/catalog/org-catalog.service.js +367 -158
  171. package/dist/catalog/org-extension-switch.d.ts +41 -0
  172. package/dist/catalog/org-extension-switch.js +115 -0
  173. package/dist/catalog/org-extension.controller.d.ts +133 -0
  174. package/dist/catalog/org-extension.controller.js +313 -0
  175. package/dist/catalog/org-extension.schemas.d.ts +15 -0
  176. package/dist/catalog/org-extension.schemas.js +22 -0
  177. package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
  178. package/dist/catalog/org-plugin-uploads.controller.js +200 -0
  179. package/dist/catalog/org-plugin-uploads.d.ts +71 -0
  180. package/dist/catalog/org-plugin-uploads.js +122 -0
  181. package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
  182. package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
  183. package/dist/catalog/owned-items.d.ts +188 -0
  184. package/dist/catalog/owned-items.js +808 -0
  185. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  186. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  187. package/dist/catalog/ownership.d.ts +172 -0
  188. package/dist/catalog/ownership.js +326 -0
  189. package/dist/catalog/platform-components.d.ts +243 -0
  190. package/dist/catalog/platform-components.js +872 -0
  191. package/dist/catalog/platform-migration.d.ts +115 -0
  192. package/dist/catalog/platform-migration.js +583 -0
  193. package/dist/catalog/plugin-import.d.ts +254 -47
  194. package/dist/catalog/plugin-import.js +810 -112
  195. package/dist/catalog/plugin-install.d.ts +205 -42
  196. package/dist/catalog/plugin-install.js +828 -126
  197. package/dist/catalog/plugin-package.d.ts +43 -4
  198. package/dist/catalog/plugin-package.js +194 -7
  199. package/dist/catalog/plugin-upgrade.d.ts +308 -225
  200. package/dist/catalog/plugin-upgrade.js +1325 -1131
  201. package/dist/catalog/request-rules.d.ts +65 -0
  202. package/dist/catalog/request-rules.js +217 -0
  203. package/dist/catalog/requests.service.d.ts +194 -118
  204. package/dist/catalog/requests.service.js +530 -343
  205. package/dist/catalog/reserved-names.d.ts +8 -0
  206. package/dist/catalog/reserved-names.js +42 -0
  207. package/dist/catalog/scope-orgs.d.ts +21 -0
  208. package/dist/catalog/scope-orgs.js +67 -0
  209. package/dist/catalog/scope-state.d.ts +35 -0
  210. package/dist/catalog/scope-state.js +87 -0
  211. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  212. package/dist/catalog/scope-sync-workers.js +29 -0
  213. package/dist/catalog/scope-sync.d.ts +176 -0
  214. package/dist/catalog/scope-sync.js +576 -0
  215. package/dist/catalog/scope.d.ts +42 -0
  216. package/dist/catalog/scope.js +42 -0
  217. package/dist/catalog/unshare.d.ts +22 -0
  218. package/dist/catalog/unshare.js +119 -0
  219. package/dist/channels/actions.js +10 -3
  220. package/dist/channels/cards.d.ts +36 -10
  221. package/dist/channels/cards.js +100 -25
  222. package/dist/channels/channels.module.js +13 -2
  223. package/dist/channels/channels.schemas.d.ts +41 -0
  224. package/dist/channels/channels.schemas.js +40 -0
  225. package/dist/channels/connections.controller.d.ts +46 -37
  226. package/dist/channels/connections.controller.js +76 -34
  227. package/dist/channels/connections.service.d.ts +102 -10
  228. package/dist/channels/connections.service.js +271 -24
  229. package/dist/channels/inbound.d.ts +11 -1
  230. package/dist/channels/inbound.js +87 -7
  231. package/dist/channels/outbound.d.ts +14 -1
  232. package/dist/channels/outbound.js +64 -15
  233. package/dist/channels/phrases.d.ts +33 -2
  234. package/dist/channels/phrases.js +29 -1
  235. package/dist/channels/supervisor.d.ts +2 -0
  236. package/dist/channels/supervisor.js +4 -0
  237. package/dist/channels/threads.d.ts +5 -0
  238. package/dist/channels/threads.js +8 -0
  239. package/dist/channels/webhook.d.ts +21 -1
  240. package/dist/channels/webhook.js +39 -4
  241. package/dist/client/client-access.service.d.ts +102 -0
  242. package/dist/client/client-access.service.js +303 -0
  243. package/dist/client/client-builds.service.d.ts +109 -0
  244. package/dist/client/client-builds.service.js +229 -0
  245. package/dist/client/client-delivery.controller.d.ts +25 -0
  246. package/dist/client/client-delivery.controller.js +66 -0
  247. package/dist/client/client-files.d.ts +48 -0
  248. package/dist/client/client-files.js +136 -0
  249. package/dist/client/client-reports.cron.d.ts +13 -0
  250. package/dist/client/client-reports.cron.js +42 -0
  251. package/dist/client/client-reports.service.d.ts +30 -0
  252. package/dist/client/client-reports.service.js +102 -0
  253. package/dist/client/client-sign-in.service.d.ts +21 -0
  254. package/dist/client/client-sign-in.service.js +49 -0
  255. package/dist/client/client.controller.d.ts +49 -0
  256. package/dist/client/client.controller.js +129 -0
  257. package/dist/client/client.module.d.ts +8 -0
  258. package/dist/client/client.module.js +28 -0
  259. package/dist/client/client.schemas.d.ts +61 -0
  260. package/dist/client/client.schemas.js +27 -0
  261. package/dist/config/docs.js +5 -1
  262. package/dist/config/schema.d.ts +35 -2
  263. package/dist/config/schema.js +216 -21
  264. package/dist/conversations/access.d.ts +6 -4
  265. package/dist/conversations/access.js +29 -5
  266. package/dist/conversations/agent-tree.d.ts +46 -0
  267. package/dist/conversations/agent-tree.js +92 -0
  268. package/dist/conversations/artifacts.d.ts +1 -1
  269. package/dist/conversations/artifacts.js +1 -1
  270. package/dist/conversations/attachments.service.d.ts +30 -0
  271. package/dist/conversations/attachments.service.js +130 -5
  272. package/dist/conversations/conversations.controller.d.ts +79 -44
  273. package/dist/conversations/conversations.controller.js +133 -82
  274. package/dist/conversations/conversations.module.d.ts +1 -1
  275. package/dist/conversations/conversations.module.js +10 -7
  276. package/dist/conversations/conversations.schemas.d.ts +52 -0
  277. package/dist/conversations/conversations.schemas.js +79 -0
  278. package/dist/conversations/conversations.service.d.ts +161 -13
  279. package/dist/conversations/conversations.service.js +329 -57
  280. package/dist/conversations/device-status.d.ts +24 -0
  281. package/dist/conversations/device-status.js +71 -0
  282. package/dist/conversations/event-log.d.ts +45 -9
  283. package/dist/conversations/event-log.js +113 -6
  284. package/dist/conversations/events.d.ts +255 -9
  285. package/dist/conversations/events.js +250 -34
  286. package/dist/conversations/message-context.d.ts +79 -0
  287. package/dist/conversations/message-context.js +145 -0
  288. package/dist/conversations/queue.d.ts +5 -2
  289. package/dist/conversations/queue.js +24 -4
  290. package/dist/conversations/queue.service.d.ts +2 -2
  291. package/dist/conversations/queue.service.js +21 -3
  292. package/dist/conversations/titles.d.ts +12 -3
  293. package/dist/conversations/titles.js +40 -16
  294. package/dist/conversations/tree.d.ts +17 -0
  295. package/dist/conversations/tree.js +42 -0
  296. package/dist/ctx/create-ctx.d.ts +48 -5
  297. package/dist/ctx/create-ctx.js +174 -34
  298. package/dist/db/kernel-schema.d.ts +668 -27
  299. package/dist/db/pool.d.ts +5 -0
  300. package/dist/db/pool.js +3 -0
  301. package/dist/devices/access.d.ts +66 -0
  302. package/dist/devices/access.js +113 -0
  303. package/dist/devices/conversation-devices.d.ts +75 -0
  304. package/dist/devices/conversation-devices.js +230 -0
  305. package/dist/devices/devices.controller.d.ts +36 -0
  306. package/dist/devices/devices.controller.js +124 -0
  307. package/dist/devices/devices.module.d.ts +8 -0
  308. package/dist/devices/devices.module.js +34 -0
  309. package/dist/devices/devices.schemas.d.ts +3 -0
  310. package/dist/devices/devices.schemas.js +14 -0
  311. package/dist/devices/devices.service.d.ts +251 -0
  312. package/dist/devices/devices.service.js +791 -0
  313. package/dist/devices/dto.d.ts +25 -0
  314. package/dist/devices/dto.js +12 -0
  315. package/dist/devices/label.d.ts +11 -0
  316. package/dist/devices/label.js +25 -0
  317. package/dist/devices/legacy-cleanup.job.d.ts +34 -0
  318. package/dist/devices/legacy-cleanup.job.js +141 -0
  319. package/dist/errors.d.ts +215 -3
  320. package/dist/errors.js +215 -3
  321. package/dist/evals/evals.module.js +11 -2
  322. package/dist/evals/evals.schemas.d.ts +110 -0
  323. package/dist/evals/evals.schemas.js +107 -0
  324. package/dist/evals/reconstruct.d.ts +18 -9
  325. package/dist/evals/reconstruct.js +36 -10
  326. package/dist/evals/recorded-tools.d.ts +37 -1
  327. package/dist/evals/recorded-tools.js +120 -10
  328. package/dist/evals/run-replay.d.ts +20 -3
  329. package/dist/evals/run-replay.js +78 -14
  330. package/dist/evals/runs.controller.d.ts +2 -57
  331. package/dist/evals/runs.controller.js +1 -42
  332. package/dist/evals/runs.service.d.ts +8 -7
  333. package/dist/evals/runs.service.js +45 -30
  334. package/dist/evals/sets.controller.d.ts +2 -28
  335. package/dist/evals/sets.controller.js +1 -31
  336. package/dist/evals/sets.service.d.ts +7 -7
  337. package/dist/evals/sets.service.js +23 -17
  338. package/dist/evals/snapshot.d.ts +3 -2
  339. package/dist/evals/snapshot.js +17 -4
  340. package/dist/evals/step-replay.d.ts +4 -6
  341. package/dist/evals/step-replay.js +16 -9
  342. package/dist/evals/trajectory.d.ts +5 -3
  343. package/dist/evals/trajectory.js +4 -1
  344. package/dist/evals/trajectory.service.d.ts +8 -3
  345. package/dist/evals/trajectory.service.js +26 -14
  346. package/dist/evals/worker.d.ts +5 -5
  347. package/dist/evals/worker.js +9 -3
  348. package/dist/extensions/admin-ops.d.ts +81 -14
  349. package/dist/extensions/admin-ops.js +181 -47
  350. package/dist/extensions/admin-view.d.ts +57 -10
  351. package/dist/extensions/admin-view.js +249 -27
  352. package/dist/extensions/approvals.d.ts +12 -2
  353. package/dist/extensions/blobs.d.ts +14 -1
  354. package/dist/extensions/blobs.js +49 -5
  355. package/dist/extensions/bootstrap.d.ts +41 -5
  356. package/dist/extensions/bootstrap.js +121 -19
  357. package/dist/extensions/cli.d.ts +12 -0
  358. package/dist/extensions/cli.js +11 -2
  359. package/dist/extensions/config-hash.d.ts +10 -0
  360. package/dist/extensions/config-hash.js +38 -0
  361. package/dist/extensions/config-issues.d.ts +13 -1
  362. package/dist/extensions/config-issues.js +22 -5
  363. package/dist/extensions/config-json-schema.d.ts +43 -7
  364. package/dist/extensions/config-json-schema.js +124 -58
  365. package/dist/extensions/deployment-config-store.d.ts +6 -0
  366. package/dist/extensions/deployment-config.d.ts +94 -9
  367. package/dist/extensions/deployment-config.js +255 -34
  368. package/dist/extensions/display-name.d.ts +22 -0
  369. package/dist/extensions/display-name.js +77 -0
  370. package/dist/extensions/effective-config.d.ts +133 -0
  371. package/dist/extensions/effective-config.js +379 -0
  372. package/dist/extensions/extensions.module.js +31 -12
  373. package/dist/extensions/guide-places.d.ts +68 -0
  374. package/dist/extensions/guide-places.js +152 -0
  375. package/dist/extensions/hooks.d.ts +37 -4
  376. package/dist/extensions/hooks.js +82 -16
  377. package/dist/extensions/host.d.ts +105 -12
  378. package/dist/extensions/host.js +372 -87
  379. package/dist/extensions/installs.d.ts +30 -9
  380. package/dist/extensions/installs.js +57 -16
  381. package/dist/extensions/instance.d.ts +17 -2
  382. package/dist/extensions/instance.js +21 -0
  383. package/dist/extensions/ledger.d.ts +1 -1
  384. package/dist/extensions/locks.d.ts +12 -0
  385. package/dist/extensions/locks.js +26 -0
  386. package/dist/extensions/org-config.d.ts +97 -7
  387. package/dist/extensions/org-config.js +215 -45
  388. package/dist/extensions/org-levels.d.ts +37 -0
  389. package/dist/extensions/org-levels.js +71 -0
  390. package/dist/extensions/org-overrides.d.ts +151 -0
  391. package/dist/extensions/org-overrides.js +524 -0
  392. package/dist/extensions/package.d.ts +18 -4
  393. package/dist/extensions/package.js +56 -3
  394. package/dist/extensions/permission-set.d.ts +35 -5
  395. package/dist/extensions/permission-set.js +36 -5
  396. package/dist/extensions/permission-view.d.ts +106 -13
  397. package/dist/extensions/permission-view.js +33 -15
  398. package/dist/extensions/plugin-guides.d.ts +282 -0
  399. package/dist/extensions/plugin-guides.js +554 -0
  400. package/dist/extensions/plugin-icons.d.ts +54 -0
  401. package/dist/extensions/plugin-icons.js +125 -0
  402. package/dist/extensions/plugin-items.d.ts +21 -0
  403. package/dist/extensions/plugin-items.js +42 -0
  404. package/dist/extensions/point-defaults.controller.d.ts +28 -0
  405. package/dist/extensions/point-defaults.controller.js +69 -0
  406. package/dist/extensions/point-defaults.d.ts +73 -0
  407. package/dist/extensions/point-defaults.js +236 -0
  408. package/dist/extensions/point-defaults.schemas.d.ts +9 -0
  409. package/dist/extensions/point-defaults.schemas.js +14 -0
  410. package/dist/extensions/registry.d.ts +1 -1
  411. package/dist/extensions/registry.js +2 -0
  412. package/dist/extensions/resolve.d.ts +51 -1
  413. package/dist/extensions/resolve.js +85 -3
  414. package/dist/extensions/single-provider.d.ts +92 -0
  415. package/dist/extensions/single-provider.js +180 -0
  416. package/dist/extensions/sources.d.ts +13 -2
  417. package/dist/extensions/sources.js +2 -0
  418. package/dist/extensions/state.module.d.ts +9 -0
  419. package/dist/extensions/state.module.js +46 -0
  420. package/dist/extensions/unavailable.d.ts +50 -0
  421. package/dist/extensions/unavailable.js +115 -0
  422. package/dist/files/previewers.controller.js +2 -3
  423. package/dist/files/previewers.d.ts +10 -3
  424. package/dist/files/previewers.js +40 -11
  425. package/dist/files/previewers.schemas.d.ts +10 -0
  426. package/dist/files/previewers.schemas.js +9 -0
  427. package/dist/http/api.module.js +76 -4
  428. package/dist/http/app.d.ts +11 -2
  429. package/dist/http/app.js +31 -5
  430. package/dist/http/gateway-routes.d.ts +7 -3
  431. package/dist/http/gateway-routes.js +6 -3
  432. package/dist/http/nest-logger.d.ts +6 -5
  433. package/dist/http/nest-logger.js +24 -10
  434. package/dist/http/plugin-dispatch.d.ts +4 -1
  435. package/dist/http/plugin-dispatch.js +14 -2
  436. package/dist/identity/accounts.d.ts +77 -31
  437. package/dist/identity/accounts.js +133 -52
  438. package/dist/identity/audit.d.ts +2 -1
  439. package/dist/identity/auth.controller.js +9 -5
  440. package/dist/identity/auth.guard.d.ts +13 -5
  441. package/dist/identity/auth.guard.js +35 -9
  442. package/dist/identity/cookies.d.ts +26 -5
  443. package/dist/identity/cookies.js +58 -6
  444. package/dist/identity/identity.module.d.ts +1 -1
  445. package/dist/identity/identity.module.js +7 -4
  446. package/dist/identity/initial-passwords.controller.d.ts +22 -0
  447. package/dist/identity/initial-passwords.controller.js +49 -0
  448. package/dist/identity/initial-passwords.d.ts +61 -0
  449. package/dist/identity/initial-passwords.job.d.ts +16 -0
  450. package/dist/identity/initial-passwords.job.js +46 -0
  451. package/dist/identity/initial-passwords.js +159 -0
  452. package/dist/identity/me.controller.d.ts +17 -1
  453. package/dist/identity/me.controller.js +45 -4
  454. package/dist/identity/me.schemas.d.ts +24 -0
  455. package/dist/identity/me.schemas.js +25 -0
  456. package/dist/identity/principal.d.ts +11 -3
  457. package/dist/identity/principal.js +11 -3
  458. package/dist/identity/sessions.d.ts +12 -0
  459. package/dist/identity/sessions.js +45 -0
  460. package/dist/identity/settings.d.ts +99 -12
  461. package/dist/identity/settings.js +234 -25
  462. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  463. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  464. package/dist/identity/write-actor.d.ts +11 -0
  465. package/dist/identity/write-actor.js +7 -0
  466. package/dist/inbox/inbox.module.d.ts +4 -1
  467. package/dist/inbox/inbox.module.js +7 -3
  468. package/dist/inbox/inbox.schemas.d.ts +8 -0
  469. package/dist/inbox/inbox.schemas.js +11 -0
  470. package/dist/inbox/inbox.service.d.ts +64 -4
  471. package/dist/inbox/inbox.service.js +74 -4
  472. package/dist/inbox/org-notices.d.ts +63 -0
  473. package/dist/inbox/org-notices.js +91 -0
  474. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  475. package/dist/inbox/platform-inbox.controller.js +58 -0
  476. package/dist/inbox/platform-inbox.service.d.ts +157 -0
  477. package/dist/inbox/platform-inbox.service.js +281 -0
  478. package/dist/inbox/platform-notices.d.ts +19 -0
  479. package/dist/inbox/platform-notices.js +9 -0
  480. package/dist/index.d.ts +6 -2
  481. package/dist/index.js +7 -1
  482. package/dist/infra/cli/kernel-cli.module.js +9 -1
  483. package/dist/infra/config/kernel-config.service.js +32 -1
  484. package/dist/infra/database/database.module.js +1 -0
  485. package/dist/infra/database/xact-lock.d.ts +1 -1
  486. package/dist/infra/database/xact-lock.js +1 -1
  487. package/dist/infra/events/kernel-events.d.ts +31 -3
  488. package/dist/infra/lifecycle/process-guards.js +4 -0
  489. package/dist/infra/lock/lock.service.d.ts +8 -0
  490. package/dist/infra/lock/lock.service.js +27 -0
  491. package/dist/infra/logging/logging.module.d.ts +4 -2
  492. package/dist/infra/logging/logging.module.js +24 -6
  493. package/dist/infra/presence/presence.module.d.ts +6 -0
  494. package/dist/infra/presence/presence.module.js +22 -0
  495. package/dist/infra/presence/replica-presence.d.ts +87 -0
  496. package/dist/infra/presence/replica-presence.js +189 -0
  497. package/dist/infra/queue/add-job-once.d.ts +14 -0
  498. package/dist/infra/queue/add-job-once.js +16 -0
  499. package/dist/infra/queue/redis-connection.d.ts +6 -0
  500. package/dist/infra/queue/redis-connection.js +7 -0
  501. package/dist/infra/redis/redis.module.js +6 -2
  502. package/dist/infra/throttler/named-throttlers.d.ts +12 -0
  503. package/dist/infra/throttler/named-throttlers.js +67 -0
  504. package/dist/infra/throttler/throttler.guard.js +1 -1
  505. package/dist/infra/tokens.d.ts +6 -1
  506. package/dist/infra/tokens.js +6 -1
  507. package/dist/kernel.module.js +15 -0
  508. package/dist/lifecycle/kernel-lifecycle.d.ts +4 -2
  509. package/dist/lifecycle/kernel-lifecycle.js +35 -7
  510. package/dist/local-devices/device-auth.controller.d.ts +42 -0
  511. package/dist/local-devices/device-auth.controller.js +116 -0
  512. package/dist/local-devices/device-auth.d.ts +119 -0
  513. package/dist/local-devices/device-auth.js +401 -0
  514. package/dist/local-devices/device-auth.module.d.ts +7 -0
  515. package/dist/local-devices/device-auth.module.js +25 -0
  516. package/dist/local-devices/device-routes.d.ts +36 -0
  517. package/dist/local-devices/device-routes.js +90 -0
  518. package/dist/local-devices/dto.d.ts +66 -0
  519. package/dist/local-devices/dto.js +44 -0
  520. package/dist/local-devices/keys.d.ts +25 -0
  521. package/dist/local-devices/keys.js +25 -0
  522. package/dist/local-devices/local-device-gateway.d.ts +134 -0
  523. package/dist/local-devices/local-device-gateway.js +542 -0
  524. package/dist/local-devices/local-device-provider.d.ts +89 -0
  525. package/dist/local-devices/local-device-provider.js +151 -0
  526. package/dist/local-devices/local-devices.module.d.ts +16 -0
  527. package/dist/local-devices/local-devices.module.js +44 -0
  528. package/dist/local-devices/machines.d.ts +118 -0
  529. package/dist/local-devices/machines.js +366 -0
  530. package/dist/local-devices/relay.d.ts +100 -0
  531. package/dist/local-devices/relay.js +373 -0
  532. package/dist/local-devices/targets.d.ts +28 -0
  533. package/dist/local-devices/targets.js +73 -0
  534. package/dist/log.d.ts +13 -1
  535. package/dist/log.js +93 -17
  536. package/dist/models/embeddings.d.ts +82 -0
  537. package/dist/models/embeddings.js +326 -0
  538. package/dist/models/enablement.controller.d.ts +40 -0
  539. package/dist/models/enablement.controller.js +74 -0
  540. package/dist/models/enablement.d.ts +101 -0
  541. package/dist/models/enablement.js +264 -0
  542. package/dist/models/models.module.d.ts +5 -1
  543. package/dist/models/models.module.js +16 -4
  544. package/dist/models/org-models.schemas.d.ts +8 -0
  545. package/dist/models/org-models.schemas.js +22 -0
  546. package/dist/models/prices.d.ts +8 -6
  547. package/dist/models/prices.js +11 -9
  548. package/dist/models/purposes.controller.d.ts +6 -4
  549. package/dist/models/purposes.controller.js +13 -7
  550. package/dist/models/purposes.d.ts +72 -14
  551. package/dist/models/purposes.js +115 -34
  552. package/dist/orgs/directory-sync.d.ts +14 -5
  553. package/dist/orgs/directory-sync.js +41 -17
  554. package/dist/orgs/offboarding.d.ts +12 -8
  555. package/dist/orgs/offboarding.js +54 -33
  556. package/dist/orgs/org-lock.d.ts +5 -0
  557. package/dist/orgs/org-lock.js +13 -0
  558. package/dist/orgs/org.guard.d.ts +10 -0
  559. package/dist/orgs/org.guard.js +43 -32
  560. package/dist/orgs/orgs.controller.d.ts +2 -5
  561. package/dist/orgs/orgs.controller.js +3 -6
  562. package/dist/orgs/orgs.module.js +3 -0
  563. package/dist/orgs/orgs.schemas.d.ts +8 -0
  564. package/dist/orgs/orgs.schemas.js +16 -0
  565. package/dist/orgs/orgs.service.d.ts +23 -8
  566. package/dist/orgs/orgs.service.js +38 -16
  567. package/dist/orgs/roles.d.ts +1 -1
  568. package/dist/orgs/roles.js +5 -1
  569. package/dist/orgs/settings.controller.d.ts +1 -1
  570. package/dist/orgs/settings.service.d.ts +66 -6
  571. package/dist/orgs/settings.service.js +89 -10
  572. package/dist/overrides.d.ts +16 -1
  573. package/dist/overrides.js +10 -0
  574. package/dist/platform/actor.d.ts +48 -0
  575. package/dist/platform/actor.js +100 -0
  576. package/dist/platform/agent-docs.d.ts +18 -0
  577. package/dist/platform/agent-docs.js +59 -0
  578. package/dist/platform/availability.d.ts +14 -0
  579. package/dist/platform/availability.js +43 -0
  580. package/dist/platform/errors.d.ts +28 -0
  581. package/dist/platform/errors.js +65 -0
  582. package/dist/platform/exclusions.d.ts +11 -0
  583. package/dist/platform/exclusions.js +774 -0
  584. package/dist/platform/method.d.ts +6 -0
  585. package/dist/platform/method.js +15 -0
  586. package/dist/platform/operation.d.ts +169 -0
  587. package/dist/platform/operation.js +102 -0
  588. package/dist/platform/ops/accounts.ops.d.ts +32 -0
  589. package/dist/platform/ops/accounts.ops.js +291 -0
  590. package/dist/platform/ops/admin-items.ops.d.ts +37 -0
  591. package/dist/platform/ops/admin-items.ops.js +278 -0
  592. package/dist/platform/ops/admin.ops.d.ts +38 -0
  593. package/dist/platform/ops/admin.ops.js +497 -0
  594. package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
  595. package/dist/platform/ops/agent-skills.ops.js +509 -0
  596. package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
  597. package/dist/platform/ops/agent-templates.ops.js +272 -0
  598. package/dist/platform/ops/agents.ops.d.ts +37 -0
  599. package/dist/platform/ops/agents.ops.js +730 -0
  600. package/dist/platform/ops/approvals.ops.d.ts +30 -0
  601. package/dist/platform/ops/approvals.ops.js +116 -0
  602. package/dist/platform/ops/background.ops.d.ts +14 -0
  603. package/dist/platform/ops/background.ops.js +134 -0
  604. package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
  605. package/dist/platform/ops/catalog-admin.ops.js +682 -0
  606. package/dist/platform/ops/channels.ops.d.ts +16 -0
  607. package/dist/platform/ops/channels.ops.js +195 -0
  608. package/dist/platform/ops/components.ops.d.ts +46 -0
  609. package/dist/platform/ops/components.ops.js +854 -0
  610. package/dist/platform/ops/connectors.ops.d.ts +17 -0
  611. package/dist/platform/ops/connectors.ops.js +190 -0
  612. package/dist/platform/ops/conversations.ops.d.ts +30 -0
  613. package/dist/platform/ops/conversations.ops.js +470 -0
  614. package/dist/platform/ops/devices.ops.d.ts +26 -0
  615. package/dist/platform/ops/devices.ops.js +311 -0
  616. package/dist/platform/ops/errors.d.ts +16 -0
  617. package/dist/platform/ops/errors.js +30 -0
  618. package/dist/platform/ops/evals.ops.d.ts +28 -0
  619. package/dist/platform/ops/evals.ops.js +783 -0
  620. package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
  621. package/dist/platform/ops/extensions-admin.ops.js +372 -0
  622. package/dist/platform/ops/extensions.ops.d.ts +25 -0
  623. package/dist/platform/ops/extensions.ops.js +347 -0
  624. package/dist/platform/ops/inbox.ops.d.ts +25 -0
  625. package/dist/platform/ops/inbox.ops.js +381 -0
  626. package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
  627. package/dist/platform/ops/marketplaces.ops.js +466 -0
  628. package/dist/platform/ops/models.ops.d.ts +25 -0
  629. package/dist/platform/ops/models.ops.js +232 -0
  630. package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
  631. package/dist/platform/ops/org-plugins.ops.js +388 -0
  632. package/dist/platform/ops/org-settings.ops.d.ts +18 -0
  633. package/dist/platform/ops/org-settings.ops.js +127 -0
  634. package/dist/platform/ops/orgs.ops.d.ts +28 -0
  635. package/dist/platform/ops/orgs.ops.js +298 -0
  636. package/dist/platform/ops/other-orgs.d.ts +20 -0
  637. package/dist/platform/ops/other-orgs.js +72 -0
  638. package/dist/platform/ops/paging.d.ts +14 -0
  639. package/dist/platform/ops/paging.js +20 -0
  640. package/dist/platform/ops/platform.ops.d.ts +30 -0
  641. package/dist/platform/ops/platform.ops.js +231 -0
  642. package/dist/platform/ops/plugins.ops.d.ts +35 -0
  643. package/dist/platform/ops/plugins.ops.js +476 -0
  644. package/dist/platform/ops/previewers.ops.d.ts +14 -0
  645. package/dist/platform/ops/previewers.ops.js +109 -0
  646. package/dist/platform/ops/requests.ops.d.ts +14 -0
  647. package/dist/platform/ops/requests.ops.js +191 -0
  648. package/dist/platform/ops/role.d.ts +4 -0
  649. package/dist/platform/ops/role.js +10 -0
  650. package/dist/platform/ops/setup.ops.d.ts +24 -0
  651. package/dist/platform/ops/setup.ops.js +212 -0
  652. package/dist/platform/ops/skills.ops.d.ts +17 -0
  653. package/dist/platform/ops/skills.ops.js +160 -0
  654. package/dist/platform/ops/summary.d.ts +10 -0
  655. package/dist/platform/ops/summary.js +18 -0
  656. package/dist/platform/ops/themes.ops.d.ts +14 -0
  657. package/dist/platform/ops/themes.ops.js +47 -0
  658. package/dist/platform/ops/ui.ops.d.ts +8 -0
  659. package/dist/platform/ops/ui.ops.js +41 -0
  660. package/dist/platform/ops/unavailable.d.ts +23 -0
  661. package/dist/platform/ops/unavailable.js +118 -0
  662. package/dist/platform/parity.d.ts +33 -0
  663. package/dist/platform/parity.js +272 -0
  664. package/dist/platform/platform-ops.module.d.ts +43 -0
  665. package/dist/platform/platform-ops.module.js +142 -0
  666. package/dist/platform/platform.module.d.ts +8 -0
  667. package/dist/platform/platform.module.js +25 -0
  668. package/dist/platform/registry.d.ts +30 -0
  669. package/dist/platform/registry.js +111 -0
  670. package/dist/platform/route-schemas.d.ts +18 -0
  671. package/dist/platform/route-schemas.js +85 -0
  672. package/dist/roles/gateway-role.d.ts +18 -3
  673. package/dist/roles/gateway-role.js +33 -5
  674. package/dist/roles/gateway.module.d.ts +2 -1
  675. package/dist/roles/gateway.module.js +6 -3
  676. package/dist/roles/worker-role.d.ts +6 -4
  677. package/dist/roles/worker-role.js +14 -7
  678. package/dist/roles/worker.module.d.ts +1 -1
  679. package/dist/roles/worker.module.js +21 -1
  680. package/dist/runtime/context/build.d.ts +21 -13
  681. package/dist/runtime/context/build.js +106 -29
  682. package/dist/runtime/context/claude-tools.d.ts +4 -1
  683. package/dist/runtime/context/claude-tools.js +13 -12
  684. package/dist/runtime/context/compaction.js +24 -1
  685. package/dist/runtime/context/device-paths.d.ts +40 -0
  686. package/dist/runtime/context/device-paths.js +48 -0
  687. package/dist/runtime/context/legacy-text.d.ts +22 -0
  688. package/dist/runtime/context/legacy-text.js +37 -0
  689. package/dist/runtime/context/reminders.d.ts +2 -0
  690. package/dist/runtime/context/reminders.js +2 -0
  691. package/dist/runtime/context/run-context.d.ts +65 -0
  692. package/dist/runtime/context/run-context.js +215 -0
  693. package/dist/runtime/context/skills.d.ts +29 -11
  694. package/dist/runtime/context/skills.js +46 -32
  695. package/dist/runtime/context/tool-changes.d.ts +27 -0
  696. package/dist/runtime/context/tool-changes.js +60 -0
  697. package/dist/runtime/hook-calls.d.ts +8 -1
  698. package/dist/runtime/hook-calls.js +40 -7
  699. package/dist/runtime/langgraph-loop.d.ts +3 -1
  700. package/dist/runtime/langgraph-loop.js +36 -17
  701. package/dist/runtime/loop.d.ts +35 -6
  702. package/dist/runtime/maintenance.d.ts +9 -4
  703. package/dist/runtime/maintenance.js +35 -8
  704. package/dist/runtime/model-call.d.ts +54 -11
  705. package/dist/runtime/model-call.js +105 -28
  706. package/dist/runtime/providers.d.ts +149 -29
  707. package/dist/runtime/providers.js +332 -63
  708. package/dist/runtime/run-context.service.d.ts +65 -0
  709. package/dist/runtime/run-context.service.js +236 -0
  710. package/dist/runtime/run-control.d.ts +11 -1
  711. package/dist/runtime/run-control.js +12 -0
  712. package/dist/runtime/run-drafts.d.ts +85 -0
  713. package/dist/runtime/run-drafts.js +230 -0
  714. package/dist/runtime/run-finish.d.ts +1 -1
  715. package/dist/runtime/run-jobs.d.ts +3 -5
  716. package/dist/runtime/run-jobs.js +7 -9
  717. package/dist/runtime/run-queue.d.ts +62 -5
  718. package/dist/runtime/run-queue.js +313 -40
  719. package/dist/runtime/run-worker.d.ts +19 -8
  720. package/dist/runtime/run-worker.js +105 -44
  721. package/dist/runtime/runtime.module.js +13 -3
  722. package/dist/runtime/step-log.d.ts +15 -4
  723. package/dist/runtime/step-log.js +24 -7
  724. package/dist/runtime/stream.controller.d.ts +23 -1
  725. package/dist/runtime/stream.controller.js +60 -3
  726. package/dist/runtime/stream.d.ts +4 -1
  727. package/dist/runtime/stream.js +27 -3
  728. package/dist/runtime/subagents/child.d.ts +55 -7
  729. package/dist/runtime/subagents/child.js +105 -7
  730. package/dist/runtime/subagents/definition.d.ts +31 -26
  731. package/dist/runtime/subagents/definition.js +89 -142
  732. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  733. package/dist/runtime/subagents/deliveries.js +228 -0
  734. package/dist/runtime/subagents/dispatch.d.ts +116 -27
  735. package/dist/runtime/subagents/dispatch.js +213 -142
  736. package/dist/runtime/subagents/limits.d.ts +24 -5
  737. package/dist/runtime/subagents/limits.js +40 -6
  738. package/dist/runtime/subagents/messages.d.ts +95 -0
  739. package/dist/runtime/subagents/messages.js +328 -0
  740. package/dist/runtime/subagents/org-agents.js +2 -1
  741. package/dist/runtime/subagents/preamble.d.ts +4 -4
  742. package/dist/runtime/subagents/preamble.js +9 -7
  743. package/dist/runtime/subagents/progress.d.ts +8 -6
  744. package/dist/runtime/subagents/progress.js +11 -6
  745. package/dist/runtime/subagents/render.d.ts +30 -0
  746. package/dist/runtime/subagents/render.js +53 -0
  747. package/dist/runtime/subagents/roster.d.ts +25 -8
  748. package/dist/runtime/subagents/roster.js +48 -12
  749. package/dist/runtime/subagents/skill-fork.d.ts +4 -3
  750. package/dist/runtime/subagents/skill-fork.js +9 -5
  751. package/dist/runtime/subagents/status.d.ts +14 -0
  752. package/dist/runtime/subagents/status.js +23 -0
  753. package/dist/runtime/subagents/subagents.service.d.ts +9 -6
  754. package/dist/runtime/subagents/subagents.service.js +13 -8
  755. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  756. package/dist/runtime/usage-report-jobs.js +158 -0
  757. package/dist/runtime/usage-report.d.ts +35 -39
  758. package/dist/runtime/usage-report.js +171 -97
  759. package/dist/runtime/waits.d.ts +148 -39
  760. package/dist/runtime/waits.js +426 -112
  761. package/dist/sandbox/jobs.d.ts +40 -13
  762. package/dist/sandbox/jobs.js +57 -20
  763. package/dist/sandbox/leases.d.ts +37 -54
  764. package/dist/sandbox/leases.js +71 -115
  765. package/dist/sandbox/providers.d.ts +34 -7
  766. package/dist/sandbox/providers.js +54 -9
  767. package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
  768. package/dist/sandbox/sandbox-file-reader.js +98 -0
  769. package/dist/sandbox/sandbox.module.d.ts +3 -2
  770. package/dist/sandbox/sandbox.module.js +10 -4
  771. package/dist/sandbox/sandbox.service.d.ts +345 -132
  772. package/dist/sandbox/sandbox.service.js +883 -399
  773. package/dist/sandbox/unreachable.d.ts +30 -0
  774. package/dist/sandbox/unreachable.js +108 -0
  775. package/dist/setup/kernel-checks.d.ts +91 -0
  776. package/dist/setup/kernel-checks.js +295 -0
  777. package/dist/setup/oauth-token-probe.d.ts +47 -0
  778. package/dist/setup/oauth-token-probe.js +108 -0
  779. package/dist/setup/redact-check.d.ts +18 -0
  780. package/dist/setup/redact-check.js +46 -0
  781. package/dist/setup/setup-check-registry.d.ts +86 -0
  782. package/dist/setup/setup-check-registry.js +75 -0
  783. package/dist/setup/setup-checks.controller.d.ts +28 -0
  784. package/dist/setup/setup-checks.controller.js +78 -0
  785. package/dist/setup/setup-checks.schemas.d.ts +38 -0
  786. package/dist/setup/setup-checks.schemas.js +43 -0
  787. package/dist/setup/setup-checks.service.d.ts +144 -0
  788. package/dist/setup/setup-checks.service.js +683 -0
  789. package/dist/setup/setup-guides.controller.d.ts +18 -0
  790. package/dist/setup/setup-guides.controller.js +48 -0
  791. package/dist/setup/setup-guides.schemas.d.ts +10 -0
  792. package/dist/setup/setup-guides.schemas.js +6 -0
  793. package/dist/setup/setup-guides.service.d.ts +126 -0
  794. package/dist/setup/setup-guides.service.js +315 -0
  795. package/dist/setup/setup.module.d.ts +8 -0
  796. package/dist/setup/setup.module.js +31 -0
  797. package/dist/skills/agent-skills.controller.d.ts +48 -0
  798. package/dist/skills/agent-skills.controller.js +131 -0
  799. package/dist/skills/agent-skills.service.d.ts +262 -0
  800. package/dist/skills/agent-skills.service.js +996 -0
  801. package/dist/skills/catalog.d.ts +14 -11
  802. package/dist/skills/catalog.js +32 -50
  803. package/dist/skills/changes.controller.d.ts +12 -22
  804. package/dist/skills/changes.controller.js +27 -56
  805. package/dist/skills/changes.service.d.ts +69 -115
  806. package/dist/skills/changes.service.js +249 -598
  807. package/dist/skills/conversation-catalog.d.ts +53 -0
  808. package/dist/skills/conversation-catalog.js +149 -0
  809. package/dist/skills/invocable.controller.d.ts +1 -1
  810. package/dist/skills/invocable.controller.js +2 -2
  811. package/dist/skills/invocation-keys.d.ts +1 -1
  812. package/dist/skills/invocation-keys.js +1 -1
  813. package/dist/skills/invoke.d.ts +3 -3
  814. package/dist/skills/invoke.js +21 -8
  815. package/dist/skills/package.d.ts +15 -1
  816. package/dist/skills/package.js +14 -1
  817. package/dist/skills/skills.controller.d.ts +32 -6
  818. package/dist/skills/skills.controller.js +64 -11
  819. package/dist/skills/skills.module.js +25 -3
  820. package/dist/skills/skills.schemas.d.ts +44 -0
  821. package/dist/skills/skills.schemas.js +68 -0
  822. package/dist/skills/skills.service.d.ts +123 -26
  823. package/dist/skills/skills.service.js +493 -76
  824. package/dist/skills/usable.d.ts +82 -0
  825. package/dist/skills/usable.js +388 -0
  826. package/dist/themes/render-css.d.ts +13 -0
  827. package/dist/themes/render-css.js +135 -0
  828. package/dist/themes/theme-delivery.service.d.ts +36 -0
  829. package/dist/themes/theme-delivery.service.js +116 -0
  830. package/dist/themes/theme-state.d.ts +116 -0
  831. package/dist/themes/theme-state.js +221 -0
  832. package/dist/themes/theme-usage.d.ts +61 -0
  833. package/dist/themes/theme-usage.js +98 -0
  834. package/dist/themes/themes-public.controller.d.ts +33 -0
  835. package/dist/themes/themes-public.controller.js +98 -0
  836. package/dist/themes/themes.controller.d.ts +13 -0
  837. package/dist/themes/themes.controller.js +38 -0
  838. package/dist/themes/themes.module.d.ts +3 -0
  839. package/dist/themes/themes.module.js +21 -0
  840. package/dist/themes/themes.schemas.d.ts +3 -0
  841. package/dist/themes/themes.schemas.js +2 -0
  842. package/dist/themes/themes.service.d.ts +50 -0
  843. package/dist/themes/themes.service.js +99 -0
  844. package/dist/time-zone.d.ts +5 -0
  845. package/dist/time-zone.js +19 -0
  846. package/dist/tools/admin-connectors.d.ts +69 -0
  847. package/dist/tools/admin-connectors.js +135 -0
  848. package/dist/tools/approvals.controller.js +2 -3
  849. package/dist/tools/approvals.schemas.d.ts +21 -0
  850. package/dist/tools/approvals.schemas.js +15 -0
  851. package/dist/tools/approvals.service.d.ts +26 -2
  852. package/dist/tools/approvals.service.js +44 -5
  853. package/dist/tools/builtin-names.d.ts +104 -0
  854. package/dist/tools/builtin-names.js +164 -0
  855. package/dist/tools/builtins/agent.d.ts +27 -25
  856. package/dist/tools/builtins/agent.js +66 -63
  857. package/dist/tools/builtins/ask-user.d.ts +1 -1
  858. package/dist/tools/builtins/ask-user.js +5 -4
  859. package/dist/tools/builtins/builtin-tools.d.ts +23 -4
  860. package/dist/tools/builtins/builtin-tools.js +78 -12
  861. package/dist/tools/builtins/current-time.d.ts +26 -0
  862. package/dist/tools/builtins/current-time.js +99 -0
  863. package/dist/tools/builtins/handback.d.ts +28 -0
  864. package/dist/tools/builtins/handback.js +53 -0
  865. package/dist/tools/builtins/platform.d.ts +51 -0
  866. package/dist/tools/builtins/platform.js +451 -0
  867. package/dist/tools/builtins/read-tool-output.d.ts +1 -1
  868. package/dist/tools/builtins/read-tool-output.js +2 -2
  869. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  870. package/dist/tools/builtins/sandbox/bash.js +291 -39
  871. package/dist/tools/builtins/sandbox/common.d.ts +135 -36
  872. package/dist/tools/builtins/sandbox/common.js +222 -62
  873. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  874. package/dist/tools/builtins/sandbox/deliver.js +19 -16
  875. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  876. package/dist/tools/builtins/sandbox/edit.js +64 -50
  877. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  878. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  879. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  880. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  881. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  882. package/dist/tools/builtins/sandbox/glob.js +17 -12
  883. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  884. package/dist/tools/builtins/sandbox/grep.js +153 -34
  885. package/dist/tools/builtins/sandbox/index.d.ts +9 -5
  886. package/dist/tools/builtins/sandbox/index.js +13 -5
  887. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  888. package/dist/tools/builtins/sandbox/read.js +29 -19
  889. package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
  890. package/dist/tools/builtins/sandbox/task-output.js +334 -0
  891. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  892. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  893. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  894. package/dist/tools/builtins/sandbox/write.js +51 -44
  895. package/dist/tools/builtins/send-message.d.ts +56 -0
  896. package/dist/tools/builtins/send-message.js +100 -0
  897. package/dist/tools/builtins/skill-load.d.ts +29 -18
  898. package/dist/tools/builtins/skill-load.js +125 -73
  899. package/dist/tools/builtins/tool-search.d.ts +13 -9
  900. package/dist/tools/builtins/tool-search.js +25 -14
  901. package/dist/tools/builtins/web/errors.d.ts +8 -0
  902. package/dist/tools/builtins/web/errors.js +53 -0
  903. package/dist/tools/builtins/web/extract.d.ts +62 -0
  904. package/dist/tools/builtins/web/extract.js +271 -0
  905. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  906. package/dist/tools/builtins/web/fetch.js +175 -0
  907. package/dist/tools/builtins/web/index.d.ts +13 -0
  908. package/dist/tools/builtins/web/index.js +12 -0
  909. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  910. package/dist/tools/builtins/web/page-cache.js +77 -0
  911. package/dist/tools/builtins/web/search.d.ts +25 -0
  912. package/dist/tools/builtins/web/search.js +210 -0
  913. package/dist/tools/builtins/web/url.d.ts +17 -0
  914. package/dist/tools/builtins/web/url.js +43 -0
  915. package/dist/tools/connector-account-policies.d.ts +51 -0
  916. package/dist/tools/connector-account-policies.js +165 -0
  917. package/dist/tools/connectors.controller.d.ts +74 -9
  918. package/dist/tools/connectors.controller.js +133 -16
  919. package/dist/tools/connectors.schemas.d.ts +27 -0
  920. package/dist/tools/connectors.schemas.js +34 -0
  921. package/dist/tools/connectors.service.d.ts +101 -8
  922. package/dist/tools/connectors.service.js +266 -28
  923. package/dist/tools/credentials.d.ts +23 -0
  924. package/dist/tools/credentials.js +90 -1
  925. package/dist/tools/display-names.d.ts +9 -0
  926. package/dist/tools/display-names.js +24 -0
  927. package/dist/tools/drift.js +5 -5
  928. package/dist/tools/elicitation.js +1 -1
  929. package/dist/tools/extension-tools.controller.d.ts +14 -0
  930. package/dist/tools/extension-tools.controller.js +37 -0
  931. package/dist/tools/info.d.ts +61 -4
  932. package/dist/tools/info.js +119 -33
  933. package/dist/tools/legacy-data.d.ts +34 -0
  934. package/dist/tools/legacy-data.js +76 -0
  935. package/dist/tools/legacy-keys.d.ts +51 -0
  936. package/dist/tools/legacy-keys.js +114 -0
  937. package/dist/tools/naming.d.ts +1 -5
  938. package/dist/tools/naming.js +1 -7
  939. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  940. package/dist/tools/oauth/flow-paths.js +1 -1
  941. package/dist/tools/oauth/flow.js +1 -1
  942. package/dist/tools/oauth/tokens.d.ts +54 -7
  943. package/dist/tools/oauth/tokens.js +87 -17
  944. package/dist/tools/org-tool-switches.d.ts +89 -0
  945. package/dist/tools/org-tool-switches.js +201 -0
  946. package/dist/tools/outputs.js +1 -1
  947. package/dist/tools/pipeline.d.ts +67 -47
  948. package/dist/tools/pipeline.js +319 -380
  949. package/dist/tools/policy.d.ts +30 -23
  950. package/dist/tools/policy.js +142 -64
  951. package/dist/tools/questions.controller.d.ts +1 -1
  952. package/dist/tools/questions.controller.js +1 -1
  953. package/dist/tools/questions.service.d.ts +23 -2
  954. package/dist/tools/questions.service.js +104 -2
  955. package/dist/tools/registry.d.ts +189 -68
  956. package/dist/tools/registry.js +318 -236
  957. package/dist/tools/resources.d.ts +1 -1
  958. package/dist/tools/resources.js +1 -1
  959. package/dist/tools/tools.module.js +31 -3
  960. package/dist/tools/validate.js +1 -1
  961. package/dist/ui/admin-ui.controller.d.ts +56 -0
  962. package/dist/ui/admin-ui.controller.js +192 -0
  963. package/dist/ui/arrangement.d.ts +65 -0
  964. package/dist/ui/arrangement.js +171 -0
  965. package/dist/ui/embed-token.d.ts +2 -2
  966. package/dist/ui/embed-token.js +30 -5
  967. package/dist/ui/registry.d.ts +42 -17
  968. package/dist/ui/registry.js +46 -14
  969. package/dist/ui/slots.controller.d.ts +11 -0
  970. package/dist/ui/slots.controller.js +25 -0
  971. package/dist/ui/ui-stream.d.ts +20 -3
  972. package/dist/ui/ui-stream.js +25 -7
  973. package/dist/ui/ui.schemas.d.ts +70 -0
  974. package/dist/ui/ui.schemas.js +65 -0
  975. package/dist/ui/views.controller.d.ts +35 -49
  976. package/dist/ui/views.controller.js +48 -70
  977. package/dist/ui/views.d.ts +112 -18
  978. package/dist/ui/views.js +254 -47
  979. package/package.json +6 -3
  980. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  981. package/src/migrations/0064_account_last_org.sql +7 -0
  982. package/src/migrations/0065_conversation_archive.sql +8 -0
  983. package/src/migrations/0066_extension_display_name.sql +4 -0
  984. package/src/migrations/0067_agent_profiles.sql +20 -0
  985. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  986. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  987. package/src/migrations/0070_background_tasks.sql +37 -0
  988. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  989. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  990. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  991. package/src/migrations/0074_subagent_tree.sql +50 -0
  992. package/src/migrations/0075_plugin_scope.sql +61 -0
  993. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  994. package/src/migrations/0077_scope_requests.sql +52 -0
  995. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  996. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  997. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  998. package/src/migrations/0081_platform_components.sql +129 -0
  999. package/src/migrations/0082_platform_migration.sql +33 -0
  1000. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  1001. package/src/migrations/0084_org_owned_items.sql +85 -0
  1002. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  1003. package/src/migrations/0086_org_layering.sql +30 -0
  1004. package/src/migrations/0087_approval_summary.sql +6 -0
  1005. package/src/migrations/0088_environments.sql +80 -0
  1006. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  1007. package/src/migrations/0090_initial_passwords.sql +27 -0
  1008. package/src/migrations/0091_account_time_zone.sql +4 -0
  1009. package/src/migrations/0092_tools_default_on.sql +27 -0
  1010. package/src/migrations/0093_connected_environments.sql +37 -0
  1011. package/src/migrations/0094_environment_paths_idx.sql +7 -0
  1012. package/src/migrations/0095_environment_files_resets.sql +5 -0
  1013. package/src/migrations/0096_environment_demoted_default.sql +18 -0
  1014. package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
  1015. package/src/migrations/0098_single_provider_running_first.sql +41 -0
  1016. package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
  1017. package/src/migrations/0100_catalog_files.sql +13 -0
  1018. package/src/migrations/0101_marketplace_icons.sql +32 -0
  1019. package/src/migrations/0102_themes.sql +64 -0
  1020. package/src/migrations/0103_ui_theme_setting.sql +7 -0
  1021. package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
  1022. package/src/migrations/0105_devices_rename.sql +136 -0
  1023. package/src/migrations/0106_setup_guides_v2.sql +10 -0
  1024. package/src/migrations/0107_extension_client_builds.sql +50 -0
  1025. package/src/migrations/0108_question_skipped.sql +6 -0
  1026. package/src/migrations/0109_audit_platform_idx.sql +5 -0
  1027. package/src/migrations/0110_usage_time_idx.sql +8 -0
  1028. package/src/migrations/0111_agent_skill_sharing.sql +22 -0
  1029. package/src/migrations/0112_skill_share_requests.sql +4 -0
  1030. package/dist/catalog/upgrade-targets.d.ts +0 -56
  1031. package/dist/catalog/upgrade-targets.js +0 -90
  1032. package/dist/conversations/sandbox-status.d.ts +0 -24
  1033. package/dist/conversations/sandbox-status.js +0 -52
  1034. package/dist/extensions/org-config.controller.d.ts +0 -24
  1035. package/dist/extensions/org-config.controller.js +0 -62
  1036. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  1037. package/dist/tools/builtins/sandbox/names.js +0 -20
  1038. package/dist/tools/builtins/skill-write.d.ts +0 -59
  1039. package/dist/tools/builtins/skill-write.js +0 -244
@@ -8,6 +8,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
10
  import { randomUUID } from "node:crypto";
11
+ import { parseToolKey } from "@capybara-hq/plugin-sdk";
11
12
  import { Inject, Injectable } from "@nestjs/common";
12
13
  import { sql } from "kysely";
13
14
  import { ApiError } from "../errors.js";
@@ -16,22 +17,48 @@ import { audit } from "../identity/audit.js";
16
17
  import { KernelDb } from "../infra/database/kernel-db.js";
17
18
  import { TransactionHost } from "../infra/database/transaction-host.js";
18
19
  import { Transactional } from "../infra/database/transactional.decorator.js";
19
- import { KERNEL_LOGGER } from "../infra/tokens.js";
20
20
  import { rejectAnonymousGuest } from "../orgs/members.service.js";
21
21
  import { OrgLock } from "../orgs/org-lock.js";
22
- import { roleAtLeast } from "../orgs/roles.js";
22
+ import { can, roleAtLeast } from "../orgs/roles.js";
23
23
  import { ProviderRegistry } from "../runtime/providers.js";
24
- import { SandboxJobs } from "../sandbox/jobs.js";
25
24
  import { SkillChangesService } from "../skills/changes.service.js";
26
25
  import { assertOrgSkills, assertPinnedSkills } from "../skills/skills.service.js";
26
+ import { legacyKeySaveText } from "../tools/legacy-keys.js";
27
27
  import { ToolRegistry } from "../tools/registry.js";
28
28
  import { AgentLookup, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
29
- import { normalizeStoredDefinition, paramIssues, SUBAGENT_NAME_RE, SUBAGENT_ROSTER_MAX, } from "./definition.js";
29
+ import { canonicalDisabledTools, normalizeStoredDefinition, paramIssues, SUBAGENT_NAME_RE, SUBAGENT_ROSTER_MAX, withoutRemovedBuiltinPolicies, } from "./definition.js";
30
+ import { deriveInstructions } from "./instruction-files.js";
31
+ import { PendingConnectorRequests } from "./pending-connector-requests.js";
32
+ import { randomPreset } from "./profile.js";
33
+ import { loadTemplates, templateTypeOf } from "./templates.js";
30
34
  export { AGENT_VISIBILITIES, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
31
35
  export { paramIssues, SUBAGENT_ROSTER_MAX } from "./definition.js";
32
- /** 删除 agent 时每个销毁任务带的对话数。 */
33
- const SANDBOX_DESTROY_BATCH = 500;
36
+ /**
37
+ * The definition with its description (run context spec §3.5): `given` when the save gives one
38
+ * (trimmed; empty removes it), else `kept` (the current version's).
39
+ */
40
+ function withDescription(definition, given, kept) {
41
+ const { description: _drop, ...rest } = definition;
42
+ const next = given !== undefined ? given.trim() : kept;
43
+ return next === undefined || next === "" ? rest : { ...rest, description: next };
44
+ }
45
+ /** A new agent has no id to bind an upload to yet: a client can only choose a preset on create. */
46
+ export function assertProfileWritable(profile) {
47
+ if (profile?.avatar?.kind === "upload") {
48
+ throw new ApiError("validation_failed", "Choose a preset avatar when creating an agent; upload one afterwards", [{ path: "avatar.kind", message: "upload is not supported on create" }]);
49
+ }
50
+ }
34
51
  const notFound = () => new ApiError("agent.not_found", "Agent not found");
52
+ /** A per-operation policy key of the `Platform` tool (Platform tool spec §6.2). */
53
+ const PLATFORM_POLICY_KEY = /^Platform:[a-z][a-z-]*\.[a-z][a-z-]*$/;
54
+ /**
55
+ * May `toolPolicies` hold this key: one of the agent's tool keys, or `Platform:<operation>` when
56
+ * `Platform` is among them (an unknown operation id is kept: a removed operation's policy is
57
+ * harmless).
58
+ */
59
+ function isToolPolicyKey(key, toolKeys) {
60
+ return toolKeys.has(key) || (toolKeys.has("Platform") && PLATFORM_POLICY_KEY.test(key));
61
+ }
35
62
  /** 键排序后的 JSON:jsonb 不保留键顺序,比较定义是否变化时用。 */
36
63
  function canonical(v) {
37
64
  if (Array.isArray(v))
@@ -44,12 +71,43 @@ function canonical(v) {
44
71
  }
45
72
  return JSON.stringify(v);
46
73
  }
74
+ /**
75
+ * The pending connectors of a saved definition (ruling P4-6): absent from the request = the current
76
+ * version's (an editor that does not know them never drops them); given = a subset of the current
77
+ * ones, unchanged (only creating from a template adds them, only binding resolves them); `[]`
78
+ * removes them all. Another entry → 400 `validation_failed` at `pendingConnectors.<i>`.
79
+ */
80
+ export function keepPendingConnectors(definition, given, current) {
81
+ const { pendingConnectors: _given, ...rest } = definition;
82
+ const next = given ?? current ?? [];
83
+ if (given !== undefined) {
84
+ const known = new Map((current ?? []).map((c) => [c.key, canonical(c)]));
85
+ const details = given.flatMap((c, i) => known.get(c.key) === canonical(c)
86
+ ? []
87
+ : [
88
+ {
89
+ path: `pendingConnectors.${i}`,
90
+ message: "pending connectors come only from a template; keep or remove them",
91
+ },
92
+ ]);
93
+ if (details.length > 0) {
94
+ throw new ApiError("validation_failed", "Invalid pending connectors", details);
95
+ }
96
+ }
97
+ return next.length > 0 ? { ...rest, pendingConnectors: [...next] } : rest;
98
+ }
99
+ /** `definition` with `disabledTools` in its canonical form (tools default-on spec §2). */
100
+ function withCanonicalTools(definition) {
101
+ return { ...definition, disabledTools: canonicalDisabledTools(definition.disabledTools ?? []) };
102
+ }
47
103
  /**
48
104
  * Checks `subagents` of an agent definition in the caller's transaction (spec §5.2); throws 400
49
105
  * `agent.subagents_invalid` with one detail per problem (`{ reason, path, value? }`):
50
- * - `not_found`: a template id that is not a live agent template of the org;
106
+ * - `not_found`: a template id that is not a usable agent template of the org (its own, a linked
107
+ * copy, or a platform template on in the org);
51
108
  * - `invalid_name`: an inline name or `agents[].as` outside {@link SUBAGENT_NAME_RE}, or
52
- * `general-purpose`; `duplicate`: a roster type listed twice (a template id twice included);
109
+ * `general-purpose`; `duplicate`: a roster type listed twice (a template id twice included, a
110
+ * bare template type equal to an inline name, a template typed `general-purpose`);
53
111
  * - `tool_not_selected`: an inline template's `tools`, `disallowedTools` or `toolPolicies` key that
54
112
  * is not a tool key of this agent (`toolKeys`, from `ToolRegistry.checkRefs`);
55
113
  * - `skill_not_selected`: an inline skill id that is neither in `skills.orgSkills` nor a live
@@ -67,8 +125,13 @@ export async function assertSubagents(t, a) {
67
125
  if (sub === undefined)
68
126
  return;
69
127
  const details = [];
70
- const add = (reason, path, value) => {
71
- details.push({ reason, path, ...(value !== undefined && { value }) });
128
+ const add = (reason, path, value, message) => {
129
+ details.push({
130
+ reason,
131
+ path,
132
+ ...(value !== undefined && { value }),
133
+ ...(message !== undefined && { message }),
134
+ });
72
135
  };
73
136
  const types = new Set(sub.general === false ? [] : ["general-purpose"]);
74
137
  const claim = (type, path) => {
@@ -86,24 +149,44 @@ export async function assertSubagents(t, a) {
86
149
  const templates = sub.templates ?? [];
87
150
  const keptTemplates = new Set(a.kept?.templates ?? []);
88
151
  const ids = [...new Set(templates)];
89
- // every listed template, deleted ones included (a kept one may have been uninstalled since)
90
- const rows = new Map(ids.length === 0
91
- ? []
92
- : (await t
93
- .selectFrom("agent_templates")
94
- .select(["id", "name", "plugin_name", "deleted_at"])
95
- .where("org_id", "=", a.orgId)
96
- .where("id", "in", ids)
97
- .execute()).map((r) => [r.id, r]));
152
+ // usable templates (the org's, linked copies, platform templates on in the org) by id
153
+ const usable = await loadTemplates(t, a.orgId, ids);
154
+ // kept ids that are no longer usable: their type from the stored row, deleted or off included
155
+ const gone = ids.filter((id) => !usable.has(id) && keptTemplates.has(id));
156
+ const goneTypes = new Map();
157
+ if (gone.length > 0) {
158
+ const [orgRows, platformRows] = await Promise.all([
159
+ t
160
+ .selectFrom("agent_templates")
161
+ .select(["id", "name", "plugin_name"])
162
+ .where("org_id", "=", a.orgId)
163
+ .where("id", "in", gone)
164
+ .execute(),
165
+ t
166
+ .selectFrom("platform_agent_templates")
167
+ .select(["id", "name", "plugin_name"])
168
+ .where("id", "in", gone)
169
+ .execute(),
170
+ ]);
171
+ for (const r of [...platformRows, ...orgRows]) {
172
+ goneTypes.set(r.id, templateTypeOf(r.plugin_name, r.name));
173
+ }
174
+ }
98
175
  templates.forEach((id, i) => {
99
176
  const path = `subagents.templates.${i}`;
100
- const row = rows.get(id);
101
- if (!keptTemplates.has(id) && (row === undefined || row.deleted_at !== null)) {
177
+ const row = usable.get(id);
178
+ if (!keptTemplates.has(id) && row === undefined) {
102
179
  add("not_found", path, id);
103
180
  return;
104
181
  }
105
- // claimed by its roster type (`<plugin>:<name>`, roster.ts templateType), so nothing shadows it
106
- claim(row === undefined ? `template:${id}` : `${row.plugin_name}:${row.name}`, path);
182
+ // claimed by its roster type (`<plugin>:<name>`, or a bare `<name>` without a plugin;
183
+ // roster.ts templateType), so nothing shadows it; `general-purpose` is reserved
184
+ const type = row === undefined
185
+ ? (goneTypes.get(id) ?? `template:${id}`)
186
+ : templateTypeOf(row.plugin, row.name);
187
+ if (type === "general-purpose" && sub.general === false)
188
+ add("duplicate", path, type);
189
+ claim(type, path);
107
190
  });
108
191
  const inline = sub.inline ?? [];
109
192
  const selected = new Set(a.definition.skills?.orgSkills ?? []);
@@ -123,16 +206,21 @@ export async function assertSubagents(t, a) {
123
206
  const base = `subagents.inline.${i}`;
124
207
  name(x.name, `${base}.name`);
125
208
  const tool = (key, path) => {
126
- if (!a.toolKeys.has(key))
127
- add("tool_not_selected", path, key);
209
+ if (a.toolKeys.has(key))
210
+ return;
211
+ // an rc key names its current key(s) (tool naming spec §8.3)
212
+ const renamed = legacyKeySaveText(key, a.toolKeys);
213
+ add("tool_not_selected", path, key, renamed ?? undefined);
128
214
  };
129
215
  for (const [j, key] of (x.tools ?? []).entries())
130
216
  tool(key, `${base}.tools.${j}`);
131
217
  for (const [j, key] of (x.disallowedTools ?? []).entries()) {
132
218
  tool(key, `${base}.disallowedTools.${j}`);
133
219
  }
134
- for (const key of Object.keys(x.toolPolicies ?? {}))
135
- tool(key, `${base}.toolPolicies.${key}`);
220
+ for (const key of Object.keys(x.toolPolicies ?? {})) {
221
+ if (!isToolPolicyKey(key, a.toolKeys))
222
+ tool(key, `${base}.toolPolicies.${key}`);
223
+ }
136
224
  (x.skills ?? []).forEach((id, j) => {
137
225
  if (!selected.has(id) && !own.has(id))
138
226
  add("skill_not_selected", `${base}.skills.${j}`, id);
@@ -167,7 +255,9 @@ export async function assertSubagents(t, a) {
167
255
  if (count > SUBAGENT_ROSTER_MAX)
168
256
  add("too_many", "subagents");
169
257
  if (details.length > 0) {
170
- throw new ApiError("agent.subagents_invalid", `Invalid sub-agents: ${details.map((d) => `${d.path} (${d.reason})`).join(", ")}`, details);
258
+ throw new ApiError("agent.subagents_invalid", `Invalid sub-agents: ${details
259
+ .map((d) => `${d.path} (${d.reason}${d.message === undefined ? "" : `: ${d.message}`})`)
260
+ .join(", ")}`, details);
171
261
  }
172
262
  }
173
263
  /**
@@ -181,48 +271,65 @@ let AgentsService = class AgentsService {
181
271
  skillChanges;
182
272
  orgLock;
183
273
  providers;
184
- sandboxJobs;
185
- log;
186
274
  txHost;
187
275
  evalBudget;
276
+ setupRequests;
188
277
  constructor(db, lookup, tools,
189
- /** 删除 agent 时取消它待处理的技能改动(T15)。 */
278
+ /**
279
+ * Cancels the agent's pending skill requests: all of them when it is deleted, share requests
280
+ * when its owner changes.
281
+ */
190
282
  skillChanges,
191
283
  /** The org row lock (orgs/org-lock.ts): joins the caller's transaction. */
192
284
  orgLock,
193
285
  /** Resolves the agent's models (and their parameter declarations) when it is saved. */
194
- providers,
195
- /**
196
- * The sandbox destruction after a delete (内核投递一次性维护任务 `sandbox-destroy-for`,worker
197
- * 在锁内逐个销毁,幂等).
198
- */
199
- sandboxJobs, log, txHost,
286
+ providers, txHost,
200
287
  /** Cancels the deleted agent's running eval runs (in the delete's transaction). */
201
- evalBudget) {
288
+ evalBudget,
289
+ /** Settles the agent's connector setup request when its pending connectors change (P4-7). */
290
+ setupRequests) {
202
291
  this.db = db;
203
292
  this.lookup = lookup;
204
293
  this.tools = tools;
205
294
  this.skillChanges = skillChanges;
206
295
  this.orgLock = orgLock;
207
296
  this.providers = providers;
208
- this.sandboxJobs = sandboxJobs;
209
- this.log = log;
210
297
  this.txHost = txHost;
211
298
  this.evalBudget = evalBudget;
299
+ this.setupRequests = setupRequests;
212
300
  }
213
301
  /**
214
- * 校验工具引用与工具策略:引用的内置 / 插件 / 连接器工具必须存在(见 `ToolRegistry.checkRefs`);
215
- * `toolPolicies` 的键必须是这些引用产生的工具 key(取值只能收紧,已由 schema 保证)。
216
- * 不合法 → `validation_failed`,path 为 `tools.<i>` / `toolPolicies.<key>`。
302
+ * Checks the turned-off tools and the policies (tools default-on spec §2): `disabledTools` must
303
+ * name existing builtins, extensions and connectors (`ToolRegistry.checkDisabled`); `toolPolicies`
304
+ * keys must be tools the agent could have, on or off (values only tighten, by the schema); a
305
+ * sub-agent's key filter is never saved. Invalid → `validation_failed` at `disabledTools.<i>` /
306
+ * `toolPolicies.<key>` / `subagentTools`. The list is stored in canonical form.
217
307
  */
218
- async checkTools(orgId, def) {
219
- const { keys, issues } = await this.tools.checkRefs(orgId, def.tools);
308
+ async checkTools(orgId, def, kept = []) {
309
+ const { keys, issues } = await this.tools.checkDisabled(orgId, def.disabledTools ?? [], kept);
220
310
  const details = [...issues];
221
- for (const key of Object.keys(def.toolPolicies)) {
222
- if (!keys.has(key)) {
311
+ if (def.subagentTools !== undefined) {
312
+ details.push({
313
+ path: "subagentTools",
314
+ message: "subagentTools is set only on a sub-agent's definition at dispatch",
315
+ });
316
+ }
317
+ for (const [key, policy] of Object.entries(def.toolPolicies)) {
318
+ // `allow` counts only for a connector tool (decision 2026-11-09): elsewhere a policy only
319
+ // tightens, so an `allow` there is refused rather than kept as a no-op
320
+ if (policy === "allow" && parseToolKey(key)?.kind !== "connector") {
321
+ details.push({
322
+ path: `toolPolicies.${key}`,
323
+ message: `"allow" applies only to a connector's tools; "${key}" can only be tightened (ask or deny)`,
324
+ });
325
+ continue;
326
+ }
327
+ if (!isToolPolicyKey(key, keys)) {
328
+ // an rc key (tool naming spec §8.3): saving writes current keys only, so name them
329
+ const renamed = legacyKeySaveText(key, keys);
223
330
  details.push({
224
331
  path: `toolPolicies.${key}`,
225
- message: `"${key}" is not a tool of this agent`,
332
+ message: renamed ?? `"${key}" is not a tool of this agent`,
226
333
  });
227
334
  }
228
335
  }
@@ -232,13 +339,32 @@ let AgentsService = class AgentsService {
232
339
  return keys;
233
340
  }
234
341
  /**
235
- * 校验主模型与兜底都可解析,并用各自模型的参数声明严格校验 `modelParams` / `fallbackParams`
342
+ * The current version's `disabledTools` (empty for an agent that is not there: the update's own
343
+ * checks report that): entries kept from it are not re-checked, so a connector deleted or an
344
+ * extension uninstalled later never blocks other edits.
345
+ */
346
+ async keptDisabled(orgId, agentId) {
347
+ const row = await this.db.db
348
+ .selectFrom("agents")
349
+ .innerJoin("agent_versions", (j) => j
350
+ .onRef("agent_versions.agent_id", "=", "agents.id")
351
+ .onRef("agent_versions.version", "=", "agents.current_version"))
352
+ .select("agent_versions.definition")
353
+ .where("agents.id", "=", agentId)
354
+ .where("agents.org_id", "=", orgId)
355
+ .executeTakeFirst();
356
+ return row === undefined ? [] : (normalizeStoredDefinition(row.definition).disabledTools ?? []);
357
+ }
358
+ /**
359
+ * 校验主模型与兜底都可解析:enabled `chat` models in the org (`resolve`'s default kind; a model the
360
+ * platform or the org disabled, or an embedding model → 400 `agent.model_unavailable`, spec B
361
+ * §5.3),并用各自模型的参数声明严格校验 `modelParams` / `fallbackParams`
236
362
  * (没有兜底时 `fallbackParams` 必须为空);不合法 → `validation_failed`,details 逐键点名。返回提示。
237
363
  */
238
- async checkModels(def) {
364
+ async checkModels(orgId, def) {
239
365
  const registry = this.providers;
240
- const main = await registry.resolve(def.model);
241
- const fallback = def.fallback === null ? null : await registry.resolve(def.fallback);
366
+ const main = await registry.resolve(orgId, def.model);
367
+ const fallback = def.fallback === null ? null : await registry.resolve(orgId, def.fallback);
242
368
  const details = [
243
369
  ...paramIssues("modelParams", main.info.parameters, def.modelParams),
244
370
  ...paramIssues("fallbackParams", fallback?.info.parameters ?? [], def.fallbackParams),
@@ -279,19 +405,46 @@ let AgentsService = class AgentsService {
279
405
  * 新建 agent(版本 1):在组织行锁内授权 `agents.create`;主模型与兜底都必须可解析
280
406
  * (`agent.model_unavailable`);兜底与主模型同一供应商只提示 `fallback_same_provider`。
281
407
  */
282
- async create(orgId, actorAccountId, input, actorTokenId) {
408
+ async create(orgId, actorAccountId, request, actorTokenId, auditDetail) {
409
+ const { agent, warnings } = await this.createChecked(orgId, actorAccountId, request, null, actorTokenId, auditDetail);
410
+ return { agent, warnings };
411
+ }
412
+ /**
413
+ * Creates an agent from a planned template definition (rulings P4-3, P4-8): {@link create}'s
414
+ * checks, plus, under the org row lock, 403 `agent.visibility_forbidden` when the visibility is
415
+ * not `private` and the creator lacks `agents.manage`; the provenance columns are written once.
416
+ * Returns the creator's role read under the lock (the caller decides on the pending connector
417
+ * request after the commit).
418
+ */
419
+ createFromTemplate(orgId, actorAccountId, request, template, actorTokenId, auditDetail) {
420
+ return this.createChecked(orgId, actorAccountId, request, template, actorTokenId, auditDetail);
421
+ }
422
+ async createChecked(orgId, actorAccountId, request, template, actorTokenId, auditDetail) {
423
+ // a policy key of a removed builtin (e.g. copied from a template) is dropped, never refused
424
+ const given = withoutRemovedBuiltinPolicies(request.definition);
425
+ const input = {
426
+ ...request,
427
+ // run context spec §3.5: version 1 carries the description (the profile's when the
428
+ // definition gives none)
429
+ definition: withCanonicalTools(withDescription(deriveInstructions(given, null), given.description ?? request.profile?.description, undefined)),
430
+ };
283
431
  // 先解析模型(可能访问供应商),不在持有组织行锁时做
284
- const warnings = await this.checkModels(input.definition);
432
+ const warnings = await this.checkModels(orgId, input.definition);
285
433
  const toolKeys = await this.checkTools(orgId, input.definition);
286
434
  if (input.visibility !== "members" && (input.memberIds?.length ?? 0) > 0) {
287
435
  throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
288
436
  }
289
- const agent = await this.createIn(orgId, actorAccountId, input, toolKeys, actorTokenId);
290
- return { agent, warnings };
437
+ assertProfileWritable(input.profile);
438
+ const { agent, role } = await this.createIn(orgId, actorAccountId, input, toolKeys, template, actorTokenId, auditDetail);
439
+ return { agent, warnings, role };
291
440
  }
292
- async createIn(orgId, actorAccountId, input, toolKeys, actorTokenId) {
441
+ async createIn(orgId, actorAccountId, input, toolKeys, template, actorTokenId, auditDetail) {
293
442
  const t = this.db.db;
294
- await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
443
+ const { role } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
444
+ // ruling P4-3: a member creates a template agent for themself; sharing it is an admin's call
445
+ if (template !== null && input.visibility !== "private" && !can(role, "agents.manage")) {
446
+ throw new ApiError("agent.visibility_forbidden", "Only an organization admin can create an agent from a template for others; create it private");
447
+ }
295
448
  await assertOrgSkills(t, orgId, input.definition.skills?.orgSkills ?? []);
296
449
  await assertPinnedSkills(t, orgId, null, input.definition.skills);
297
450
  await assertSubagents(t, {
@@ -313,6 +466,14 @@ let AgentsService = class AgentsService {
313
466
  owner_account_id: actorAccountId,
314
467
  visibility: input.visibility,
315
468
  current_version: 1,
469
+ profile_avatar: JSON.stringify(input.profile?.avatar ?? { kind: "preset", id: randomPreset() }),
470
+ profile_description: input.definition.description ?? "",
471
+ profile_quick_actions: JSON.stringify(input.profile?.quickActions ?? []),
472
+ ...(template !== null && {
473
+ created_from_template_id: template.id,
474
+ created_from_template_version: template.version,
475
+ created_from_template_name: template.name,
476
+ }),
316
477
  })
317
478
  .execute();
318
479
  await t
@@ -331,9 +492,14 @@ let AgentsService = class AgentsService {
331
492
  orgId,
332
493
  action: "agent.created",
333
494
  target: id,
334
- detail: { version: 1, visibility: input.visibility },
495
+ detail: {
496
+ version: 1,
497
+ visibility: input.visibility,
498
+ ...(template !== null && { template: { id: template.id, version: template.version } }),
499
+ ...auditDetail,
500
+ },
335
501
  });
336
- return this.lookup.view(id);
502
+ return { agent: await this.lookup.view(id), role };
337
503
  }
338
504
  /**
339
505
  * 锁组织行并复核发起人,再锁 agent 行:发起人须仍具备 `agents.create`(member 以上),且是负责人或组织管理员以上;
@@ -342,11 +508,29 @@ let AgentsService = class AgentsService {
342
508
  async lockForWrite(orgId, agentId, actorAccountId) {
343
509
  const t = this.db.db;
344
510
  const { role } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
511
+ const agent = await this.lockAgentRow(orgId, agentId);
512
+ if (agent.owner_account_id === actorAccountId || roleAtLeast(role, "admin"))
513
+ return agent;
514
+ const visible = await t
515
+ .selectFrom("agents")
516
+ .select("id")
517
+ .where("id", "=", agentId)
518
+ .where(visibleTo(actorAccountId))
519
+ .executeTakeFirst();
520
+ if (!visible)
521
+ throw notFound();
522
+ throw new ApiError("forbidden", "Only the agent owner or an organization admin can modify it");
523
+ }
524
+ /**
525
+ * Locks the live agent row of `orgId` (the caller holds the org row lock); missing or deleted →
526
+ * `agent.not_found`.
527
+ */
528
+ async lockAgentRow(orgId, agentId) {
345
529
  // NO KEY UPDATE: a soft delete then appends revert snapshots to conversations; FOR UPDATE would
346
530
  // block the agent foreign key check of an append already holding one of them (40P01)
347
- const agent = await t
531
+ const agent = await this.db.db
348
532
  .selectFrom("agents")
349
- .select(["owner_account_id", "visibility", "current_version"])
533
+ .select(["owner_account_id", "needs_reassignment", "visibility", "current_version"])
350
534
  .where("id", "=", agentId)
351
535
  .where("org_id", "=", orgId)
352
536
  .where("deleted_at", "is", null)
@@ -354,29 +538,44 @@ let AgentsService = class AgentsService {
354
538
  .executeTakeFirst();
355
539
  if (!agent)
356
540
  throw notFound();
357
- if (agent.owner_account_id === actorAccountId || roleAtLeast(role, "admin"))
358
- return agent;
359
- const visible = await t
541
+ return agent;
542
+ }
543
+ /**
544
+ * The platform path's lock (a super admin who need not be a member of the org): finds the live
545
+ * agent's org, locks the org row, then the agent row. A missing or deleted agent, or one of a
546
+ * deleted org → `agent.not_found`. The super admin check is the caller's (`@SuperAdmin()`).
547
+ */
548
+ async lockForPlatform(agentId) {
549
+ const found = await this.db.db
360
550
  .selectFrom("agents")
361
- .select("id")
551
+ .select("org_id")
362
552
  .where("id", "=", agentId)
363
- .where(visibleTo(actorAccountId))
553
+ .where("deleted_at", "is", null)
364
554
  .executeTakeFirst();
365
- if (!visible)
555
+ if (!found)
366
556
  throw notFound();
367
- throw new ApiError("forbidden", "Only the agent owner or an organization admin can modify it");
557
+ const orgId = found.org_id;
558
+ if (!(await this.orgLock.tryLock(orgId)))
559
+ throw notFound();
560
+ return { orgId, agent: await this.lockAgentRow(orgId, agentId) };
368
561
  }
369
562
  /**
370
563
  * 修改 agent:`definition` 变化时写新版本(`current_version + 1`),只改 visibility / memberIds 不产生新版本。
371
564
  * 只有负责人或组织管理员以上可改,在组织行锁内复核。
372
565
  */
373
- async update(orgId, agentId, actorAccountId, patch, actorTokenId) {
374
- const warnings = patch.definition ? await this.checkModels(patch.definition) : [];
375
- const toolKeys = patch.definition ? await this.checkTools(orgId, patch.definition) : null;
376
- const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId);
566
+ async update(orgId, agentId, actorAccountId, request, actorTokenId, auditDetail) {
567
+ // a policy key of a removed builtin (stored before it went) is dropped, never refused
568
+ const patch = request.definition === undefined
569
+ ? request
570
+ : { ...request, definition: withoutRemovedBuiltinPolicies(request.definition) };
571
+ const warnings = patch.definition ? await this.checkModels(orgId, patch.definition) : [];
572
+ const toolKeys = patch.definition
573
+ ? await this.checkTools(orgId, patch.definition, await this.keptDisabled(orgId, agentId))
574
+ : null;
575
+ const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId, auditDetail);
377
576
  return { agent, warnings };
378
577
  }
379
- async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId) {
578
+ async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId, auditDetail) {
380
579
  const t = this.db.db;
381
580
  const before = await this.lockForWrite(orgId, agentId, actorAccountId);
382
581
  if (patch.expectedVersion !== undefined && patch.expectedVersion !== before.current_version) {
@@ -394,26 +593,50 @@ let AgentsService = class AgentsService {
394
593
  .where("agent_id", "=", agentId)
395
594
  .where("version", "=", before.current_version)
396
595
  .executeTakeFirstOrThrow();
596
+ // the prompt: instructionFiles give instructions; a save given neither keeps the current one
597
+ const currentDefinition = normalizeStoredDefinition(current.definition);
598
+ const definition = withCanonicalTools(withDescription(keepPendingConnectors(deriveInstructions(patch.definition, currentDefinition), patch.definition.pendingConnectors, currentDefinition.pendingConnectors), patch.definition.description, currentDefinition.description));
599
+ // the display copy follows every description the save gives (run context spec §3.5)
600
+ if (patch.definition.description !== undefined) {
601
+ await t
602
+ .updateTable("agents")
603
+ .set({ profile_description: definition.description ?? "" })
604
+ .where("id", "=", agentId)
605
+ .execute();
606
+ }
397
607
  // 当前版本已有的技能引用保存时合法,不再核对(被删的技能不挡住其他改动);新加的照常核对
398
608
  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 ?? []);
609
+ await assertOrgSkills(t, orgId, definition.skills?.orgSkills ?? [], kept);
610
+ await assertPinnedSkills(t, orgId, agentId, definition.skills, current.definition.skills?.pinned ?? []);
401
611
  await assertSubagents(t, {
402
612
  orgId,
403
613
  agentId,
404
614
  actorAccountId,
405
- definition: patch.definition,
615
+ definition,
406
616
  toolKeys: toolKeys ?? new Set(),
407
617
  kept: current.definition.subagents,
408
618
  });
409
- if (canonical(current.definition) !== canonical(patch.definition)) {
619
+ if (canonical(current.definition) !== canonical(definition)) {
620
+ // removing pending connectors in the editor narrows or cancels the setup request (P4-T6-3)
621
+ const keys = (definition.pendingConnectors ?? []).map((c) => c.key);
622
+ if (canonical((currentDefinition.pendingConnectors ?? []).map((c) => c.key)) !==
623
+ canonical(keys)) {
624
+ await this.setupRequests.settleIn({
625
+ orgId,
626
+ agentId,
627
+ keys,
628
+ close: "cancelled",
629
+ actor: actorAccountId,
630
+ actorTokenId,
631
+ });
632
+ }
410
633
  toVersion = before.current_version + 1;
411
634
  await t
412
635
  .insertInto("agent_versions")
413
636
  .values({
414
637
  agent_id: agentId,
415
638
  version: toVersion,
416
- definition: JSON.stringify(patch.definition),
639
+ definition: JSON.stringify(definition),
417
640
  created_by: actorAccountId,
418
641
  })
419
642
  .execute();
@@ -442,74 +665,100 @@ let AgentsService = class AgentsService {
442
665
  ...(visibility !== before.visibility && {
443
666
  visibility: { from: before.visibility, to: visibility },
444
667
  }),
668
+ ...auditDetail,
445
669
  },
446
670
  });
447
671
  return this.lookup.view(agentId);
448
672
  }
449
673
  /** 软删除:权限同 update。待处理的技能改动与该 agent 评测集在执行的评测运行一并取消,提交后删除草稿(T15)。 */
450
- async softDelete(orgId, agentId, actorAccountId, actorTokenId) {
451
- const cancelled = await this.softDeleteIn(orgId, agentId, actorAccountId, actorTokenId);
674
+ async softDelete(orgId, agentId, actorAccountId, actorTokenId, auditDetail) {
675
+ const cancelled = await this.softDeleteIn(orgId, agentId, actorAccountId, actorTokenId, auditDetail);
452
676
  await this.skillChanges.finishCancel(orgId, cancelled);
453
- await this.destroySandboxes(orgId, agentId);
454
677
  }
455
- async softDeleteIn(orgId, agentId, actorAccountId, actorTokenId) {
456
- const t = this.db.db;
678
+ async softDeleteIn(orgId, agentId, actorAccountId, actorTokenId, auditDetail) {
457
679
  await this.lockForWrite(orgId, agentId, actorAccountId);
680
+ return this.softDeleteLocked(orgId, agentId, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, auditDetail);
681
+ }
682
+ /**
683
+ * The platform's delete (a super admin who need not be a member of the agent's org): the same
684
+ * effects as {@link softDelete}, under the org row lock, audited `agent.deleted` with
685
+ * `detail.via = "platform"`. A missing or deleted agent, or one of a deleted org →
686
+ * `agent.not_found`. `auditDetail` (a Platform tool write's `viaAgent`) is merged into the
687
+ * detail; `via` stays `"platform"`.
688
+ */
689
+ async softDeleteAsPlatform(agentId, actor, auditDetail) {
690
+ const { orgId, cancelled } = await this.softDeleteAsPlatformIn(agentId, actor, auditDetail);
691
+ await this.skillChanges.finishCancel(orgId, cancelled);
692
+ }
693
+ async softDeleteAsPlatformIn(agentId, actor, auditDetail) {
694
+ const { orgId } = await this.lockForPlatform(agentId);
695
+ const cancelled = await this.softDeleteLocked(orgId, agentId, actor, {
696
+ ...auditDetail,
697
+ via: "platform",
698
+ });
699
+ return { orgId, cancelled };
700
+ }
701
+ /** The delete itself; the caller holds the org row and agent row locks. */
702
+ async softDeleteLocked(orgId, agentId, actor, auditDetail) {
703
+ const t = this.db.db;
704
+ const { accountId: actorAccountId, tokenId: actorTokenId } = actor;
458
705
  await t
459
706
  .updateTable("agents")
460
707
  .set({ deleted_at: sql `now()`, updated_at: sql `now()` })
461
708
  .where("id", "=", agentId)
462
709
  .execute();
710
+ // the avatar upload is garbage now: the cleanup job deletes it (and its object) once expired
711
+ await t
712
+ .updateTable("attachments")
713
+ .set({ expires_at: sql `now()` })
714
+ .where("agent_id", "=", agentId)
715
+ .where("purpose", "=", "agent-avatar")
716
+ .execute();
463
717
  await audit(t, {
464
718
  actorAccountId,
465
719
  ...(actorTokenId !== undefined && { actorTokenId }),
466
720
  orgId,
467
721
  action: "agent.deleted",
468
722
  target: agentId,
723
+ ...(auditDetail !== undefined && { detail: auditDetail }),
724
+ });
725
+ // the agent row stays (soft delete), so its setup request is closed here (P4-T6-3)
726
+ await this.setupRequests.settleIn({
727
+ orgId,
728
+ agentId,
729
+ keys: [],
730
+ close: "cancelled",
731
+ actor: actorAccountId,
732
+ actorTokenId,
469
733
  });
470
734
  // 评测集的 agent 删除后其评测运行不再花钱:显式取消(审计带原因)
471
735
  await this.evalBudget.cancelRuns({ orgId, agentId }, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "agent_deleted");
472
736
  // joins this transaction (mandatory: it relies on the agent row lock taken above)
473
737
  return this.skillChanges.cancelPendingForAgent(orgId, agentId, actorAccountId, "agent_deleted", actorTokenId);
474
738
  }
475
- /** 提交后尽力而为:投递销毁这个 agent 各对话还没销毁的沙箱(失败只记日志,留给不活跃销毁扫描)。 */
476
- async destroySandboxes(orgId, agentId) {
477
- try {
478
- const rows = await this.db
479
- .selectFrom("sandboxes as s")
480
- .innerJoin("conversations as c", "c.id", "s.conversation_id")
481
- .select("s.conversation_id")
482
- .where("c.org_id", "=", orgId)
483
- .where("c.agent_id", "=", agentId)
484
- .where("s.status", "<>", "destroyed")
485
- .execute();
486
- const ids = rows.map((r) => r.conversation_id);
487
- for (let i = 0; i < ids.length; i += SANDBOX_DESTROY_BATCH) {
488
- await this.sandboxJobs.destroy(ids.slice(i, i + SANDBOX_DESTROY_BATCH));
489
- }
490
- }
491
- catch (err) {
492
- this.log.warn("cannot schedule sandbox destruction for a deleted agent", { agentId, err });
493
- }
494
- }
495
739
  /**
496
740
  * 重新指派负责人(`agents.manage`,admin):在组织行锁内授权;agent 不存在 / 已删除 → `agent.not_found`;
497
741
  * 新负责人不是该组织成员 → `member.not_found`;是匿名访客 → `member.anonymous_guest`。
498
742
  * 清除 `needs_reassignment`,审计 `agent.owner_changed`。
499
743
  */
500
744
  async reassignOwner(orgId, agentId, newOwnerId, actorAccountId, actorTokenId) {
501
- const t = this.db.db;
502
745
  await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.manage");
503
- const agent = await t
504
- .selectFrom("agents")
505
- .select(["owner_account_id", "needs_reassignment"])
506
- .where("id", "=", agentId)
507
- .where("org_id", "=", orgId)
508
- .where("deleted_at", "is", null)
509
- .forUpdate()
510
- .executeTakeFirst();
511
- if (!agent)
512
- throw notFound();
746
+ const agent = await this.lockAgentRow(orgId, agentId);
747
+ return this.reassignOwnerLocked(orgId, agentId, agent, newOwnerId, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, undefined);
748
+ }
749
+ /**
750
+ * The platform's owner transfer (a super admin who need not be a member of the agent's org):
751
+ * the same checks and effects as {@link reassignOwner} (the new owner is a member of the agent's
752
+ * org and not its anonymous guest), audited with `detail.via = "platform"`. A missing or deleted
753
+ * agent, or one of a deleted org → `agent.not_found`.
754
+ */
755
+ async reassignOwnerAsPlatform(agentId, newOwnerId, actor) {
756
+ const { orgId, agent } = await this.lockForPlatform(agentId);
757
+ return this.reassignOwnerLocked(orgId, agentId, agent, newOwnerId, actor, { via: "platform" });
758
+ }
759
+ /** The owner transfer itself; the caller holds the org row and agent row locks. */
760
+ async reassignOwnerLocked(orgId, agentId, agent, newOwnerId, actor, auditDetail) {
761
+ const t = this.db.db;
513
762
  const member = await t
514
763
  .selectFrom("memberships")
515
764
  .select("role")
@@ -524,9 +773,14 @@ let AgentsService = class AgentsService {
524
773
  .set({ owner_account_id: newOwnerId, needs_reassignment: false, updated_at: sql `now()` })
525
774
  .where("id", "=", agentId)
526
775
  .execute();
776
+ // the new owner hears about the agent's connector setup request (P4-T6-4)
777
+ await this.setupRequests.retargetIn([agentId], newOwnerId);
778
+ // the previous owner's asks to share the agent's skills lapse (the new owner did not ask);
779
+ // a share request has no draft or trial, so nothing is left to clean up after the commit
780
+ await this.skillChanges.cancelPendingForAgent(orgId, agentId, actor.accountId, "owner_changed", actor.tokenId, ["share"]);
527
781
  await audit(t, {
528
- actorAccountId,
529
- ...(actorTokenId !== undefined && { actorTokenId }),
782
+ actorAccountId: actor.accountId,
783
+ ...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
530
784
  orgId,
531
785
  action: "agent.owner_changed",
532
786
  target: agentId,
@@ -534,10 +788,29 @@ let AgentsService = class AgentsService {
534
788
  from: agent.owner_account_id,
535
789
  to: newOwnerId,
536
790
  neededReassignment: agent.needs_reassignment,
791
+ ...auditDetail,
537
792
  },
538
793
  });
539
794
  return this.lookup.view(agentId);
540
795
  }
796
+ /**
797
+ * `views` with `createdFrom.available` set (ruling P4-8): whether each recorded template is
798
+ * still usable in the org. One template read for all of them; only the agents API calls it.
799
+ */
800
+ async withTemplateLinks(orgId, views) {
801
+ const ids = [
802
+ ...new Set(views.flatMap((v) => (v.createdFrom === null ? [] : [v.createdFrom.templateId]))),
803
+ ];
804
+ if (ids.length === 0)
805
+ return views;
806
+ const usable = await loadTemplates(this.db.db, orgId, ids);
807
+ return views.map((v) => v.createdFrom === null
808
+ ? v
809
+ : {
810
+ ...v,
811
+ createdFrom: { ...v.createdFrom, available: usable.has(v.createdFrom.templateId) },
812
+ });
813
+ }
541
814
  /** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
542
815
  get(orgId, agentId, viewerAccountId) {
543
816
  return this.lookup.get(orgId, agentId, viewerAccountId);
@@ -584,15 +857,33 @@ __decorate([
584
857
  __decorate([
585
858
  Transactional({ propagation: "mandatory" })
586
859
  ], AgentsService.prototype, "lockForWrite", null);
860
+ __decorate([
861
+ Transactional({ propagation: "mandatory" })
862
+ ], AgentsService.prototype, "lockAgentRow", null);
863
+ __decorate([
864
+ Transactional({ propagation: "mandatory" })
865
+ ], AgentsService.prototype, "lockForPlatform", null);
587
866
  __decorate([
588
867
  Transactional()
589
868
  ], AgentsService.prototype, "updateIn", null);
590
869
  __decorate([
591
870
  Transactional()
592
871
  ], AgentsService.prototype, "softDeleteIn", null);
872
+ __decorate([
873
+ Transactional()
874
+ ], AgentsService.prototype, "softDeleteAsPlatformIn", null);
875
+ __decorate([
876
+ Transactional({ propagation: "mandatory" })
877
+ ], AgentsService.prototype, "softDeleteLocked", null);
593
878
  __decorate([
594
879
  Transactional()
595
880
  ], AgentsService.prototype, "reassignOwner", null);
881
+ __decorate([
882
+ Transactional()
883
+ ], AgentsService.prototype, "reassignOwnerAsPlatform", null);
884
+ __decorate([
885
+ Transactional({ propagation: "mandatory" })
886
+ ], AgentsService.prototype, "reassignOwnerLocked", null);
596
887
  AgentsService = __decorate([
597
888
  Injectable(),
598
889
  __param(0, Inject(KernelDb)),
@@ -601,9 +892,8 @@ AgentsService = __decorate([
601
892
  __param(3, Inject(SkillChangesService)),
602
893
  __param(4, Inject(OrgLock)),
603
894
  __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))
895
+ __param(6, Inject(TransactionHost)),
896
+ __param(7, Inject(EvalBudget)),
897
+ __param(8, Inject(PendingConnectorRequests))
608
898
  ], AgentsService);
609
899
  export { AgentsService };