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

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 (507) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +39 -13
  3. package/dist/admin/admin.controller.js +33 -17
  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 +51 -22
  19. package/dist/agents/agents.service.js +172 -70
  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/org-templates.d.ts +176 -0
  27. package/dist/agents/org-templates.js +827 -0
  28. package/dist/agents/pending-connector-requests.d.ts +77 -0
  29. package/dist/agents/pending-connector-requests.js +215 -0
  30. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  31. package/dist/agents/pending-connectors.controller.js +91 -0
  32. package/dist/agents/pending-connectors.service.d.ts +62 -0
  33. package/dist/agents/pending-connectors.service.js +282 -0
  34. package/dist/agents/templates.controller.d.ts +86 -5
  35. package/dist/agents/templates.controller.js +171 -7
  36. package/dist/agents/templates.d.ts +127 -23
  37. package/dist/agents/templates.js +475 -52
  38. package/dist/background/background.module.js +8 -1
  39. package/dist/background/finish.d.ts +3 -2
  40. package/dist/background/launch-lock.d.ts +4 -3
  41. package/dist/background/launch-lock.js +4 -3
  42. package/dist/background/poll.job.d.ts +9 -6
  43. package/dist/background/poll.job.js +30 -22
  44. package/dist/background/session.d.ts +13 -2
  45. package/dist/background/session.js +13 -0
  46. package/dist/background/stop.d.ts +12 -6
  47. package/dist/background/stop.js +57 -39
  48. package/dist/background/store.d.ts +18 -6
  49. package/dist/background/store.js +12 -6
  50. package/dist/background/tasks.service.d.ts +15 -5
  51. package/dist/background/tasks.service.js +42 -17
  52. package/dist/background/wake-rules.d.ts +27 -18
  53. package/dist/background/wake-rules.js +52 -22
  54. package/dist/background/wake.d.ts +13 -11
  55. package/dist/background/wake.js +20 -14
  56. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  57. package/dist/catalog/admin-catalog.controller.js +213 -42
  58. package/dist/catalog/catalog-content.d.ts +58 -32
  59. package/dist/catalog/catalog-content.js +34 -8
  60. package/dist/catalog/catalog-import.module.d.ts +7 -0
  61. package/dist/catalog/catalog-import.module.js +60 -0
  62. package/dist/catalog/catalog-items.d.ts +111 -7
  63. package/dist/catalog/catalog-items.js +279 -13
  64. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  65. package/dist/catalog/catalog-scope.service.js +1116 -0
  66. package/dist/catalog/catalog.module.d.ts +7 -9
  67. package/dist/catalog/catalog.module.js +41 -31
  68. package/dist/catalog/catalog.service.d.ts +101 -29
  69. package/dist/catalog/catalog.service.js +104 -106
  70. package/dist/catalog/cli.d.ts +11 -1
  71. package/dist/catalog/cli.js +26 -1
  72. package/dist/catalog/component-promotion.d.ts +96 -0
  73. package/dist/catalog/component-promotion.js +395 -0
  74. package/dist/catalog/component-scope.controller.d.ts +152 -0
  75. package/dist/catalog/component-scope.controller.js +287 -0
  76. package/dist/catalog/component-scope.service.d.ts +303 -0
  77. package/dist/catalog/component-scope.service.js +936 -0
  78. package/dist/catalog/component-state.d.ts +174 -0
  79. package/dist/catalog/component-state.js +437 -0
  80. package/dist/catalog/job-ids.d.ts +30 -0
  81. package/dist/catalog/job-ids.js +25 -0
  82. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  83. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  84. package/dist/catalog/marketplaces.controller.js +56 -7
  85. package/dist/catalog/marketplaces.service.d.ts +54 -14
  86. package/dist/catalog/marketplaces.service.js +71 -22
  87. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  88. package/dist/catalog/org-catalog.controller.js +181 -65
  89. package/dist/catalog/org-catalog.service.d.ts +65 -33
  90. package/dist/catalog/org-catalog.service.js +324 -157
  91. package/dist/catalog/org-extension-switch.d.ts +41 -0
  92. package/dist/catalog/org-extension-switch.js +115 -0
  93. package/dist/catalog/org-extension.controller.d.ts +119 -0
  94. package/dist/catalog/org-extension.controller.js +266 -0
  95. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  96. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  97. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  98. package/dist/catalog/org-plugin-uploads.js +116 -0
  99. package/dist/catalog/owned-items.d.ts +184 -0
  100. package/dist/catalog/owned-items.js +789 -0
  101. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  102. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  103. package/dist/catalog/ownership.d.ts +172 -0
  104. package/dist/catalog/ownership.js +326 -0
  105. package/dist/catalog/platform-components.d.ts +221 -0
  106. package/dist/catalog/platform-components.js +761 -0
  107. package/dist/catalog/platform-migration.d.ts +115 -0
  108. package/dist/catalog/platform-migration.js +582 -0
  109. package/dist/catalog/plugin-import.d.ts +178 -34
  110. package/dist/catalog/plugin-import.js +622 -82
  111. package/dist/catalog/plugin-install.d.ts +185 -41
  112. package/dist/catalog/plugin-install.js +758 -126
  113. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  114. package/dist/catalog/plugin-upgrade.js +1147 -1136
  115. package/dist/catalog/request-rules.d.ts +65 -0
  116. package/dist/catalog/request-rules.js +217 -0
  117. package/dist/catalog/requests.service.d.ts +193 -118
  118. package/dist/catalog/requests.service.js +526 -343
  119. package/dist/catalog/reserved-names.d.ts +8 -0
  120. package/dist/catalog/reserved-names.js +42 -0
  121. package/dist/catalog/scope-orgs.d.ts +21 -0
  122. package/dist/catalog/scope-orgs.js +67 -0
  123. package/dist/catalog/scope-state.d.ts +35 -0
  124. package/dist/catalog/scope-state.js +87 -0
  125. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  126. package/dist/catalog/scope-sync-workers.js +29 -0
  127. package/dist/catalog/scope-sync.d.ts +176 -0
  128. package/dist/catalog/scope-sync.js +576 -0
  129. package/dist/catalog/scope.d.ts +42 -0
  130. package/dist/catalog/scope.js +42 -0
  131. package/dist/catalog/unshare.d.ts +22 -0
  132. package/dist/catalog/unshare.js +118 -0
  133. package/dist/channels/actions.js +1 -0
  134. package/dist/channels/cards.js +20 -2
  135. package/dist/channels/channels.module.js +2 -0
  136. package/dist/channels/inbound.d.ts +9 -1
  137. package/dist/channels/inbound.js +67 -5
  138. package/dist/channels/phrases.d.ts +35 -0
  139. package/dist/channels/phrases.js +29 -0
  140. package/dist/config/docs.js +3 -1
  141. package/dist/config/schema.d.ts +6 -2
  142. package/dist/config/schema.js +46 -22
  143. package/dist/conversations/access.d.ts +6 -4
  144. package/dist/conversations/access.js +27 -5
  145. package/dist/conversations/agent-tree.d.ts +46 -0
  146. package/dist/conversations/agent-tree.js +92 -0
  147. package/dist/conversations/conversations.controller.d.ts +43 -18
  148. package/dist/conversations/conversations.controller.js +79 -38
  149. package/dist/conversations/conversations.module.d.ts +1 -1
  150. package/dist/conversations/conversations.module.js +7 -7
  151. package/dist/conversations/conversations.service.d.ts +69 -12
  152. package/dist/conversations/conversations.service.js +106 -27
  153. package/dist/conversations/environment-status.d.ts +24 -0
  154. package/dist/conversations/environment-status.js +71 -0
  155. package/dist/conversations/event-log.d.ts +20 -5
  156. package/dist/conversations/event-log.js +60 -0
  157. package/dist/conversations/events.d.ts +84 -2
  158. package/dist/conversations/events.js +91 -17
  159. package/dist/conversations/queue.service.d.ts +1 -1
  160. package/dist/conversations/queue.service.js +5 -0
  161. package/dist/conversations/titles.d.ts +5 -3
  162. package/dist/conversations/titles.js +21 -8
  163. package/dist/conversations/tree.d.ts +17 -0
  164. package/dist/conversations/tree.js +42 -0
  165. package/dist/ctx/create-ctx.d.ts +5 -0
  166. package/dist/ctx/create-ctx.js +15 -5
  167. package/dist/db/kernel-schema.d.ts +362 -18
  168. package/dist/environments/access.d.ts +41 -0
  169. package/dist/environments/access.js +77 -0
  170. package/dist/environments/conversation-environments.d.ts +61 -0
  171. package/dist/environments/conversation-environments.js +170 -0
  172. package/dist/environments/dto.d.ts +25 -0
  173. package/dist/environments/dto.js +12 -0
  174. package/dist/environments/environments.controller.d.ts +33 -0
  175. package/dist/environments/environments.controller.js +110 -0
  176. package/dist/environments/environments.module.d.ts +8 -0
  177. package/dist/environments/environments.module.js +27 -0
  178. package/dist/environments/environments.service.d.ts +153 -0
  179. package/dist/environments/environments.service.js +541 -0
  180. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  181. package/dist/environments/legacy-cleanup.job.js +141 -0
  182. package/dist/errors.d.ts +82 -2
  183. package/dist/errors.js +82 -2
  184. package/dist/evals/reconstruct.d.ts +18 -9
  185. package/dist/evals/reconstruct.js +26 -7
  186. package/dist/evals/run-replay.d.ts +4 -2
  187. package/dist/evals/run-replay.js +16 -4
  188. package/dist/evals/step-replay.d.ts +2 -5
  189. package/dist/evals/step-replay.js +1 -1
  190. package/dist/evals/trajectory.service.d.ts +8 -3
  191. package/dist/evals/trajectory.service.js +26 -14
  192. package/dist/evals/worker.d.ts +5 -5
  193. package/dist/evals/worker.js +9 -3
  194. package/dist/extensions/admin-ops.d.ts +36 -10
  195. package/dist/extensions/admin-ops.js +65 -42
  196. package/dist/extensions/admin-view.d.ts +37 -10
  197. package/dist/extensions/admin-view.js +103 -20
  198. package/dist/extensions/bootstrap.d.ts +17 -4
  199. package/dist/extensions/bootstrap.js +70 -9
  200. package/dist/extensions/cli.d.ts +12 -0
  201. package/dist/extensions/cli.js +11 -2
  202. package/dist/extensions/deployment-config.d.ts +28 -5
  203. package/dist/extensions/deployment-config.js +48 -7
  204. package/dist/extensions/effective-config.d.ts +127 -0
  205. package/dist/extensions/effective-config.js +368 -0
  206. package/dist/extensions/extensions.module.js +8 -2
  207. package/dist/extensions/hooks.d.ts +37 -4
  208. package/dist/extensions/hooks.js +82 -16
  209. package/dist/extensions/host.d.ts +19 -1
  210. package/dist/extensions/host.js +30 -7
  211. package/dist/extensions/installs.d.ts +20 -8
  212. package/dist/extensions/installs.js +37 -15
  213. package/dist/extensions/org-config.d.ts +75 -6
  214. package/dist/extensions/org-config.js +184 -32
  215. package/dist/extensions/org-levels.d.ts +37 -0
  216. package/dist/extensions/org-levels.js +71 -0
  217. package/dist/extensions/org-overrides.d.ts +151 -0
  218. package/dist/extensions/org-overrides.js +524 -0
  219. package/dist/extensions/permission-view.d.ts +16 -4
  220. package/dist/extensions/permission-view.js +4 -4
  221. package/dist/extensions/plugin-items.d.ts +21 -0
  222. package/dist/extensions/plugin-items.js +42 -0
  223. package/dist/extensions/point-defaults.d.ts +12 -5
  224. package/dist/extensions/point-defaults.js +37 -9
  225. package/dist/extensions/resolve.d.ts +5 -1
  226. package/dist/extensions/resolve.js +15 -2
  227. package/dist/files/previewers.d.ts +8 -1
  228. package/dist/files/previewers.js +35 -6
  229. package/dist/http/api.module.js +23 -3
  230. package/dist/http/app.d.ts +11 -2
  231. package/dist/http/app.js +31 -5
  232. package/dist/identity/accounts.d.ts +29 -29
  233. package/dist/identity/accounts.js +47 -47
  234. package/dist/identity/audit.d.ts +2 -1
  235. package/dist/identity/auth.guard.d.ts +13 -5
  236. package/dist/identity/auth.guard.js +26 -9
  237. package/dist/identity/identity.module.d.ts +1 -1
  238. package/dist/identity/identity.module.js +4 -4
  239. package/dist/identity/me.controller.js +1 -1
  240. package/dist/identity/principal.d.ts +3 -3
  241. package/dist/identity/principal.js +3 -3
  242. package/dist/identity/settings.d.ts +22 -11
  243. package/dist/identity/settings.js +53 -18
  244. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  245. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  246. package/dist/inbox/inbox.module.d.ts +4 -1
  247. package/dist/inbox/inbox.module.js +7 -3
  248. package/dist/inbox/inbox.service.d.ts +62 -3
  249. package/dist/inbox/inbox.service.js +74 -4
  250. package/dist/inbox/org-notices.d.ts +63 -0
  251. package/dist/inbox/org-notices.js +91 -0
  252. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  253. package/dist/inbox/platform-inbox.controller.js +58 -0
  254. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  255. package/dist/inbox/platform-inbox.service.js +263 -0
  256. package/dist/inbox/platform-notices.d.ts +19 -0
  257. package/dist/inbox/platform-notices.js +9 -0
  258. package/dist/index.d.ts +1 -1
  259. package/dist/index.js +1 -1
  260. package/dist/infra/cli/kernel-cli.module.js +9 -1
  261. package/dist/infra/config/kernel-config.service.js +21 -1
  262. package/dist/infra/database/xact-lock.d.ts +1 -1
  263. package/dist/infra/database/xact-lock.js +1 -1
  264. package/dist/infra/events/kernel-events.d.ts +11 -2
  265. package/dist/infra/queue/add-job-once.d.ts +14 -0
  266. package/dist/infra/queue/add-job-once.js +16 -0
  267. package/dist/kernel.module.js +6 -0
  268. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  269. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  270. package/dist/models/prices.d.ts +5 -5
  271. package/dist/models/prices.js +4 -4
  272. package/dist/models/purposes.controller.d.ts +6 -4
  273. package/dist/models/purposes.controller.js +13 -7
  274. package/dist/models/purposes.d.ts +20 -9
  275. package/dist/models/purposes.js +17 -8
  276. package/dist/orgs/directory-sync.d.ts +14 -5
  277. package/dist/orgs/directory-sync.js +41 -17
  278. package/dist/orgs/offboarding.d.ts +9 -7
  279. package/dist/orgs/offboarding.js +28 -17
  280. package/dist/orgs/org-lock.d.ts +5 -0
  281. package/dist/orgs/org-lock.js +13 -0
  282. package/dist/orgs/org.guard.d.ts +10 -0
  283. package/dist/orgs/org.guard.js +43 -32
  284. package/dist/orgs/orgs.module.js +3 -0
  285. package/dist/orgs/orgs.service.d.ts +20 -7
  286. package/dist/orgs/orgs.service.js +32 -12
  287. package/dist/orgs/roles.d.ts +1 -1
  288. package/dist/orgs/roles.js +5 -1
  289. package/dist/orgs/settings.controller.d.ts +1 -1
  290. package/dist/orgs/settings.service.d.ts +15 -3
  291. package/dist/orgs/settings.service.js +6 -2
  292. package/dist/overrides.d.ts +3 -0
  293. package/dist/overrides.js +2 -0
  294. package/dist/platform/actor.d.ts +48 -0
  295. package/dist/platform/actor.js +100 -0
  296. package/dist/platform/agent-docs.d.ts +18 -0
  297. package/dist/platform/agent-docs.js +59 -0
  298. package/dist/platform/availability.d.ts +14 -0
  299. package/dist/platform/availability.js +43 -0
  300. package/dist/platform/errors.d.ts +11 -0
  301. package/dist/platform/errors.js +26 -0
  302. package/dist/platform/exclusions.d.ts +12 -0
  303. package/dist/platform/exclusions.js +1387 -0
  304. package/dist/platform/method.d.ts +6 -0
  305. package/dist/platform/method.js +15 -0
  306. package/dist/platform/operation.d.ts +92 -0
  307. package/dist/platform/operation.js +35 -0
  308. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  309. package/dist/platform/ops/agent-templates.ops.js +92 -0
  310. package/dist/platform/ops/agents.ops.d.ts +19 -0
  311. package/dist/platform/ops/agents.ops.js +294 -0
  312. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  313. package/dist/platform/ops/connectors.ops.js +126 -0
  314. package/dist/platform/ops/errors.d.ts +11 -0
  315. package/dist/platform/ops/errors.js +22 -0
  316. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  317. package/dist/platform/ops/extensions.ops.js +116 -0
  318. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  319. package/dist/platform/ops/marketplaces.ops.js +157 -0
  320. package/dist/platform/ops/paging.d.ts +14 -0
  321. package/dist/platform/ops/paging.js +20 -0
  322. package/dist/platform/ops/platform.ops.d.ts +23 -0
  323. package/dist/platform/ops/platform.ops.js +158 -0
  324. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  325. package/dist/platform/ops/plugins.ops.js +377 -0
  326. package/dist/platform/ops/requests.ops.d.ts +14 -0
  327. package/dist/platform/ops/requests.ops.js +153 -0
  328. package/dist/platform/ops/role.d.ts +4 -0
  329. package/dist/platform/ops/role.js +10 -0
  330. package/dist/platform/ops/skills.ops.d.ts +13 -0
  331. package/dist/platform/ops/skills.ops.js +98 -0
  332. package/dist/platform/ops/summary.d.ts +10 -0
  333. package/dist/platform/ops/summary.js +18 -0
  334. package/dist/platform/platform-ops.module.d.ts +7 -0
  335. package/dist/platform/platform-ops.module.js +55 -0
  336. package/dist/platform/platform.module.d.ts +8 -0
  337. package/dist/platform/platform.module.js +25 -0
  338. package/dist/platform/redact-orgs.d.ts +7 -0
  339. package/dist/platform/redact-orgs.js +52 -0
  340. package/dist/platform/registry.d.ts +30 -0
  341. package/dist/platform/registry.js +111 -0
  342. package/dist/roles/worker-role.d.ts +6 -4
  343. package/dist/roles/worker-role.js +14 -7
  344. package/dist/roles/worker.module.d.ts +1 -1
  345. package/dist/roles/worker.module.js +9 -1
  346. package/dist/runtime/context/build.d.ts +6 -4
  347. package/dist/runtime/context/build.js +26 -7
  348. package/dist/runtime/context/claude-tools.d.ts +2 -1
  349. package/dist/runtime/context/claude-tools.js +5 -4
  350. package/dist/runtime/context/compaction.js +9 -0
  351. package/dist/runtime/context/reminders.d.ts +2 -0
  352. package/dist/runtime/context/reminders.js +2 -0
  353. package/dist/runtime/context/skills.js +9 -2
  354. package/dist/runtime/context/tool-changes.d.ts +27 -0
  355. package/dist/runtime/context/tool-changes.js +60 -0
  356. package/dist/runtime/hook-calls.js +2 -0
  357. package/dist/runtime/langgraph-loop.d.ts +3 -1
  358. package/dist/runtime/langgraph-loop.js +35 -17
  359. package/dist/runtime/loop.d.ts +32 -4
  360. package/dist/runtime/maintenance.d.ts +7 -4
  361. package/dist/runtime/maintenance.js +23 -8
  362. package/dist/runtime/model-call.d.ts +30 -8
  363. package/dist/runtime/model-call.js +69 -19
  364. package/dist/runtime/run-control.d.ts +11 -1
  365. package/dist/runtime/run-control.js +12 -0
  366. package/dist/runtime/run-drafts.d.ts +85 -0
  367. package/dist/runtime/run-drafts.js +230 -0
  368. package/dist/runtime/run-jobs.d.ts +3 -5
  369. package/dist/runtime/run-jobs.js +3 -7
  370. package/dist/runtime/run-queue.d.ts +37 -3
  371. package/dist/runtime/run-queue.js +188 -11
  372. package/dist/runtime/run-worker.d.ts +11 -5
  373. package/dist/runtime/run-worker.js +54 -31
  374. package/dist/runtime/runtime.module.js +3 -0
  375. package/dist/runtime/step-log.d.ts +9 -4
  376. package/dist/runtime/step-log.js +8 -5
  377. package/dist/runtime/stream.controller.d.ts +23 -1
  378. package/dist/runtime/stream.controller.js +60 -3
  379. package/dist/runtime/stream.d.ts +4 -1
  380. package/dist/runtime/stream.js +27 -3
  381. package/dist/runtime/subagents/child.d.ts +55 -7
  382. package/dist/runtime/subagents/child.js +105 -7
  383. package/dist/runtime/subagents/definition.d.ts +12 -3
  384. package/dist/runtime/subagents/definition.js +43 -29
  385. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  386. package/dist/runtime/subagents/deliveries.js +228 -0
  387. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  388. package/dist/runtime/subagents/dispatch.js +212 -141
  389. package/dist/runtime/subagents/limits.d.ts +24 -5
  390. package/dist/runtime/subagents/limits.js +40 -6
  391. package/dist/runtime/subagents/messages.d.ts +95 -0
  392. package/dist/runtime/subagents/messages.js +328 -0
  393. package/dist/runtime/subagents/preamble.d.ts +4 -4
  394. package/dist/runtime/subagents/preamble.js +9 -7
  395. package/dist/runtime/subagents/progress.d.ts +8 -6
  396. package/dist/runtime/subagents/progress.js +11 -6
  397. package/dist/runtime/subagents/render.d.ts +30 -0
  398. package/dist/runtime/subagents/render.js +53 -0
  399. package/dist/runtime/subagents/roster.d.ts +24 -7
  400. package/dist/runtime/subagents/roster.js +47 -11
  401. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  402. package/dist/runtime/subagents/skill-fork.js +8 -4
  403. package/dist/runtime/subagents/status.d.ts +14 -0
  404. package/dist/runtime/subagents/status.js +23 -0
  405. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  406. package/dist/runtime/subagents/subagents.service.js +11 -6
  407. package/dist/runtime/usage-report.js +17 -12
  408. package/dist/runtime/waits.d.ts +140 -37
  409. package/dist/runtime/waits.js +394 -106
  410. package/dist/sandbox/jobs.d.ts +40 -13
  411. package/dist/sandbox/jobs.js +57 -20
  412. package/dist/sandbox/leases.d.ts +37 -54
  413. package/dist/sandbox/leases.js +71 -115
  414. package/dist/sandbox/providers.d.ts +2 -2
  415. package/dist/sandbox/providers.js +1 -1
  416. package/dist/sandbox/sandbox.module.d.ts +3 -2
  417. package/dist/sandbox/sandbox.module.js +4 -3
  418. package/dist/sandbox/sandbox.service.d.ts +229 -134
  419. package/dist/sandbox/sandbox.service.js +630 -409
  420. package/dist/skills/catalog.d.ts +3 -2
  421. package/dist/skills/catalog.js +21 -43
  422. package/dist/skills/changes.controller.d.ts +7 -0
  423. package/dist/skills/changes.controller.js +19 -1
  424. package/dist/skills/invoke.js +8 -3
  425. package/dist/skills/package.d.ts +20 -1
  426. package/dist/skills/package.js +28 -1
  427. package/dist/skills/skills.controller.d.ts +39 -4
  428. package/dist/skills/skills.controller.js +88 -10
  429. package/dist/skills/skills.module.js +10 -1
  430. package/dist/skills/skills.service.d.ts +106 -26
  431. package/dist/skills/skills.service.js +421 -75
  432. package/dist/skills/usable.d.ts +81 -0
  433. package/dist/skills/usable.js +379 -0
  434. package/dist/tools/approvals.service.d.ts +20 -2
  435. package/dist/tools/approvals.service.js +23 -4
  436. package/dist/tools/builtin-names.d.ts +21 -5
  437. package/dist/tools/builtin-names.js +30 -5
  438. package/dist/tools/builtins/agent.d.ts +23 -21
  439. package/dist/tools/builtins/agent.js +62 -55
  440. package/dist/tools/builtins/builtin-tools.d.ts +6 -2
  441. package/dist/tools/builtins/builtin-tools.js +37 -12
  442. package/dist/tools/builtins/handback.d.ts +28 -0
  443. package/dist/tools/builtins/handback.js +53 -0
  444. package/dist/tools/builtins/platform.d.ts +34 -0
  445. package/dist/tools/builtins/platform.js +362 -0
  446. package/dist/tools/builtins/sandbox/bash.js +13 -3
  447. package/dist/tools/builtins/sandbox/common.d.ts +43 -24
  448. package/dist/tools/builtins/sandbox/common.js +80 -45
  449. package/dist/tools/builtins/sandbox/edit.js +2 -2
  450. package/dist/tools/builtins/sandbox/glob.js +2 -2
  451. package/dist/tools/builtins/sandbox/grep.js +2 -4
  452. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  453. package/dist/tools/builtins/sandbox/index.js +1 -1
  454. package/dist/tools/builtins/sandbox/read.js +1 -1
  455. package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
  456. package/dist/tools/builtins/sandbox/task-output.js +30 -5
  457. package/dist/tools/builtins/sandbox/task-stop.js +2 -1
  458. package/dist/tools/builtins/sandbox/write.js +2 -2
  459. package/dist/tools/builtins/send-message.d.ts +56 -0
  460. package/dist/tools/builtins/send-message.js +100 -0
  461. package/dist/tools/builtins/skill-load.d.ts +22 -14
  462. package/dist/tools/builtins/skill-load.js +86 -57
  463. package/dist/tools/builtins/skill-write.js +1 -1
  464. package/dist/tools/builtins/web/extract.js +5 -1
  465. package/dist/tools/builtins/web/fetch.js +1 -0
  466. package/dist/tools/builtins/web/search.js +1 -0
  467. package/dist/tools/connectors.controller.d.ts +10 -0
  468. package/dist/tools/connectors.controller.js +12 -0
  469. package/dist/tools/connectors.service.d.ts +46 -5
  470. package/dist/tools/connectors.service.js +94 -15
  471. package/dist/tools/extension-tools.controller.d.ts +14 -0
  472. package/dist/tools/extension-tools.controller.js +37 -0
  473. package/dist/tools/info.d.ts +42 -1
  474. package/dist/tools/info.js +64 -1
  475. package/dist/tools/org-tool-switches.d.ts +74 -0
  476. package/dist/tools/org-tool-switches.js +184 -0
  477. package/dist/tools/pipeline.d.ts +46 -40
  478. package/dist/tools/pipeline.js +187 -364
  479. package/dist/tools/policy.d.ts +1 -1
  480. package/dist/tools/policy.js +36 -16
  481. package/dist/tools/registry.d.ts +98 -5
  482. package/dist/tools/registry.js +87 -9
  483. package/dist/tools/tools.module.js +12 -2
  484. package/dist/ui/views.d.ts +2 -1
  485. package/dist/ui/views.js +17 -3
  486. package/package.json +3 -3
  487. package/src/migrations/0074_subagent_tree.sql +50 -0
  488. package/src/migrations/0075_plugin_scope.sql +61 -0
  489. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  490. package/src/migrations/0077_scope_requests.sql +52 -0
  491. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  492. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  493. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  494. package/src/migrations/0081_platform_components.sql +129 -0
  495. package/src/migrations/0082_platform_migration.sql +33 -0
  496. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  497. package/src/migrations/0084_org_owned_items.sql +85 -0
  498. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  499. package/src/migrations/0086_org_layering.sql +30 -0
  500. package/src/migrations/0087_approval_summary.sql +6 -0
  501. package/src/migrations/0088_environments.sql +80 -0
  502. package/dist/catalog/upgrade-targets.d.ts +0 -56
  503. package/dist/catalog/upgrade-targets.js +0 -90
  504. package/dist/conversations/sandbox-status.d.ts +0 -24
  505. package/dist/conversations/sandbox-status.js +0 -52
  506. package/dist/extensions/org-config.controller.d.ts +0 -32
  507. package/dist/extensions/org-config.controller.js +0 -70
