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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +47 -16
  3. package/dist/admin/admin.controller.js +44 -19
  4. package/dist/admin/extensions.controller.d.ts +24 -3
  5. package/dist/admin/extensions.controller.js +48 -8
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +19 -0
  13. package/dist/agents/agent-lookup.js +21 -0
  14. package/dist/agents/agent-profile.service.d.ts +29 -0
  15. package/dist/agents/agent-profile.service.js +117 -0
  16. package/dist/agents/agents.controller.d.ts +168 -3
  17. package/dist/agents/agents.controller.js +201 -12
  18. package/dist/agents/agents.module.d.ts +4 -1
  19. package/dist/agents/agents.module.js +36 -6
  20. package/dist/agents/agents.service.d.ts +64 -27
  21. package/dist/agents/agents.service.js +199 -74
  22. package/dist/agents/definition.d.ts +53 -0
  23. package/dist/agents/definition.js +55 -0
  24. package/dist/agents/from-template.d.ts +106 -0
  25. package/dist/agents/from-template.js +649 -0
  26. package/dist/agents/from-template.service.d.ts +60 -0
  27. package/dist/agents/from-template.service.js +161 -0
  28. package/dist/agents/instruction-files.d.ts +60 -0
  29. package/dist/agents/instruction-files.js +111 -0
  30. package/dist/agents/models.controller.d.ts +9 -3
  31. package/dist/agents/models.controller.js +19 -4
  32. package/dist/agents/org-templates.d.ts +176 -0
  33. package/dist/agents/org-templates.js +827 -0
  34. package/dist/agents/pending-connector-requests.d.ts +77 -0
  35. package/dist/agents/pending-connector-requests.js +215 -0
  36. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  37. package/dist/agents/pending-connectors.controller.js +91 -0
  38. package/dist/agents/pending-connectors.service.d.ts +62 -0
  39. package/dist/agents/pending-connectors.service.js +282 -0
  40. package/dist/agents/profile.d.ts +96 -0
  41. package/dist/agents/profile.js +51 -0
  42. package/dist/agents/readiness.controller.d.ts +26 -0
  43. package/dist/agents/readiness.controller.js +56 -0
  44. package/dist/agents/templates.controller.d.ts +86 -5
  45. package/dist/agents/templates.controller.js +171 -7
  46. package/dist/agents/templates.d.ts +127 -23
  47. package/dist/agents/templates.js +476 -53
  48. package/dist/background/background.controller.d.ts +38 -0
  49. package/dist/background/background.controller.js +87 -0
  50. package/dist/background/background.module.d.ts +10 -0
  51. package/dist/background/background.module.js +39 -0
  52. package/dist/background/finish.d.ts +44 -0
  53. package/dist/background/finish.js +94 -0
  54. package/dist/background/launch-lock.d.ts +15 -0
  55. package/dist/background/launch-lock.js +40 -0
  56. package/dist/background/launch.d.ts +36 -0
  57. package/dist/background/launch.js +70 -0
  58. package/dist/background/poll.job.d.ts +56 -0
  59. package/dist/background/poll.job.js +190 -0
  60. package/dist/background/render.d.ts +23 -0
  61. package/dist/background/render.js +48 -0
  62. package/dist/background/session.d.ts +48 -0
  63. package/dist/background/session.js +79 -0
  64. package/dist/background/status.d.ts +35 -0
  65. package/dist/background/status.js +57 -0
  66. package/dist/background/stop.d.ts +68 -0
  67. package/dist/background/stop.js +243 -0
  68. package/dist/background/store.d.ts +162 -0
  69. package/dist/background/store.js +357 -0
  70. package/dist/background/store.module.d.ts +6 -0
  71. package/dist/background/store.module.js +22 -0
  72. package/dist/background/tasks.service.d.ts +77 -0
  73. package/dist/background/tasks.service.js +211 -0
  74. package/dist/background/wake-rules.d.ts +66 -0
  75. package/dist/background/wake-rules.js +113 -0
  76. package/dist/background/wake.d.ts +30 -0
  77. package/dist/background/wake.js +63 -0
  78. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  79. package/dist/catalog/admin-catalog.controller.js +213 -42
  80. package/dist/catalog/catalog-content.d.ts +58 -32
  81. package/dist/catalog/catalog-content.js +34 -8
  82. package/dist/catalog/catalog-import.module.d.ts +7 -0
  83. package/dist/catalog/catalog-import.module.js +60 -0
  84. package/dist/catalog/catalog-items.d.ts +111 -7
  85. package/dist/catalog/catalog-items.js +279 -13
  86. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  87. package/dist/catalog/catalog-scope.service.js +1116 -0
  88. package/dist/catalog/catalog.module.d.ts +7 -9
  89. package/dist/catalog/catalog.module.js +41 -31
  90. package/dist/catalog/catalog.service.d.ts +101 -29
  91. package/dist/catalog/catalog.service.js +104 -106
  92. package/dist/catalog/claude/agents.js +2 -0
  93. package/dist/catalog/cli.d.ts +11 -1
  94. package/dist/catalog/cli.js +26 -1
  95. package/dist/catalog/component-promotion.d.ts +96 -0
  96. package/dist/catalog/component-promotion.js +395 -0
  97. package/dist/catalog/component-scope.controller.d.ts +152 -0
  98. package/dist/catalog/component-scope.controller.js +287 -0
  99. package/dist/catalog/component-scope.service.d.ts +303 -0
  100. package/dist/catalog/component-scope.service.js +936 -0
  101. package/dist/catalog/component-state.d.ts +174 -0
  102. package/dist/catalog/component-state.js +437 -0
  103. package/dist/catalog/job-ids.d.ts +30 -0
  104. package/dist/catalog/job-ids.js +25 -0
  105. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  106. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  107. package/dist/catalog/marketplaces.controller.js +56 -7
  108. package/dist/catalog/marketplaces.service.d.ts +54 -14
  109. package/dist/catalog/marketplaces.service.js +71 -22
  110. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  111. package/dist/catalog/org-catalog.controller.js +181 -65
  112. package/dist/catalog/org-catalog.service.d.ts +65 -33
  113. package/dist/catalog/org-catalog.service.js +324 -157
  114. package/dist/catalog/org-extension-switch.d.ts +41 -0
  115. package/dist/catalog/org-extension-switch.js +115 -0
  116. package/dist/catalog/org-extension.controller.d.ts +119 -0
  117. package/dist/catalog/org-extension.controller.js +266 -0
  118. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  119. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  120. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  121. package/dist/catalog/org-plugin-uploads.js +116 -0
  122. package/dist/catalog/owned-items.d.ts +184 -0
  123. package/dist/catalog/owned-items.js +789 -0
  124. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  125. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  126. package/dist/catalog/ownership.d.ts +172 -0
  127. package/dist/catalog/ownership.js +326 -0
  128. package/dist/catalog/platform-components.d.ts +221 -0
  129. package/dist/catalog/platform-components.js +761 -0
  130. package/dist/catalog/platform-migration.d.ts +115 -0
  131. package/dist/catalog/platform-migration.js +582 -0
  132. package/dist/catalog/plugin-import.d.ts +178 -34
  133. package/dist/catalog/plugin-import.js +623 -83
  134. package/dist/catalog/plugin-install.d.ts +185 -41
  135. package/dist/catalog/plugin-install.js +758 -126
  136. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  137. package/dist/catalog/plugin-upgrade.js +1148 -1137
  138. package/dist/catalog/request-rules.d.ts +65 -0
  139. package/dist/catalog/request-rules.js +217 -0
  140. package/dist/catalog/requests.service.d.ts +193 -118
  141. package/dist/catalog/requests.service.js +526 -343
  142. package/dist/catalog/reserved-names.d.ts +8 -0
  143. package/dist/catalog/reserved-names.js +42 -0
  144. package/dist/catalog/scope-orgs.d.ts +21 -0
  145. package/dist/catalog/scope-orgs.js +67 -0
  146. package/dist/catalog/scope-state.d.ts +35 -0
  147. package/dist/catalog/scope-state.js +87 -0
  148. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  149. package/dist/catalog/scope-sync-workers.js +29 -0
  150. package/dist/catalog/scope-sync.d.ts +176 -0
  151. package/dist/catalog/scope-sync.js +576 -0
  152. package/dist/catalog/scope.d.ts +42 -0
  153. package/dist/catalog/scope.js +42 -0
  154. package/dist/catalog/unshare.d.ts +22 -0
  155. package/dist/catalog/unshare.js +118 -0
  156. package/dist/channels/actions.js +1 -0
  157. package/dist/channels/cards.js +21 -3
  158. package/dist/channels/channels.module.js +2 -0
  159. package/dist/channels/connections.service.d.ts +16 -1
  160. package/dist/channels/connections.service.js +38 -4
  161. package/dist/channels/inbound.d.ts +9 -1
  162. package/dist/channels/inbound.js +67 -5
  163. package/dist/channels/phrases.d.ts +35 -0
  164. package/dist/channels/phrases.js +29 -0
  165. package/dist/channels/threads.d.ts +5 -0
  166. package/dist/channels/threads.js +8 -0
  167. package/dist/config/docs.js +3 -1
  168. package/dist/config/schema.d.ts +24 -2
  169. package/dist/config/schema.js +145 -19
  170. package/dist/conversations/access.d.ts +6 -4
  171. package/dist/conversations/access.js +29 -5
  172. package/dist/conversations/agent-tree.d.ts +46 -0
  173. package/dist/conversations/agent-tree.js +92 -0
  174. package/dist/conversations/attachments.service.d.ts +30 -0
  175. package/dist/conversations/attachments.service.js +130 -5
  176. package/dist/conversations/conversations.controller.d.ts +79 -23
  177. package/dist/conversations/conversations.controller.js +141 -50
  178. package/dist/conversations/conversations.module.d.ts +1 -1
  179. package/dist/conversations/conversations.module.js +10 -7
  180. package/dist/conversations/conversations.service.d.ts +108 -9
  181. package/dist/conversations/conversations.service.js +237 -30
  182. package/dist/conversations/environment-status.d.ts +24 -0
  183. package/dist/conversations/environment-status.js +71 -0
  184. package/dist/conversations/event-log.d.ts +21 -6
  185. package/dist/conversations/event-log.js +70 -1
  186. package/dist/conversations/events.d.ts +140 -0
  187. package/dist/conversations/events.js +142 -13
  188. package/dist/conversations/queue.d.ts +3 -1
  189. package/dist/conversations/queue.js +13 -2
  190. package/dist/conversations/queue.service.d.ts +1 -1
  191. package/dist/conversations/queue.service.js +8 -1
  192. package/dist/conversations/titles.d.ts +12 -3
  193. package/dist/conversations/titles.js +36 -8
  194. package/dist/conversations/tree.d.ts +17 -0
  195. package/dist/conversations/tree.js +42 -0
  196. package/dist/ctx/create-ctx.d.ts +5 -0
  197. package/dist/ctx/create-ctx.js +15 -5
  198. package/dist/db/kernel-schema.d.ts +420 -20
  199. package/dist/db/pool.d.ts +5 -0
  200. package/dist/db/pool.js +3 -0
  201. package/dist/environments/access.d.ts +41 -0
  202. package/dist/environments/access.js +77 -0
  203. package/dist/environments/conversation-environments.d.ts +61 -0
  204. package/dist/environments/conversation-environments.js +170 -0
  205. package/dist/environments/dto.d.ts +25 -0
  206. package/dist/environments/dto.js +12 -0
  207. package/dist/environments/environments.controller.d.ts +33 -0
  208. package/dist/environments/environments.controller.js +110 -0
  209. package/dist/environments/environments.module.d.ts +8 -0
  210. package/dist/environments/environments.module.js +27 -0
  211. package/dist/environments/environments.service.d.ts +153 -0
  212. package/dist/environments/environments.service.js +541 -0
  213. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  214. package/dist/environments/legacy-cleanup.job.js +141 -0
  215. package/dist/errors.d.ts +90 -2
  216. package/dist/errors.js +90 -2
  217. package/dist/evals/reconstruct.d.ts +18 -9
  218. package/dist/evals/reconstruct.js +26 -7
  219. package/dist/evals/run-replay.d.ts +7 -2
  220. package/dist/evals/run-replay.js +42 -7
  221. package/dist/evals/step-replay.d.ts +2 -5
  222. package/dist/evals/step-replay.js +13 -7
  223. package/dist/evals/trajectory.js +1 -1
  224. package/dist/evals/trajectory.service.d.ts +8 -3
  225. package/dist/evals/trajectory.service.js +26 -14
  226. package/dist/evals/worker.d.ts +5 -5
  227. package/dist/evals/worker.js +9 -3
  228. package/dist/extensions/admin-ops.d.ts +36 -10
  229. package/dist/extensions/admin-ops.js +67 -42
  230. package/dist/extensions/admin-view.d.ts +39 -10
  231. package/dist/extensions/admin-view.js +111 -20
  232. package/dist/extensions/blobs.js +1 -0
  233. package/dist/extensions/bootstrap.d.ts +17 -4
  234. package/dist/extensions/bootstrap.js +70 -9
  235. package/dist/extensions/cli.d.ts +12 -0
  236. package/dist/extensions/cli.js +11 -2
  237. package/dist/extensions/config-issues.d.ts +13 -1
  238. package/dist/extensions/config-issues.js +22 -5
  239. package/dist/extensions/config-json-schema.d.ts +43 -7
  240. package/dist/extensions/config-json-schema.js +124 -58
  241. package/dist/extensions/deployment-config-store.d.ts +6 -0
  242. package/dist/extensions/deployment-config.d.ts +78 -8
  243. package/dist/extensions/deployment-config.js +172 -34
  244. package/dist/extensions/display-name.d.ts +22 -0
  245. package/dist/extensions/display-name.js +77 -0
  246. package/dist/extensions/effective-config.d.ts +127 -0
  247. package/dist/extensions/effective-config.js +368 -0
  248. package/dist/extensions/extensions.module.js +14 -2
  249. package/dist/extensions/hooks.d.ts +37 -4
  250. package/dist/extensions/hooks.js +82 -16
  251. package/dist/extensions/host.d.ts +45 -2
  252. package/dist/extensions/host.js +112 -16
  253. package/dist/extensions/installs.d.ts +20 -8
  254. package/dist/extensions/installs.js +37 -15
  255. package/dist/extensions/org-config.d.ts +81 -6
  256. package/dist/extensions/org-config.js +195 -44
  257. package/dist/extensions/org-levels.d.ts +37 -0
  258. package/dist/extensions/org-levels.js +71 -0
  259. package/dist/extensions/org-overrides.d.ts +151 -0
  260. package/dist/extensions/org-overrides.js +524 -0
  261. package/dist/extensions/package.d.ts +14 -1
  262. package/dist/extensions/package.js +51 -2
  263. package/dist/extensions/permission-view.d.ts +19 -4
  264. package/dist/extensions/permission-view.js +4 -4
  265. package/dist/extensions/plugin-items.d.ts +21 -0
  266. package/dist/extensions/plugin-items.js +42 -0
  267. package/dist/extensions/point-defaults.controller.d.ts +34 -0
  268. package/dist/extensions/point-defaults.controller.js +71 -0
  269. package/dist/extensions/point-defaults.d.ts +71 -0
  270. package/dist/extensions/point-defaults.js +234 -0
  271. package/dist/extensions/registry.d.ts +1 -1
  272. package/dist/extensions/registry.js +2 -0
  273. package/dist/extensions/resolve.d.ts +5 -1
  274. package/dist/extensions/resolve.js +15 -2
  275. package/dist/files/previewers.d.ts +8 -1
  276. package/dist/files/previewers.js +35 -6
  277. package/dist/http/api.module.js +31 -3
  278. package/dist/http/app.d.ts +11 -2
  279. package/dist/http/app.js +31 -5
  280. package/dist/http/nest-logger.d.ts +6 -5
  281. package/dist/http/nest-logger.js +24 -10
  282. package/dist/identity/accounts.d.ts +29 -29
  283. package/dist/identity/accounts.js +47 -47
  284. package/dist/identity/audit.d.ts +2 -1
  285. package/dist/identity/auth.controller.js +9 -5
  286. package/dist/identity/auth.guard.d.ts +13 -5
  287. package/dist/identity/auth.guard.js +26 -9
  288. package/dist/identity/cookies.d.ts +20 -5
  289. package/dist/identity/cookies.js +44 -6
  290. package/dist/identity/identity.module.d.ts +1 -1
  291. package/dist/identity/identity.module.js +4 -4
  292. package/dist/identity/me.controller.d.ts +5 -1
  293. package/dist/identity/me.controller.js +12 -3
  294. package/dist/identity/principal.d.ts +3 -3
  295. package/dist/identity/principal.js +3 -3
  296. package/dist/identity/sessions.d.ts +12 -0
  297. package/dist/identity/sessions.js +45 -0
  298. package/dist/identity/settings.d.ts +22 -11
  299. package/dist/identity/settings.js +53 -18
  300. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  301. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  302. package/dist/inbox/inbox.module.d.ts +4 -1
  303. package/dist/inbox/inbox.module.js +7 -3
  304. package/dist/inbox/inbox.service.d.ts +62 -3
  305. package/dist/inbox/inbox.service.js +74 -4
  306. package/dist/inbox/org-notices.d.ts +63 -0
  307. package/dist/inbox/org-notices.js +91 -0
  308. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  309. package/dist/inbox/platform-inbox.controller.js +58 -0
  310. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  311. package/dist/inbox/platform-inbox.service.js +263 -0
  312. package/dist/inbox/platform-notices.d.ts +19 -0
  313. package/dist/inbox/platform-notices.js +9 -0
  314. package/dist/index.d.ts +2 -2
  315. package/dist/index.js +1 -1
  316. package/dist/infra/cli/kernel-cli.module.js +9 -1
  317. package/dist/infra/config/kernel-config.service.js +27 -1
  318. package/dist/infra/database/database.module.js +1 -0
  319. package/dist/infra/database/xact-lock.d.ts +1 -1
  320. package/dist/infra/database/xact-lock.js +1 -1
  321. package/dist/infra/events/kernel-events.d.ts +19 -2
  322. package/dist/infra/lifecycle/process-guards.js +4 -0
  323. package/dist/infra/logging/logging.module.d.ts +4 -2
  324. package/dist/infra/logging/logging.module.js +24 -6
  325. package/dist/infra/queue/add-job-once.d.ts +14 -0
  326. package/dist/infra/queue/add-job-once.js +16 -0
  327. package/dist/infra/queue/redis-connection.d.ts +6 -0
  328. package/dist/infra/queue/redis-connection.js +7 -0
  329. package/dist/infra/redis/redis.module.js +6 -2
  330. package/dist/infra/tokens.d.ts +6 -1
  331. package/dist/infra/tokens.js +6 -1
  332. package/dist/kernel.module.js +6 -0
  333. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  334. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  335. package/dist/log.d.ts +13 -1
  336. package/dist/log.js +93 -17
  337. package/dist/models/prices.d.ts +5 -5
  338. package/dist/models/prices.js +4 -4
  339. package/dist/models/purposes.controller.d.ts +6 -4
  340. package/dist/models/purposes.controller.js +13 -7
  341. package/dist/models/purposes.d.ts +43 -9
  342. package/dist/models/purposes.js +48 -18
  343. package/dist/orgs/directory-sync.d.ts +14 -5
  344. package/dist/orgs/directory-sync.js +41 -17
  345. package/dist/orgs/offboarding.d.ts +12 -8
  346. package/dist/orgs/offboarding.js +54 -33
  347. package/dist/orgs/org-lock.d.ts +5 -0
  348. package/dist/orgs/org-lock.js +13 -0
  349. package/dist/orgs/org.guard.d.ts +10 -0
  350. package/dist/orgs/org.guard.js +43 -32
  351. package/dist/orgs/orgs.module.js +3 -0
  352. package/dist/orgs/orgs.service.d.ts +20 -7
  353. package/dist/orgs/orgs.service.js +32 -12
  354. package/dist/orgs/roles.d.ts +1 -1
  355. package/dist/orgs/roles.js +5 -1
  356. package/dist/orgs/settings.controller.d.ts +1 -1
  357. package/dist/orgs/settings.service.d.ts +20 -3
  358. package/dist/orgs/settings.service.js +19 -4
  359. package/dist/overrides.d.ts +3 -0
  360. package/dist/overrides.js +2 -0
  361. package/dist/platform/actor.d.ts +48 -0
  362. package/dist/platform/actor.js +100 -0
  363. package/dist/platform/agent-docs.d.ts +18 -0
  364. package/dist/platform/agent-docs.js +59 -0
  365. package/dist/platform/availability.d.ts +14 -0
  366. package/dist/platform/availability.js +43 -0
  367. package/dist/platform/errors.d.ts +11 -0
  368. package/dist/platform/errors.js +26 -0
  369. package/dist/platform/exclusions.d.ts +12 -0
  370. package/dist/platform/exclusions.js +1387 -0
  371. package/dist/platform/method.d.ts +6 -0
  372. package/dist/platform/method.js +15 -0
  373. package/dist/platform/operation.d.ts +92 -0
  374. package/dist/platform/operation.js +35 -0
  375. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  376. package/dist/platform/ops/agent-templates.ops.js +92 -0
  377. package/dist/platform/ops/agents.ops.d.ts +19 -0
  378. package/dist/platform/ops/agents.ops.js +294 -0
  379. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  380. package/dist/platform/ops/connectors.ops.js +126 -0
  381. package/dist/platform/ops/errors.d.ts +11 -0
  382. package/dist/platform/ops/errors.js +22 -0
  383. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  384. package/dist/platform/ops/extensions.ops.js +116 -0
  385. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  386. package/dist/platform/ops/marketplaces.ops.js +157 -0
  387. package/dist/platform/ops/paging.d.ts +14 -0
  388. package/dist/platform/ops/paging.js +20 -0
  389. package/dist/platform/ops/platform.ops.d.ts +23 -0
  390. package/dist/platform/ops/platform.ops.js +158 -0
  391. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  392. package/dist/platform/ops/plugins.ops.js +377 -0
  393. package/dist/platform/ops/requests.ops.d.ts +14 -0
  394. package/dist/platform/ops/requests.ops.js +153 -0
  395. package/dist/platform/ops/role.d.ts +4 -0
  396. package/dist/platform/ops/role.js +10 -0
  397. package/dist/platform/ops/skills.ops.d.ts +13 -0
  398. package/dist/platform/ops/skills.ops.js +98 -0
  399. package/dist/platform/ops/summary.d.ts +10 -0
  400. package/dist/platform/ops/summary.js +18 -0
  401. package/dist/platform/platform-ops.module.d.ts +7 -0
  402. package/dist/platform/platform-ops.module.js +55 -0
  403. package/dist/platform/platform.module.d.ts +8 -0
  404. package/dist/platform/platform.module.js +25 -0
  405. package/dist/platform/redact-orgs.d.ts +7 -0
  406. package/dist/platform/redact-orgs.js +52 -0
  407. package/dist/platform/registry.d.ts +30 -0
  408. package/dist/platform/registry.js +111 -0
  409. package/dist/roles/worker-role.d.ts +6 -4
  410. package/dist/roles/worker-role.js +14 -7
  411. package/dist/roles/worker.module.d.ts +1 -1
  412. package/dist/roles/worker.module.js +15 -1
  413. package/dist/runtime/context/build.d.ts +11 -7
  414. package/dist/runtime/context/build.js +46 -19
  415. package/dist/runtime/context/claude-tools.d.ts +3 -1
  416. package/dist/runtime/context/claude-tools.js +8 -6
  417. package/dist/runtime/context/compaction.js +13 -0
  418. package/dist/runtime/context/reminders.d.ts +2 -0
  419. package/dist/runtime/context/reminders.js +2 -0
  420. package/dist/runtime/context/skills.js +9 -2
  421. package/dist/runtime/context/tool-changes.d.ts +27 -0
  422. package/dist/runtime/context/tool-changes.js +60 -0
  423. package/dist/runtime/hook-calls.js +2 -0
  424. package/dist/runtime/langgraph-loop.d.ts +3 -1
  425. package/dist/runtime/langgraph-loop.js +36 -17
  426. package/dist/runtime/loop.d.ts +34 -5
  427. package/dist/runtime/maintenance.d.ts +9 -4
  428. package/dist/runtime/maintenance.js +35 -8
  429. package/dist/runtime/model-call.d.ts +46 -8
  430. package/dist/runtime/model-call.js +72 -21
  431. package/dist/runtime/providers.d.ts +6 -0
  432. package/dist/runtime/providers.js +8 -0
  433. package/dist/runtime/run-control.d.ts +11 -1
  434. package/dist/runtime/run-control.js +12 -0
  435. package/dist/runtime/run-drafts.d.ts +85 -0
  436. package/dist/runtime/run-drafts.js +230 -0
  437. package/dist/runtime/run-jobs.d.ts +3 -5
  438. package/dist/runtime/run-jobs.js +3 -7
  439. package/dist/runtime/run-queue.d.ts +59 -2
  440. package/dist/runtime/run-queue.js +311 -38
  441. package/dist/runtime/run-worker.d.ts +11 -5
  442. package/dist/runtime/run-worker.js +69 -33
  443. package/dist/runtime/runtime.module.js +11 -3
  444. package/dist/runtime/step-log.d.ts +15 -4
  445. package/dist/runtime/step-log.js +24 -7
  446. package/dist/runtime/stream.controller.d.ts +23 -1
  447. package/dist/runtime/stream.controller.js +60 -3
  448. package/dist/runtime/stream.d.ts +4 -1
  449. package/dist/runtime/stream.js +27 -3
  450. package/dist/runtime/subagents/child.d.ts +55 -7
  451. package/dist/runtime/subagents/child.js +105 -7
  452. package/dist/runtime/subagents/definition.d.ts +12 -3
  453. package/dist/runtime/subagents/definition.js +44 -28
  454. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  455. package/dist/runtime/subagents/deliveries.js +228 -0
  456. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  457. package/dist/runtime/subagents/dispatch.js +212 -141
  458. package/dist/runtime/subagents/limits.d.ts +24 -5
  459. package/dist/runtime/subagents/limits.js +40 -6
  460. package/dist/runtime/subagents/messages.d.ts +95 -0
  461. package/dist/runtime/subagents/messages.js +328 -0
  462. package/dist/runtime/subagents/preamble.d.ts +4 -4
  463. package/dist/runtime/subagents/preamble.js +9 -7
  464. package/dist/runtime/subagents/progress.d.ts +8 -6
  465. package/dist/runtime/subagents/progress.js +11 -6
  466. package/dist/runtime/subagents/render.d.ts +30 -0
  467. package/dist/runtime/subagents/render.js +53 -0
  468. package/dist/runtime/subagents/roster.d.ts +24 -7
  469. package/dist/runtime/subagents/roster.js +47 -11
  470. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  471. package/dist/runtime/subagents/skill-fork.js +8 -4
  472. package/dist/runtime/subagents/status.d.ts +14 -0
  473. package/dist/runtime/subagents/status.js +23 -0
  474. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  475. package/dist/runtime/subagents/subagents.service.js +11 -6
  476. package/dist/runtime/usage-report.d.ts +2 -1
  477. package/dist/runtime/usage-report.js +19 -13
  478. package/dist/runtime/waits.d.ts +145 -36
  479. package/dist/runtime/waits.js +423 -109
  480. package/dist/sandbox/jobs.d.ts +40 -13
  481. package/dist/sandbox/jobs.js +57 -20
  482. package/dist/sandbox/leases.d.ts +37 -54
  483. package/dist/sandbox/leases.js +71 -115
  484. package/dist/sandbox/providers.d.ts +2 -2
  485. package/dist/sandbox/providers.js +1 -1
  486. package/dist/sandbox/sandbox.module.d.ts +3 -2
  487. package/dist/sandbox/sandbox.module.js +10 -4
  488. package/dist/sandbox/sandbox.service.d.ts +282 -129
  489. package/dist/sandbox/sandbox.service.js +736 -381
  490. package/dist/skills/catalog.d.ts +3 -2
  491. package/dist/skills/catalog.js +21 -43
  492. package/dist/skills/changes.controller.d.ts +7 -0
  493. package/dist/skills/changes.controller.js +19 -1
  494. package/dist/skills/invoke.js +8 -3
  495. package/dist/skills/package.d.ts +20 -1
  496. package/dist/skills/package.js +28 -1
  497. package/dist/skills/skills.controller.d.ts +39 -4
  498. package/dist/skills/skills.controller.js +88 -10
  499. package/dist/skills/skills.module.js +10 -1
  500. package/dist/skills/skills.service.d.ts +106 -26
  501. package/dist/skills/skills.service.js +421 -75
  502. package/dist/skills/usable.d.ts +81 -0
  503. package/dist/skills/usable.js +379 -0
  504. package/dist/tools/approvals.service.d.ts +20 -2
  505. package/dist/tools/approvals.service.js +25 -4
  506. package/dist/tools/builtin-names.d.ts +41 -7
  507. package/dist/tools/builtin-names.js +59 -7
  508. package/dist/tools/builtins/agent.d.ts +23 -21
  509. package/dist/tools/builtins/agent.js +62 -55
  510. package/dist/tools/builtins/builtin-tools.d.ts +19 -1
  511. package/dist/tools/builtins/builtin-tools.js +59 -2
  512. package/dist/tools/builtins/handback.d.ts +28 -0
  513. package/dist/tools/builtins/handback.js +53 -0
  514. package/dist/tools/builtins/platform.d.ts +34 -0
  515. package/dist/tools/builtins/platform.js +362 -0
  516. package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
  517. package/dist/tools/builtins/sandbox/bash.js +241 -4
  518. package/dist/tools/builtins/sandbox/common.d.ts +69 -27
  519. package/dist/tools/builtins/sandbox/common.js +87 -48
  520. package/dist/tools/builtins/sandbox/deliver.js +1 -1
  521. package/dist/tools/builtins/sandbox/edit.js +2 -2
  522. package/dist/tools/builtins/sandbox/glob.js +2 -2
  523. package/dist/tools/builtins/sandbox/grep.js +2 -4
  524. package/dist/tools/builtins/sandbox/index.d.ts +3 -1
  525. package/dist/tools/builtins/sandbox/index.js +7 -1
  526. package/dist/tools/builtins/sandbox/read.js +1 -1
  527. package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
  528. package/dist/tools/builtins/sandbox/task-output.js +329 -0
  529. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  530. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  531. package/dist/tools/builtins/sandbox/write.js +2 -2
  532. package/dist/tools/builtins/send-message.d.ts +56 -0
  533. package/dist/tools/builtins/send-message.js +100 -0
  534. package/dist/tools/builtins/skill-load.d.ts +22 -14
  535. package/dist/tools/builtins/skill-load.js +86 -57
  536. package/dist/tools/builtins/skill-write.js +1 -1
  537. package/dist/tools/builtins/web/errors.d.ts +8 -0
  538. package/dist/tools/builtins/web/errors.js +53 -0
  539. package/dist/tools/builtins/web/extract.d.ts +62 -0
  540. package/dist/tools/builtins/web/extract.js +271 -0
  541. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  542. package/dist/tools/builtins/web/fetch.js +175 -0
  543. package/dist/tools/builtins/web/index.d.ts +13 -0
  544. package/dist/tools/builtins/web/index.js +12 -0
  545. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  546. package/dist/tools/builtins/web/page-cache.js +77 -0
  547. package/dist/tools/builtins/web/search.d.ts +25 -0
  548. package/dist/tools/builtins/web/search.js +210 -0
  549. package/dist/tools/builtins/web/url.d.ts +17 -0
  550. package/dist/tools/builtins/web/url.js +43 -0
  551. package/dist/tools/connectors.controller.d.ts +10 -0
  552. package/dist/tools/connectors.controller.js +12 -0
  553. package/dist/tools/connectors.service.d.ts +46 -5
  554. package/dist/tools/connectors.service.js +94 -15
  555. package/dist/tools/extension-tools.controller.d.ts +14 -0
  556. package/dist/tools/extension-tools.controller.js +37 -0
  557. package/dist/tools/info.d.ts +42 -1
  558. package/dist/tools/info.js +64 -1
  559. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  560. package/dist/tools/oauth/flow-paths.js +1 -1
  561. package/dist/tools/org-tool-switches.d.ts +74 -0
  562. package/dist/tools/org-tool-switches.js +184 -0
  563. package/dist/tools/pipeline.d.ts +46 -40
  564. package/dist/tools/pipeline.js +202 -364
  565. package/dist/tools/policy.d.ts +1 -1
  566. package/dist/tools/policy.js +36 -16
  567. package/dist/tools/registry.d.ts +120 -8
  568. package/dist/tools/registry.js +112 -19
  569. package/dist/tools/tools.module.js +24 -2
  570. package/dist/tools/validate.js +1 -1
  571. package/dist/ui/views.d.ts +2 -1
  572. package/dist/ui/views.js +17 -3
  573. package/package.json +3 -3
  574. package/src/migrations/0064_account_last_org.sql +7 -0
  575. package/src/migrations/0065_conversation_archive.sql +8 -0
  576. package/src/migrations/0066_extension_display_name.sql +4 -0
  577. package/src/migrations/0067_agent_profiles.sql +20 -0
  578. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  579. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  580. package/src/migrations/0070_background_tasks.sql +37 -0
  581. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  582. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  583. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  584. package/src/migrations/0074_subagent_tree.sql +50 -0
  585. package/src/migrations/0075_plugin_scope.sql +61 -0
  586. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  587. package/src/migrations/0077_scope_requests.sql +52 -0
  588. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  589. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  590. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  591. package/src/migrations/0081_platform_components.sql +129 -0
  592. package/src/migrations/0082_platform_migration.sql +33 -0
  593. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  594. package/src/migrations/0084_org_owned_items.sql +85 -0
  595. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  596. package/src/migrations/0086_org_layering.sql +30 -0
  597. package/src/migrations/0087_approval_summary.sql +6 -0
  598. package/src/migrations/0088_environments.sql +80 -0
  599. package/dist/catalog/upgrade-targets.d.ts +0 -56
  600. package/dist/catalog/upgrade-targets.js +0 -90
  601. package/dist/conversations/sandbox-status.d.ts +0 -24
  602. package/dist/conversations/sandbox-status.js +0 -52
  603. package/dist/extensions/org-config.controller.d.ts +0 -24
  604. package/dist/extensions/org-config.controller.js +0 -62
