@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.6

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 (534) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +51 -14
  3. package/dist/admin/admin.controller.js +60 -19
  4. package/dist/admin/extensions.controller.d.ts +16 -2
  5. package/dist/admin/extensions.controller.js +26 -6
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +16 -0
  13. package/dist/agents/agent-lookup.js +11 -0
  14. package/dist/agents/agents.controller.d.ts +76 -1
  15. package/dist/agents/agents.controller.js +90 -11
  16. package/dist/agents/agents.module.d.ts +4 -1
  17. package/dist/agents/agents.module.js +32 -6
  18. package/dist/agents/agents.service.d.ts +54 -23
  19. package/dist/agents/agents.service.js +180 -76
  20. package/dist/agents/definition.d.ts +49 -0
  21. package/dist/agents/definition.js +45 -0
  22. package/dist/agents/from-template.d.ts +106 -0
  23. package/dist/agents/from-template.js +649 -0
  24. package/dist/agents/from-template.service.d.ts +60 -0
  25. package/dist/agents/from-template.service.js +161 -0
  26. package/dist/agents/models.controller.d.ts +34 -5
  27. package/dist/agents/models.controller.js +50 -6
  28. package/dist/agents/org-templates.d.ts +176 -0
  29. package/dist/agents/org-templates.js +827 -0
  30. package/dist/agents/pending-connector-requests.d.ts +77 -0
  31. package/dist/agents/pending-connector-requests.js +215 -0
  32. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  33. package/dist/agents/pending-connectors.controller.js +91 -0
  34. package/dist/agents/pending-connectors.service.d.ts +62 -0
  35. package/dist/agents/pending-connectors.service.js +282 -0
  36. package/dist/agents/readiness.controller.d.ts +5 -5
  37. package/dist/agents/readiness.controller.js +6 -6
  38. package/dist/agents/templates.controller.d.ts +86 -5
  39. package/dist/agents/templates.controller.js +171 -7
  40. package/dist/agents/templates.d.ts +127 -23
  41. package/dist/agents/templates.js +475 -52
  42. package/dist/background/background.module.js +8 -1
  43. package/dist/background/finish.d.ts +3 -2
  44. package/dist/background/launch-lock.d.ts +4 -3
  45. package/dist/background/launch-lock.js +4 -3
  46. package/dist/background/poll.job.d.ts +9 -6
  47. package/dist/background/poll.job.js +30 -22
  48. package/dist/background/session.d.ts +13 -2
  49. package/dist/background/session.js +13 -0
  50. package/dist/background/stop.d.ts +12 -6
  51. package/dist/background/stop.js +57 -39
  52. package/dist/background/store.d.ts +18 -6
  53. package/dist/background/store.js +12 -6
  54. package/dist/background/tasks.service.d.ts +15 -5
  55. package/dist/background/tasks.service.js +42 -17
  56. package/dist/background/wake-rules.d.ts +27 -18
  57. package/dist/background/wake-rules.js +52 -22
  58. package/dist/background/wake.d.ts +13 -11
  59. package/dist/background/wake.js +20 -14
  60. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  61. package/dist/catalog/admin-catalog.controller.js +213 -42
  62. package/dist/catalog/catalog-content.d.ts +58 -32
  63. package/dist/catalog/catalog-content.js +34 -8
  64. package/dist/catalog/catalog-import.module.d.ts +7 -0
  65. package/dist/catalog/catalog-import.module.js +60 -0
  66. package/dist/catalog/catalog-items.d.ts +111 -7
  67. package/dist/catalog/catalog-items.js +279 -13
  68. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  69. package/dist/catalog/catalog-scope.service.js +1116 -0
  70. package/dist/catalog/catalog.module.d.ts +7 -9
  71. package/dist/catalog/catalog.module.js +41 -31
  72. package/dist/catalog/catalog.service.d.ts +101 -29
  73. package/dist/catalog/catalog.service.js +104 -106
  74. package/dist/catalog/cli.d.ts +11 -1
  75. package/dist/catalog/cli.js +26 -1
  76. package/dist/catalog/component-promotion.d.ts +96 -0
  77. package/dist/catalog/component-promotion.js +395 -0
  78. package/dist/catalog/component-scope.controller.d.ts +152 -0
  79. package/dist/catalog/component-scope.controller.js +287 -0
  80. package/dist/catalog/component-scope.service.d.ts +303 -0
  81. package/dist/catalog/component-scope.service.js +936 -0
  82. package/dist/catalog/component-state.d.ts +174 -0
  83. package/dist/catalog/component-state.js +437 -0
  84. package/dist/catalog/job-ids.d.ts +30 -0
  85. package/dist/catalog/job-ids.js +25 -0
  86. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  87. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  88. package/dist/catalog/marketplaces.controller.js +56 -7
  89. package/dist/catalog/marketplaces.service.d.ts +54 -14
  90. package/dist/catalog/marketplaces.service.js +71 -22
  91. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  92. package/dist/catalog/org-catalog.controller.js +181 -65
  93. package/dist/catalog/org-catalog.service.d.ts +65 -33
  94. package/dist/catalog/org-catalog.service.js +324 -157
  95. package/dist/catalog/org-extension-switch.d.ts +41 -0
  96. package/dist/catalog/org-extension-switch.js +115 -0
  97. package/dist/catalog/org-extension.controller.d.ts +119 -0
  98. package/dist/catalog/org-extension.controller.js +266 -0
  99. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  100. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  101. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  102. package/dist/catalog/org-plugin-uploads.js +116 -0
  103. package/dist/catalog/owned-items.d.ts +184 -0
  104. package/dist/catalog/owned-items.js +789 -0
  105. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  106. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  107. package/dist/catalog/ownership.d.ts +172 -0
  108. package/dist/catalog/ownership.js +326 -0
  109. package/dist/catalog/platform-components.d.ts +221 -0
  110. package/dist/catalog/platform-components.js +761 -0
  111. package/dist/catalog/platform-migration.d.ts +115 -0
  112. package/dist/catalog/platform-migration.js +582 -0
  113. package/dist/catalog/plugin-import.d.ts +178 -34
  114. package/dist/catalog/plugin-import.js +622 -82
  115. package/dist/catalog/plugin-install.d.ts +185 -41
  116. package/dist/catalog/plugin-install.js +758 -126
  117. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  118. package/dist/catalog/plugin-upgrade.js +1147 -1136
  119. package/dist/catalog/request-rules.d.ts +65 -0
  120. package/dist/catalog/request-rules.js +217 -0
  121. package/dist/catalog/requests.service.d.ts +193 -118
  122. package/dist/catalog/requests.service.js +526 -343
  123. package/dist/catalog/reserved-names.d.ts +8 -0
  124. package/dist/catalog/reserved-names.js +42 -0
  125. package/dist/catalog/scope-orgs.d.ts +21 -0
  126. package/dist/catalog/scope-orgs.js +67 -0
  127. package/dist/catalog/scope-state.d.ts +35 -0
  128. package/dist/catalog/scope-state.js +87 -0
  129. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  130. package/dist/catalog/scope-sync-workers.js +29 -0
  131. package/dist/catalog/scope-sync.d.ts +176 -0
  132. package/dist/catalog/scope-sync.js +576 -0
  133. package/dist/catalog/scope.d.ts +42 -0
  134. package/dist/catalog/scope.js +42 -0
  135. package/dist/catalog/unshare.d.ts +22 -0
  136. package/dist/catalog/unshare.js +118 -0
  137. package/dist/channels/actions.js +1 -0
  138. package/dist/channels/cards.js +20 -2
  139. package/dist/channels/channels.module.js +2 -0
  140. package/dist/channels/inbound.d.ts +9 -1
  141. package/dist/channels/inbound.js +67 -5
  142. package/dist/channels/phrases.d.ts +35 -0
  143. package/dist/channels/phrases.js +29 -0
  144. package/dist/config/docs.js +3 -1
  145. package/dist/config/schema.d.ts +10 -2
  146. package/dist/config/schema.js +70 -22
  147. package/dist/conversations/access.d.ts +6 -4
  148. package/dist/conversations/access.js +27 -5
  149. package/dist/conversations/agent-tree.d.ts +46 -0
  150. package/dist/conversations/agent-tree.js +92 -0
  151. package/dist/conversations/conversations.controller.d.ts +43 -18
  152. package/dist/conversations/conversations.controller.js +79 -38
  153. package/dist/conversations/conversations.module.d.ts +1 -1
  154. package/dist/conversations/conversations.module.js +7 -7
  155. package/dist/conversations/conversations.service.d.ts +73 -15
  156. package/dist/conversations/conversations.service.js +115 -35
  157. package/dist/conversations/environment-status.d.ts +24 -0
  158. package/dist/conversations/environment-status.js +71 -0
  159. package/dist/conversations/event-log.d.ts +20 -5
  160. package/dist/conversations/event-log.js +60 -0
  161. package/dist/conversations/events.d.ts +84 -2
  162. package/dist/conversations/events.js +91 -17
  163. package/dist/conversations/queue.service.d.ts +1 -1
  164. package/dist/conversations/queue.service.js +5 -0
  165. package/dist/conversations/titles.d.ts +5 -3
  166. package/dist/conversations/titles.js +21 -8
  167. package/dist/conversations/tree.d.ts +17 -0
  168. package/dist/conversations/tree.js +42 -0
  169. package/dist/ctx/create-ctx.d.ts +20 -1
  170. package/dist/ctx/create-ctx.js +38 -7
  171. package/dist/db/kernel-schema.d.ts +386 -18
  172. package/dist/environments/access.d.ts +41 -0
  173. package/dist/environments/access.js +77 -0
  174. package/dist/environments/conversation-environments.d.ts +61 -0
  175. package/dist/environments/conversation-environments.js +170 -0
  176. package/dist/environments/dto.d.ts +25 -0
  177. package/dist/environments/dto.js +12 -0
  178. package/dist/environments/environments.controller.d.ts +33 -0
  179. package/dist/environments/environments.controller.js +110 -0
  180. package/dist/environments/environments.module.d.ts +8 -0
  181. package/dist/environments/environments.module.js +27 -0
  182. package/dist/environments/environments.service.d.ts +153 -0
  183. package/dist/environments/environments.service.js +541 -0
  184. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  185. package/dist/environments/legacy-cleanup.job.js +141 -0
  186. package/dist/errors.d.ts +85 -2
  187. package/dist/errors.js +85 -2
  188. package/dist/evals/reconstruct.d.ts +18 -9
  189. package/dist/evals/reconstruct.js +26 -7
  190. package/dist/evals/run-replay.d.ts +4 -2
  191. package/dist/evals/run-replay.js +20 -6
  192. package/dist/evals/runs.service.d.ts +2 -1
  193. package/dist/evals/runs.service.js +13 -12
  194. package/dist/evals/step-replay.d.ts +4 -6
  195. package/dist/evals/step-replay.js +4 -3
  196. package/dist/evals/trajectory.service.d.ts +8 -3
  197. package/dist/evals/trajectory.service.js +26 -14
  198. package/dist/evals/worker.d.ts +5 -5
  199. package/dist/evals/worker.js +9 -3
  200. package/dist/extensions/admin-ops.d.ts +36 -10
  201. package/dist/extensions/admin-ops.js +65 -42
  202. package/dist/extensions/admin-view.d.ts +37 -10
  203. package/dist/extensions/admin-view.js +103 -20
  204. package/dist/extensions/bootstrap.d.ts +17 -4
  205. package/dist/extensions/bootstrap.js +70 -9
  206. package/dist/extensions/cli.d.ts +12 -0
  207. package/dist/extensions/cli.js +11 -2
  208. package/dist/extensions/config-hash.d.ts +10 -0
  209. package/dist/extensions/config-hash.js +38 -0
  210. package/dist/extensions/deployment-config.d.ts +28 -5
  211. package/dist/extensions/deployment-config.js +48 -7
  212. package/dist/extensions/effective-config.d.ts +127 -0
  213. package/dist/extensions/effective-config.js +368 -0
  214. package/dist/extensions/extensions.module.js +11 -11
  215. package/dist/extensions/hooks.d.ts +37 -4
  216. package/dist/extensions/hooks.js +82 -16
  217. package/dist/extensions/host.d.ts +24 -10
  218. package/dist/extensions/host.js +49 -54
  219. package/dist/extensions/installs.d.ts +20 -8
  220. package/dist/extensions/installs.js +37 -15
  221. package/dist/extensions/org-config.d.ts +75 -6
  222. package/dist/extensions/org-config.js +184 -32
  223. package/dist/extensions/org-levels.d.ts +37 -0
  224. package/dist/extensions/org-levels.js +71 -0
  225. package/dist/extensions/org-overrides.d.ts +151 -0
  226. package/dist/extensions/org-overrides.js +524 -0
  227. package/dist/extensions/permission-view.d.ts +16 -4
  228. package/dist/extensions/permission-view.js +4 -4
  229. package/dist/extensions/plugin-items.d.ts +21 -0
  230. package/dist/extensions/plugin-items.js +42 -0
  231. package/dist/extensions/point-defaults.d.ts +12 -5
  232. package/dist/extensions/point-defaults.js +37 -9
  233. package/dist/extensions/resolve.d.ts +5 -1
  234. package/dist/extensions/resolve.js +15 -2
  235. package/dist/extensions/state.module.d.ts +9 -0
  236. package/dist/extensions/state.module.js +38 -0
  237. package/dist/files/previewers.d.ts +8 -1
  238. package/dist/files/previewers.js +35 -6
  239. package/dist/http/api.module.js +25 -3
  240. package/dist/http/app.d.ts +11 -2
  241. package/dist/http/app.js +31 -5
  242. package/dist/http/plugin-dispatch.d.ts +4 -1
  243. package/dist/http/plugin-dispatch.js +14 -2
  244. package/dist/identity/accounts.d.ts +29 -29
  245. package/dist/identity/accounts.js +47 -47
  246. package/dist/identity/audit.d.ts +2 -1
  247. package/dist/identity/auth.guard.d.ts +13 -5
  248. package/dist/identity/auth.guard.js +26 -9
  249. package/dist/identity/identity.module.d.ts +1 -1
  250. package/dist/identity/identity.module.js +4 -4
  251. package/dist/identity/me.controller.js +1 -1
  252. package/dist/identity/principal.d.ts +3 -3
  253. package/dist/identity/principal.js +3 -3
  254. package/dist/identity/settings.d.ts +22 -11
  255. package/dist/identity/settings.js +53 -18
  256. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  257. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  258. package/dist/inbox/inbox.module.d.ts +4 -1
  259. package/dist/inbox/inbox.module.js +7 -3
  260. package/dist/inbox/inbox.service.d.ts +62 -3
  261. package/dist/inbox/inbox.service.js +74 -4
  262. package/dist/inbox/org-notices.d.ts +63 -0
  263. package/dist/inbox/org-notices.js +91 -0
  264. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  265. package/dist/inbox/platform-inbox.controller.js +58 -0
  266. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  267. package/dist/inbox/platform-inbox.service.js +263 -0
  268. package/dist/inbox/platform-notices.d.ts +19 -0
  269. package/dist/inbox/platform-notices.js +9 -0
  270. package/dist/index.d.ts +1 -1
  271. package/dist/index.js +1 -1
  272. package/dist/infra/cli/kernel-cli.module.js +9 -1
  273. package/dist/infra/config/kernel-config.service.js +24 -1
  274. package/dist/infra/database/xact-lock.d.ts +1 -1
  275. package/dist/infra/database/xact-lock.js +1 -1
  276. package/dist/infra/events/kernel-events.d.ts +19 -2
  277. package/dist/infra/queue/add-job-once.d.ts +14 -0
  278. package/dist/infra/queue/add-job-once.js +16 -0
  279. package/dist/kernel.module.js +6 -0
  280. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  281. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  282. package/dist/models/embeddings.d.ts +82 -0
  283. package/dist/models/embeddings.js +326 -0
  284. package/dist/models/enablement.controller.d.ts +40 -0
  285. package/dist/models/enablement.controller.js +74 -0
  286. package/dist/models/enablement.d.ts +99 -0
  287. package/dist/models/enablement.js +263 -0
  288. package/dist/models/models.module.d.ts +5 -1
  289. package/dist/models/models.module.js +16 -4
  290. package/dist/models/prices.d.ts +5 -5
  291. package/dist/models/prices.js +4 -4
  292. package/dist/models/purposes.controller.d.ts +6 -4
  293. package/dist/models/purposes.controller.js +13 -7
  294. package/dist/models/purposes.d.ts +37 -12
  295. package/dist/models/purposes.js +63 -17
  296. package/dist/orgs/directory-sync.d.ts +14 -5
  297. package/dist/orgs/directory-sync.js +41 -17
  298. package/dist/orgs/offboarding.d.ts +9 -7
  299. package/dist/orgs/offboarding.js +28 -17
  300. package/dist/orgs/org-lock.d.ts +5 -0
  301. package/dist/orgs/org-lock.js +13 -0
  302. package/dist/orgs/org.guard.d.ts +10 -0
  303. package/dist/orgs/org.guard.js +43 -32
  304. package/dist/orgs/orgs.module.js +3 -0
  305. package/dist/orgs/orgs.service.d.ts +20 -7
  306. package/dist/orgs/orgs.service.js +32 -12
  307. package/dist/orgs/roles.d.ts +1 -1
  308. package/dist/orgs/roles.js +5 -1
  309. package/dist/orgs/settings.controller.d.ts +1 -1
  310. package/dist/orgs/settings.service.d.ts +15 -3
  311. package/dist/orgs/settings.service.js +6 -2
  312. package/dist/overrides.d.ts +3 -0
  313. package/dist/overrides.js +2 -0
  314. package/dist/platform/actor.d.ts +48 -0
  315. package/dist/platform/actor.js +100 -0
  316. package/dist/platform/agent-docs.d.ts +18 -0
  317. package/dist/platform/agent-docs.js +59 -0
  318. package/dist/platform/availability.d.ts +14 -0
  319. package/dist/platform/availability.js +43 -0
  320. package/dist/platform/errors.d.ts +11 -0
  321. package/dist/platform/errors.js +26 -0
  322. package/dist/platform/exclusions.d.ts +12 -0
  323. package/dist/platform/exclusions.js +1405 -0
  324. package/dist/platform/method.d.ts +6 -0
  325. package/dist/platform/method.js +15 -0
  326. package/dist/platform/operation.d.ts +92 -0
  327. package/dist/platform/operation.js +35 -0
  328. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  329. package/dist/platform/ops/agent-templates.ops.js +92 -0
  330. package/dist/platform/ops/agents.ops.d.ts +19 -0
  331. package/dist/platform/ops/agents.ops.js +294 -0
  332. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  333. package/dist/platform/ops/connectors.ops.js +126 -0
  334. package/dist/platform/ops/errors.d.ts +11 -0
  335. package/dist/platform/ops/errors.js +22 -0
  336. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  337. package/dist/platform/ops/extensions.ops.js +116 -0
  338. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  339. package/dist/platform/ops/marketplaces.ops.js +157 -0
  340. package/dist/platform/ops/paging.d.ts +14 -0
  341. package/dist/platform/ops/paging.js +20 -0
  342. package/dist/platform/ops/platform.ops.d.ts +23 -0
  343. package/dist/platform/ops/platform.ops.js +158 -0
  344. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  345. package/dist/platform/ops/plugins.ops.js +377 -0
  346. package/dist/platform/ops/requests.ops.d.ts +14 -0
  347. package/dist/platform/ops/requests.ops.js +153 -0
  348. package/dist/platform/ops/role.d.ts +4 -0
  349. package/dist/platform/ops/role.js +10 -0
  350. package/dist/platform/ops/skills.ops.d.ts +13 -0
  351. package/dist/platform/ops/skills.ops.js +98 -0
  352. package/dist/platform/ops/summary.d.ts +10 -0
  353. package/dist/platform/ops/summary.js +18 -0
  354. package/dist/platform/platform-ops.module.d.ts +7 -0
  355. package/dist/platform/platform-ops.module.js +55 -0
  356. package/dist/platform/platform.module.d.ts +8 -0
  357. package/dist/platform/platform.module.js +25 -0
  358. package/dist/platform/redact-orgs.d.ts +7 -0
  359. package/dist/platform/redact-orgs.js +52 -0
  360. package/dist/platform/registry.d.ts +30 -0
  361. package/dist/platform/registry.js +111 -0
  362. package/dist/roles/worker-role.d.ts +6 -4
  363. package/dist/roles/worker-role.js +14 -7
  364. package/dist/roles/worker.module.d.ts +1 -1
  365. package/dist/roles/worker.module.js +9 -1
  366. package/dist/runtime/context/build.d.ts +6 -4
  367. package/dist/runtime/context/build.js +26 -7
  368. package/dist/runtime/context/claude-tools.d.ts +2 -1
  369. package/dist/runtime/context/claude-tools.js +5 -4
  370. package/dist/runtime/context/compaction.js +9 -0
  371. package/dist/runtime/context/reminders.d.ts +2 -0
  372. package/dist/runtime/context/reminders.js +2 -0
  373. package/dist/runtime/context/skills.js +9 -2
  374. package/dist/runtime/context/tool-changes.d.ts +27 -0
  375. package/dist/runtime/context/tool-changes.js +60 -0
  376. package/dist/runtime/hook-calls.d.ts +8 -1
  377. package/dist/runtime/hook-calls.js +40 -7
  378. package/dist/runtime/langgraph-loop.d.ts +3 -1
  379. package/dist/runtime/langgraph-loop.js +35 -17
  380. package/dist/runtime/loop.d.ts +32 -4
  381. package/dist/runtime/maintenance.d.ts +7 -4
  382. package/dist/runtime/maintenance.js +23 -8
  383. package/dist/runtime/model-call.d.ts +38 -11
  384. package/dist/runtime/model-call.js +97 -24
  385. package/dist/runtime/providers.d.ts +146 -32
  386. package/dist/runtime/providers.js +321 -67
  387. package/dist/runtime/run-control.d.ts +11 -1
  388. package/dist/runtime/run-control.js +12 -0
  389. package/dist/runtime/run-drafts.d.ts +85 -0
  390. package/dist/runtime/run-drafts.js +230 -0
  391. package/dist/runtime/run-jobs.d.ts +3 -5
  392. package/dist/runtime/run-jobs.js +3 -7
  393. package/dist/runtime/run-queue.d.ts +37 -3
  394. package/dist/runtime/run-queue.js +188 -11
  395. package/dist/runtime/run-worker.d.ts +12 -6
  396. package/dist/runtime/run-worker.js +58 -35
  397. package/dist/runtime/runtime.module.js +3 -0
  398. package/dist/runtime/step-log.d.ts +9 -4
  399. package/dist/runtime/step-log.js +8 -5
  400. package/dist/runtime/stream.controller.d.ts +23 -1
  401. package/dist/runtime/stream.controller.js +60 -3
  402. package/dist/runtime/stream.d.ts +4 -1
  403. package/dist/runtime/stream.js +27 -3
  404. package/dist/runtime/subagents/child.d.ts +55 -7
  405. package/dist/runtime/subagents/child.js +105 -7
  406. package/dist/runtime/subagents/definition.d.ts +12 -3
  407. package/dist/runtime/subagents/definition.js +46 -32
  408. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  409. package/dist/runtime/subagents/deliveries.js +228 -0
  410. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  411. package/dist/runtime/subagents/dispatch.js +212 -141
  412. package/dist/runtime/subagents/limits.d.ts +24 -5
  413. package/dist/runtime/subagents/limits.js +40 -6
  414. package/dist/runtime/subagents/messages.d.ts +95 -0
  415. package/dist/runtime/subagents/messages.js +328 -0
  416. package/dist/runtime/subagents/preamble.d.ts +4 -4
  417. package/dist/runtime/subagents/preamble.js +9 -7
  418. package/dist/runtime/subagents/progress.d.ts +8 -6
  419. package/dist/runtime/subagents/progress.js +11 -6
  420. package/dist/runtime/subagents/render.d.ts +30 -0
  421. package/dist/runtime/subagents/render.js +53 -0
  422. package/dist/runtime/subagents/roster.d.ts +24 -7
  423. package/dist/runtime/subagents/roster.js +47 -11
  424. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  425. package/dist/runtime/subagents/skill-fork.js +8 -4
  426. package/dist/runtime/subagents/status.d.ts +14 -0
  427. package/dist/runtime/subagents/status.js +23 -0
  428. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  429. package/dist/runtime/subagents/subagents.service.js +11 -6
  430. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  431. package/dist/runtime/usage-report-jobs.js +158 -0
  432. package/dist/runtime/usage-report.d.ts +33 -38
  433. package/dist/runtime/usage-report.js +169 -96
  434. package/dist/runtime/waits.d.ts +140 -37
  435. package/dist/runtime/waits.js +394 -106
  436. package/dist/sandbox/jobs.d.ts +40 -13
  437. package/dist/sandbox/jobs.js +57 -20
  438. package/dist/sandbox/leases.d.ts +37 -54
  439. package/dist/sandbox/leases.js +71 -115
  440. package/dist/sandbox/providers.d.ts +2 -2
  441. package/dist/sandbox/providers.js +1 -1
  442. package/dist/sandbox/sandbox.module.d.ts +3 -2
  443. package/dist/sandbox/sandbox.module.js +4 -3
  444. package/dist/sandbox/sandbox.service.d.ts +229 -134
  445. package/dist/sandbox/sandbox.service.js +630 -409
  446. package/dist/skills/catalog.d.ts +3 -2
  447. package/dist/skills/catalog.js +21 -43
  448. package/dist/skills/changes.controller.d.ts +7 -0
  449. package/dist/skills/changes.controller.js +19 -1
  450. package/dist/skills/invoke.js +8 -3
  451. package/dist/skills/package.d.ts +20 -1
  452. package/dist/skills/package.js +28 -1
  453. package/dist/skills/skills.controller.d.ts +39 -4
  454. package/dist/skills/skills.controller.js +88 -10
  455. package/dist/skills/skills.module.js +10 -1
  456. package/dist/skills/skills.service.d.ts +106 -26
  457. package/dist/skills/skills.service.js +421 -75
  458. package/dist/skills/usable.d.ts +81 -0
  459. package/dist/skills/usable.js +379 -0
  460. package/dist/tools/approvals.service.d.ts +20 -2
  461. package/dist/tools/approvals.service.js +23 -4
  462. package/dist/tools/builtin-names.d.ts +21 -5
  463. package/dist/tools/builtin-names.js +30 -5
  464. package/dist/tools/builtins/agent.d.ts +23 -21
  465. package/dist/tools/builtins/agent.js +62 -55
  466. package/dist/tools/builtins/builtin-tools.d.ts +6 -2
  467. package/dist/tools/builtins/builtin-tools.js +37 -12
  468. package/dist/tools/builtins/handback.d.ts +28 -0
  469. package/dist/tools/builtins/handback.js +53 -0
  470. package/dist/tools/builtins/platform.d.ts +34 -0
  471. package/dist/tools/builtins/platform.js +362 -0
  472. package/dist/tools/builtins/sandbox/bash.js +13 -3
  473. package/dist/tools/builtins/sandbox/common.d.ts +43 -24
  474. package/dist/tools/builtins/sandbox/common.js +80 -45
  475. package/dist/tools/builtins/sandbox/edit.js +2 -2
  476. package/dist/tools/builtins/sandbox/glob.js +2 -2
  477. package/dist/tools/builtins/sandbox/grep.js +2 -4
  478. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  479. package/dist/tools/builtins/sandbox/index.js +1 -1
  480. package/dist/tools/builtins/sandbox/read.js +1 -1
  481. package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
  482. package/dist/tools/builtins/sandbox/task-output.js +30 -5
  483. package/dist/tools/builtins/sandbox/task-stop.js +2 -1
  484. package/dist/tools/builtins/sandbox/write.js +2 -2
  485. package/dist/tools/builtins/send-message.d.ts +56 -0
  486. package/dist/tools/builtins/send-message.js +100 -0
  487. package/dist/tools/builtins/skill-load.d.ts +22 -14
  488. package/dist/tools/builtins/skill-load.js +86 -57
  489. package/dist/tools/builtins/skill-write.js +1 -1
  490. package/dist/tools/builtins/web/extract.js +5 -1
  491. package/dist/tools/builtins/web/fetch.js +1 -0
  492. package/dist/tools/builtins/web/search.js +1 -0
  493. package/dist/tools/connectors.controller.d.ts +10 -0
  494. package/dist/tools/connectors.controller.js +12 -0
  495. package/dist/tools/connectors.service.d.ts +46 -5
  496. package/dist/tools/connectors.service.js +94 -15
  497. package/dist/tools/extension-tools.controller.d.ts +14 -0
  498. package/dist/tools/extension-tools.controller.js +37 -0
  499. package/dist/tools/info.d.ts +42 -1
  500. package/dist/tools/info.js +64 -1
  501. package/dist/tools/org-tool-switches.d.ts +74 -0
  502. package/dist/tools/org-tool-switches.js +184 -0
  503. package/dist/tools/pipeline.d.ts +46 -40
  504. package/dist/tools/pipeline.js +193 -364
  505. package/dist/tools/policy.d.ts +1 -1
  506. package/dist/tools/policy.js +36 -16
  507. package/dist/tools/registry.d.ts +98 -5
  508. package/dist/tools/registry.js +87 -9
  509. package/dist/tools/tools.module.js +12 -2
  510. package/dist/ui/views.d.ts +2 -1
  511. package/dist/ui/views.js +17 -3
  512. package/package.json +3 -3
  513. package/src/migrations/0074_subagent_tree.sql +50 -0
  514. package/src/migrations/0075_plugin_scope.sql +61 -0
  515. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  516. package/src/migrations/0077_scope_requests.sql +52 -0
  517. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  518. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  519. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  520. package/src/migrations/0081_platform_components.sql +129 -0
  521. package/src/migrations/0082_platform_migration.sql +33 -0
  522. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  523. package/src/migrations/0084_org_owned_items.sql +85 -0
  524. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  525. package/src/migrations/0086_org_layering.sql +30 -0
  526. package/src/migrations/0087_approval_summary.sql +6 -0
  527. package/src/migrations/0088_environments.sql +80 -0
  528. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  529. package/dist/catalog/upgrade-targets.d.ts +0 -56
  530. package/dist/catalog/upgrade-targets.js +0 -90
  531. package/dist/conversations/sandbox-status.d.ts +0 -24
  532. package/dist/conversations/sandbox-status.js +0 -52
  533. package/dist/extensions/org-config.controller.d.ts +0 -32
  534. package/dist/extensions/org-config.controller.js +0 -70