package/dist/http/app.js CHANGED
@@ -3,9 +3,11 @@ import fastifyCookie from "@fastify/cookie";
3
3
  import { ApiError, errorBody } from "../errors.js";
4
4
  import { AccountsService } from "../identity/accounts.js";
5
5
  import { ApiTokenService } from "../identity/api-tokens.js";
6
- import { authorizeEnterpriseAdmin } from "../identity/auth.guard.js";
6
+ import { authenticateOrgUploader, authorizeSuperAdmin, } from "../identity/auth.guard.js";
7
7
  import { SessionService } from "../identity/sessions.js";
8
+ import { KernelDb } from "../infra/database/kernel-db.js";
8
9
  import { withLogContext } from "../log-context.js";
10
+ import { authorizeOrgAction } from "../orgs/org.guard.js";
9
11
  import { redactPath } from "./error.filter.js";
10
12
  import { registerGatewayRoutes } from "./gateway-routes.js";
11
13
  import { createPluginRouter, registerPluginDispatch, staticRouteTable, } from "./plugin-dispatch.js";
@@ -13,14 +15,24 @@ import { createPluginRouter, registerPluginDispatch, staticRouteTable, } from ".
13
15
  export const EXTENSION_PACKAGE_UPLOAD_ROUTE = "/api/v1/admin/extensions/packages/file";
