@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
@@ -24,6 +24,48 @@ export function OrgAction(action) {
24
24
  /** 参数装饰器:取 OrgGuard 放在 `req.org` 上的 `{ orgId, role }`。 */
25
25
  export const CurrentOrg = createParamDecorator((_data, ctx) => ctx.switchToHttp().getRequest().org);
26
26
  const notFound = () => new ApiError("org.not_found", "Organization not found");
27
+ /**
28
+ * The org role check of {@link OrgGuard}, read live from PG: the caller's role in `orgId` (a
29
+ * person's membership, a service token's own org and role) allows `action`, else 404
30
+ * `org.not_found` (missing, soft-deleted, not a member: existence is not disclosed) or 403
31
+ * `forbidden` (HUMAN_ONLY for a service token, role too low). Also run before the body of an org
32
+ * package upload is read (ruling P3-29).
33
+ */
34
+ export async function authorizeOrgAction(db, p, orgId, action) {
35
+ let role;
36
+ if (p.kind === "service") {
37
+ if (p.orgId !== orgId)
38
+ throw notFound();
39
+ const live = await db
40
+ .selectFrom("orgs")
41
+ .select("id")
42
+ .where("id", "=", orgId)
43
+ .where("deleted_at", "is", null)
44
+ .executeTakeFirst();
45
+ if (!live)
46
+ throw notFound();
47
+ if (HUMAN_ONLY.has(action)) {
48
+ throw new ApiError("forbidden", "Service tokens cannot perform this action");
49
+ }
50
+ role = p.role;
51
+ }
52
+ else {
53
+ const m = await db
54
+ .selectFrom("memberships")
55
+ .innerJoin("orgs", "orgs.id", "memberships.org_id")
56
+ .select("memberships.role")
57
+ .where("memberships.org_id", "=", orgId)
58
+ .where("memberships.account_id", "=", p.account.id)
59
+ .where("orgs.deleted_at", "is", null)
60
+ .executeTakeFirst();
61
+ if (!m)
62
+ throw notFound();
63
+ role = m.role;
64
+ }
65
+ if (!can(role, action))
66
+ throw new ApiError("forbidden", "Insufficient organization role");
67
+ return role;
68
+ }
27
69
  /**
28
70
  * 组织守卫:每个请求实时从 PG 读组织与成员角色(不缓存)。
29
71
  * - 组织不存在、已软删除、或调用者不是成员 → 404 `org.not_found`(不泄露组织是否存在)。
@@ -51,38 +93,7 @@ let OrgGuard = class OrgGuard {
51
93
  const orgId = req.params.orgId;
52
94
  if (!orgId)
53
95
  throw new Error("OrgGuard: route has no :orgId parameter");
54
- let role;
55
- if (p.kind === "service") {
56
- if (p.orgId !== orgId)
57
- throw notFound();
58
- const live = await this.db
59
- .selectFrom("orgs")
60
- .select("id")
61
- .where("id", "=", orgId)
62
- .where("deleted_at", "is", null)
63
- .executeTakeFirst();
64
- if (!live)
65
- throw notFound();
66
- if (HUMAN_ONLY.has(action)) {
67
- throw new ApiError("forbidden", "Service tokens cannot perform this action");
68
- }
69
- role = p.role;
70
- }
71
- else {
72
- const m = await this.db
73
- .selectFrom("memberships")
74
- .innerJoin("orgs", "orgs.id", "memberships.org_id")
75
- .select("memberships.role")
76
- .where("memberships.org_id", "=", orgId)
77
- .where("memberships.account_id", "=", p.account.id)
78
- .where("orgs.deleted_at", "is", null)
79
- .executeTakeFirst();
80
- if (!m)
81
- throw notFound();
82
- role = m.role;
83
- }
84
- if (!can(role, action))
85
- throw new ApiError("forbidden", "Insufficient organization role");
96
+ const role = await authorizeOrgAction(this.db.db, p, orgId, action);
86
97
  req.org = { orgId, role };
87
98
  return true;
88
99
  }
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { Module } from "@nestjs/common";
8
+ import { CatalogModule } from "../catalog/catalog.module.js";
8
9
  import { EventLogModule } from "../conversations/event-log.js";
9
10
  import { EvalBudgetModule } from "../evals/budget.js";
10
11
  import { ExtensionsModule } from "../extensions/extensions.module.js";
@@ -43,6 +44,8 @@ OrgsModule = __decorate([
43
44
  SandboxModule,
44
45
  // cancels the deleted org's eval runs
45
46
  EvalBudgetModule,
47
+ // a new org's plugin scope sync (the producer; the worker role consumes it)
48
+ CatalogModule,
46
49
  // the producer side of directory-sync jobs (the maintenance processor consumes them)
47
50
  QueueModule.registerQueue(MAINTENANCE_QUEUE_NAME),
48
51
  ],
@@ -1,3 +1,5 @@
1
+ import { OwnedItems } from "../catalog/owned-items.js";
2
+ import { PluginScopeSync } from "../catalog/scope-sync.js";
1
3
  import { EvalBudget } from "../evals/budget.js";
2
4
  import type { Account } from "../identity/accounts.js";
3
5
  import { ApiTokenService } from "../identity/api-tokens.js";
@@ -18,8 +20,8 @@ export declare const SLUG_RE: RegExp;
18
20
  /** 由名字生成 slug:转小写、非字母数字换 `-`、去首尾 `-`;为空则 `org-<6 位随机>`。 */
19
21
  export declare function slugFromName(name: string): string;
20
22
  /**
21
- * Organizations: create, read, update and soft delete. A soft delete emits `org.deleted` on
22
- * {@link KernelEvents} after the commit.
23
+ * Organizations: create, read, update and soft delete. A new org's plugin scope sync is enqueued
24
+ * after the commit; a soft delete emits `org.deleted` on {@link KernelEvents} after the commit.
23
25
  */
24
26
  export declare class OrgsService {
25
27
  private readonly db;
@@ -30,9 +32,17 @@ export declare class OrgsService {
30
32
  private readonly events;
31
33
  /** Cancels the deleted org's running eval runs (in the delete's transaction). */
32
34
  private readonly evalBudget;
35
+ /** A new org gets the plugins its scope offers it (the scope sync, after the commit). */
36
+ private readonly scopeSync;
37
+ /** What the deleted org owns is transferred or removed in the delete's transaction (P3-20). */
38
+ private readonly ownedItems;
33
39
  constructor(db: KernelDb, txHost: TransactionHost, settings: SettingsService, apiTokens: ApiTokenService, orgLock: OrgLock, events: KernelEvents,
34
40
  /** Cancels the deleted org's running eval runs (in the delete's transaction). */
35
- evalBudget: Pick<EvalBudget, "cancelRuns">);
41
+ evalBudget: Pick<EvalBudget, "cancelRuns">,
42
+ /** A new org gets the plugins its scope offers it (the scope sync, after the commit). */
43
+ scopeSync: Pick<PluginScopeSync, "enqueueOrg">,
44
+ /** What the deleted org owns is transferred or removed in the delete's transaction (P3-20). */
45
+ ownedItems: Pick<OwnedItems, "onOrgDeleted">);
36
46
  /**
37
47
  * Creates an org with the actor as owner, in the caller's transaction when there is one (the
38
48
  * setup wizard creates it with the account); a slug conflict is `org.slug_taken` either way, but
@@ -49,7 +59,7 @@ export declare class OrgsService {
49
59
  listForAccount(accountId: string): Promise<(Org & {
50
60
  role: OrgRole;
51
61
  })[]>;
52
- /** 全部(未软删除的)组织及成员数(企业管理员用)。 */
62
+ /** 全部(未软删除的)组织及成员数(超级管理员用)。 */
53
63
  listAll(): Promise<(Org & {
54
64
  memberCount: number;
55
65
  })[]>;
@@ -63,9 +73,12 @@ export declare class OrgsService {
63
73
  private updateIn;
64
74
  /**
65
75
  * Soft delete (needs owner, decided live under the org lock): in the same transaction revokes
66
- * the org's service tokens, cancels its running eval runs and pending catalog requests, and
67
- * clears sessions' current org pointing at it; after the commit emits `org.deleted` (channel
68
- * connections go with the org: the runtime's connection reads filter deleted orgs).
76
+ * the org's service tokens, cancels its running eval runs and pending catalog requests, clears
77
+ * sessions' current org pointing at it, and transfers or removes the plugins and promoted
78
+ * components it owns ({@link OwnedItems.onOrgDeleted}, P3-20: shared ones become the platform's,
79
+ * the others are removed, a removed plugin's extension taken out by its cleanup job after the
80
+ * commit); after the commit emits `org.deleted` (channel connections go with the org: the
81
+ * runtime's connection reads filter deleted orgs).
69
82
  */
70
83
  softDelete(orgId: string, actor: Account, actorTokenId?: string): Promise<void>;
71
84
  private softDeleteIn;
@@ -10,7 +10,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
10
10
  import { randomBytes, randomUUID } from "node:crypto";
11
11
  import { Inject, Injectable } from "@nestjs/common";
12
12
  import { sql } from "kysely";
13
- import { cancelPendingRequests } from "../catalog/requests.service.js";
13
+ import { OwnedItems } from "../catalog/owned-items.js";
14
+ import { cancelPendingRequests } from "../catalog/request-rules.js";
15
+ import { PluginScopeSync } from "../catalog/scope-sync.js";
14
16
  import { ApiError } from "../errors.js";
15
17
  import { EvalBudget } from "../evals/budget.js";
16
18
  import { ApiTokenService } from "../identity/api-tokens.js";
@@ -70,8 +72,8 @@ async function slugGuard(p) {
70
72
  }
71
73
  }
72
74
  /**
73
- * Organizations: create, read, update and soft delete. A soft delete emits `org.deleted` on
74
- * {@link KernelEvents} after the commit.
75
+ * Organizations: create, read, update and soft delete. A new org's plugin scope sync is enqueued
76
+ * after the commit; a soft delete emits `org.deleted` on {@link KernelEvents} after the commit.
75
77
  */
76
78
  let OrgsService = class OrgsService {
77
79
  db;
@@ -81,9 +83,15 @@ let OrgsService = class OrgsService {
81
83
  orgLock;
82
84
  events;
83
85
  evalBudget;
86
+ scopeSync;
87
+ ownedItems;
84
88
  constructor(db, txHost, settings, apiTokens, orgLock, events,
85
89
  /** Cancels the deleted org's running eval runs (in the delete's transaction). */
86
- evalBudget) {
90
+ evalBudget,
91
+ /** A new org gets the plugins its scope offers it (the scope sync, after the commit). */
92
+ scopeSync,
93
+ /** What the deleted org owns is transferred or removed in the delete's transaction (P3-20). */
94
+ ownedItems) {
87
95
  this.db = db;
88
96
  this.txHost = txHost;
89
97
  this.settings = settings;
@@ -91,6 +99,8 @@ let OrgsService = class OrgsService {
91
99
  this.orgLock = orgLock;
92
100
  this.events = events;
93
101
  this.evalBudget = evalBudget;
102
+ this.scopeSync = scopeSync;
103
+ this.ownedItems = ownedItems;
94
104
  }
95
105
  /**
96
106
  * Creates an org with the actor as owner, in the caller's transaction when there is one (the
@@ -104,8 +114,8 @@ let OrgsService = class OrgsService {
104
114
  // read in the context's transaction: a caller holding a connection asking the pool for a
105
115
  // second one could exhaust it under load
106
116
  const { orgCreation } = await this.settings.get();
107
- if (orgCreation === "enterprise_admin" && !actor.isEnterpriseAdmin) {
108
- throw new ApiError("org.creation_disabled", "Only enterprise admins can create organizations");
117
+ if (orgCreation === "super_admin" && !actor.isSuperAdmin) {
118
+ throw new ApiError("org.creation_disabled", "Only super admins can create organizations");
109
119
  }
110
120
  const name = checkName(input.name);
111
121
  const slug = input.slug ?? slugFromName(name);
@@ -127,6 +137,7 @@ let OrgsService = class OrgsService {
127
137
  target: row.id,
128
138
  detail: { slug, name },
129
139
  });
140
+ afterCommit(() => this.scopeSync.enqueueOrg(row.id));
130
141
  return toOrg(row);
131
142
  }
132
143
  /** 账号所属的(未软删除的)组织及其角色,按创建时间升序。 */
@@ -142,7 +153,7 @@ let OrgsService = class OrgsService {
142
153
  .execute();
143
154
  return rows.map((r) => ({ ...toOrg(r), role: r.role }));
144
155
  }
145
- /** 全部(未软删除的)组织及成员数(企业管理员用)。 */
156
+ /** 全部(未软删除的)组织及成员数(超级管理员用)。 */
146
157
  async listAll() {
147
158
  const rows = await this.db
148
159
  .selectFrom("orgs")
@@ -205,9 +216,12 @@ let OrgsService = class OrgsService {
205
216
  }
206
217
  /**
207
218
  * Soft delete (needs owner, decided live under the org lock): in the same transaction revokes
208
- * the org's service tokens, cancels its running eval runs and pending catalog requests, and
209
- * clears sessions' current org pointing at it; after the commit emits `org.deleted` (channel
210
- * connections go with the org: the runtime's connection reads filter deleted orgs).
219
+ * the org's service tokens, cancels its running eval runs and pending catalog requests, clears
220
+ * sessions' current org pointing at it, and transfers or removes the plugins and promoted
221
+ * components it owns ({@link OwnedItems.onOrgDeleted}, P3-20: shared ones become the platform's,
222
+ * the others are removed, a removed plugin's extension taken out by its cleanup job after the
223
+ * commit); after the commit emits `org.deleted` (channel connections go with the org: the
224
+ * runtime's connection reads filter deleted orgs).
211
225
  */
212
226
  async softDelete(orgId, actor, actorTokenId) {
213
227
  await this.softDeleteIn(orgId, actor, actorTokenId);
@@ -219,10 +233,14 @@ let OrgsService = class OrgsService {
219
233
  .set({ deleted_at: sql `now()` })
220
234
  .where("id", "=", orgId)
221
235
  .execute();
236
+ // after the org is marked deleted, so it counts as no user of what it shared (P3-18)
237
+ await this.ownedItems.onOrgDeleted(orgId, actor.id, {
238
+ ...(actorTokenId !== undefined && { actorTokenId }),
239
+ });
222
240
  await this.apiTokens.revokeAllForOrg(orgId);
223
241
  // eval runs of a deleted org stop spending: cancelled explicitly (audited with the reason)
224
242
  await this.evalBudget.cancelRuns({ orgId }, { accountId: actor.id, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "org_deleted");
225
- // pending catalog requests (including those passed to enterprise admins) are cancelled too
243
+ // pending catalog requests (including those passed to super admins) are cancelled too
226
244
  await cancelPendingRequests(this.db.db, { orgId }, actor.id, "org_deleted", actorTokenId !== undefined ? { actorTokenId } : {});
227
245
  await this.db
228
246
  .updateTable("sessions")
@@ -257,6 +275,8 @@ OrgsService = __decorate([
257
275
  __param(3, Inject(ApiTokenService)),
258
276
  __param(4, Inject(OrgLock)),
259
277
  __param(5, Inject(KernelEvents)),
260
- __param(6, Inject(EvalBudget))
278
+ __param(6, Inject(EvalBudget)),
279
+ __param(7, Inject(PluginScopeSync)),
280
+ __param(8, Inject(OwnedItems))
261
281
  ], OrgsService);
262
282
  export { OrgsService };
@@ -4,7 +4,7 @@ export type OrgRole = (typeof ORG_ROLES)[number];
4
4
  /** `role` 是否不低于 `min`。 */
5
5
  export declare function roleAtLeast(role: OrgRole, min: OrgRole): boolean;
6
6
  /** 组织级动作;路由用 `@OrgAction(action)` 声明所需动作。 */
7
- export type OrgAction = "org.read" | "org.update" | "org.delete" | "org.transfer" | "org.members.read" | "org.members.manage" | "org.invitations.manage" | "org.tokens.manage" | "org.extensions.manage" | "agents.create" | "agents.use" | "agents.manage" | "connectors.manage" | "connectors.use" | "approvals.decide" | "channels.manage" | "skills.read" | "skills.manage" | "ui.use" | "trajectories.read" | "evals.manage" | "org.models.manage" | "catalog.read" | "catalog.request" | "catalog.decide";
7
+ export type OrgAction = "org.read" | "org.update" | "org.delete" | "org.transfer" | "org.members.read" | "org.members.manage" | "org.invitations.manage" | "org.tokens.manage" | "org.extensions.read" | "org.extensions.manage" | "agents.create" | "agents.use" | "agents.manage" | "connectors.manage" | "connectors.use" | "approvals.decide" | "channels.manage" | "skills.read" | "skills.manage" | "ui.use" | "trajectories.read" | "evals.manage" | "org.models.manage" | "catalog.read" | "catalog.request" | "catalog.decide" | "catalog.upload";
8
8
  /** 每个动作所需的最低角色。 */
9
9
  export declare const ACTION_MIN_ROLE: Record<OrgAction, OrgRole>;
10
10
  /** 只允许 user principal 执行的动作:服务令牌即使角色足够也拒绝(除 SERVICE_ALLOWED 外全部)。 */
@@ -12,6 +12,8 @@ export const ACTION_MIN_ROLE = {
12
12
  "org.members.manage": "admin",
13
13
  "org.invitations.manage": "admin",
14
14
  "org.tokens.manage": "admin",
15
+ // the 扩展 page for members: state only, no config / secrets / schema (the list projects by role)
16
+ "org.extensions.read": "member",
15
17
  "org.extensions.manage": "admin",
16
18
  "org.delete": "owner",
17
19
  "org.transfer": "owner",
@@ -38,11 +40,13 @@ export const ACTION_MIN_ROLE = {
38
40
  "evals.manage": "admin",
39
41
  // 本组织的模型用途映射(覆盖部署默认,如评委用途 eval)
40
42
  "org.models.manage": "admin",
41
- // 企业目录(组织视角):成员浏览(看不到 disabled)与申请;组织管理员决定成员申请(F-AF)。
43
+ // 平台目录(组织视角):成员浏览(看不到 disabled)与申请;组织管理员决定成员申请(F-AF)。
42
44
  // 安装另按条目种类要求 skills.manage / connectors.manage / org.extensions.manage(服务里在组织行锁内复核)
43
45
  "catalog.read": "member",
44
46
  "catalog.request": "member",
45
47
  "catalog.decide": "admin",
48
+ // An org admin uploads a plugin package the org owns (spec §14.1 item 1, ruling P3-7)
49
+ "catalog.upload": "admin",
46
50
  };
47
51
  /** 服务令牌也可执行的动作:只读的 org.read、org.members.read,以及使用 agent 的 agents.use。 */
48
52
  const SERVICE_ALLOWED = new Set([
@@ -4,7 +4,7 @@ import { type OrgSandboxLimits, type OrgSettings, type OrgSettingsDeployment, ty
4
4
  /**
5
5
  * 组织设置(`/api/v1/orgs/:orgId/settings`):成员可读,修改需 `org.update`(admin)。
6
6
  * 响应带 `deployment`(部署默认值,如沙箱出站),设置页据此展示「跟随部署」时的实际取值;
7
- * 以及只读的 `sandboxLimits`(组织实际生效的沙箱 cpu / 内存与来源,企业管理员在部署设置里覆盖,C19)。
7
+ * 以及只读的 `sandboxLimits`(组织实际生效的沙箱 cpu / 内存与来源,超级管理员在部署设置里覆盖,C19)。
8
8
  */
9
9
  type SettingsResponse = {
10
10
  settings: OrgSettings;
@@ -15,6 +15,8 @@ import { OrgLock } from "./org-lock.js";
15
15
  * - `wakeOnBackgroundTask`:组织对 `runtime.wakeOnBackgroundTask` 的覆盖(缺省跟随部署),见 {@link effectiveWakeOnBackgroundTask}。
16
16
  * - `sandboxEgress`:组织的沙箱出站(Ruling M19 / D6),缺省跟随部署的 `sandbox.limits.egress` + `allowHosts`。
17
17
  * 见 {@link effectiveSandboxEgress}。存量值非法时按 `none` 读(宁可断网,不悄悄放宽到部署默认)。
18
+ * - `platformTool`: the `Platform` builtin for the whole org (Platform tool spec §3): `on`,
19
+ * `read-only` (writes listed as unavailable) or `off` (default `on`).
18
20
  */
19
21
  /** 组织沙箱出站白名单的主机数上限。 */
20
22
  export declare const ORG_SANDBOX_ALLOW_HOSTS_MAX = 200;
@@ -43,6 +45,11 @@ export declare const OrgSettingsSchema: z.ZodObject<{
43
45
  allow: "allow";
44
46
  ask: "ask";
45
47
  }>>>;
48
+ platformTool: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
49
+ off: "off";
50
+ on: "on";
51
+ "read-only": "read-only";
52
+ }>>>;
46
53
  sandboxEgress: z.ZodCatch<z.ZodOptional<z.ZodObject<{
47
54
  mode: z.ZodEnum<{
48
55
  allowlist: "allowlist";
@@ -67,6 +74,11 @@ export declare const OrgSettingsPatchSchema: z.ZodObject<{
67
74
  allow: "allow";
68
75
  ask: "ask";
69
76
  }>>;
77
+ platformTool: z.ZodOptional<z.ZodEnum<{
78
+ off: "off";
79
+ on: "on";
80
+ "read-only": "read-only";
81
+ }>>;
70
82
  wakeOnBackgroundTask: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
71
83
  sandboxEgress: z.ZodOptional<z.ZodNullable<z.ZodObject<{
72
84
  mode: z.ZodEnum<{
@@ -87,14 +99,14 @@ export declare function effectiveSandboxEgress(deployment: DeploymentEgress, org
87
99
  /** Whether a finished background task wakes an idle conversation: the org's setting, else the deployment's. */
88
100
  export declare function effectiveWakeOnBackgroundTask(deployment: boolean, org: OrgSettings["wakeOnBackgroundTask"]): boolean;
89
101
  /**
90
- * 组织实际生效的沙箱限额(C19 / Ruling M16):企业管理员的覆盖(部署设置 `sandboxLimitOverrides[orgId]`)
102
+ * 组织实际生效的沙箱限额(C19 / Ruling M16):超级管理员的覆盖(部署设置 `sandboxLimitOverrides[orgId]`)
91
103
  * 给出的 cpu / memoryMb 替换部署默认,未给的项、disk 与出站沿用 `deployment`。只在创建沙箱时读取。
92
104
  */
93
105
  export declare function effectiveSandboxLimits(deployment: SandboxLimits, override: {
94
106
  cpu?: number | undefined;
95
107
  memoryMb?: number | undefined;
96
108
  } | undefined): SandboxLimits;
97
- /** 组织设置 GET 带回的只读沙箱限额:实际生效值与来源(有企业管理员的覆盖为 `override`)。 */
109
+ /** 组织设置 GET 带回的只读沙箱限额:实际生效值与来源(有超级管理员的覆盖为 `override`)。 */
98
110
  export interface OrgSandboxLimits {
99
111
  cpu: number;
100
112
  memoryMb: number;
@@ -123,7 +135,7 @@ export declare class OrgSettingsService {
123
135
  config: Pick<KernelConfigService, "get">);
124
136
  /** 部署默认值(设置页展示「跟随部署」时的实际取值)。 */
125
137
  deployment(): OrgSettingsDeployment;
126
- /** 组织实际生效的沙箱 cpu / 内存(只读;由企业管理员在部署设置里覆盖)。 */
138
+ /** 组织实际生效的沙箱 cpu / 内存(只读;由超级管理员在部署设置里覆盖)。 */
127
139
  sandboxLimits(orgId: string): Promise<OrgSandboxLimits>;
128
140
  get(orgId: string): Promise<OrgSettings>;
129
141
  update(orgId: string, patch: OrgSettingsPatch, actorAccountId: string, actorTokenId?: string): Promise<OrgSettings>;
@@ -28,6 +28,8 @@ import { OrgLock } from "./org-lock.js";
28
28
  * - `wakeOnBackgroundTask`:组织对 `runtime.wakeOnBackgroundTask` 的覆盖(缺省跟随部署),见 {@link effectiveWakeOnBackgroundTask}。
29
29
  * - `sandboxEgress`:组织的沙箱出站(Ruling M19 / D6),缺省跟随部署的 `sandbox.limits.egress` + `allowHosts`。
30
30
  * 见 {@link effectiveSandboxEgress}。存量值非法时按 `none` 读(宁可断网,不悄悄放宽到部署默认)。
31
+ * - `platformTool`: the `Platform` builtin for the whole org (Platform tool spec §3): `on`,
32
+ * `read-only` (writes listed as unavailable) or `off` (default `on`).
31
33
  */
32
34
  /** 组织沙箱出站白名单的主机数上限。 */
33
35
  export const ORG_SANDBOX_ALLOW_HOSTS_MAX = 200;
@@ -58,6 +60,7 @@ export const OrgSettingsSchema = z.object({
58
60
  toolSearch: z.enum(["on", "off"]).default("on").catch("on"),
59
61
  locale: z.enum(["zh", "en"]).default("en").catch("en"),
60
62
  sandboxToolPolicy: z.enum(["allow", "ask"]).default("allow").catch("allow"),
63
+ platformTool: z.enum(["on", "read-only", "off"]).default("on").catch("on"),
61
64
  sandboxEgress: SandboxEgressSettingSchema.optional().catch({ mode: "none" }),
62
65
  /** Overrides `runtime.wakeOnBackgroundTask`; absent follows the deployment. */
63
66
  wakeOnBackgroundTask: z.boolean().optional().catch(undefined),
@@ -68,6 +71,7 @@ export const OrgSettingsPatchSchema = z
68
71
  toolSearch: z.enum(["on", "off"]).optional(),
69
72
  locale: z.enum(["zh", "en"]).optional(),
70
73
  sandboxToolPolicy: z.enum(["allow", "ask"]).optional(),
74
+ platformTool: z.enum(["on", "read-only", "off"]).optional(),
71
75
  /** null clears (follow the deployment again). */
72
76
  wakeOnBackgroundTask: z.boolean().nullable().optional(),
73
77
  /** null 清除(恢复跟随部署默认)。 */
@@ -90,7 +94,7 @@ export function effectiveWakeOnBackgroundTask(deployment, org) {
90
94
  return org ?? deployment;
91
95
  }
92
96
  /**
93
- * 组织实际生效的沙箱限额(C19 / Ruling M16):企业管理员的覆盖(部署设置 `sandboxLimitOverrides[orgId]`)
97
+ * 组织实际生效的沙箱限额(C19 / Ruling M16):超级管理员的覆盖(部署设置 `sandboxLimitOverrides[orgId]`)
94
98
  * 给出的 cpu / memoryMb 替换部署默认,未给的项、disk 与出站沿用 `deployment`。只在创建沙箱时读取。
95
99
  */
96
100
  export function effectiveSandboxLimits(deployment, override) {
@@ -139,7 +143,7 @@ let OrgSettingsService = class OrgSettingsService {
139
143
  sandboxEgress: { mode: lim.egress, allowHosts: [...lim.allowHosts] },
140
144
  };
141
145
  }
142
- /** 组织实际生效的沙箱 cpu / 内存(只读;由企业管理员在部署设置里覆盖)。 */
146
+ /** 组织实际生效的沙箱 cpu / 内存(只读;由超级管理员在部署设置里覆盖)。 */
143
147
  async sandboxLimits(orgId) {
144
148
  const lim = this.config.get().sandbox.limits;
145
149
  const override = await readSandboxLimitOverride(this.db.db, orgId);
@@ -8,6 +8,7 @@ import { FILE_PREVIEW_TIMEOUT } from "./files/previewers.js";
8
8
  import { LIST_MODELS_TIMEOUT } from "./runtime/providers.js";
9
9
  import { AGENT_LOOP_FACTORY, type AgentLoopFactory } from "./runtime/run-steps.js";
10
10
  import { RUN_HOOKS, type RunHooks } from "./runtime/run-worker.js";
11
+ import { SUBAGENT_MESSAGES_HOOKS, type SubagentMessagesHooks } from "./runtime/subagents/messages.js";
11
12
  import { USAGE_REPORT_RETRY, type UsageReportRetry } from "./runtime/usage-report.js";
12
13
  import { SANDBOX_LEASE_TIMINGS, type SandboxLeaseTimings } from "./sandbox/leases.js";
13
14
  import { TOOL_PIPELINE_HOOKS, type ToolPipelineHooks } from "./tools/pipeline.js";
@@ -20,6 +21,7 @@ import { EMBED_TOKEN_CLOCK } from "./ui/embed-token.js";
20
21
  * - `RUN_HOOKS`: the run worker's hooks;
21
22
  * - `EVAL_REPLAY_HOOKS`: the hooks of the eval full-run replay and the judge;
22
23
  * - `TOOL_PIPELINE_HOOKS`: the tool pipeline's hooks and policy decision;
24
+ * - `SUBAGENT_MESSAGES_HOOKS`: the sub-agent message tools' hooks (a send raced by a run's end);
23
25
  * - `BOOTSTRAP_LOCK_TTL`, `FILE_PREVIEW_TIMEOUT`, `LIST_MODELS_TIMEOUT`, `USAGE_REPORT_RETRY`,
24
26
  * `SANDBOX_LEASE_TIMINGS`, `CHANNEL_WEBHOOK_TIMINGS`: shorter timings;
25
27
  * - `EMBED_TOKEN_CLOCK`: the clock embed tokens are issued and checked with;
@@ -30,6 +32,7 @@ interface KernelSeams {
30
32
  [RUN_HOOKS]: RunHooks;
31
33
  [EVAL_REPLAY_HOOKS]: EvalReplayHooks;
32
34
  [TOOL_PIPELINE_HOOKS]: ToolPipelineHooks;
35
+ [SUBAGENT_MESSAGES_HOOKS]: SubagentMessagesHooks;
33
36
  [BOOTSTRAP_LOCK_TTL]: number;
34
37
  [FILE_PREVIEW_TIMEOUT]: number;
35
38
  [LIST_MODELS_TIMEOUT]: number;
package/dist/overrides.js CHANGED
@@ -6,6 +6,7 @@ import { FILE_PREVIEW_TIMEOUT } from "./files/previewers.js";
6
6
  import { LIST_MODELS_TIMEOUT } from "./runtime/providers.js";
7
7
  import { AGENT_LOOP_FACTORY } from "./runtime/run-steps.js";
8
8
  import { RUN_HOOKS } from "./runtime/run-worker.js";
9
+ import { SUBAGENT_MESSAGES_HOOKS, } from "./runtime/subagents/messages.js";
9
10
  import { USAGE_REPORT_RETRY } from "./runtime/usage-report.js";
10
11
  import { SANDBOX_LEASE_TIMINGS } from "./sandbox/leases.js";
11
12
  import { TOOL_PIPELINE_HOOKS } from "./tools/pipeline.js";
@@ -15,6 +16,7 @@ const SEAM_TOKENS = [
15
16
  RUN_HOOKS,
16
17
  EVAL_REPLAY_HOOKS,
17
18
  TOOL_PIPELINE_HOOKS,
19
+ SUBAGENT_MESSAGES_HOOKS,
18
20
  BOOTSTRAP_LOCK_TTL,
19
21
  FILE_PREVIEW_TIMEOUT,
20
22
  LIST_MODELS_TIMEOUT,
@@ -0,0 +1,48 @@
1
+ import { KernelDb } from "../infra/database/kernel-db.js";
2
+ import type { OrgRole } from "../orgs/roles.js";
3
+ import { type OrgSettings } from "../orgs/settings.service.js";
4
+ /** What `availability()` (./availability.ts) decides on, read live for each call (spec §6.1). */
5
+ export interface ActorFacts {
6
+ /**
7
+ * The actor's role in the org; null: not a member any more, or the account is disabled (the HTTP
8
+ * auth refuses a disabled account on every request).
9
+ */
10
+ role: OrgRole | null;
11
+ isSuperAdmin: boolean;
12
+ /** A person who can see and answer a confirmation is behind this run. */
13
+ personPresent: boolean;
14
+ /** The root conversation's agent is `private` and its owner is the actor. */
15
+ agentPrivateToActor: boolean;
16
+ /** The org setting `platformTool`. */
17
+ setting: OrgSettings["platformTool"];
18
+ }
19
+ /**
20
+ * Reads the facts about the actor of a `Platform` call: the run's trigger account (spec §6.1),
21
+ * re-read on every call, as the HTTP guards would.
22
+ *
23
+ * A person is present when all of these hold:
24
+ * - there is a run, it belongs to the conversation and its trigger account is the actor;
25
+ * - the root conversation of the tree (a sub-agent's is followed up through its parents) is a
26
+ * `chat` (an `eval` conversation replays, nobody watches it);
27
+ * - the actor is an active member of the org, and not the org's anonymous guest account (a channel
28
+ * message from an unlinked user under the `anonymous` policy runs as that account).
29
+ *
30
+ * The agent is private to the actor when the root conversation's agent is `private` and owned by
31
+ * the actor (a sub-agent's own agent does not count; Platform tool spec §6.1).
32
+ *
33
+ * Service tokens cannot start runs (posting a message requires a user principal), so no run is
34
+ * token-started; a wake run (`budget_run_id` set) runs as the person whose run it continues and
35
+ * counts as present. No new run column is needed to tell the origins apart.
36
+ */
37
+ export declare class PlatformActor {
38
+ private readonly db;
39
+ constructor(db: KernelDb);
40
+ facts(ctx: {
41
+ orgId: string;
42
+ accountId: string;
43
+ /** The calling agent (from the runtime, never from the model's input). */
44
+ agentId: string;
45
+ conversationId: string;
46
+ runId?: string | null;
47
+ }): Promise<ActorFacts>;
48
+ }
@@ -0,0 +1,100 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from "@nestjs/common";
11
+ import { KernelDb } from "../infra/database/kernel-db.js";
12
+ import { readOrgSettings } from "../orgs/settings.service.js";
13
+ import { rootConversationOf } from "../runtime/subagents/child.js";
14
+ /**
15
+ * Reads the facts about the actor of a `Platform` call: the run's trigger account (spec §6.1),
16
+ * re-read on every call, as the HTTP guards would.
17
+ *
18
+ * A person is present when all of these hold:
19
+ * - there is a run, it belongs to the conversation and its trigger account is the actor;
20
+ * - the root conversation of the tree (a sub-agent's is followed up through its parents) is a
21
+ * `chat` (an `eval` conversation replays, nobody watches it);
22
+ * - the actor is an active member of the org, and not the org's anonymous guest account (a channel
23
+ * message from an unlinked user under the `anonymous` policy runs as that account).
24
+ *
25
+ * The agent is private to the actor when the root conversation's agent is `private` and owned by
26
+ * the actor (a sub-agent's own agent does not count; Platform tool spec §6.1).
27
+ *
28
+ * Service tokens cannot start runs (posting a message requires a user principal), so no run is
29
+ * token-started; a wake run (`budget_run_id` set) runs as the person whose run it continues and
30
+ * counts as present. No new run column is needed to tell the origins apart.
31
+ */
32
+ let PlatformActor = class PlatformActor {
33
+ db;
34
+ constructor(db) {
35
+ this.db = db;
36
+ }
37
+ async facts(ctx) {
38
+ const rootId = await rootConversationOf(this.db.db, ctx.conversationId);
39
+ const [account, settings, root, anonymous, run] = await Promise.all([
40
+ this.db
41
+ .selectFrom("accounts")
42
+ .leftJoin("memberships", (j) => j
43
+ .onRef("memberships.account_id", "=", "accounts.id")
44
+ .on("memberships.org_id", "=", ctx.orgId))
45
+ .select(["accounts.is_super_admin", "accounts.status", "memberships.role"])
46
+ .where("accounts.id", "=", ctx.accountId)
47
+ .executeTakeFirst(),
48
+ readOrgSettings(this.db.db, ctx.orgId),
49
+ this.db
50
+ .selectFrom("conversations")
51
+ .select(["kind", "agent_id"])
52
+ .where("id", "=", rootId)
53
+ .where("org_id", "=", ctx.orgId)
54
+ .executeTakeFirst(),
55
+ this.db
56
+ .selectFrom("org_anonymous_accounts")
57
+ .select("account_id")
58
+ .where("org_id", "=", ctx.orgId)
59
+ .where("account_id", "=", ctx.accountId)
60
+ .executeTakeFirst(),
61
+ ctx.runId == null
62
+ ? undefined
63
+ : this.db
64
+ .selectFrom("runs")
65
+ .select("trigger_account_id")
66
+ .where("id", "=", ctx.runId)
67
+ .where("conversation_id", "=", ctx.conversationId)
68
+ .executeTakeFirst(),
69
+ ]);
70
+ // the super admin's "own private agent" is the tree's root agent: a sub-agent (a template or
71
+ // general-purpose child) of a shared agent's conversation never counts as private
72
+ const agentId = rootId === ctx.conversationId ? ctx.agentId : root?.agent_id;
73
+ const agent = agentId == null
74
+ ? undefined
75
+ : await this.db
76
+ .selectFrom("agents")
77
+ .select(["owner_account_id", "visibility"])
78
+ .where("id", "=", agentId)
79
+ .where("org_id", "=", ctx.orgId)
80
+ .where("deleted_at", "is", null)
81
+ .executeTakeFirst();
82
+ const activeMember = account?.role != null && account.status === "active";
83
+ return {
84
+ role: activeMember ? (account?.role ?? null) : null,
85
+ isSuperAdmin: account?.is_super_admin === true && account.status === "active",
86
+ // the run is the actor's, in this conversation, and its tree's root is a `chat`
87
+ personPresent: activeMember &&
88
+ anonymous === undefined &&
89
+ run?.trigger_account_id === ctx.accountId &&
90
+ root?.kind === "chat",
91
+ agentPrivateToActor: agent?.visibility === "private" && agent.owner_account_id === ctx.accountId,
92
+ setting: settings.platformTool,
93
+ };
94
+ }
95
+ };
96
+ PlatformActor = __decorate([
97
+ Injectable(),
98
+ __param(0, Inject(KernelDb))
99
+ ], PlatformActor);
100
+ export { PlatformActor };
@@ -0,0 +1,18 @@
1
+ export interface AgentDocTopic {
2
+ id: string;
3
+ title: string;
4
+ }
5
+ /**
6
+ * The documentation topics the `Platform` tool's `read` action serves (Platform tool spec §8):
7
+ * the Markdown files of the SDK's `agent-docs` directory, versioned with the contracts they
8
+ * describe. The files are immutable within a version, so one read per process is a cache of
9
+ * package files, not shared state.
10
+ */
11
+ export declare class AgentDocs {
12
+ private cache;
13
+ private load;
14
+ /** Topic ids (path without `.md`, e.g. `extension-points/channel`) with their titles. */
15
+ topics(): AgentDocTopic[];
16
+ /** The Markdown of a topic, or null when there is none. */
17
+ read(id: string): string | null;
18
+ }