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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1039) hide show
  1. package/bootstrap.json +94 -5
  2. package/dist/admin/admin-agents.controller.d.ts +28 -0
  3. package/dist/admin/admin-agents.controller.js +79 -0
  4. package/dist/admin/admin-connectors.controller.d.ts +29 -0
  5. package/dist/admin/admin-connectors.controller.js +79 -0
  6. package/dist/admin/admin-items.schemas.d.ts +42 -0
  7. package/dist/admin/admin-items.schemas.js +48 -0
  8. package/dist/admin/admin.controller.d.ts +52 -80
  9. package/dist/admin/admin.controller.js +112 -81
  10. package/dist/admin/admin.module.d.ts +4 -1
  11. package/dist/admin/admin.module.js +50 -4
  12. package/dist/admin/admin.schemas.d.ts +69 -0
  13. package/dist/admin/admin.schemas.js +53 -0
  14. package/dist/admin/audit.controller.d.ts +14 -0
  15. package/dist/admin/audit.controller.js +42 -0
  16. package/dist/admin/audit.schemas.d.ts +8 -0
  17. package/dist/admin/audit.schemas.js +17 -0
  18. package/dist/admin/extensions.controller.d.ts +34 -3
  19. package/dist/admin/extensions.controller.js +66 -8
  20. package/dist/admin/extensions.schemas.d.ts +7 -0
  21. package/dist/admin/extensions.schemas.js +10 -0
  22. package/dist/admin/health.service.d.ts +104 -0
  23. package/dist/admin/health.service.js +246 -0
  24. package/dist/admin/limit-defaults.d.ts +20 -0
  25. package/dist/admin/limit-defaults.js +10 -0
  26. package/dist/admin/overview.controller.d.ts +31 -0
  27. package/dist/admin/overview.controller.js +78 -0
  28. package/dist/admin/overview.schemas.d.ts +8 -0
  29. package/dist/admin/overview.schemas.js +13 -0
  30. package/dist/admin/overview.service.d.ts +112 -0
  31. package/dist/admin/overview.service.js +223 -0
  32. package/dist/admin/platform-audit.service.d.ts +41 -0
  33. package/dist/admin/platform-audit.service.js +70 -0
  34. package/dist/admin/setup-lock.d.ts +1 -1
  35. package/dist/admin/setup-lock.js +1 -1
  36. package/dist/admin/setup.controller.d.ts +1 -1
  37. package/dist/admin/setup.controller.js +1 -1
  38. package/dist/admin/setup.service.d.ts +4 -4
  39. package/dist/admin/setup.service.js +8 -8
  40. package/dist/admin/usage.service.d.ts +149 -0
  41. package/dist/admin/usage.service.js +321 -0
  42. package/dist/agents/admin-agents.d.ts +92 -0
  43. package/dist/agents/admin-agents.js +170 -0
  44. package/dist/agents/agent-lookup.d.ts +24 -0
  45. package/dist/agents/agent-lookup.js +46 -2
  46. package/dist/agents/agent-profile.service.d.ts +31 -0
  47. package/dist/agents/agent-profile.service.js +122 -0
  48. package/dist/agents/agents.controller.d.ts +53 -168
  49. package/dist/agents/agents.controller.js +163 -34
  50. package/dist/agents/agents.module.d.ts +6 -2
  51. package/dist/agents/agents.module.js +41 -7
  52. package/dist/agents/agents.schemas.d.ts +392 -0
  53. package/dist/agents/agents.schemas.js +126 -0
  54. package/dist/agents/agents.service.d.ts +121 -36
  55. package/dist/agents/agents.service.js +411 -121
  56. package/dist/agents/definition.d.ts +142 -21
  57. package/dist/agents/definition.js +389 -43
  58. package/dist/agents/from-template.d.ts +106 -0
  59. package/dist/agents/from-template.js +680 -0
  60. package/dist/agents/from-template.service.d.ts +72 -0
  61. package/dist/agents/from-template.service.js +178 -0
  62. package/dist/agents/instruction-files.d.ts +60 -0
  63. package/dist/agents/instruction-files.js +111 -0
  64. package/dist/agents/models.controller.d.ts +44 -6
  65. package/dist/agents/models.controller.js +84 -8
  66. package/dist/agents/org-templates.d.ts +186 -0
  67. package/dist/agents/org-templates.js +876 -0
  68. package/dist/agents/pending-connector-requests.d.ts +79 -0
  69. package/dist/agents/pending-connector-requests.js +215 -0
  70. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  71. package/dist/agents/pending-connectors.controller.js +91 -0
  72. package/dist/agents/pending-connectors.service.d.ts +62 -0
  73. package/dist/agents/pending-connectors.service.js +282 -0
  74. package/dist/agents/profile.d.ts +114 -0
  75. package/dist/agents/profile.js +55 -0
  76. package/dist/agents/readiness.controller.d.ts +26 -0
  77. package/dist/agents/readiness.controller.js +56 -0
  78. package/dist/agents/templates.controller.d.ts +77 -5
  79. package/dist/agents/templates.controller.js +153 -7
  80. package/dist/agents/templates.d.ts +127 -23
  81. package/dist/agents/templates.js +482 -44
  82. package/dist/agents/templates.schemas.d.ts +20 -0
  83. package/dist/agents/templates.schemas.js +45 -0
  84. package/dist/background/background.controller.d.ts +38 -0
  85. package/dist/background/background.controller.js +88 -0
  86. package/dist/background/background.module.d.ts +10 -0
  87. package/dist/background/background.module.js +39 -0
  88. package/dist/background/background.schemas.d.ts +10 -0
  89. package/dist/background/background.schemas.js +16 -0
  90. package/dist/background/finish.d.ts +44 -0
  91. package/dist/background/finish.js +95 -0
  92. package/dist/background/launch-lock.d.ts +15 -0
  93. package/dist/background/launch-lock.js +40 -0
  94. package/dist/background/launch.d.ts +42 -0
  95. package/dist/background/launch.js +77 -0
  96. package/dist/background/poll.job.d.ts +56 -0
  97. package/dist/background/poll.job.js +195 -0
  98. package/dist/background/render.d.ts +23 -0
  99. package/dist/background/render.js +48 -0
  100. package/dist/background/session.d.ts +48 -0
  101. package/dist/background/session.js +80 -0
  102. package/dist/background/status.d.ts +35 -0
  103. package/dist/background/status.js +57 -0
  104. package/dist/background/stop.d.ts +68 -0
  105. package/dist/background/stop.js +244 -0
  106. package/dist/background/store.d.ts +167 -0
  107. package/dist/background/store.js +361 -0
  108. package/dist/background/store.module.d.ts +6 -0
  109. package/dist/background/store.module.js +22 -0
  110. package/dist/background/tasks.service.d.ts +109 -0
  111. package/dist/background/tasks.service.js +271 -0
  112. package/dist/background/wake-rules.d.ts +66 -0
  113. package/dist/background/wake-rules.js +113 -0
  114. package/dist/background/wake.d.ts +30 -0
  115. package/dist/background/wake.js +63 -0
  116. package/dist/catalog/admin-catalog.controller.d.ts +136 -52
  117. package/dist/catalog/admin-catalog.controller.js +275 -65
  118. package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
  119. package/dist/catalog/admin-catalog.schemas.js +99 -0
  120. package/dist/catalog/appearance.schemas.d.ts +10 -0
  121. package/dist/catalog/appearance.schemas.js +20 -0
  122. package/dist/catalog/appearance.service.d.ts +105 -0
  123. package/dist/catalog/appearance.service.js +306 -0
  124. package/dist/catalog/catalog-content.d.ts +122 -35
  125. package/dist/catalog/catalog-content.js +122 -14
  126. package/dist/catalog/catalog-files.d.ts +42 -0
  127. package/dist/catalog/catalog-files.js +89 -0
  128. package/dist/catalog/catalog-import.module.d.ts +7 -0
  129. package/dist/catalog/catalog-import.module.js +63 -0
  130. package/dist/catalog/catalog-items.d.ts +122 -7
  131. package/dist/catalog/catalog-items.js +301 -13
  132. package/dist/catalog/catalog-scope.service.d.ts +293 -0
  133. package/dist/catalog/catalog-scope.service.js +1236 -0
  134. package/dist/catalog/catalog.module.d.ts +7 -9
  135. package/dist/catalog/catalog.module.js +47 -31
  136. package/dist/catalog/catalog.service.d.ts +122 -31
  137. package/dist/catalog/catalog.service.js +177 -105
  138. package/dist/catalog/claude/agents.js +15 -10
  139. package/dist/catalog/claude/translate.js +3 -0
  140. package/dist/catalog/cli.d.ts +11 -1
  141. package/dist/catalog/cli.js +29 -1
  142. package/dist/catalog/component-promotion.d.ts +96 -0
  143. package/dist/catalog/component-promotion.js +395 -0
  144. package/dist/catalog/component-scope.controller.d.ts +102 -0
  145. package/dist/catalog/component-scope.controller.js +257 -0
  146. package/dist/catalog/component-scope.schemas.d.ts +118 -0
  147. package/dist/catalog/component-scope.schemas.js +97 -0
  148. package/dist/catalog/component-scope.service.d.ts +394 -0
  149. package/dist/catalog/component-scope.service.js +1133 -0
  150. package/dist/catalog/component-state.d.ts +207 -0
  151. package/dist/catalog/component-state.js +484 -0
  152. package/dist/catalog/git-source.d.ts +9 -1
  153. package/dist/catalog/git-source.js +29 -2
  154. package/dist/catalog/job-ids.d.ts +30 -0
  155. package/dist/catalog/job-ids.js +25 -0
  156. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  157. package/dist/catalog/marketplace-icons.d.ts +64 -0
  158. package/dist/catalog/marketplace-icons.js +131 -0
  159. package/dist/catalog/marketplaces.controller.d.ts +50 -41
  160. package/dist/catalog/marketplaces.controller.js +130 -46
  161. package/dist/catalog/marketplaces.schemas.d.ts +48 -0
  162. package/dist/catalog/marketplaces.schemas.js +53 -0
  163. package/dist/catalog/marketplaces.service.d.ts +110 -17
  164. package/dist/catalog/marketplaces.service.js +337 -29
  165. package/dist/catalog/org-catalog.controller.d.ts +114 -62
  166. package/dist/catalog/org-catalog.controller.js +191 -98
  167. package/dist/catalog/org-catalog.schemas.d.ts +104 -0
  168. package/dist/catalog/org-catalog.schemas.js +107 -0
  169. package/dist/catalog/org-catalog.service.d.ts +72 -33
  170. package/dist/catalog/org-catalog.service.js +367 -158
  171. package/dist/catalog/org-extension-switch.d.ts +41 -0
  172. package/dist/catalog/org-extension-switch.js +115 -0
  173. package/dist/catalog/org-extension.controller.d.ts +133 -0
  174. package/dist/catalog/org-extension.controller.js +313 -0
  175. package/dist/catalog/org-extension.schemas.d.ts +15 -0
  176. package/dist/catalog/org-extension.schemas.js +22 -0
  177. package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
  178. package/dist/catalog/org-plugin-uploads.controller.js +200 -0
  179. package/dist/catalog/org-plugin-uploads.d.ts +71 -0
  180. package/dist/catalog/org-plugin-uploads.js +122 -0
  181. package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
  182. package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
  183. package/dist/catalog/owned-items.d.ts +188 -0
  184. package/dist/catalog/owned-items.js +808 -0
  185. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  186. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  187. package/dist/catalog/ownership.d.ts +172 -0
  188. package/dist/catalog/ownership.js +326 -0
  189. package/dist/catalog/platform-components.d.ts +243 -0
  190. package/dist/catalog/platform-components.js +872 -0
  191. package/dist/catalog/platform-migration.d.ts +115 -0
  192. package/dist/catalog/platform-migration.js +583 -0
  193. package/dist/catalog/plugin-import.d.ts +254 -47
  194. package/dist/catalog/plugin-import.js +810 -112
  195. package/dist/catalog/plugin-install.d.ts +205 -42
  196. package/dist/catalog/plugin-install.js +828 -126
  197. package/dist/catalog/plugin-package.d.ts +43 -4
  198. package/dist/catalog/plugin-package.js +194 -7
  199. package/dist/catalog/plugin-upgrade.d.ts +308 -225
  200. package/dist/catalog/plugin-upgrade.js +1325 -1131
  201. package/dist/catalog/request-rules.d.ts +65 -0
  202. package/dist/catalog/request-rules.js +217 -0
  203. package/dist/catalog/requests.service.d.ts +194 -118
  204. package/dist/catalog/requests.service.js +530 -343
  205. package/dist/catalog/reserved-names.d.ts +8 -0
  206. package/dist/catalog/reserved-names.js +42 -0
  207. package/dist/catalog/scope-orgs.d.ts +21 -0
  208. package/dist/catalog/scope-orgs.js +67 -0
  209. package/dist/catalog/scope-state.d.ts +35 -0
  210. package/dist/catalog/scope-state.js +87 -0
  211. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  212. package/dist/catalog/scope-sync-workers.js +29 -0
  213. package/dist/catalog/scope-sync.d.ts +176 -0
  214. package/dist/catalog/scope-sync.js +576 -0
  215. package/dist/catalog/scope.d.ts +42 -0
  216. package/dist/catalog/scope.js +42 -0
  217. package/dist/catalog/unshare.d.ts +22 -0
  218. package/dist/catalog/unshare.js +119 -0
  219. package/dist/channels/actions.js +10 -3
  220. package/dist/channels/cards.d.ts +36 -10
  221. package/dist/channels/cards.js +100 -25
  222. package/dist/channels/channels.module.js +13 -2
  223. package/dist/channels/channels.schemas.d.ts +41 -0
  224. package/dist/channels/channels.schemas.js +40 -0
  225. package/dist/channels/connections.controller.d.ts +46 -37
  226. package/dist/channels/connections.controller.js +76 -34
  227. package/dist/channels/connections.service.d.ts +102 -10
  228. package/dist/channels/connections.service.js +271 -24
  229. package/dist/channels/inbound.d.ts +11 -1
  230. package/dist/channels/inbound.js +87 -7
  231. package/dist/channels/outbound.d.ts +14 -1
  232. package/dist/channels/outbound.js +64 -15
  233. package/dist/channels/phrases.d.ts +33 -2
  234. package/dist/channels/phrases.js +29 -1
  235. package/dist/channels/supervisor.d.ts +2 -0
  236. package/dist/channels/supervisor.js +4 -0
  237. package/dist/channels/threads.d.ts +5 -0
  238. package/dist/channels/threads.js +8 -0
  239. package/dist/channels/webhook.d.ts +21 -1
  240. package/dist/channels/webhook.js +39 -4
  241. package/dist/client/client-access.service.d.ts +102 -0
  242. package/dist/client/client-access.service.js +303 -0
  243. package/dist/client/client-builds.service.d.ts +109 -0
  244. package/dist/client/client-builds.service.js +229 -0
  245. package/dist/client/client-delivery.controller.d.ts +25 -0
  246. package/dist/client/client-delivery.controller.js +66 -0
  247. package/dist/client/client-files.d.ts +48 -0
  248. package/dist/client/client-files.js +136 -0
  249. package/dist/client/client-reports.cron.d.ts +13 -0
  250. package/dist/client/client-reports.cron.js +42 -0
  251. package/dist/client/client-reports.service.d.ts +30 -0
  252. package/dist/client/client-reports.service.js +102 -0
  253. package/dist/client/client-sign-in.service.d.ts +21 -0
  254. package/dist/client/client-sign-in.service.js +49 -0
  255. package/dist/client/client.controller.d.ts +49 -0
  256. package/dist/client/client.controller.js +129 -0
  257. package/dist/client/client.module.d.ts +8 -0
  258. package/dist/client/client.module.js +28 -0
  259. package/dist/client/client.schemas.d.ts +61 -0
  260. package/dist/client/client.schemas.js +27 -0
  261. package/dist/config/docs.js +5 -1
  262. package/dist/config/schema.d.ts +35 -2
  263. package/dist/config/schema.js +216 -21
  264. package/dist/conversations/access.d.ts +6 -4
  265. package/dist/conversations/access.js +29 -5
  266. package/dist/conversations/agent-tree.d.ts +46 -0
  267. package/dist/conversations/agent-tree.js +92 -0
  268. package/dist/conversations/artifacts.d.ts +1 -1
  269. package/dist/conversations/artifacts.js +1 -1
  270. package/dist/conversations/attachments.service.d.ts +30 -0
  271. package/dist/conversations/attachments.service.js +130 -5
  272. package/dist/conversations/conversations.controller.d.ts +79 -44
  273. package/dist/conversations/conversations.controller.js +133 -82
  274. package/dist/conversations/conversations.module.d.ts +1 -1
  275. package/dist/conversations/conversations.module.js +10 -7
  276. package/dist/conversations/conversations.schemas.d.ts +52 -0
  277. package/dist/conversations/conversations.schemas.js +79 -0
  278. package/dist/conversations/conversations.service.d.ts +161 -13
  279. package/dist/conversations/conversations.service.js +329 -57
  280. package/dist/conversations/device-status.d.ts +24 -0
  281. package/dist/conversations/device-status.js +71 -0
  282. package/dist/conversations/event-log.d.ts +45 -9
  283. package/dist/conversations/event-log.js +113 -6
  284. package/dist/conversations/events.d.ts +255 -9
  285. package/dist/conversations/events.js +250 -34
  286. package/dist/conversations/message-context.d.ts +79 -0
  287. package/dist/conversations/message-context.js +145 -0
  288. package/dist/conversations/queue.d.ts +5 -2
  289. package/dist/conversations/queue.js +24 -4
  290. package/dist/conversations/queue.service.d.ts +2 -2
  291. package/dist/conversations/queue.service.js +21 -3
  292. package/dist/conversations/titles.d.ts +12 -3
  293. package/dist/conversations/titles.js +40 -16
  294. package/dist/conversations/tree.d.ts +17 -0
  295. package/dist/conversations/tree.js +42 -0
  296. package/dist/ctx/create-ctx.d.ts +48 -5
  297. package/dist/ctx/create-ctx.js +174 -34
  298. package/dist/db/kernel-schema.d.ts +668 -27
  299. package/dist/db/pool.d.ts +5 -0
  300. package/dist/db/pool.js +3 -0
  301. package/dist/devices/access.d.ts +66 -0
  302. package/dist/devices/access.js +113 -0
  303. package/dist/devices/conversation-devices.d.ts +75 -0
  304. package/dist/devices/conversation-devices.js +230 -0
  305. package/dist/devices/devices.controller.d.ts +36 -0
  306. package/dist/devices/devices.controller.js +124 -0
  307. package/dist/devices/devices.module.d.ts +8 -0
  308. package/dist/devices/devices.module.js +34 -0
  309. package/dist/devices/devices.schemas.d.ts +3 -0
  310. package/dist/devices/devices.schemas.js +14 -0
  311. package/dist/devices/devices.service.d.ts +251 -0
  312. package/dist/devices/devices.service.js +791 -0
  313. package/dist/devices/dto.d.ts +25 -0
  314. package/dist/devices/dto.js +12 -0
  315. package/dist/devices/label.d.ts +11 -0
  316. package/dist/devices/label.js +25 -0
  317. package/dist/devices/legacy-cleanup.job.d.ts +34 -0
  318. package/dist/devices/legacy-cleanup.job.js +141 -0
  319. package/dist/errors.d.ts +215 -3
  320. package/dist/errors.js +215 -3
  321. package/dist/evals/evals.module.js +11 -2
  322. package/dist/evals/evals.schemas.d.ts +110 -0
  323. package/dist/evals/evals.schemas.js +107 -0
  324. package/dist/evals/reconstruct.d.ts +18 -9
  325. package/dist/evals/reconstruct.js +36 -10
  326. package/dist/evals/recorded-tools.d.ts +37 -1
  327. package/dist/evals/recorded-tools.js +120 -10
  328. package/dist/evals/run-replay.d.ts +20 -3
  329. package/dist/evals/run-replay.js +78 -14
  330. package/dist/evals/runs.controller.d.ts +2 -57
  331. package/dist/evals/runs.controller.js +1 -42
  332. package/dist/evals/runs.service.d.ts +8 -7
  333. package/dist/evals/runs.service.js +45 -30
  334. package/dist/evals/sets.controller.d.ts +2 -28
  335. package/dist/evals/sets.controller.js +1 -31
  336. package/dist/evals/sets.service.d.ts +7 -7
  337. package/dist/evals/sets.service.js +23 -17
  338. package/dist/evals/snapshot.d.ts +3 -2
  339. package/dist/evals/snapshot.js +17 -4
  340. package/dist/evals/step-replay.d.ts +4 -6
  341. package/dist/evals/step-replay.js +16 -9
  342. package/dist/evals/trajectory.d.ts +5 -3
  343. package/dist/evals/trajectory.js +4 -1
  344. package/dist/evals/trajectory.service.d.ts +8 -3
  345. package/dist/evals/trajectory.service.js +26 -14
  346. package/dist/evals/worker.d.ts +5 -5
  347. package/dist/evals/worker.js +9 -3
  348. package/dist/extensions/admin-ops.d.ts +81 -14
  349. package/dist/extensions/admin-ops.js +181 -47
  350. package/dist/extensions/admin-view.d.ts +57 -10
  351. package/dist/extensions/admin-view.js +249 -27
  352. package/dist/extensions/approvals.d.ts +12 -2
  353. package/dist/extensions/blobs.d.ts +14 -1
  354. package/dist/extensions/blobs.js +49 -5
  355. package/dist/extensions/bootstrap.d.ts +85 -10
  356. package/dist/extensions/bootstrap.js +215 -36
  357. package/dist/extensions/cli.d.ts +12 -0
  358. package/dist/extensions/cli.js +11 -2
  359. package/dist/extensions/config-hash.d.ts +10 -0
  360. package/dist/extensions/config-hash.js +38 -0
  361. package/dist/extensions/config-issues.d.ts +13 -1
  362. package/dist/extensions/config-issues.js +22 -5
  363. package/dist/extensions/config-json-schema.d.ts +43 -7
  364. package/dist/extensions/config-json-schema.js +124 -58
  365. package/dist/extensions/deployment-config-store.d.ts +6 -0
  366. package/dist/extensions/deployment-config.d.ts +94 -9
  367. package/dist/extensions/deployment-config.js +255 -34
  368. package/dist/extensions/display-name.d.ts +22 -0
  369. package/dist/extensions/display-name.js +77 -0
  370. package/dist/extensions/effective-config.d.ts +133 -0
  371. package/dist/extensions/effective-config.js +379 -0
  372. package/dist/extensions/extensions.module.js +31 -12
  373. package/dist/extensions/guide-places.d.ts +68 -0
  374. package/dist/extensions/guide-places.js +152 -0
  375. package/dist/extensions/hooks.d.ts +37 -4
  376. package/dist/extensions/hooks.js +82 -16
  377. package/dist/extensions/host.d.ts +105 -12
  378. package/dist/extensions/host.js +372 -87
  379. package/dist/extensions/installs.d.ts +30 -9
  380. package/dist/extensions/installs.js +57 -16
  381. package/dist/extensions/instance.d.ts +17 -2
  382. package/dist/extensions/instance.js +21 -0
  383. package/dist/extensions/ledger.d.ts +1 -1
  384. package/dist/extensions/locks.d.ts +12 -0
  385. package/dist/extensions/locks.js +26 -0
  386. package/dist/extensions/org-config.d.ts +97 -7
  387. package/dist/extensions/org-config.js +215 -45
  388. package/dist/extensions/org-levels.d.ts +37 -0
  389. package/dist/extensions/org-levels.js +71 -0
  390. package/dist/extensions/org-overrides.d.ts +151 -0
  391. package/dist/extensions/org-overrides.js +524 -0
  392. package/dist/extensions/package.d.ts +18 -4
  393. package/dist/extensions/package.js +56 -3
  394. package/dist/extensions/permission-set.d.ts +35 -5
  395. package/dist/extensions/permission-set.js +36 -5
  396. package/dist/extensions/permission-view.d.ts +106 -13
  397. package/dist/extensions/permission-view.js +33 -15
  398. package/dist/extensions/plugin-guides.d.ts +282 -0
  399. package/dist/extensions/plugin-guides.js +554 -0
  400. package/dist/extensions/plugin-icons.d.ts +54 -0
  401. package/dist/extensions/plugin-icons.js +125 -0
  402. package/dist/extensions/plugin-items.d.ts +21 -0
  403. package/dist/extensions/plugin-items.js +42 -0
  404. package/dist/extensions/point-defaults.controller.d.ts +28 -0
  405. package/dist/extensions/point-defaults.controller.js +69 -0
  406. package/dist/extensions/point-defaults.d.ts +73 -0
  407. package/dist/extensions/point-defaults.js +236 -0
  408. package/dist/extensions/point-defaults.schemas.d.ts +9 -0
  409. package/dist/extensions/point-defaults.schemas.js +14 -0
  410. package/dist/extensions/registry.d.ts +1 -1
  411. package/dist/extensions/registry.js +2 -0
  412. package/dist/extensions/resolve.d.ts +51 -1
  413. package/dist/extensions/resolve.js +85 -3
  414. package/dist/extensions/single-provider.d.ts +92 -0
  415. package/dist/extensions/single-provider.js +180 -0
  416. package/dist/extensions/sources.d.ts +13 -2
  417. package/dist/extensions/sources.js +2 -0
  418. package/dist/extensions/state.module.d.ts +9 -0
  419. package/dist/extensions/state.module.js +46 -0
  420. package/dist/extensions/unavailable.d.ts +50 -0
  421. package/dist/extensions/unavailable.js +115 -0
  422. package/dist/files/previewers.controller.js +2 -3
  423. package/dist/files/previewers.d.ts +10 -3
  424. package/dist/files/previewers.js +40 -11
  425. package/dist/files/previewers.schemas.d.ts +10 -0
  426. package/dist/files/previewers.schemas.js +9 -0
  427. package/dist/http/api.module.js +76 -4
  428. package/dist/http/app.d.ts +11 -2
  429. package/dist/http/app.js +31 -5
  430. package/dist/http/gateway-routes.d.ts +7 -3
  431. package/dist/http/gateway-routes.js +6 -3
  432. package/dist/http/nest-logger.d.ts +6 -5
  433. package/dist/http/nest-logger.js +24 -10
  434. package/dist/http/plugin-dispatch.d.ts +4 -1
  435. package/dist/http/plugin-dispatch.js +14 -2
  436. package/dist/identity/accounts.d.ts +77 -31
  437. package/dist/identity/accounts.js +133 -52
  438. package/dist/identity/audit.d.ts +2 -1
  439. package/dist/identity/auth.controller.js +9 -5
  440. package/dist/identity/auth.guard.d.ts +13 -5
  441. package/dist/identity/auth.guard.js +35 -9
  442. package/dist/identity/cookies.d.ts +26 -5
  443. package/dist/identity/cookies.js +58 -6
  444. package/dist/identity/identity.module.d.ts +1 -1
  445. package/dist/identity/identity.module.js +7 -4
  446. package/dist/identity/initial-passwords.controller.d.ts +22 -0
  447. package/dist/identity/initial-passwords.controller.js +49 -0
  448. package/dist/identity/initial-passwords.d.ts +61 -0
  449. package/dist/identity/initial-passwords.job.d.ts +16 -0
  450. package/dist/identity/initial-passwords.job.js +46 -0
  451. package/dist/identity/initial-passwords.js +159 -0
  452. package/dist/identity/me.controller.d.ts +17 -1
  453. package/dist/identity/me.controller.js +45 -4
  454. package/dist/identity/me.schemas.d.ts +24 -0
  455. package/dist/identity/me.schemas.js +25 -0
  456. package/dist/identity/principal.d.ts +11 -3
  457. package/dist/identity/principal.js +11 -3
  458. package/dist/identity/sessions.d.ts +12 -0
  459. package/dist/identity/sessions.js +45 -0
  460. package/dist/identity/settings.d.ts +99 -12
  461. package/dist/identity/settings.js +234 -25
  462. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  463. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  464. package/dist/identity/write-actor.d.ts +11 -0
  465. package/dist/identity/write-actor.js +7 -0
  466. package/dist/inbox/inbox.module.d.ts +4 -1
  467. package/dist/inbox/inbox.module.js +7 -3
  468. package/dist/inbox/inbox.schemas.d.ts +8 -0
  469. package/dist/inbox/inbox.schemas.js +11 -0
  470. package/dist/inbox/inbox.service.d.ts +64 -4
  471. package/dist/inbox/inbox.service.js +74 -4
  472. package/dist/inbox/org-notices.d.ts +63 -0
  473. package/dist/inbox/org-notices.js +91 -0
  474. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  475. package/dist/inbox/platform-inbox.controller.js +58 -0
  476. package/dist/inbox/platform-inbox.service.d.ts +157 -0
  477. package/dist/inbox/platform-inbox.service.js +281 -0
  478. package/dist/inbox/platform-notices.d.ts +19 -0
  479. package/dist/inbox/platform-notices.js +9 -0
  480. package/dist/index.d.ts +6 -2
  481. package/dist/index.js +7 -1
  482. package/dist/infra/cli/kernel-cli.module.js +9 -1
  483. package/dist/infra/config/kernel-config.service.js +32 -1
  484. package/dist/infra/database/database.module.js +1 -0
  485. package/dist/infra/database/xact-lock.d.ts +1 -1
  486. package/dist/infra/database/xact-lock.js +1 -1
  487. package/dist/infra/events/kernel-events.d.ts +31 -3
  488. package/dist/infra/lifecycle/process-guards.js +4 -0
  489. package/dist/infra/lock/lock.service.d.ts +8 -0
  490. package/dist/infra/lock/lock.service.js +27 -0
  491. package/dist/infra/logging/logging.module.d.ts +4 -2
  492. package/dist/infra/logging/logging.module.js +24 -6
  493. package/dist/infra/presence/presence.module.d.ts +6 -0
  494. package/dist/infra/presence/presence.module.js +22 -0
  495. package/dist/infra/presence/replica-presence.d.ts +87 -0
  496. package/dist/infra/presence/replica-presence.js +189 -0
  497. package/dist/infra/queue/add-job-once.d.ts +14 -0
  498. package/dist/infra/queue/add-job-once.js +16 -0
  499. package/dist/infra/queue/redis-connection.d.ts +6 -0
  500. package/dist/infra/queue/redis-connection.js +7 -0
  501. package/dist/infra/redis/redis.module.js +6 -2
  502. package/dist/infra/throttler/named-throttlers.d.ts +12 -0
  503. package/dist/infra/throttler/named-throttlers.js +67 -0
  504. package/dist/infra/throttler/throttler.guard.js +1 -1
  505. package/dist/infra/tokens.d.ts +6 -1
  506. package/dist/infra/tokens.js +6 -1
  507. package/dist/kernel.module.js +15 -0
  508. package/dist/lifecycle/kernel-lifecycle.d.ts +9 -3
  509. package/dist/lifecycle/kernel-lifecycle.js +51 -11
  510. package/dist/local-devices/device-auth.controller.d.ts +42 -0
  511. package/dist/local-devices/device-auth.controller.js +116 -0
  512. package/dist/local-devices/device-auth.d.ts +119 -0
  513. package/dist/local-devices/device-auth.js +401 -0
  514. package/dist/local-devices/device-auth.module.d.ts +7 -0
  515. package/dist/local-devices/device-auth.module.js +25 -0
  516. package/dist/local-devices/device-routes.d.ts +36 -0
  517. package/dist/local-devices/device-routes.js +90 -0
  518. package/dist/local-devices/dto.d.ts +66 -0
  519. package/dist/local-devices/dto.js +44 -0
  520. package/dist/local-devices/keys.d.ts +25 -0
  521. package/dist/local-devices/keys.js +25 -0
  522. package/dist/local-devices/local-device-gateway.d.ts +134 -0
  523. package/dist/local-devices/local-device-gateway.js +542 -0
  524. package/dist/local-devices/local-device-provider.d.ts +89 -0
  525. package/dist/local-devices/local-device-provider.js +151 -0
  526. package/dist/local-devices/local-devices.module.d.ts +16 -0
  527. package/dist/local-devices/local-devices.module.js +44 -0
  528. package/dist/local-devices/machines.d.ts +118 -0
  529. package/dist/local-devices/machines.js +366 -0
  530. package/dist/local-devices/relay.d.ts +100 -0
  531. package/dist/local-devices/relay.js +373 -0
  532. package/dist/local-devices/targets.d.ts +28 -0
  533. package/dist/local-devices/targets.js +73 -0
  534. package/dist/log.d.ts +13 -1
  535. package/dist/log.js +93 -17
  536. package/dist/models/embeddings.d.ts +82 -0
  537. package/dist/models/embeddings.js +326 -0
  538. package/dist/models/enablement.controller.d.ts +40 -0
  539. package/dist/models/enablement.controller.js +74 -0
  540. package/dist/models/enablement.d.ts +101 -0
  541. package/dist/models/enablement.js +264 -0
  542. package/dist/models/models.module.d.ts +5 -1
  543. package/dist/models/models.module.js +16 -4
  544. package/dist/models/org-models.schemas.d.ts +8 -0
  545. package/dist/models/org-models.schemas.js +22 -0
  546. package/dist/models/prices.d.ts +8 -6
  547. package/dist/models/prices.js +11 -9
  548. package/dist/models/purposes.controller.d.ts +6 -4
  549. package/dist/models/purposes.controller.js +13 -7
  550. package/dist/models/purposes.d.ts +72 -14
  551. package/dist/models/purposes.js +115 -34
  552. package/dist/orgs/directory-sync.d.ts +14 -5
  553. package/dist/orgs/directory-sync.js +41 -17
  554. package/dist/orgs/offboarding.d.ts +12 -8
  555. package/dist/orgs/offboarding.js +54 -33
  556. package/dist/orgs/org-lock.d.ts +5 -0
  557. package/dist/orgs/org-lock.js +13 -0
  558. package/dist/orgs/org.guard.d.ts +10 -0
  559. package/dist/orgs/org.guard.js +43 -32
  560. package/dist/orgs/orgs.controller.d.ts +2 -5
  561. package/dist/orgs/orgs.controller.js +3 -6
  562. package/dist/orgs/orgs.module.js +3 -0
  563. package/dist/orgs/orgs.schemas.d.ts +8 -0
  564. package/dist/orgs/orgs.schemas.js +16 -0
  565. package/dist/orgs/orgs.service.d.ts +23 -8
  566. package/dist/orgs/orgs.service.js +38 -16
  567. package/dist/orgs/roles.d.ts +1 -1
  568. package/dist/orgs/roles.js +5 -1
  569. package/dist/orgs/settings.controller.d.ts +1 -1
  570. package/dist/orgs/settings.service.d.ts +66 -6
  571. package/dist/orgs/settings.service.js +89 -10
  572. package/dist/overrides.d.ts +16 -1
  573. package/dist/overrides.js +10 -0
  574. package/dist/platform/actor.d.ts +48 -0
  575. package/dist/platform/actor.js +100 -0
  576. package/dist/platform/agent-docs.d.ts +18 -0
  577. package/dist/platform/agent-docs.js +59 -0
  578. package/dist/platform/availability.d.ts +14 -0
  579. package/dist/platform/availability.js +43 -0
  580. package/dist/platform/errors.d.ts +28 -0
  581. package/dist/platform/errors.js +65 -0
  582. package/dist/platform/exclusions.d.ts +11 -0
  583. package/dist/platform/exclusions.js +774 -0
  584. package/dist/platform/method.d.ts +6 -0
  585. package/dist/platform/method.js +15 -0
  586. package/dist/platform/operation.d.ts +169 -0
  587. package/dist/platform/operation.js +102 -0
  588. package/dist/platform/ops/accounts.ops.d.ts +32 -0
  589. package/dist/platform/ops/accounts.ops.js +291 -0
  590. package/dist/platform/ops/admin-items.ops.d.ts +37 -0
  591. package/dist/platform/ops/admin-items.ops.js +278 -0
  592. package/dist/platform/ops/admin.ops.d.ts +38 -0
  593. package/dist/platform/ops/admin.ops.js +497 -0
  594. package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
  595. package/dist/platform/ops/agent-skills.ops.js +509 -0
  596. package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
  597. package/dist/platform/ops/agent-templates.ops.js +272 -0
  598. package/dist/platform/ops/agents.ops.d.ts +37 -0
  599. package/dist/platform/ops/agents.ops.js +730 -0
  600. package/dist/platform/ops/approvals.ops.d.ts +30 -0
  601. package/dist/platform/ops/approvals.ops.js +116 -0
  602. package/dist/platform/ops/background.ops.d.ts +14 -0
  603. package/dist/platform/ops/background.ops.js +134 -0
  604. package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
  605. package/dist/platform/ops/catalog-admin.ops.js +682 -0
  606. package/dist/platform/ops/channels.ops.d.ts +16 -0
  607. package/dist/platform/ops/channels.ops.js +195 -0
  608. package/dist/platform/ops/components.ops.d.ts +46 -0
  609. package/dist/platform/ops/components.ops.js +854 -0
  610. package/dist/platform/ops/connectors.ops.d.ts +17 -0
  611. package/dist/platform/ops/connectors.ops.js +190 -0
  612. package/dist/platform/ops/conversations.ops.d.ts +30 -0
  613. package/dist/platform/ops/conversations.ops.js +470 -0
  614. package/dist/platform/ops/devices.ops.d.ts +26 -0
  615. package/dist/platform/ops/devices.ops.js +311 -0
  616. package/dist/platform/ops/errors.d.ts +16 -0
  617. package/dist/platform/ops/errors.js +30 -0
  618. package/dist/platform/ops/evals.ops.d.ts +28 -0
  619. package/dist/platform/ops/evals.ops.js +783 -0
  620. package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
  621. package/dist/platform/ops/extensions-admin.ops.js +372 -0
  622. package/dist/platform/ops/extensions.ops.d.ts +25 -0
  623. package/dist/platform/ops/extensions.ops.js +347 -0
  624. package/dist/platform/ops/inbox.ops.d.ts +25 -0
  625. package/dist/platform/ops/inbox.ops.js +381 -0
  626. package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
  627. package/dist/platform/ops/marketplaces.ops.js +466 -0
  628. package/dist/platform/ops/models.ops.d.ts +25 -0
  629. package/dist/platform/ops/models.ops.js +232 -0
  630. package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
  631. package/dist/platform/ops/org-plugins.ops.js +388 -0
  632. package/dist/platform/ops/org-settings.ops.d.ts +18 -0
  633. package/dist/platform/ops/org-settings.ops.js +127 -0
  634. package/dist/platform/ops/orgs.ops.d.ts +28 -0
  635. package/dist/platform/ops/orgs.ops.js +298 -0
  636. package/dist/platform/ops/other-orgs.d.ts +20 -0
  637. package/dist/platform/ops/other-orgs.js +72 -0
  638. package/dist/platform/ops/paging.d.ts +14 -0
  639. package/dist/platform/ops/paging.js +20 -0
  640. package/dist/platform/ops/platform.ops.d.ts +30 -0
  641. package/dist/platform/ops/platform.ops.js +231 -0
  642. package/dist/platform/ops/plugins.ops.d.ts +35 -0
  643. package/dist/platform/ops/plugins.ops.js +476 -0
  644. package/dist/platform/ops/previewers.ops.d.ts +14 -0
  645. package/dist/platform/ops/previewers.ops.js +109 -0
  646. package/dist/platform/ops/requests.ops.d.ts +14 -0
  647. package/dist/platform/ops/requests.ops.js +191 -0
  648. package/dist/platform/ops/role.d.ts +4 -0
  649. package/dist/platform/ops/role.js +10 -0
  650. package/dist/platform/ops/setup.ops.d.ts +24 -0
  651. package/dist/platform/ops/setup.ops.js +212 -0
  652. package/dist/platform/ops/skills.ops.d.ts +17 -0
  653. package/dist/platform/ops/skills.ops.js +160 -0
  654. package/dist/platform/ops/summary.d.ts +10 -0
  655. package/dist/platform/ops/summary.js +18 -0
  656. package/dist/platform/ops/themes.ops.d.ts +14 -0
  657. package/dist/platform/ops/themes.ops.js +47 -0
  658. package/dist/platform/ops/ui.ops.d.ts +8 -0
  659. package/dist/platform/ops/ui.ops.js +41 -0
  660. package/dist/platform/ops/unavailable.d.ts +23 -0
  661. package/dist/platform/ops/unavailable.js +118 -0
  662. package/dist/platform/parity.d.ts +33 -0
  663. package/dist/platform/parity.js +272 -0
  664. package/dist/platform/platform-ops.module.d.ts +43 -0
  665. package/dist/platform/platform-ops.module.js +142 -0
  666. package/dist/platform/platform.module.d.ts +8 -0
  667. package/dist/platform/platform.module.js +25 -0
  668. package/dist/platform/registry.d.ts +30 -0
  669. package/dist/platform/registry.js +111 -0
  670. package/dist/platform/route-schemas.d.ts +18 -0
  671. package/dist/platform/route-schemas.js +85 -0
  672. package/dist/roles/gateway-role.d.ts +18 -3
  673. package/dist/roles/gateway-role.js +33 -5
  674. package/dist/roles/gateway.module.d.ts +2 -1
  675. package/dist/roles/gateway.module.js +6 -3
  676. package/dist/roles/worker-role.d.ts +6 -4
  677. package/dist/roles/worker-role.js +14 -7
  678. package/dist/roles/worker.module.d.ts +1 -1
  679. package/dist/roles/worker.module.js +21 -1
  680. package/dist/runtime/context/build.d.ts +21 -13
  681. package/dist/runtime/context/build.js +106 -29
  682. package/dist/runtime/context/claude-tools.d.ts +4 -1
  683. package/dist/runtime/context/claude-tools.js +13 -12
  684. package/dist/runtime/context/compaction.js +24 -1
  685. package/dist/runtime/context/device-paths.d.ts +40 -0
  686. package/dist/runtime/context/device-paths.js +48 -0
  687. package/dist/runtime/context/legacy-text.d.ts +22 -0
  688. package/dist/runtime/context/legacy-text.js +37 -0
  689. package/dist/runtime/context/reminders.d.ts +2 -0
  690. package/dist/runtime/context/reminders.js +2 -0
  691. package/dist/runtime/context/run-context.d.ts +65 -0
  692. package/dist/runtime/context/run-context.js +215 -0
  693. package/dist/runtime/context/skills.d.ts +29 -11
  694. package/dist/runtime/context/skills.js +46 -32
  695. package/dist/runtime/context/tool-changes.d.ts +27 -0
  696. package/dist/runtime/context/tool-changes.js +60 -0
  697. package/dist/runtime/hook-calls.d.ts +8 -1
  698. package/dist/runtime/hook-calls.js +40 -7
  699. package/dist/runtime/langgraph-loop.d.ts +3 -1
  700. package/dist/runtime/langgraph-loop.js +36 -17
  701. package/dist/runtime/loop.d.ts +35 -6
  702. package/dist/runtime/maintenance.d.ts +9 -4
  703. package/dist/runtime/maintenance.js +35 -8
  704. package/dist/runtime/model-call.d.ts +54 -11
  705. package/dist/runtime/model-call.js +105 -28
  706. package/dist/runtime/providers.d.ts +149 -29
  707. package/dist/runtime/providers.js +332 -63
  708. package/dist/runtime/run-context.service.d.ts +65 -0
  709. package/dist/runtime/run-context.service.js +236 -0
  710. package/dist/runtime/run-control.d.ts +11 -1
  711. package/dist/runtime/run-control.js +12 -0
  712. package/dist/runtime/run-drafts.d.ts +85 -0
  713. package/dist/runtime/run-drafts.js +230 -0
  714. package/dist/runtime/run-finish.d.ts +1 -1
  715. package/dist/runtime/run-jobs.d.ts +3 -5
  716. package/dist/runtime/run-jobs.js +7 -9
  717. package/dist/runtime/run-queue.d.ts +62 -5
  718. package/dist/runtime/run-queue.js +313 -40
  719. package/dist/runtime/run-worker.d.ts +19 -8
  720. package/dist/runtime/run-worker.js +105 -44
  721. package/dist/runtime/runtime.module.js +13 -3
  722. package/dist/runtime/step-log.d.ts +15 -4
  723. package/dist/runtime/step-log.js +24 -7
  724. package/dist/runtime/stream.controller.d.ts +23 -1
  725. package/dist/runtime/stream.controller.js +60 -3
  726. package/dist/runtime/stream.d.ts +4 -1
  727. package/dist/runtime/stream.js +27 -3
  728. package/dist/runtime/subagents/child.d.ts +55 -7
  729. package/dist/runtime/subagents/child.js +105 -7
  730. package/dist/runtime/subagents/definition.d.ts +31 -26
  731. package/dist/runtime/subagents/definition.js +89 -142
  732. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  733. package/dist/runtime/subagents/deliveries.js +228 -0
  734. package/dist/runtime/subagents/dispatch.d.ts +116 -27
  735. package/dist/runtime/subagents/dispatch.js +213 -142
  736. package/dist/runtime/subagents/limits.d.ts +24 -5
  737. package/dist/runtime/subagents/limits.js +40 -6
  738. package/dist/runtime/subagents/messages.d.ts +95 -0
  739. package/dist/runtime/subagents/messages.js +328 -0
  740. package/dist/runtime/subagents/org-agents.js +2 -1
  741. package/dist/runtime/subagents/preamble.d.ts +4 -4
  742. package/dist/runtime/subagents/preamble.js +9 -7
  743. package/dist/runtime/subagents/progress.d.ts +8 -6
  744. package/dist/runtime/subagents/progress.js +11 -6
  745. package/dist/runtime/subagents/render.d.ts +30 -0
  746. package/dist/runtime/subagents/render.js +53 -0
  747. package/dist/runtime/subagents/roster.d.ts +25 -8
  748. package/dist/runtime/subagents/roster.js +48 -12
  749. package/dist/runtime/subagents/skill-fork.d.ts +4 -3
  750. package/dist/runtime/subagents/skill-fork.js +9 -5
  751. package/dist/runtime/subagents/status.d.ts +14 -0
  752. package/dist/runtime/subagents/status.js +23 -0
  753. package/dist/runtime/subagents/subagents.service.d.ts +9 -6
  754. package/dist/runtime/subagents/subagents.service.js +13 -8
  755. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  756. package/dist/runtime/usage-report-jobs.js +158 -0
  757. package/dist/runtime/usage-report.d.ts +35 -39
  758. package/dist/runtime/usage-report.js +171 -97
  759. package/dist/runtime/waits.d.ts +148 -39
  760. package/dist/runtime/waits.js +426 -112
  761. package/dist/sandbox/jobs.d.ts +40 -13
  762. package/dist/sandbox/jobs.js +57 -20
  763. package/dist/sandbox/leases.d.ts +37 -54
  764. package/dist/sandbox/leases.js +71 -115
  765. package/dist/sandbox/providers.d.ts +34 -7
  766. package/dist/sandbox/providers.js +54 -9
  767. package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
  768. package/dist/sandbox/sandbox-file-reader.js +98 -0
  769. package/dist/sandbox/sandbox.module.d.ts +3 -2
  770. package/dist/sandbox/sandbox.module.js +10 -4
  771. package/dist/sandbox/sandbox.service.d.ts +345 -132
  772. package/dist/sandbox/sandbox.service.js +883 -399
  773. package/dist/sandbox/unreachable.d.ts +30 -0
  774. package/dist/sandbox/unreachable.js +108 -0
  775. package/dist/setup/kernel-checks.d.ts +91 -0
  776. package/dist/setup/kernel-checks.js +295 -0
  777. package/dist/setup/oauth-token-probe.d.ts +47 -0
  778. package/dist/setup/oauth-token-probe.js +108 -0
  779. package/dist/setup/redact-check.d.ts +18 -0
  780. package/dist/setup/redact-check.js +46 -0
  781. package/dist/setup/setup-check-registry.d.ts +86 -0
  782. package/dist/setup/setup-check-registry.js +75 -0
  783. package/dist/setup/setup-checks.controller.d.ts +28 -0
  784. package/dist/setup/setup-checks.controller.js +78 -0
  785. package/dist/setup/setup-checks.schemas.d.ts +38 -0
  786. package/dist/setup/setup-checks.schemas.js +43 -0
  787. package/dist/setup/setup-checks.service.d.ts +144 -0
  788. package/dist/setup/setup-checks.service.js +683 -0
  789. package/dist/setup/setup-guides.controller.d.ts +18 -0
  790. package/dist/setup/setup-guides.controller.js +48 -0
  791. package/dist/setup/setup-guides.schemas.d.ts +10 -0
  792. package/dist/setup/setup-guides.schemas.js +6 -0
  793. package/dist/setup/setup-guides.service.d.ts +126 -0
  794. package/dist/setup/setup-guides.service.js +315 -0
  795. package/dist/setup/setup.module.d.ts +8 -0
  796. package/dist/setup/setup.module.js +31 -0
  797. package/dist/skills/agent-skills.controller.d.ts +48 -0
  798. package/dist/skills/agent-skills.controller.js +131 -0
  799. package/dist/skills/agent-skills.service.d.ts +262 -0
  800. package/dist/skills/agent-skills.service.js +996 -0
  801. package/dist/skills/catalog.d.ts +14 -11
  802. package/dist/skills/catalog.js +32 -50
  803. package/dist/skills/changes.controller.d.ts +12 -22
  804. package/dist/skills/changes.controller.js +27 -56
  805. package/dist/skills/changes.service.d.ts +69 -115
  806. package/dist/skills/changes.service.js +249 -598
  807. package/dist/skills/conversation-catalog.d.ts +53 -0
  808. package/dist/skills/conversation-catalog.js +149 -0
  809. package/dist/skills/invocable.controller.d.ts +1 -1
  810. package/dist/skills/invocable.controller.js +2 -2
  811. package/dist/skills/invocation-keys.d.ts +1 -1
  812. package/dist/skills/invocation-keys.js +1 -1
  813. package/dist/skills/invoke.d.ts +3 -3
  814. package/dist/skills/invoke.js +21 -8
  815. package/dist/skills/package.d.ts +15 -1
  816. package/dist/skills/package.js +14 -1
  817. package/dist/skills/skills.controller.d.ts +32 -6
  818. package/dist/skills/skills.controller.js +64 -11
  819. package/dist/skills/skills.module.js +25 -3
  820. package/dist/skills/skills.schemas.d.ts +44 -0
  821. package/dist/skills/skills.schemas.js +68 -0
  822. package/dist/skills/skills.service.d.ts +123 -26
  823. package/dist/skills/skills.service.js +493 -76
  824. package/dist/skills/usable.d.ts +82 -0
  825. package/dist/skills/usable.js +388 -0
  826. package/dist/themes/render-css.d.ts +13 -0
  827. package/dist/themes/render-css.js +135 -0
  828. package/dist/themes/theme-delivery.service.d.ts +36 -0
  829. package/dist/themes/theme-delivery.service.js +116 -0
  830. package/dist/themes/theme-state.d.ts +116 -0
  831. package/dist/themes/theme-state.js +221 -0
  832. package/dist/themes/theme-usage.d.ts +61 -0
  833. package/dist/themes/theme-usage.js +98 -0
  834. package/dist/themes/themes-public.controller.d.ts +33 -0
  835. package/dist/themes/themes-public.controller.js +98 -0
  836. package/dist/themes/themes.controller.d.ts +13 -0
  837. package/dist/themes/themes.controller.js +38 -0
  838. package/dist/themes/themes.module.d.ts +3 -0
  839. package/dist/themes/themes.module.js +21 -0
  840. package/dist/themes/themes.schemas.d.ts +3 -0
  841. package/dist/themes/themes.schemas.js +2 -0
  842. package/dist/themes/themes.service.d.ts +50 -0
  843. package/dist/themes/themes.service.js +99 -0
  844. package/dist/time-zone.d.ts +5 -0
  845. package/dist/time-zone.js +19 -0
  846. package/dist/tools/admin-connectors.d.ts +69 -0
  847. package/dist/tools/admin-connectors.js +135 -0
  848. package/dist/tools/approvals.controller.js +2 -3
  849. package/dist/tools/approvals.schemas.d.ts +21 -0
  850. package/dist/tools/approvals.schemas.js +15 -0
  851. package/dist/tools/approvals.service.d.ts +26 -2
  852. package/dist/tools/approvals.service.js +44 -5
  853. package/dist/tools/builtin-names.d.ts +104 -0
  854. package/dist/tools/builtin-names.js +164 -0
  855. package/dist/tools/builtins/agent.d.ts +27 -25
  856. package/dist/tools/builtins/agent.js +66 -63
  857. package/dist/tools/builtins/ask-user.d.ts +1 -1
  858. package/dist/tools/builtins/ask-user.js +5 -4
  859. package/dist/tools/builtins/builtin-tools.d.ts +23 -4
  860. package/dist/tools/builtins/builtin-tools.js +78 -12
  861. package/dist/tools/builtins/current-time.d.ts +26 -0
  862. package/dist/tools/builtins/current-time.js +99 -0
  863. package/dist/tools/builtins/handback.d.ts +28 -0
  864. package/dist/tools/builtins/handback.js +53 -0
  865. package/dist/tools/builtins/platform.d.ts +51 -0
  866. package/dist/tools/builtins/platform.js +451 -0
  867. package/dist/tools/builtins/read-tool-output.d.ts +1 -1
  868. package/dist/tools/builtins/read-tool-output.js +2 -2
  869. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  870. package/dist/tools/builtins/sandbox/bash.js +291 -39
  871. package/dist/tools/builtins/sandbox/common.d.ts +135 -36
  872. package/dist/tools/builtins/sandbox/common.js +222 -62
  873. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  874. package/dist/tools/builtins/sandbox/deliver.js +19 -16
  875. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  876. package/dist/tools/builtins/sandbox/edit.js +64 -50
  877. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  878. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  879. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  880. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  881. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  882. package/dist/tools/builtins/sandbox/glob.js +17 -12
  883. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  884. package/dist/tools/builtins/sandbox/grep.js +153 -34
  885. package/dist/tools/builtins/sandbox/index.d.ts +9 -5
  886. package/dist/tools/builtins/sandbox/index.js +13 -5
  887. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  888. package/dist/tools/builtins/sandbox/read.js +29 -19
  889. package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
  890. package/dist/tools/builtins/sandbox/task-output.js +334 -0
  891. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  892. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  893. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  894. package/dist/tools/builtins/sandbox/write.js +51 -44
  895. package/dist/tools/builtins/send-message.d.ts +56 -0
  896. package/dist/tools/builtins/send-message.js +100 -0
  897. package/dist/tools/builtins/skill-load.d.ts +29 -18
  898. package/dist/tools/builtins/skill-load.js +125 -73
  899. package/dist/tools/builtins/tool-search.d.ts +13 -9
  900. package/dist/tools/builtins/tool-search.js +25 -14
  901. package/dist/tools/builtins/web/errors.d.ts +8 -0
  902. package/dist/tools/builtins/web/errors.js +53 -0
  903. package/dist/tools/builtins/web/extract.d.ts +62 -0
  904. package/dist/tools/builtins/web/extract.js +271 -0
  905. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  906. package/dist/tools/builtins/web/fetch.js +175 -0
  907. package/dist/tools/builtins/web/index.d.ts +13 -0
  908. package/dist/tools/builtins/web/index.js +12 -0
  909. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  910. package/dist/tools/builtins/web/page-cache.js +77 -0
  911. package/dist/tools/builtins/web/search.d.ts +25 -0
  912. package/dist/tools/builtins/web/search.js +210 -0
  913. package/dist/tools/builtins/web/url.d.ts +17 -0
  914. package/dist/tools/builtins/web/url.js +43 -0
  915. package/dist/tools/connector-account-policies.d.ts +51 -0
  916. package/dist/tools/connector-account-policies.js +165 -0
  917. package/dist/tools/connectors.controller.d.ts +74 -9
  918. package/dist/tools/connectors.controller.js +133 -16
  919. package/dist/tools/connectors.schemas.d.ts +27 -0
  920. package/dist/tools/connectors.schemas.js +34 -0
  921. package/dist/tools/connectors.service.d.ts +101 -8
  922. package/dist/tools/connectors.service.js +266 -28
  923. package/dist/tools/credentials.d.ts +23 -0
  924. package/dist/tools/credentials.js +90 -1
  925. package/dist/tools/display-names.d.ts +9 -0
  926. package/dist/tools/display-names.js +24 -0
  927. package/dist/tools/drift.js +5 -5
  928. package/dist/tools/elicitation.js +1 -1
  929. package/dist/tools/extension-tools.controller.d.ts +14 -0
  930. package/dist/tools/extension-tools.controller.js +37 -0
  931. package/dist/tools/info.d.ts +61 -4
  932. package/dist/tools/info.js +119 -33
  933. package/dist/tools/legacy-data.d.ts +34 -0
  934. package/dist/tools/legacy-data.js +76 -0
  935. package/dist/tools/legacy-keys.d.ts +51 -0
  936. package/dist/tools/legacy-keys.js +114 -0
  937. package/dist/tools/naming.d.ts +1 -5
  938. package/dist/tools/naming.js +1 -7
  939. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  940. package/dist/tools/oauth/flow-paths.js +1 -1
  941. package/dist/tools/oauth/flow.js +1 -1
  942. package/dist/tools/oauth/tokens.d.ts +54 -7
  943. package/dist/tools/oauth/tokens.js +87 -17
  944. package/dist/tools/org-tool-switches.d.ts +89 -0
  945. package/dist/tools/org-tool-switches.js +201 -0
  946. package/dist/tools/outputs.js +1 -1
  947. package/dist/tools/pipeline.d.ts +67 -47
  948. package/dist/tools/pipeline.js +319 -380
  949. package/dist/tools/policy.d.ts +30 -23
  950. package/dist/tools/policy.js +142 -64
  951. package/dist/tools/questions.controller.d.ts +1 -1
  952. package/dist/tools/questions.controller.js +1 -1
  953. package/dist/tools/questions.service.d.ts +23 -2
  954. package/dist/tools/questions.service.js +104 -2
  955. package/dist/tools/registry.d.ts +189 -68
  956. package/dist/tools/registry.js +318 -236
  957. package/dist/tools/resources.d.ts +1 -1
  958. package/dist/tools/resources.js +1 -1
  959. package/dist/tools/tools.module.js +31 -3
  960. package/dist/tools/validate.js +1 -1
  961. package/dist/ui/admin-ui.controller.d.ts +56 -0
  962. package/dist/ui/admin-ui.controller.js +192 -0
  963. package/dist/ui/arrangement.d.ts +65 -0
  964. package/dist/ui/arrangement.js +171 -0
  965. package/dist/ui/embed-token.d.ts +2 -2
  966. package/dist/ui/embed-token.js +30 -5
  967. package/dist/ui/registry.d.ts +42 -17
  968. package/dist/ui/registry.js +46 -14
  969. package/dist/ui/slots.controller.d.ts +11 -0
  970. package/dist/ui/slots.controller.js +25 -0
  971. package/dist/ui/ui-stream.d.ts +20 -3
  972. package/dist/ui/ui-stream.js +25 -7
  973. package/dist/ui/ui.schemas.d.ts +70 -0
  974. package/dist/ui/ui.schemas.js +65 -0
  975. package/dist/ui/views.controller.d.ts +35 -49
  976. package/dist/ui/views.controller.js +48 -70
  977. package/dist/ui/views.d.ts +112 -18
  978. package/dist/ui/views.js +254 -47
  979. package/package.json +6 -3
  980. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  981. package/src/migrations/0064_account_last_org.sql +7 -0
  982. package/src/migrations/0065_conversation_archive.sql +8 -0
  983. package/src/migrations/0066_extension_display_name.sql +4 -0
  984. package/src/migrations/0067_agent_profiles.sql +20 -0
  985. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  986. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  987. package/src/migrations/0070_background_tasks.sql +37 -0
  988. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  989. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  990. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  991. package/src/migrations/0074_subagent_tree.sql +50 -0
  992. package/src/migrations/0075_plugin_scope.sql +61 -0
  993. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  994. package/src/migrations/0077_scope_requests.sql +52 -0
  995. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  996. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  997. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  998. package/src/migrations/0081_platform_components.sql +129 -0
  999. package/src/migrations/0082_platform_migration.sql +33 -0
  1000. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  1001. package/src/migrations/0084_org_owned_items.sql +85 -0
  1002. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  1003. package/src/migrations/0086_org_layering.sql +30 -0
  1004. package/src/migrations/0087_approval_summary.sql +6 -0
  1005. package/src/migrations/0088_environments.sql +80 -0
  1006. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  1007. package/src/migrations/0090_initial_passwords.sql +27 -0
  1008. package/src/migrations/0091_account_time_zone.sql +4 -0
  1009. package/src/migrations/0092_tools_default_on.sql +27 -0
  1010. package/src/migrations/0093_connected_environments.sql +37 -0
  1011. package/src/migrations/0094_environment_paths_idx.sql +7 -0
  1012. package/src/migrations/0095_environment_files_resets.sql +5 -0
  1013. package/src/migrations/0096_environment_demoted_default.sql +18 -0
  1014. package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
  1015. package/src/migrations/0098_single_provider_running_first.sql +41 -0
  1016. package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
  1017. package/src/migrations/0100_catalog_files.sql +13 -0
  1018. package/src/migrations/0101_marketplace_icons.sql +32 -0
  1019. package/src/migrations/0102_themes.sql +64 -0
  1020. package/src/migrations/0103_ui_theme_setting.sql +7 -0
  1021. package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
  1022. package/src/migrations/0105_devices_rename.sql +136 -0
  1023. package/src/migrations/0106_setup_guides_v2.sql +10 -0
  1024. package/src/migrations/0107_extension_client_builds.sql +50 -0
  1025. package/src/migrations/0108_question_skipped.sql +6 -0
  1026. package/src/migrations/0109_audit_platform_idx.sql +5 -0
  1027. package/src/migrations/0110_usage_time_idx.sql +8 -0
  1028. package/src/migrations/0111_agent_skill_sharing.sql +22 -0
  1029. package/src/migrations/0112_skill_share_requests.sql +4 -0
  1030. package/dist/catalog/upgrade-targets.d.ts +0 -56
  1031. package/dist/catalog/upgrade-targets.js +0 -90
  1032. package/dist/conversations/sandbox-status.d.ts +0 -24
  1033. package/dist/conversations/sandbox-status.js +0 -52
  1034. package/dist/extensions/org-config.controller.d.ts +0 -24
  1035. package/dist/extensions/org-config.controller.js +0 -62
  1036. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  1037. package/dist/tools/builtins/sandbox/names.js +0 -20
  1038. package/dist/tools/builtins/skill-write.d.ts +0 -59
  1039. package/dist/tools/builtins/skill-write.js +0 -244
