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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +39 -13
  3. package/dist/admin/admin.controller.js +33 -17
  4. package/dist/admin/extensions.controller.d.ts +16 -2
  5. package/dist/admin/extensions.controller.js +26 -6
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +16 -0
  13. package/dist/agents/agent-lookup.js +11 -0
  14. package/dist/agents/agents.controller.d.ts +76 -1
  15. package/dist/agents/agents.controller.js +90 -11
  16. package/dist/agents/agents.module.d.ts +4 -1
  17. package/dist/agents/agents.module.js +32 -6
  18. package/dist/agents/agents.service.d.ts +51 -22
  19. package/dist/agents/agents.service.js +172 -70
  20. package/dist/agents/definition.d.ts +49 -0
  21. package/dist/agents/definition.js +45 -0
  22. package/dist/agents/from-template.d.ts +106 -0
  23. package/dist/agents/from-template.js +649 -0
  24. package/dist/agents/from-template.service.d.ts +60 -0
  25. package/dist/agents/from-template.service.js +161 -0
  26. package/dist/agents/org-templates.d.ts +176 -0
  27. package/dist/agents/org-templates.js +827 -0
  28. package/dist/agents/pending-connector-requests.d.ts +77 -0
  29. package/dist/agents/pending-connector-requests.js +215 -0
  30. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  31. package/dist/agents/pending-connectors.controller.js +91 -0
  32. package/dist/agents/pending-connectors.service.d.ts +62 -0
  33. package/dist/agents/pending-connectors.service.js +282 -0
  34. package/dist/agents/templates.controller.d.ts +86 -5
  35. package/dist/agents/templates.controller.js +171 -7
  36. package/dist/agents/templates.d.ts +127 -23
  37. package/dist/agents/templates.js +475 -52
  38. package/dist/background/background.module.js +8 -1
  39. package/dist/background/finish.d.ts +3 -2
  40. package/dist/background/launch-lock.d.ts +4 -3
  41. package/dist/background/launch-lock.js +4 -3
  42. package/dist/background/poll.job.d.ts +9 -6
  43. package/dist/background/poll.job.js +30 -22
  44. package/dist/background/session.d.ts +13 -2
  45. package/dist/background/session.js +13 -0
  46. package/dist/background/stop.d.ts +12 -6
  47. package/dist/background/stop.js +57 -39
  48. package/dist/background/store.d.ts +18 -6
  49. package/dist/background/store.js +12 -6
  50. package/dist/background/tasks.service.d.ts +15 -5
  51. package/dist/background/tasks.service.js +42 -17
  52. package/dist/background/wake-rules.d.ts +27 -18
  53. package/dist/background/wake-rules.js +52 -22
  54. package/dist/background/wake.d.ts +13 -11
  55. package/dist/background/wake.js +20 -14
  56. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  57. package/dist/catalog/admin-catalog.controller.js +213 -42
  58. package/dist/catalog/catalog-content.d.ts +58 -32
  59. package/dist/catalog/catalog-content.js +34 -8
  60. package/dist/catalog/catalog-import.module.d.ts +7 -0
  61. package/dist/catalog/catalog-import.module.js +60 -0
  62. package/dist/catalog/catalog-items.d.ts +111 -7
  63. package/dist/catalog/catalog-items.js +279 -13
  64. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  65. package/dist/catalog/catalog-scope.service.js +1116 -0
  66. package/dist/catalog/catalog.module.d.ts +7 -9
  67. package/dist/catalog/catalog.module.js +41 -31
  68. package/dist/catalog/catalog.service.d.ts +101 -29
  69. package/dist/catalog/catalog.service.js +104 -106
  70. package/dist/catalog/cli.d.ts +11 -1
  71. package/dist/catalog/cli.js +26 -1
  72. package/dist/catalog/component-promotion.d.ts +96 -0
  73. package/dist/catalog/component-promotion.js +395 -0
  74. package/dist/catalog/component-scope.controller.d.ts +152 -0
  75. package/dist/catalog/component-scope.controller.js +287 -0
  76. package/dist/catalog/component-scope.service.d.ts +303 -0
  77. package/dist/catalog/component-scope.service.js +936 -0
  78. package/dist/catalog/component-state.d.ts +174 -0
  79. package/dist/catalog/component-state.js +437 -0
  80. package/dist/catalog/job-ids.d.ts +30 -0
  81. package/dist/catalog/job-ids.js +25 -0
  82. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  83. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  84. package/dist/catalog/marketplaces.controller.js +56 -7
  85. package/dist/catalog/marketplaces.service.d.ts +54 -14
  86. package/dist/catalog/marketplaces.service.js +71 -22
  87. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  88. package/dist/catalog/org-catalog.controller.js +181 -65
  89. package/dist/catalog/org-catalog.service.d.ts +65 -33
  90. package/dist/catalog/org-catalog.service.js +324 -157
  91. package/dist/catalog/org-extension-switch.d.ts +41 -0
  92. package/dist/catalog/org-extension-switch.js +115 -0
  93. package/dist/catalog/org-extension.controller.d.ts +119 -0
  94. package/dist/catalog/org-extension.controller.js +266 -0
  95. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  96. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  97. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  98. package/dist/catalog/org-plugin-uploads.js +116 -0
  99. package/dist/catalog/owned-items.d.ts +184 -0
  100. package/dist/catalog/owned-items.js +789 -0
  101. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  102. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  103. package/dist/catalog/ownership.d.ts +172 -0
  104. package/dist/catalog/ownership.js +326 -0
  105. package/dist/catalog/platform-components.d.ts +221 -0
  106. package/dist/catalog/platform-components.js +761 -0
  107. package/dist/catalog/platform-migration.d.ts +115 -0
  108. package/dist/catalog/platform-migration.js +582 -0
  109. package/dist/catalog/plugin-import.d.ts +178 -34
  110. package/dist/catalog/plugin-import.js +622 -82
  111. package/dist/catalog/plugin-install.d.ts +185 -41
  112. package/dist/catalog/plugin-install.js +758 -126
  113. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  114. package/dist/catalog/plugin-upgrade.js +1147 -1136
  115. package/dist/catalog/request-rules.d.ts +65 -0
  116. package/dist/catalog/request-rules.js +217 -0
  117. package/dist/catalog/requests.service.d.ts +193 -118
  118. package/dist/catalog/requests.service.js +526 -343
  119. package/dist/catalog/reserved-names.d.ts +8 -0
  120. package/dist/catalog/reserved-names.js +42 -0
  121. package/dist/catalog/scope-orgs.d.ts +21 -0
  122. package/dist/catalog/scope-orgs.js +67 -0
  123. package/dist/catalog/scope-state.d.ts +35 -0
  124. package/dist/catalog/scope-state.js +87 -0
  125. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  126. package/dist/catalog/scope-sync-workers.js +29 -0
  127. package/dist/catalog/scope-sync.d.ts +176 -0
  128. package/dist/catalog/scope-sync.js +576 -0
  129. package/dist/catalog/scope.d.ts +42 -0
  130. package/dist/catalog/scope.js +42 -0
  131. package/dist/catalog/unshare.d.ts +22 -0
  132. package/dist/catalog/unshare.js +118 -0
  133. package/dist/channels/actions.js +1 -0
  134. package/dist/channels/cards.js +20 -2
  135. package/dist/channels/channels.module.js +2 -0
  136. package/dist/channels/inbound.d.ts +9 -1
  137. package/dist/channels/inbound.js +67 -5
  138. package/dist/channels/phrases.d.ts +35 -0
  139. package/dist/channels/phrases.js +29 -0
  140. package/dist/config/docs.js +3 -1
  141. package/dist/config/schema.d.ts +6 -2
  142. package/dist/config/schema.js +46 -22
  143. package/dist/conversations/access.d.ts +6 -4
  144. package/dist/conversations/access.js +27 -5
  145. package/dist/conversations/agent-tree.d.ts +46 -0
  146. package/dist/conversations/agent-tree.js +92 -0
  147. package/dist/conversations/conversations.controller.d.ts +43 -18
  148. package/dist/conversations/conversations.controller.js +79 -38
  149. package/dist/conversations/conversations.module.d.ts +1 -1
  150. package/dist/conversations/conversations.module.js +7 -7
  151. package/dist/conversations/conversations.service.d.ts +69 -12
  152. package/dist/conversations/conversations.service.js +106 -27
  153. package/dist/conversations/environment-status.d.ts +24 -0
  154. package/dist/conversations/environment-status.js +71 -0
  155. package/dist/conversations/event-log.d.ts +20 -5
  156. package/dist/conversations/event-log.js +60 -0
  157. package/dist/conversations/events.d.ts +84 -2
  158. package/dist/conversations/events.js +91 -17
  159. package/dist/conversations/queue.service.d.ts +1 -1
  160. package/dist/conversations/queue.service.js +5 -0
  161. package/dist/conversations/titles.d.ts +5 -3
  162. package/dist/conversations/titles.js +21 -8
  163. package/dist/conversations/tree.d.ts +17 -0
  164. package/dist/conversations/tree.js +42 -0
  165. package/dist/ctx/create-ctx.d.ts +5 -0
  166. package/dist/ctx/create-ctx.js +15 -5
  167. package/dist/db/kernel-schema.d.ts +362 -18
  168. package/dist/environments/access.d.ts +41 -0
  169. package/dist/environments/access.js +77 -0
  170. package/dist/environments/conversation-environments.d.ts +61 -0
  171. package/dist/environments/conversation-environments.js +170 -0
  172. package/dist/environments/dto.d.ts +25 -0
  173. package/dist/environments/dto.js +12 -0
  174. package/dist/environments/environments.controller.d.ts +33 -0
  175. package/dist/environments/environments.controller.js +110 -0
  176. package/dist/environments/environments.module.d.ts +8 -0
  177. package/dist/environments/environments.module.js +27 -0
  178. package/dist/environments/environments.service.d.ts +153 -0
  179. package/dist/environments/environments.service.js +541 -0
  180. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  181. package/dist/environments/legacy-cleanup.job.js +141 -0
  182. package/dist/errors.d.ts +82 -2
  183. package/dist/errors.js +82 -2
  184. package/dist/evals/reconstruct.d.ts +18 -9
  185. package/dist/evals/reconstruct.js +26 -7
  186. package/dist/evals/run-replay.d.ts +4 -2
  187. package/dist/evals/run-replay.js +16 -4
  188. package/dist/evals/step-replay.d.ts +2 -5
  189. package/dist/evals/step-replay.js +1 -1
  190. package/dist/evals/trajectory.service.d.ts +8 -3
  191. package/dist/evals/trajectory.service.js +26 -14
  192. package/dist/evals/worker.d.ts +5 -5
  193. package/dist/evals/worker.js +9 -3
  194. package/dist/extensions/admin-ops.d.ts +36 -10
  195. package/dist/extensions/admin-ops.js +65 -42
  196. package/dist/extensions/admin-view.d.ts +37 -10
  197. package/dist/extensions/admin-view.js +103 -20
  198. package/dist/extensions/bootstrap.d.ts +17 -4
  199. package/dist/extensions/bootstrap.js +70 -9
  200. package/dist/extensions/cli.d.ts +12 -0
  201. package/dist/extensions/cli.js +11 -2
  202. package/dist/extensions/deployment-config.d.ts +28 -5
  203. package/dist/extensions/deployment-config.js +48 -7
  204. package/dist/extensions/effective-config.d.ts +127 -0
  205. package/dist/extensions/effective-config.js +368 -0
  206. package/dist/extensions/extensions.module.js +8 -2
  207. package/dist/extensions/hooks.d.ts +37 -4
  208. package/dist/extensions/hooks.js +82 -16
  209. package/dist/extensions/host.d.ts +19 -1
  210. package/dist/extensions/host.js +30 -7
  211. package/dist/extensions/installs.d.ts +20 -8
  212. package/dist/extensions/installs.js +37 -15
  213. package/dist/extensions/org-config.d.ts +75 -6
  214. package/dist/extensions/org-config.js +184 -32
  215. package/dist/extensions/org-levels.d.ts +37 -0
  216. package/dist/extensions/org-levels.js +71 -0
  217. package/dist/extensions/org-overrides.d.ts +151 -0
  218. package/dist/extensions/org-overrides.js +524 -0
  219. package/dist/extensions/permission-view.d.ts +16 -4
  220. package/dist/extensions/permission-view.js +4 -4
  221. package/dist/extensions/plugin-items.d.ts +21 -0
  222. package/dist/extensions/plugin-items.js +42 -0
  223. package/dist/extensions/point-defaults.d.ts +12 -5
  224. package/dist/extensions/point-defaults.js +37 -9
  225. package/dist/extensions/resolve.d.ts +5 -1
  226. package/dist/extensions/resolve.js +15 -2
  227. package/dist/files/previewers.d.ts +8 -1
  228. package/dist/files/previewers.js +35 -6
  229. package/dist/http/api.module.js +23 -3
  230. package/dist/http/app.d.ts +11 -2
  231. package/dist/http/app.js +31 -5
  232. package/dist/identity/accounts.d.ts +29 -29
  233. package/dist/identity/accounts.js +47 -47
  234. package/dist/identity/audit.d.ts +2 -1
  235. package/dist/identity/auth.guard.d.ts +13 -5
  236. package/dist/identity/auth.guard.js +26 -9
  237. package/dist/identity/identity.module.d.ts +1 -1
  238. package/dist/identity/identity.module.js +4 -4
  239. package/dist/identity/me.controller.js +1 -1
  240. package/dist/identity/principal.d.ts +3 -3
  241. package/dist/identity/principal.js +3 -3
  242. package/dist/identity/settings.d.ts +22 -11
  243. package/dist/identity/settings.js +53 -18
  244. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  245. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  246. package/dist/inbox/inbox.module.d.ts +4 -1
  247. package/dist/inbox/inbox.module.js +7 -3
  248. package/dist/inbox/inbox.service.d.ts +62 -3
  249. package/dist/inbox/inbox.service.js +74 -4
  250. package/dist/inbox/org-notices.d.ts +63 -0
  251. package/dist/inbox/org-notices.js +91 -0
  252. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  253. package/dist/inbox/platform-inbox.controller.js +58 -0
  254. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  255. package/dist/inbox/platform-inbox.service.js +263 -0
  256. package/dist/inbox/platform-notices.d.ts +19 -0
  257. package/dist/inbox/platform-notices.js +9 -0
  258. package/dist/index.d.ts +1 -1
  259. package/dist/index.js +1 -1
  260. package/dist/infra/cli/kernel-cli.module.js +9 -1
  261. package/dist/infra/config/kernel-config.service.js +21 -1
  262. package/dist/infra/database/xact-lock.d.ts +1 -1
  263. package/dist/infra/database/xact-lock.js +1 -1
  264. package/dist/infra/events/kernel-events.d.ts +11 -2
  265. package/dist/infra/queue/add-job-once.d.ts +14 -0
  266. package/dist/infra/queue/add-job-once.js +16 -0
  267. package/dist/kernel.module.js +6 -0
  268. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  269. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  270. package/dist/models/prices.d.ts +5 -5
  271. package/dist/models/prices.js +4 -4
  272. package/dist/models/purposes.controller.d.ts +6 -4
  273. package/dist/models/purposes.controller.js +13 -7
  274. package/dist/models/purposes.d.ts +20 -9
  275. package/dist/models/purposes.js +17 -8
  276. package/dist/orgs/directory-sync.d.ts +14 -5
  277. package/dist/orgs/directory-sync.js +41 -17
  278. package/dist/orgs/offboarding.d.ts +9 -7
  279. package/dist/orgs/offboarding.js +28 -17
  280. package/dist/orgs/org-lock.d.ts +5 -0
  281. package/dist/orgs/org-lock.js +13 -0
  282. package/dist/orgs/org.guard.d.ts +10 -0
  283. package/dist/orgs/org.guard.js +43 -32
  284. package/dist/orgs/orgs.module.js +3 -0
  285. package/dist/orgs/orgs.service.d.ts +20 -7
  286. package/dist/orgs/orgs.service.js +32 -12
  287. package/dist/orgs/roles.d.ts +1 -1
  288. package/dist/orgs/roles.js +5 -1
  289. package/dist/orgs/settings.controller.d.ts +1 -1
  290. package/dist/orgs/settings.service.d.ts +15 -3
  291. package/dist/orgs/settings.service.js +6 -2
  292. package/dist/overrides.d.ts +3 -0
  293. package/dist/overrides.js +2 -0
  294. package/dist/platform/actor.d.ts +48 -0
  295. package/dist/platform/actor.js +100 -0
  296. package/dist/platform/agent-docs.d.ts +18 -0
  297. package/dist/platform/agent-docs.js +59 -0
  298. package/dist/platform/availability.d.ts +14 -0
  299. package/dist/platform/availability.js +43 -0
  300. package/dist/platform/errors.d.ts +11 -0
  301. package/dist/platform/errors.js +26 -0
  302. package/dist/platform/exclusions.d.ts +12 -0
  303. package/dist/platform/exclusions.js +1387 -0
  304. package/dist/platform/method.d.ts +6 -0
  305. package/dist/platform/method.js +15 -0
  306. package/dist/platform/operation.d.ts +92 -0
  307. package/dist/platform/operation.js +35 -0
  308. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  309. package/dist/platform/ops/agent-templates.ops.js +92 -0
  310. package/dist/platform/ops/agents.ops.d.ts +19 -0
  311. package/dist/platform/ops/agents.ops.js +294 -0
  312. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  313. package/dist/platform/ops/connectors.ops.js +126 -0
  314. package/dist/platform/ops/errors.d.ts +11 -0
  315. package/dist/platform/ops/errors.js +22 -0
  316. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  317. package/dist/platform/ops/extensions.ops.js +116 -0
  318. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  319. package/dist/platform/ops/marketplaces.ops.js +157 -0
  320. package/dist/platform/ops/paging.d.ts +14 -0
  321. package/dist/platform/ops/paging.js +20 -0
  322. package/dist/platform/ops/platform.ops.d.ts +23 -0
  323. package/dist/platform/ops/platform.ops.js +158 -0
  324. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  325. package/dist/platform/ops/plugins.ops.js +377 -0
  326. package/dist/platform/ops/requests.ops.d.ts +14 -0
  327. package/dist/platform/ops/requests.ops.js +153 -0
  328. package/dist/platform/ops/role.d.ts +4 -0
  329. package/dist/platform/ops/role.js +10 -0
  330. package/dist/platform/ops/skills.ops.d.ts +13 -0
  331. package/dist/platform/ops/skills.ops.js +98 -0
  332. package/dist/platform/ops/summary.d.ts +10 -0
  333. package/dist/platform/ops/summary.js +18 -0
  334. package/dist/platform/platform-ops.module.d.ts +7 -0
  335. package/dist/platform/platform-ops.module.js +55 -0
  336. package/dist/platform/platform.module.d.ts +8 -0
  337. package/dist/platform/platform.module.js +25 -0
  338. package/dist/platform/redact-orgs.d.ts +7 -0
  339. package/dist/platform/redact-orgs.js +52 -0
  340. package/dist/platform/registry.d.ts +30 -0
  341. package/dist/platform/registry.js +111 -0
  342. package/dist/roles/worker-role.d.ts +6 -4
  343. package/dist/roles/worker-role.js +14 -7
  344. package/dist/roles/worker.module.d.ts +1 -1
  345. package/dist/roles/worker.module.js +9 -1
  346. package/dist/runtime/context/build.d.ts +6 -4
  347. package/dist/runtime/context/build.js +26 -7
  348. package/dist/runtime/context/claude-tools.d.ts +2 -1
  349. package/dist/runtime/context/claude-tools.js +5 -4
  350. package/dist/runtime/context/compaction.js +9 -0
  351. package/dist/runtime/context/reminders.d.ts +2 -0
  352. package/dist/runtime/context/reminders.js +2 -0
  353. package/dist/runtime/context/skills.js +9 -2
  354. package/dist/runtime/context/tool-changes.d.ts +27 -0
  355. package/dist/runtime/context/tool-changes.js +60 -0
  356. package/dist/runtime/hook-calls.js +2 -0
  357. package/dist/runtime/langgraph-loop.d.ts +3 -1
  358. package/dist/runtime/langgraph-loop.js +35 -17
  359. package/dist/runtime/loop.d.ts +32 -4
  360. package/dist/runtime/maintenance.d.ts +7 -4
  361. package/dist/runtime/maintenance.js +23 -8
  362. package/dist/runtime/model-call.d.ts +30 -8
  363. package/dist/runtime/model-call.js +69 -19
  364. package/dist/runtime/run-control.d.ts +11 -1
  365. package/dist/runtime/run-control.js +12 -0
  366. package/dist/runtime/run-drafts.d.ts +85 -0
  367. package/dist/runtime/run-drafts.js +230 -0
  368. package/dist/runtime/run-jobs.d.ts +3 -5
  369. package/dist/runtime/run-jobs.js +3 -7
  370. package/dist/runtime/run-queue.d.ts +37 -3
  371. package/dist/runtime/run-queue.js +188 -11
  372. package/dist/runtime/run-worker.d.ts +11 -5
  373. package/dist/runtime/run-worker.js +54 -31
  374. package/dist/runtime/runtime.module.js +3 -0
  375. package/dist/runtime/step-log.d.ts +9 -4
  376. package/dist/runtime/step-log.js +8 -5
  377. package/dist/runtime/stream.controller.d.ts +23 -1
  378. package/dist/runtime/stream.controller.js +60 -3
  379. package/dist/runtime/stream.d.ts +4 -1
  380. package/dist/runtime/stream.js +27 -3
  381. package/dist/runtime/subagents/child.d.ts +55 -7
  382. package/dist/runtime/subagents/child.js +105 -7
  383. package/dist/runtime/subagents/definition.d.ts +12 -3
  384. package/dist/runtime/subagents/definition.js +43 -29
  385. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  386. package/dist/runtime/subagents/deliveries.js +228 -0
  387. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  388. package/dist/runtime/subagents/dispatch.js +212 -141
  389. package/dist/runtime/subagents/limits.d.ts +24 -5
  390. package/dist/runtime/subagents/limits.js +40 -6
  391. package/dist/runtime/subagents/messages.d.ts +95 -0
  392. package/dist/runtime/subagents/messages.js +328 -0
  393. package/dist/runtime/subagents/preamble.d.ts +4 -4
  394. package/dist/runtime/subagents/preamble.js +9 -7
  395. package/dist/runtime/subagents/progress.d.ts +8 -6
  396. package/dist/runtime/subagents/progress.js +11 -6
  397. package/dist/runtime/subagents/render.d.ts +30 -0
  398. package/dist/runtime/subagents/render.js +53 -0
  399. package/dist/runtime/subagents/roster.d.ts +24 -7
  400. package/dist/runtime/subagents/roster.js +47 -11
  401. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  402. package/dist/runtime/subagents/skill-fork.js +8 -4
  403. package/dist/runtime/subagents/status.d.ts +14 -0
  404. package/dist/runtime/subagents/status.js +23 -0
  405. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  406. package/dist/runtime/subagents/subagents.service.js +11 -6
  407. package/dist/runtime/usage-report.js +17 -12
  408. package/dist/runtime/waits.d.ts +140 -37
  409. package/dist/runtime/waits.js +394 -106
  410. package/dist/sandbox/jobs.d.ts +40 -13
  411. package/dist/sandbox/jobs.js +57 -20
  412. package/dist/sandbox/leases.d.ts +37 -54
  413. package/dist/sandbox/leases.js +71 -115
  414. package/dist/sandbox/providers.d.ts +2 -2
  415. package/dist/sandbox/providers.js +1 -1
  416. package/dist/sandbox/sandbox.module.d.ts +3 -2
  417. package/dist/sandbox/sandbox.module.js +4 -3
  418. package/dist/sandbox/sandbox.service.d.ts +229 -134
  419. package/dist/sandbox/sandbox.service.js +630 -409
  420. package/dist/skills/catalog.d.ts +3 -2
  421. package/dist/skills/catalog.js +21 -43
  422. package/dist/skills/changes.controller.d.ts +7 -0
  423. package/dist/skills/changes.controller.js +19 -1
  424. package/dist/skills/invoke.js +8 -3
  425. package/dist/skills/package.d.ts +20 -1
  426. package/dist/skills/package.js +28 -1
  427. package/dist/skills/skills.controller.d.ts +39 -4
  428. package/dist/skills/skills.controller.js +88 -10
  429. package/dist/skills/skills.module.js +10 -1
  430. package/dist/skills/skills.service.d.ts +106 -26
  431. package/dist/skills/skills.service.js +421 -75
  432. package/dist/skills/usable.d.ts +81 -0
  433. package/dist/skills/usable.js +379 -0
  434. package/dist/tools/approvals.service.d.ts +20 -2
  435. package/dist/tools/approvals.service.js +23 -4
  436. package/dist/tools/builtin-names.d.ts +21 -5
  437. package/dist/tools/builtin-names.js +30 -5
  438. package/dist/tools/builtins/agent.d.ts +23 -21
  439. package/dist/tools/builtins/agent.js +62 -55
  440. package/dist/tools/builtins/builtin-tools.d.ts +6 -2
  441. package/dist/tools/builtins/builtin-tools.js +37 -12
  442. package/dist/tools/builtins/handback.d.ts +28 -0
  443. package/dist/tools/builtins/handback.js +53 -0
  444. package/dist/tools/builtins/platform.d.ts +34 -0
  445. package/dist/tools/builtins/platform.js +362 -0
  446. package/dist/tools/builtins/sandbox/bash.js +13 -3
  447. package/dist/tools/builtins/sandbox/common.d.ts +43 -24
  448. package/dist/tools/builtins/sandbox/common.js +80 -45
  449. package/dist/tools/builtins/sandbox/edit.js +2 -2
  450. package/dist/tools/builtins/sandbox/glob.js +2 -2
  451. package/dist/tools/builtins/sandbox/grep.js +2 -4
  452. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  453. package/dist/tools/builtins/sandbox/index.js +1 -1
  454. package/dist/tools/builtins/sandbox/read.js +1 -1
  455. package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
  456. package/dist/tools/builtins/sandbox/task-output.js +30 -5
  457. package/dist/tools/builtins/sandbox/task-stop.js +2 -1
  458. package/dist/tools/builtins/sandbox/write.js +2 -2
  459. package/dist/tools/builtins/send-message.d.ts +56 -0
  460. package/dist/tools/builtins/send-message.js +100 -0
  461. package/dist/tools/builtins/skill-load.d.ts +22 -14
  462. package/dist/tools/builtins/skill-load.js +86 -57
  463. package/dist/tools/builtins/skill-write.js +1 -1
  464. package/dist/tools/builtins/web/extract.js +5 -1
  465. package/dist/tools/builtins/web/fetch.js +1 -0
  466. package/dist/tools/builtins/web/search.js +1 -0
  467. package/dist/tools/connectors.controller.d.ts +10 -0
  468. package/dist/tools/connectors.controller.js +12 -0
  469. package/dist/tools/connectors.service.d.ts +46 -5
  470. package/dist/tools/connectors.service.js +94 -15
  471. package/dist/tools/extension-tools.controller.d.ts +14 -0
  472. package/dist/tools/extension-tools.controller.js +37 -0
  473. package/dist/tools/info.d.ts +42 -1
  474. package/dist/tools/info.js +64 -1
  475. package/dist/tools/org-tool-switches.d.ts +74 -0
  476. package/dist/tools/org-tool-switches.js +184 -0
  477. package/dist/tools/pipeline.d.ts +46 -40
  478. package/dist/tools/pipeline.js +187 -364
  479. package/dist/tools/policy.d.ts +1 -1
  480. package/dist/tools/policy.js +36 -16
  481. package/dist/tools/registry.d.ts +98 -5
  482. package/dist/tools/registry.js +87 -9
  483. package/dist/tools/tools.module.js +12 -2
  484. package/dist/ui/views.d.ts +2 -1
  485. package/dist/ui/views.js +17 -3
  486. package/package.json +3 -3
  487. package/src/migrations/0074_subagent_tree.sql +50 -0
  488. package/src/migrations/0075_plugin_scope.sql +61 -0
  489. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  490. package/src/migrations/0077_scope_requests.sql +52 -0
  491. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  492. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  493. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  494. package/src/migrations/0081_platform_components.sql +129 -0
  495. package/src/migrations/0082_platform_migration.sql +33 -0
  496. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  497. package/src/migrations/0084_org_owned_items.sql +85 -0
  498. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  499. package/src/migrations/0086_org_layering.sql +30 -0
  500. package/src/migrations/0087_approval_summary.sql +6 -0
  501. package/src/migrations/0088_environments.sql +80 -0
  502. package/dist/catalog/upgrade-targets.d.ts +0 -56
  503. package/dist/catalog/upgrade-targets.js +0 -90
  504. package/dist/conversations/sandbox-status.d.ts +0 -24
  505. package/dist/conversations/sandbox-status.js +0 -52
  506. package/dist/extensions/org-config.controller.d.ts +0 -32
  507. package/dist/extensions/org-config.controller.js +0 -70