14
16
  /** The plugin package upload route of the catalog import (Fastify route template). */
15
17
  export const CATALOG_UPLOAD_ROUTE = "/api/v1/admin/catalog/import/file";
18
+ /** The platform skill version upload route (a skill package zip as the raw body). */
19
+ export const COMPONENT_SKILL_UPLOAD_ROUTE = "/api/v1/admin/components/skill/:id/versions";
16
20
  /**
17
21
  * The upload routes that take raw bytes (`application/octet-stream`, limit `packages.maxBytes`,
18
- * the enterprise admin is authenticated before the body is read).
22
+ * the super admin is authenticated before the body is read).
19
23
  */
20
24
  export const PACKAGE_UPLOAD_ROUTES = new Set([
21
25
  EXTENSION_PACKAGE_UPLOAD_ROUTE,
22
26
  CATALOG_UPLOAD_ROUTE,
27
+ COMPONENT_SKILL_UPLOAD_ROUTE,
23
28
  ]);
29
+ /** An org admin's plugin package upload (spec §14, ruling P3-7; a tgz as the raw body). */
30
+ export const ORG_PLUGIN_UPLOAD_ROUTE = "/api/v1/orgs/:orgId/catalog/uploads/file";
31
+ /**
32
+ * The org routes that take raw package bytes (limit `packages.maxBytes`): before the body is read
33
+ * the caller is authenticated as a person with the org role of `catalog.upload` (ruling P3-29).
34
+ */
35
+ export const ORG_PACKAGE_UPLOAD_ROUTES = new Set([ORG_PLUGIN_UPLOAD_ROUTE]);
24
36
  /** Paths without an access log line (probes). */
