@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,174 @@
1
+ import type { KernelSchemaDb } from "../db/kernel-schema.js";
2
+ import { type PluginScope } from "./scope.js";
3
+ /** The kinds of platform components. */
4
+ export type ComponentKind = "skill" | "agent_template" | "connector_template";
5
+ export declare const COMPONENT_KINDS: readonly ComponentKind[];
6
+ /** A component's own scope settings (ruling C2). */
7
+ export interface ComponentScopeFacts {
8
+ scopeMode: "follow" | "own";
9
+ scope: PluginScope;
10
+ disabled: boolean;
11
+ /** The plugin it came from; null for a component without one. */
12
+ itemId: string | null;
13
+ }
14
+ /**
15
+ * The component's plugin as one org sees it: `live` false for a deleted plugin; `listed` the org on
16
+ * the plugin's `named` list; `installed` a live install of the plugin in the org.
17
+ */
18
+ export interface PluginFacts {
19
+ live: boolean;
20
+ disabled: boolean;
21
+ builtin: boolean;
22
+ scope: PluginScope;
23
+ listed: boolean;
24
+ installed: boolean;
25
+ }
26
+ /**
27
+ * Whether the component is on in the org (`listed`: the org on the component's own `named` list;
28
+ * `sw`: the org's component switch):
29
+ * - never when the component or its plugin is disabled, or its plugin is deleted;
30
+ * - `follow`: its plugin is on in the org (a live install, or builtin) and the switch is not off;
31
+ * - `own`: `wantedOn` over the component's own scope, the list and the switch.
32
+ */
33
+ export declare function componentOn(c: ComponentScopeFacts, p: PluginFacts | null, listed: boolean, sw: boolean | null): boolean;
34
+ /**
35
+ * Whether the plugin a component follows is on in the org (a live install there, or builtin); a
36
+ * component with its own scope does not depend on it (true). A `follow` component comes on and off
37
+ * with its plugin (spec §5 rule 5), so its own switch only matters while this holds.
38
+ */
39
+ export declare function componentPluginOn(c: ComponentScopeFacts, p: PluginFacts | null): boolean;
40
+ /**
41
+ * Whether the component is offered to the org: on, or an org admin could turn it on there (spec
42
+ * §5 rule 10 refuses an org skill named like one). Not when it or its plugin is stopped; `follow`:
43
+ * its plugin is visible to the org (builtin, `all`, `optional`, or `named` listing the org); `own`:
44
+ * its own scope is visible to the org.
45
+ */
46
+ export declare function componentOffered(c: ComponentScopeFacts, p: PluginFacts | null, listed: boolean): boolean;
47
+ /**
48
+ * Whether the component belongs to a builtin plugin: an org admin cannot switch it off
49
+ * (`plugin.scope_locked`, spec §13.5 as amended by the layering spec §4; an effective scope of
50
+ * `all`, its own or its plugin's, is switchable like a listed `named` one).
51
+ */
52
+ export declare function componentLocked(_c: ComponentScopeFacts, p: PluginFacts | null): boolean;
53
+ /** A live platform component with its scope settings. */
54
+ export interface ComponentRow extends ComponentScopeFacts {
55
+ kind: ComponentKind;
56
+ id: string;
57
+ /** Skill or template name; a connector template's id (the file's base name). */
58
+ name: string;
59
+ /** The plugin's name (a connector template: its catalog item's). */
60
+ plugin: string | null;
61
+ /** The current version (a connector template: the catalog version that last changed it). */
62
+ version: string;
63
+ description: string | null;
64
+ shownToOthers: boolean;
65
+ /** The owning org (null: the platform; ruling P3-1). */
66
+ ownerOrgId: string | null;
67
+ /** The org it was created in (skills, agent templates; null: the platform, F27). */
68
+ originOrgId: string | null;
69
+ /** Its owner shares it with other orgs (the share gate, P3-1). */
70
+ shareable: boolean;
71
+ }
72
+ /** The live platform components of `kind` (`ids` / `itemId`: only those). */
73
+ export declare function loadComponents(db: KernelSchemaDb, kind: ComponentKind, filter?: {
74
+ ids?: readonly string[];
75
+ itemId?: string;
76
+ name?: string;
77
+ forUpdate?: boolean;
78
+ }): Promise<ComponentRow[]>;
79
+ /** The plugin, scope list and switch facts of components, for every org (one read each). */
80
+ export interface ScopeState {
81
+ plugins: Map<string, {
82
+ scope: PluginScope;
83
+ builtin: boolean;
84
+ disabled: boolean;
85
+ }>;
86
+ pluginListed: Map<string, Set<string>>;
87
+ installed: Map<string, Set<string>>;
88
+ listed: Map<string, Set<string>>;
89
+ switches: Map<string, Map<string, boolean>>;
90
+ }
91
+ /** Reads the {@link ScopeState} of `comps` (all of one kind), one query after the other. */
92
+ export declare function loadScopeState(db: KernelSchemaDb, kind: ComponentKind, comps: readonly {
93
+ id: string;
94
+ itemId: string | null;
95
+ }[]): Promise<ScopeState>;
96
+ /** The plugin facts of `itemId` for one org from a {@link ScopeState} (null: no plugin). */
97
+ export declare function pluginFactsOf(st: ScopeState, itemId: string | null, orgId: string): PluginFacts | null;
98
+ /** The org's switch of a component from a {@link ScopeState}. */
99
+ export declare const switchOf: (st: ScopeState, id: string, orgId: string) => boolean | null;
100
+ /** Whether the org is on a component's own `named` list in a {@link ScopeState}. */
101
+ export declare const listedIn: (st: ScopeState, id: string, orgId: string) => boolean;
102
+ /** The connectors, skills and agent templates an agent definition references. */
103
+ export interface DefinitionRefs {
104
+ connectors: Set<string>;
105
+ /** `skills.orgSkills`, `skills.pinned` and the inline sub-agent templates' `skills`. */
106
+ skills: Set<string>;
107
+ /** `subagents.templates`. */
108
+ templates: Set<string>;
109
+ }
110
+ /** The ids an agent definition references (see {@link DefinitionRefs}). */
111
+ export declare function definitionRefs(definition: unknown): DefinitionRefs;
112
+ /** The org's live agents with their current definitions' references, sorted by id. */
113
+ export declare function agentDefinitionRefs(db: KernelSchemaDb, orgId: string): Promise<({
114
+ id: string;
115
+ name: string;
116
+ } & DefinitionRefs)[]>;
117
+ /**
118
+ * The ids an org's agents may reference a platform component by: its own id and the org's copies
119
+ * linked to it (ruling B2: unpinned ones resolve to it; ruling P2-18: pinned ones follow its
120
+ * availability). Connector templates: none (connectors made from one stay the org's own).
121
+ */
122
+ export declare function referenceIds(db: KernelSchemaDb, orgId: string, kind: ComponentKind, ids: readonly string[]): Promise<Map<string, string>>;
123
+ /**
124
+ * The org's agents that use any of the components `ids` of `kind`, each with the references it
125
+ * uses (`ref`: the id in its definition), sorted by id.
126
+ */
127
+ export declare function agentsUsing(db: KernelSchemaDb, orgId: string, kind: ComponentKind, ids: readonly string[]): Promise<{
128
+ id: string;
129
+ name: string;
130
+ refs: string[];
131
+ }[]>;
132
+ /**
133
+ * The org's own skills (live, `scope = 'org'`, unlinked or pinned) named `name` that are not a copy
134
+ * of platform skill `component` (linked to it, or from its plugin): a clash under rule 10.
135
+ */
136
+ export declare function clashingOrgSkills(db: KernelSchemaDb, orgId: string, component: {
137
+ id: string;
138
+ itemId: string | null;
139
+ }, name: string): Promise<string[]>;
140
+ /** The platform components of `kind` named `name` that are offered to the org ({@link componentOffered}). */
141
+ export declare function offeredNamed(db: KernelSchemaDb, orgId: string, kind: ComponentKind, name: string): Promise<ComponentRow[]>;
142
+ /** The other platform skills named `name` that are on in the org (rule 10). */
143
+ export declare function clashingPlatformSkills(db: KernelSchemaDb, orgId: string, component: {
144
+ id: string;
145
+ }, name: string): Promise<ComponentRow[]>;
146
+ /**
147
+ * The skills that already use the name of platform skill `component` in the org (rule 10): the
148
+ * org's own ({@link clashingOrgSkills}) and other platform skills on there (`plugins`: theirs).
149
+ */
150
+ export declare function skillNameClashes(db: KernelSchemaDb, orgId: string, component: {
151
+ id: string;
152
+ itemId: string | null;
153
+ }, name: string): Promise<{
154
+ skills: string[];
155
+ plugins: string[];
156
+ }>;
157
+ /** A connector template's id from its manifest path (`./connectors/<id>.json`). */
158
+ export declare const templateIdOfPath: (path: string) => string;
159
+ /**
160
+ * The connector templates among `ids` (of catalog item `itemId`) that are on in the org once the
161
+ * plugin is on there (ruling P2-6): the component switch, its own scope and disabled flags decide;
162
+ * a template without a platform row counts as on. Installs create connectors only from these, and
163
+ * only these need the org's input (`needs_config`).
164
+ */
165
+ export declare function connectorTemplatesOn(db: KernelSchemaDb, orgId: string, itemId: string, ids: readonly string[]): Promise<Set<string>>;
166
+ /** The org's live connectors made from platform connector template `id` (they stay its own). */
167
+ export declare function connectorsMadeFrom(db: KernelSchemaDb, orgId: string, id: string): Promise<number>;
168
+ /**
169
+ * Whether platform connector template `id` is on in the org (`on`), offered to it but off
170
+ * (`off`: its plugin not installed for a `follow` template, or switched off there), or neither
171
+ * (`absent`: missing, deleted, without a plugin, stopped or not offered). One more connector from a
172
+ * template needs `on` (ruling P4-T6-8), read before and again under the org lock.
173
+ */
174
+ export declare function connectorTemplateState(db: KernelSchemaDb, orgId: string, id: string): Promise<"on" | "off" | "absent">;
@@ -0,0 +1,437 @@
1
+ // Component scope (plugin scope phase 2, Task 6; spec §5 rules 2, 5, 8, 10, 11, §13.5): when a platform
2
+ // component (skill, agent template, connector template) is on in an org, offered to it, or locked on,
3
+ // and which agents of an org use one. Pure predicates plus the reads they need; the usable sets
4
+ // (skills/usable.ts, agents/templates.ts), the component scope service and the plugin scope preview
5
+ // all decide with the same predicates.
6
+ import { normalizeToolRef } from "../agents/definition.js";
7
+ import { visibleTo, wantedOn } from "./scope.js";
8
+ export const COMPONENT_KINDS = [
9
+ "skill",
10
+ "agent_template",
11
+ "connector_template",
12
+ ];
13
+ /** The component or its plugin stops it everywhere: disabled, or the plugin disabled or deleted. */
14
+ function stopped(c, p) {
15
+ if (c.disabled)
16
+ return true;
17
+ if (c.itemId === null)
18
+ return false;
19
+ return p === null || !p.live || p.disabled;
20
+ }
21
+ /**
22
+ * Whether the component is on in the org (`listed`: the org on the component's own `named` list;
23
+ * `sw`: the org's component switch):
24
+ * - never when the component or its plugin is disabled, or its plugin is deleted;
25
+ * - `follow`: its plugin is on in the org (a live install, or builtin) and the switch is not off;
26
+ * - `own`: `wantedOn` over the component's own scope, the list and the switch.
27
+ */
28
+ export function componentOn(c, p, listed, sw) {
29
+ if (stopped(c, p))
30
+ return false;
31
+ if (c.scopeMode === "follow")
32
+ return componentPluginOn(c, p) && sw !== false;
33
+ return wantedOn({ scope: c.scope, disabled: false, builtin: false }, listed, sw);
34
+ }
35
+ /**
36
+ * Whether the plugin a component follows is on in the org (a live install there, or builtin); a
37
+ * component with its own scope does not depend on it (true). A `follow` component comes on and off
38
+ * with its plugin (spec §5 rule 5), so its own switch only matters while this holds.
39
+ */
40
+ export function componentPluginOn(c, p) {
41
+ if (c.scopeMode === "own")
42
+ return true;
43
+ return p !== null && p.live && (p.installed || p.builtin);
44
+ }
45
+ /**
46
+ * Whether the component is offered to the org: on, or an org admin could turn it on there (spec
47
+ * §5 rule 10 refuses an org skill named like one). Not when it or its plugin is stopped; `follow`:
48
+ * its plugin is visible to the org (builtin, `all`, `optional`, or `named` listing the org); `own`:
49
+ * its own scope is visible to the org.
50
+ */
51
+ export function componentOffered(c, p, listed) {
52
+ if (stopped(c, p))
53
+ return false;
54
+ if (c.scopeMode === "follow") {
55
+ return p !== null && (p.builtin || visibleTo({ scope: p.scope }, p.listed));
56
+ }
57
+ return visibleTo({ scope: c.scope }, listed);
58
+ }
59
+ /**
60
+ * Whether the component belongs to a builtin plugin: an org admin cannot switch it off
61
+ * (`plugin.scope_locked`, spec §13.5 as amended by the layering spec §4; an effective scope of
62
+ * `all`, its own or its plugin's, is switchable like a listed `named` one).
63
+ */
64
+ export function componentLocked(_c, p) {
65
+ return p?.builtin === true;
66
+ }
67
+ /** The live platform components of `kind` (`ids` / `itemId`: only those). */
68
+ export async function loadComponents(db, kind, filter = {}) {
69
+ if (filter.ids !== undefined && filter.ids.length === 0)
70
+ return [];
71
+ const common = (r) => ({
72
+ kind,
73
+ id: r.id,
74
+ itemId: r.catalog_item_id,
75
+ scopeMode: r.scope_mode,
76
+ scope: r.scope,
77
+ disabled: r.disabled,
78
+ shownToOthers: r.shown_to_others,
79
+ ownerOrgId: r.owner_org_id,
80
+ shareable: r.shareable,
81
+ });
82
+ if (kind === "connector_template") {
83
+ let q = db
84
+ .selectFrom("platform_connector_templates as p")
85
+ .leftJoin("catalog_items as c", "c.id", "p.catalog_item_id")
86
+ .select([
87
+ "p.id",
88
+ "p.catalog_item_id",
89
+ "p.template_id",
90
+ "p.current_version",
91
+ "p.scope_mode",
92
+ "p.scope",
93
+ "p.disabled",
94
+ "p.shown_to_others",
95
+ "p.owner_org_id",
96
+ "p.shareable",
97
+ "c.name as item_name",
98
+ ])
99
+ .where("p.deleted_at", "is", null);
100
+ if (filter.ids !== undefined)
101
+ q = q.where("p.id", "in", [...filter.ids]);
102
+ if (filter.itemId !== undefined)
103
+ q = q.where("p.catalog_item_id", "=", filter.itemId);
104
+ if (filter.name !== undefined)
105
+ q = q.where("p.template_id", "=", filter.name);
106
+ if (filter.forUpdate)
107
+ q = q.forUpdate("p");
108
+ return (await q.orderBy("p.id").execute()).map((r) => ({
109
+ ...common(r),
110
+ name: r.template_id,
111
+ plugin: r.item_name,
112
+ version: r.current_version,
113
+ description: null,
114
+ originOrgId: null,
115
+ }));
116
+ }
117
+ const table = kind === "skill" ? "platform_skills" : "platform_agent_templates";
118
+ let q = db
119
+ .selectFrom(`${table} as p`)
120
+ .select([
121
+ "p.id",
122
+ "p.catalog_item_id",
123
+ "p.plugin_name",
124
+ "p.name",
125
+ "p.description",
126
+ "p.current_version",
127
+ "p.scope_mode",
128
+ "p.scope",
129
+ "p.disabled",
130
+ "p.shown_to_others",
131
+ "p.owner_org_id",
132
+ "p.origin_org_id",
133
+ "p.shareable",
134
+ ])
135
+ .where("p.deleted_at", "is", null);
136
+ if (filter.ids !== undefined)
137
+ q = q.where("p.id", "in", [...filter.ids]);
138
+ if (filter.itemId !== undefined)
139
+ q = q.where("p.catalog_item_id", "=", filter.itemId);
140
+ if (filter.name !== undefined)
141
+ q = q.where("p.name", "=", filter.name);
142
+ if (filter.forUpdate)
143
+ q = q.forUpdate();
144
+ return (await q.orderBy("p.id").execute()).map((r) => ({
145
+ ...common(r),
146
+ name: r.name,
147
+ plugin: r.plugin_name,
148
+ version: String(r.current_version),
149
+ description: r.description,
150
+ originOrgId: r.origin_org_id,
151
+ }));
152
+ }
153
+ const LIVE_INSTALL = ["installing", "installed", "upgrading"];
154
+ const groupBy = (rows, key, value) => {
155
+ const out = new Map();
156
+ for (const r of rows) {
157
+ const k = key(r);
158
+ const s = out.get(k) ?? new Set();
159
+ out.set(k, s);
160
+ s.add(value(r));
161
+ }
162
+ return out;
163
+ };
164
+ /** Reads the {@link ScopeState} of `comps` (all of one kind), one query after the other. */
165
+ export async function loadScopeState(db, kind, comps) {
166
+ const itemIds = [...new Set(comps.map((c) => c.itemId).filter((x) => x !== null))];
167
+ const ids = comps.map((c) => c.id);
168
+ const state = {
169
+ plugins: new Map(),
170
+ pluginListed: new Map(),
171
+ installed: new Map(),
172
+ listed: new Map(),
173
+ switches: new Map(),
174
+ };
175
+ if (itemIds.length > 0) {
176
+ const items = await db
177
+ .selectFrom("catalog_items")
178
+ .select(["id", "scope", "builtin", "disabled"])
179
+ .where("id", "in", itemIds)
180
+ .where("deleted_at", "is", null)
181
+ .execute();
182
+ for (const i of items)
183
+ state.plugins.set(i.id, i);
184
+ const listed = await db
185
+ .selectFrom("catalog_item_scope_orgs")
186
+ .select(["item_id", "org_id"])
187
+ .where("item_id", "in", itemIds)
188
+ .execute();
189
+ state.pluginListed = groupBy(listed, (r) => r.item_id, (r) => r.org_id);
190
+ const installs = await db
191
+ .selectFrom("plugin_installs")
192
+ .select(["item_id", "org_id"])
193
+ .where("item_id", "in", itemIds)
194
+ .where("status", "in", [...LIVE_INSTALL])
195
+ .execute();
196
+ state.installed = groupBy(installs, (r) => r.item_id, (r) => r.org_id);
197
+ }
198
+ if (ids.length > 0) {
199
+ const listed = await db
200
+ .selectFrom("component_scope_orgs")
201
+ .select(["component_id", "org_id"])
202
+ .where("kind", "=", kind)
203
+ .where("component_id", "in", ids)
204
+ .execute();
205
+ state.listed = groupBy(listed, (r) => r.component_id, (r) => r.org_id);
206
+ const switches = await db
207
+ .selectFrom("component_org_switches")
208
+ .select(["component_id", "org_id", "enabled"])
209
+ .where("kind", "=", kind)
210
+ .where("component_id", "in", ids)
211
+ .execute();
212
+ for (const s of switches) {
213
+ const m = state.switches.get(s.component_id) ?? new Map();
214
+ state.switches.set(s.component_id, m);
215
+ m.set(s.org_id, s.enabled);
216
+ }
217
+ }
218
+ return state;
219
+ }
220
+ /** The plugin facts of `itemId` for one org from a {@link ScopeState} (null: no plugin). */
221
+ export function pluginFactsOf(st, itemId, orgId) {
222
+ if (itemId === null)
223
+ return null;
224
+ const p = st.plugins.get(itemId);
225
+ if (!p)
226
+ return {
227
+ live: false,
228
+ disabled: false,
229
+ builtin: false,
230
+ scope: "optional",
231
+ listed: false,
232
+ installed: false,
233
+ };
234
+ return {
235
+ live: true,
236
+ disabled: p.disabled,
237
+ builtin: p.builtin,
238
+ scope: p.scope,
239
+ listed: st.pluginListed.get(itemId)?.has(orgId) ?? false,
240
+ installed: st.installed.get(itemId)?.has(orgId) ?? false,
241
+ };
242
+ }
243
+ /** The org's switch of a component from a {@link ScopeState}. */
244
+ export const switchOf = (st, id, orgId) => st.switches.get(id)?.get(orgId) ?? null;
245
+ /** Whether the org is on a component's own `named` list in a {@link ScopeState}. */
246
+ export const listedIn = (st, id, orgId) => st.listed.get(id)?.has(orgId) ?? false;
247
+ /** The ids an agent definition references (see {@link DefinitionRefs}). */
248
+ export function definitionRefs(definition) {
249
+ const def = definition;
250
+ const connectors = new Set();
251
+ const skills = new Set();
252
+ const templates = new Set();
253
+ for (const ref of Array.isArray(def?.tools) ? def.tools : []) {
254
+ const n = normalizeToolRef(ref);
255
+ if (n?.kind === "connector" && typeof n.connectorId === "string")
256
+ connectors.add(n.connectorId);
257
+ }
258
+ const strings = (xs, into) => {
259
+ if (Array.isArray(xs))
260
+ for (const x of xs)
261
+ if (typeof x === "string")
262
+ into.add(x);
263
+ };
264
+ strings(def?.skills?.orgSkills, skills);
265
+ strings(def?.skills?.pinned, skills);
266
+ const inline = def?.subagents?.inline;
267
+ if (Array.isArray(inline))
268
+ for (const t of inline)
269
+ strings(t?.skills, skills);
270
+ strings(def?.subagents?.templates, templates);
271
+ return { connectors, skills, templates };
272
+ }
273
+ /** The org's live agents with their current definitions' references, sorted by id. */
274
+ export async function agentDefinitionRefs(db, orgId) {
275
+ const rows = await db
276
+ .selectFrom("agents as a")
277
+ .innerJoin("agent_versions as v", (j) => j.onRef("v.agent_id", "=", "a.id").onRef("v.version", "=", "a.current_version"))
278
+ .select(["a.id", "v.definition"])
279
+ .where("a.org_id", "=", orgId)
280
+ .where("a.deleted_at", "is", null)
281
+ .orderBy("a.id")
282
+ .execute();
283
+ return rows.map((r) => {
284
+ const name = r.definition?.name;
285
+ return {
286
+ id: r.id,
287
+ name: typeof name === "string" ? name : r.id,
288
+ ...definitionRefs(r.definition),
289
+ };
290
+ });
291
+ }
292
+ /**
293
+ * The ids an org's agents may reference a platform component by: its own id and the org's copies
294
+ * linked to it (ruling B2: unpinned ones resolve to it; ruling P2-18: pinned ones follow its
295
+ * availability). Connector templates: none (connectors made from one stay the org's own).
296
+ */
297
+ export async function referenceIds(db, orgId, kind, ids) {
298
+ const out = new Map();
299
+ if (kind === "connector_template" || ids.length === 0)
300
+ return out;
301
+ for (const id of ids)
302
+ out.set(id, id);
303
+ const copies = kind === "skill"
304
+ ? await db
305
+ .selectFrom("skills")
306
+ .select(["id", "platform_skill_id as platform_id"])
307
+ .where("org_id", "=", orgId)
308
+ .where("deleted_at", "is", null)
309
+ .where("platform_skill_id", "in", [...ids])
310
+ .execute()
311
+ : await db
312
+ .selectFrom("agent_templates")
313
+ .select(["id", "platform_template_id as platform_id"])
314
+ .where("org_id", "=", orgId)
315
+ .where("deleted_at", "is", null)
316
+ .where("platform_template_id", "in", [...ids])
317
+ .execute();
318
+ for (const c of copies)
319
+ if (c.platform_id !== null)
320
+ out.set(c.id, c.platform_id);
321
+ return out;
322
+ }
323
+ /**
324
+ * The org's agents that use any of the components `ids` of `kind`, each with the references it
325
+ * uses (`ref`: the id in its definition), sorted by id.
326
+ */
327
+ export async function agentsUsing(db, orgId, kind, ids) {
328
+ const refs = await referenceIds(db, orgId, kind, ids);
329
+ if (refs.size === 0)
330
+ return [];
331
+ const out = [];
332
+ for (const a of await agentDefinitionRefs(db, orgId)) {
333
+ const used = kind === "skill" ? a.skills : a.templates;
334
+ const hit = [...used].filter((r) => refs.has(r)).sort();
335
+ if (hit.length > 0)
336
+ out.push({ id: a.id, name: a.name, refs: hit });
337
+ }
338
+ return out;
339
+ }
340
+ /**
341
+ * The org's own skills (live, `scope = 'org'`, unlinked or pinned) named `name` that are not a copy
342
+ * of platform skill `component` (linked to it, or from its plugin): a clash under rule 10.
343
+ */
344
+ export async function clashingOrgSkills(db, orgId, component, name) {
345
+ const rows = await db
346
+ .selectFrom("skills")
347
+ .select(["id", "platform_skill_id", "catalog_item_id"])
348
+ .where("org_id", "=", orgId)
349
+ .where("scope", "=", "org")
350
+ .where("deleted_at", "is", null)
351
+ .where("name", "=", name)
352
+ .where((eb) => eb.or([eb("platform_skill_id", "is", null), eb("pinned_version", "is not", null)]))
353
+ .execute();
354
+ return rows
355
+ .filter((r) => r.platform_skill_id !== component.id &&
356
+ !(r.catalog_item_id !== null && r.catalog_item_id === component.itemId))
357
+ .map((r) => r.id);
358
+ }
359
+ /** The platform components of `kind` named `name` that are offered to the org ({@link componentOffered}). */
360
+ export async function offeredNamed(db, orgId, kind, name) {
361
+ const comps = await loadComponents(db, kind, { name });
362
+ if (comps.length === 0)
363
+ return [];
364
+ const st = await loadScopeState(db, kind, comps);
365
+ return comps.filter((c) => componentOffered(c, pluginFactsOf(st, c.itemId, orgId), listedIn(st, c.id, orgId)));
366
+ }
367
+ /** The other platform skills named `name` that are on in the org (rule 10). */
368
+ export async function clashingPlatformSkills(db, orgId, component, name) {
369
+ const others = (await loadComponents(db, "skill", { name })).filter((c) => c.id !== component.id);
370
+ if (others.length === 0)
371
+ return [];
372
+ const st = await loadScopeState(db, "skill", others);
373
+ return others.filter((c) => componentOn(c, pluginFactsOf(st, c.itemId, orgId), listedIn(st, c.id, orgId), switchOf(st, c.id, orgId)));
374
+ }
375
+ /**
376
+ * The skills that already use the name of platform skill `component` in the org (rule 10): the
377
+ * org's own ({@link clashingOrgSkills}) and other platform skills on there (`plugins`: theirs).
378
+ */
379
+ export async function skillNameClashes(db, orgId, component, name) {
380
+ const platform = await clashingPlatformSkills(db, orgId, component, name);
381
+ return {
382
+ skills: [
383
+ ...(await clashingOrgSkills(db, orgId, component, name)),
384
+ ...platform.map((c) => c.id),
385
+ ],
386
+ plugins: platform.map((c) => c.plugin ?? "platform"),
387
+ };
388
+ }
389
+ /** A connector template's id from its manifest path (`./connectors/<id>.json`). */
390
+ export const templateIdOfPath = (path) => (path.split("/").pop() ?? path).replace(/\.json$/, "");
391
+ /**
392
+ * The connector templates among `ids` (of catalog item `itemId`) that are on in the org once the
393
+ * plugin is on there (ruling P2-6): the component switch, its own scope and disabled flags decide;
394
+ * a template without a platform row counts as on. Installs create connectors only from these, and
395
+ * only these need the org's input (`needs_config`).
396
+ */
397
+ export async function connectorTemplatesOn(db, orgId, itemId, ids) {
398
+ if (ids.length === 0)
399
+ return new Set();
400
+ const comps = await loadComponents(db, "connector_template", { itemId });
401
+ const st = await loadScopeState(db, "connector_template", comps);
402
+ const off = new Set(comps
403
+ .filter((c) => {
404
+ const p = pluginFactsOf(st, c.itemId, orgId);
405
+ return !componentOn(c, p && { ...p, installed: true }, listedIn(st, c.id, orgId), switchOf(st, c.id, orgId));
406
+ })
407
+ .map((c) => c.name));
408
+ return new Set(ids.filter((id) => !off.has(id)));
409
+ }
410
+ /** The org's live connectors made from platform connector template `id` (they stay its own). */
411
+ export async function connectorsMadeFrom(db, orgId, id) {
412
+ const r = await db
413
+ .selectFrom("connectors")
414
+ .select((eb) => eb.fn.countAll().as("n"))
415
+ .where("org_id", "=", orgId)
416
+ .where("platform_template_id", "=", id)
417
+ .where("deleted_at", "is", null)
418
+ .executeTakeFirstOrThrow();
419
+ return Number(r.n);
420
+ }
421
+ /**
422
+ * Whether platform connector template `id` is on in the org (`on`), offered to it but off
423
+ * (`off`: its plugin not installed for a `follow` template, or switched off there), or neither
424
+ * (`absent`: missing, deleted, without a plugin, stopped or not offered). One more connector from a
425
+ * template needs `on` (ruling P4-T6-8), read before and again under the org lock.
426
+ */
427
+ export async function connectorTemplateState(db, orgId, id) {
428
+ const [c] = await loadComponents(db, "connector_template", { ids: [id] });
429
+ if (!c || c.itemId === null)
430
+ return "absent";
431
+ const st = await loadScopeState(db, "connector_template", [c]);
432
+ const p = pluginFactsOf(st, c.itemId, orgId);
433
+ const listed = listedIn(st, c.id, orgId);
434
+ if (componentOn(c, p, listed, switchOf(st, c.id, orgId)))
435
+ return "on";
436
+ return componentOffered(c, p, listed) ? "off" : "absent";
437
+ }
@@ -13,3 +13,33 @@ export declare const MARKETPLACES_REFRESH_SCHEDULER_ID = "catalogs-refresh-every
13
13
  export declare const PLUGIN_STAGING_CLEANUP_JOB = "app-staging-cleanup";
