@capybara-hq/kernel 0.1.0-rc.3 → 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 (604) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +47 -16
  3. package/dist/admin/admin.controller.js +44 -19
  4. package/dist/admin/extensions.controller.d.ts +24 -3
  5. package/dist/admin/extensions.controller.js +48 -8
  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 +19 -0
  13. package/dist/agents/agent-lookup.js +21 -0
  14. package/dist/agents/agent-profile.service.d.ts +29 -0
  15. package/dist/agents/agent-profile.service.js +117 -0
  16. package/dist/agents/agents.controller.d.ts +168 -3
  17. package/dist/agents/agents.controller.js +201 -12
  18. package/dist/agents/agents.module.d.ts +4 -1
  19. package/dist/agents/agents.module.js +36 -6
  20. package/dist/agents/agents.service.d.ts +64 -27
  21. package/dist/agents/agents.service.js +199 -74
  22. package/dist/agents/definition.d.ts +53 -0
  23. package/dist/agents/definition.js +55 -0
  24. package/dist/agents/from-template.d.ts +106 -0
  25. package/dist/agents/from-template.js +649 -0
  26. package/dist/agents/from-template.service.d.ts +60 -0
  27. package/dist/agents/from-template.service.js +161 -0
  28. package/dist/agents/instruction-files.d.ts +60 -0
  29. package/dist/agents/instruction-files.js +111 -0
  30. package/dist/agents/models.controller.d.ts +9 -3
  31. package/dist/agents/models.controller.js +19 -4
  32. package/dist/agents/org-templates.d.ts +176 -0
  33. package/dist/agents/org-templates.js +827 -0
  34. package/dist/agents/pending-connector-requests.d.ts +77 -0
  35. package/dist/agents/pending-connector-requests.js +215 -0
  36. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  37. package/dist/agents/pending-connectors.controller.js +91 -0
  38. package/dist/agents/pending-connectors.service.d.ts +62 -0
  39. package/dist/agents/pending-connectors.service.js +282 -0
  40. package/dist/agents/profile.d.ts +96 -0
  41. package/dist/agents/profile.js +51 -0
  42. package/dist/agents/readiness.controller.d.ts +26 -0
  43. package/dist/agents/readiness.controller.js +56 -0
  44. package/dist/agents/templates.controller.d.ts +86 -5
  45. package/dist/agents/templates.controller.js +171 -7
  46. package/dist/agents/templates.d.ts +127 -23
  47. package/dist/agents/templates.js +476 -53
  48. package/dist/background/background.controller.d.ts +38 -0
  49. package/dist/background/background.controller.js +87 -0
  50. package/dist/background/background.module.d.ts +10 -0
  51. package/dist/background/background.module.js +39 -0
  52. package/dist/background/finish.d.ts +44 -0
  53. package/dist/background/finish.js +94 -0
  54. package/dist/background/launch-lock.d.ts +15 -0
  55. package/dist/background/launch-lock.js +40 -0
  56. package/dist/background/launch.d.ts +36 -0
  57. package/dist/background/launch.js +70 -0
  58. package/dist/background/poll.job.d.ts +56 -0
  59. package/dist/background/poll.job.js +190 -0
  60. package/dist/background/render.d.ts +23 -0
  61. package/dist/background/render.js +48 -0
  62. package/dist/background/session.d.ts +48 -0
  63. package/dist/background/session.js +79 -0
  64. package/dist/background/status.d.ts +35 -0
  65. package/dist/background/status.js +57 -0
  66. package/dist/background/stop.d.ts +68 -0
  67. package/dist/background/stop.js +243 -0
  68. package/dist/background/store.d.ts +162 -0
  69. package/dist/background/store.js +357 -0
  70. package/dist/background/store.module.d.ts +6 -0
  71. package/dist/background/store.module.js +22 -0
  72. package/dist/background/tasks.service.d.ts +77 -0
  73. package/dist/background/tasks.service.js +211 -0
  74. package/dist/background/wake-rules.d.ts +66 -0
  75. package/dist/background/wake-rules.js +113 -0
  76. package/dist/background/wake.d.ts +30 -0
  77. package/dist/background/wake.js +63 -0
  78. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  79. package/dist/catalog/admin-catalog.controller.js +213 -42
  80. package/dist/catalog/catalog-content.d.ts +58 -32
  81. package/dist/catalog/catalog-content.js +34 -8
  82. package/dist/catalog/catalog-import.module.d.ts +7 -0
  83. package/dist/catalog/catalog-import.module.js +60 -0
  84. package/dist/catalog/catalog-items.d.ts +111 -7
  85. package/dist/catalog/catalog-items.js +279 -13
  86. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  87. package/dist/catalog/catalog-scope.service.js +1116 -0
  88. package/dist/catalog/catalog.module.d.ts +7 -9
  89. package/dist/catalog/catalog.module.js +41 -31
  90. package/dist/catalog/catalog.service.d.ts +101 -29
  91. package/dist/catalog/catalog.service.js +104 -106
  92. package/dist/catalog/claude/agents.js +2 -0
  93. package/dist/catalog/cli.d.ts +11 -1
  94. package/dist/catalog/cli.js +26 -1
  95. package/dist/catalog/component-promotion.d.ts +96 -0
  96. package/dist/catalog/component-promotion.js +395 -0
  97. package/dist/catalog/component-scope.controller.d.ts +152 -0
  98. package/dist/catalog/component-scope.controller.js +287 -0
  99. package/dist/catalog/component-scope.service.d.ts +303 -0
  100. package/dist/catalog/component-scope.service.js +936 -0
  101. package/dist/catalog/component-state.d.ts +174 -0
  102. package/dist/catalog/component-state.js +437 -0
  103. package/dist/catalog/job-ids.d.ts +30 -0
  104. package/dist/catalog/job-ids.js +25 -0
  105. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  106. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  107. package/dist/catalog/marketplaces.controller.js +56 -7
  108. package/dist/catalog/marketplaces.service.d.ts +54 -14
  109. package/dist/catalog/marketplaces.service.js +71 -22
  110. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  111. package/dist/catalog/org-catalog.controller.js +181 -65
  112. package/dist/catalog/org-catalog.service.d.ts +65 -33
  113. package/dist/catalog/org-catalog.service.js +324 -157
  114. package/dist/catalog/org-extension-switch.d.ts +41 -0
  115. package/dist/catalog/org-extension-switch.js +115 -0
  116. package/dist/catalog/org-extension.controller.d.ts +119 -0
  117. package/dist/catalog/org-extension.controller.js +266 -0
  118. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  119. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  120. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  121. package/dist/catalog/org-plugin-uploads.js +116 -0
  122. package/dist/catalog/owned-items.d.ts +184 -0
  123. package/dist/catalog/owned-items.js +789 -0
  124. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  125. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  126. package/dist/catalog/ownership.d.ts +172 -0
  127. package/dist/catalog/ownership.js +326 -0
  128. package/dist/catalog/platform-components.d.ts +221 -0
  129. package/dist/catalog/platform-components.js +761 -0
  130. package/dist/catalog/platform-migration.d.ts +115 -0
  131. package/dist/catalog/platform-migration.js +582 -0
  132. package/dist/catalog/plugin-import.d.ts +178 -34
  133. package/dist/catalog/plugin-import.js +623 -83
  134. package/dist/catalog/plugin-install.d.ts +185 -41
  135. package/dist/catalog/plugin-install.js +758 -126
  136. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  137. package/dist/catalog/plugin-upgrade.js +1148 -1137
  138. package/dist/catalog/request-rules.d.ts +65 -0
  139. package/dist/catalog/request-rules.js +217 -0
  140. package/dist/catalog/requests.service.d.ts +193 -118
  141. package/dist/catalog/requests.service.js +526 -343
  142. package/dist/catalog/reserved-names.d.ts +8 -0
  143. package/dist/catalog/reserved-names.js +42 -0
  144. package/dist/catalog/scope-orgs.d.ts +21 -0
  145. package/dist/catalog/scope-orgs.js +67 -0
  146. package/dist/catalog/scope-state.d.ts +35 -0
  147. package/dist/catalog/scope-state.js +87 -0
  148. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  149. package/dist/catalog/scope-sync-workers.js +29 -0
  150. package/dist/catalog/scope-sync.d.ts +176 -0
  151. package/dist/catalog/scope-sync.js +576 -0
  152. package/dist/catalog/scope.d.ts +42 -0
  153. package/dist/catalog/scope.js +42 -0
  154. package/dist/catalog/unshare.d.ts +22 -0
  155. package/dist/catalog/unshare.js +118 -0
  156. package/dist/channels/actions.js +1 -0
  157. package/dist/channels/cards.js +21 -3
  158. package/dist/channels/channels.module.js +2 -0
  159. package/dist/channels/connections.service.d.ts +16 -1
  160. package/dist/channels/connections.service.js +38 -4
  161. package/dist/channels/inbound.d.ts +9 -1
  162. package/dist/channels/inbound.js +67 -5
  163. package/dist/channels/phrases.d.ts +35 -0
  164. package/dist/channels/phrases.js +29 -0
  165. package/dist/channels/threads.d.ts +5 -0
  166. package/dist/channels/threads.js +8 -0
  167. package/dist/config/docs.js +3 -1
  168. package/dist/config/schema.d.ts +24 -2
  169. package/dist/config/schema.js +145 -19
  170. package/dist/conversations/access.d.ts +6 -4
  171. package/dist/conversations/access.js +29 -5
  172. package/dist/conversations/agent-tree.d.ts +46 -0
  173. package/dist/conversations/agent-tree.js +92 -0
  174. package/dist/conversations/attachments.service.d.ts +30 -0
  175. package/dist/conversations/attachments.service.js +130 -5
  176. package/dist/conversations/conversations.controller.d.ts +79 -23
  177. package/dist/conversations/conversations.controller.js +141 -50
  178. package/dist/conversations/conversations.module.d.ts +1 -1
  179. package/dist/conversations/conversations.module.js +10 -7
  180. package/dist/conversations/conversations.service.d.ts +108 -9
  181. package/dist/conversations/conversations.service.js +237 -30
  182. package/dist/conversations/environment-status.d.ts +24 -0
  183. package/dist/conversations/environment-status.js +71 -0
  184. package/dist/conversations/event-log.d.ts +21 -6
  185. package/dist/conversations/event-log.js +70 -1
  186. package/dist/conversations/events.d.ts +140 -0
  187. package/dist/conversations/events.js +142 -13
  188. package/dist/conversations/queue.d.ts +3 -1
  189. package/dist/conversations/queue.js +13 -2
  190. package/dist/conversations/queue.service.d.ts +1 -1
  191. package/dist/conversations/queue.service.js +8 -1
  192. package/dist/conversations/titles.d.ts +12 -3
  193. package/dist/conversations/titles.js +36 -8
  194. package/dist/conversations/tree.d.ts +17 -0
  195. package/dist/conversations/tree.js +42 -0
  196. package/dist/ctx/create-ctx.d.ts +5 -0
  197. package/dist/ctx/create-ctx.js +15 -5
  198. package/dist/db/kernel-schema.d.ts +420 -20
  199. package/dist/db/pool.d.ts +5 -0
  200. package/dist/db/pool.js +3 -0
  201. package/dist/environments/access.d.ts +41 -0
  202. package/dist/environments/access.js +77 -0
  203. package/dist/environments/conversation-environments.d.ts +61 -0
  204. package/dist/environments/conversation-environments.js +170 -0
  205. package/dist/environments/dto.d.ts +25 -0
  206. package/dist/environments/dto.js +12 -0
  207. package/dist/environments/environments.controller.d.ts +33 -0
  208. package/dist/environments/environments.controller.js +110 -0
  209. package/dist/environments/environments.module.d.ts +8 -0
  210. package/dist/environments/environments.module.js +27 -0
  211. package/dist/environments/environments.service.d.ts +153 -0
  212. package/dist/environments/environments.service.js +541 -0
  213. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  214. package/dist/environments/legacy-cleanup.job.js +141 -0
  215. package/dist/errors.d.ts +90 -2
  216. package/dist/errors.js +90 -2
  217. package/dist/evals/reconstruct.d.ts +18 -9
  218. package/dist/evals/reconstruct.js +26 -7
  219. package/dist/evals/run-replay.d.ts +7 -2
  220. package/dist/evals/run-replay.js +42 -7
  221. package/dist/evals/step-replay.d.ts +2 -5
  222. package/dist/evals/step-replay.js +13 -7
  223. package/dist/evals/trajectory.js +1 -1
  224. package/dist/evals/trajectory.service.d.ts +8 -3
  225. package/dist/evals/trajectory.service.js +26 -14
  226. package/dist/evals/worker.d.ts +5 -5
  227. package/dist/evals/worker.js +9 -3
  228. package/dist/extensions/admin-ops.d.ts +36 -10
  229. package/dist/extensions/admin-ops.js +67 -42
  230. package/dist/extensions/admin-view.d.ts +39 -10
  231. package/dist/extensions/admin-view.js +111 -20
  232. package/dist/extensions/blobs.js +1 -0
  233. package/dist/extensions/bootstrap.d.ts +17 -4
  234. package/dist/extensions/bootstrap.js +70 -9
  235. package/dist/extensions/cli.d.ts +12 -0
  236. package/dist/extensions/cli.js +11 -2
  237. package/dist/extensions/config-issues.d.ts +13 -1
  238. package/dist/extensions/config-issues.js +22 -5
  239. package/dist/extensions/config-json-schema.d.ts +43 -7
  240. package/dist/extensions/config-json-schema.js +124 -58
  241. package/dist/extensions/deployment-config-store.d.ts +6 -0
  242. package/dist/extensions/deployment-config.d.ts +78 -8
  243. package/dist/extensions/deployment-config.js +172 -34
  244. package/dist/extensions/display-name.d.ts +22 -0
  245. package/dist/extensions/display-name.js +77 -0
  246. package/dist/extensions/effective-config.d.ts +127 -0
  247. package/dist/extensions/effective-config.js +368 -0
  248. package/dist/extensions/extensions.module.js +14 -2
  249. package/dist/extensions/hooks.d.ts +37 -4
  250. package/dist/extensions/hooks.js +82 -16
  251. package/dist/extensions/host.d.ts +45 -2
  252. package/dist/extensions/host.js +112 -16
  253. package/dist/extensions/installs.d.ts +20 -8
  254. package/dist/extensions/installs.js +37 -15
  255. package/dist/extensions/org-config.d.ts +81 -6
  256. package/dist/extensions/org-config.js +195 -44
  257. package/dist/extensions/org-levels.d.ts +37 -0
  258. package/dist/extensions/org-levels.js +71 -0
  259. package/dist/extensions/org-overrides.d.ts +151 -0
  260. package/dist/extensions/org-overrides.js +524 -0
  261. package/dist/extensions/package.d.ts +14 -1
  262. package/dist/extensions/package.js +51 -2
  263. package/dist/extensions/permission-view.d.ts +19 -4
  264. package/dist/extensions/permission-view.js +4 -4
  265. package/dist/extensions/plugin-items.d.ts +21 -0
  266. package/dist/extensions/plugin-items.js +42 -0
  267. package/dist/extensions/point-defaults.controller.d.ts +34 -0
  268. package/dist/extensions/point-defaults.controller.js +71 -0
  269. package/dist/extensions/point-defaults.d.ts +71 -0
  270. package/dist/extensions/point-defaults.js +234 -0
  271. package/dist/extensions/registry.d.ts +1 -1
  272. package/dist/extensions/registry.js +2 -0
  273. package/dist/extensions/resolve.d.ts +5 -1
  274. package/dist/extensions/resolve.js +15 -2
  275. package/dist/files/previewers.d.ts +8 -1
  276. package/dist/files/previewers.js +35 -6
  277. package/dist/http/api.module.js +31 -3
  278. package/dist/http/app.d.ts +11 -2
  279. package/dist/http/app.js +31 -5
  280. package/dist/http/nest-logger.d.ts +6 -5
  281. package/dist/http/nest-logger.js +24 -10
  282. package/dist/identity/accounts.d.ts +29 -29
  283. package/dist/identity/accounts.js +47 -47
  284. package/dist/identity/audit.d.ts +2 -1
  285. package/dist/identity/auth.controller.js +9 -5
  286. package/dist/identity/auth.guard.d.ts +13 -5
  287. package/dist/identity/auth.guard.js +26 -9
  288. package/dist/identity/cookies.d.ts +20 -5
  289. package/dist/identity/cookies.js +44 -6
  290. package/dist/identity/identity.module.d.ts +1 -1
  291. package/dist/identity/identity.module.js +4 -4
  292. package/dist/identity/me.controller.d.ts +5 -1
  293. package/dist/identity/me.controller.js +12 -3
  294. package/dist/identity/principal.d.ts +3 -3
  295. package/dist/identity/principal.js +3 -3
  296. package/dist/identity/sessions.d.ts +12 -0
  297. package/dist/identity/sessions.js +45 -0
  298. package/dist/identity/settings.d.ts +22 -11
  299. package/dist/identity/settings.js +53 -18
  300. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  301. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  302. package/dist/inbox/inbox.module.d.ts +4 -1
  303. package/dist/inbox/inbox.module.js +7 -3
  304. package/dist/inbox/inbox.service.d.ts +62 -3
  305. package/dist/inbox/inbox.service.js +74 -4
  306. package/dist/inbox/org-notices.d.ts +63 -0
  307. package/dist/inbox/org-notices.js +91 -0
  308. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  309. package/dist/inbox/platform-inbox.controller.js +58 -0
  310. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  311. package/dist/inbox/platform-inbox.service.js +263 -0
  312. package/dist/inbox/platform-notices.d.ts +19 -0
  313. package/dist/inbox/platform-notices.js +9 -0
  314. package/dist/index.d.ts +2 -2
  315. package/dist/index.js +1 -1
  316. package/dist/infra/cli/kernel-cli.module.js +9 -1
  317. package/dist/infra/config/kernel-config.service.js +27 -1
  318. package/dist/infra/database/database.module.js +1 -0
  319. package/dist/infra/database/xact-lock.d.ts +1 -1
  320. package/dist/infra/database/xact-lock.js +1 -1
  321. package/dist/infra/events/kernel-events.d.ts +19 -2
  322. package/dist/infra/lifecycle/process-guards.js +4 -0
  323. package/dist/infra/logging/logging.module.d.ts +4 -2
  324. package/dist/infra/logging/logging.module.js +24 -6
  325. package/dist/infra/queue/add-job-once.d.ts +14 -0
  326. package/dist/infra/queue/add-job-once.js +16 -0
  327. package/dist/infra/queue/redis-connection.d.ts +6 -0
  328. package/dist/infra/queue/redis-connection.js +7 -0
  329. package/dist/infra/redis/redis.module.js +6 -2
  330. package/dist/infra/tokens.d.ts +6 -1
  331. package/dist/infra/tokens.js +6 -1
  332. package/dist/kernel.module.js +6 -0
  333. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  334. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  335. package/dist/log.d.ts +13 -1
  336. package/dist/log.js +93 -17
  337. package/dist/models/prices.d.ts +5 -5
  338. package/dist/models/prices.js +4 -4
  339. package/dist/models/purposes.controller.d.ts +6 -4
  340. package/dist/models/purposes.controller.js +13 -7
  341. package/dist/models/purposes.d.ts +43 -9
  342. package/dist/models/purposes.js +48 -18
  343. package/dist/orgs/directory-sync.d.ts +14 -5
  344. package/dist/orgs/directory-sync.js +41 -17
  345. package/dist/orgs/offboarding.d.ts +12 -8
  346. package/dist/orgs/offboarding.js +54 -33
  347. package/dist/orgs/org-lock.d.ts +5 -0
  348. package/dist/orgs/org-lock.js +13 -0
  349. package/dist/orgs/org.guard.d.ts +10 -0
  350. package/dist/orgs/org.guard.js +43 -32
  351. package/dist/orgs/orgs.module.js +3 -0
  352. package/dist/orgs/orgs.service.d.ts +20 -7
  353. package/dist/orgs/orgs.service.js +32 -12
  354. package/dist/orgs/roles.d.ts +1 -1
  355. package/dist/orgs/roles.js +5 -1
  356. package/dist/orgs/settings.controller.d.ts +1 -1
  357. package/dist/orgs/settings.service.d.ts +20 -3
  358. package/dist/orgs/settings.service.js +19 -4
  359. package/dist/overrides.d.ts +3 -0
  360. package/dist/overrides.js +2 -0
  361. package/dist/platform/actor.d.ts +48 -0
  362. package/dist/platform/actor.js +100 -0
  363. package/dist/platform/agent-docs.d.ts +18 -0
  364. package/dist/platform/agent-docs.js +59 -0
  365. package/dist/platform/availability.d.ts +14 -0
  366. package/dist/platform/availability.js +43 -0
  367. package/dist/platform/errors.d.ts +11 -0
  368. package/dist/platform/errors.js +26 -0
  369. package/dist/platform/exclusions.d.ts +12 -0
  370. package/dist/platform/exclusions.js +1387 -0
  371. package/dist/platform/method.d.ts +6 -0
  372. package/dist/platform/method.js +15 -0
  373. package/dist/platform/operation.d.ts +92 -0
  374. package/dist/platform/operation.js +35 -0
  375. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  376. package/dist/platform/ops/agent-templates.ops.js +92 -0
  377. package/dist/platform/ops/agents.ops.d.ts +19 -0
  378. package/dist/platform/ops/agents.ops.js +294 -0
  379. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  380. package/dist/platform/ops/connectors.ops.js +126 -0
  381. package/dist/platform/ops/errors.d.ts +11 -0
  382. package/dist/platform/ops/errors.js +22 -0
  383. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  384. package/dist/platform/ops/extensions.ops.js +116 -0
  385. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  386. package/dist/platform/ops/marketplaces.ops.js +157 -0
  387. package/dist/platform/ops/paging.d.ts +14 -0
  388. package/dist/platform/ops/paging.js +20 -0
  389. package/dist/platform/ops/platform.ops.d.ts +23 -0
  390. package/dist/platform/ops/platform.ops.js +158 -0
  391. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  392. package/dist/platform/ops/plugins.ops.js +377 -0
  393. package/dist/platform/ops/requests.ops.d.ts +14 -0
  394. package/dist/platform/ops/requests.ops.js +153 -0
  395. package/dist/platform/ops/role.d.ts +4 -0
  396. package/dist/platform/ops/role.js +10 -0
  397. package/dist/platform/ops/skills.ops.d.ts +13 -0
  398. package/dist/platform/ops/skills.ops.js +98 -0
  399. package/dist/platform/ops/summary.d.ts +10 -0
  400. package/dist/platform/ops/summary.js +18 -0
  401. package/dist/platform/platform-ops.module.d.ts +7 -0
  402. package/dist/platform/platform-ops.module.js +55 -0
  403. package/dist/platform/platform.module.d.ts +8 -0
  404. package/dist/platform/platform.module.js +25 -0
  405. package/dist/platform/redact-orgs.d.ts +7 -0
  406. package/dist/platform/redact-orgs.js +52 -0
  407. package/dist/platform/registry.d.ts +30 -0
  408. package/dist/platform/registry.js +111 -0
  409. package/dist/roles/worker-role.d.ts +6 -4
  410. package/dist/roles/worker-role.js +14 -7
  411. package/dist/roles/worker.module.d.ts +1 -1
  412. package/dist/roles/worker.module.js +15 -1
  413. package/dist/runtime/context/build.d.ts +11 -7
  414. package/dist/runtime/context/build.js +46 -19
  415. package/dist/runtime/context/claude-tools.d.ts +3 -1
  416. package/dist/runtime/context/claude-tools.js +8 -6
  417. package/dist/runtime/context/compaction.js +13 -0
  418. package/dist/runtime/context/reminders.d.ts +2 -0
  419. package/dist/runtime/context/reminders.js +2 -0
  420. package/dist/runtime/context/skills.js +9 -2
  421. package/dist/runtime/context/tool-changes.d.ts +27 -0
  422. package/dist/runtime/context/tool-changes.js +60 -0
  423. package/dist/runtime/hook-calls.js +2 -0
  424. package/dist/runtime/langgraph-loop.d.ts +3 -1
  425. package/dist/runtime/langgraph-loop.js +36 -17
  426. package/dist/runtime/loop.d.ts +34 -5
  427. package/dist/runtime/maintenance.d.ts +9 -4
  428. package/dist/runtime/maintenance.js +35 -8
  429. package/dist/runtime/model-call.d.ts +46 -8
  430. package/dist/runtime/model-call.js +72 -21
  431. package/dist/runtime/providers.d.ts +6 -0
  432. package/dist/runtime/providers.js +8 -0
  433. package/dist/runtime/run-control.d.ts +11 -1
  434. package/dist/runtime/run-control.js +12 -0
  435. package/dist/runtime/run-drafts.d.ts +85 -0
  436. package/dist/runtime/run-drafts.js +230 -0
  437. package/dist/runtime/run-jobs.d.ts +3 -5
  438. package/dist/runtime/run-jobs.js +3 -7
  439. package/dist/runtime/run-queue.d.ts +59 -2
  440. package/dist/runtime/run-queue.js +311 -38
  441. package/dist/runtime/run-worker.d.ts +11 -5
  442. package/dist/runtime/run-worker.js +69 -33
  443. package/dist/runtime/runtime.module.js +11 -3
  444. package/dist/runtime/step-log.d.ts +15 -4
  445. package/dist/runtime/step-log.js +24 -7
  446. package/dist/runtime/stream.controller.d.ts +23 -1
  447. package/dist/runtime/stream.controller.js +60 -3
  448. package/dist/runtime/stream.d.ts +4 -1
  449. package/dist/runtime/stream.js +27 -3
  450. package/dist/runtime/subagents/child.d.ts +55 -7
  451. package/dist/runtime/subagents/child.js +105 -7
  452. package/dist/runtime/subagents/definition.d.ts +12 -3
  453. package/dist/runtime/subagents/definition.js +44 -28
  454. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  455. package/dist/runtime/subagents/deliveries.js +228 -0
  456. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  457. package/dist/runtime/subagents/dispatch.js +212 -141
  458. package/dist/runtime/subagents/limits.d.ts +24 -5
  459. package/dist/runtime/subagents/limits.js +40 -6
  460. package/dist/runtime/subagents/messages.d.ts +95 -0
  461. package/dist/runtime/subagents/messages.js +328 -0
  462. package/dist/runtime/subagents/preamble.d.ts +4 -4
  463. package/dist/runtime/subagents/preamble.js +9 -7
  464. package/dist/runtime/subagents/progress.d.ts +8 -6
  465. package/dist/runtime/subagents/progress.js +11 -6
  466. package/dist/runtime/subagents/render.d.ts +30 -0
  467. package/dist/runtime/subagents/render.js +53 -0
  468. package/dist/runtime/subagents/roster.d.ts +24 -7
  469. package/dist/runtime/subagents/roster.js +47 -11
  470. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  471. package/dist/runtime/subagents/skill-fork.js +8 -4
  472. package/dist/runtime/subagents/status.d.ts +14 -0
  473. package/dist/runtime/subagents/status.js +23 -0
  474. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  475. package/dist/runtime/subagents/subagents.service.js +11 -6
  476. package/dist/runtime/usage-report.d.ts +2 -1
  477. package/dist/runtime/usage-report.js +19 -13
  478. package/dist/runtime/waits.d.ts +145 -36
  479. package/dist/runtime/waits.js +423 -109
  480. package/dist/sandbox/jobs.d.ts +40 -13
  481. package/dist/sandbox/jobs.js +57 -20
  482. package/dist/sandbox/leases.d.ts +37 -54
  483. package/dist/sandbox/leases.js +71 -115
  484. package/dist/sandbox/providers.d.ts +2 -2
  485. package/dist/sandbox/providers.js +1 -1
  486. package/dist/sandbox/sandbox.module.d.ts +3 -2
  487. package/dist/sandbox/sandbox.module.js +10 -4
  488. package/dist/sandbox/sandbox.service.d.ts +282 -129
  489. package/dist/sandbox/sandbox.service.js +736 -381
  490. package/dist/skills/catalog.d.ts +3 -2
  491. package/dist/skills/catalog.js +21 -43
  492. package/dist/skills/changes.controller.d.ts +7 -0
  493. package/dist/skills/changes.controller.js +19 -1
  494. package/dist/skills/invoke.js +8 -3
  495. package/dist/skills/package.d.ts +20 -1
  496. package/dist/skills/package.js +28 -1
  497. package/dist/skills/skills.controller.d.ts +39 -4
  498. package/dist/skills/skills.controller.js +88 -10
  499. package/dist/skills/skills.module.js +10 -1
  500. package/dist/skills/skills.service.d.ts +106 -26
  501. package/dist/skills/skills.service.js +421 -75
  502. package/dist/skills/usable.d.ts +81 -0
  503. package/dist/skills/usable.js +379 -0
  504. package/dist/tools/approvals.service.d.ts +20 -2
  505. package/dist/tools/approvals.service.js +25 -4
  506. package/dist/tools/builtin-names.d.ts +41 -7
  507. package/dist/tools/builtin-names.js +59 -7
  508. package/dist/tools/builtins/agent.d.ts +23 -21
  509. package/dist/tools/builtins/agent.js +62 -55
  510. package/dist/tools/builtins/builtin-tools.d.ts +19 -1
  511. package/dist/tools/builtins/builtin-tools.js +59 -2
  512. package/dist/tools/builtins/handback.d.ts +28 -0
  513. package/dist/tools/builtins/handback.js +53 -0
  514. package/dist/tools/builtins/platform.d.ts +34 -0
  515. package/dist/tools/builtins/platform.js +362 -0
  516. package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
  517. package/dist/tools/builtins/sandbox/bash.js +241 -4
  518. package/dist/tools/builtins/sandbox/common.d.ts +69 -27
  519. package/dist/tools/builtins/sandbox/common.js +87 -48
  520. package/dist/tools/builtins/sandbox/deliver.js +1 -1
  521. package/dist/tools/builtins/sandbox/edit.js +2 -2
  522. package/dist/tools/builtins/sandbox/glob.js +2 -2
  523. package/dist/tools/builtins/sandbox/grep.js +2 -4
  524. package/dist/tools/builtins/sandbox/index.d.ts +3 -1
  525. package/dist/tools/builtins/sandbox/index.js +7 -1
  526. package/dist/tools/builtins/sandbox/read.js +1 -1
  527. package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
  528. package/dist/tools/builtins/sandbox/task-output.js +329 -0
  529. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  530. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  531. package/dist/tools/builtins/sandbox/write.js +2 -2
  532. package/dist/tools/builtins/send-message.d.ts +56 -0
  533. package/dist/tools/builtins/send-message.js +100 -0
  534. package/dist/tools/builtins/skill-load.d.ts +22 -14
  535. package/dist/tools/builtins/skill-load.js +86 -57
  536. package/dist/tools/builtins/skill-write.js +1 -1
  537. package/dist/tools/builtins/web/errors.d.ts +8 -0
  538. package/dist/tools/builtins/web/errors.js +53 -0
  539. package/dist/tools/builtins/web/extract.d.ts +62 -0
  540. package/dist/tools/builtins/web/extract.js +271 -0
  541. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  542. package/dist/tools/builtins/web/fetch.js +175 -0
  543. package/dist/tools/builtins/web/index.d.ts +13 -0
  544. package/dist/tools/builtins/web/index.js +12 -0
  545. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  546. package/dist/tools/builtins/web/page-cache.js +77 -0
  547. package/dist/tools/builtins/web/search.d.ts +25 -0
  548. package/dist/tools/builtins/web/search.js +210 -0
  549. package/dist/tools/builtins/web/url.d.ts +17 -0
  550. package/dist/tools/builtins/web/url.js +43 -0
  551. package/dist/tools/connectors.controller.d.ts +10 -0
  552. package/dist/tools/connectors.controller.js +12 -0
  553. package/dist/tools/connectors.service.d.ts +46 -5
  554. package/dist/tools/connectors.service.js +94 -15
  555. package/dist/tools/extension-tools.controller.d.ts +14 -0
  556. package/dist/tools/extension-tools.controller.js +37 -0
  557. package/dist/tools/info.d.ts +42 -1
  558. package/dist/tools/info.js +64 -1
  559. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  560. package/dist/tools/oauth/flow-paths.js +1 -1
  561. package/dist/tools/org-tool-switches.d.ts +74 -0
  562. package/dist/tools/org-tool-switches.js +184 -0
  563. package/dist/tools/pipeline.d.ts +46 -40
  564. package/dist/tools/pipeline.js +202 -364
  565. package/dist/tools/policy.d.ts +1 -1
  566. package/dist/tools/policy.js +36 -16
  567. package/dist/tools/registry.d.ts +120 -8
  568. package/dist/tools/registry.js +112 -19
  569. package/dist/tools/tools.module.js +24 -2
  570. package/dist/tools/validate.js +1 -1
  571. package/dist/ui/views.d.ts +2 -1
  572. package/dist/ui/views.js +17 -3
  573. package/package.json +3 -3
  574. package/src/migrations/0064_account_last_org.sql +7 -0
  575. package/src/migrations/0065_conversation_archive.sql +8 -0
  576. package/src/migrations/0066_extension_display_name.sql +4 -0
  577. package/src/migrations/0067_agent_profiles.sql +20 -0
  578. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  579. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  580. package/src/migrations/0070_background_tasks.sql +37 -0
  581. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  582. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  583. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  584. package/src/migrations/0074_subagent_tree.sql +50 -0
  585. package/src/migrations/0075_plugin_scope.sql +61 -0
  586. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  587. package/src/migrations/0077_scope_requests.sql +52 -0
  588. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  589. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  590. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  591. package/src/migrations/0081_platform_components.sql +129 -0
  592. package/src/migrations/0082_platform_migration.sql +33 -0
  593. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  594. package/src/migrations/0084_org_owned_items.sql +85 -0
  595. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  596. package/src/migrations/0086_org_layering.sql +30 -0
  597. package/src/migrations/0087_approval_summary.sql +6 -0
  598. package/src/migrations/0088_environments.sql +80 -0
  599. package/dist/catalog/upgrade-targets.d.ts +0 -56
  600. package/dist/catalog/upgrade-targets.js +0 -90
  601. package/dist/conversations/sandbox-status.d.ts +0 -24
  602. package/dist/conversations/sandbox-status.js +0 -52
  603. package/dist/extensions/org-config.controller.d.ts +0 -24
  604. package/dist/extensions/org-config.controller.js +0 -62