25
37
  const QUIET_PATHS = new Set(["/healthz", "/readyz"]);
26
38
  /**
@@ -92,11 +104,12 @@ export async function createHttpApp(opts, app) {
92
104
  if (LARGE_BODY_ROUTES.has(r.url) && [r.method].flat().includes("POST")) {
93
105
  r.bodyLimit = LARGE_BODY_LIMIT;
94
106
  }
95
- if (PACKAGE_UPLOAD_ROUTES.has(r.url) && opts.packageMaxBytes !== undefined) {
107
+ const upload = PACKAGE_UPLOAD_ROUTES.has(r.url) || ORG_PACKAGE_UPLOAD_ROUTES.has(r.url);
108
+ if (upload && opts.packageMaxBytes !== undefined) {
96
109
  r.bodyLimit = opts.packageMaxBytes + 1;
97
110
  }
98
111
  });
99
- // 读请求体之前:包上传(插件包、企业目录包)先认证(未认证 / 非企业管理员的大请求体不读进内存);其余内核路由不收
112
+ // 读请求体之前:包上传(插件包、平台目录包)先认证(未认证 / 非超级管理员的大请求体不读进内存);其余内核路由不收
100
113
  // application/octet-stream(415)。插件路由 /plugins/* 在自己的作用域里收任何类型,不受影响
101
114
  let authServices;
102
115
  const services = () => {
@@ -119,7 +132,20 @@ export async function createHttpApp(opts, app) {
119
132
  return;
120
133
  if (req.method === "POST" && PACKAGE_UPLOAD_ROUTES.has(req.routeOptions.url ?? "")) {
121
134
  try {
122
- await authorizeEnterpriseAdmin(req, services());
135
+ await authorizeSuperAdmin(req, services());
136
+ }
137
+ catch (e) {
138
+ return sendError(reply, e, req.method, req.url);
139
+ }
140
+ return;
141
+ }
142
+ if (req.method === "POST" && ORG_PACKAGE_UPLOAD_ROUTES.has(req.routeOptions.url ?? "")) {
143
+ try {
144
+ // the org admin role before the body (ruling P3-29): no one else makes the kernel buffer
145
+ // a package-sized body
146
+ const principal = await authenticateOrgUploader(req, services());
147
+ const orgId = req.params.orgId ?? "";
148
+ await authorizeOrgAction(app.get(KernelDb, { strict: false }).db, principal, orgId, "catalog.upload");
123
149
  }
124
150
  catch (e) {
125
151
  return sendError(reply, e, req.method, req.url);
@@ -3,31 +3,31 @@ import { SetupLock } from "../admin/setup-lock.js";
3
3
  import type { AccountsTable } from "../db/kernel-schema.js";
4
4
  import { KernelDb } from "../infra/database/kernel-db.js";
5
5
  import { TransactionHost } from "../infra/database/transaction-host.js";
6
- import { EnterpriseAdminLock } from "./enterprise-admin.js";
6
+ import { SuperAdminLock } from "./super-admin.js";
7
7
  export interface Account {
8
8
  id: string;
9
9
  displayName: string;
10
10
  email: string | null;
11
11
  status: "active" | "disabled";
12
- isEnterpriseAdmin: boolean;
12
+ isSuperAdmin: boolean;
13
13
  createdAt: Date;
14
14
  }
15
- /** 企业管理员可改的账号字段。 */
15
+ /** 超级管理员可改的账号字段。 */
16
16
  export type AccountPatch = {
17
17
  displayName?: string;
18
18
  status?: "active" | "disabled";
19
- isEnterpriseAdmin?: boolean;
19
+ isSuperAdmin?: boolean;
20
20
  };