@@ -0,0 +1,1236 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { createHash } from "node:crypto";
11
+ import { getQueueToken } from "@nestjs/bullmq";
12
+ import { Inject, Injectable } from "@nestjs/common";
13
+ import { sql } from "kysely";
14
+ import { ApiError } from "../errors.js";
15
+ import { ExtensionAdminOps } from "../extensions/admin-ops.js";
16
+ import { ExtensionAdmin } from "../extensions/admin-view.js";
17
+ import { ExtensionLifecycle } from "../extensions/lifecycle.js";
18
+ import { PluginInstallLock } from "../extensions/locks.js";
19
+ import { audit } from "../identity/audit.js";
20
+ import { SuperAdminLock } from "../identity/super-admin.js";
21
+ import { addOrgNotice, itemDisplayName, notifyItemShared } from "../inbox/org-notices.js";
22
+ import { afterCommit } from "../infra/database/after-commit.js";
23
+ import { KernelDb } from "../infra/database/kernel-db.js";
24
+ import { TransactionHost } from "../infra/database/transaction-host.js";
25
+ import { Transactional } from "../infra/database/transactional.decorator.js";
26
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
27
+ import { OrgLock } from "../orgs/org-lock.js";
28
+ import { MAINTENANCE_QUEUE_NAME } from "../runtime/maintenance-queue.js";
29
+ import { assertNotPlatformDefault, themesPreview, } from "../themes/theme-usage.js";
30
+ import { CatalogService } from "./catalog.service.js";
31
+ import { assertOrgsExist, markVersionApplied } from "./catalog-items.js";
32
+ import { nameConflictError } from "./component-scope.service.js";
33
+ import { agentsUsing, COMPONENT_KINDS, componentOffered, componentOn, listedIn, loadComponents, loadScopeState, pluginFactsOf, skillNameClashes, switchOf, themeIdClashes, } from "./component-state.js";
34
+ import { ownedPluginCleanupJob } from "./job-ids.js";
35
+ import { assertNotAwaiting, assertOwnerListed, assertShareable, assertShareableTarget, itemRemovedError, newlySharedWith, ownerOf, ownersOf, PLATFORM_OWNER, packageOwner, pendingDigest, releaseExtensionClaim, } from "./ownership.js";
36
+ import { PluginImport } from "./plugin-import.js";
37
+ import { PluginInstaller } from "./plugin-install.js";
38
+ import { PlatformPluginUpdater } from "./plugin-upgrade.js";
39
+ import { cancelPendingRequests } from "./request-rules.js";
40
+ import { wantedOn } from "./scope.js";
41
+ import { addScopeOrg } from "./scope-orgs.js";
42
+ import { PluginScopeSync, reconcileWithin } from "./scope-sync.js";
43
+ import { narrowComponentOnUnshare, narrowItemOnUnshare } from "./unshare.js";
44
+ /** How long the super admin's confirmation waits for this replica to load the extension. */
45
+ const CONFIRM_RECONCILE_WAIT_MS = 5_000;
46
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
47
+ const LIVE = ["installing", "installed", "upgrading"];
48
+ const notFound = () => new ApiError("catalog.item_not_found", "Catalog item not found");
49
+ const notPending = (name) => new ApiError("extension.not_pending", `Plugin ${name} has no upload waiting for confirmation`);
50
+ const pendingStale = (name) => new ApiError("extension.approval_stale", `The pending upload of ${name} changed since it was reviewed; review it again`);
51
+ const builtinError = () => new ApiError("plugin.builtin", "This plugin is built in: it is on in every organization and its scope cannot be changed or disabled");
52
+ const staleError = () => new ApiError("plugin.scope_stale", "What this change affects has changed since the preview; preview it again and confirm the new hash");
53
+ /** The hash of a preview: sha256 over its sorted JSON, the target included. */
54
+ function scopeHash(target, p) {
55
+ return createHash("sha256")
56
+ .update(JSON.stringify({
57
+ target: { ...target, orgs: [...target.orgs].sort() },
58
+ affected: [...p.affected]
59
+ .sort((a, b) => a.orgId.localeCompare(b.orgId))
60
+ .map((a) => ({
61
+ ...a,
62
+ agents: [...a.agents].sort((x, y) => x.id.localeCompare(y.id)),
63
+ })),
64
+ needsConfig: [...p.needsConfig].sort(),
65
+ replaced: [...p.replaced].sort((a, b) => a.id.localeCompare(b.id)),
66
+ conflicts: [...p.conflicts].sort((a, b) => a.orgId.localeCompare(b.orgId)),
67
+ // only when present: a preview without themes keeps the hash it had before themes
68
+ ...(p.themes !== undefined && { themes: p.themes }),
69
+ }))
70
+ .digest("hex");
71
+ }
72
+ /**
73
+ * The refusal of a preview's conflicts: skill ones as `plugin.skill_conflict`, theme ones as
74
+ * `theme.id_taken`; both at once as `plugin.skill_conflict` listing every clash (the skill details
75
+ * first, then the theme ones `{ theme, orgId, themes, plugins }`), so none waits for a retry.
76
+ */
77
+ export function conflictsError(conflicts) {
78
+ const skills = conflicts.filter((c) => c.kind !== "theme");
79
+ const themes = conflicts.filter((c) => c.kind === "theme").map(({ kind: _k, ...c }) => c);
80
+ if (themes.length === 0)
81
+ return nameConflictError(skills);
82
+ const t = nameConflictError(themes, "theme");
83
+ if (skills.length === 0)
84
+ return t;
85
+ const s = nameConflictError(skills);
86
+ return new ApiError(s.code, `${s.message}\n${t.message}`, [
87
+ ...(s.details ?? []),
88
+ ...(t.details ?? []),
89
+ ]);
90
+ }
91
+ /**
92
+ * The super admin's plugin scope and deployment-level disable (plugin and component management
93
+ * spec §4.1, §5 rules 2-4 and 8), and the import confirm that enqueues the scope sync of the item it
94
+ * wrote. A change is previewed, then confirmed with the preview's `scopeHash`, recomputed under the
95
+ * item row lock (a difference -> 409 `plugin.scope_stale`); it bumps `scope_version`, audits
96
+ * `catalog.scope_changed` and, after the commit, enqueues the item's scope sync, which installs or
97
+ * uninstalls in every org. Disabling keeps the scope, its org list and the org switches, so
98
+ * re-enabling (no hash needed) reinstalls where it was on. Builtin items -> 409 `plugin.builtin`.
99
+ * Stateless, shared by every replica.
100
+ */
101
+ let CatalogScopeService = class CatalogScopeService {
102
+ kdb;
103
+ adminLock;
104
+ catalog;
105
+ pluginImport;
106
+ installer;
107
+ extensions;
108
+ ops;
109
+ sync;
110
+ updater;
111
+ orgLock;
112
+ installLock;
113
+ lifecycle;
114
+ maintenance;
115
+ log;
116
+ txHost;
117
+ constructor(kdb, adminLock, catalog, pluginImport, installer, extensions, ops, sync, updater,
118
+ /** The owner org's lock: an org admin withdrawing its pending upload (ruling P3-10). */
119
+ orgLock,
120
+ /** The per-name install lock a reject / withdraw releases the name claim under (M1). */
121
+ installLock,
122
+ /** This replica's reconcile once a confirmed extension is enabled (before the scope sync). */
123
+ lifecycle,
124
+ /** The removed org plugin's cleanup job, backing the take-out of P3-21 (pre-flight F9). */
125
+ maintenance, log, txHost) {
126
+ this.kdb = kdb;
127
+ this.adminLock = adminLock;
128
+ this.catalog = catalog;
129
+ this.pluginImport = pluginImport;
130
+ this.installer = installer;
131
+ this.extensions = extensions;
132
+ this.ops = ops;
133
+ this.sync = sync;
134
+ this.updater = updater;
135
+ this.orgLock = orgLock;
136
+ this.installLock = installLock;
137
+ this.lifecycle = lifecycle;
138
+ this.maintenance = maintenance;
139
+ this.log = log;
140
+ this.txHost = txHost;
141
+ }
142
+ get db() {
143
+ return this.kdb.db;
144
+ }
145
+ /**
146
+ * Confirms a staged import ({@link PluginImport.confirm}: installs and enables the extension,
147
+ * writes the new item's scope), then enqueues the item's scope sync when its scope turns it on
148
+ * by itself (`all` or `named`; an `optional` item is on only where an org admin switches it on).
149
+ */
150
+ async confirmImport(actor, stagingId, input, opts = {}) {
151
+ const r = await this.pluginImport.confirm(actor, stagingId, input, opts);
152
+ if (r.item.scope !== "optional")
153
+ await this.enqueue(r.item.id);
154
+ return r;
155
+ }
156
+ /**
157
+ * Confirms the permissions of an item's extension (the admin's 待确认): approves the current
158
+ * permission set with snapshot source `web` (`permissionsHash` is the item view's, the extension
159
+ * review digest; a changed set -> 409 `extension.approval_stale`); an extension that was never
160
+ * deployed (no install record) is installed and enabled first (the package is in the package
161
+ * store from the import). Nothing waiting (a covered snapshot a person approved already, an item
162
+ * without an extension) -> 409 `extension.not_pending`. Enqueues the item's scope sync after.
163
+ *
164
+ * An org-owned item is confirmed only while an upload of it waits (ruling P3-10, see
165
+ * {@link confirmOrgUpload}); otherwise -> 409 `extension.not_pending`.
166
+ */
167
+ async confirmPermissions(actor, itemId, permissionsHash, opts = {}) {
168
+ if (!UUID_RE.test(itemId))
169
+ throw notFound();
170
+ const item = await this.db
171
+ .selectFrom("catalog_items")
172
+ .select([
173
+ "id",
174
+ "name",
175
+ "latest_version",
176
+ "builtin",
177
+ "owner_org_id",
178
+ "awaiting_confirmation",
179
+ "pending_version",
180
+ ])
181
+ .where("id", "=", itemId)
182
+ .where("deleted_at", "is", null)
183
+ .executeTakeFirst();
184
+ if (!item)
185
+ throw notFound();
186
+ if (item.owner_org_id !== null) {
187
+ return this.confirmOrgUpload(actor, { id: item.id, name: item.name }, permissionsHash, opts);
188
+ }
189
+ const version = await this.db
190
+ .selectFrom("catalog_item_versions")
191
+ .select("extension_sha256")
192
+ .where("item_id", "=", itemId)
193
+ .where("version", "=", item.latest_version)
194
+ .executeTakeFirst();
195
+ const sha256 = version?.extension_sha256 ?? null;
196
+ if (sha256 === null) {
197
+ throw new ApiError("extension.not_pending", `Plugin ${item.name} has no extension to confirm`);
198
+ }
199
+ const stale = () => new ApiError("extension.approval_stale", `The permissions of ${item.name} changed since they were reviewed; review them again`);
200
+ const installed = await this.extensions
201
+ .get(item.name, { allowUnreadable: true })
202
+ .then(() => true)
203
+ .catch((e) => {
204
+ if (e instanceof ApiError && e.code === "extension.not_found")
205
+ return false;
206
+ throw e;
207
+ });
208
+ if (!installed) {
209
+ if ((await this.extensions.packageReviewHash(sha256)) !== permissionsHash)
210
+ throw stale();
211
+ await this.ops.install(item.name, sha256, actor, opts.actorTokenId, {
212
+ catalogItemId: itemId,
213
+ });
214
+ }
215
+ const current = await this.extensions.get(item.name);
216
+ // A disabled install is what an earlier confirm that stopped before the enable left behind
217
+ const disabled = current.desired?.state === "disabled";
218
+ try {
219
+ await this.extensions.approve(actor, item.name, { sha256: current.sha256, reviewHash: permissionsHash }, { ...opts, confirmBootstrap: item.builtin });
220
+ }
221
+ catch (e) {
222
+ // Already approved but not enabled yet: carry on to the enable; else nothing to confirm
223
+ if (!disabled || !(e instanceof ApiError && e.code === "extension.not_pending"))
224
+ throw e;
225
+ }
226
+ // An occupied single-provider point leaves it installed disabled (the admin view says why)
227
+ if (disabled)
228
+ await this.ops.enableUnlessOccupied(item.name, actor, opts.actorTokenId);
229
+ await this.enqueue(itemId);
230
+ return (await this.catalog.get(itemId)).item;
231
+ }
232
+ /**
233
+ * The super admin's confirmation of an org upload's pending version (rulings P3-10, P3-11,
234
+ * P3-21): `permissionsHash` must be the digest of that version's package ({@link pendingDigest};
235
+ * another -> 409 `extension.approval_stale`, also for a version a later upload replaced); no
236
+ * pending version (withdrawn, rejected, replaced by one without an extension) -> 409
237
+ * `extension.not_pending`.
238
+ *
239
+ * A first version: its extension installed, its permissions approved, enabled, then (one
240
+ * transaction) the item stops waiting and the owner is told (`upload_confirmed`); after the
241
+ * commit its platform components are written and the scope sync enqueued. Each step re-reads
242
+ * the item under its row lock: removed meanwhile -> 409 `catalog.item_removed`, the pending
243
+ * version replaced -> `extension.approval_stale`; the extension this confirmation installed is
244
+ * then taken out again. A new version: the platform update to it
245
+ * ({@link PlatformPluginUpdater.updateToPending}, which installs or upgrades the extension,
246
+ * clears the pending state, tells the owner and the orgs using a shared plugin), then its
247
+ * permissions approved.
248
+ */
249
+ async confirmOrgUpload(actor, item, permissionsHash, opts) {
250
+ // Every step under the item's update lock (ruling P3-35): a second confirmation waits its
251
+ // turn out as 409 plugin.install_in_progress and never undoes the first one's install
252
+ const first = await this.updater.withItemLock(item.id, () => this.confirmLocked(actor, item.id, item.name, permissionsHash, opts));
253
+ if (first !== null) {
254
+ // Loaded here before the scope sync plans its install, waited for at most a few seconds
255
+ // (the enable does not wait for the reconcile); a sync on a replica that has not loaded it
256
+ // yet defers and retries (ruling P3-38)
257
+ await reconcileWithin(this.lifecycle, `confirmed:${item.name}`, CONFIRM_RECONCILE_WAIT_MS, this.log);
258
+ await this.pluginImport.writePlatformComponents(item.id, first);
259
+ await this.enqueue(item.id);
260
+ }
261
+ return (await this.catalog.get(item.id)).item;
262
+ }
263
+ /**
264
+ * {@link confirmOrgUpload} under the item lock; returns the confirmed first version (its
265
+ * platform components and scope sync follow after), null for a new version.
266
+ */
267
+ async confirmLocked(actor, itemId, name, permissionsHash, opts) {
268
+ // Read again under the lock (the caller's read was outside it)
269
+ const item = await this.db
270
+ .selectFrom("catalog_items")
271
+ .select([
272
+ "deleted_at",
273
+ "owner_org_id",
274
+ "awaiting_confirmation",
275
+ "pending_version",
276
+ "pending_by",
277
+ "pending_at",
278
+ "package_name",
279
+ "platform_synced_version",
280
+ ])
281
+ .where("id", "=", itemId)
282
+ .executeTakeFirst();
283
+ if (!item || item.deleted_at !== null || item.owner_org_id === null) {
284
+ throw itemRemovedError(name);
285
+ }
286
+ const version = item.pending_version;
287
+ if (version === null)
288
+ throw notPending(name);
289
+ const row = await this.db
290
+ .selectFrom("catalog_item_versions")
291
+ .select("extension_sha256")
292
+ .where("item_id", "=", itemId)
293
+ .where("version", "=", version)
294
+ .executeTakeFirst();
295
+ const sha = row?.extension_sha256 ?? null;
296
+ if (sha === null)
297
+ throw notPending(name);
298
+ const reviewHash = await this.extensions.packageReviewHash(sha);
299
+ if (reviewHash === null || pendingDigest(sha, reviewHash) !== permissionsHash) {
300
+ throw pendingStale(name);
301
+ }
302
+ // An install of this name that is not this item's (left by an earlier item, of another
303
+ // package or of the same package name under another owner): the org's code never inherits its
304
+ // deployment config, secrets or data (rulings P3-36, P3-51). This item's own install, or one
305
+ // its owner's removed item of the same package left, is upgraded in place.
306
+ const install = await this.db
307
+ .selectFrom("extension_installs as x")
308
+ .innerJoin("extension_packages as p", "p.sha256", "x.sha256")
309
+ .leftJoin("catalog_items as ci", "ci.id", "x.catalog_item_id")
310
+ .select(["x.sha256", "x.catalog_item_id", "p.package_name", "ci.owner_org_id"])
311
+ .where("x.name", "=", name)
312
+ .executeTakeFirst();
313
+ const own = install === undefined ||
314
+ (install.package_name === item.package_name &&
315
+ (install.catalog_item_id === itemId ||
316
+ (install.catalog_item_id !== null && install.owner_org_id === item.owner_org_id)));
317
+ if (install !== undefined && !own) {
318
+ // who holds it: the install's own item's owner, else the package's (none: the platform)
319
+ const holderOrg = install.catalog_item_id === null ? null : install.owner_org_id;
320
+ const holder = install.catalog_item_id !== null
321
+ ? ownerOf(holderOrg, await ownersOf(this.db, holderOrg === null ? [] : [holderOrg]))
322
+ : install.package_name !== item.package_name
323
+ ? await packageOwner(this.db, install.package_name, name)
324
+ : PLATFORM_OWNER;
325
+ throw new ApiError("extension.name_conflict", install.package_name !== item.package_name
326
+ ? `Extension ${name} is installed from package ${install.package_name}; the upload's package ${item.package_name ?? "(none)"} cannot take it over`
327
+ : `Extension ${name} is installed for another plugin of package ${install.package_name}; this upload cannot take it over`, [{ owner: holder }]);
328
+ }
329
+ if (!item.awaiting_confirmation) {
330
+ const pending = {
331
+ version,
332
+ by: item.pending_by,
333
+ at: item.pending_at,
334
+ };
335
+ // A new version: applied (unless an earlier confirmation applied it and stopped before the
336
+ // approval), then its permissions approved; an approval that fails puts the pending state
337
+ // back, so the version shows in 待确认 again (ruling P3-37)
338
+ try {
339
+ if (item.platform_synced_version !== version) {
340
+ await this.updater.updateToPendingLocked(actor, itemId, version, opts);
341
+ }
342
+ else {
343
+ await this.clearPending(itemId, version);
344
+ }
345
+ try {
346
+ await this.approvePackage(actor, name, sha, reviewHash, opts);
347
+ }
348
+ catch (e) {
349
+ await this.restorePending(itemId, pending);
350
+ throw e;
351
+ }
352
+ }
353
+ catch (e) {
354
+ throw await this.removalOr(e, itemId, name);
355
+ }
356
+ return null;
357
+ }
358
+ await this.stillPending(itemId, name, version);
359
+ let installedHere = false;
360
+ try {
361
+ if (install?.sha256 !== sha) {
362
+ await this.ops.install(name, sha, actor, opts.actorTokenId, {
363
+ catalogItemId: itemId,
364
+ liveItem: true,
365
+ });
366
+ installedHere = install === undefined;
367
+ }
368
+ await this.stillPending(itemId, name, version);
369
+ await this.approvePackage(actor, name, sha, reviewHash, opts);
370
+ await this.stillPending(itemId, name, version);
371
+ // An occupied single-provider point leaves it installed disabled (the admin view says why)
372
+ await this.ops.enableUnlessOccupied(name, actor, opts.actorTokenId);
373
+ await this.finishFirstVersion(actor, itemId, version, opts);
374
+ }
375
+ catch (e) {
376
+ // Taken out only when this confirmation did not win: the item gone or still waiting
377
+ if (installedHere && !(await this.confirmed(itemId))) {
378
+ await this.takeOut(itemId, name, actor, opts);
379
+ }
380
+ throw await this.removalOr(e, itemId, name);
381
+ }
382
+ return version;
383
+ }
384
+ /** The item is live and its first version confirmed (no longer awaiting). */
385
+ async confirmed(itemId) {
386
+ const row = await this.db
387
+ .selectFrom("catalog_items")
388
+ .select(["deleted_at", "awaiting_confirmation"])
389
+ .where("id", "=", itemId)
390
+ .executeTakeFirst();
391
+ return row !== undefined && row.deleted_at === null && !row.awaiting_confirmation;
392
+ }
393
+ /**
394
+ * The error a failed confirmation step answers with: 409 `catalog.item_removed` when the item is
395
+ * gone or soft-deleted by now, whichever step failed (the removal's cleanup job may take the
396
+ * extension out under the confirmation, so a step answers `extension.not_found`), the original
397
+ * error logged; else (or when the item cannot be read) the original error.
398
+ */
399
+ async removalOr(e, itemId, name) {
400
+ if (e instanceof ApiError && e.code === "catalog.item_removed")
401
+ return e;
402
+ let removed;
403
+ try {
404
+ const row = await this.db
405
+ .selectFrom("catalog_items")
406
+ .select("deleted_at")
407
+ .where("id", "=", itemId)
408
+ .executeTakeFirst();
409
+ removed = row === undefined || row.deleted_at !== null;
410
+ }
411
+ catch (err) {
412
+ this.log.warn("cannot read the item of a failed confirmation", { itemId, err });
413
+ return e;
414
+ }
415
+ if (!removed)
416
+ return e;
417
+ if (e instanceof ApiError) {
418
+ this.log.info("a confirmation step failed after its item was removed", {
419
+ itemId,
420
+ name,
421
+ code: e.code,
422
+ });
423
+ }
424
+ else {
425
+ this.log.warn("a confirmation step failed after its item was removed", {
426
+ itemId,
427
+ name,
428
+ err: e,
429
+ });
430
+ }
431
+ return itemRemovedError(name);
432
+ }
433
+ /** Clears the pending state of a version an earlier confirmation applied already. */
434
+ async clearPending(itemId, version) {
435
+ await this.db
436
+ .updateTable("catalog_items")
437
+ .set({ pending_version: null, pending_by: null, pending_at: null })
438
+ .where("id", "=", itemId)
439
+ .where("pending_version", "=", version)
440
+ .execute();
441
+ }
442
+ /**
443
+ * Puts a confirmed new version's pending state back after its approval failed (ruling P3-37):
444
+ * the version applied, its permissions still waiting, 待确认 shows it again. Not when another
445
+ * upload is pending meanwhile.
446
+ */
447
+ async restorePending(itemId, p) {
448
+ await this.db
449
+ .updateTable("catalog_items")
450
+ .set({ pending_version: p.version, pending_by: p.by, pending_at: p.at })
451
+ .where("id", "=", itemId)
452
+ .where("deleted_at", "is", null)
453
+ .where("pending_version", "is", null)
454
+ .execute();
455
+ }
456
+ /** Approves the permissions of the installed package `sha` (already covered: nothing to do). */
457
+ async approvePackage(actor, name, sha, reviewHash, opts) {
458
+ try {
459
+ await this.extensions.approve(actor, name, { sha256: sha, reviewHash }, opts);
460
+ }
461
+ catch (e) {
462
+ if (!(e instanceof ApiError && e.code === "extension.not_pending"))
463
+ throw e;
464
+ }
465
+ }
466
+ /**
467
+ * An extension a confirmation installed whose item was removed or replaced meanwhile is taken
468
+ * out again (disabled, uninstalled; P3-21), and the name claim released when the item is gone
469
+ * (ruling P3-37). Inline and best effort (a failure is logged); a removed item's cleanup job
470
+ * (`owned-plugin-cleanup-<itemId>`, idempotent) is enqueued as well, so a failed take-out is
471
+ * retried (pre-flight F9).
472
+ */
473
+ async takeOut(itemId, name, actor, opts) {
474
+ try {
475
+ await this.ops.disable(name, actor, opts.actorTokenId);
476
+ await this.ops.uninstall(name, actor, opts.actorTokenId);
477
+ await this.releaseIfGone(itemId, name);
478
+ }
479
+ catch (err) {
480
+ this.log.error("taking out the extension of a removed org upload failed", { name, err });
481
+ }
482
+ const gone = await this.db
483
+ .selectFrom("catalog_items")
484
+ .select("id")
485
+ .where("id", "=", itemId)
486
+ .where("deleted_at", "is not", null)
487
+ .executeTakeFirst();
488
+ if (gone === undefined)
489
+ return;
490
+ const job = ownedPluginCleanupJob(itemId);
491
+ try {
492
+ await this.maintenance.add(job.name, job.data, job.opts);
493
+ }
494
+ catch (err) {
495
+ this.log.warn("enqueueing the owned plugin cleanup failed", { itemId, err });
496
+ }
497
+ }
498
+ /** Releases the name claim of a removed item (nothing installed under it any more). */
499
+ async releaseIfGone(itemId, name) {
500
+ const row = await this.db
501
+ .selectFrom("catalog_items")
502
+ .select(["deleted_at", "package_name"])
503
+ .where("id", "=", itemId)
504
+ .forUpdate()
505
+ .executeTakeFirst();
506
+ if (row === undefined || row.deleted_at !== null) {
507
+ await releaseExtensionClaim(this.db, name, row?.package_name ?? null);
508
+ }
509
+ }
510
+ /** The item is still live and pending with `version` (row lock), else 409 (P3-21). */
511
+ async stillPending(itemId, name, version) {
512
+ await this.pendingRow(itemId, name, version);
513
+ }
514
+ /** {@link stillPending} in the caller's transaction; returns the owner org. */
515
+ async pendingRow(itemId, name, version) {
516
+ const row = await this.db
517
+ .selectFrom("catalog_items")
518
+ .select(["deleted_at", "pending_version", "owner_org_id"])
519
+ .where("id", "=", itemId)
520
+ .forUpdate()
521
+ .executeTakeFirst();
522
+ if (!row || row.deleted_at !== null || row.owner_org_id === null) {
523
+ throw itemRemovedError(name);
524
+ }
525
+ if (row.pending_version !== version)
526
+ throw pendingStale(name);
527
+ return row.owner_org_id;
528
+ }
529
+ /** A confirmed first version: the item stops waiting, the owner is told (`upload_confirmed`). */
530
+ async finishFirstVersion(actor, itemId, version, opts) {
531
+ await this.adminLock.lockAndAuthorize(actor);
532
+ const named = await this.db
533
+ .selectFrom("catalog_items")
534
+ .select("name")
535
+ .where("id", "=", itemId)
536
+ .executeTakeFirstOrThrow();
537
+ const owner = await this.pendingRow(itemId, named.name, version);
538
+ await this.db
539
+ .updateTable("catalog_items")
540
+ .set({
541
+ awaiting_confirmation: false,
542
+ pending_version: null,
543
+ pending_by: null,
544
+ pending_at: null,
545
+ // the confirmed version is the item's latest (ruling P3-34)
546
+ latest_version: version,
547
+ updated_at: sql `now()`,
548
+ })
549
+ .where("id", "=", itemId)
550
+ .execute();
551
+ await markVersionApplied(this.db, itemId, version);
552
+ await addOrgNotice(this.db, owner, "upload_confirmed", {
553
+ itemId,
554
+ name: named.name,
555
+ displayName: await itemDisplayName(this.db, itemId),
556
+ version,
557
+ });
558
+ await audit(this.db, {
559
+ actorAccountId: actor,
560
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
561
+ action: "catalog.upload_confirmed",
562
+ target: itemId,
563
+ detail: { name: named.name, version, ownerOrgId: owner },
564
+ });
565
+ }
566
+ /**
567
+ * The super admin rejects an org upload's pending version (ruling P3-10, `reason` shown to the
568
+ * owner in `upload_rejected`): a first version is removed (soft delete, its requests
569
+ * cancelled), a new version's pending state cleared (the version stays imported, never applied);
570
+ * the extension name claim is released when nothing is installed under it (pre-flight F10).
571
+ * Nothing pending, or a platform-owned item (pre-flight F11) -> 409 `extension.not_pending`.
572
+ */
573
+ async reject(actor, itemId, reason, opts = {}) {
574
+ if (!UUID_RE.test(itemId))
575
+ throw notFound();
576
+ await this.dropPending(actor, itemId, { kind: "reject", reason }, opts);
577
+ }
578
+ /**
579
+ * The owner org withdraws its pending upload (ruling P3-10): as {@link reject}, without a
580
+ * notice. Another org's or a platform item -> 404; nothing pending -> 409
581
+ * `extension.not_pending`.
582
+ */
583
+ async withdraw(orgId, actor, itemId, opts = {}) {
584
+ if (!UUID_RE.test(itemId))
585
+ throw notFound();
586
+ await this.dropPending(actor, itemId, { kind: "withdraw", orgId }, opts);
587
+ }
588
+ async dropPending(actor, itemId, how, opts) {
589
+ if (how.kind === "reject")
590
+ await this.adminLock.lockAndAuthorize(actor);
591
+ else
592
+ await this.orgLock.lockAndAuthorize(how.orgId, actor, "catalog.upload");
593
+ const t = this.db;
594
+ const item = await t
595
+ .selectFrom("catalog_items")
596
+ .select([
597
+ "id",
598
+ "name",
599
+ "owner_org_id",
600
+ "awaiting_confirmation",
601
+ "pending_version",
602
+ "package_name",
603
+ ])
604
+ .where("id", "=", itemId)
605
+ .where("deleted_at", "is", null)
606
+ .forUpdate()
607
+ .executeTakeFirst();
608
+ if (!item)
609
+ throw notFound();
610
+ if (how.kind === "withdraw" && item.owner_org_id !== how.orgId)
611
+ throw notFound();
612
+ if (item.owner_org_id === null || item.pending_version === null)
613
+ throw notPending(item.name);
614
+ const now = sql `now()`;
615
+ await t
616
+ .updateTable("catalog_items")
617
+ .set({
618
+ pending_version: null,
619
+ pending_by: null,
620
+ pending_at: null,
621
+ updated_at: now,
622
+ // A first version is removed: the name is free again (P3-10)
623
+ ...(item.awaiting_confirmation && { deleted_at: now }),
624
+ })
625
+ .where("id", "=", itemId)
626
+ .execute();
627
+ if (item.awaiting_confirmation) {
628
+ await cancelPendingRequests(t, { itemId }, actor, "item_removed", opts);
629
+ }
630
+ if (how.kind === "reject") {
631
+ // never usable afterwards, whoever owns the item later (ruling P3-52)
632
+ await t
633
+ .updateTable("catalog_item_versions")
634
+ .set({ rejected_at: now })
635
+ .where("item_id", "=", itemId)
636
+ .where("version", "=", item.pending_version)
637
+ .execute();
638
+ }
639
+ // Under the per-name install lock, as CatalogService.removeIn: a confirm's install still
640
+ // committing is seen, so its claim is never released under it
641
+ await this.installLock.lock(item.name);
642
+ await releaseExtensionClaim(t, item.name, item.package_name);
643
+ if (how.kind === "reject") {
644
+ await addOrgNotice(t, item.owner_org_id, "upload_rejected", {
645
+ itemId,
646
+ name: item.name,
647
+ displayName: await itemDisplayName(t, itemId),
648
+ version: item.pending_version,
649
+ reason: how.reason,
650
+ });
651
+ }
652
+ await audit(t, {
653
+ actorAccountId: actor,
654
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
655
+ action: how.kind === "reject" ? "catalog.upload_rejected" : "catalog.upload_withdrawn",
656
+ target: itemId,
657
+ detail: {
658
+ name: item.name,
659
+ version: item.pending_version,
660
+ ownerOrgId: item.owner_org_id,
661
+ removed: item.awaiting_confirmation,
662
+ ...(how.kind === "reject" && { reason: how.reason }),
663
+ ...opts.auditDetail,
664
+ },
665
+ });
666
+ }
667
+ /** The preview of a scope change or a disable (nothing written). */
668
+ async preview(itemId, target) {
669
+ const item = await this.item(itemId, false);
670
+ return this.compute(item, await this.targetOf(item, target));
671
+ }
672
+ /** Changes the scope after its preview (`scopeHash`); returns the item. */
673
+ async setScope(actor, itemId, body, opts = {}) {
674
+ if (!UUID_RE.test(itemId))
675
+ throw notFound();
676
+ const target = { scope: body.scope, ...(body.orgs !== undefined && { orgs: body.orgs }) };
677
+ await this.writeScope(actor, itemId, target, body.scopeHash, opts);
678
+ return (await this.catalog.get(itemId)).item;
679
+ }
680
+ /**
681
+ * Disables the plugin on the whole deployment (after its preview, `scopeHash` required) or
682
+ * enables it again (no hash); returns the item.
683
+ */
684
+ async setDisabled(actor, itemId, body, opts = {}) {
685
+ if (!UUID_RE.test(itemId))
686
+ throw notFound();
687
+ if (body.disabled && body.scopeHash === undefined) {
688
+ throw new ApiError("validation_failed", "scopeHash: required when disabling (from POST scope/preview with disabled: true)", [{ path: "scopeHash", message: "required when disabling" }]);
689
+ }
690
+ await this.writeDisabled(actor, itemId, body.disabled, body.scopeHash, opts);
691
+ return (await this.catalog.get(itemId)).item;
692
+ }
693
+ /** Shows or hides the item to orgs outside its `named` list; returns the item. */
694
+ async setShown(actor, itemId, shown, opts = {}) {
695
+ if (!UUID_RE.test(itemId))
696
+ throw notFound();
697
+ await this.writeShown(actor, itemId, shown, opts);
698
+ return (await this.catalog.get(itemId)).item;
699
+ }
700
+ async writeShown(actor, itemId, shown, opts) {
701
+ await this.adminLock.lockAndAuthorize(actor);
702
+ // A builtin item is `all`: the flag is irrelevant there but harmless, so it is not refused
703
+ const item = await this.db
704
+ .selectFrom("catalog_items")
705
+ .select(["name", "shown_to_others", "owner_org_id", "shareable", "awaiting_confirmation"])
706
+ .where("id", "=", itemId)
707
+ .where("deleted_at", "is", null)
708
+ .forUpdate()
709
+ .executeTakeFirst();
710
+ if (!item)
711
+ throw notFound();
712
+ // A first version waiting for the super admin is nobody's to show yet (P3-9)
713
+ assertNotAwaiting(item);
714
+ // Showing goes through the share gate (P3-16); hiding is always allowed
715
+ if (shown)
716
+ assertShareable(item);
717
+ if (item.shown_to_others === shown)
718
+ return;
719
+ await this.db
720
+ .updateTable("catalog_items")
721
+ .set({ shown_to_others: shown, updated_at: sql `now()` })
722
+ .where("id", "=", itemId)
723
+ .execute();
724
+ await audit(this.db, {
725
+ actorAccountId: actor,
726
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
727
+ action: "catalog.shown_changed",
728
+ target: itemId,
729
+ detail: { name: item.name, from: item.shown_to_others, to: shown, ...opts.auditDetail },
730
+ });
731
+ }
732
+ async writeScope(actor, itemId, target, hash, opts) {
733
+ await this.adminLock.lockAndAuthorize(actor);
734
+ const item = await this.item(itemId, true);
735
+ assertNotAwaiting(item);
736
+ const t = await this.targetOf(item, target);
737
+ const from = await this.listed(itemId);
738
+ // The owner stays listed (P3-17); widening goes through the share gate (P3-16)
739
+ assertOwnerListed(item, t);
740
+ assertShareableTarget(item, { scope: item.scope, orgs: from }, t);
741
+ // A scope change sends every theme back to following the plugin (rule 2): each is `all` after
742
+ // only when the plugin is (themes spec §7)
743
+ await this.assertKeepsPlatformDefault(item.id, (c) => c.disabled || item.disabled ? "gone" : t.scope === "all" ? "all" : "narrower");
744
+ const p = await this.compute(item, t);
745
+ if (p.scopeHash !== hash)
746
+ throw staleError();
747
+ if (p.conflicts.length > 0)
748
+ throw conflictsError(p.conflicts);
749
+ if (item.scope === t.scope && from.join() === t.orgs.join() && p.replaced.length === 0)
750
+ return;
751
+ await this.followAgain(actor, itemId, p.replaced, opts);
752
+ await this.db
753
+ .updateTable("catalog_items")
754
+ .set({
755
+ scope: t.scope,
756
+ scope_version: sql `scope_version + 1`,
757
+ updated_at: sql `now()`,
758
+ })
759
+ .where("id", "=", itemId)
760
+ .execute();
761
+ await this.db.deleteFrom("catalog_item_scope_orgs").where("item_id", "=", itemId).execute();
762
+ if (t.orgs.length > 0) {
763
+ await this.db
764
+ .insertInto("catalog_item_scope_orgs")
765
+ .values(t.orgs.map((org_id) => ({ item_id: itemId, org_id })))
766
+ .execute();
767
+ }
768
+ const shared = newlySharedWith({ scope: item.scope, orgs: from }, t);
769
+ if (shared === "all_orgs" || shared.length > 0) {
770
+ await notifyItemShared(this.db, item.owner_org_id, { kind: "plugin", id: itemId }, item.name, shared);
771
+ }
772
+ await audit(this.db, {
773
+ actorAccountId: actor,
774
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
775
+ action: "catalog.scope_changed",
776
+ target: itemId,
777
+ detail: {
778
+ name: item.name,
779
+ from: { scope: item.scope, orgs: from },
780
+ to: { scope: t.scope, orgs: t.orgs },
781
+ ...opts.auditDetail,
782
+ },
783
+ });
784
+ afterCommit(() => this.enqueue(itemId));
785
+ }
786
+ async writeDisabled(actor, itemId, disabled, hash, opts) {
787
+ await this.adminLock.lockAndAuthorize(actor);
788
+ const item = await this.item(itemId, true);
789
+ if (item.disabled === disabled)
790
+ return;
791
+ if (disabled)
792
+ await this.assertKeepsPlatformDefault(item.id, () => "gone");
793
+ const p = await this.compute(item, disabled
794
+ ? await this.targetOf(item, { disabled: true })
795
+ : { scope: item.scope, orgs: await this.listed(itemId), disabled, scopeChange: false });
796
+ if (disabled && p.scopeHash !== hash)
797
+ throw staleError();
798
+ if (p.conflicts.length > 0)
799
+ throw conflictsError(p.conflicts);
800
+ await this.db
801
+ .updateTable("catalog_items")
802
+ .set({
803
+ disabled,
804
+ scope_version: sql `scope_version + 1`,
805
+ updated_at: sql `now()`,
806
+ })
807
+ .where("id", "=", itemId)
808
+ .execute();
809
+ await audit(this.db, {
810
+ actorAccountId: actor,
811
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
812
+ action: "catalog.scope_changed",
813
+ target: itemId,
814
+ detail: {
815
+ name: item.name,
816
+ disabled: { from: item.disabled, to: disabled },
817
+ ...opts.auditDetail,
818
+ },
819
+ });
820
+ afterCommit(() => this.enqueue(itemId));
821
+ }
822
+ /**
823
+ * Writes an org-owned plugin's 可共享 flag and copies it to its component rows (ruling P3-2).
824
+ * Turning it off narrows an `optional` / `all` plugin, and each component with its own such
825
+ * scope, to the owner plus the orgs where it is on now (ruling P3-25), and enqueues the item's
826
+ * scope sync after the commit. The caller authorizes (the owner org's admin, Task 7). A platform
827
+ * item (no owner) or a missing one -> 404.
828
+ */
829
+ async setShareable(itemId, shareable, actor = null) {
830
+ if (!UUID_RE.test(itemId))
831
+ throw notFound();
832
+ const item = await this.db
833
+ .selectFrom("catalog_items")
834
+ .select(["id", "name", "scope", "builtin", "owner_org_id", "shareable"])
835
+ .where("id", "=", itemId)
836
+ .where("deleted_at", "is", null)
837
+ .forUpdate()
838
+ .executeTakeFirst();
839
+ if (!item || item.owner_org_id === null)
840
+ throw notFound();
841
+ await this.db
842
+ .updateTable("catalog_items")
843
+ .set({ shareable })
844
+ .where("id", "=", itemId)
845
+ .execute();
846
+ for (const table of [
847
+ "platform_skills",
848
+ "platform_agent_templates",
849
+ "platform_connector_templates",
850
+ "platform_themes",
851
+ ]) {
852
+ await this.db
853
+ .updateTable(table)
854
+ .set({ shareable })
855
+ .where("catalog_item_id", "=", itemId)
856
+ .where("deleted_at", "is", null)
857
+ .execute();
858
+ }
859
+ if (shareable)
860
+ return;
861
+ const narrowed = await narrowItemOnUnshare(this.db, actor, item);
862
+ for (const kind of COMPONENT_KINDS) {
863
+ for (const c of await loadComponents(this.db, kind, { itemId, forUpdate: true })) {
864
+ await narrowComponentOnUnshare(this.db, actor, c);
865
+ }
866
+ }
867
+ if (narrowed)
868
+ afterCommit(() => this.enqueue(itemId));
869
+ }
870
+ /**
871
+ * Adds one org to a `named` item's list in the caller's transaction (an approved `access`
872
+ * request, spec §5.1 rule 2): nobody loses access, so no preview. The item row is locked; it
873
+ * must be live and not builtin (404 / `plugin.builtin`). Bumps `scope_version`, audits
874
+ * `catalog.scope_changed` and enqueues the item's scope sync after the commit. Returns whether
875
+ * the list changed (false: not `named`, or listed already).
876
+ */
877
+ async addOrg(actor, itemId, orgId, opts = {}) {
878
+ const item = await this.item(itemId, true);
879
+ assertNotAwaiting(item);
880
+ const changed = await addScopeOrg(this.db, actor, item, orgId, opts);
881
+ if (changed)
882
+ afterCommit(() => this.enqueue(itemId));
883
+ return changed;
884
+ }
885
+ /**
886
+ * Enqueues the item's scope sync after a commit made elsewhere (an org upload's confirm,
887
+ * `OrgPluginUploads`); a failure only warns.
888
+ */
889
+ async enqueueSync(itemId) {
890
+ await this.enqueue(itemId);
891
+ }
892
+ /** Enqueues the item's scope sync; a failure only warns (the next change or org sync converges). */
893
+ async enqueue(itemId) {
894
+ try {
895
+ await this.sync.enqueueItem(itemId);
896
+ }
897
+ catch (err) {
898
+ this.log.warn("enqueueing the plugin scope sync failed", { itemId, err });
899
+ }
900
+ }
901
+ /**
902
+ * 409 `theme.platform_default` when a live theme of the item is the platform default and `after`
903
+ * says the change leaves it narrower than `all` or gone (themes spec §7). In the caller's
904
+ * transaction, before anything is written.
905
+ */
906
+ async assertKeepsPlatformDefault(itemId, after) {
907
+ const themes = await loadComponents(this.db, "theme", { itemId });
908
+ await assertNotPlatformDefault(this.db, themes.map((c) => c.id), (id) => after(themes.find((c) => c.id === id) ?? { disabled: false }));
909
+ }
910
+ /** The live item (row locked with `forUpdate`); missing -> 404, builtin -> `plugin.builtin`. */
911
+ async item(itemId, forUpdate) {
912
+ if (!UUID_RE.test(itemId))
913
+ throw notFound();
914
+ let q = this.db
915
+ .selectFrom("catalog_items")
916
+ .select([
917
+ "id",
918
+ "name",
919
+ "scope",
920
+ "builtin",
921
+ "disabled",
922
+ "latest_version",
923
+ "owner_org_id",
924
+ "shareable",
925
+ "awaiting_confirmation",
926
+ ])
927
+ .where("id", "=", itemId)
928
+ .where("deleted_at", "is", null);
929
+ if (forUpdate)
930
+ q = q.forUpdate();
931
+ const row = await q.executeTakeFirst();
932
+ if (!row)
933
+ throw notFound();
934
+ if (row.builtin)
935
+ throw builtinError();
936
+ return row;
937
+ }
938
+ /** The `named` list of the item, sorted. */
939
+ async listed(itemId) {
940
+ const rows = await this.db
941
+ .selectFrom("catalog_item_scope_orgs")
942
+ .select("org_id")
943
+ .where("item_id", "=", itemId)
944
+ .orderBy("org_id")
945
+ .execute();
946
+ return rows.map((r) => r.org_id);
947
+ }
948
+ /** The state after the change: `orgs` only with `named`, each a live org. */
949
+ async targetOf(item, target) {
950
+ if ("disabled" in target) {
951
+ return {
952
+ scope: item.scope,
953
+ orgs: await this.listed(item.id),
954
+ disabled: true,
955
+ scopeChange: false,
956
+ };
957
+ }
958
+ if (target.orgs !== undefined && target.scope !== "named") {
959
+ throw new ApiError("validation_failed", "orgs: only allowed with scope named", [
960
+ { path: "orgs", message: "only allowed with scope named" },
961
+ ]);
962
+ }
963
+ const orgs = [...new Set(target.orgs ?? [])].sort();
964
+ await assertOrgsExist(this.db, orgs);
965
+ return { scope: target.scope, orgs, disabled: item.disabled, scopeChange: true };
966
+ }
967
+ /** The preview of moving `item` to `target` (read through the current context). */
968
+ async compute(item, target) {
969
+ const db = this.db;
970
+ // one after the other: `db` may be a transaction's single connection
971
+ const orgs = await db
972
+ .selectFrom("orgs")
973
+ .select(["id", "name"])
974
+ .where("deleted_at", "is", null)
975
+ .orderBy("id")
976
+ .execute();
977
+ const listedNow = new Set(await this.listed(item.id));
978
+ const switches = await db
979
+ .selectFrom("catalog_item_org_switches")
980
+ .select(["org_id", "enabled"])
981
+ .where("item_id", "=", item.id)
982
+ .execute();
983
+ const installs = await db
984
+ .selectFrom("plugin_installs")
985
+ .select(["id", "org_id"])
986
+ .where("item_id", "=", item.id)
987
+ .where("status", "in", [...LIVE])
988
+ .execute();
989
+ const sw = new Map(switches.map((s) => [s.org_id, s.enabled]));
990
+ const live = new Map(installs.map((a) => [a.org_id, a.id]));
991
+ const listedAfter = new Set(target.orgs);
992
+ const after = { scope: target.scope, disabled: target.disabled, builtin: false };
993
+ const affected = [];
994
+ const needsConfig = [];
995
+ /** The orgs the plugin will be on in after the change (a live install kept or made). */
996
+ const onAfter = new Set();
997
+ for (const org of orgs) {
998
+ const s = sw.get(org.id) ?? null;
999
+ const wanted = wantedOn(after, listedAfter.has(org.id), s);
1000
+ const installId = live.get(org.id);
1001
+ if (installId !== undefined) {
1002
+ // A live install another one depends on stays (spec §5 rule 9, as the sync does)
1003
+ if (wanted || (await this.sync.dependedOn(org.id, installId))) {
1004
+ onAfter.add(org.id);
1005
+ continue;
1006
+ }
1007
+ const p = await this.installer.previewUninstall(org.id, installId);
1008
+ affected.push({
1009
+ orgId: org.id,
1010
+ orgName: org.name,
1011
+ agents: p.agents.map((a) => ({ id: a.id, name: a.name })),
1012
+ // The sync's uninstall keeps the connectors the install created as the org's own
1013
+ connectorsKept: p.components.filter((c) => c.kind === "connector" && c.created).length,
1014
+ });
1015
+ continue;
1016
+ }
1017
+ if (!wanted || wantedOn(item, listedNow.has(org.id), s))
1018
+ continue;
1019
+ let needs = false;
1020
+ try {
1021
+ needs = await this.sync.needsInput(org.id, item.id, item.latest_version);
1022
+ }
1023
+ catch (e) {
1024
+ // Not installable as it is (a dependency unresolved): the sync reports it. Anything else
1025
+ // (a database error) propagates: inside the write's transaction it is not recoverable
1026
+ if (!(e instanceof ApiError))
1027
+ throw e;
1028
+ }
1029
+ if (needs)
1030
+ needsConfig.push(org.id);
1031
+ else
1032
+ onAfter.add(org.id);
1033
+ }
1034
+ const { replaced, conflicts, themesLost } = await this.componentChanges(item, target, orgs, onAfter, affected);
1035
+ const themes = await themesPreview(db, themesLost);
1036
+ const p = {
1037
+ affected,
1038
+ needsConfig,
1039
+ replaced,
1040
+ conflicts,
1041
+ ...(themes !== undefined && { themes }),
1042
+ };
1043
+ return { ...p, scopeHash: scopeHash(target, p) };
1044
+ }
1045
+ /**
1046
+ * The component side of a plugin scope change or disable (spec §5 rules 2, 8, 10): the
1047
+ * components with their own scope a scope change replaces; the orgs where a skill or agent
1048
+ * template is on now and would be off after (agents merged into `affected`: a component with its
1049
+ * own scope that goes back to following the plugin, or one cut by the disable); and the orgs a
1050
+ * skill would newly be offered to whose own skills use its name, or a theme would come on in
1051
+ * where another theme with its id is on; and per theme the orgs it would go off in
1052
+ * (`themesLost`). `onAfter`: the orgs the plugin is on in after the change.
1053
+ */
1054
+ async componentChanges(item, target, orgs, onAfter, affected) {
1055
+ const db = this.db;
1056
+ const replaced = [];
1057
+ const conflicts = [];
1058
+ const themesLost = new Map();
1059
+ const lose = new Map();
1060
+ for (const kind of COMPONENT_KINDS) {
1061
+ const comps = await loadComponents(db, kind, { itemId: item.id });
1062
+ if (comps.length === 0)
1063
+ continue;
1064
+ if (target.scopeChange) {
1065
+ for (const c of comps) {
1066
+ if (c.scopeMode === "own")
1067
+ replaced.push({ kind, id: c.id, name: c.name });
1068
+ }
1069
+ }
1070
+ if (kind === "connector_template")
1071
+ continue;
1072
+ const st = await loadScopeState(db, kind, comps);
1073
+ for (const c of comps) {
1074
+ const cAfter = target.scopeChange ? { ...c, scopeMode: "follow" } : c;
1075
+ for (const org of orgs) {
1076
+ const pNow = pluginFactsOf(st, c.itemId, org.id);
1077
+ const pAfter = pNow && {
1078
+ ...pNow,
1079
+ scope: target.scope,
1080
+ disabled: target.disabled,
1081
+ listed: target.orgs.includes(org.id),
1082
+ installed: onAfter.has(org.id),
1083
+ };
1084
+ const listed = listedIn(st, c.id, org.id);
1085
+ const s = switchOf(st, c.id, org.id);
1086
+ const onNow = componentOn(c, pNow, listed, s);
1087
+ const onAfterChange = componentOn(cAfter, pAfter, listed, s);
1088
+ if (kind === "theme") {
1089
+ if (onNow && !onAfterChange) {
1090
+ const set = themesLost.get(c.id) ?? new Set();
1091
+ set.add(org.id);
1092
+ themesLost.set(c.id, set);
1093
+ }
1094
+ if (onAfterChange && !onNow) {
1095
+ const clash = await themeIdClashes(db, org.id, c, c.name);
1096
+ if (clash.length > 0) {
1097
+ conflicts.push({
1098
+ orgId: org.id,
1099
+ orgName: org.name,
1100
+ name: c.name,
1101
+ skills: [],
1102
+ themes: clash.map((x) => x.id),
1103
+ plugins: clash.map((x) => x.plugin ?? "platform"),
1104
+ kind: "theme",
1105
+ });
1106
+ }
1107
+ }
1108
+ continue;
1109
+ }
1110
+ if (onNow && !onAfterChange) {
1111
+ for (const a of await agentsUsing(db, org.id, kind, [c.id])) {
1112
+ const m = lose.get(org.id) ?? new Map();
1113
+ m.set(a.id, a.name);
1114
+ lose.set(org.id, m);
1115
+ }
1116
+ if (!lose.has(org.id))
1117
+ lose.set(org.id, new Map());
1118
+ }
1119
+ if (kind === "skill" &&
1120
+ componentOffered(cAfter, pAfter, listed) &&
1121
+ !componentOffered(c, pNow, listed)) {
1122
+ const clash = await skillNameClashes(db, org.id, c, c.name);
1123
+ if (clash.skills.length > 0) {
1124
+ conflicts.push({ orgId: org.id, orgName: org.name, name: c.name, ...clash });
1125
+ }
1126
+ }
1127
+ }
1128
+ }
1129
+ }
1130
+ for (const org of orgs) {
1131
+ const m = lose.get(org.id);
1132
+ if (!m)
1133
+ continue;
1134
+ let e = affected.find((a) => a.orgId === org.id);
1135
+ if (!e) {
1136
+ e = { orgId: org.id, orgName: org.name, agents: [], connectorsKept: 0 };
1137
+ affected.push(e);
1138
+ }
1139
+ for (const [id, name] of m) {
1140
+ if (!e.agents.some((a) => a.id === id))
1141
+ e.agents.push({ id, name });
1142
+ }
1143
+ }
1144
+ return { replaced, conflicts, themesLost };
1145
+ }
1146
+ /**
1147
+ * Sends the components of the item with their own scope back to following it (a plugin scope
1148
+ * change, spec §5 rule 2): `scope_mode = follow`, their own lists dropped, `scope_version`
1149
+ * bumped, one `component.scope_changed` audit each. In the caller's transaction.
1150
+ */
1151
+ async followAgain(actor, itemId, replaced, opts) {
1152
+ for (const r of replaced) {
1153
+ const table = r.kind === "skill"
1154
+ ? "platform_skills"
1155
+ : r.kind === "agent_template"
1156
+ ? "platform_agent_templates"
1157
+ : r.kind === "theme"
1158
+ ? "platform_themes"
1159
+ : "platform_connector_templates";
1160
+ await this.db
1161
+ .updateTable(table)
1162
+ .set({
1163
+ scope_mode: "follow",
1164
+ scope_version: sql `scope_version + 1`,
1165
+ updated_at: sql `now()`,
1166
+ })
1167
+ .where("id", "=", r.id)
1168
+ .where("scope_mode", "=", "own")
1169
+ .execute();
1170
+ await this.db
1171
+ .deleteFrom("component_scope_orgs")
1172
+ .where("kind", "=", r.kind)
1173
+ .where("component_id", "=", r.id)
1174
+ .execute();
1175
+ await audit(this.db, {
1176
+ actorAccountId: actor,
1177
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
1178
+ action: "component.scope_changed",
1179
+ target: r.id,
1180
+ detail: { kind: r.kind, name: r.name, itemId, to: { scopeMode: "follow" }, via: "plugin" },
1181
+ });
1182
+ }
1183
+ }
1184
+ };
1185
+ __decorate([
1186
+ Transactional()
1187
+ ], CatalogScopeService.prototype, "clearPending", null);
1188
+ __decorate([
1189
+ Transactional()
1190
+ ], CatalogScopeService.prototype, "restorePending", null);
1191
+ __decorate([
1192
+ Transactional()
1193
+ ], CatalogScopeService.prototype, "releaseIfGone", null);
1194
+ __decorate([
1195
+ Transactional()
1196
+ ], CatalogScopeService.prototype, "stillPending", null);
1197
+ __decorate([
1198
+ Transactional()
1199
+ ], CatalogScopeService.prototype, "finishFirstVersion", null);
1200
+ __decorate([
1201
+ Transactional()
1202
+ ], CatalogScopeService.prototype, "dropPending", null);
1203
+ __decorate([
1204
+ Transactional()
1205
+ ], CatalogScopeService.prototype, "writeShown", null);
1206
+ __decorate([
1207
+ Transactional()
1208
+ ], CatalogScopeService.prototype, "writeScope", null);
1209
+ __decorate([
1210
+ Transactional()
1211
+ ], CatalogScopeService.prototype, "writeDisabled", null);
1212
+ __decorate([
1213
+ Transactional()
1214
+ ], CatalogScopeService.prototype, "setShareable", null);
1215
+ __decorate([
1216
+ Transactional({ propagation: "mandatory" })
1217
+ ], CatalogScopeService.prototype, "addOrg", null);
1218
+ CatalogScopeService = __decorate([
1219
+ Injectable(),
1220
+ __param(0, Inject(KernelDb)),
1221
+ __param(1, Inject(SuperAdminLock)),
1222
+ __param(2, Inject(CatalogService)),
1223
+ __param(3, Inject(PluginImport)),
1224
+ __param(4, Inject(PluginInstaller)),
1225
+ __param(5, Inject(ExtensionAdmin)),
1226
+ __param(6, Inject(ExtensionAdminOps)),
1227
+ __param(7, Inject(PluginScopeSync)),
1228
+ __param(8, Inject(PlatformPluginUpdater)),
1229
+ __param(9, Inject(OrgLock)),
1230
+ __param(10, Inject(PluginInstallLock)),
1231
+ __param(11, Inject(ExtensionLifecycle)),
1232
+ __param(12, Inject(getQueueToken(MAINTENANCE_QUEUE_NAME))),
1233
+ __param(13, Inject(KERNEL_LOGGER)),
1234
+ __param(14, Inject(TransactionHost))
1235
+ ], CatalogScopeService);
1236
+ export { CatalogScopeService };