14
14
  /** The BullMQ repeatable scheduler the cleanup had before it became `@LockedCron` (retired). */
15
15
  export declare const PLUGIN_STAGING_CLEANUP_SCHEDULER_ID = "app-staging-cleanup-hourly";
16
+ /**
17
+ * The one-off job that takes out the extension of a removed org-owned plugin (spec §14, P3-20,
18
+ * P3-21; `OwnedPluginCleanup.run`), on `cap-kernel-maintenance`.
19
+ */
20
+ export declare const OWNED_PLUGIN_CLEANUP_JOB = "owned-plugin-cleanup";
21
+ /** The daily `@LockedCron` repairing lost {@link OWNED_PLUGIN_CLEANUP_JOB} enqueues. */
22
+ export declare const OWNED_PLUGIN_CLEANUP_SWEEP_JOB = "owned-plugin-cleanup-sweep";
23
+ /** The data of an {@link OWNED_PLUGIN_CLEANUP_JOB}. */
24
+ export interface OwnedPluginCleanupData {
25
+ itemId: string;
26
+ }
27
+ /**
28
+ * The cleanup job of one removed item: id `owned-plugin-cleanup-<itemId>` (no `:`: item ids are
29
+ * UUIDs), removed when done so a later enqueue of the same item is not swallowed; the job is
30
+ * idempotent, so a few retries are safe.
31
+ */
32
+ export declare function ownedPluginCleanupJob(itemId: string): {
33
+ name: string;
34
+ data: OwnedPluginCleanupData;
35
+ opts: {
36
+ jobId: string;
37
+ attempts: number;
38
+ backoff: {
39
+ type: "exponential";
40
+ delay: number;
41
+ };
42
+ removeOnComplete: true;
43
+ removeOnFail: true;
44
+ };
45
+ };
@@ -13,3 +13,28 @@ export const MARKETPLACES_REFRESH_SCHEDULER_ID = "catalogs-refresh-every";
13
13
  export const PLUGIN_STAGING_CLEANUP_JOB = "app-staging-cleanup";