@@ -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;
@@ -15,7 +15,7 @@ import { CredentialThrottler } from "../infra/throttler/credential-throttler.js"
15
15
  import { createZodDto } from "../infra/validation/create-zod-dto.js";
16
16
  import { ZBody } from "../infra/validation/zod-params.js";
17
17
  import { AccountsService } from "./accounts.js";
18
- import { ACCESS_COOKIE, clearSessionCookies, REFRESH_COOKIE, setSessionCookies, } from "./cookies.js";
18
+ import { ACCESS_COOKIE, clearSessionCookies, refreshCookieValues, setSessionCookies, } from "./cookies.js";
19
19
  import { Public } from "./principal.js";
20
20
  import { SessionService } from "./sessions.js";
21
21
  const LoginBodySchema = z.object({ login: z.string().max(256), password: z.string() });
@@ -74,9 +74,13 @@ let AuthController = class AuthController {
74
74
  */
75
75
  async refresh(req, reply) {
76
76
  try {
77
- const rt = req.cookies[REFRESH_COOKIE];
78
- if (!rt)
77
+ // the header may carry several cap_rt (legacy Path and Path=/): the current one of a live session wins
78
+ const candidates = refreshCookieValues(req.headers.cookie);
79
+ if (candidates.length === 0) {
79
80
  throw new ApiError("auth.refresh_invalid", "Refresh token is missing");
81
+ }
82
+ // none is current: the last one (the Path=/ cookie) goes through the usual replay handling
83
+ const rt = (await this.sessions.pickCurrentRefresh(candidates)) ?? candidates.at(-1);
80
84
  const session = await this.sessions.refresh(rt, clientMeta(req));
81
85
  const account = await this.accounts.get(session.accountId);
82
86
  if (!account)
@@ -94,13 +98,13 @@ let AuthController = class AuthController {
94
98
  async logout(req, reply) {
95
99
  clearSessionCookies(reply);
96
100
  const at = req.cookies[ACCESS_COOKIE];
97
- const rt = req.cookies[REFRESH_COOKIE];
101
+ const rts = refreshCookieValues(req.headers.cookie);
98
102
  if (at) {
99
103
  const sid = await this.sessions.sessionIdFromAccess(at);
100
104
  if (sid !== undefined)
101
105
  await this.sessions.revoke(sid);
102
106
  }
103
- if (rt)
107
+ for (const rt of rts)
104
108
  await this.sessions.revokeByRefresh(rt);
105
109
  }
106
110
  };
@@ -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
  }
@@ -3,14 +3,29 @@ import type { KernelConfig } from "../config/schema.js";
3
3
  import type { IssuedSession } from "./sessions.js";
4
4
  /** access token Cookie:随所有请求发送。 */
5
5
  export declare const ACCESS_COOKIE = "cap_at";
6
- /** refresh token Cookie:只发往认证端点。 */
6
+ /**
7
+ * The refresh-token cookie: SameSite=Lax so a top-level navigation from another site (an IM card
8
+ * link, an email, an OAuth return) carries it and the web tier can renew the session. The refresh
9
+ * endpoint is POST-only and requires `X-Capybara-Csrf`, and Lax cookies are not sent on cross-site
10
+ * POSTs, so this does not widen CSRF exposure.
11
+ */
7
12
  export declare const REFRESH_COOKIE = "cap_rt";
8
- /** refresh Cookie 的 Path。 */
9
- export declare const REFRESH_COOKIE_PATH = "/api/v1/auth";
10
13
  /**
11
- * 写会话 Cookie。两个 Cookie 都 HttpOnly、都**不设 Domain**(只属于当前主机);
12
- * `cap_at` 为 SameSite=Lax、Path=/;`cap_rt` 为 SameSite=Strict、只发往 `/api/v1/auth`。
14
+ * Path of the refresh Cookie: `/`, so the web tier sees it on page requests and can renew the
15
+ * session while rendering on the server.
16
+ */
17
+ export declare const REFRESH_COOKIE_PATH = "/";
18
+ /** The Path earlier releases set `cap_rt` on; browsers may still hold it, so it is cleared too. */
19
+ export declare const LEGACY_REFRESH_COOKIE_PATH = "/api/v1/auth";
20
+ /**
21
+ * Writes the session cookies. Both are HttpOnly, host-only (no Domain), SameSite=Lax and Path=/;
22
+ * the `cap_rt` on the legacy Path is cleared at the same time.
13
23
  */
14
24
  export declare function setSessionCookies(reply: FastifyReply, s: IssuedSession, cfg: KernelConfig): void;
15
25
  /** 清除会话 Cookie(Path 必须与设置时一致才能覆盖)。 */
16
26
  export declare function clearSessionCookies(reply: FastifyReply): void;
27
+ /**
28
+ * Every `cap_rt` value of a raw `cookie` header, in header order. A browser holding the legacy
29
+ * Path cookie and the new one sends both, the more specific Path first.
30
+ */
31
+ export declare function refreshCookieValues(header: string | undefined): string[];
@@ -1,12 +1,22 @@
1
1
  /** access token Cookie:随所有请求发送。 */
2
2
  export const ACCESS_COOKIE = "cap_at";
3
- /** refresh token Cookie:只发往认证端点。 */
3
+ /**
4
+ * The refresh-token cookie: SameSite=Lax so a top-level navigation from another site (an IM card
5
+ * link, an email, an OAuth return) carries it and the web tier can renew the session. The refresh
6
+ * endpoint is POST-only and requires `X-Capybara-Csrf`, and Lax cookies are not sent on cross-site
7
+ * POSTs, so this does not widen CSRF exposure.
8
+ */
4
9
  export const REFRESH_COOKIE = "cap_rt";
5
- /** refresh Cookie 的 Path。 */
6
- export const REFRESH_COOKIE_PATH = "/api/v1/auth";
7
10
  /**
8
- * 写会话 Cookie。两个 Cookie 都 HttpOnly、都**不设 Domain**(只属于当前主机);
9
- * `cap_at` 为 SameSite=Lax、Path=/;`cap_rt` 为 SameSite=Strict、只发往 `/api/v1/auth`。
11
+ * Path of the refresh Cookie: `/`, so the web tier sees it on page requests and can renew the
12
+ * session while rendering on the server.
13
+ */
14
+ export const REFRESH_COOKIE_PATH = "/";
15
+ /** The Path earlier releases set `cap_rt` on; browsers may still hold it, so it is cleared too. */
16
+ export const LEGACY_REFRESH_COOKIE_PATH = "/api/v1/auth";
17
+ /**
18
+ * Writes the session cookies. Both are HttpOnly, host-only (no Domain), SameSite=Lax and Path=/;
19
+ * the `cap_rt` on the legacy Path is cleared at the same time.
10
20
  */
11
21
  export function setSessionCookies(reply, s, cfg) {
12
22
  const secure = cfg.auth.cookieSecure;
@@ -20,13 +30,41 @@ export function setSessionCookies(reply, s, cfg) {
20
30
  reply.setCookie(REFRESH_COOKIE, s.refreshToken, {
21
31
  path: REFRESH_COOKIE_PATH,
22
32
  httpOnly: true,
23
- sameSite: "strict",
33
+ sameSite: "lax",
24
34
  secure,
25
35
  maxAge: cfg.auth.refreshTokenTtlDays * 86400,
26
36
  });
37
+ reply.clearCookie(REFRESH_COOKIE, { path: LEGACY_REFRESH_COOKIE_PATH });
27
38
  }
28
39
  /** 清除会话 Cookie(Path 必须与设置时一致才能覆盖)。 */
29
40
  export function clearSessionCookies(reply) {
30
41
  reply.clearCookie(ACCESS_COOKIE, { path: "/" });
31
42
  reply.clearCookie(REFRESH_COOKIE, { path: REFRESH_COOKIE_PATH });
43
+ reply.clearCookie(REFRESH_COOKIE, { path: LEGACY_REFRESH_COOKIE_PATH });
44
+ }
45
+ /**
46
+ * Every `cap_rt` value of a raw `cookie` header, in header order. A browser holding the legacy
47
+ * Path cookie and the new one sends both, the more specific Path first.
48
+ */
49
+ export function refreshCookieValues(header) {
50
+ if (!header)
51
+ return [];
52
+ const out = [];
53
+ for (const part of header.split(";")) {
54
+ const eq = part.indexOf("=");
55
+ if (eq < 0 || part.slice(0, eq).trim() !== REFRESH_COOKIE)
56
+ continue;
57
+ let v = part.slice(eq + 1).trim();
58
+ if (v.startsWith('"') && v.endsWith('"') && v.length >= 2)
59
+ v = v.slice(1, -1);
60
+ try {
61
+ v = decodeURIComponent(v);
62
+ }
63
+ catch {
64
+ // keep the raw value
65
+ }
66
+ if (v)
67
+ out.push(v);
68
+ }
69
+ return out;
32
70
  }
@@ -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 {
@@ -11,14 +11,14 @@ import { OrgLockModule } from "../orgs/org-lock.js";
11
11
  import { AccountsModule } from "./accounts.js";
12
12
  import { ApiTokenService } from "./api-tokens.js";
13
13
  import { IdentityBinding } from "./binding.js";
14
- import { EnterpriseAdminLockModule } from "./enterprise-admin.js";
15
14
  import { ExternalIdentities } from "./external.js";
16
15
  import { ExternalIdentityLock } from "./external-identity-lock.js";
17
16
  import { SessionService } from "./sessions.js";
18
17
  import { SettingsService } from "./settings.js";
19
18
  import { SsoFlow } from "./sso.js";
19
+ import { SuperAdminLockModule } from "./super-admin.js";
20
20
  /**
21
- * Identity: accounts, sessions, API tokens, deployment settings and the enterprise admin lock,
21
+ * Identity: accounts, sessions, API tokens, deployment settings and the super admin lock,
22
22
  * external identities with IM binding and third-party sign-in.
23
23
  */
24
24
  let IdentityModule = class IdentityModule {
@@ -29,7 +29,7 @@ IdentityModule = __decorate([
29
29
  AccountsModule,
30
30
  OrgLockModule,
31
31
  SetupLockModule,
32
- EnterpriseAdminLockModule,
32
+ SuperAdminLockModule,
33
33
  ExtensionRegistryModule,
34
34
  ],
35
35
  providers: [
@@ -46,7 +46,7 @@ IdentityModule = __decorate([
46
46
  SessionService,
47
47
  ApiTokenService,
48
48
  SettingsService,
49
- EnterpriseAdminLockModule,
49
+ SuperAdminLockModule,
50
50
  ExternalIdentities,
51
51
  IdentityBinding,
52
52
  SsoFlow,
@@ -8,6 +8,7 @@ import { type Account, AccountsService } from "./accounts.js";
8
8
  import { type ApiTokenRecord, ApiTokenService } from "./api-tokens.js";
9
9
  import { type Principal } from "./principal.js";
10
10
  import { SessionService } from "./sessions.js";
11
+ import { SettingsService } from "./settings.js";
11
12
  declare const ChangePasswordSchema: z.ZodObject<{
12
13
  currentPassword: z.ZodString;
13
14
  newPassword: z.ZodString;
@@ -33,12 +34,15 @@ export declare class MeController {
33
34
  private readonly tokens;
34
35
  private readonly throttler;
35
36
  private readonly log;
36
- constructor(accounts: AccountsService, sessions: SessionService, orgs: OrgsService, tokens: ApiTokenService, throttler: CredentialThrottler, log: Logger);
37
+ private readonly settings;
38
+ constructor(accounts: AccountsService, sessions: SessionService, orgs: OrgsService, tokens: ApiTokenService, throttler: CredentialThrottler, log: Logger, settings: SettingsService);
37
39
  me(principal: Principal): Promise<{
38
40
  account: Account;
39
41
  via: "session" | "pat";
40
42
  currentOrgId: string | null;
41
43
  memberships: MembershipView[];
44
+ /** Whether `POST /api/v1/orgs` would accept this account (the `orgCreation` setting). */
45
+ canCreateOrg: boolean;
42
46
  }>;
43
47
  /** 切换当前组织(仅 Web 会话);`null` 清空。非成员或已软删除的组织 → `org.not_found`。 */
44
48
  setCurrentOrg(principal: Principal, body: z.infer<typeof CurrentOrgSchema>): Promise<void>;