21
21
  /** 构造 `Account` 所需的 accounts 列(供跨表查询 select 使用)。 */
22
- export declare const ACCOUNT_COLUMNS: readonly ["accounts.id", "accounts.display_name", "accounts.email", "accounts.status", "accounts.is_enterprise_admin", "accounts.created_at"];
23
- type AccountRow = Pick<Selectable<AccountsTable>, "id" | "display_name" | "email" | "status" | "is_enterprise_admin" | "created_at">;
22
+ export declare const ACCOUNT_COLUMNS: readonly ["accounts.id", "accounts.display_name", "accounts.email", "accounts.status", "accounts.is_super_admin", "accounts.created_at"];
23
+ type AccountRow = Pick<Selectable<AccountsTable>, "id" | "display_name" | "email" | "status" | "is_super_admin" | "created_at">;
24
24
  export declare function toAccount(r: AccountRow): Account;
25
25
  export interface LocalAccountInput {
26
26
  login: string;
27
27
  password: string;
28
28
  displayName: string;
29
29
  email?: string;
30
- enterpriseAdmin?: boolean;
30
+ superAdmin?: boolean;
31
31
  }
32
32
  /**
33
33
  * Accounts: local account creation, authentication and administration. Every write is
@@ -39,7 +39,7 @@ export declare class AccountsService {
39
39
  readonly txHost: TransactionHost;
40
40
  private readonly adminLock;
41
41
  private readonly setupLock;
42
- constructor(db: KernelDb, txHost: TransactionHost, adminLock: EnterpriseAdminLock, setupLock: SetupLock);
42
+ constructor(db: KernelDb, txHost: TransactionHost, adminLock: SuperAdminLock, setupLock: SetupLock);
43
43
  /** Checks the password length and hashes it (scrypt, slow): for callers that hash before their transaction opens. */
44
44
  hashNewPassword(password: string): Promise<string>;
45
45
  /**
@@ -49,28 +49,28 @@ export declare class AccountsService {
49
49
  */
50
50
  createLocal(input: LocalAccountInput, passwordHash?: string): Promise<Account>;
51
51
  /**
52
- * An enterprise admin creates a local account (optionally an enterprise admin): under the
53
- * enterprise admin lock, re-checks that the actor is still an active enterprise admin (else
52
+ * A super admin creates a local account (optionally a super admin): under the
53
+ * super admin lock, re-checks that the actor is still an active super admin (else
54
54
  * `forbidden`), creates the account and audits `account.created`. The hash is computed before
55
55
  * the lock.
56
56
  */
57
57
  createByAdmin(input: LocalAccountInput, actorAccountId: string, actorTokenId?: string): Promise<Account>;
58
58
  private createByAdminIn;
59
59
  /**
60
- * CLI: creates an enterprise admin without checking whether the deployment is set up; a taken
60
+ * CLI: creates a super admin without checking whether the deployment is set up; a taken
61
61
  * login → `account.login_taken`.
62
62
  */
63
- createEnterpriseAdmin(input: EnterpriseAdminInput): Promise<Account>;
63
+ createSuperAdmin(input: SuperAdminInput): Promise<Account>;
64
64
  /**
65
- * CLI `admin create --if-none`: creates an enterprise admin only when no active one exists. The
65
+ * CLI `admin create --if-none`: creates a super admin only when no active one exists. The
66
66
  * check and the insert run in one transaction under {@link SetupLock}, the lock the web setup
67
67
  * takes, so concurrent runs (and a concurrent web setup) create exactly one. Returns undefined
68
- * when an active enterprise admin already exists; a taken login still throws
68
+ * when an active super admin already exists; a taken login still throws
69
69
  * `account.login_taken`.
70
70
  */
71
- createEnterpriseAdminIfNone(input: EnterpriseAdminInput): Promise<Account | undefined>;
72
- private createEnterpriseAdminIfNoneIn;
73
- private insertEnterpriseAdmin;
71
+ createSuperAdminIfNone(input: SuperAdminInput): Promise<Account | undefined>;
72
+ private createSuperAdminIfNoneIn;
73
+ private insertSuperAdmin;
74
74
  authenticateLocal(login: string, password: string): Promise<Account | null>;
75
75
  /** 按账号 id 校验本地密码(改密码时核对旧密码);没有本地密码、超长或不符 → false。 */
76
76
  verifyPassword(accountId: string, password: string): Promise<boolean>;