@@ -0,0 +1,789 @@
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
+ // The owner org's own catalog items (plugin scope phase 3, spec §14, rulings P3-2, P3-17 to
11
+ // P3-20; pre-flight F13 to F16, F19): 可共享, delete after a preview, and the one rule an owner
12
+ // delete and an org deletion share: an item another org uses is transferred to the platform, any
13
+ // other one is removed (a plugin's extension then taken out by `OwnedPluginCleanup`). Plugins and,
14
+ // since Task 8, the org's own skills and agent templates (promoted ones through their platform
15
+ // rows, ruling P3-3).
16
+ import { createHash } from "node:crypto";
17
+ import { getQueueToken } from "@nestjs/bullmq";
18
+ import { Inject, Injectable } from "@nestjs/common";
19
+ import { sql } from "kysely";
20
+ import { loadTemplates, readOwnTemplate, softDeleteTemplateIn } from "../agents/templates.js";
21
+ import { ApiError } from "../errors.js";
22
+ import { audit } from "../identity/audit.js";
23
+ import { addPlatformNotice } from "../inbox/platform-notices.js";
24
+ import { afterCommit } from "../infra/database/after-commit.js";
25
+ import { KernelDb } from "../infra/database/kernel-db.js";
26
+ import { TransactionHost } from "../infra/database/transaction-host.js";
27
+ import { Transactional } from "../infra/database/transactional.decorator.js";
28
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
29
+ import { OrgLock } from "../orgs/org-lock.js";
30
+ import { MAINTENANCE_QUEUE_NAME } from "../runtime/maintenance-queue.js";
31
+ import { SkillsService } from "../skills/skills.service.js";
32
+ import { CatalogService } from "./catalog.service.js";
33
+ import { CatalogScopeService } from "./catalog-scope.service.js";
34
+ import { notOwnedError } from "./component-promotion.js";
35
+ import { agentsUsing, COMPONENT_KINDS, componentOn, listedIn, loadComponents, loadScopeState, pluginFactsOf, switchOf, } from "./component-state.js";
36
+ import { ownedPluginCleanupJob } from "./job-ids.js";
37
+ import { orgsUsing } from "./ownership.js";
38
+ import { PluginInstaller } from "./plugin-install.js";
39
+ import { ScopeStillWanted } from "./scope-state.js";
40
+ import { narrowComponentOnUnshare } from "./unshare.js";
41
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
42
+ const notFound = () => new ApiError("catalog.item_not_found", "Catalog item not found");
43
+ const previewStale = () => new ApiError("catalog.preview_stale", "What deleting this plugin does has changed since the preview; preview it again and confirm the new hash");
44
+ const skillNotFound = () => new ApiError("skill.not_found", "Skill not found");
45
+ const componentNotFound = () => new ApiError("component.not_found", "Component not found");
46
+ const COMPONENT_TABLES = [
47
+ "platform_skills",
48
+ "platform_agent_templates",
49
+ "platform_connector_templates",
50
+ ];
51
+ const TABLE_OF = {
52
+ skill: "platform_skills",
53
+ agent_template: "platform_agent_templates",
54
+ connector_template: "platform_connector_templates",
55
+ };
56
+ /** The hash of a delete preview: sha256 over its outcome and sorted ids. */
57
+ function previewHashOf(p) {
58
+ return createHash("sha256")
59
+ .update(JSON.stringify({
60
+ outcome: p.outcome,
61
+ orgs: p.orgs.map((o) => o.id).sort(),
62
+ agents: p.agents.map((a) => a.id).sort(),
63
+ }))
64
+ .digest("hex");
65
+ }
66
+ /**
67
+ * The owner org's actions on the items it owns (P3-17: it toggles 可共享, switches the item off in
68
+ * its own org and deletes it; it never changes the scope or the list). The org admin is re-checked
69
+ * under the org row lock; another org's or a platform item -> 404. Stateless, shared by every
70
+ * replica.
71
+ */
72
+ let OwnedItems = class OwnedItems {
73
+ kdb;
74
+ orgLock;
75
+ catalog;
76
+ scope;
77
+ installer;
78
+ skills;
79
+ queue;
80
+ log;
81
+ txHost;
82
+ constructor(kdb, orgLock, catalog, scope,
83
+ /** The owner org's own uninstall of a removed plugin (ruling P3-41). */
84
+ installer,
85
+ /** The owner's org skill row, soft-deleted after its promoted platform row leaves it. */
86
+ skills,
87
+ /** The removed plugin's cleanup job (`owned-plugin-cleanup-<itemId>`, P3-20). */
88
+ queue, log, txHost) {
89
+ this.kdb = kdb;
90
+ this.orgLock = orgLock;
91
+ this.catalog = catalog;
92
+ this.scope = scope;
93
+ this.installer = installer;
94
+ this.skills = skills;
95
+ this.queue = queue;
96
+ this.log = log;
97
+ this.txHost = txHost;
98
+ }
99
+ get db() {
100
+ return this.kdb.db;
101
+ }
102
+ /**
103
+ * The owner org's 可共享 flag of its item, written on the item and (a plugin) every component
104
+ * row in one transaction (ruling P3-2; turning it off narrows as ruling P3-25 says). A skill or
105
+ * an agent template is named by the org row's id (`skills.manage` / `agents.manage`): only the
106
+ * org's own rows (ruling P3-6: not an agent's skill, not a copy of another owner's platform item:
107
+ * 409 `catalog.not_owned`); one it promoted writes its platform row too (pre-flight F16). Audits
108
+ * `catalog.shareable_changed`.
109
+ */
110
+ async setShareable(orgId, actor, ref, shareable, opts = {}) {
111
+ if (ref.kind !== "plugin") {
112
+ await this.setComponentShareable(orgId, actor, ref.kind, ref.id, shareable, opts);
113
+ return;
114
+ }
115
+ await this.orgLock.lockAndAuthorize(orgId, actor, "catalog.upload");
116
+ const item = await this.ownedRow(orgId, ref.id, true);
117
+ await this.scope.setShareable(item.id, shareable, actor);
118
+ await audit(this.db, {
119
+ actorAccountId: actor,
120
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
121
+ orgId,
122
+ action: "catalog.shareable_changed",
123
+ target: item.id,
124
+ detail: { name: item.name, shareable },
125
+ });
126
+ }
127
+ /** {@link setShareable} of an org skill or agent template (named by the org row's id). */
128
+ async setComponentShareable(orgId, actor, kind, id, shareable, opts) {
129
+ // the action that manages the kind (the component scope ACTION map; ruling P4-12 for
130
+ // templates, like their edit and delete)
131
+ await this.orgLock.lockAndAuthorize(orgId, actor, kind === "skill" ? "skills.manage" : "agents.manage");
132
+ const row = await this.ownedComponent(orgId, kind, id, true);
133
+ if (kind === "skill") {
134
+ await this.db.updateTable("skills").set({ shareable }).where("id", "=", row.id).execute();
135
+ }
136
+ else {
137
+ await this.db
138
+ .updateTable("agent_templates")
139
+ .set({ shareable })
140
+ .where("id", "=", row.id)
141
+ .execute();
142
+ }
143
+ // promoted: the platform row is the one every gate reads (ruling P3-2), written in this
144
+ // transaction; turning it off narrows an optional / all scope (ruling P3-25)
145
+ if (row.link !== null) {
146
+ const [c] = await loadComponents(this.db, kind, { ids: [row.link], forUpdate: true });
147
+ if (c) {
148
+ await this.db
149
+ .updateTable(TABLE_OF[kind])
150
+ .set({ shareable, updated_at: sql `now()` })
151
+ .where("id", "=", c.id)
152
+ .execute();
153
+ if (!shareable)
154
+ await narrowComponentOnUnshare(this.db, actor, c);
155
+ }
156
+ }
157
+ await audit(this.db, {
158
+ actorAccountId: actor,
159
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
160
+ orgId,
161
+ action: "catalog.shareable_changed",
162
+ target: row.id,
163
+ detail: {
164
+ kind,
165
+ name: row.name,
166
+ shareable,
167
+ ...(row.link !== null && { platformId: row.link }),
168
+ },
169
+ });
170
+ }
171
+ /** The other live orgs the item is on in (P3-18, {@link orgsUsing}), by name. */
172
+ async usedByOthers(ref) {
173
+ const row = ref.kind === "plugin"
174
+ ? await this.db
175
+ .selectFrom("catalog_items")
176
+ .select("owner_org_id")
177
+ .where("id", "=", ref.id)
178
+ .where("deleted_at", "is", null)
179
+ .executeTakeFirst()
180
+ : await this.db
181
+ .selectFrom(TABLE_OF[ref.kind])
182
+ .select("owner_org_id")
183
+ .where("id", "=", ref.id)
184
+ .where("deleted_at", "is", null)
185
+ .executeTakeFirst();
186
+ if (!row)
187
+ return [];
188
+ return orgsUsing(this.db, ref, { except: row.owner_org_id });
189
+ }
190
+ /**
191
+ * What deleting the org's skill `skillId` does (pre-flight F19, P3-19): one it promoted that
192
+ * another org uses is `transferred` (`orgs`: those orgs), else `removed`; `agents`: the org's
193
+ * agents that lose it (by its id, or its platform id). Not an org-scope skill of the org -> 404
194
+ * `skill.not_found`.
195
+ */
196
+ async previewSkillDelete(orgId, skillId) {
197
+ const row = await this.orgSkill(orgId, skillId, false);
198
+ const orgs = row.link === null
199
+ ? []
200
+ : await orgsUsing(this.db, { kind: "skill", id: row.link }, {
201
+ except: orgId,
202
+ });
203
+ const agents = await agentsUsing(this.db, orgId, "skill", [row.link ?? row.id]);
204
+ return {
205
+ outcome: orgs.length > 0 ? "transferred" : "removed",
206
+ orgs,
207
+ agents: agents
208
+ .map((a) => ({ id: a.id, name: a.name }))
209
+ .sort((a, b) => a.name.localeCompare(b.name) || a.id.localeCompare(b.id)),
210
+ };
211
+ }
212
+ /**
213
+ * The owner deletes its org skill (`DELETE orgs/:orgId/skills/:id`, `skills.manage` re-checked
214
+ * under the org row lock): one it promoted goes through {@link transferOrRemove} with reason
215
+ * `owner_deleted` (another org using it keeps it, now the platform's), then the org row is
216
+ * soft-deleted as before (audit `skill.deleted`). Not an org-scope skill of the org -> 404.
217
+ */
218
+ async deleteSkill(orgId, actor, skillId, opts = {}) {
219
+ await this.orgLock.lockAndAuthorize(orgId, actor, "skills.manage");
220
+ const row = await this.orgSkill(orgId, skillId, true);
221
+ const outcome = row.link === null
222
+ ? "removed"
223
+ : await this.transferOrRemove({ kind: "skill", id: row.link }, "owner_deleted", actor, opts);
224
+ await this.skills.deleteOrgSkillIn(orgId, row.id, actor, opts.actorTokenId);
225
+ return outcome;
226
+ }
227
+ /**
228
+ * What deleting the org's own agent template `id` does (ruling P4-12, as
229
+ * {@link previewSkillDelete}): one it promoted that another org uses is `transferred` (`orgs`:
230
+ * those orgs), else `removed`; `agents`: the org's agents whose roster loses it. Not the org's
231
+ * own -> 409 `catalog.not_owned`; missing -> 404 `component.not_found`.
232
+ */
233
+ async previewAgentTemplateDelete(orgId, id) {
234
+ const row = await this.ownedComponent(orgId, "agent_template", id, false);
235
+ const orgs = row.link === null
236
+ ? []
237
+ : await orgsUsing(this.db, { kind: "agent_template", id: row.link }, { except: orgId });
238
+ const agents = await agentsUsing(this.db, orgId, "agent_template", [row.link ?? row.id]);
239
+ return {
240
+ outcome: orgs.length > 0 ? "transferred" : "removed",
241
+ orgs,
242
+ agents: agents
243
+ .map((a) => ({ id: a.id, name: a.name }))
244
+ .sort((a, b) => a.name.localeCompare(b.name) || a.id.localeCompare(b.id)),
245
+ };
246
+ }
247
+ /**
248
+ * The owner deletes its org template (`DELETE orgs/:orgId/agent-templates/:id`, ruling P4-12;
249
+ * `agents.manage` re-checked under the org row lock), by the P3 owner rules: one it promoted
250
+ * goes through {@link transferOrRemove} with reason `owner_deleted` (another org using it keeps
251
+ * it, now the platform's, ruling P3-19), then the org row is soft-deleted (sub-agents already
252
+ * started keep their frozen definition; the roster skips it). Agents created from it are never
253
+ * touched (ruling P4-3). Audits `agent_template.deleted`. Not the org's own -> 409
254
+ * `catalog.not_owned`; missing -> 404.
255
+ */
256
+ async deleteAgentTemplate(orgId, actor, id, opts = {}) {
257
+ await this.orgLock.lockAndAuthorize(orgId, actor, "agents.manage");
258
+ const row = await this.ownedComponent(orgId, "agent_template", id, true);
259
+ const outcome = row.link === null
260
+ ? "removed"
261
+ : await this.transferOrRemove({ kind: "agent_template", id: row.link }, "owner_deleted", actor, opts);
262
+ await softDeleteTemplateIn(this.db, orgId, row.id);
263
+ await audit(this.db, {
264
+ actorAccountId: actor,
265
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
266
+ orgId,
267
+ action: "agent_template.deleted",
268
+ target: row.id,
269
+ detail: { name: row.name, outcome, ...(row.link !== null && { platformId: row.link }) },
270
+ });
271
+ return outcome;
272
+ }
273
+ /**
274
+ * The org-scope skill `skillId` of the org (`forUpdate`: row locked), with the platform row it
275
+ * promoted (`link`; a copy of another owner's platform skill has none here). Missing -> 404.
276
+ */
277
+ async orgSkill(orgId, skillId, forUpdate) {
278
+ let q = this.db
279
+ .selectFrom("skills as s")
280
+ .leftJoin("platform_skills as p", "p.id", "s.platform_skill_id")
281
+ .select(["s.id", "s.name", "s.platform_skill_id", "s.pinned_version", "p.owner_org_id"])
282
+ .where("s.id", "=", skillId)
283
+ .where("s.org_id", "=", orgId)
284
+ .where("s.scope", "=", "org")
285
+ .where("s.deleted_at", "is", null);
286
+ if (forUpdate)
287
+ q = q.forUpdate("s");
288
+ const r = await q.executeTakeFirst();
289
+ if (!r)
290
+ throw skillNotFound();
291
+ const promoted = r.platform_skill_id !== null && r.pinned_version === null && r.owner_org_id === orgId;
292
+ return { id: r.id, name: r.name, link: promoted ? r.platform_skill_id : null };
293
+ }
294
+ /**
295
+ * The org's own skill or agent template `id` (ruling P3-6), locked with `forUpdate`: missing
296
+ * (or another org's) -> 404; an agent's own skill, or a copy linked to a platform item another
297
+ * owner has (or pinned to one) -> 409 `catalog.not_owned`. `link`: the platform row it promoted.
298
+ */
299
+ async ownedComponent(orgId, kind, id, forUpdate) {
300
+ if (kind === "agent_template") {
301
+ // the one predicate of the template routes (rulings P3-6, P4-13)
302
+ const t = await readOwnTemplate(this.db, orgId, id, forUpdate);
303
+ if (t === undefined) {
304
+ // a template the org uses but has no row of (another owner's platform template)
305
+ const used = (await loadTemplates(this.db, orgId, [id])).get(id);
306
+ if (used)
307
+ throw notOwnedError(used.name);
308
+ throw componentNotFound();
309
+ }
310
+ if (!("link" in t))
311
+ throw notOwnedError(t.name);
312
+ return { id: t.id, name: t.name, link: t.link };
313
+ }
314
+ let q = this.db
315
+ .selectFrom("skills as s")
316
+ .leftJoin("platform_skills as p", "p.id", "s.platform_skill_id")
317
+ .select([
318
+ "s.id",
319
+ "s.name",
320
+ "s.scope",
321
+ "s.platform_skill_id as link",
322
+ "s.pinned_version",
323
+ "s.catalog_item_id",
324
+ "p.owner_org_id",
325
+ ])
326
+ .where("s.id", "=", id)
327
+ .where("s.org_id", "=", orgId)
328
+ .where("s.deleted_at", "is", null);
329
+ if (forUpdate)
330
+ q = q.forUpdate("s");
331
+ const r = await q.executeTakeFirst();
332
+ if (!r)
333
+ throw skillNotFound();
334
+ if (r.scope !== "org")
335
+ throw notOwnedError(`Skill ${r.name} belongs to an agent and`);
336
+ // only content the org created itself (ruling P3-46): no plugin provenance
337
+ if (r.catalog_item_id !== null)
338
+ throw notOwnedError(r.name);
339
+ if (r.link === null)
340
+ return { id: r.id, name: r.name, link: null };
341
+ if (r.pinned_version !== null || r.owner_org_id !== orgId)
342
+ throw notOwnedError(r.name);
343
+ return { id: r.id, name: r.name, link: r.link };
344
+ }
345
+ /** The preview of deleting the org's own plugin (nothing written). */
346
+ async previewDelete(orgId, itemId) {
347
+ return this.computeDelete(orgId, await this.ownedRow(orgId, itemId, false));
348
+ }
349
+ /**
350
+ * Deletes the org's own plugin after its preview (P3-19): the preview recomputed under the item
351
+ * row lock must give `previewHash` (else 409 `catalog.preview_stale`), then
352
+ * {@link transferOrRemove} with reason `owner_deleted`.
353
+ */
354
+ async delete(orgId, actor, itemId, previewHash, opts = {}) {
355
+ await this.orgLock.lockAndAuthorize(orgId, actor, "catalog.upload");
356
+ const item = await this.ownedRow(orgId, itemId, true);
357
+ if ((await this.computeDelete(orgId, item)).previewHash !== previewHash)
358
+ throw previewStale();
359
+ return this.transferOrRemove({ kind: "plugin", id: itemId }, "owner_deleted", actor, opts);
360
+ }
361
+ /**
362
+ * The owner leaves its item, in the caller's transaction (P3-19, P3-20; pre-flight F14, F15).
363
+ * Another live org uses it ({@link orgsUsing}) -> `transferred`: the item and its components
364
+ * become platform-owned, a pending version is cleared, `shown_to_others` is turned off when the
365
+ * owner had not made it shareable (no exposure the owner switched off), the former owner leaves
366
+ * the list and its switches (an `all` scope, the item's or a component's own, is narrowed to
367
+ * `named` = the orgs using it, ruling P3-39; an `optional` item stays `optional`, ruling P3-40:
368
+ * it passed the share gate already, so every org could see it, and the former owner is then an
369
+ * ordinary org that may switch it on again), written
370
+ * directly rather than through the guarded scope writer (ruling P3-27); platform notice
371
+ * `ownership_transferred`, audit `catalog.ownership_transferred`, the scope sync enqueued after
372
+ * the commit (it uninstalls the former owner's install). Otherwise -> `removed`: the soft delete
373
+ * of `catalog.remove` ({@link CatalogService.removeIn}) and, after the commit, the cleanup job
374
+ * `owned-plugin-cleanup-<itemId>` that takes its extension out; an owner delete
375
+ * (`owner_deleted`) also uninstalls it in the owner org through the normal uninstall, keeping the
376
+ * connectors it created as the org's own (ruling P3-41). A first upload still waiting is never
377
+ * transferred. A gone or platform item -> 404.
378
+ */
379
+ async transferOrRemove(ref, reason, actor, opts = {}) {
380
+ if (ref.kind !== "plugin")
381
+ return this.transferOrRemoveComponent(ref.kind, ref.id, reason, actor, opts);
382
+ const t = this.db;
383
+ const item = await t
384
+ .selectFrom("catalog_items")
385
+ .select(["id", "name", "owner_org_id", "shareable", "scope", "awaiting_confirmation"])
386
+ .where("id", "=", ref.id)
387
+ .where("deleted_at", "is", null)
388
+ .forUpdate()
389
+ .executeTakeFirst();
390
+ if (!item || item.owner_org_id === null)
391
+ throw notFound();
392
+ const owner = item.owner_org_id;
393
+ const others = item.awaiting_confirmation ? [] : await orgsUsing(t, ref, { except: owner });
394
+ if (others.length === 0) {
395
+ await this.catalog.removeIn(actor, item.id, { ...opts, reason });
396
+ if (reason === "owner_deleted")
397
+ await this.uninstallInOwner(owner, actor, item.id, opts);
398
+ afterCommit(() => this.enqueueCleanup(item.id));
399
+ return "removed";
400
+ }
401
+ // Read before anything changes: where each own-scope `all` component is on (P3-39)
402
+ const narrow = [];
403
+ for (const kind of COMPONENT_KINDS) {
404
+ for (const c of await loadComponents(t, kind, { itemId: item.id, forUpdate: true })) {
405
+ if (c.scopeMode === "own" && c.scope === "all") {
406
+ narrow.push({ c, orgs: await this.componentOrgsOn(c, owner) });
407
+ }
408
+ }
409
+ }
410
+ const now = sql `now()`;
411
+ await t
412
+ .updateTable("catalog_items")
413
+ .set({
414
+ owner_org_id: null,
415
+ pending_version: null,
416
+ pending_by: null,
417
+ pending_at: null,
418
+ ...(!item.shareable && { shown_to_others: false }),
419
+ ...(item.scope === "all" && { scope: "named" }),
420
+ scope_version: sql `scope_version + 1`,
421
+ updated_at: now,
422
+ })
423
+ .where("id", "=", item.id)
424
+ .execute();
425
+ if (item.scope === "all") {
426
+ await t.deleteFrom("catalog_item_scope_orgs").where("item_id", "=", item.id).execute();
427
+ await t
428
+ .insertInto("catalog_item_scope_orgs")
429
+ .values(others.map((o) => ({ item_id: item.id, org_id: o.id })))
430
+ .execute();
431
+ }
432
+ else {
433
+ await t
434
+ .deleteFrom("catalog_item_scope_orgs")
435
+ .where("item_id", "=", item.id)
436
+ .where("org_id", "=", owner)
437
+ .execute();
438
+ }
439
+ await t
440
+ .deleteFrom("catalog_item_org_switches")
441
+ .where("item_id", "=", item.id)
442
+ .where("org_id", "=", owner)
443
+ .execute();
444
+ for (const table of COMPONENT_TABLES) {
445
+ await t
446
+ .updateTable(table)
447
+ .set({ owner_org_id: null, ...(!item.shareable && { shown_to_others: false }) })
448
+ .where("catalog_item_id", "=", item.id)
449
+ .execute();
450
+ }
451
+ for (const kind of COMPONENT_KINDS) {
452
+ const ids = (await loadComponents(t, kind, { itemId: item.id })).map((c) => c.id);
453
+ if (ids.length === 0)
454
+ continue;
455
+ for (const table of ["component_scope_orgs", "component_org_switches"]) {
456
+ await t
457
+ .deleteFrom(table)
458
+ .where("kind", "=", kind)
459
+ .where("component_id", "in", ids)
460
+ .where("org_id", "=", owner)
461
+ .execute();
462
+ }
463
+ }
464
+ for (const { c, orgs } of narrow) {
465
+ await t
466
+ .updateTable(TABLE_OF[c.kind])
467
+ .set({ scope: "named", scope_version: sql `scope_version + 1`, updated_at: now })
468
+ .where("id", "=", c.id)
469
+ .execute();
470
+ await t
471
+ .deleteFrom("component_scope_orgs")
472
+ .where("kind", "=", c.kind)
473
+ .where("component_id", "=", c.id)
474
+ .execute();
475
+ if (orgs.length > 0) {
476
+ await t
477
+ .insertInto("component_scope_orgs")
478
+ .values(orgs.map((org_id) => ({ kind: c.kind, component_id: c.id, org_id })))
479
+ .execute();
480
+ }
481
+ await audit(t, {
482
+ actorAccountId: actor,
483
+ action: "component.scope_changed",
484
+ target: c.id,
485
+ detail: {
486
+ kind: c.kind,
487
+ name: c.name,
488
+ plugin: c.plugin,
489
+ from: { scopeMode: "own", scope: "all", orgs: [] },
490
+ to: { scopeMode: "own", scope: "named", orgs },
491
+ reason: "ownership_transferred",
492
+ },
493
+ });
494
+ }
495
+ const from = await t
496
+ .selectFrom("orgs")
497
+ .select(["id", "name"])
498
+ .where("id", "=", owner)
499
+ .executeTakeFirst();
500
+ await addPlatformNotice(t, "ownership_transferred", {
501
+ ref,
502
+ name: item.name,
503
+ fromOrg: from ?? { id: owner, name: owner },
504
+ reason,
505
+ usedBy: others.length,
506
+ });
507
+ await audit(t, {
508
+ actorAccountId: actor,
509
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
510
+ orgId: owner,
511
+ action: "catalog.ownership_transferred",
512
+ target: item.id,
513
+ detail: { name: item.name, fromOrgId: owner, reason, usedBy: others.map((o) => o.id) },
514
+ });
515
+ afterCommit(() => this.scope.enqueueSync(item.id));
516
+ return "transferred";
517
+ }
518
+ /**
519
+ * An org is deleted (P3-20), in `OrgsService.softDeleteIn`'s transaction (PG writes only; the
520
+ * org row is already marked deleted, so it counts as no user): the org's live plugins and the
521
+ * platform skills and agent templates it promoted (ruling P3-3) are locked `FOR UPDATE`, then
522
+ * each goes through {@link transferOrRemove} with reason `org_deleted`. A first upload still
523
+ * waiting is removed and its extension name released here (nothing is installed under it,
524
+ * pre-flight F10); a pending new version of a transferred plugin is cleared; a removed plugin's
525
+ * extension is taken out by the cleanup job after the commit. The org's unpromoted rows (its own
526
+ * skills, copies, installs) are left: they go with the org as before. Must not inject
527
+ * `OrgsService` (it calls this).
528
+ */
529
+ async onOrgDeleted(orgId, actor, opts = {}) {
530
+ const t = this.db;
531
+ const plugins = await t
532
+ .selectFrom("catalog_items")
533
+ .select("id")
534
+ .where("owner_org_id", "=", orgId)
535
+ .where("deleted_at", "is", null)
536
+ .orderBy("id")
537
+ .forUpdate()
538
+ .execute();
539
+ // promoted rows only: a plugin's components (`catalog_item_id` set) follow their plugin
540
+ const skills = await t
541
+ .selectFrom("platform_skills")
542
+ .select("id")
543
+ .where("owner_org_id", "=", orgId)
544
+ .where("catalog_item_id", "is", null)
545
+ .where("deleted_at", "is", null)
546
+ .orderBy("id")
547
+ .forUpdate()
548
+ .execute();
549
+ const templates = await t
550
+ .selectFrom("platform_agent_templates")
551
+ .select("id")
552
+ .where("owner_org_id", "=", orgId)
553
+ .where("catalog_item_id", "is", null)
554
+ .where("deleted_at", "is", null)
555
+ .orderBy("id")
556
+ .forUpdate()
557
+ .execute();
558
+ const refs = [
559
+ ...plugins.map((r) => ({ kind: "plugin", id: r.id })),
560
+ ...skills.map((r) => ({ kind: "skill", id: r.id })),
561
+ ...templates.map((r) => ({ kind: "agent_template", id: r.id })),
562
+ ];
563
+ const counts = { transferred: 0, removed: 0 };
564
+ for (const ref of refs) {
565
+ counts[await this.transferOrRemove(ref, "org_deleted", actor, opts)] += 1;
566
+ }
567
+ return counts;
568
+ }
569
+ /**
570
+ * {@link transferOrRemove} of a platform skill or agent template the org promoted (ruling P3-3;
571
+ * `id` its platform id): another live org uses it -> `transferred`: platform-owned, not shown
572
+ * when the owner had not made it shareable, an `all` scope narrowed to `named` = the orgs using
573
+ * it (ruling P3-39), the former owner off its list and switches, platform notice
574
+ * `ownership_transferred`, audit `catalog.ownership_transferred`. Otherwise `removed`: the
575
+ * platform row is soft-deleted (audit `component.removed`). The owner's org row is the caller's
576
+ * (an owner delete soft-deletes it). Gone or platform-owned -> 404.
577
+ */
578
+ async transferOrRemoveComponent(kind, id, reason, actor, opts) {
579
+ const t = this.db;
580
+ const [c] = await loadComponents(t, kind, { ids: [id], forUpdate: true });
581
+ if (!c || c.ownerOrgId === null)
582
+ throw componentNotFound();
583
+ const owner = c.ownerOrgId;
584
+ const ref = { kind, id };
585
+ const others = await orgsUsing(t, ref, { except: owner });
586
+ const now = sql `now()`;
587
+ const table = TABLE_OF[kind];
588
+ if (others.length === 0) {
589
+ await t
590
+ .updateTable(table)
591
+ .set({ deleted_at: now, updated_at: now })
592
+ .where("id", "=", id)
593
+ .execute();
594
+ await audit(t, {
595
+ actorAccountId: actor,
596
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
597
+ orgId: owner,
598
+ action: "component.removed",
599
+ target: id,
600
+ detail: { kind, name: c.name, reason },
601
+ });
602
+ return "removed";
603
+ }
604
+ // read before anything changes: where an own `all` scope is on (P3-39)
605
+ const narrowTo = c.scopeMode === "own" && c.scope === "all" ? await this.componentOrgsOn(c, owner) : null;
606
+ await t
607
+ .updateTable(table)
608
+ .set({
609
+ owner_org_id: null,
610
+ ...(!c.shareable && { shown_to_others: false }),
611
+ ...(narrowTo !== null && {
612
+ scope: "named",
613
+ scope_version: sql `scope_version + 1`,
614
+ }),
615
+ updated_at: now,
616
+ })
617
+ .where("id", "=", id)
618
+ .execute();
619
+ if (narrowTo !== null) {
620
+ await t
621
+ .deleteFrom("component_scope_orgs")
622
+ .where("kind", "=", kind)
623
+ .where("component_id", "=", id)
624
+ .execute();
625
+ if (narrowTo.length > 0) {
626
+ await t
627
+ .insertInto("component_scope_orgs")
628
+ .values(narrowTo.map((org_id) => ({ kind, component_id: id, org_id })))
629
+ .execute();
630
+ }
631
+ }
632
+ for (const list of ["component_scope_orgs", "component_org_switches"]) {
633
+ await t
634
+ .deleteFrom(list)
635
+ .where("kind", "=", kind)
636
+ .where("component_id", "=", id)
637
+ .where("org_id", "=", owner)
638
+ .execute();
639
+ }
640
+ const from = await t
641
+ .selectFrom("orgs")
642
+ .select(["id", "name"])
643
+ .where("id", "=", owner)
644
+ .executeTakeFirst();
645
+ await addPlatformNotice(t, "ownership_transferred", {
646
+ ref,
647
+ name: c.name,
648
+ fromOrg: from ?? { id: owner, name: owner },
649
+ reason,
650
+ usedBy: others.length,
651
+ });
652
+ await audit(t, {
653
+ actorAccountId: actor,
654
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
655
+ orgId: owner,
656
+ action: "catalog.ownership_transferred",
657
+ target: id,
658
+ detail: {
659
+ kind,
660
+ name: c.name,
661
+ fromOrgId: owner,
662
+ reason,
663
+ usedBy: others.map((o) => o.id),
664
+ ...(narrowTo !== null && { narrowedTo: narrowTo }),
665
+ },
666
+ });
667
+ return "transferred";
668
+ }
669
+ /** The live orgs other than `except` where component `c` is on now ({@link componentOn}). */
670
+ async componentOrgsOn(c, except) {
671
+ const st = await loadScopeState(this.db, c.kind, [c]);
672
+ const orgs = await this.db
673
+ .selectFrom("orgs")
674
+ .select("id")
675
+ .where("deleted_at", "is", null)
676
+ .where("id", "!=", except)
677
+ .orderBy("id")
678
+ .execute();
679
+ return orgs
680
+ .map((o) => o.id)
681
+ .filter((o) => componentOn(c, pluginFactsOf(st, c.itemId, o), listedIn(st, c.id, o), switchOf(st, c.id, o)));
682
+ }
683
+ /**
684
+ * The owner org's live install of a removed plugin, uninstalled in the caller's transaction
685
+ * through the normal uninstall (ruling P3-41): `via: "scope"` (the item is gone, so no scope
686
+ * wants it), which keeps the connectors it created as the org's own. One that another install
687
+ * still depends on, or one still installing, stays (logged).
688
+ */
689
+ async uninstallInOwner(owner, actor, itemId, opts) {
690
+ const live = await this.db
691
+ .selectFrom("plugin_installs")
692
+ .select("id")
693
+ .where("org_id", "=", owner)
694
+ .where("item_id", "=", itemId)
695
+ .where("status", "=", "installed")
696
+ .executeTakeFirst();
697
+ if (live === undefined)
698
+ return;
699
+ try {
700
+ await this.installer.uninstall(owner, actor, live.id, {
701
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
702
+ via: "scope",
703
+ });
704
+ }
705
+ catch (e) {
706
+ if (!(e instanceof ScopeStillWanted))
707
+ throw e;
708
+ this.log.info("the removed plugin's install stays: another install depends on it", {
709
+ orgId: owner,
710
+ itemId,
711
+ });
712
+ }
713
+ }
714
+ /** Enqueues the removed plugin's cleanup; a failure only warns (the daily sweep repairs it). */
715
+ async enqueueCleanup(itemId) {
716
+ const job = ownedPluginCleanupJob(itemId);
717
+ try {
718
+ await this.queue.add(job.name, job.data, job.opts);
719
+ }
720
+ catch (err) {
721
+ this.log.warn("enqueueing the owned plugin cleanup failed", { itemId, err });
722
+ }
723
+ }
724
+ async computeDelete(orgId, item) {
725
+ const ref = { kind: "plugin", id: item.id };
726
+ const orgs = item.awaiting_confirmation ? [] : await orgsUsing(this.db, ref, { except: orgId });
727
+ const agents = new Map();
728
+ for (const kind of COMPONENT_KINDS) {
729
+ const ids = (await loadComponents(this.db, kind, { itemId: item.id })).map((c) => c.id);
730
+ for (const a of await agentsUsing(this.db, orgId, kind, ids))
731
+ agents.set(a.id, a.name);
732
+ }
733
+ const p = {
734
+ outcome: orgs.length > 0 ? "transferred" : "removed",
735
+ orgs,
736
+ agents: [...agents]
737
+ .map(([id, name]) => ({ id, name }))
738
+ .sort((a, b) => a.name.localeCompare(b.name) || a.id.localeCompare(b.id)),
739
+ };
740
+ return { ...p, previewHash: previewHashOf(p) };
741
+ }
742
+ /** The org's own live plugin (`forUpdate`: row locked); another org's or a platform one -> 404. */
743
+ async ownedRow(orgId, itemId, forUpdate) {
744
+ if (!UUID_RE.test(itemId))
745
+ throw notFound();
746
+ let q = this.db
747
+ .selectFrom("catalog_items")
748
+ .select(["id", "name", "owner_org_id", "shareable", "scope", "awaiting_confirmation"])
749
+ .where("id", "=", itemId)
750
+ .where("deleted_at", "is", null);
751
+ if (forUpdate)
752
+ q = q.forUpdate();
753
+ const row = await q.executeTakeFirst();
754
+ if (!row || row.owner_org_id !== orgId)
755
+ throw notFound();
756
+ return row;
757
+ }
758
+ };
759
+ __decorate([
760
+ Transactional()
761
+ ], OwnedItems.prototype, "setShareable", null);
762
+ __decorate([
763
+ Transactional()
764
+ ], OwnedItems.prototype, "deleteSkill", null);
765
+ __decorate([
766
+ Transactional()
767
+ ], OwnedItems.prototype, "deleteAgentTemplate", null);
768
+ __decorate([
769
+ Transactional()
770
+ ], OwnedItems.prototype, "delete", null);
771
+ __decorate([
772
+ Transactional({ propagation: "mandatory" })
773
+ ], OwnedItems.prototype, "transferOrRemove", null);
774
+ __decorate([
775
+ Transactional({ propagation: "mandatory" })
776
+ ], OwnedItems.prototype, "onOrgDeleted", null);
777
+ OwnedItems = __decorate([
778
+ Injectable(),
779
+ __param(0, Inject(KernelDb)),
780
+ __param(1, Inject(OrgLock)),
781
+ __param(2, Inject(CatalogService)),
782
+ __param(3, Inject(CatalogScopeService)),
783
+ __param(4, Inject(PluginInstaller)),
784
+ __param(5, Inject(SkillsService)),
785
+ __param(6, Inject(getQueueToken(MAINTENANCE_QUEUE_NAME))),
786
+ __param(7, Inject(KERNEL_LOGGER)),
787
+ __param(8, Inject(TransactionHost))
788
+ ], OwnedItems);
789
+ export { OwnedItems };