@@ -16,12 +16,10 @@ import { audit } from "../identity/audit.js";
16
16
  import { KernelDb } from "../infra/database/kernel-db.js";
17
17
  import { TransactionHost } from "../infra/database/transaction-host.js";
18
18
  import { Transactional } from "../infra/database/transactional.decorator.js";
19
- import { KERNEL_LOGGER } from "../infra/tokens.js";
20
19
  import { rejectAnonymousGuest } from "../orgs/members.service.js";
21
20
  import { OrgLock } from "../orgs/org-lock.js";
22
- import { roleAtLeast } from "../orgs/roles.js";
21
+ import { can, roleAtLeast } from "../orgs/roles.js";
23
22
  import { ProviderRegistry } from "../runtime/providers.js";
24
- import { SandboxJobs } from "../sandbox/jobs.js";
25
23
  import { SkillChangesService } from "../skills/changes.service.js";
26
24
  import { assertOrgSkills, assertPinnedSkills } from "../skills/skills.service.js";
27
25
  import { legacyKeySaveText } from "../tools/legacy-keys.js";
@@ -29,11 +27,11 @@ import { ToolRegistry } from "../tools/registry.js";
29
27
  import { AgentLookup, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
30
28
  import { normalizeStoredDefinition, paramIssues, SUBAGENT_NAME_RE, SUBAGENT_ROSTER_MAX, } from "./definition.js";
31
29
  import { deriveInstructions } from "./instruction-files.js";
30
+ import { PendingConnectorRequests } from "./pending-connector-requests.js";
32
31
  import { randomPreset } from "./profile.js";
32
+ import { loadTemplates, templateTypeOf } from "./templates.js";
33
33
  export { AGENT_VISIBILITIES, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
34
34
  export { paramIssues, SUBAGENT_ROSTER_MAX } from "./definition.js";
35
- /** 删除 agent 时每个销毁任务带的对话数。 */
36
- const SANDBOX_DESTROY_BATCH = 500;
37
35
  /** A new agent has no id to bind an upload to yet: a client can only choose a preset on create. */
38
36
  export function assertProfileWritable(profile) {
39
37
  if (profile?.avatar?.kind === "upload") {
@@ -41,6 +39,16 @@ export function assertProfileWritable(profile) {
41
39
  }
42
40
  }
43
41
  const notFound = () => new ApiError("agent.not_found", "Agent not found");
42
+ /** A per-operation policy key of the `Platform` tool (Platform tool spec §6.2). */
43
+ const PLATFORM_POLICY_KEY = /^Platform:[a-z][a-z-]*\.[a-z][a-z-]*$/;
44
+ /**
45
+ * May `toolPolicies` hold this key: one of the agent's tool keys, or `Platform:<operation>` when
46
+ * `Platform` is among them (an unknown operation id is kept: a removed operation's policy is
47
+ * harmless).
48
+ */
49
+ function isToolPolicyKey(key, toolKeys) {
50
+ return toolKeys.has(key) || (toolKeys.has("Platform") && PLATFORM_POLICY_KEY.test(key));
51
+ }
44
52
  /** 键排序后的 JSON:jsonb 不保留键顺序,比较定义是否变化时用。 */
45
53
  function canonical(v) {
46
54
  if (Array.isArray(v))
@@ -53,12 +61,39 @@ function canonical(v) {
53
61
  }
54
62
  return JSON.stringify(v);
55
63
  }
64
+ /**
65
+ * The pending connectors of a saved definition (ruling P4-6): absent from the request = the current
66
+ * version's (an editor that does not know them never drops them); given = a subset of the current
67
+ * ones, unchanged (only creating from a template adds them, only binding resolves them); `[]`
68
+ * removes them all. Another entry → 400 `validation_failed` at `pendingConnectors.<i>`.
69
+ */
70
+ export function keepPendingConnectors(definition, given, current) {
71
+ const { pendingConnectors: _given, ...rest } = definition;
72
+ const next = given ?? current ?? [];
73
+ if (given !== undefined) {
74
+ const known = new Map((current ?? []).map((c) => [c.key, canonical(c)]));
75
+ const details = given.flatMap((c, i) => known.get(c.key) === canonical(c)
76
+ ? []
77
+ : [
78
+ {
79
+ path: `pendingConnectors.${i}`,
80
+ message: "pending connectors come only from a template; keep or remove them",
81
+ },
82
+ ]);
83
+ if (details.length > 0) {
84
+ throw new ApiError("validation_failed", "Invalid pending connectors", details);
85
+ }
86
+ }
87
+ return next.length > 0 ? { ...rest, pendingConnectors: [...next] } : rest;
88
+ }
56
89
  /**
57
90
  * Checks `subagents` of an agent definition in the caller's transaction (spec §5.2); throws 400
58
91
  * `agent.subagents_invalid` with one detail per problem (`{ reason, path, value? }`):
59
- * - `not_found`: a template id that is not a live agent template of the org;
92
+ * - `not_found`: a template id that is not a usable agent template of the org (its own, a linked
93
+ * copy, or a platform template on in the org);
60
94
  * - `invalid_name`: an inline name or `agents[].as` outside {@link SUBAGENT_NAME_RE}, or
61
- * `general-purpose`; `duplicate`: a roster type listed twice (a template id twice included);
95
+ * `general-purpose`; `duplicate`: a roster type listed twice (a template id twice included, a
96
+ * bare template type equal to an inline name, a template typed `general-purpose`);
62
97
  * - `tool_not_selected`: an inline template's `tools`, `disallowedTools` or `toolPolicies` key that
63
98
  * is not a tool key of this agent (`toolKeys`, from `ToolRegistry.checkRefs`);
64
99
  * - `skill_not_selected`: an inline skill id that is neither in `skills.orgSkills` nor a live
@@ -100,24 +135,44 @@ export async function assertSubagents(t, a) {
100
135
  const templates = sub.templates ?? [];
101
136
  const keptTemplates = new Set(a.kept?.templates ?? []);
102
137
  const ids = [...new Set(templates)];
103
- // every listed template, deleted ones included (a kept one may have been uninstalled since)
104
- const rows = new Map(ids.length === 0
105
- ? []
106
- : (await t
107
- .selectFrom("agent_templates")
108
- .select(["id", "name", "plugin_name", "deleted_at"])
109
- .where("org_id", "=", a.orgId)
110
- .where("id", "in", ids)
111
- .execute()).map((r) => [r.id, r]));
138
+ // usable templates (the org's, linked copies, platform templates on in the org) by id
139
+ const usable = await loadTemplates(t, a.orgId, ids);
140
+ // kept ids that are no longer usable: their type from the stored row, deleted or off included
141
+ const gone = ids.filter((id) => !usable.has(id) && keptTemplates.has(id));
142
+ const goneTypes = new Map();
143
+ if (gone.length > 0) {
144
+ const [orgRows, platformRows] = await Promise.all([
145
+ t
146
+ .selectFrom("agent_templates")
147
+ .select(["id", "name", "plugin_name"])
148
+ .where("org_id", "=", a.orgId)
149
+ .where("id", "in", gone)
150
+ .execute(),
151
+ t
152
+ .selectFrom("platform_agent_templates")
153
+ .select(["id", "name", "plugin_name"])
154
+ .where("id", "in", gone)
155
+ .execute(),
156
+ ]);
157
+ for (const r of [...platformRows, ...orgRows]) {
158
+ goneTypes.set(r.id, templateTypeOf(r.plugin_name, r.name));
159
+ }
160
+ }
112
161
  templates.forEach((id, i) => {
113
162
  const path = `subagents.templates.${i}`;
114
- const row = rows.get(id);
115
- if (!keptTemplates.has(id) && (row === undefined || row.deleted_at !== null)) {
163
+ const row = usable.get(id);
164
+ if (!keptTemplates.has(id) && row === undefined) {
116
165
  add("not_found", path, id);
117
166
  return;
118
167
  }
119
- // claimed by its roster type (`<plugin>:<name>`, roster.ts templateType), so nothing shadows it
120
- claim(row === undefined ? `template:${id}` : `${row.plugin_name}:${row.name}`, path);
168
+ // claimed by its roster type (`<plugin>:<name>`, or a bare `<name>` without a plugin;
169
+ // roster.ts templateType), so nothing shadows it; `general-purpose` is reserved
170
+ const type = row === undefined
171
+ ? (goneTypes.get(id) ?? `template:${id}`)
172
+ : templateTypeOf(row.plugin, row.name);
173
+ if (type === "general-purpose" && sub.general === false)
174
+ add("duplicate", path, type);
175
+ claim(type, path);
121
176
  });
122
177
  const inline = sub.inline ?? [];
123
178
  const selected = new Set(a.definition.skills?.orgSkills ?? []);
@@ -148,8 +203,10 @@ export async function assertSubagents(t, a) {
148
203
  for (const [j, key] of (x.disallowedTools ?? []).entries()) {
149
204
  tool(key, `${base}.disallowedTools.${j}`);
150
205
  }
151
- for (const key of Object.keys(x.toolPolicies ?? {}))
152
- tool(key, `${base}.toolPolicies.${key}`);
206
+ for (const key of Object.keys(x.toolPolicies ?? {})) {
207
+ if (!isToolPolicyKey(key, a.toolKeys))
208
+ tool(key, `${base}.toolPolicies.${key}`);
209
+ }
153
210
  (x.skills ?? []).forEach((id, j) => {
154
211
  if (!selected.has(id) && !own.has(id))
155
212
  add("skill_not_selected", `${base}.skills.${j}`, id);
@@ -200,34 +257,29 @@ let AgentsService = class AgentsService {
200
257
  skillChanges;
201
258
  orgLock;
202
259
  providers;
203
- sandboxJobs;
204
- log;
205
260
  txHost;
206
261
  evalBudget;
262
+ setupRequests;
207
263
  constructor(db, lookup, tools,
208
264
  /** 删除 agent 时取消它待处理的技能改动(T15)。 */
209
265
  skillChanges,
210
266
  /** The org row lock (orgs/org-lock.ts): joins the caller's transaction. */
211
267
  orgLock,
212
268
  /** Resolves the agent's models (and their parameter declarations) when it is saved. */
213
- providers,
214
- /**
215
- * The sandbox destruction after a delete (内核投递一次性维护任务 `sandbox-destroy-for`,worker
216
- * 在锁内逐个销毁,幂等).
217
- */
218
- sandboxJobs, log, txHost,
269
+ providers, txHost,
219
270
  /** Cancels the deleted agent's running eval runs (in the delete's transaction). */
220
- evalBudget) {
271
+ evalBudget,
272
+ /** Settles the agent's connector setup request when its pending connectors change (P4-7). */
273
+ setupRequests) {
221
274
  this.db = db;
222
275
  this.lookup = lookup;
223
276
  this.tools = tools;
224
277
  this.skillChanges = skillChanges;
225
278
  this.orgLock = orgLock;
226
279
  this.providers = providers;
227
- this.sandboxJobs = sandboxJobs;
228
- this.log = log;
229
280
  this.txHost = txHost;
230
281
  this.evalBudget = evalBudget;
282
+ this.setupRequests = setupRequests;
231
283
  }
232
284
  /**
233
285
  * 校验工具引用与工具策略:引用的内置 / 插件 / 连接器工具必须存在(见 `ToolRegistry.checkRefs`);
@@ -238,7 +290,7 @@ let AgentsService = class AgentsService {
238
290
  const { keys, issues } = await this.tools.checkRefs(orgId, def.tools);
239
291
  const details = [...issues];
240
292
  for (const key of Object.keys(def.toolPolicies)) {
241
- if (!keys.has(key)) {
293
+ if (!isToolPolicyKey(key, keys)) {
242
294
  // an rc key (tool naming spec §8.3): saving writes current keys only, so name them
243
295
  const renamed = legacyKeySaveText(key, keys);
244
296
  details.push({
@@ -253,13 +305,15 @@ let AgentsService = class AgentsService {
253
305
  return keys;
254
306
  }
255
307
  /**
256
- * 校验主模型与兜底都可解析,并用各自模型的参数声明严格校验 `modelParams` / `fallbackParams`
308
+ * 校验主模型与兜底都可解析:enabled `chat` models in the org (`resolve`'s default kind; a model the
309
+ * platform or the org disabled, or an embedding model → 400 `agent.model_unavailable`, spec B
310
+ * §5.3),并用各自模型的参数声明严格校验 `modelParams` / `fallbackParams`
257
311
  * (没有兜底时 `fallbackParams` 必须为空);不合法 → `validation_failed`,details 逐键点名。返回提示。
258
312
  */
259
- async checkModels(def) {
313
+ async checkModels(orgId, def) {
260
314
  const registry = this.providers;
261
- const main = await registry.resolve(def.model);
262
- const fallback = def.fallback === null ? null : await registry.resolve(def.fallback);
315
+ const main = await registry.resolve(orgId, def.model);
316
+ const fallback = def.fallback === null ? null : await registry.resolve(orgId, def.fallback);
263
317
  const details = [
264
318
  ...paramIssues("modelParams", main.info.parameters, def.modelParams),
265
319
  ...paramIssues("fallbackParams", fallback?.info.parameters ?? [], def.fallbackParams),
@@ -300,21 +354,39 @@ let AgentsService = class AgentsService {
300
354
  * 新建 agent(版本 1):在组织行锁内授权 `agents.create`;主模型与兜底都必须可解析
301
355
  * (`agent.model_unavailable`);兜底与主模型同一供应商只提示 `fallback_same_provider`。
302
356
  */
303
- async create(orgId, actorAccountId, request, actorTokenId) {
357
+ async create(orgId, actorAccountId, request, actorTokenId, auditDetail) {
358
+ const { agent, warnings } = await this.createChecked(orgId, actorAccountId, request, null, actorTokenId, auditDetail);
359
+ return { agent, warnings };
360
+ }
361
+ /**
362
+ * Creates an agent from a planned template definition (rulings P4-3, P4-8): {@link create}'s
363
+ * checks, plus, under the org row lock, 403 `agent.visibility_forbidden` when the visibility is
364
+ * not `private` and the creator lacks `agents.manage`; the provenance columns are written once.
365
+ * Returns the creator's role read under the lock (the caller decides on the pending connector
366
+ * request after the commit).
367
+ */
368
+ createFromTemplate(orgId, actorAccountId, request, template, actorTokenId, auditDetail) {
369
+ return this.createChecked(orgId, actorAccountId, request, template, actorTokenId, auditDetail);
370
+ }
371
+ async createChecked(orgId, actorAccountId, request, template, actorTokenId, auditDetail) {
304
372
  const input = { ...request, definition: deriveInstructions(request.definition, null) };
305
373
  // 先解析模型(可能访问供应商),不在持有组织行锁时做
306
- const warnings = await this.checkModels(input.definition);
374
+ const warnings = await this.checkModels(orgId, input.definition);
307
375
  const toolKeys = await this.checkTools(orgId, input.definition);
308
376
  if (input.visibility !== "members" && (input.memberIds?.length ?? 0) > 0) {
309
377
  throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
310
378
  }
311
379
  assertProfileWritable(input.profile);
312
- const agent = await this.createIn(orgId, actorAccountId, input, toolKeys, actorTokenId);
313
- return { agent, warnings };
380
+ const { agent, role } = await this.createIn(orgId, actorAccountId, input, toolKeys, template, actorTokenId, auditDetail);
381
+ return { agent, warnings, role };
314
382
  }
315
- async createIn(orgId, actorAccountId, input, toolKeys, actorTokenId) {
383
+ async createIn(orgId, actorAccountId, input, toolKeys, template, actorTokenId, auditDetail) {
316
384
  const t = this.db.db;
317
- await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
385
+ const { role } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
386
+ // ruling P4-3: a member creates a template agent for themself; sharing it is an admin's call
387
+ if (template !== null && input.visibility !== "private" && !can(role, "agents.manage")) {
388
+ throw new ApiError("agent.visibility_forbidden", "Only an organization admin can create an agent from a template for others; create it private");
389
+ }
318
390
  await assertOrgSkills(t, orgId, input.definition.skills?.orgSkills ?? []);
319
391
  await assertPinnedSkills(t, orgId, null, input.definition.skills);
320
392
  await assertSubagents(t, {
@@ -339,6 +411,11 @@ let AgentsService = class AgentsService {
339
411
  profile_avatar: JSON.stringify(input.profile?.avatar ?? { kind: "preset", id: randomPreset() }),
340
412
  profile_description: input.profile?.description ?? "",
341
413
  profile_quick_actions: JSON.stringify(input.profile?.quickActions ?? []),
414
+ ...(template !== null && {
415
+ created_from_template_id: template.id,
416
+ created_from_template_version: template.version,
417
+ created_from_template_name: template.name,
418
+ }),
342
419
  })
343
420
  .execute();
344
421
  await t
@@ -357,9 +434,14 @@ let AgentsService = class AgentsService {
357
434
  orgId,
358
435
  action: "agent.created",
359
436
  target: id,
360
- detail: { version: 1, visibility: input.visibility },
437
+ detail: {
438
+ version: 1,
439
+ visibility: input.visibility,
440
+ ...(template !== null && { template: { id: template.id, version: template.version } }),
441
+ ...auditDetail,
442
+ },
361
443
  });
362
- return this.lookup.view(id);
444
+ return { agent: await this.lookup.view(id), role };
363
445
  }
364
446
  /**
365
447
  * 锁组织行并复核发起人,再锁 agent 行:发起人须仍具备 `agents.create`(member 以上),且是负责人或组织管理员以上;
@@ -396,14 +478,14 @@ let AgentsService = class AgentsService {
396
478
  * 修改 agent:`definition` 变化时写新版本(`current_version + 1`),只改 visibility / memberIds 不产生新版本。
397
479
  * 只有负责人或组织管理员以上可改,在组织行锁内复核。
398
480
  */
399
- async update(orgId, agentId, actorAccountId, request, actorTokenId) {
481
+ async update(orgId, agentId, actorAccountId, request, actorTokenId, auditDetail) {
400
482
  const patch = request;
401
- const warnings = patch.definition ? await this.checkModels(patch.definition) : [];
483
+ const warnings = patch.definition ? await this.checkModels(orgId, patch.definition) : [];
402
484
  const toolKeys = patch.definition ? await this.checkTools(orgId, patch.definition) : null;
403
- const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId);
485
+ const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId, auditDetail);
404
486
  return { agent, warnings };
405
487
  }
406
- async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId) {
488
+ async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId, auditDetail) {
407
489
  const t = this.db.db;
408
490
  const before = await this.lockForWrite(orgId, agentId, actorAccountId);
409
491
  if (patch.expectedVersion !== undefined && patch.expectedVersion !== before.current_version) {
@@ -422,7 +504,8 @@ let AgentsService = class AgentsService {
422
504
  .where("version", "=", before.current_version)
423
505
  .executeTakeFirstOrThrow();
424
506
  // the prompt: instructionFiles give instructions; a save given neither keeps the current one
425
- const definition = deriveInstructions(patch.definition, normalizeStoredDefinition(current.definition));
507
+ const currentDefinition = normalizeStoredDefinition(current.definition);
508
+ const definition = keepPendingConnectors(deriveInstructions(patch.definition, currentDefinition), patch.definition.pendingConnectors, currentDefinition.pendingConnectors);
426
509
  // 当前版本已有的技能引用保存时合法,不再核对(被删的技能不挡住其他改动);新加的照常核对
427
510
  const kept = new Set(current.definition.skills?.orgSkills ?? []);
428
511
  await assertOrgSkills(t, orgId, definition.skills?.orgSkills ?? [], kept);
@@ -436,6 +519,19 @@ let AgentsService = class AgentsService {
436
519
  kept: current.definition.subagents,
437
520
  });
438
521
  if (canonical(current.definition) !== canonical(definition)) {
522
+ // removing pending connectors in the editor narrows or cancels the setup request (P4-T6-3)
523
+ const keys = (definition.pendingConnectors ?? []).map((c) => c.key);
524
+ if (canonical((currentDefinition.pendingConnectors ?? []).map((c) => c.key)) !==
525
+ canonical(keys)) {
526
+ await this.setupRequests.settleIn({
527
+ orgId,
528
+ agentId,
529
+ keys,
530
+ close: "cancelled",
531
+ actor: actorAccountId,
532
+ actorTokenId,
533
+ });
534
+ }
439
535
  toVersion = before.current_version + 1;
440
536
  await t
441
537
  .insertInto("agent_versions")
@@ -471,6 +567,7 @@ let AgentsService = class AgentsService {
471
567
  ...(visibility !== before.visibility && {
472
568
  visibility: { from: before.visibility, to: visibility },
473
569
  }),
570
+ ...auditDetail,
474
571
  },
475
572
  });
476
573
  return this.lookup.view(agentId);
@@ -479,7 +576,6 @@ let AgentsService = class AgentsService {
479
576
  async softDelete(orgId, agentId, actorAccountId, actorTokenId) {
480
577
  const cancelled = await this.softDeleteIn(orgId, agentId, actorAccountId, actorTokenId);
481
578
  await this.skillChanges.finishCancel(orgId, cancelled);
482
- await this.destroySandboxes(orgId, agentId);
483
579
  }
484
580
  async softDeleteIn(orgId, agentId, actorAccountId, actorTokenId) {
485
581
  const t = this.db.db;
@@ -503,31 +599,20 @@ let AgentsService = class AgentsService {
503
599
  action: "agent.deleted",
504
600
  target: agentId,
505
601
  });
602
+ // the agent row stays (soft delete), so its setup request is closed here (P4-T6-3)
603
+ await this.setupRequests.settleIn({
604
+ orgId,
605
+ agentId,
606
+ keys: [],
607
+ close: "cancelled",
608
+ actor: actorAccountId,
609
+ actorTokenId,
610
+ });
506
611
  // 评测集的 agent 删除后其评测运行不再花钱:显式取消(审计带原因)
507
612
  await this.evalBudget.cancelRuns({ orgId, agentId }, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "agent_deleted");
508
613
  // joins this transaction (mandatory: it relies on the agent row lock taken above)
509
614
  return this.skillChanges.cancelPendingForAgent(orgId, agentId, actorAccountId, "agent_deleted", actorTokenId);
510
615
  }
511
- /** 提交后尽力而为:投递销毁这个 agent 各对话还没销毁的沙箱(失败只记日志,留给不活跃销毁扫描)。 */
512
- async destroySandboxes(orgId, agentId) {
513
- try {
514
- const rows = await this.db
515
- .selectFrom("sandboxes as s")
516
- .innerJoin("conversations as c", "c.id", "s.conversation_id")
517
- .select("s.conversation_id")
518
- .where("c.org_id", "=", orgId)
519
- .where("c.agent_id", "=", agentId)
520
- .where("s.status", "<>", "destroyed")
521
- .execute();
522
- const ids = rows.map((r) => r.conversation_id);
523
- for (let i = 0; i < ids.length; i += SANDBOX_DESTROY_BATCH) {
524
- await this.sandboxJobs.destroy(ids.slice(i, i + SANDBOX_DESTROY_BATCH));
525
- }
526
- }
527
- catch (err) {
528
- this.log.warn("cannot schedule sandbox destruction for a deleted agent", { agentId, err });
529
- }
530
- }
531
616
  /**
532
617
  * 重新指派负责人(`agents.manage`,admin):在组织行锁内授权;agent 不存在 / 已删除 → `agent.not_found`;
533
618
  * 新负责人不是该组织成员 → `member.not_found`;是匿名访客 → `member.anonymous_guest`。
@@ -560,6 +645,8 @@ let AgentsService = class AgentsService {
560
645
  .set({ owner_account_id: newOwnerId, needs_reassignment: false, updated_at: sql `now()` })
561
646
  .where("id", "=", agentId)
562
647
  .execute();
648
+ // the new owner hears about the agent's connector setup request (P4-T6-4)
649
+ await this.setupRequests.retargetIn([agentId], newOwnerId);
563
650
  await audit(t, {
564
651
  actorAccountId,
565
652
  ...(actorTokenId !== undefined && { actorTokenId }),
@@ -574,6 +661,24 @@ let AgentsService = class AgentsService {
574
661
  });
575
662
  return this.lookup.view(agentId);
576
663
  }
664
+ /**
665
+ * `views` with `createdFrom.available` set (ruling P4-8): whether each recorded template is
666
+ * still usable in the org. One template read for all of them; only the agents API calls it.
667
+ */
668
+ async withTemplateLinks(orgId, views) {
669
+ const ids = [
670
+ ...new Set(views.flatMap((v) => (v.createdFrom === null ? [] : [v.createdFrom.templateId]))),
671
+ ];
672
+ if (ids.length === 0)
673
+ return views;
674
+ const usable = await loadTemplates(this.db.db, orgId, ids);
675
+ return views.map((v) => v.createdFrom === null
676
+ ? v
677
+ : {
678
+ ...v,
679
+ createdFrom: { ...v.createdFrom, available: usable.has(v.createdFrom.templateId) },
680
+ });
681
+ }
577
682
  /** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
578
683
  get(orgId, agentId, viewerAccountId) {
579
684
  return this.lookup.get(orgId, agentId, viewerAccountId);
@@ -637,9 +742,8 @@ AgentsService = __decorate([
637
742
  __param(3, Inject(SkillChangesService)),
638
743
  __param(4, Inject(OrgLock)),
639
744
  __param(5, Inject(ProviderRegistry)),
640
- __param(6, Inject(SandboxJobs)),
641
- __param(7, Inject(KERNEL_LOGGER)),
642
- __param(8, Inject(TransactionHost)),
643
- __param(9, Inject(EvalBudget))
745
+ __param(6, Inject(TransactionHost)),
746
+ __param(7, Inject(EvalBudget)),
747
+ __param(8, Inject(PendingConnectorRequests))
644
748
  ], AgentsService);
645
749
  export { AgentsService };
@@ -112,6 +112,33 @@ export declare const SubagentsSchema: z.ZodObject<{
112
112
  dispatchable: z.ZodOptional<z.ZodBoolean>;
113
113
  }, z.core.$strict>;
114
114
  export type Subagents = z.infer<typeof SubagentsSchema>;
115
+ /** The key rule of a pending connector (`[a-z0-9-]`, URL-safe: it names the bind route). */
116
+ export declare const PENDING_CONNECTOR_KEY_RE: RegExp;
117
+ /** Pending connectors an agent may carry (the template's `connectors` limit). */
118
+ export declare const PENDING_CONNECTORS_MAX = 16;
119
+ export declare const PendingConnectorSchema: z.ZodObject<{
120
+ key: z.ZodString;
121
+ label: z.ZodString;
122
+ source: z.ZodUnion<readonly [z.ZodObject<{
123
+ template: z.ZodString;
124
+ }, z.core.$strict>, z.ZodObject<{
125
+ needs: z.ZodObject<{
126
+ protocol: z.ZodEnum<{
127
+ mcp: "mcp";
128
+ openapi: "openapi";
129
+ }>;
130
+ endpoint: z.ZodString;
131
+ tools: z.ZodArray<z.ZodString>;
132
+ label: z.ZodString;
133
+ }, z.core.$strict>;
134
+ }, z.core.$strict>]>;
135
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
136
+ policies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
137
+ ask: "ask";
138
+ deny: "deny";
139
+ }>>>;
140
+ }, z.core.$strict>;
141
+ export type PendingConnector = z.infer<typeof PendingConnectorSchema>;
115
142
  /** Agent 定义:每次变化写一个新版本(`capybara.agent_versions`)。 */
116
143
  export declare const AgentDefinitionSchema: z.ZodObject<{
117
144
  name: z.ZodString;
@@ -191,6 +218,28 @@ export declare const AgentDefinitionSchema: z.ZodObject<{
191
218
  }, z.core.$strict>>>;
192
219
  dispatchable: z.ZodOptional<z.ZodBoolean>;
193
220
  }, z.core.$strict>>;
221
+ pendingConnectors: z.ZodOptional<z.ZodArray<z.ZodObject<{
222
+ key: z.ZodString;
223
+ label: z.ZodString;
224
+ source: z.ZodUnion<readonly [z.ZodObject<{
225
+ template: z.ZodString;
226
+ }, z.core.$strict>, z.ZodObject<{
227
+ needs: z.ZodObject<{
228
+ protocol: z.ZodEnum<{
229
+ mcp: "mcp";
230
+ openapi: "openapi";
231
+ }>;
232
+ endpoint: z.ZodString;
233
+ tools: z.ZodArray<z.ZodString>;
234
+ label: z.ZodString;
235
+ }, z.core.$strict>;
236
+ }, z.core.$strict>]>;
237
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
238
+ policies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
239
+ ask: "ask";
240
+ deny: "deny";
241
+ }>>>;
242
+ }, z.core.$strict>>>;
194
243
  }, z.core.$strip>;
195
244
  export type AgentDefinition = z.infer<typeof AgentDefinitionSchema>;
196
245
  /** The connectors and extensions a definition's own tool refs name (to read an ambiguous rc key). */
@@ -91,6 +91,46 @@ export const SubagentsSchema = z
91
91
  dispatchable: z.boolean().optional(),
92
92
  })
93
93
  .strict();
94
+ /** The key rule of a pending connector (`[a-z0-9-]`, URL-safe: it names the bind route). */
95
+ export const PENDING_CONNECTOR_KEY_RE = /^[a-z0-9][a-z0-9-]{0,63}$/;
96
+ /** Pending connectors an agent may carry (the template's `connectors` limit). */
97
+ export const PENDING_CONNECTORS_MAX = 16;
98
+ /**
99
+ * A connector the template the agent was created from needs and the org has not bound yet
100
+ * (ruling P4-6): `source.template` is the platform connector template's id, `source.needs` a
101
+ * hand-configured connector described by protocol, endpoint and tools (P4-11). `tools` are the
102
+ * tool names to enable once bound (absent = all of a template's tools), `policies` the template's
103
+ * tightened policies by tool name, applied by the bind. Never model-visible: tools are built from
104
+ * `tools` only, and a pending connector has none. Text limits are twice the template's (which
105
+ * counts code points) so any parsed template fits (this schema counts UTF-16 units).
106
+ */
107
+ const PendingToolName = z.string().min(1).max(256);
108
+ export const PendingConnectorSchema = z
109
+ .object({
110
+ key: z.string().regex(PENDING_CONNECTOR_KEY_RE),
111
+ label: z.string().min(1).max(160),
112
+ source: z.union([
113
+ z.object({ template: z.string().min(1).max(100) }).strict(),
114
+ z
115
+ .object({
116
+ needs: z
117
+ .object({
118
+ protocol: z.enum(["mcp", "openapi"]),
119
+ endpoint: z.string().min(1).max(4096),
120
+ tools: z.array(PendingToolName).max(200),
121
+ label: z.string().min(1).max(160),
122
+ })
123
+ .strict(),
124
+ })
125
+ .strict(),
126
+ ]),
127
+ tools: z.array(PendingToolName).max(200).optional(),
128
+ policies: z
129
+ .record(PendingToolName, z.enum(["ask", "deny"]))
130
+ .refine((p) => Object.keys(p).length <= 200, "at most 200 policies")
131
+ .optional(),
132
+ })
133
+ .strict();
94
134
  /** Agent 定义:每次变化写一个新版本(`capybara.agent_versions`)。 */
95
135
  export const AgentDefinitionSchema = z.object({
96
136
  name: z.string().min(1).max(80),
@@ -142,6 +182,11 @@ export const AgentDefinitionSchema = z.object({
142
182
  .optional(),
143
183
  /** Sub-agents (phase C); offered only when the builtin `Agent` tool is in `tools`. */
144
184
  subagents: SubagentsSchema.optional(),
185
+ /**
186
+ * Connectors still to configure (ruling P4-6), written only by creating from a template. No
187
+ * default: definitions without it are unchanged. Model-invisible.
188
+ */
189
+ pendingConnectors: z.array(PendingConnectorSchema).max(PENDING_CONNECTORS_MAX).optional(),
145
190
  });
146
191
  const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
147
192
  /**