@@ -92,7 +92,7 @@ export declare class AccountsService {
92
92
  private changePasswordIn;
93
93
  update(id: string, patch: AccountPatch, actorAccountId: string, actorTokenId?: string): Promise<Account>;
94
94
  /**
95
- * An enterprise admin changes an account. Disabling (`status: "disabled"`) revokes the
95
+ * A super admin changes an account. Disabling (`status: "disabled"`) revokes the
96
96
  * account's sessions (`sessions.revoked_at`) and personal tokens in **the same PG transaction**,
97
97
  * all or nothing; returns the revoked session ids, whose Redis markers the caller writes after
98
98
  * the commit (the fast path; a failure is only a warning: auth reads PG).
@@ -102,35 +102,35 @@ export declare class AccountsService {
102
102
  revokedSessionIds: string[];
103
103
  }>;
104
104
  /**
105
- * The CLI's `capybara admin grant|revoke <login>` (no actor account): changes the enterprise
106
- * admin flag by local login under the enterprise admin lock; revoking keeps the
107
- * {@link updateAccount} "last active enterprise admin" check (`account.last_enterprise_admin`),
105
+ * The CLI's `capybara admin grant|revoke <login>` (no actor account): changes the super
106
+ * admin flag by local login under the super admin lock; revoking keeps the
107
+ * {@link updateAccount} "last active super admin" check (`account.last_super_admin`),
108
108
  * decided under the lock, so it cannot race a web revoke into none. Audit `account.updated`
109
109
  * without an actor, `detail.via = "cli"`. Already in the target state → no change and no audit
110
110
  * (`changed: false`). Unknown login → `account.not_found`.
111
111
  */
112
- setEnterpriseAdminByLogin(login: string, isEnterpriseAdmin: boolean): Promise<{
112
+ setSuperAdminByLogin(login: string, isSuperAdmin: boolean): Promise<{
113
113
  account: Account;
114
114
  changed: boolean;
115
115
  }>;
116
- private setEnterpriseAdminIn;
116
+ private setSuperAdminIn;
117
117
  /** 全部账号数(含停用的;后台概览)。 */
118
118
  count(): Promise<number>;
119
- /** Active (status = active) enterprise admins, in the context's transaction when there is one. */
120
- countEnterpriseAdmins(): Promise<number>;
119
+ /** Active (status = active) super admins, in the context's transaction when there is one. */
120
+ countSuperAdmins(): Promise<number>;
121
121
  /** Inserts the account, its local identity and password; a taken login → `account.login_taken`. */
122
122
  private insertLocal;
123
123
  /** Writes (or replaces) the local password hash; a missing account → `account.not_found`. */
124
124
  private writePassword;
125
125
  /**
126
- * Changes the account under the enterprise admin lock the caller holds: updates the row,
127
- * re-checks "the last active enterprise admin", audits `account.updated`; disabling revokes the
126
+ * Changes the account under the super admin lock the caller holds: updates the row,
127
+ * re-checks "the last active super admin", audits `account.updated`; disabling revokes the
128
128
  * account's sessions and personal tokens.
129
129
  */
130
130
  private applyUpdate;
131
131
  }
132
- /** Input of the CLI enterprise admin creation. */
133
- export interface EnterpriseAdminInput {
132
+ /** Input of the CLI super admin creation. */
133
+ export interface SuperAdminInput {
134
134
  login: string;
135
135
  password: string;
136
136
  displayName: string;
@@ -16,16 +16,16 @@ import { KernelDb } from "../infra/database/kernel-db.js";
16
16
  import { TransactionHost } from "../infra/database/transaction-host.js";
17
17
  import { Transactional } from "../infra/database/transactional.decorator.js";
18
18
  import { audit } from "./audit.js";
19
- import { EnterpriseAdminLock, EnterpriseAdminLockModule } from "./enterprise-admin.js";
20
19
  import { MAX_PASSWORD_LENGTH, normalizeLogin, validatePassword } from "./login.js";
21
20
  import { DUMMY_PASSWORD_HASH, hashPassword, verifyPassword } from "./passwords.js";
21
+ import { SuperAdminLock, SuperAdminLockModule } from "./super-admin.js";
22
22
  /** 构造 `Account` 所需的 accounts 列(供跨表查询 select 使用)。 */
23
23
  export const ACCOUNT_COLUMNS = [
24
24
  "accounts.id",
25
25
  "accounts.display_name",
26
26
  "accounts.email",
27
27
  "accounts.status",
28
- "accounts.is_enterprise_admin",
28
+ "accounts.is_super_admin",
29
29
  "accounts.created_at",
30
30
  ];
31
31
  export function toAccount(r) {
@@ -34,7 +34,7 @@ export function toAccount(r) {
34
34
  displayName: r.display_name,
35
35
  email: r.email,
36
36
  status: r.status,
37
- isEnterpriseAdmin: r.is_enterprise_admin,
37
+ isSuperAdmin: r.is_super_admin,
38
38
  createdAt: r.created_at,
39
39
  };
40
40
  }
@@ -82,8 +82,8 @@ let AccountsService = class AccountsService {
82
82
  return this.insertLocal(await prepareLocal(input, passwordHash));
83
83
  }
84
84
  /**
85
- * An enterprise admin creates a local account (optionally an enterprise admin): under the
86
- * enterprise admin lock, re-checks that the actor is still an active enterprise admin (else
85
+ * A super admin creates a local account (optionally a super admin): under the
86
+ * super admin lock, re-checks that the actor is still an active super admin (else
87
87
  * `forbidden`), creates the account and audits `account.created`. The hash is computed before
88
88
  * the lock.
89
89
  */
@@ -98,45 +98,45 @@ let AccountsService = class AccountsService {
98
98
  ...(actorTokenId !== undefined && { actorTokenId }),
99
99
  action: "account.created",
100
100
  target: a.id,
101
- detail: { enterpriseAdmin: a.isEnterpriseAdmin },
101
+ detail: { superAdmin: a.isSuperAdmin },
102
102
  });
103
103
  return a;
104
104
  }
105
105
  /**
106
- * CLI: creates an enterprise admin without checking whether the deployment is set up; a taken
106
+ * CLI: creates a super admin without checking whether the deployment is set up; a taken
107
107
  * login → `account.login_taken`.
108
108
  */
109
- async createEnterpriseAdmin(input) {
110
- return this.insertEnterpriseAdmin(input, await this.hashNewPassword(input.password));
109
+ async createSuperAdmin(input) {
110
+ return this.insertSuperAdmin(input, await this.hashNewPassword(input.password));
111
111
  }
112
112
  /**
113
- * CLI `admin create --if-none`: creates an enterprise admin only when no active one exists. The
113
+ * CLI `admin create --if-none`: creates a super admin only when no active one exists. The
114
114
  * check and the insert run in one transaction under {@link SetupLock}, the lock the web setup
115
115
  * takes, so concurrent runs (and a concurrent web setup) create exactly one. Returns undefined
116
- * when an active enterprise admin already exists; a taken login still throws
116
+ * when an active super admin already exists; a taken login still throws
117
117
  * `account.login_taken`.
118
118
  */
119
- async createEnterpriseAdminIfNone(input) {
120
- return this.createEnterpriseAdminIfNoneIn(input, await this.hashNewPassword(input.password));
119
+ async createSuperAdminIfNone(input) {
120
+ return this.createSuperAdminIfNoneIn(input, await this.hashNewPassword(input.password));
121
121
  }
122
- async createEnterpriseAdminIfNoneIn(input, passwordHash) {
122
+ async createSuperAdminIfNoneIn(input, passwordHash) {
123
123
  await this.setupLock.lock();
124
- if ((await this.countEnterpriseAdmins()) > 0)
124
+ if ((await this.countSuperAdmins()) > 0)
125
125
  return undefined;
126
- return this.insertEnterpriseAdmin(input, passwordHash);
126
+ return this.insertSuperAdmin(input, passwordHash);
127
127
  }
128
- async insertEnterpriseAdmin(input, passwordHash) {
128
+ async insertSuperAdmin(input, passwordHash) {
129
129
  const account = await this.createLocal({
130
130
  login: input.login,
131
131
  password: input.password,
132
132
  displayName: input.displayName,
133
- enterpriseAdmin: true,
133
+ superAdmin: true,
134
134
  ...(input.email !== undefined && { email: input.email }),
135
135
  }, passwordHash);
136
136
  await audit(this.db.db, {
137
137
  action: "account.created",
138
138
  target: account.id,
139
- detail: { enterpriseAdmin: true, via: "cli" },
139
+ detail: { superAdmin: true, via: "cli" },
140
140
  });
141
141
  return account;
142
142
  }
@@ -163,7 +163,7 @@ let AccountsService = class AccountsService {
163
163
  "accounts.email",
164
164
  "accounts.email_verified",
165
165
  "accounts.status",
166
- "accounts.is_enterprise_admin",
166
+ "accounts.is_super_admin",
167
167
  "accounts.created_at",
168
168
  "accounts.updated_at",
169
169
  "local_passwords.password_hash",
@@ -245,13 +245,13 @@ let AccountsService = class AccountsService {
245
245
  return (await this.updateAccount(id, patch, actorAccountId, actorTokenId)).account;
246
246
  }
247
247
  /**
248
- * An enterprise admin changes an account. Disabling (`status: "disabled"`) revokes the
248
+ * A super admin changes an account. Disabling (`status: "disabled"`) revokes the
249
249
  * account's sessions (`sessions.revoked_at`) and personal tokens in **the same PG transaction**,
250
250
  * all or nothing; returns the revoked session ids, whose Redis markers the caller writes after
251
251
  * the commit (the fast path; a failure is only a warning: auth reads PG).
252
252
  */
253
253
  async updateAccount(id, patch, actorAccountId, actorTokenId) {
254
- // Every enterprise admin write is serialized by one lock and re-checks the actor under it: two
254
+ // Every super admin write is serialized by one lock and re-checks the actor under it: two
255
255
  // admins revoking each other concurrently cannot leave none, and a just-revoked admin's
256
256
  // request in flight fails
257
257
  await this.adminLock.lockAndAuthorize(actorAccountId);
@@ -269,14 +269,14 @@ let AccountsService = class AccountsService {
269
269
  });
270
270
  }
271
271
  /**
272
- * The CLI's `capybara admin grant|revoke <login>` (no actor account): changes the enterprise
273
- * admin flag by local login under the enterprise admin lock; revoking keeps the
274
- * {@link updateAccount} "last active enterprise admin" check (`account.last_enterprise_admin`),
272
+ * The CLI's `capybara admin grant|revoke <login>` (no actor account): changes the super
273
+ * admin flag by local login under the super admin lock; revoking keeps the
274
+ * {@link updateAccount} "last active super admin" check (`account.last_super_admin`),
275
275
  * decided under the lock, so it cannot race a web revoke into none. Audit `account.updated`
276
276
  * without an actor, `detail.via = "cli"`. Already in the target state → no change and no audit
277
277
  * (`changed: false`). Unknown login → `account.not_found`.
278
278
  */
279
- async setEnterpriseAdminByLogin(login, isEnterpriseAdmin) {
279
+ async setSuperAdminByLogin(login, isSuperAdmin) {
280
280
  let external;
281
281
  try {
282
282
  external = normalizeLogin(login);
@@ -284,9 +284,9 @@ let AccountsService = class AccountsService {
284
284
  catch {
285
285
  throw new ApiError("account.not_found", "Account not found");
286
286
  }
287
- return this.setEnterpriseAdminIn(external, isEnterpriseAdmin);
287
+ return this.setSuperAdminIn(external, isSuperAdmin);
288
288
  }
289
- async setEnterpriseAdminIn(external, isEnterpriseAdmin) {
289
+ async setSuperAdminIn(external, isSuperAdmin) {
290
290
  await this.adminLock.lock();
291
291
  const before = await this.db
292
292
  .selectFrom("identities")
@@ -297,10 +297,10 @@ let AccountsService = class AccountsService {
297
297
  .executeTakeFirst();
298
298
  if (!before)
299
299
  throw new ApiError("account.not_found", "Account not found");
300
- if (before.is_enterprise_admin === isEnterpriseAdmin) {
300
+ if (before.is_super_admin === isSuperAdmin) {
301
301
  return { account: toAccount(before), changed: false };
302
302
  }
303
- const patch = { isEnterpriseAdmin };
303
+ const patch = { isSuperAdmin };
304
304
  const { account } = await this.applyUpdate(before, patch, {
305
305
  detail: { ...patch, via: "cli" },
306
306
  });
@@ -314,12 +314,12 @@ let AccountsService = class AccountsService {
314
314
  .executeTakeFirstOrThrow();
315
315
  return Number(r.n);
316
316
  }
317
- /** Active (status = active) enterprise admins, in the context's transaction when there is one. */
318
- async countEnterpriseAdmins() {
317
+ /** Active (status = active) super admins, in the context's transaction when there is one. */
318
+ async countSuperAdmins() {
319
319
  const r = await this.db
320
320
  .selectFrom("accounts")
321
321
  .select((eb) => eb.fn.countAll().as("n"))
322
- .where("is_enterprise_admin", "=", true)
322
+ .where("is_super_admin", "=", true)
323
323
  .where("status", "=", "active")
324
324
  .executeTakeFirstOrThrow();
325
325
  return Number(r.n);
@@ -334,7 +334,7 @@ let AccountsService = class AccountsService {
334
334
  id,
335
335
  display_name: input.displayName,
336
336
  email: input.email ?? null,
337
- is_enterprise_admin: input.enterpriseAdmin ?? false,
337
+ is_super_admin: input.superAdmin ?? false,
338
338
  })
339
339
  .returningAll()
340
340
  .executeTakeFirstOrThrow();
@@ -380,8 +380,8 @@ let AccountsService = class AccountsService {
380
380
  .execute();
381
381
  }
382
382
  /**
383
- * Changes the account under the enterprise admin lock the caller holds: updates the row,
384
- * re-checks "the last active enterprise admin", audits `account.updated`; disabling revokes the
383
+ * Changes the account under the super admin lock the caller holds: updates the row,
384
+ * re-checks "the last active super admin", audits `account.updated`; disabling revokes the
385
385
  * account's sessions and personal tokens.
386
386
  */
387
387
  async applyUpdate(before, patch, auditAs) {
@@ -391,18 +391,18 @@ let AccountsService = class AccountsService {
391
391
  values.display_name = patch.displayName;
392
392
  if (patch.status !== undefined)
393
393
  values.status = patch.status;
394
- if (patch.isEnterpriseAdmin !== undefined)
395
- values.is_enterprise_admin = patch.isEnterpriseAdmin;
394
+ if (patch.isSuperAdmin !== undefined)
395
+ values.is_super_admin = patch.isSuperAdmin;
396
396
  const row = await this.db
397
397
  .updateTable("accounts")
398
398
  .set(values)
399
399
  .where("id", "=", id)
400
400
  .returningAll()
401
401
  .executeTakeFirstOrThrow();
402
- const wasActiveAdmin = before.is_enterprise_admin && before.status === "active";
403
- const isActiveAdmin = row.is_enterprise_admin && row.status === "active";
404
- if (wasActiveAdmin && !isActiveAdmin && (await this.countEnterpriseAdmins()) === 0) {
405
- throw new ApiError("account.last_enterprise_admin", "Cannot remove the last active enterprise admin");
402
+ const wasActiveAdmin = before.is_super_admin && before.status === "active";
403
+ const isActiveAdmin = row.is_super_admin && row.status === "active";
404
+ if (wasActiveAdmin && !isActiveAdmin && (await this.countSuperAdmins()) === 0) {
405
+ throw new ApiError("account.last_super_admin", "Cannot remove the last active super admin");
406
406
  }
407
407
  await audit(this.db.db, {
408
408
  ...(auditAs.actorAccountId !== undefined && { actorAccountId: auditAs.actorAccountId }),
@@ -439,10 +439,10 @@ __decorate([
439
439
  ], AccountsService.prototype, "createByAdminIn", null);
440
440
  __decorate([
441
441
  Transactional()
442
- ], AccountsService.prototype, "createEnterpriseAdminIfNoneIn", null);
442
+ ], AccountsService.prototype, "createSuperAdminIfNoneIn", null);
443
443
  __decorate([
444
444
  Transactional()
445
- ], AccountsService.prototype, "insertEnterpriseAdmin", null);
445
+ ], AccountsService.prototype, "insertSuperAdmin", null);
446
446
  __decorate([
447
447
  Transactional()
448
448
  ], AccountsService.prototype, "changePasswordIn", null);
@@ -451,7 +451,7 @@ __decorate([
451
451
  ], AccountsService.prototype, "updateAccount", null);
452
452
  __decorate([
453
453
  Transactional()
454
- ], AccountsService.prototype, "setEnterpriseAdminIn", null);
454
+ ], AccountsService.prototype, "setSuperAdminIn", null);
455
455
  __decorate([
456
456
  Transactional()
457
457
  ], AccountsService.prototype, "insertLocal", null);
@@ -465,7 +465,7 @@ AccountsService = __decorate([
465
465
  Injectable(),
466
466
  __param(0, Inject(KernelDb)),
467
467
  __param(1, Inject(TransactionHost)),
468
- __param(2, Inject(EnterpriseAdminLock)),
468
+ __param(2, Inject(SuperAdminLock)),
469
469
  __param(3, Inject(SetupLock))
470
470
  ], AccountsService);
471
471
  export { AccountsService };
@@ -478,7 +478,7 @@ let AccountsModule = class AccountsModule {
478
478
  };
479
479
  AccountsModule = __decorate([
480
480
  Module({
481
- imports: [SetupLockModule, EnterpriseAdminLockModule],
481
+ imports: [SetupLockModule, SuperAdminLockModule],
482
482
  providers: [AccountsService],
483
483
  exports: [AccountsService],
484
484
  })
@@ -5,7 +5,8 @@ import type { KernelSchemaDb } from "../db/kernel-schema.js";
5
5
  * so the event commits or rolls back with the write it records.
6
6
  */
7
7
  export declare function audit(db: KernelSchemaDb, e: {
8
- actorAccountId?: string;
8
+ /** The acting account; absent or null for the kernel itself (a job such as the scope sync). */
9
+ actorAccountId?: string | null;
9
10
  actorTokenId?: string;
10
11
  orgId?: string;
11
12
  action: string;
@@ -3,21 +3,29 @@ import { Reflector } from "@nestjs/core";
3
3
  import type { FastifyRequest } from "fastify";
4
4
  import { AccountsService } from "./accounts.js";
5
5
  import { ApiTokenService } from "./api-tokens.js";
6
+ import { type Principal } from "./principal.js";
6
7
  import { SessionService } from "./sessions.js";
7
8
  /** CSRF 头:Cookie 认证的非安全请求(及所有公开路由的非安全请求)必须带 `X-Capybara-Csrf: 1`。 */
8
9
  export declare const CSRF_HEADER = "x-capybara-csrf";
9
- /** 解析凭据要用的服务({@link AuthGuard} 与 {@link authorizeEnterpriseAdmin} 共用)。 */
10
+ /** 解析凭据要用的服务({@link AuthGuard} 与 {@link authorizeSuperAdmin} 共用)。 */
10
11
  export interface AuthServices {
11
12
  accounts: AccountsService;
12
13
  sessions: SessionService;
13
14
  tokens: ApiTokenService;
14
15
  }
15
16
  /**
16
- * 在读请求体之前(Fastify `onRequest`)按 `@EnterpriseAdmin` 路由的规则认证:无凭据 / 凭据无效 → `auth.required`
17
- * 等,Cookie 认证的非安全请求要求 CSRF 头,服务令牌与非企业管理员 → `forbidden`。插件包上传用它:
17
+ * 在读请求体之前(Fastify `onRequest`)按 `@SuperAdmin` 路由的规则认证:无凭据 / 凭据无效 → `auth.required`
18
+ * 等,Cookie 认证的非安全请求要求 CSRF 头,服务令牌与非超级管理员 → `forbidden`。插件包上传用它:
18
19
  * 未认证的大请求体不被读入内存。之后 {@link AuthGuard} 照常再判一次。
19
20
  */
20
- export declare function authorizeEnterpriseAdmin(req: FastifyRequest, s: AuthServices): Promise<void>;
21
+ export declare function authorizeSuperAdmin(req: FastifyRequest, s: AuthServices): Promise<void>;
22
+ /**
23
+ * Before the body is read (Fastify `onRequest`), for an org's package upload (an `@OrgAction`
24
+ * route of a human-only action): authenticated like {@link authorizeSuperAdmin}, a person (service
25
+ * tokens -> `forbidden`), CSRF for cookies. Returns the principal for the org role check that also
26
+ * runs before the body (ruling P3-29); `OrgGuard` and the service's lock re-check it afterwards.
27
+ */
28
+ export declare function authenticateOrgUploader(req: FastifyRequest, s: AuthServices): Promise<Principal>;
21
29
  /**
22
30
  * 全局守卫(`APP_GUARD`),默认拒绝:
23
31
  * 1. `Authorization: Bearer cap_pat_…|cap_svc_…` → API 令牌;个人令牌再实时读账号状态。不做 CSRF 检查。
@@ -27,7 +35,7 @@ export declare function authorizeEnterpriseAdmin(req: FastifyRequest, s: AuthSer
27
35
  * (便于登出 / 刷新);PG / Redis 故障等其他异常照常抛出。
28
36
  * 4. 路由约束:service principal 只能访问 `@AllowService` 路由(否则 `forbidden`);
29
37
  * `@SessionOnly` 要求 Web 会话:个人令牌 → `auth.session_required`,服务令牌(即使路由经 `@OrgAction`
30
- * 隐含 `@AllowService`)→ `forbidden`;`@EnterpriseAdmin` 要求企业管理员(`forbidden`)。
38
+ * 隐含 `@AllowService`)→ `forbidden`;`@SuperAdmin` 要求超级管理员(`forbidden`)。
31
39
  * 5. `@Public` 路由的非安全方法无论是否带 Cookie 都要求 CSRF 头。
32
40
  * 账号状态每个请求都从 PG 实时读取,不在进程内缓存。插件路由 `/plugins/*` 不经过 Nest,不受此守卫约束。
33
41
  */
@@ -13,7 +13,7 @@ import { ApiError } from "../errors.js";
13
13
  import { AccountsService } from "./accounts.js";
14
14
  import { ApiTokenService } from "./api-tokens.js";
15
15
  import { ACCESS_COOKIE } from "./cookies.js";
16
- import { ALLOW_SERVICE_KEY, ENTERPRISE_ADMIN_KEY, PUBLIC_KEY, SESSION_ONLY_KEY, } from "./principal.js";
16
+ import { ALLOW_SERVICE_KEY, PUBLIC_KEY, SESSION_ONLY_KEY, SUPER_ADMIN_KEY, } from "./principal.js";
17
17
  import { SessionService } from "./sessions.js";
18
18
  /** CSRF 头:Cookie 认证的非安全请求(及所有公开路由的非安全请求)必须带 `X-Capybara-Csrf: 1`。 */
19
19
  export const CSRF_HEADER = "x-capybara-csrf";
@@ -62,11 +62,11 @@ async function resolvePrincipal(req, s) {
62
62
  return undefined;
63
63
  }
64
64
  /**
65
- * 在读请求体之前(Fastify `onRequest`)按 `@EnterpriseAdmin` 路由的规则认证:无凭据 / 凭据无效 → `auth.required`
66
- * 等,Cookie 认证的非安全请求要求 CSRF 头,服务令牌与非企业管理员 → `forbidden`。插件包上传用它:
65
+ * 在读请求体之前(Fastify `onRequest`)按 `@SuperAdmin` 路由的规则认证:无凭据 / 凭据无效 → `auth.required`
66
+ * 等,Cookie 认证的非安全请求要求 CSRF 头,服务令牌与非超级管理员 → `forbidden`。插件包上传用它:
67
67
  * 未认证的大请求体不被读入内存。之后 {@link AuthGuard} 照常再判一次。
68
68
  */
69
- export async function authorizeEnterpriseAdmin(req, s) {
69
+ export async function authorizeSuperAdmin(req, s) {
70
70
  const resolved = await resolvePrincipal(req, s);
71
71
  if (!resolved)
72
72
  throw new ApiError("auth.required", "Authentication required");
@@ -76,8 +76,25 @@ export async function authorizeEnterpriseAdmin(req, s) {
76
76
  if (p.kind === "service") {
77
77
  throw new ApiError("forbidden", "Service tokens cannot access this endpoint");
78
78
  }
79
- if (!p.account.isEnterpriseAdmin)
80
- throw new ApiError("forbidden", "Enterprise admin required");
79
+ if (!p.account.isSuperAdmin)
80
+ throw new ApiError("forbidden", "Super admin required");
81
+ }
82
+ /**
83
+ * Before the body is read (Fastify `onRequest`), for an org's package upload (an `@OrgAction`
84
+ * route of a human-only action): authenticated like {@link authorizeSuperAdmin}, a person (service
85
+ * tokens -> `forbidden`), CSRF for cookies. Returns the principal for the org role check that also
86
+ * runs before the body (ruling P3-29); `OrgGuard` and the service's lock re-check it afterwards.
87
+ */
88
+ export async function authenticateOrgUploader(req, s) {
89
+ const resolved = await resolvePrincipal(req, s);
90
+ if (!resolved)
91
+ throw new ApiError("auth.required", "Authentication required");
92
+ if (resolved.cookie && !SAFE_METHODS.has(req.method.toUpperCase()))
93
+ requireCsrf(req);
94
+ if (resolved.principal.kind === "service") {
95
+ throw new ApiError("forbidden", "Service tokens cannot access this endpoint");
96
+ }
97
+ return resolved.principal;
81
98
  }
82
99
  /**
83
100
  * 全局守卫(`APP_GUARD`),默认拒绝:
@@ -88,7 +105,7 @@ export async function authorizeEnterpriseAdmin(req, s) {
88
105
  * (便于登出 / 刷新);PG / Redis 故障等其他异常照常抛出。
89
106
  * 4. 路由约束:service principal 只能访问 `@AllowService` 路由(否则 `forbidden`);
90
107
  * `@SessionOnly` 要求 Web 会话:个人令牌 → `auth.session_required`,服务令牌(即使路由经 `@OrgAction`
91
- * 隐含 `@AllowService`)→ `forbidden`;`@EnterpriseAdmin` 要求企业管理员(`forbidden`)。
108
+ * 隐含 `@AllowService`)→ `forbidden`;`@SuperAdmin` 要求超级管理员(`forbidden`)。
92
109
  * 5. `@Public` 路由的非安全方法无论是否带 Cookie 都要求 CSRF 头。
93
110
  * 账号状态每个请求都从 PG 实时读取,不在进程内缓存。插件路由 `/plugins/*` 不经过 Nest,不受此守卫约束。
94
111
  */
@@ -142,8 +159,8 @@ let AuthGuard = class AuthGuard {
142
159
  if (flag(SESSION_ONLY_KEY) && !(p.kind === "user" && p.via === "session")) {
143
160
  throw new ApiError("auth.session_required", "This endpoint requires a web session");
144
161
  }
145
- if (flag(ENTERPRISE_ADMIN_KEY) && !(p.kind === "user" && p.account.isEnterpriseAdmin)) {
146
- throw new ApiError("forbidden", "Enterprise admin required");
162
+ if (flag(SUPER_ADMIN_KEY) && !(p.kind === "user" && p.account.isSuperAdmin)) {
163
+ throw new ApiError("forbidden", "Super admin required");
147
164
  }
148
165
  return true;
149
166
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Identity: accounts, sessions, API tokens, deployment settings and the enterprise admin lock,
2
+ * Identity: accounts, sessions, API tokens, deployment settings and the super admin lock,
3
3
  * external identities with IM binding and third-party sign-in.
4
4
  */
5
5
  export declare class IdentityModule {