@@ -0,0 +1,213 @@
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 { Controller, Delete, Get, HttpCode, Inject, Post, Put, Req } from "@nestjs/common";
11
+ import { z } from "zod";
12
+ import { ApiError } from "../errors.js";
13
+ import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
14
+ import { createZodDto } from "../infra/validation/create-zod-dto.js";
15
+ import { ZBody, ZParam } from "../infra/validation/zod-params.js";
16
+ import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
17
+ import { CatalogScopeService } from "./catalog-scope.service.js";
18
+ import { OrgPluginUploads, } from "./org-plugin-uploads.js";
19
+ import { OwnedItems } from "./owned-items.js";
20
+ const StagingParams = z.object({ stagingId: z.string().min(1).max(100) });
21
+ const OwnedParams = z.object({ id: z.string().min(1).max(100) });
22
+ const ConfirmBody = z
23
+ .object({
24
+ reviewHash: z.string().min(1).max(128),
25
+ /** The org shares the new item with other orgs (default false, P3-16). */
26
+ shareable: z.boolean().optional(),
27
+ /** Skill names suggested as pinned (spec §9.1); omitted keeps the plugin's flags. */
28
+ pinnedSuggestions: z.array(z.string().min(1).max(64)).max(50).optional(),
29
+ })
30
+ .strict();
31
+ class OrgUploadStagingParams extends createZodDto(StagingParams, "OrgUploadStagingParams") {
32
+ }
33
+ class OrgUploadConfirmBody extends createZodDto(ConfirmBody, "OrgUploadConfirmBody") {
34
+ }
35
+ class OrgOwnedPluginParams extends createZodDto(OwnedParams, "OrgOwnedPluginParams") {
36
+ }
37
+ const ShareableBody = z.object({ shareable: z.boolean() }).strict();
38
+ const DeleteBody = z.object({ previewHash: z.string().min(1).max(128) }).strict();
39
+ class OrgOwnedShareableBody extends createZodDto(ShareableBody, "OrgOwnedShareableBody") {
40
+ }
41
+ class OrgOwnedDeleteBody extends createZodDto(DeleteBody, "OrgOwnedDeleteBody") {
42
+ }
43
+ const actorOpts = (actor) => {
44
+ const tokenId = patTokenId(actor);
45
+ return tokenId !== undefined ? { actorTokenId: tokenId } : {};
46
+ };
47
+ /**
48
+ * An org admin's plugin uploads (`/api/v1/orgs/:orgId/catalog/uploads/*`, spec §14, rulings P3-7,
49
+ * P3-8): a `.tgz` without an extension, prepared (one review) and confirmed like the super admin's
50
+ * import, owned by the org. Writes re-check the org admin under the org row lock.
51
+ */
52
+ let OrgPluginUploadsController = class OrgPluginUploadsController {
53
+ uploads;
54
+ constructor(uploads) {
55
+ this.uploads = uploads;
56
+ }
57
+ /**
58
+ * Prepares an upload (the tgz as the raw body, `application/octet-stream`, at most
59
+ * `packages.maxBytes`): `{ stagingId, review, update }`, the staging kept 24 hours for this org.
60
+ * The checks of the platform import, plus: `customSkills` = deny with skills or agent templates,
61
+ * or `customConnectors` = deny with connector templates -> 403 `catalog.custom_disabled`
62
+ * (ruling P3-15'); a name live for another owner -> 409 `plugin.name_taken` (details
63
+ * `[{ owner }]`); a dependency the org cannot use -> 409 `plugin.dependency_unavailable`
64
+ * (details `[{ dependencies }]`).
65
+ */
66
+ async upload(principal, org, req) {
67
+ const actor = requireUser(principal);
68
+ const body = req.body;
69
+ if (!Buffer.isBuffer(body) || body.byteLength === 0) {
70
+ throw new ApiError("unsupported_media_type", "Send the plugin package (.tgz) as the request body with content-type application/octet-stream");
71
+ }
72
+ return this.uploads.prepare(actor.account.id, org.orgId, new Uint8Array(body.buffer, body.byteOffset, body.byteLength), actorOpts(actor));
73
+ }
74
+ /** The org's staged upload; unknown, expired, confirmed, another org's or the platform's -> 404. */
75
+ staged(org, params) {
76
+ return this.uploads.staged(org.orgId, params.stagingId);
77
+ }
78
+ /**
79
+ * Confirms the org's staged upload (201 `{ item, outcome }`): a new item owned by the org, scope
80
+ * `named: [org]`, not shown to other orgs, `shareable` as sent (default false), installed in the
81
+ * org by the scope sync (`installed`); a new version of its own item (`updated`). The checks of
82
+ * prepare run again under the item name's lock (the first confirm of a name wins). A package
83
+ * with an extension waits for the super admin (`pending`, ruling P3-10): stored, its extension
84
+ * name claimed (another package's -> 409 `extension.name_conflict` naming the owner), nothing
85
+ * installed or usable until confirmed in 待确认; a later upload replaces the pending version
86
+ * (P3-11). A version without an extension for an item whose first version still waits replaces
87
+ * that upload and is installed at once (`installed`).
88
+ */
89
+ confirm(principal, org, params, body) {
90
+ const actor = requireUser(principal);
91
+ return this.uploads.confirm(actor.account.id, org.orgId, params.stagingId, {
92
+ reviewHash: body.reviewHash,
93
+ ...(body.shareable !== undefined && { shareable: body.shareable }),
94
+ ...(body.pinnedSuggestions !== undefined && { pinnedSuggestions: body.pinnedSuggestions }),
95
+ }, actorOpts(actor));
96
+ }
97
+ };
98
+ __decorate([
99
+ Post("file"),
100
+ HttpCode(200),
101
+ OrgAction("catalog.upload"),
102
+ __param(0, CurrentPrincipal()),
103
+ __param(1, CurrentOrg()),
104
+ __param(2, Req())
105
+ ], OrgPluginUploadsController.prototype, "upload", null);
106
+ __decorate([
107
+ Get(":stagingId"),
108
+ OrgAction("catalog.upload"),
109
+ __param(0, CurrentOrg()),
110
+ __param(1, ZParam(OrgUploadStagingParams))
111
+ ], OrgPluginUploadsController.prototype, "staged", null);
112
+ __decorate([
113
+ Post(":stagingId/confirm"),
114
+ HttpCode(201),
115
+ OrgAction("catalog.upload"),
116
+ __param(0, CurrentPrincipal()),
117
+ __param(1, CurrentOrg()),
118
+ __param(2, ZParam(OrgUploadStagingParams)),
119
+ __param(3, ZBody(OrgUploadConfirmBody))
120
+ ], OrgPluginUploadsController.prototype, "confirm", null);
121
+ OrgPluginUploadsController = __decorate([
122
+ Controller("api/v1/orgs/:orgId/catalog/uploads"),
123
+ __param(0, Inject(OrgPluginUploads))
124
+ ], OrgPluginUploadsController);
125
+ export { OrgPluginUploadsController };
126
+ /**
127
+ * The org's own plugins (`/api/v1/orgs/:orgId/owned-plugins/*`, spec §14, P3-17 to P3-19): the
128
+ * owner org's admin withdraws a pending upload, toggles 可共享 and deletes the plugin after a
129
+ * preview. Another org's or a platform plugin -> 404. Writes re-check the org admin under the org
130
+ * row lock.
131
+ */
132
+ let OrgOwnedPluginsController = class OrgOwnedPluginsController {
133
+ scope;
134
+ owned;
135
+ constructor(scope, owned) {
136
+ this.scope = scope;
137
+ this.owned = owned;
138
+ }
139
+ /**
140
+ * Sets 可共享 (ruling P3-2: the plugin and its component rows in one transaction; turning it
141
+ * off keeps the orgs already associated and hides it from new ones, ruling P3-25). 204.
142
+ */
143
+ async setShareable(principal, org, params, body) {
144
+ const actor = requireUser(principal);
145
+ await this.owned.setShareable(org.orgId, actor.account.id, { kind: "plugin", id: params.id }, body.shareable, actorOpts(actor));
146
+ }
147
+ /**
148
+ * What deleting the plugin does (P3-19, nothing written): `outcome` `removed` (no other org
149
+ * uses it) or `transferred` (to the platform), `orgs` the other orgs using it, `agents` the
150
+ * org's agents that lose it, and the `previewHash` to confirm.
151
+ */
152
+ previewDelete(org, params) {
153
+ return this.owned.previewDelete(org.orgId, params.id);
154
+ }
155
+ /**
156
+ * Deletes the plugin after its preview: removed, or transferred to the platform when another
157
+ * org uses it (platform notice `ownership_transferred`). A preview that changed meanwhile ->
158
+ * 409 `catalog.preview_stale`. 204.
159
+ */
160
+ async delete(principal, org, params, body) {
161
+ const actor = requireUser(principal);
162
+ await this.owned.delete(org.orgId, actor.account.id, params.id, body.previewHash, actorOpts(actor));
163
+ }
164
+ /**
165
+ * Withdraws the org's pending upload of the plugin (ruling P3-10, no notice): a first version
166
+ * is removed (its name free again), a new version's pending state cleared (the platform version
167
+ * keeps running). Another org's or a platform plugin -> 404; nothing pending -> 409
168
+ * `extension.not_pending`. 204.
169
+ */
170
+ async withdraw(principal, org, params) {
171
+ const actor = requireUser(principal);
172
+ await this.scope.withdraw(org.orgId, actor.account.id, params.id, actorOpts(actor));
173
+ }
174
+ };
175
+ __decorate([
176
+ Put(":id/shareable"),
177
+ HttpCode(204),
178
+ OrgAction("catalog.upload"),
179
+ __param(0, CurrentPrincipal()),
180
+ __param(1, CurrentOrg()),
181
+ __param(2, ZParam(OrgOwnedPluginParams)),
182
+ __param(3, ZBody(OrgOwnedShareableBody))
183
+ ], OrgOwnedPluginsController.prototype, "setShareable", null);
184
+ __decorate([
185
+ Post(":id/delete/preview"),
186
+ HttpCode(200),
187
+ OrgAction("catalog.upload"),
188
+ __param(0, CurrentOrg()),
189
+ __param(1, ZParam(OrgOwnedPluginParams))
190
+ ], OrgOwnedPluginsController.prototype, "previewDelete", null);
191
+ __decorate([
192
+ Post(":id/delete"),
193
+ HttpCode(204),
194
+ OrgAction("catalog.upload"),
195
+ __param(0, CurrentPrincipal()),
196
+ __param(1, CurrentOrg()),
197
+ __param(2, ZParam(OrgOwnedPluginParams)),
198
+ __param(3, ZBody(OrgOwnedDeleteBody))
199
+ ], OrgOwnedPluginsController.prototype, "delete", null);
200
+ __decorate([
201
+ Delete(":id/pending"),
202
+ HttpCode(204),
203
+ OrgAction("catalog.upload"),
204
+ __param(0, CurrentPrincipal()),
205
+ __param(1, CurrentOrg()),
206
+ __param(2, ZParam(OrgOwnedPluginParams))
207
+ ], OrgOwnedPluginsController.prototype, "withdraw", null);
208
+ OrgOwnedPluginsController = __decorate([
209
+ Controller("api/v1/orgs/:orgId/owned-plugins"),
210
+ __param(0, Inject(CatalogScopeService)),
211
+ __param(1, Inject(OwnedItems))
212
+ ], OrgOwnedPluginsController);
213
+ export { OrgOwnedPluginsController };
@@ -0,0 +1,63 @@
1
+ import type { ActorOpts, CatalogItemView } from "./catalog.service.js";
2
+ import { CatalogScopeService } from "./catalog-scope.service.js";
3
+ import { PluginImport, type PluginReview } from "./plugin-import.js";
4
+ import { PlatformPluginUpdater, type PlatformUpdatePreview } from "./plugin-upgrade.js";
5
+ /** A staged org upload: the review, and the update preview of a new version (null: none). */
6
+ export interface OrgUploadReview {
7
+ stagingId: string;
8
+ /**
9
+ * The review. For a new version of the org's own plugin its `reviewHash` covers the update
10
+ * preview too (one hash, ruling P3-12): confirm with it.
11
+ */
12
+ review: PluginReview;
13
+ /**
14
+ * The platform update a new version of the org's own plugin without an extension applies at
15
+ * once (ruling P3-12); null for a first upload and for a version with an extension (it waits for
16
+ * the super admin, plan Task 6).
17
+ */
18
+ update: PlatformUpdatePreview | null;
19
+ }
20
+ /**
21
+ * What a confirmed org upload did: `installed` (a new item, installed in the owner org by the scope
22
+ * sync), `pending` (waiting for the super admin: an extension, plan Task 6), `updated` (a new
23
+ * version of the org's own item, applied through the platform updater).
24
+ */
25
+ export type OrgUploadOutcome = "installed" | "pending" | "updated";
26
+ /** The hash an org confirms a new version with: the review's and the update's (P3-12). */
27
+ export declare function ownerUpdateHash(reviewHash: string, diffHash: string): string;
28
+ /**
29
+ * An org admin's plugin upload (spec §14.1 item 1, rulings P3-7, P3-8, P3-12, P3-13 to P3-15'): a
30
+ * `.tgz` prepared and confirmed through {@link PluginImport} in owner mode (the org's own staging,
31
+ * its admin re-checked under the org row lock), owned by the org with scope `named: [owner]`. After
32
+ * the confirm's commit the item's scope sync is enqueued here (as `CatalogScopeService.confirmImport`
33
+ * does; `PluginImport` cannot reach the scope service, which depends on it), and installs it in the
34
+ * owner org.
35
+ *
36
+ * A new version of the org's own plugin without an extension (P3-12, P3-12') is reviewed with the
37
+ * platform update it applies (`PlatformPluginUpdater.previewForOwner` on the staged target,
38
+ * pre-flight F3) and one hash ({@link ownerUpdateHash}); the confirm checks it, commits the version,
39
+ * then runs `updateAsOwner` with that diff. A failed update leaves the version imported; the same
40
+ * tgz uploaded again gets an update-only review (F4) whose confirm retries the update. Pinned
41
+ * suggestions are the plugin's own on a new version (they would change the reviewed update).
42
+ */
43
+ export declare class OrgPluginUploads {
44
+ private readonly pluginImport;
45
+ private readonly scope;
46
+ private readonly updater;
47
+ constructor(pluginImport: PluginImport, scope: CatalogScopeService, updater: PlatformPluginUpdater);
48
+ /** Reads, checks and stages the uploaded tgz for the org (see `PluginImport.prepare`). */
49
+ prepare(actor: string, orgId: string, bytes: Uint8Array, opts?: ActorOpts): Promise<OrgUploadReview>;
50
+ /** The org's own staged upload; another org's or the platform's -> 404 `plugin.staging_not_found`. */
51
+ staged(orgId: string, stagingId: string): Promise<OrgUploadReview>;
52
+ /** Confirms the org's staged upload (applying a new version), then enqueues the scope sync. */
53
+ confirm(actor: string, orgId: string, stagingId: string, input: {
54
+ reviewHash: string;
55
+ shareable?: boolean;
56
+ pinnedSuggestions?: string[];
57
+ }, opts?: ActorOpts): Promise<{
58
+ item: CatalogItemView;
59
+ outcome: OrgUploadOutcome;
60
+ }>;
61
+ /** The review with the update preview of a new version and the combined hash (P3-12). */
62
+ private withUpdate;
63
+ }
@@ -0,0 +1,116 @@
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 { Inject, Injectable } from "@nestjs/common";
12
+ import { ApiError } from "../errors.js";
13
+ import { canonicalJson } from "../tools/canonical-json.js";
14
+ import { CatalogScopeService } from "./catalog-scope.service.js";
15
+ import { PluginImport } from "./plugin-import.js";
16
+ import { PlatformPluginUpdater } from "./plugin-upgrade.js";
17
+ /** The hash an org confirms a new version with: the review's and the update's (P3-12). */
18
+ export function ownerUpdateHash(reviewHash, diffHash) {
19
+ return createHash("sha256")
20
+ .update(canonicalJson({ reviewHash, diffHash }))
21
+ .digest("hex")
22
+ .slice(0, 32);
23
+ }
24
+ const reviewStale = (name, version) => new ApiError("plugin.review_stale", `The review of plugin ${name} ${version} is out of date (it changed, or its extension on this deployment changed since it was prepared); review it again`);
25
+ /**
26
+ * An org admin's plugin upload (spec §14.1 item 1, rulings P3-7, P3-8, P3-12, P3-13 to P3-15'): a
27
+ * `.tgz` prepared and confirmed through {@link PluginImport} in owner mode (the org's own staging,
28
+ * its admin re-checked under the org row lock), owned by the org with scope `named: [owner]`. After
29
+ * the confirm's commit the item's scope sync is enqueued here (as `CatalogScopeService.confirmImport`
30
+ * does; `PluginImport` cannot reach the scope service, which depends on it), and installs it in the
31
+ * owner org.
32
+ *
33
+ * A new version of the org's own plugin without an extension (P3-12, P3-12') is reviewed with the
34
+ * platform update it applies (`PlatformPluginUpdater.previewForOwner` on the staged target,
35
+ * pre-flight F3) and one hash ({@link ownerUpdateHash}); the confirm checks it, commits the version,
36
+ * then runs `updateAsOwner` with that diff. A failed update leaves the version imported; the same
37
+ * tgz uploaded again gets an update-only review (F4) whose confirm retries the update. Pinned
38
+ * suggestions are the plugin's own on a new version (they would change the reviewed update).
39
+ */
40
+ let OrgPluginUploads = class OrgPluginUploads {
41
+ pluginImport;
42
+ scope;
43
+ updater;
44
+ constructor(pluginImport, scope, updater) {
45
+ this.pluginImport = pluginImport;
46
+ this.scope = scope;
47
+ this.updater = updater;
48
+ }
49
+ /** Reads, checks and stages the uploaded tgz for the org (see `PluginImport.prepare`). */
50
+ async prepare(actor, orgId, bytes, opts = {}) {
51
+ const r = await this.pluginImport.prepare(actor, bytes, { kind: "file", ref: "upload" }, { ...opts, owner: { orgId } });
52
+ return this.withUpdate(orgId, r.stagingId, r.review);
53
+ }
54
+ /** The org's own staged upload; another org's or the platform's -> 404 `plugin.staging_not_found`. */
55
+ async staged(orgId, stagingId) {
56
+ const r = await this.pluginImport.staged(stagingId, { orgId });
57
+ return this.withUpdate(orgId, r.stagingId, r.review);
58
+ }
59
+ /** Confirms the org's staged upload (applying a new version), then enqueues the scope sync. */
60
+ async confirm(actor, orgId, stagingId, input, opts = {}) {
61
+ const st = await this.pluginImport.stagedTarget(stagingId, { orgId });
62
+ if (!appliesAtOnce(st)) {
63
+ const r = await this.pluginImport.confirm(actor, stagingId, input, {
64
+ ...opts,
65
+ owner: { orgId },
66
+ });
67
+ // A version waiting for the super admin is synced by their confirmation (P3-10)
68
+ if (r.pending)
69
+ return { item: r.item, outcome: "pending" };
70
+ await this.scope.enqueueSync(r.item.id);
71
+ return { item: r.item, outcome: r.firstVersion ? "installed" : "updated" };
72
+ }
73
+ if (input.pinnedSuggestions !== undefined) {
74
+ throw new ApiError("validation_failed", "pinnedSuggestions: a new version keeps the plugin's own pinned suggestions", [{ path: "pinnedSuggestions", message: "not allowed for a new version" }]);
75
+ }
76
+ // The one hash covers the review and the update (P3-12): both recomputed now
77
+ const preview = await this.updater.previewForOwner(orgId, st.itemId, st.version, st.target);
78
+ if (input.reviewHash !== ownerUpdateHash(st.reviewHash, preview.diffHash)) {
79
+ throw reviewStale(preview.name, st.version);
80
+ }
81
+ const r = await this.pluginImport.confirm(actor, stagingId, {
82
+ reviewHash: st.reviewHash,
83
+ ...(input.shareable !== undefined && { shareable: input.shareable }),
84
+ }, { ...opts, owner: { orgId } });
85
+ // The version is committed; a failed update leaves it imported (uploading it again retries)
86
+ await this.updater.updateAsOwner(orgId, actor, r.item.id, st.version, preview.diffHash, opts);
87
+ return { item: await this.pluginImport.view(r.item.id), outcome: "updated" };
88
+ }
89
+ /** The review with the update preview of a new version and the combined hash (P3-12). */
90
+ async withUpdate(orgId, stagingId, review) {
91
+ const st = await this.pluginImport.stagedTarget(stagingId, { orgId });
92
+ if (!appliesAtOnce(st))
93
+ return { stagingId, review, update: null };
94
+ const update = await this.updater.previewForOwner(orgId, st.itemId, st.version, st.target);
95
+ return {
96
+ stagingId,
97
+ review: { ...review, reviewHash: ownerUpdateHash(review.reviewHash, update.diffHash) },
98
+ update,
99
+ };
100
+ }
101
+ };
102
+ OrgPluginUploads = __decorate([
103
+ Injectable(),
104
+ __param(0, Inject(PluginImport)),
105
+ __param(1, Inject(CatalogScopeService)),
106
+ __param(2, Inject(PlatformPluginUpdater))
107
+ ], OrgPluginUploads);
108
+ export { OrgPluginUploads };
109
+ /**
110
+ * A new version of the org's own plugin without an extension: applied at once through the
111
+ * platform updater (P3-12). Not while the item's first version still waits for the super admin:
112
+ * such an upload replaces that first version instead (`PluginImport.commit`, plan Task 6).
113
+ */
114
+ function appliesAtOnce(st) {
115
+ return st.existing && !st.extension && !st.awaiting;
116
+ }
@@ -0,0 +1,184 @@
1
+ import type { Queue } from "bullmq";
2
+ import { KernelDb } from "../infra/database/kernel-db.js";
3
+ import { TransactionHost } from "../infra/database/transaction-host.js";
4
+ import type { KernelLogger } from "../log.js";
5
+ import { OrgLock } from "../orgs/org-lock.js";
6
+ import { SkillsService } from "../skills/skills.service.js";
7
+ import { type ActorOpts, CatalogService } from "./catalog.service.js";
8
+ import { CatalogScopeService } from "./catalog-scope.service.js";
9
+ import { type OwnedRef } from "./ownership.js";
10
+ import { PluginInstaller } from "./plugin-install.js";
11
+ /**
12
+ * What deleting an owned plugin does (P3-19): `removed` when no other org uses it, else
13
+ * `transferred` to the platform; `orgs` the other orgs using it (their names were disclosed by
14
+ * `item_shared` notices already), `agents` the owner's agents that lose it. Confirmed with
15
+ * `previewHash`.
16
+ */
17
+ export interface OwnedDeletePreview {
18
+ outcome: "removed" | "transferred";
19
+ orgs: {
20
+ id: string;
21
+ name: string;
22
+ }[];
23
+ agents: {
24
+ id: string;
25
+ name: string;
26
+ }[];
27
+ previewHash: string;
28
+ }
29
+ /** Why an owned item leaves its owner (the `ownership_transferred` notice's `reason`). */
30
+ export type OwnerLeaveReason = "owner_deleted" | "org_deleted";
31
+ /** What deleting an org skill does (`GET orgs/:orgId/skills/:id/delete-preview`, pre-flight F19). */
32
+ export type OwnedSkillDeletePreview = Omit<OwnedDeletePreview, "previewHash">;
33
+ /**
34
+ * The owner org's actions on the items it owns (P3-17: it toggles 可共享, switches the item off in
35
+ * its own org and deletes it; it never changes the scope or the list). The org admin is re-checked
36
+ * under the org row lock; another org's or a platform item -> 404. Stateless, shared by every
37
+ * replica.
38
+ */
39
+ export declare class OwnedItems {
40
+ private readonly kdb;
41
+ private readonly orgLock;
42
+ private readonly catalog;
43
+ private readonly scope;
44
+ /** The owner org's own uninstall of a removed plugin (ruling P3-41). */
45
+ private readonly installer;
46
+ /** The owner's org skill row, soft-deleted after its promoted platform row leaves it. */
47
+ private readonly skills;
48
+ /** The removed plugin's cleanup job (`owned-plugin-cleanup-<itemId>`, P3-20). */
49
+ private readonly queue;
50
+ private readonly log;
51
+ readonly txHost: TransactionHost;
52
+ constructor(kdb: KernelDb, orgLock: OrgLock, catalog: CatalogService, scope: CatalogScopeService,
53
+ /** The owner org's own uninstall of a removed plugin (ruling P3-41). */
54
+ installer: PluginInstaller,
55
+ /** The owner's org skill row, soft-deleted after its promoted platform row leaves it. */
56
+ skills: SkillsService,
57
+ /** The removed plugin's cleanup job (`owned-plugin-cleanup-<itemId>`, P3-20). */
58
+ queue: Pick<Queue, "add">, log: KernelLogger, txHost: TransactionHost);
59
+ private get db();
60
+ /**
61
+ * The owner org's 可共享 flag of its item, written on the item and (a plugin) every component
62
+ * row in one transaction (ruling P3-2; turning it off narrows as ruling P3-25 says). A skill or
63
+ * an agent template is named by the org row's id (`skills.manage` / `agents.manage`): only the
64
+ * org's own rows (ruling P3-6: not an agent's skill, not a copy of another owner's platform item:
65
+ * 409 `catalog.not_owned`); one it promoted writes its platform row too (pre-flight F16). Audits
66
+ * `catalog.shareable_changed`.
67
+ */
68
+ setShareable(orgId: string, actor: string, ref: OwnedRef, shareable: boolean, opts?: ActorOpts): Promise<void>;
69
+ /** {@link setShareable} of an org skill or agent template (named by the org row's id). */
70
+ private setComponentShareable;
71
+ /** The other live orgs the item is on in (P3-18, {@link orgsUsing}), by name. */
72
+ usedByOthers(ref: OwnedRef): Promise<{
73
+ id: string;
74
+ name: string;
75
+ }[]>;
76
+ /**
77
+ * What deleting the org's skill `skillId` does (pre-flight F19, P3-19): one it promoted that
78
+ * another org uses is `transferred` (`orgs`: those orgs), else `removed`; `agents`: the org's
79
+ * agents that lose it (by its id, or its platform id). Not an org-scope skill of the org -> 404
80
+ * `skill.not_found`.
81
+ */
82
+ previewSkillDelete(orgId: string, skillId: string): Promise<OwnedSkillDeletePreview>;
83
+ /**
84
+ * The owner deletes its org skill (`DELETE orgs/:orgId/skills/:id`, `skills.manage` re-checked
85
+ * under the org row lock): one it promoted goes through {@link transferOrRemove} with reason
86
+ * `owner_deleted` (another org using it keeps it, now the platform's), then the org row is
87
+ * soft-deleted as before (audit `skill.deleted`). Not an org-scope skill of the org -> 404.
88
+ */
89
+ deleteSkill(orgId: string, actor: string, skillId: string, opts?: ActorOpts): Promise<"transferred" | "removed">;
90
+ /**
91
+ * What deleting the org's own agent template `id` does (ruling P4-12, as
92
+ * {@link previewSkillDelete}): one it promoted that another org uses is `transferred` (`orgs`:
93
+ * those orgs), else `removed`; `agents`: the org's agents whose roster loses it. Not the org's
94
+ * own -> 409 `catalog.not_owned`; missing -> 404 `component.not_found`.
95
+ */
96
+ previewAgentTemplateDelete(orgId: string, id: string): Promise<OwnedSkillDeletePreview>;
97
+ /**
98
+ * The owner deletes its org template (`DELETE orgs/:orgId/agent-templates/:id`, ruling P4-12;
99
+ * `agents.manage` re-checked under the org row lock), by the P3 owner rules: one it promoted
100
+ * goes through {@link transferOrRemove} with reason `owner_deleted` (another org using it keeps
101
+ * it, now the platform's, ruling P3-19), then the org row is soft-deleted (sub-agents already
102
+ * started keep their frozen definition; the roster skips it). Agents created from it are never
103
+ * touched (ruling P4-3). Audits `agent_template.deleted`. Not the org's own -> 409
104
+ * `catalog.not_owned`; missing -> 404.
105
+ */
106
+ deleteAgentTemplate(orgId: string, actor: string, id: string, opts?: ActorOpts): Promise<"transferred" | "removed">;
107
+ /**
108
+ * The org-scope skill `skillId` of the org (`forUpdate`: row locked), with the platform row it
109
+ * promoted (`link`; a copy of another owner's platform skill has none here). Missing -> 404.
110
+ */
111
+ private orgSkill;
112
+ /**
113
+ * The org's own skill or agent template `id` (ruling P3-6), locked with `forUpdate`: missing
114
+ * (or another org's) -> 404; an agent's own skill, or a copy linked to a platform item another
115
+ * owner has (or pinned to one) -> 409 `catalog.not_owned`. `link`: the platform row it promoted.
116
+ */
117
+ private ownedComponent;
118
+ /** The preview of deleting the org's own plugin (nothing written). */
119
+ previewDelete(orgId: string, itemId: string): Promise<OwnedDeletePreview>;
120
+ /**
121
+ * Deletes the org's own plugin after its preview (P3-19): the preview recomputed under the item
122
+ * row lock must give `previewHash` (else 409 `catalog.preview_stale`), then
123
+ * {@link transferOrRemove} with reason `owner_deleted`.
124
+ */
125
+ delete(orgId: string, actor: string, itemId: string, previewHash: string, opts?: ActorOpts): Promise<"transferred" | "removed">;
126
+ /**
127
+ * The owner leaves its item, in the caller's transaction (P3-19, P3-20; pre-flight F14, F15).
128
+ * Another live org uses it ({@link orgsUsing}) -> `transferred`: the item and its components
129
+ * become platform-owned, a pending version is cleared, `shown_to_others` is turned off when the
130
+ * owner had not made it shareable (no exposure the owner switched off), the former owner leaves
131
+ * the list and its switches (an `all` scope, the item's or a component's own, is narrowed to
132
+ * `named` = the orgs using it, ruling P3-39; an `optional` item stays `optional`, ruling P3-40:
133
+ * it passed the share gate already, so every org could see it, and the former owner is then an
134
+ * ordinary org that may switch it on again), written
135
+ * directly rather than through the guarded scope writer (ruling P3-27); platform notice
136
+ * `ownership_transferred`, audit `catalog.ownership_transferred`, the scope sync enqueued after
137
+ * the commit (it uninstalls the former owner's install). Otherwise -> `removed`: the soft delete
138
+ * of `catalog.remove` ({@link CatalogService.removeIn}) and, after the commit, the cleanup job
139
+ * `owned-plugin-cleanup-<itemId>` that takes its extension out; an owner delete
140
+ * (`owner_deleted`) also uninstalls it in the owner org through the normal uninstall, keeping the
141
+ * connectors it created as the org's own (ruling P3-41). A first upload still waiting is never
142
+ * transferred. A gone or platform item -> 404.
143
+ */
144
+ transferOrRemove(ref: OwnedRef, reason: OwnerLeaveReason, actor: string | null, opts?: ActorOpts): Promise<"transferred" | "removed">;
145
+ /**
146
+ * An org is deleted (P3-20), in `OrgsService.softDeleteIn`'s transaction (PG writes only; the
147
+ * org row is already marked deleted, so it counts as no user): the org's live plugins and the
148
+ * platform skills and agent templates it promoted (ruling P3-3) are locked `FOR UPDATE`, then
149
+ * each goes through {@link transferOrRemove} with reason `org_deleted`. A first upload still
150
+ * waiting is removed and its extension name released here (nothing is installed under it,
151
+ * pre-flight F10); a pending new version of a transferred plugin is cleared; a removed plugin's
152
+ * extension is taken out by the cleanup job after the commit. The org's unpromoted rows (its own
153
+ * skills, copies, installs) are left: they go with the org as before. Must not inject
154
+ * `OrgsService` (it calls this).
155
+ */
156
+ onOrgDeleted(orgId: string, actor: string | null, opts?: ActorOpts): Promise<{
157
+ transferred: number;
158
+ removed: number;
159
+ }>;
160
+ /**
161
+ * {@link transferOrRemove} of a platform skill or agent template the org promoted (ruling P3-3;
162
+ * `id` its platform id): another live org uses it -> `transferred`: platform-owned, not shown
163
+ * when the owner had not made it shareable, an `all` scope narrowed to `named` = the orgs using
164
+ * it (ruling P3-39), the former owner off its list and switches, platform notice
165
+ * `ownership_transferred`, audit `catalog.ownership_transferred`. Otherwise `removed`: the
166
+ * platform row is soft-deleted (audit `component.removed`). The owner's org row is the caller's
167
+ * (an owner delete soft-deletes it). Gone or platform-owned -> 404.
168
+ */
169
+ private transferOrRemoveComponent;
170
+ /** The live orgs other than `except` where component `c` is on now ({@link componentOn}). */
171
+ private componentOrgsOn;
172
+ /**
173
+ * The owner org's live install of a removed plugin, uninstalled in the caller's transaction
174
+ * through the normal uninstall (ruling P3-41): `via: "scope"` (the item is gone, so no scope
175
+ * wants it), which keeps the connectors it created as the org's own. One that another install
176
+ * still depends on, or one still installing, stays (logged).
177
+ */
178
+ private uninstallInOwner;
179
+ /** Enqueues the removed plugin's cleanup; a failure only warns (the daily sweep repairs it). */
180
+ enqueueCleanup(itemId: string): Promise<void>;
181
+ private computeDelete;
182
+ /** The org's own live plugin (`forUpdate`: row locked); another org's or a platform one -> 404. */
183
+ private ownedRow;
184
+ }