@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,761 @@
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
+ // Platform components (plugin scope phase 2, rulings A2 and C2): the skills, agent templates and
11
+ // connector templates of a catalog item, stored once for the deployment. Files live under
12
+ // `deployment/platform/{skills,agent-templates}/<id>/<version>/`, never under an org prefix (orgs
13
+ // are purged by prefix).
14
+ import { createHash, randomUUID } from "node:crypto";
15
+ import { parseAgentTemplate, } from "@capybara-hq/plugin-sdk";
16
+ import { Inject, Injectable } from "@nestjs/common";
17
+ import { ApiError } from "../errors.js";
18
+ import { audit } from "../identity/audit.js";
19
+ import { KernelDb } from "../infra/database/kernel-db.js";
20
+ import { TransactionHost } from "../infra/database/transaction-host.js";
21
+ import { Transactional } from "../infra/database/transactional.decorator.js";
22
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
23
+ import { packagePath } from "../packages/tgz.js";
24
+ import { readSkillPackage, skillManifest } from "../skills/package.js";
25
+ import { StorageService } from "../storage/storage.service.js";
26
+ import { canonicalJson } from "../tools/canonical-json.js";
27
+ import { readCatalogAgentTemplates, readCatalogFiles, readCatalogTemplates, skillFilesDigest, skillOf, } from "./catalog-content.js";
28
+ import { putCatalogFiles } from "./catalog-items.js";
29
+ import { CatalogItemLock } from "./locks.js";
30
+ import { assertNotAwaiting } from "./ownership.js";
31
+ /** The prefix (in `deployment/`) of a platform skill version's files. */
32
+ export const platformSkillPrefix = (id, version) => `platform/skills/${id}/${version}/`;
33
+ /** The prefix (in `deployment/`) of a platform agent template version's file. */
34
+ export const platformAgentTemplatePrefix = (id, version) => `platform/agent-templates/${id}/${version}/`;
35
+ /**
36
+ * A fresh prefix (in `deployment/`) for a version written before its transaction (ruling P3-45):
37
+ * `<id>/<version>-<uuid>/`, so two writers racing for one version number never overwrite each
38
+ * other's objects, and the loser's are deleted after its transaction failed.
39
+ */
40
+ export const uniqueVersionPrefix = (base) => `${base.slice(0, -1)}-${randomUUID()}/`;
41
+ /**
42
+ * The prefix of a version a plugin sync writes: `<id>/<version>-<catalog version>/` (the catalog
43
+ * version made key-safe), so syncs of two catalog versions racing for one number never overwrite
44
+ * each other. Stored on the version row; readers use the stored prefix, so rows written before keep
45
+ * theirs.
46
+ */
47
+ export const syncVersionPrefix = (base, catalogVersion) => `${base.slice(0, -1)}-${catalogVersion.replace(/[^0-9A-Za-z.-]/g, "_")}/`;
48
+ /** 409 `catalog.not_owned`: an org's own promoted item is versioned by its owner only (P3-48). */
49
+ const ownedByOrg = (what, name) => new ApiError("catalog.not_owned", `The ${what} ${name} belongs to an organization that shared it: only that organization uploads its versions`);
50
+ /** A component changed between the plan and its write (a concurrent sync): plan again. */
51
+ export class PlanStale extends Error {
52
+ }
53
+ /** Plans are retried this many times against concurrent syncs of the same item. */
54
+ const SYNC_ATTEMPTS = 3;
55
+ /**
56
+ * Writes the platform rows of a catalog version's components. Called by the import confirm that
57
+ * creates a catalog item (`initial`), and by the platform plugin update for a new version.
58
+ */
59
+ let PlatformComponents = class PlatformComponents {
60
+ kdb;
61
+ itemLock;
62
+ log;
63
+ txHost;
64
+ /** Where the files are read and written (the kernel's object storage; the CLI's own). */
65
+ files;
66
+ constructor(kdb, storage, itemLock, log, txHost) {
67
+ this.kdb = kdb;
68
+ this.itemLock = itemLock;
69
+ this.log = log;
70
+ this.txHost = txHost;
71
+ this.files = storage;
72
+ }
73
+ get db() {
74
+ return this.kdb.db;
75
+ }
76
+ /** CLI only (see `PluginImport.useCliStorage`): files go to the object store the CLI set up. */
77
+ useCliStorage(storage) {
78
+ this.files = storage;
79
+ }
80
+ /**
81
+ * Creates or updates the platform rows of every component of catalog version `version` of item
82
+ * `itemId`: a component is matched by plugin and name (connector templates by item and template
83
+ * id) and gets a new version only when its content changed (skills by their files' digest,
84
+ * templates by canonical JSON); new rows follow the plugin's scope (`scope_mode: follow`).
85
+ * Files are copied from the catalog prefix to `deployment/platform/…` before the rows are
86
+ * written (outside the transaction), so a sync that stops midway leaves at most unreferenced
87
+ * files, and running it again is a no-op once it succeeded. `initial` is the confirm that
88
+ * created the item. Components missing from the version are left alone (the platform update
89
+ * decides what a removal means). On success the item records `version` as
90
+ * `platform_synced_version`.
91
+ */
92
+ async syncFromVersion(itemId, version, opts) {
93
+ for (let attempt = 1;; attempt++) {
94
+ const plan = await this.plan(itemId, version);
95
+ if (plan.skills.length === 0 &&
96
+ plan.agentTemplates.length === 0 &&
97
+ plan.connectorTemplates.length === 0) {
98
+ await this.markSynced(itemId, version);
99
+ return { skills: [], agentTemplates: [], connectorTemplates: [] };
100
+ }
101
+ await this.writeFiles(plan);
102
+ try {
103
+ const r = await this.apply(plan);
104
+ await this.markSynced(itemId, version);
105
+ this.log.info("platform components synced", {
106
+ itemId,
107
+ version,
108
+ initial: opts.initial,
109
+ skills: r.skills.length,
110
+ agentTemplates: r.agentTemplates.length,
111
+ connectorTemplates: r.connectorTemplates.length,
112
+ });
113
+ return r;
114
+ }
115
+ catch (e) {
116
+ if (!(e instanceof PlanStale) || attempt >= SYNC_ATTEMPTS)
117
+ throw e;
118
+ }
119
+ }
120
+ }
121
+ /**
122
+ * The first phase of a sync inside a caller's transaction (the platform plugin update): plans the
123
+ * version's components and copies their files, outside any transaction (no storage call holds a
124
+ * row lock). {@link applySyncIn} writes the rows.
125
+ */
126
+ async prepareSync(itemId, version) {
127
+ const plan = await this.plan(itemId, version);
128
+ await this.writeFiles(plan);
129
+ return { plan };
130
+ }
131
+ /**
132
+ * The second phase: writes the prepared rows in the caller's transaction and records
133
+ * `platform_synced_version`. A component changed since the plan -> {@link PlanStale} (the caller
134
+ * prepares again).
135
+ */
136
+ async applySyncIn(p) {
137
+ const r = await this.apply(p.plan);
138
+ await this.markSynced(p.plan.itemId, p.plan.version);
139
+ return r;
140
+ }
141
+ /**
142
+ * A platform skill updated on its own (spec §7.2): the super admin uploads a skill package (zip)
143
+ * for component `id`. The package keeps the component's name (else 400 `validation_failed`);
144
+ * the new version keeps the component's plugin provenance and format, is flagged `updated_on_own`
145
+ * (the next plugin update preview marks it) and serves in orgs at once (resolution is
146
+ * read-time). Files go to the platform prefix before the transaction; a concurrent change of the
147
+ * component -> 409 `component.version_stale`. Audits `component.version_uploaded`.
148
+ */
149
+ async uploadSkillVersion(actor, id, zip) {
150
+ const pkg = await readSkillPackage(zip);
151
+ this.files.assertAvailable();
152
+ const live = await this.liveSkill(id);
153
+ if (live.promoted)
154
+ throw ownedByOrg("skill", live.name);
155
+ if (pkg.name !== live.name)
156
+ throw nameChanged("skill", live.name, pkg.name);
157
+ const to = live.current_version + 1;
158
+ const prefix = uniqueVersionPrefix(platformSkillPrefix(id, to));
159
+ await putCatalogFiles(this.files, prefix, pkg.files);
160
+ try {
161
+ await this.writeSkillVersionIn(actor, live, to, prefix, pkg);
162
+ }
163
+ catch (e) {
164
+ await this.discardPrefix(prefix);
165
+ throw e;
166
+ }
167
+ return { kind: "skill", id, name: live.name, version: to };
168
+ }
169
+ /**
170
+ * A platform agent template updated on its own (spec §7.2), as {@link uploadSkillVersion}: the
171
+ * template file (markdown) keeps the component's name.
172
+ */
173
+ async uploadAgentTemplateVersion(actor, id, text) {
174
+ const parsed = parseAgentTemplate(text);
175
+ if ("errors" in parsed) {
176
+ throw new ApiError("validation_failed", `Invalid agent template: ${parsed.errors[0] ?? "unknown problem"}`, parsed.errors.map((message) => ({ path: "content", message })));
177
+ }
178
+ this.files.assertAvailable();
179
+ const live = await this.liveTemplate(id);
180
+ if (live.promoted)
181
+ throw ownedByOrg("agent template", live.name);
182
+ if (parsed.template.name !== live.name) {
183
+ throw nameChanged("agent template", live.name, parsed.template.name);
184
+ }
185
+ const to = live.current_version + 1;
186
+ const prefix = uniqueVersionPrefix(platformAgentTemplatePrefix(id, to));
187
+ const data = new TextEncoder().encode(text);
188
+ const file = {
189
+ path: `${live.name}.md`,
190
+ size: data.byteLength,
191
+ sha256: createHash("sha256").update(data).digest("hex"),
192
+ data,
193
+ };
194
+ await putCatalogFiles(this.files, prefix, [file]);
195
+ try {
196
+ await this.writeTemplateVersionIn(actor, live, to, prefix, parsed.template);
197
+ }
198
+ catch (e) {
199
+ await this.discardPrefix(prefix);
200
+ throw e;
201
+ }
202
+ return { kind: "agent_template", id, name: live.name, version: to };
203
+ }
204
+ /**
205
+ * The first phase of the owner's new version of platform skill `platformId` (ruling P3-4: an org
206
+ * that promoted its skill writes later versions to the platform row, never a pin on its copy):
207
+ * the files go to a fresh `deployment/platform/skills/<id>/<current + 1>-<uuid>/` (ruling
208
+ * P3-45), outside any transaction; a caller whose transaction then fails calls
209
+ * {@link discardPrefix}. Missing -> 404 `component.not_found`.
210
+ */
211
+ async prepareOwnerVersion(platformId, files) {
212
+ this.files.assertAvailable();
213
+ const live = await this.liveSkill(platformId);
214
+ const to = live.current_version + 1;
215
+ const prefix = uniqueVersionPrefix(platformSkillPrefix(platformId, to));
216
+ await putCatalogFiles(this.files, prefix, files);
217
+ return { platformId, to, prefix };
218
+ }
219
+ /**
220
+ * The second phase, in the caller's transaction (the owner org's skill upload, under the org row
221
+ * and the copy's row lock): the platform row becomes version `v.to` with `manifest`, keeping its
222
+ * format. A version written since the first phase -> 409 `component.version_stale`. Returns
223
+ * the version written. The caller tells the orgs using it (`notifySharedUpdate`).
224
+ */
225
+ async addOwnerVersionIn(v, manifest, actorAccountId) {
226
+ const t = this.db;
227
+ const row = await t
228
+ .selectFrom("platform_skills")
229
+ .select(["current_version"])
230
+ .where("id", "=", v.platformId)
231
+ .where("deleted_at", "is", null)
232
+ .forUpdate()
233
+ .executeTakeFirst();
234
+ if (row?.current_version !== v.to - 1)
235
+ throw versionStale();
236
+ const cur = await t
237
+ .selectFrom("platform_skill_versions")
238
+ .select(["source_format", "suggest_pinned"])
239
+ .where("skill_id", "=", v.platformId)
240
+ .where("version", "=", row.current_version)
241
+ .executeTakeFirstOrThrow();
242
+ await t
243
+ .updateTable("platform_skills")
244
+ .set({ current_version: v.to, description: manifest.description, updated_at: new Date() })
245
+ .where("id", "=", v.platformId)
246
+ .execute();
247
+ await t
248
+ .insertInto("platform_skill_versions")
249
+ .values({
250
+ skill_id: v.platformId,
251
+ version: v.to,
252
+ manifest: JSON.stringify(manifest),
253
+ object_prefix: v.prefix,
254
+ catalog_version: null,
255
+ source_format: cur.source_format,
256
+ suggest_pinned: cur.suggest_pinned,
257
+ created_by: actorAccountId,
258
+ })
259
+ .execute();
260
+ return v.to;
261
+ }
262
+ /**
263
+ * Deletes the objects a version wrote before its transaction failed (ruling P3-45), best effort:
264
+ * nothing references them; a failure is logged.
265
+ */
266
+ async discardPrefix(prefix) {
267
+ try {
268
+ await this.files.deployment().deletePrefix(prefix);
269
+ }
270
+ catch (err) {
271
+ this.log.warn("deleting an unused platform version's files failed", { prefix, err });
272
+ }
273
+ }
274
+ async liveSkill(id) {
275
+ const live = await this.db
276
+ .selectFrom("platform_skills")
277
+ .select(["id", "name", "plugin_name", "current_version", "owner_org_id", "catalog_item_id"])
278
+ .where("id", "=", id)
279
+ .where("deleted_at", "is", null)
280
+ .executeTakeFirst();
281
+ if (!live)
282
+ throw new ApiError("component.not_found", `Platform skill ${id} not found`);
283
+ return { ...live, promoted: isPromoted(live) };
284
+ }
285
+ async liveTemplate(id) {
286
+ const live = await this.db
287
+ .selectFrom("platform_agent_templates")
288
+ .select(["id", "name", "plugin_name", "current_version", "owner_org_id", "catalog_item_id"])
289
+ .where("id", "=", id)
290
+ .where("deleted_at", "is", null)
291
+ .executeTakeFirst();
292
+ if (!live)
293
+ throw new ApiError("component.not_found", `Platform agent template ${id} not found`);
294
+ return { ...live, promoted: isPromoted(live) };
295
+ }
296
+ async writeSkillVersionIn(actor, live, to, prefix, pkg) {
297
+ // the lock of the plugin update and the import confirm: an update and an upload never interleave
298
+ if (live.plugin_name !== null)
299
+ await this.itemLock.lock(live.plugin_name);
300
+ const t = this.db;
301
+ const row = await t
302
+ .selectFrom("platform_skills")
303
+ .select(["current_version", "owner_org_id", "catalog_item_id"])
304
+ .where("id", "=", live.id)
305
+ .where("deleted_at", "is", null)
306
+ .forUpdate()
307
+ .executeTakeFirst();
308
+ if (row?.current_version !== live.current_version)
309
+ throw versionStale();
310
+ if (isPromoted(row))
311
+ throw ownedByOrg("skill", live.name);
312
+ const cur = await t
313
+ .selectFrom("platform_skill_versions")
314
+ .select(["source_format", "suggest_pinned"])
315
+ .where("skill_id", "=", live.id)
316
+ .where("version", "=", live.current_version)
317
+ .executeTakeFirstOrThrow();
318
+ const manifest = skillManifest(pkg);
319
+ await t
320
+ .updateTable("platform_skills")
321
+ .set({ current_version: to, description: manifest.description, updated_at: new Date() })
322
+ .where("id", "=", live.id)
323
+ .execute();
324
+ await t
325
+ .insertInto("platform_skill_versions")
326
+ .values({
327
+ skill_id: live.id,
328
+ version: to,
329
+ manifest: JSON.stringify(manifest),
330
+ object_prefix: prefix,
331
+ catalog_version: null,
332
+ source_format: cur.source_format,
333
+ suggest_pinned: cur.suggest_pinned,
334
+ updated_on_own: true,
335
+ created_by: actor.accountId,
336
+ })
337
+ .execute();
338
+ await audit(t, {
339
+ actorAccountId: actor.accountId,
340
+ ...(actor.actorTokenId !== undefined && { actorTokenId: actor.actorTokenId }),
341
+ action: "component.version_uploaded",
342
+ target: live.id,
343
+ detail: {
344
+ kind: "skill",
345
+ name: live.name,
346
+ plugin: live.plugin_name,
347
+ from: live.current_version,
348
+ to,
349
+ },
350
+ });
351
+ }
352
+ async writeTemplateVersionIn(actor, live, to, prefix, template) {
353
+ if (live.plugin_name !== null)
354
+ await this.itemLock.lock(live.plugin_name);
355
+ const t = this.db;
356
+ const row = await t
357
+ .selectFrom("platform_agent_templates")
358
+ .select(["current_version", "owner_org_id", "catalog_item_id"])
359
+ .where("id", "=", live.id)
360
+ .where("deleted_at", "is", null)
361
+ .forUpdate()
362
+ .executeTakeFirst();
363
+ if (row?.current_version !== live.current_version)
364
+ throw versionStale();
365
+ if (isPromoted(row))
366
+ throw ownedByOrg("agent template", live.name);
367
+ const cur = await t
368
+ .selectFrom("platform_agent_template_versions")
369
+ .select(["source_format", "suggest_pinned"])
370
+ .where("template_id", "=", live.id)
371
+ .where("version", "=", live.current_version)
372
+ .executeTakeFirstOrThrow();
373
+ await t
374
+ .updateTable("platform_agent_templates")
375
+ .set({ current_version: to, description: template.description, updated_at: new Date() })
376
+ .where("id", "=", live.id)
377
+ .execute();
378
+ await t
379
+ .insertInto("platform_agent_template_versions")
380
+ .values({
381
+ template_id: live.id,
382
+ version: to,
383
+ definition: JSON.stringify(template),
384
+ object_prefix: prefix,
385
+ catalog_version: null,
386
+ source_format: cur.source_format,
387
+ suggest_pinned: cur.suggest_pinned,
388
+ updated_on_own: true,
389
+ created_by: actor.accountId,
390
+ })
391
+ .execute();
392
+ await audit(t, {
393
+ actorAccountId: actor.accountId,
394
+ ...(actor.actorTokenId !== undefined && { actorTokenId: actor.actorTokenId }),
395
+ action: "component.version_uploaded",
396
+ target: live.id,
397
+ detail: {
398
+ kind: "agent_template",
399
+ name: live.name,
400
+ plugin: live.plugin_name,
401
+ from: live.current_version,
402
+ to,
403
+ },
404
+ });
405
+ }
406
+ /**
407
+ * Records that the item's platform components are written from `version`
408
+ * (`catalog_items.platform_synced_version`): the migration job syncs only items without it.
409
+ */
410
+ async markSynced(itemId, version) {
411
+ await this.db
412
+ .updateTable("catalog_items")
413
+ .set({ platform_synced_version: version })
414
+ .where("id", "=", itemId)
415
+ .execute();
416
+ }
417
+ /** Reads the version's components and the live platform rows; keeps only what changed. */
418
+ async plan(itemId, version) {
419
+ const item = await this.db
420
+ .selectFrom("catalog_items")
421
+ .select(["name", "awaiting_confirmation"])
422
+ .where("id", "=", itemId)
423
+ .where("deleted_at", "is", null)
424
+ .executeTakeFirst();
425
+ // An org upload still waiting for the super admin has no platform components (P3-9)
426
+ if (item !== undefined)
427
+ assertNotAwaiting(item);
428
+ const row = item
429
+ ? await this.db
430
+ .selectFrom("catalog_item_versions")
431
+ .select(["manifest", "object_prefix", "files", "source_format"])
432
+ .where("item_id", "=", itemId)
433
+ .where("version", "=", version)
434
+ .executeTakeFirst()
435
+ : undefined;
436
+ if (!item || !row) {
437
+ throw new ApiError("catalog.item_not_found", `Catalog item ${itemId}@${version} not found`);
438
+ }
439
+ const plugin = item.name;
440
+ const manifest = row.manifest;
441
+ const v = row;
442
+ const plan = {
443
+ itemId,
444
+ plugin,
445
+ version,
446
+ sourceFormat: row.source_format,
447
+ skills: [],
448
+ agentTemplates: [],
449
+ connectorTemplates: [],
450
+ };
451
+ for (const s of manifest.skills ?? []) {
452
+ const files = await readCatalogFiles(this.files, row.object_prefix, row.files, packagePath(s.path));
453
+ const pkg = { ...skillOf(files), files };
454
+ const live = await this.db
455
+ .selectFrom("platform_skills as p")
456
+ .innerJoin("platform_skill_versions as pv", (j) => j.onRef("pv.skill_id", "=", "p.id").onRef("pv.version", "=", "p.current_version"))
457
+ .select(["p.id", "p.current_version", "pv.manifest"])
458
+ .where("p.plugin_name", "=", plugin)
459
+ .where("p.name", "=", pkg.name)
460
+ .where("p.deleted_at", "is", null)
461
+ .executeTakeFirst();
462
+ if (live && skillFilesDigest(live.manifest.files) === skillFilesDigest(files))
463
+ continue;
464
+ const id = live?.id ?? randomUUID();
465
+ const to = (live?.current_version ?? 0) + 1;
466
+ plan.skills.push({
467
+ name: pkg.name,
468
+ base: live && { id: live.id, version: live.current_version },
469
+ id,
470
+ to,
471
+ // the catalog version in the prefix: two syncs of different versions never write one key
472
+ prefix: syncVersionPrefix(platformSkillPrefix(id, to), version),
473
+ files,
474
+ manifest: skillManifest(pkg),
475
+ suggestPinned: s.pinned === true,
476
+ });
477
+ }
478
+ const agents = await readCatalogAgentTemplates(this.files, v);
479
+ for (const a of agents) {
480
+ const live = await this.db
481
+ .selectFrom("platform_agent_templates as p")
482
+ .innerJoin("platform_agent_template_versions as pv", (j) => j.onRef("pv.template_id", "=", "p.id").onRef("pv.version", "=", "p.current_version"))
483
+ .select(["p.id", "p.current_version", "pv.definition"])
484
+ .where("p.plugin_name", "=", plugin)
485
+ .where("p.name", "=", a.template.name)
486
+ .where("p.deleted_at", "is", null)
487
+ // never an org's own template it promoted under the same roster type (ruling P3-3)
488
+ .where((eb) => eb.or([eb("p.catalog_item_id", "is not", null), eb("p.origin_org_id", "is", null)]))
489
+ .executeTakeFirst();
490
+ if (live && canonicalJson(live.definition) === canonicalJson(a.template))
491
+ continue;
492
+ const [file] = await readCatalogFiles(this.files, row.object_prefix, row.files.filter((f) => f.path === a.path));
493
+ if (!file)
494
+ throw new ApiError("internal", `Stored agent template ${a.path} is missing`);
495
+ const id = live?.id ?? randomUUID();
496
+ const to = (live?.current_version ?? 0) + 1;
497
+ plan.agentTemplates.push({
498
+ name: a.template.name,
499
+ base: live && { id: live.id, version: live.current_version },
500
+ id,
501
+ to,
502
+ prefix: syncVersionPrefix(platformAgentTemplatePrefix(id, to), version),
503
+ file: { ...file, path: file.path.split("/").pop() },
504
+ template: a.template,
505
+ });
506
+ }
507
+ const templates = await readCatalogTemplates(this.files, v);
508
+ for (const t of templates) {
509
+ const live = await this.db
510
+ .selectFrom("platform_connector_templates")
511
+ .select(["id", "current_version", "file"])
512
+ .where("catalog_item_id", "=", itemId)
513
+ .where("template_id", "=", t.id)
514
+ .where("deleted_at", "is", null)
515
+ .executeTakeFirst();
516
+ if (live && canonicalJson(live.file) === canonicalJson(t.file))
517
+ continue;
518
+ plan.connectorTemplates.push({
519
+ name: t.id,
520
+ base: live && { id: live.id, version: live.current_version },
521
+ id: live?.id ?? randomUUID(),
522
+ file: t.file,
523
+ });
524
+ }
525
+ return plan;
526
+ }
527
+ /** Copies the planned versions' files to their platform prefixes. */
528
+ async writeFiles(plan) {
529
+ if (plan.skills.length === 0 && plan.agentTemplates.length === 0)
530
+ return;
531
+ this.files.assertAvailable();
532
+ for (const s of plan.skills)
533
+ await putCatalogFiles(this.files, s.prefix, s.files);
534
+ for (const a of plan.agentTemplates)
535
+ await putCatalogFiles(this.files, a.prefix, [a.file]);
536
+ }
537
+ /**
538
+ * Writes the planned rows under the item name's lock (the lock of the import confirm), after
539
+ * checking that every component is still where the plan found it ({@link PlanStale} otherwise).
540
+ */
541
+ async apply(plan) {
542
+ await this.itemLock.lock(plan.plugin);
543
+ const t = this.db;
544
+ const out = { skills: [], agentTemplates: [], connectorTemplates: [] };
545
+ // New component rows carry the plugin's owner and 可共享 flag (ruling P3-2); an org plugin's
546
+ // skills and agent templates were created in its owner org (`origin_org_id`, immutable, F27),
547
+ // and like the plugin they are not shown to other orgs until the super admin shows them
548
+ // Under the item row lock: an item removed since the plan (an org deletion, P3-20) gets no
549
+ // component rows (the item before its components, ruling P3-50)
550
+ const item = await t
551
+ .selectFrom("catalog_items")
552
+ .select(["owner_org_id", "shareable", "deleted_at"])
553
+ .where("id", "=", plan.itemId)
554
+ .forUpdate()
555
+ .executeTakeFirst();
556
+ if (!item || item.deleted_at !== null) {
557
+ throw new ApiError("catalog.item_not_found", `Catalog item ${plan.itemId} was removed`);
558
+ }
559
+ const ownerOrgId = item?.owner_org_id ?? null;
560
+ const owned = ownerOrgId === null
561
+ ? {}
562
+ : { owner_org_id: ownerOrgId, shareable: item?.shareable === true, shown_to_others: false };
563
+ const origin = ownerOrgId === null ? {} : { origin_org_id: ownerOrgId };
564
+ for (const s of plan.skills) {
565
+ const live = await t
566
+ .selectFrom("platform_skills")
567
+ .select(["id", "current_version"])
568
+ .where("plugin_name", "=", plan.plugin)
569
+ .where("name", "=", s.name)
570
+ .where("deleted_at", "is", null)
571
+ .forUpdate()
572
+ .executeTakeFirst();
573
+ assertBase(live && { id: live.id, version: live.current_version }, s.base);
574
+ const description = s.manifest.description;
575
+ if (live) {
576
+ await t
577
+ .updateTable("platform_skills")
578
+ .set({
579
+ current_version: s.to,
580
+ description,
581
+ catalog_item_id: plan.itemId,
582
+ updated_at: new Date(),
583
+ })
584
+ .where("id", "=", s.id)
585
+ .execute();
586
+ }
587
+ else {
588
+ await t
589
+ .insertInto("platform_skills")
590
+ .values({
591
+ id: s.id,
592
+ catalog_item_id: plan.itemId,
593
+ plugin_name: plan.plugin,
594
+ name: s.name,
595
+ description,
596
+ description_zh: null,
597
+ current_version: s.to,
598
+ scope_mode: "follow",
599
+ ...owned,
600
+ ...origin,
601
+ })
602
+ .execute();
603
+ }
604
+ await t
605
+ .insertInto("platform_skill_versions")
606
+ .values({
607
+ skill_id: s.id,
608
+ version: s.to,
609
+ manifest: JSON.stringify(s.manifest),
610
+ object_prefix: s.prefix,
611
+ catalog_version: plan.version,
612
+ source_format: plan.sourceFormat,
613
+ suggest_pinned: s.suggestPinned,
614
+ })
615
+ .execute();
616
+ out.skills.push({
617
+ kind: "skill",
618
+ id: s.id,
619
+ name: s.name,
620
+ from: s.base?.version ?? null,
621
+ to: s.to,
622
+ });
623
+ }
624
+ for (const a of plan.agentTemplates) {
625
+ const live = await t
626
+ .selectFrom("platform_agent_templates")
627
+ .select(["id", "current_version"])
628
+ .where("plugin_name", "=", plan.plugin)
629
+ .where("name", "=", a.name)
630
+ .where("deleted_at", "is", null)
631
+ .where((eb) => eb.or([eb("catalog_item_id", "is not", null), eb("origin_org_id", "is", null)]))
632
+ .forUpdate()
633
+ .executeTakeFirst();
634
+ assertBase(live && { id: live.id, version: live.current_version }, a.base);
635
+ const description = a.template.description;
636
+ if (live) {
637
+ await t
638
+ .updateTable("platform_agent_templates")
639
+ .set({
640
+ current_version: a.to,
641
+ description,
642
+ catalog_item_id: plan.itemId,
643
+ updated_at: new Date(),
644
+ })
645
+ .where("id", "=", a.id)
646
+ .execute();
647
+ }
648
+ else {
649
+ await t
650
+ .insertInto("platform_agent_templates")
651
+ .values({
652
+ id: a.id,
653
+ catalog_item_id: plan.itemId,
654
+ plugin_name: plan.plugin,
655
+ name: a.name,
656
+ description,
657
+ current_version: a.to,
658
+ scope_mode: "follow",
659
+ ...owned,
660
+ ...origin,
661
+ })
662
+ .execute();
663
+ }
664
+ await t
665
+ .insertInto("platform_agent_template_versions")
666
+ .values({
667
+ template_id: a.id,
668
+ version: a.to,
669
+ definition: JSON.stringify(a.template),
670
+ object_prefix: a.prefix,
671
+ catalog_version: plan.version,
672
+ source_format: plan.sourceFormat,
673
+ })
674
+ .execute();
675
+ out.agentTemplates.push({
676
+ kind: "agent_template",
677
+ id: a.id,
678
+ name: a.name,
679
+ from: a.base?.version ?? null,
680
+ to: a.to,
681
+ });
682
+ }
683
+ for (const c of plan.connectorTemplates) {
684
+ const live = await t
685
+ .selectFrom("platform_connector_templates")
686
+ .select(["id", "current_version"])
687
+ .where("catalog_item_id", "=", plan.itemId)
688
+ .where("template_id", "=", c.name)
689
+ .where("deleted_at", "is", null)
690
+ .forUpdate()
691
+ .executeTakeFirst();
692
+ assertBase(live && { id: live.id, version: live.current_version }, c.base);
693
+ if (live) {
694
+ await t
695
+ .updateTable("platform_connector_templates")
696
+ .set({
697
+ current_version: plan.version,
698
+ file: JSON.stringify(c.file),
699
+ updated_at: new Date(),
700
+ })
701
+ .where("id", "=", c.id)
702
+ .execute();
703
+ }
704
+ else {
705
+ await t
706
+ .insertInto("platform_connector_templates")
707
+ .values({
708
+ id: c.id,
709
+ catalog_item_id: plan.itemId,
710
+ template_id: c.name,
711
+ current_version: plan.version,
712
+ file: JSON.stringify(c.file),
713
+ scope_mode: "follow",
714
+ ...owned,
715
+ })
716
+ .execute();
717
+ }
718
+ out.connectorTemplates.push({
719
+ kind: "connector_template",
720
+ id: c.id,
721
+ name: c.name,
722
+ from: c.base?.version ?? null,
723
+ to: plan.version,
724
+ });
725
+ }
726
+ return out;
727
+ }
728
+ };
729
+ __decorate([
730
+ Transactional({ propagation: "mandatory" })
731
+ ], PlatformComponents.prototype, "applySyncIn", null);
732
+ __decorate([
733
+ Transactional({ propagation: "mandatory" })
734
+ ], PlatformComponents.prototype, "addOwnerVersionIn", null);
735
+ __decorate([
736
+ Transactional()
737
+ ], PlatformComponents.prototype, "writeSkillVersionIn", null);
738
+ __decorate([
739
+ Transactional()
740
+ ], PlatformComponents.prototype, "writeTemplateVersionIn", null);
741
+ __decorate([
742
+ Transactional()
743
+ ], PlatformComponents.prototype, "apply", null);
744
+ PlatformComponents = __decorate([
745
+ Injectable(),
746
+ __param(0, Inject(KernelDb)),
747
+ __param(1, Inject(StorageService)),
748
+ __param(2, Inject(CatalogItemLock)),
749
+ __param(3, Inject(KERNEL_LOGGER)),
750
+ __param(4, Inject(TransactionHost))
751
+ ], PlatformComponents);
752
+ export { PlatformComponents };
753
+ /** An org's own item it promoted (ruling P3-3): owned by an org, from no plugin. */
754
+ const isPromoted = (r) => r.owner_org_id !== null && r.catalog_item_id === null;
755
+ /** The live row must still be the one the plan was made against. */
756
+ function assertBase(live, base) {
757
+ if (live?.id !== base?.id || live?.version !== base?.version)
758
+ throw new PlanStale();
759
+ }
760
+ const nameChanged = (what, was, now) => new ApiError("validation_failed", `An uploaded ${what} keeps the component's name: it is "${was}", the upload names "${now}"`, [{ path: "name", message: `must stay "${was}"` }]);
761
+ const versionStale = () => new ApiError("component.version_stale", "The component changed meanwhile; upload it again");