14
14
  /** The BullMQ repeatable scheduler the cleanup had before it became `@LockedCron` (retired). */
15
15
  export const PLUGIN_STAGING_CLEANUP_SCHEDULER_ID = "app-staging-cleanup-hourly";
16
+ /**
17
+ * The one-off job that takes out the extension of a removed org-owned plugin (spec §14, P3-20,
18
+ * P3-21; `OwnedPluginCleanup.run`), on `cap-kernel-maintenance`.
19
+ */
20
+ export const OWNED_PLUGIN_CLEANUP_JOB = "owned-plugin-cleanup";
21
+ /** The daily `@LockedCron` repairing lost {@link OWNED_PLUGIN_CLEANUP_JOB} enqueues. */
22
+ export const OWNED_PLUGIN_CLEANUP_SWEEP_JOB = "owned-plugin-cleanup-sweep";
23
+ /**
24
+ * The cleanup job of one removed item: id `owned-plugin-cleanup-<itemId>` (no `:`: item ids are
25
+ * UUIDs), removed when done so a later enqueue of the same item is not swallowed; the job is
26
+ * idempotent, so a few retries are safe.
27
+ */
28
+ export function ownedPluginCleanupJob(itemId) {
29
+ return {
30
+ name: OWNED_PLUGIN_CLEANUP_JOB,
31
+ data: { itemId },
32
+ opts: {
33
+ jobId: `${OWNED_PLUGIN_CLEANUP_JOB}-${itemId}`,
34
+ attempts: 3,
35
+ backoff: { type: "exponential", delay: 5_000 },
36
+ removeOnComplete: true,
37
+ removeOnFail: true,
38
+ },
39
+ };
40
+ }
@@ -3,7 +3,7 @@ import type { KernelConfig } from "../config/schema.js";
3
3
  import { type LookupFn, NetDeniedError, type NetPolicy } from "../net/public-address.js";
4
4
  /**
5
5
  * Fetching a marketplace manifest `marketplace.json` (C26, spec §5.2) and a marketplace's archive
6
- * sources. The URLs come from an enterprise admin or the config, but responses are always hostile
6
+ * sources. The URLs come from a super admin or the config, but responses are always hostile
7
7
  * input:
8
8
  * - https only (`allowInsecureLoopback`, tests only, allows http on loopback addresses), no user
9
9
  * info in the URL;