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

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 (616) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +179 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +261 -329
  21. package/dist/agents/definition.d.ts +8 -0
  22. package/dist/agents/definition.js +8 -0
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +20 -4
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +323 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/cli.d.ts +3 -2
  42. package/dist/catalog/cli.js +13 -31
  43. package/dist/catalog/job-ids.d.ts +15 -0
  44. package/dist/catalog/job-ids.js +15 -0
  45. package/dist/catalog/jobs.d.ts +27 -0
  46. package/dist/catalog/jobs.js +70 -0
  47. package/dist/catalog/locks.d.ts +24 -0
  48. package/dist/catalog/locks.js +63 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  50. package/dist/catalog/marketplaces.controller.js +22 -11
  51. package/dist/catalog/marketplaces.service.d.ts +30 -13
  52. package/dist/catalog/marketplaces.service.js +330 -256
  53. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  54. package/dist/catalog/org-catalog.controller.js +29 -14
  55. package/dist/catalog/org-catalog.service.d.ts +32 -198
  56. package/dist/catalog/org-catalog.service.js +159 -400
  57. package/dist/catalog/plugin-import.d.ts +73 -34
  58. package/dist/catalog/plugin-import.js +356 -217
  59. package/dist/catalog/plugin-install.d.ts +83 -41
  60. package/dist/catalog/plugin-install.js +421 -269
  61. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  62. package/dist/catalog/plugin-upgrade.js +407 -282
  63. package/dist/catalog/requests.service.d.ts +27 -15
  64. package/dist/catalog/requests.service.js +201 -145
  65. package/dist/catalog/upgrade-targets.d.ts +4 -7
  66. package/dist/channels/actions.d.ts +6 -4
  67. package/dist/channels/actions.js +1 -1
  68. package/dist/channels/cards.d.ts +2 -2
  69. package/dist/channels/channels.module.d.ts +40 -0
  70. package/dist/channels/channels.module.js +128 -0
  71. package/dist/channels/connections.controller.d.ts +1 -1
  72. package/dist/channels/connections.controller.js +11 -6
  73. package/dist/channels/connections.service.d.ts +43 -21
  74. package/dist/channels/connections.service.js +236 -131
  75. package/dist/channels/inbound.d.ts +34 -38
  76. package/dist/channels/inbound.js +107 -41
  77. package/dist/channels/job-ids.d.ts +10 -0
  78. package/dist/channels/job-ids.js +10 -0
  79. package/dist/channels/jobs.d.ts +85 -0
  80. package/dist/channels/jobs.js +157 -0
  81. package/dist/channels/outbound.d.ts +60 -82
  82. package/dist/channels/outbound.js +165 -194
  83. package/dist/channels/supervisor.d.ts +88 -46
  84. package/dist/channels/supervisor.js +230 -132
  85. package/dist/channels/threads.d.ts +29 -8
  86. package/dist/channels/threads.js +71 -13
  87. package/dist/channels/webhook.d.ts +20 -14
  88. package/dist/channels/webhook.js +51 -20
  89. package/dist/config/load.d.ts +3 -2
  90. package/dist/config/load.js +3 -2
  91. package/dist/config/nacos-source.js +11 -2
  92. package/dist/config/schema.d.ts +1 -0
  93. package/dist/config/schema.js +10 -4
  94. package/dist/conversations/access.d.ts +29 -0
  95. package/dist/conversations/access.js +86 -0
  96. package/dist/conversations/artifacts.d.ts +10 -10
  97. package/dist/conversations/artifacts.js +35 -9
  98. package/dist/conversations/attachments.controller.d.ts +1 -1
  99. package/dist/conversations/attachments.controller.js +8 -6
  100. package/dist/conversations/attachments.module.d.ts +7 -0
  101. package/dist/conversations/attachments.module.js +25 -0
  102. package/dist/conversations/attachments.service.d.ts +30 -22
  103. package/dist/conversations/attachments.service.js +119 -46
  104. package/dist/conversations/conversations.controller.d.ts +8 -7
  105. package/dist/conversations/conversations.controller.js +59 -29
  106. package/dist/conversations/conversations.module.d.ts +8 -0
  107. package/dist/conversations/conversations.module.js +69 -0
  108. package/dist/conversations/conversations.service.d.ts +40 -38
  109. package/dist/conversations/conversations.service.js +130 -140
  110. package/dist/conversations/event-log.d.ts +28 -18
  111. package/dist/conversations/event-log.js +74 -27
  112. package/dist/conversations/files.d.ts +10 -10
  113. package/dist/conversations/files.js +37 -11
  114. package/dist/conversations/idem-keys.d.ts +5 -0
  115. package/dist/conversations/idem-keys.js +5 -0
  116. package/dist/conversations/job-ids.d.ts +6 -0
  117. package/dist/conversations/job-ids.js +6 -0
  118. package/dist/conversations/outputs-read.d.ts +11 -11
  119. package/dist/conversations/outputs-read.js +31 -7
  120. package/dist/conversations/queue.d.ts +48 -56
  121. package/dist/conversations/queue.js +13 -289
  122. package/dist/conversations/queue.service.d.ts +60 -0
  123. package/dist/conversations/queue.service.js +343 -0
  124. package/dist/conversations/sandbox-status.d.ts +13 -10
  125. package/dist/conversations/sandbox-status.js +36 -8
  126. package/dist/conversations/titles.d.ts +71 -24
  127. package/dist/conversations/titles.js +159 -63
  128. package/dist/ctx/bus.js +9 -3
  129. package/dist/ctx/create-ctx.d.ts +6 -0
  130. package/dist/ctx/create-ctx.js +7 -9
  131. package/dist/ctx/lock.d.ts +7 -3
  132. package/dist/ctx/lock.js +9 -20
  133. package/dist/ctx/secrets.d.ts +10 -2
  134. package/dist/ctx/secrets.js +7 -3
  135. package/dist/db/kernel-schema.d.ts +2 -2
  136. package/dist/db/pool.d.ts +5 -0
  137. package/dist/db/pool.js +1 -0
  138. package/dist/errors.d.ts +1 -0
  139. package/dist/errors.js +1 -0
  140. package/dist/evals/budget.d.ts +42 -21
  141. package/dist/evals/budget.js +114 -62
  142. package/dist/evals/evals.module.d.ts +31 -0
  143. package/dist/evals/evals.module.js +114 -0
  144. package/dist/evals/jobs.d.ts +20 -0
  145. package/dist/evals/jobs.js +45 -0
  146. package/dist/evals/run-replay.d.ts +56 -8
  147. package/dist/evals/run-replay.js +140 -80
  148. package/dist/evals/runs.controller.d.ts +1 -1
  149. package/dist/evals/runs.controller.js +17 -8
  150. package/dist/evals/runs.service.d.ts +23 -45
  151. package/dist/evals/runs.service.js +245 -234
  152. package/dist/evals/sets.controller.d.ts +1 -1
  153. package/dist/evals/sets.controller.js +17 -8
  154. package/dist/evals/sets.service.d.ts +22 -6
  155. package/dist/evals/sets.service.js +248 -194
  156. package/dist/evals/snapshot.d.ts +2 -2
  157. package/dist/evals/step-replay.d.ts +2 -2
  158. package/dist/evals/step-replay.js +1 -1
  159. package/dist/evals/trajectory.controller.d.ts +1 -1
  160. package/dist/evals/trajectory.controller.js +11 -7
  161. package/dist/evals/trajectory.service.d.ts +5 -4
  162. package/dist/evals/trajectory.service.js +30 -7
  163. package/dist/evals/worker.d.ts +44 -27
  164. package/dist/evals/worker.js +220 -121
  165. package/dist/extensions/admin-ops.d.ts +61 -33
  166. package/dist/extensions/admin-ops.js +248 -154
  167. package/dist/extensions/admin-view.d.ts +38 -27
  168. package/dist/extensions/admin-view.js +126 -55
  169. package/dist/extensions/approvals.d.ts +12 -8
  170. package/dist/extensions/approvals.js +73 -46
  171. package/dist/extensions/blobs.d.ts +27 -10
  172. package/dist/extensions/blobs.js +111 -45
  173. package/dist/extensions/bootstrap.d.ts +58 -31
  174. package/dist/extensions/bootstrap.js +175 -121
  175. package/dist/extensions/cli.d.ts +20 -10
  176. package/dist/extensions/cli.js +41 -96
  177. package/dist/extensions/config-issues.d.ts +7 -0
  178. package/dist/extensions/config-issues.js +31 -0
  179. package/dist/extensions/deployment-config-store.d.ts +49 -0
  180. package/dist/extensions/deployment-config-store.js +133 -0
  181. package/dist/extensions/deployment-config.d.ts +58 -67
  182. package/dist/extensions/deployment-config.js +202 -230
  183. package/dist/extensions/enabled.d.ts +5 -5
  184. package/dist/extensions/extensions.module.d.ts +8 -0
  185. package/dist/extensions/extensions.module.js +77 -0
  186. package/dist/extensions/hooks.d.ts +3 -2
  187. package/dist/extensions/hooks.js +1 -1
  188. package/dist/extensions/host.d.ts +72 -68
  189. package/dist/extensions/host.js +191 -152
  190. package/dist/extensions/installs.d.ts +49 -16
  191. package/dist/extensions/installs.js +128 -32
  192. package/dist/extensions/job-ids.d.ts +6 -0
  193. package/dist/extensions/job-ids.js +6 -0
  194. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  195. package/dist/extensions/lifecycle-topics.js +18 -0
  196. package/dist/extensions/lifecycle.d.ts +35 -47
  197. package/dist/extensions/lifecycle.js +103 -39
  198. package/dist/extensions/locks.d.ts +33 -0
  199. package/dist/extensions/locks.js +86 -0
  200. package/dist/extensions/migrate-lock.d.ts +3 -4
  201. package/dist/extensions/org-config.controller.d.ts +1 -1
  202. package/dist/extensions/org-config.controller.js +8 -5
  203. package/dist/extensions/org-config.d.ts +48 -46
  204. package/dist/extensions/org-config.js +284 -226
  205. package/dist/extensions/registry.d.ts +50 -2
  206. package/dist/extensions/registry.js +89 -4
  207. package/dist/extensions/sources.d.ts +12 -8
  208. package/dist/extensions/sources.js +34 -13
  209. package/dist/files/files.module.d.ts +3 -0
  210. package/dist/files/files.module.js +22 -0
  211. package/dist/files/previewers.controller.d.ts +7 -2
  212. package/dist/files/previewers.controller.js +17 -9
  213. package/dist/files/previewers.d.ts +13 -18
  214. package/dist/files/previewers.js +83 -36
  215. package/dist/http/adapter.d.ts +3 -0
  216. package/dist/http/adapter.js +25 -0
  217. package/dist/http/api.module.d.ts +3 -110
  218. package/dist/http/api.module.js +47 -355
  219. package/dist/http/app.d.ts +11 -15
  220. package/dist/http/app.js +17 -62
  221. package/dist/http/error-filter.module.d.ts +5 -0
  222. package/dist/http/error-filter.module.js +18 -0
  223. package/dist/http/error.filter.js +2 -2
  224. package/dist/identity/accounts.d.ts +82 -29
  225. package/dist/identity/accounts.js +294 -175
  226. package/dist/identity/api-tokens.d.ts +11 -7
  227. package/dist/identity/api-tokens.js +71 -44
  228. package/dist/identity/audit.d.ts +7 -4
  229. package/dist/identity/audit.js +5 -1
  230. package/dist/identity/auth.controller.d.ts +11 -10
  231. package/dist/identity/auth.controller.js +31 -25
  232. package/dist/identity/auth.guard.d.ts +3 -3
  233. package/dist/identity/auth.guard.js +6 -4
  234. package/dist/identity/binding.d.ts +9 -11
  235. package/dist/identity/binding.js +41 -13
  236. package/dist/identity/enterprise-admin.d.ts +18 -12
  237. package/dist/identity/enterprise-admin.js +67 -13
  238. package/dist/identity/external-identity-lock.d.ts +17 -0
  239. package/dist/identity/external-identity-lock.js +39 -0
  240. package/dist/identity/external.d.ts +19 -15
  241. package/dist/identity/external.js +163 -125
  242. package/dist/identity/identity.module.d.ts +6 -0
  243. package/dist/identity/identity.module.js +56 -0
  244. package/dist/identity/me.controller.d.ts +16 -15
  245. package/dist/identity/me.controller.js +37 -31
  246. package/dist/identity/sessions.d.ts +12 -10
  247. package/dist/identity/sessions.js +74 -42
  248. package/dist/identity/settings.d.ts +20 -14
  249. package/dist/identity/settings.js +85 -57
  250. package/dist/identity/sso.controller.d.ts +7 -7
  251. package/dist/identity/sso.controller.js +13 -9
  252. package/dist/identity/sso.d.ts +9 -12
  253. package/dist/identity/sso.js +54 -24
  254. package/dist/inbox/inbox.module.d.ts +3 -0
  255. package/dist/inbox/inbox.module.js +22 -0
  256. package/dist/inbox/inbox.service.d.ts +7 -9
  257. package/dist/inbox/inbox.service.js +32 -11
  258. package/dist/index.d.ts +16 -11
  259. package/dist/index.js +9 -6
  260. package/dist/infra/cache/cache.module.d.ts +3 -0
  261. package/dist/infra/cache/cache.module.js +16 -0
  262. package/dist/infra/cache/cache.service.d.ts +21 -0
  263. package/dist/infra/cache/cache.service.js +80 -0
  264. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  265. package/dist/infra/cache/cacheable.decorator.js +83 -0
  266. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  267. package/dist/infra/cli/kernel-cli.module.js +165 -0
  268. package/dist/infra/close-within.d.ts +15 -0
  269. package/dist/infra/close-within.js +36 -0
  270. package/dist/infra/config/config.module.d.ts +13 -0
  271. package/dist/infra/config/config.module.js +39 -0
  272. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  273. package/dist/infra/config/kernel-config.service.js +126 -0
  274. package/dist/infra/database/after-commit.d.ts +6 -0
  275. package/dist/infra/database/after-commit.js +9 -0
  276. package/dist/infra/database/database.module.d.ts +25 -0
  277. package/dist/infra/database/database.module.js +90 -0
  278. package/dist/infra/database/kernel-db.d.ts +22 -0
  279. package/dist/infra/database/kernel-db.js +65 -0
  280. package/dist/infra/database/transaction-host.d.ts +50 -0
  281. package/dist/infra/database/transaction-host.js +125 -0
  282. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  283. package/dist/infra/database/transactional.decorator.js +27 -0
  284. package/dist/infra/database/xact-lock.d.ts +17 -0
  285. package/dist/infra/database/xact-lock.js +43 -0
  286. package/dist/infra/events/kernel-events.d.ts +96 -0
  287. package/dist/infra/events/kernel-events.js +65 -0
  288. package/dist/infra/health/health.controller.d.ts +26 -0
  289. package/dist/infra/health/health.controller.js +104 -0
  290. package/dist/infra/health/health.module.d.ts +9 -0
  291. package/dist/infra/health/health.module.js +24 -0
  292. package/dist/infra/health/health.options.d.ts +10 -0
  293. package/dist/infra/health/health.options.js +15 -0
  294. package/dist/infra/health/shutdown-state.d.ts +6 -0
  295. package/dist/infra/health/shutdown-state.js +2 -0
  296. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  297. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  300. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  301. package/dist/infra/lifecycle/process-guards.js +86 -0
  302. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  303. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  304. package/dist/infra/lock/key-template.d.ts +13 -0
  305. package/dist/infra/lock/key-template.js +46 -0
  306. package/dist/infra/lock/lock.module.d.ts +3 -0
  307. package/dist/infra/lock/lock.module.js +16 -0
  308. package/dist/infra/lock/lock.service.d.ts +120 -0
  309. package/dist/infra/lock/lock.service.js +343 -0
  310. package/dist/infra/lock/shared-lease.d.ts +44 -0
  311. package/dist/infra/lock/shared-lease.js +121 -0
  312. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  313. package/dist/infra/lock/with-lock.decorator.js +49 -0
  314. package/dist/infra/logging/logging.module.d.ts +16 -0
  315. package/dist/infra/logging/logging.module.js +34 -0
  316. package/dist/infra/queue/configured-processor.d.ts +18 -0
  317. package/dist/infra/queue/configured-processor.js +23 -0
  318. package/dist/infra/queue/job-failure.d.ts +18 -0
  319. package/dist/infra/queue/job-failure.js +26 -0
  320. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  321. package/dist/infra/queue/queue-shutdown.js +81 -0
  322. package/dist/infra/queue/queue.module.d.ts +16 -0
  323. package/dist/infra/queue/queue.module.js +61 -0
  324. package/dist/infra/queue/redis-connection.d.ts +7 -0
  325. package/dist/infra/queue/redis-connection.js +18 -0
  326. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  327. package/dist/infra/queue/retired-schedulers.js +9 -0
  328. package/dist/infra/queue/run-job.d.ts +16 -0
  329. package/dist/infra/queue/run-job.js +19 -0
  330. package/dist/infra/redis/redis.module.d.ts +24 -0
  331. package/dist/infra/redis/redis.module.js +87 -0
  332. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  333. package/dist/infra/schedule/cron-tick.js +25 -0
  334. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  335. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  336. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  337. package/dist/infra/schedule/locked-interval.js +190 -0
  338. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  339. package/dist/infra/schedule/locked-tick.js +137 -0
  340. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  341. package/dist/infra/schedule/schedule.module.js +27 -0
  342. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  343. package/dist/infra/schedule/scheduled-runs.js +163 -0
  344. package/dist/infra/swagger/swagger.d.ts +16 -0
  345. package/dist/infra/swagger/swagger.js +31 -0
  346. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  347. package/dist/infra/throttler/credential-throttler.js +77 -0
  348. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  349. package/dist/infra/throttler/named-throttlers.js +119 -0
  350. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  351. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  352. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  353. package/dist/infra/throttler/throttler.guard.js +68 -0
  354. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  355. package/dist/infra/throttler/throttler.module.js +53 -0
  356. package/dist/infra/tokens.d.ts +15 -0
  357. package/dist/infra/tokens.js +15 -0
  358. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  359. package/dist/infra/validation/create-zod-dto.js +35 -0
  360. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  361. package/dist/infra/validation/parse-with-zod.js +12 -0
  362. package/dist/infra/validation/validation.module.d.ts +3 -0
  363. package/dist/infra/validation/validation.module.js +16 -0
  364. package/dist/infra/validation/zod-params.d.ts +7 -0
  365. package/dist/infra/validation/zod-params.js +42 -0
  366. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  367. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  368. package/dist/kernel.d.ts +9 -244
  369. package/dist/kernel.js +8 -1305
  370. package/dist/kernel.module.d.ts +17 -0
  371. package/dist/kernel.module.js +136 -0
  372. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  373. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  374. package/dist/lifecycle/tokens.d.ts +3 -0
  375. package/dist/lifecycle/tokens.js +3 -0
  376. package/dist/log-context.d.ts +2 -0
  377. package/dist/log-context.js +4 -0
  378. package/dist/models/models.module.d.ts +3 -0
  379. package/dist/models/models.module.js +24 -0
  380. package/dist/models/prices.d.ts +8 -2
  381. package/dist/models/prices.js +65 -37
  382. package/dist/models/purposes.controller.d.ts +1 -1
  383. package/dist/models/purposes.controller.js +5 -6
  384. package/dist/models/purposes.d.ts +35 -13
  385. package/dist/models/purposes.js +101 -51
  386. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  387. package/dist/orgs/directory-sync.controller.js +2 -2
  388. package/dist/orgs/directory-sync.d.ts +61 -31
  389. package/dist/orgs/directory-sync.js +212 -125
  390. package/dist/orgs/invitations.controller.d.ts +8 -8
  391. package/dist/orgs/invitations.controller.js +27 -26
  392. package/dist/orgs/invitations.service.d.ts +12 -9
  393. package/dist/orgs/invitations.service.js +130 -92
  394. package/dist/orgs/job-ids.d.ts +8 -0
  395. package/dist/orgs/job-ids.js +8 -0
  396. package/dist/orgs/members.service.d.ts +19 -12
  397. package/dist/orgs/members.service.js +161 -117
  398. package/dist/orgs/offboarding.d.ts +54 -57
  399. package/dist/orgs/offboarding.js +161 -71
  400. package/dist/orgs/org-lock.d.ts +28 -19
  401. package/dist/orgs/org-lock.js +81 -35
  402. package/dist/orgs/org.guard.d.ts +1 -1
  403. package/dist/orgs/org.guard.js +2 -2
  404. package/dist/orgs/orgs.controller.d.ts +13 -13
  405. package/dist/orgs/orgs.controller.js +29 -17
  406. package/dist/orgs/orgs.module.d.ts +6 -0
  407. package/dist/orgs/orgs.module.js +68 -0
  408. package/dist/orgs/orgs.service.d.ts +30 -19
  409. package/dist/orgs/orgs.service.js +139 -86
  410. package/dist/orgs/settings.controller.d.ts +1 -1
  411. package/dist/orgs/settings.controller.js +8 -6
  412. package/dist/orgs/settings.service.d.ts +14 -8
  413. package/dist/orgs/settings.service.js +75 -46
  414. package/dist/overrides.d.ts +56 -0
  415. package/dist/overrides.js +30 -0
  416. package/dist/roles/gateway-role.d.ts +43 -0
  417. package/dist/roles/gateway-role.js +98 -0
  418. package/dist/roles/gateway.module.d.ts +8 -0
  419. package/dist/roles/gateway.module.js +28 -0
  420. package/dist/roles/worker-role.d.ts +63 -0
  421. package/dist/roles/worker-role.js +144 -0
  422. package/dist/roles/worker.module.d.ts +14 -0
  423. package/dist/roles/worker.module.js +90 -0
  424. package/dist/runtime/abort.js +19 -2
  425. package/dist/runtime/checkpointer.d.ts +8 -3
  426. package/dist/runtime/checkpointer.js +87 -55
  427. package/dist/runtime/conversation-lock.d.ts +20 -11
  428. package/dist/runtime/conversation-lock.js +62 -72
  429. package/dist/runtime/hook-calls.d.ts +3 -3
  430. package/dist/runtime/hook-calls.js +1 -6
  431. package/dist/runtime/job-ids.d.ts +10 -0
  432. package/dist/runtime/job-ids.js +10 -0
  433. package/dist/runtime/langgraph-loop.js +1 -1
  434. package/dist/runtime/loop.d.ts +7 -0
  435. package/dist/runtime/loop.js +14 -0
  436. package/dist/runtime/maintenance-queue.d.ts +10 -0
  437. package/dist/runtime/maintenance-queue.js +10 -0
  438. package/dist/runtime/maintenance.d.ts +45 -74
  439. package/dist/runtime/maintenance.js +139 -137
  440. package/dist/runtime/model-call.d.ts +7 -4
  441. package/dist/runtime/model-call.js +24 -57
  442. package/dist/runtime/providers.d.ts +17 -6
  443. package/dist/runtime/providers.js +66 -25
  444. package/dist/runtime/quota.d.ts +17 -3
  445. package/dist/runtime/quota.js +27 -2
  446. package/dist/runtime/retired-schedulers.d.ts +7 -0
  447. package/dist/runtime/retired-schedulers.js +31 -0
  448. package/dist/runtime/run-control.d.ts +33 -0
  449. package/dist/runtime/run-control.js +77 -0
  450. package/dist/runtime/run-finish.d.ts +26 -17
  451. package/dist/runtime/run-finish.js +98 -51
  452. package/dist/runtime/run-jobs.d.ts +48 -0
  453. package/dist/runtime/run-jobs.js +95 -0
  454. package/dist/runtime/run-processors.d.ts +60 -0
  455. package/dist/runtime/run-processors.js +185 -0
  456. package/dist/runtime/run-queue.d.ts +32 -57
  457. package/dist/runtime/run-queue.js +291 -295
  458. package/dist/runtime/run-steps.d.ts +39 -0
  459. package/dist/runtime/run-steps.js +96 -0
  460. package/dist/runtime/run-worker.d.ts +121 -75
  461. package/dist/runtime/run-worker.js +340 -226
  462. package/dist/runtime/runtime.module.d.ts +10 -0
  463. package/dist/runtime/runtime.module.js +112 -0
  464. package/dist/runtime/step-log.d.ts +40 -0
  465. package/dist/runtime/step-log.js +94 -0
  466. package/dist/runtime/stream.controller.d.ts +5 -8
  467. package/dist/runtime/stream.controller.js +14 -12
  468. package/dist/runtime/stream.d.ts +24 -6
  469. package/dist/runtime/stream.js +78 -7
  470. package/dist/runtime/subagents/child.d.ts +3 -44
  471. package/dist/runtime/subagents/child.js +0 -79
  472. package/dist/runtime/subagents/definition.d.ts +4 -4
  473. package/dist/runtime/subagents/definition.js +2 -2
  474. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  475. package/dist/runtime/subagents/dispatch.js +135 -140
  476. package/dist/runtime/subagents/limits.d.ts +9 -4
  477. package/dist/runtime/subagents/limits.js +4 -2
  478. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  479. package/dist/runtime/subagents/org-agents.js +1 -1
  480. package/dist/runtime/subagents/progress.d.ts +2 -2
  481. package/dist/runtime/subagents/roster.d.ts +3 -3
  482. package/dist/runtime/subagents/roster.js +1 -1
  483. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  484. package/dist/runtime/subagents/skill-fork.js +16 -5
  485. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  486. package/dist/runtime/subagents/subagents.service.js +101 -0
  487. package/dist/runtime/usage-report.d.ts +94 -52
  488. package/dist/runtime/usage-report.js +200 -100
  489. package/dist/runtime/waits.d.ts +125 -57
  490. package/dist/runtime/waits.js +431 -208
  491. package/dist/sandbox/job-ids.d.ts +10 -0
  492. package/dist/sandbox/job-ids.js +10 -0
  493. package/dist/sandbox/jobs.d.ts +41 -0
  494. package/dist/sandbox/jobs.js +113 -0
  495. package/dist/sandbox/leases.d.ts +39 -31
  496. package/dist/sandbox/leases.js +117 -257
  497. package/dist/sandbox/providers.d.ts +19 -0
  498. package/dist/sandbox/providers.js +38 -0
  499. package/dist/sandbox/sandbox.module.d.ts +8 -0
  500. package/dist/sandbox/sandbox.module.js +30 -0
  501. package/dist/sandbox/sandbox.service.d.ts +24 -29
  502. package/dist/sandbox/sandbox.service.js +106 -75
  503. package/dist/skills/catalog.d.ts +33 -20
  504. package/dist/skills/catalog.js +96 -53
  505. package/dist/skills/changes.controller.d.ts +4 -4
  506. package/dist/skills/changes.controller.js +15 -9
  507. package/dist/skills/changes.service.d.ts +28 -18
  508. package/dist/skills/changes.service.js +421 -364
  509. package/dist/skills/invocable.controller.d.ts +1 -1
  510. package/dist/skills/invocable.controller.js +8 -5
  511. package/dist/skills/invoke.d.ts +16 -15
  512. package/dist/skills/invoke.js +48 -17
  513. package/dist/skills/skills.controller.d.ts +1 -1
  514. package/dist/skills/skills.controller.js +11 -6
  515. package/dist/skills/skills.module.d.ts +6 -0
  516. package/dist/skills/skills.module.js +30 -0
  517. package/dist/skills/skills.service.d.ts +47 -30
  518. package/dist/skills/skills.service.js +221 -158
  519. package/dist/storage/job-ids.d.ts +6 -0
  520. package/dist/storage/job-ids.js +6 -0
  521. package/dist/storage/purge.d.ts +22 -7
  522. package/dist/storage/purge.js +55 -3
  523. package/dist/storage/storage.module.d.ts +6 -0
  524. package/dist/storage/storage.module.js +23 -0
  525. package/dist/storage/storage.service.d.ts +18 -4
  526. package/dist/storage/storage.service.js +44 -3
  527. package/dist/tools/approvals.controller.d.ts +1 -1
  528. package/dist/tools/approvals.controller.js +12 -8
  529. package/dist/tools/approvals.service.d.ts +27 -25
  530. package/dist/tools/approvals.service.js +324 -258
  531. package/dist/tools/breaker.d.ts +2 -2
  532. package/dist/tools/breaker.js +21 -3
  533. package/dist/tools/builtins/ask-user.d.ts +2 -2
  534. package/dist/tools/builtins/ask-user.js +1 -1
  535. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  536. package/dist/tools/builtins/builtin-tools.js +80 -0
  537. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  538. package/dist/tools/builtins/read-tool-output.js +1 -1
  539. package/dist/tools/builtins/sandbox/bash.js +2 -2
  540. package/dist/tools/builtins/sandbox/common.d.ts +2 -1
  541. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  542. package/dist/tools/builtins/sandbox/edit.js +1 -1
  543. package/dist/tools/builtins/sandbox/glob.js +2 -2
  544. package/dist/tools/builtins/sandbox/grep.js +2 -2
  545. package/dist/tools/builtins/sandbox/read.js +1 -1
  546. package/dist/tools/builtins/sandbox/write.js +1 -1
  547. package/dist/tools/builtins/skill-load.d.ts +3 -3
  548. package/dist/tools/builtins/skill-load.js +1 -1
  549. package/dist/tools/canonical-json.d.ts +6 -0
  550. package/dist/tools/canonical-json.js +16 -0
  551. package/dist/tools/connector-content.controller.d.ts +1 -1
  552. package/dist/tools/connector-content.controller.js +11 -6
  553. package/dist/tools/connector-content.d.ts +12 -15
  554. package/dist/tools/connector-content.js +53 -18
  555. package/dist/tools/connectors.controller.d.ts +1 -1
  556. package/dist/tools/connectors.controller.js +21 -10
  557. package/dist/tools/connectors.service.d.ts +31 -13
  558. package/dist/tools/connectors.service.js +434 -344
  559. package/dist/tools/credentials.d.ts +17 -20
  560. package/dist/tools/credentials.js +55 -34
  561. package/dist/tools/drift.d.ts +29 -41
  562. package/dist/tools/drift.js +111 -79
  563. package/dist/tools/info.d.ts +12 -9
  564. package/dist/tools/info.js +33 -7
  565. package/dist/tools/job-ids.d.ts +13 -0
  566. package/dist/tools/job-ids.js +15 -0
  567. package/dist/tools/jobs.d.ts +24 -0
  568. package/dist/tools/jobs.js +69 -0
  569. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  570. package/dist/tools/oauth/flow-paths.js +38 -0
  571. package/dist/tools/oauth/flow.d.ts +30 -30
  572. package/dist/tools/oauth/flow.js +109 -81
  573. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  574. package/dist/tools/oauth/oauth.controller.js +12 -9
  575. package/dist/tools/oauth/tokens.d.ts +11 -3
  576. package/dist/tools/oauth/tokens.js +15 -14
  577. package/dist/tools/outputs.d.ts +13 -4
  578. package/dist/tools/outputs.js +47 -3
  579. package/dist/tools/pipeline.d.ts +62 -46
  580. package/dist/tools/pipeline.js +145 -64
  581. package/dist/tools/policy.d.ts +2 -2
  582. package/dist/tools/questions.controller.d.ts +1 -1
  583. package/dist/tools/questions.controller.js +8 -5
  584. package/dist/tools/questions.service.d.ts +25 -24
  585. package/dist/tools/questions.service.js +201 -142
  586. package/dist/tools/registry.d.ts +30 -20
  587. package/dist/tools/registry.js +73 -37
  588. package/dist/tools/specs.d.ts +5 -4
  589. package/dist/tools/specs.js +3 -1
  590. package/dist/tools/tools.module.d.ts +10 -0
  591. package/dist/tools/tools.module.js +91 -0
  592. package/dist/ui/call-extension.d.ts +16 -0
  593. package/dist/ui/call-extension.js +38 -0
  594. package/dist/ui/embed-token.d.ts +9 -5
  595. package/dist/ui/embed-token.js +34 -6
  596. package/dist/ui/ui-stream.d.ts +22 -17
  597. package/dist/ui/ui-stream.js +72 -12
  598. package/dist/ui/ui.module.d.ts +7 -0
  599. package/dist/ui/ui.module.js +28 -0
  600. package/dist/ui/views.controller.d.ts +14 -12
  601. package/dist/ui/views.controller.js +32 -25
  602. package/dist/ui/views.d.ts +9 -57
  603. package/dist/ui/views.js +43 -45
  604. package/package.json +9 -2
  605. package/dist/http/health.controller.d.ts +0 -26
  606. package/dist/http/health.controller.js +0 -79
  607. package/dist/http/tokens.d.ts +0 -131
  608. package/dist/http/tokens.js +0 -131
  609. package/dist/http/zod.pipe.d.ts +0 -8
  610. package/dist/http/zod.pipe.js +0 -14
  611. package/dist/identity/rate-limit.d.ts +0 -55
  612. package/dist/identity/rate-limit.js +0 -121
  613. package/dist/sandbox/lifecycle.d.ts +0 -21
  614. package/dist/sandbox/lifecycle.js +0 -68
  615. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  616. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -0,0 +1,186 @@
1
+ import type { Connector, ConnectorTemplateSpec, LocalizedName, PluginManifest } from "@capybara-hq/plugin-sdk";
2
+ import type { KernelConfig } from "../config/schema.js";
3
+ import type { KernelSchemaDb, SourceFormat } from "../db/kernel-schema.js";
4
+ import type { StorageService } from "../storage/storage.service.js";
5
+ import type { CatalogItemView, CatalogPolicy, CatalogVersionSource, PermissionsMismatch, SourceDetail } from "./catalog.service.js";
6
+ import type { TranslationReport } from "./claude/report.js";
7
+ import { type ImportedAs } from "./marketplaces.service.js";
8
+ /**
9
+ * The object storage prefix of one import (relative to `deployment/`):
10
+ * `directory/<itemId>/<version>/<importId>/`. Each import gets a new `importId`, so the losing one of
11
+ * two concurrent imports of the same version never overwrites the committed version's files; reads
12
+ * always go through the `object_prefix` stored on the version row. Build metadata's `+` is written
13
+ * as `_` (a `+` in a key can turn into a space through URL query encoding).
14
+ */
15
+ export declare const catalogObjectPrefix: (itemId: string, version: string, importId: string) => string;
16
+ /**
17
+ * Checks a connector template against the loaded connector `c` (problem paths start with `at`): the
18
+ * endpoint matches its `endpointSchema` and carries no credential-like headers / query / URL user
19
+ * info (the same rule as connector installs); every `editableEndpoint` path exists in the endpoint
20
+ * schema.
21
+ */
22
+ export declare function templateProblems(c: Connector, t: ConnectorTemplateSpec, at: string): string[];
23
+ /** Writes the files to `deployment/<prefix><path>` ({@link PUT_CONCURRENCY} at a time). */
24
+ export declare function putCatalogFiles(storage: StorageService, prefix: string, files: {
25
+ path: string;
26
+ size: number;
27
+ data: Uint8Array;
28
+ }[]): Promise<void>;
29
+ /** Compares the marketplace's permission summary with the computed keys ({@link PermissionsMismatch}). */
30
+ export declare function permissionsMismatch(declared: string[] | undefined, actual: string[] | undefined): PermissionsMismatch;
31
+ /** The fields the list shows (the item's publisher / description / displayName). */
32
+ export interface CatalogListing {
33
+ publisher: string;
34
+ description: string;
35
+ displayName: LocalizedName | null;
36
+ }
37
+ /** Input of {@link writeCatalogVersion}. */
38
+ export interface CatalogVersionWrite {
39
+ /** null: the CLI (no account). */
40
+ actor: string | null;
41
+ actorTokenId?: string;
42
+ name: string;
43
+ /** null: a git plugin without package.json. */
44
+ packageName: string | null;
45
+ /**
46
+ * The version recorded (from {@link precheckCatalogImport}: the plugin's own, or with build
47
+ * metadata when that release was imported with other content).
48
+ */
49
+ version: string;
50
+ /** The content digest of the plugin's files. */
51
+ contentDigest: string;
52
+ /** The normalized plugin.json. */
53
+ manifest: PluginManifest;
54
+ listing: CatalogListing;
55
+ /** The id of the item to create when there is none yet (the one the storage prefix used). */
56
+ newItemId: string;
57
+ source: {
58
+ source: CatalogVersionSource;
59
+ ref: string;
60
+ integrity?: string;
61
+ detail?: SourceDetail;
62
+ };
63
+ /** Imported from a marketplace: the item records it. */
64
+ marketplaceId?: string;
65
+ objectPrefix: string | null;
66
+ extensionSha256: string | null;
67
+ files: {
68
+ path: string;
69
+ size: number;
70
+ sha256: string;
71
+ }[];
72
+ size: number;
73
+ /** The format the plugin was read from (default `capybara`). */
74
+ sourceFormat?: SourceFormat;
75
+ /** The translation report of a Claude Code plugin. */
76
+ translation?: TranslationReport | null;
77
+ /** The root LICENSE text. */
78
+ licenseText?: string | null;
79
+ /** The root LICENSE was too long (or not UTF-8) to store. */
80
+ licenseTruncated?: boolean;
81
+ /** Merged into the detail of the `catalog.imported` audit. */
82
+ auditDetail?: Record<string, unknown>;
83
+ }
84
+ /**
85
+ * The identity of a git source, `<host>/<repo>:<path>` (host lower case, no `.git`), or null when
86
+ * the source is not git. An item without package.json is identified by it instead of a package name.
87
+ */
88
+ export declare function gitIdentity(detail: SourceDetail | undefined): string | null;
89
+ /** What is being imported, as far as the version conflict rules need it. */
90
+ export interface ImportIdentity {
91
+ packageName: string | null;
92
+ /** The plugin's own version (plugin.json, else the fallback of spec §5.3). */
93
+ version: string;
94
+ contentDigest: string;
95
+ integrity?: string;
96
+ detail?: SourceDetail;
97
+ marketplaceId?: string;
98
+ }
99
+ type ExistingVersion = {
100
+ version: string;
101
+ content_digest: string | null;
102
+ integrity: string | null;
103
+ };
104
+ /**
105
+ * The version a new import records (Decision 6, spec §5.3): the plugin's own version, unless that
106
+ * release is already imported. A version of the same release (equal but for build metadata) with
107
+ * the same content (digest; for versions without one, the same integrity) -> `catalog.version_exists`
108
+ * "already imported"; other content -> `<version>+git.<sha12>` (git) or `+sha256.<12>` (any other
109
+ * source, the digest's first 12 hex), never overwriting the imported version. A git commit already
110
+ * recorded with other content (a Claude Code plugin whose marketplace entry changed while its own
111
+ * commit did not, see `claudeContentDigest`) falls back to `+sha256.<12>`.
112
+ */
113
+ export declare function recordedVersion(existing: ExistingVersion[], p: ImportIdentity): string;
114
+ /**
115
+ * Conflict precheck before writing (no lock; {@link writeCatalogVersion}'s re-check inside the
116
+ * transaction is final): an item with the same name from another npm package (or, without one,
117
+ * another git source) -> `catalog.name_conflict`; the release already imported with the same
118
+ * content -> `catalog.version_exists`. Returns the existing item (undefined when there is none) and
119
+ * the version to record ({@link recordedVersion}).
120
+ */
121
+ export declare function precheckCatalogImport(db: KernelSchemaDb, name: string, p: ImportIdentity): Promise<{
122
+ existing: {
123
+ id: string;
124
+ } | undefined;
125
+ version: string;
126
+ }>;
127
+ /**
128
+ * Writes a catalog version in the caller's transaction (`db` is its handle; the caller has
129
+ * re-checked the enterprise admin and holds the name's {@link CatalogItemLock}): checks conflicts again (the same source; no version of
130
+ * the release with the same content; `version` not taken meanwhile), creates the item when there is
131
+ * none or adds the version (latest and display fields change only for a newer version, a version
132
+ * equal but for build metadata being newer as the later import), and writes the version row (with
133
+ * its content digest) and the `catalog.imported` audit. Returns the item id.
134
+ */
135
+ export declare function writeCatalogVersion(db: KernelSchemaDb, w: CatalogVersionWrite): Promise<string>;
136
+ /**
137
+ * An extension name belongs to the npm package that first installed it (`extension_name_owners`,
138
+ * Ruling P3): when another package owns it, the import is refused right away with
139
+ * `extension.name_conflict` (the same code as at install), instead of failing only at deploy time.
140
+ */
141
+ export declare function assertPluginNameOwner(db: KernelSchemaDb, name: string, packageName: string | null): Promise<void>;
142
+ /** A catalog version as {@link marketplaceLatest} compares it with its marketplace entries. */
143
+ type RecordedVersion = ImportedAs & {
144
+ imported_at?: Date;
145
+ };
146
+ /** What the marketplace says about a marketplace-imported item. */
147
+ export interface MarketplaceStatus {
148
+ /** See {@link CatalogItemView.latestMarketplaceVersion}. */
149
+ latest: string | null;
150
+ /** See {@link CatalogItemView.contentChanged}. */
151
+ contentChanged: boolean;
152
+ }
153
+ /**
154
+ * For each marketplace-imported item, its marketplace (when enabled): the highest compatible
155
+ * version listed, and whether a compatible entry's content changed at an imported version.
156
+ */
157
+ export declare function marketplaceLatest(db: KernelSchemaDb, config: KernelConfig, items: {
158
+ id: string;
159
+ name: string;
160
+ marketplace_id?: string | null;
161
+ }[], versions: ReadonlyMap<string, readonly RecordedVersion[]>): Promise<Map<string, MarketplaceStatus>>;
162
+ /** Org install counts per item (see {@link CatalogItemView.installs}). */
163
+ export declare function countInstalls(db: KernelSchemaDb, items: {
164
+ id: string;
165
+ name: string;
166
+ latest_version: string;
167
+ }[], versions: ReadonlyMap<string, {
168
+ version: string;
169
+ extension_sha256: string | null;
170
+ }[]>): Promise<Map<string, number>>;
171
+ export declare function itemView(i: {
172
+ id: string;
173
+ name: string;
174
+ publisher: string;
175
+ display_name: LocalizedName | null;
176
+ description: string;
177
+ policy: CatalogPolicy;
178
+ latest_version: string;
179
+ marketplace_id?: string | null;
180
+ updated_at: Date;
181
+ }, versions: {
182
+ version: string;
183
+ source: string;
184
+ imported_at?: Date;
185
+ }[], installs?: number, marketplace?: MarketplaceStatus): CatalogItemView;
186
+ export {};
@@ -0,0 +1,410 @@
1
+ import { sql } from "kysely";
2
+ import { ApiError } from "../errors.js";
3
+ import { enabledExtensionsByOrg } from "../extensions/enabled.js";
4
+ import { audit } from "../identity/audit.js";
5
+ import { endpointCredentialIssues } from "../tools/endpoint.js";
6
+ import { gitLocationIdentity } from "./git-source.js";
7
+ import { entryCompatible, entryContentChanged, sourceEffective, } from "./marketplaces.service.js";
8
+ import { schemaHasPath } from "./schema-path.js";
9
+ import { compareVersions, newestFirst, sameRelease, withBuild } from "./versions.js";
10
+ /**
11
+ * The object storage prefix of one import (relative to `deployment/`):
12
+ * `directory/<itemId>/<version>/<importId>/`. Each import gets a new `importId`, so the losing one of
13
+ * two concurrent imports of the same version never overwrites the committed version's files; reads
14
+ * always go through the `object_prefix` stored on the version row. Build metadata's `+` is written
15
+ * as `_` (a `+` in a key can turn into a space through URL query encoding).
16
+ */
17
+ export const catalogObjectPrefix = (itemId, version, importId) => `directory/${itemId}/${version.replace(/\+/g, "_")}/${importId}/`;
18
+ const PUT_CONCURRENCY = 8;
19
+ /**
20
+ * Checks a connector template against the loaded connector `c` (problem paths start with `at`): the
21
+ * endpoint matches its `endpointSchema` and carries no credential-like headers / query / URL user
22
+ * info (the same rule as connector installs); every `editableEndpoint` path exists in the endpoint
23
+ * schema.
24
+ */
25
+ export function templateProblems(c, t, at) {
26
+ const problems = [];
27
+ const r = c.endpointSchema.safeParse(t.endpoint);
28
+ if (!r.success) {
29
+ for (const i of r.error.issues) {
30
+ problems.push(`${[`${at}.endpoint`, ...i.path.map(String)].join(".")}: ${i.message}`);
31
+ }
32
+ }
33
+ else {
34
+ for (const leak of endpointCredentialIssues(r.data)) {
35
+ problems.push(`${at}.${leak.path}: ${leak.message}`);
36
+ }
37
+ }
38
+ for (const p of t.editableEndpoint ?? []) {
39
+ if (!schemaHasPath(c.endpointSchema, p.split("."))) {
40
+ problems.push(`${at}.editableEndpoint "${p}" is not a field of the ${t.connector} connector's endpoint`);
41
+ }
42
+ }
43
+ return problems;
44
+ }
45
+ /** Writes the files to `deployment/<prefix><path>` ({@link PUT_CONCURRENCY} at a time). */
46
+ export async function putCatalogFiles(storage, prefix, files) {
47
+ const store = storage.deployment();
48
+ const queue = [...files];
49
+ await Promise.all(Array.from({ length: Math.min(PUT_CONCURRENCY, queue.length) }, async () => {
50
+ for (let f = queue.shift(); f; f = queue.shift()) {
51
+ await store.put(`${prefix}${f.path}`, f.data, {
52
+ contentType: "application/octet-stream",
53
+ size: f.size,
54
+ });
55
+ }
56
+ }));
57
+ }
58
+ /** Compares the marketplace's permission summary with the computed keys ({@link PermissionsMismatch}). */
59
+ export function permissionsMismatch(declared, actual) {
60
+ if (declared === undefined || actual === undefined)
61
+ return null;
62
+ const want = new Set(declared);
63
+ const have = new Set(actual);
64
+ const missing = [...have].filter((k) => !want.has(k)).sort();
65
+ const extra = [...want].filter((k) => !have.has(k)).sort();
66
+ return missing.length > 0 || extra.length > 0 ? { missing, extra } : null;
67
+ }
68
+ /**
69
+ * The live item of a name, with the source identity of its latest version
70
+ * ({@link sourceIdentity}; null when there is none).
71
+ */
72
+ async function liveItem(db, name) {
73
+ const item = await db
74
+ .selectFrom("catalog_items")
75
+ .select(["id", "package_name", "latest_version", "marketplace_id"])
76
+ .where("name", "=", name)
77
+ .where("deleted_at", "is", null)
78
+ .executeTakeFirst();
79
+ if (!item)
80
+ return undefined;
81
+ const latest = await db
82
+ .selectFrom("catalog_item_versions")
83
+ .select("source_detail")
84
+ .where("item_id", "=", item.id)
85
+ .where("version", "=", item.latest_version)
86
+ .executeTakeFirst();
87
+ return {
88
+ ...item,
89
+ source: sourceIdentity(latest?.source_detail ?? undefined, item.marketplace_id ?? undefined),
90
+ };
91
+ }
92
+ /**
93
+ * The identity of a git source, `<host>/<repo>:<path>` (host lower case, no `.git`), or null when
94
+ * the source is not git. An item without package.json is identified by it instead of a package name.
95
+ */
96
+ export function gitIdentity(detail) {
97
+ if (detail === undefined || !("commit" in detail))
98
+ return null;
99
+ return gitLocationIdentity(detail);
100
+ }
101
+ /**
102
+ * What identifies the source of a plugin without package.json: `git <host>/<repo>:<path>`, or, for
103
+ * a marketplace archive (a skills-only tgz without plugin.json), `marketplace <id>` (the
104
+ * marketplace vouches for its entries; archive URLs change from version to version). null for
105
+ * anything else.
106
+ */
107
+ function sourceIdentity(detail, marketplaceId) {
108
+ const git = gitIdentity(detail);
109
+ if (git !== null)
110
+ return `git ${git}`;
111
+ if (detail !== undefined && "url" in detail && marketplaceId !== undefined) {
112
+ return `marketplace ${marketplaceId}`;
113
+ }
114
+ return null;
115
+ }
116
+ /** The versions of an item, with what tells their content apart. */
117
+ async function itemVersions(db, itemId) {
118
+ return db
119
+ .selectFrom("catalog_item_versions")
120
+ .select(["version", "content_digest", "integrity"])
121
+ .where("item_id", "=", itemId)
122
+ .execute();
123
+ }
124
+ /** `atConfirm`: found under the lock at confirm (another import committed after the review). */
125
+ const versionExists = (version, sameContent, atConfirm = false) => new ApiError("catalog.version_exists", (sameContent
126
+ ? `Version ${version} of this catalog item is already imported with the same content`
127
+ : `Version ${version} of this catalog item has already been imported`) +
128
+ (atConfirm
129
+ ? " (by another import since this one was prepared); prepare the import again"
130
+ : ""));
131
+ /**
132
+ * No version of the release of `p.version` (equal but for build metadata) holds the same content
133
+ * (digest; for a version without one, the same integrity), else `catalog.version_exists`.
134
+ */
135
+ function assertNewContent(existing, p, atConfirm = false) {
136
+ const same = existing.find((v) => sameRelease(v.version, p.version) &&
137
+ (v.content_digest !== null
138
+ ? v.content_digest === p.contentDigest
139
+ : v.integrity !== null && v.integrity === p.integrity));
140
+ if (same)
141
+ throw versionExists(same.version, true, atConfirm);
142
+ }
143
+ /**
144
+ * The version a new import records (Decision 6, spec §5.3): the plugin's own version, unless that
145
+ * release is already imported. A version of the same release (equal but for build metadata) with
146
+ * the same content (digest; for versions without one, the same integrity) -> `catalog.version_exists`
147
+ * "already imported"; other content -> `<version>+git.<sha12>` (git) or `+sha256.<12>` (any other
148
+ * source, the digest's first 12 hex), never overwriting the imported version. A git commit already
149
+ * recorded with other content (a Claude Code plugin whose marketplace entry changed while its own
150
+ * commit did not, see `claudeContentDigest`) falls back to `+sha256.<12>`.
151
+ */
152
+ export function recordedVersion(existing, p) {
153
+ assertNewContent(existing, p);
154
+ if (!existing.some((v) => v.version === p.version))
155
+ return p.version;
156
+ const d = p.detail;
157
+ const byDigest = withBuild(p.version, `sha256.${p.contentDigest.slice(0, 12)}`);
158
+ let next = d !== undefined && "commit" in d
159
+ ? withBuild(p.version, `git.${d.commit.slice(0, 12)}`)
160
+ : byDigest;
161
+ if (existing.some((v) => v.version === next))
162
+ next = byDigest;
163
+ if (existing.some((v) => v.version === next))
164
+ throw versionExists(next, false);
165
+ return next;
166
+ }
167
+ /**
168
+ * Conflict precheck before writing (no lock; {@link writeCatalogVersion}'s re-check inside the
169
+ * transaction is final): an item with the same name from another npm package (or, without one,
170
+ * another git source) -> `catalog.name_conflict`; the release already imported with the same
171
+ * content -> `catalog.version_exists`. Returns the existing item (undefined when there is none) and
172
+ * the version to record ({@link recordedVersion}).
173
+ */
174
+ export async function precheckCatalogImport(db, name, p) {
175
+ const existing = await liveItem(db, name);
176
+ if (!existing)
177
+ return { existing, version: p.version };
178
+ assertSameSource(existing, p.packageName, sourceIdentity(p.detail, p.marketplaceId));
179
+ return { existing, version: recordedVersion(await itemVersions(db, existing.id), p) };
180
+ }
181
+ /**
182
+ * Writes a catalog version in the caller's transaction (`db` is its handle; the caller has
183
+ * re-checked the enterprise admin and holds the name's {@link CatalogItemLock}): checks conflicts again (the same source; no version of
184
+ * the release with the same content; `version` not taken meanwhile), creates the item when there is
185
+ * none or adds the version (latest and display fields change only for a newer version, a version
186
+ * equal but for build metadata being newer as the later import), and writes the version row (with
187
+ * its content digest) and the `catalog.imported` audit. Returns the item id.
188
+ */
189
+ export async function writeCatalogVersion(db, w) {
190
+ const t = db;
191
+ const { name, version, listing } = w;
192
+ const live = await liveItem(t, name);
193
+ let id;
194
+ if (live) {
195
+ id = live.id;
196
+ assertSameSource(live, w.packageName, sourceIdentity(w.source.detail, w.marketplaceId));
197
+ const existing = await itemVersions(t, id);
198
+ // the same content under any version of the release, then the recorded version itself
199
+ assertNewContent(existing, {
200
+ version,
201
+ contentDigest: w.contentDigest,
202
+ ...(w.source.integrity !== undefined && { integrity: w.source.integrity }),
203
+ }, true);
204
+ if (existing.some((v) => v.version === version))
205
+ throw versionExists(version, false, true);
206
+ const newer = compareVersions(version, live.latest_version) >= 0;
207
+ await t
208
+ .updateTable("catalog_items")
209
+ .set({
210
+ updated_at: sql `now()`,
211
+ ...(w.marketplaceId !== undefined && { marketplace_id: w.marketplaceId }),
212
+ ...(newer && {
213
+ latest_version: version,
214
+ publisher: listing.publisher,
215
+ description: listing.description,
216
+ display_name: listing.displayName ? JSON.stringify(listing.displayName) : null,
217
+ }),
218
+ })
219
+ .where("id", "=", id)
220
+ .execute();
221
+ }
222
+ else {
223
+ id = w.newItemId;
224
+ await t
225
+ .insertInto("catalog_items")
226
+ .values({
227
+ id,
228
+ name,
229
+ package_name: w.packageName,
230
+ publisher: listing.publisher,
231
+ description: listing.description,
232
+ display_name: listing.displayName ? JSON.stringify(listing.displayName) : null,
233
+ latest_version: version,
234
+ created_by: w.actor,
235
+ marketplace_id: w.marketplaceId ?? null,
236
+ })
237
+ .execute();
238
+ }
239
+ await t
240
+ .insertInto("catalog_item_versions")
241
+ .values({
242
+ item_id: id,
243
+ version,
244
+ manifest: JSON.stringify(w.manifest),
245
+ source: w.source.source,
246
+ source_ref: w.source.ref,
247
+ integrity: w.source.integrity ?? null,
248
+ source_detail: w.source.detail !== undefined ? JSON.stringify(w.source.detail) : null,
249
+ content_digest: w.contentDigest,
250
+ object_prefix: w.objectPrefix,
251
+ extension_sha256: w.extensionSha256,
252
+ files: JSON.stringify(w.files.map(({ path, size, sha256 }) => ({ path, size, sha256 }))),
253
+ size: w.size,
254
+ imported_by: w.actor,
255
+ source_format: w.sourceFormat ?? "capybara",
256
+ translation: w.translation != null ? JSON.stringify(w.translation) : null,
257
+ license_text: w.licenseText ?? null,
258
+ license_truncated: w.licenseTruncated === true,
259
+ })
260
+ .execute();
261
+ await audit(t, {
262
+ ...(w.actor !== null && { actorAccountId: w.actor }),
263
+ ...(w.actorTokenId !== undefined && { actorTokenId: w.actorTokenId }),
264
+ action: "catalog.imported",
265
+ target: id,
266
+ detail: {
267
+ name,
268
+ version,
269
+ source: w.source.source,
270
+ sourceRef: w.source.ref,
271
+ contentDigest: w.contentDigest,
272
+ ...(w.extensionSha256 !== null && { sha256: w.extensionSha256 }),
273
+ ...(w.source.integrity !== undefined && { integrity: w.source.integrity }),
274
+ ...(w.marketplaceId !== undefined && { marketplaceId: w.marketplaceId }),
275
+ ...w.auditDetail,
276
+ },
277
+ });
278
+ return id;
279
+ }
280
+ /**
281
+ * An extension name belongs to the npm package that first installed it (`extension_name_owners`,
282
+ * Ruling P3): when another package owns it, the import is refused right away with
283
+ * `extension.name_conflict` (the same code as at install), instead of failing only at deploy time.
284
+ */
285
+ export async function assertPluginNameOwner(db, name, packageName) {
286
+ const owner = await db
287
+ .selectFrom("extension_name_owners")
288
+ .select("package_name")
289
+ .where("name", "=", name)
290
+ .executeTakeFirst();
291
+ if (owner && owner.package_name !== packageName) {
292
+ throw new ApiError("extension.name_conflict", `Extension name ${name} belongs to package ${owner.package_name}; ${packageLabel(packageName)} cannot use it`);
293
+ }
294
+ }
295
+ /** "package <name>", or what a plugin without package.json is called in messages. */
296
+ const packageLabel = (p) => p === null ? "a plugin without package.json" : `package ${p}`;
297
+ /**
298
+ * Whether a plugin may add a version to an existing item: the same npm package, or, for an item
299
+ * without package.json, the same source ({@link sourceIdentity}: git host, repo and path, so
300
+ * unrelated repos that resolve to the same name never merge; or the same marketplace for an
301
+ * archive); never a mix of the two.
302
+ */
303
+ function assertSameSource(item, packageName, source) {
304
+ const from = (p, src) => p !== null ? `package ${p}` : (src ?? "a plugin without package.json");
305
+ const same = item.package_name !== null
306
+ ? item.package_name === packageName
307
+ : packageName === null && item.source !== null && item.source === source;
308
+ if (!same) {
309
+ throw new ApiError("catalog.name_conflict", `A catalog item with this name comes from ${from(item.package_name, item.source)}; ${from(packageName, source)} cannot add versions to it`);
310
+ }
311
+ }
312
+ /**
313
+ * For each marketplace-imported item, its marketplace (when enabled): the highest compatible
314
+ * version listed, and whether a compatible entry's content changed at an imported version.
315
+ */
316
+ export async function marketplaceLatest(db, config, items, versions) {
317
+ const out = new Map();
318
+ const sourced = items.filter((i) => typeof i.marketplace_id === "string");
319
+ if (sourced.length === 0)
320
+ return out;
321
+ const rows = await db
322
+ .selectFrom("marketplace_entries as e")
323
+ .innerJoin("marketplaces as s", "s.id", "e.source_id")
324
+ .select([
325
+ "e.source_id",
326
+ "e.name",
327
+ "e.version",
328
+ "e.entry",
329
+ "e.head_commit",
330
+ "e.tree_oid",
331
+ "s.builtin",
332
+ "s.enabled",
333
+ "s.url",
334
+ "s.last_commit",
335
+ ])
336
+ .where("e.source_id", "in", [...new Set(sourced.map((i) => i.marketplace_id))])
337
+ .where("e.name", "in", [...new Set(sourced.map((i) => i.name))])
338
+ .execute();
339
+ for (const i of sourced) {
340
+ const listed = rows.filter((r) => r.source_id === i.marketplace_id &&
341
+ r.name === i.name &&
342
+ sourceEffective(r, config) &&
343
+ entryCompatible(r.entry));
344
+ const [best] = listed
345
+ .filter((r) => r.version !== "")
346
+ .map((r) => r.version)
347
+ .sort(newestFirst);
348
+ const recorded = versions.get(i.id) ?? [];
349
+ out.set(i.id, {
350
+ latest: best ?? null,
351
+ contentChanged: listed.some((r) => entryContentChanged(r.entry, {
352
+ marketplaceId: r.source_id,
353
+ headCommit: r.head_commit,
354
+ treeOid: r.tree_oid,
355
+ url: r.url,
356
+ lastCommit: r.last_commit,
357
+ }, recorded)),
358
+ });
359
+ }
360
+ return out;
361
+ }
362
+ /** Org install counts per item (see {@link CatalogItemView.installs}). */
363
+ export async function countInstalls(db, items, versions) {
364
+ const orgs = new Map(items.map((i) => [i.id, new Set()]));
365
+ const installed = await db
366
+ .selectFrom("plugin_installs")
367
+ .select(["item_id", "org_id"])
368
+ .where("item_id", "in", items.map((i) => i.id))
369
+ .where("status", "in", ["installed", "upgrading"])
370
+ .execute();
371
+ for (const r of installed)
372
+ orgs.get(r.item_id)?.add(r.org_id);
373
+ const withExtension = items.filter((i) => (versions.get(i.id) ?? []).find((v) => v.version === i.latest_version)?.extension_sha256 !=
374
+ null);
375
+ if (withExtension.length > 0) {
376
+ const enabled = await db
377
+ .selectFrom(enabledExtensionsByOrg(db).as("en"))
378
+ .select(["en.plugin", "en.org_id"])
379
+ .where("en.plugin", "in", withExtension.map((p) => p.name))
380
+ .execute();
381
+ for (const i of withExtension) {
382
+ for (const r of enabled)
383
+ if (r.plugin === i.name)
384
+ orgs.get(i.id)?.add(r.org_id);
385
+ }
386
+ }
387
+ return new Map([...orgs].map(([id, set]) => [id, set.size]));
388
+ }
389
+ export function itemView(i, versions, installs = 0, marketplace = { latest: null, contentChanged: false }) {
390
+ const sorted = [...versions].sort((a, b) => newestFirst({ version: a.version, importedAt: a.imported_at ?? null }, { version: b.version, importedAt: b.imported_at ?? null }));
391
+ const top = sorted[0]?.version ?? i.latest_version;
392
+ const latestMarketplaceVersion = marketplace.latest;
393
+ return {
394
+ id: i.id,
395
+ name: i.name,
396
+ publisher: i.publisher,
397
+ displayName: i.display_name,
398
+ description: i.description,
399
+ policy: i.policy,
400
+ latestVersion: i.latest_version,
401
+ versions: sorted.map((v) => v.version),
402
+ installs,
403
+ source: versions.find((v) => v.version === i.latest_version)?.source ?? "file",
404
+ marketplaceId: i.marketplace_id ?? null,
405
+ latestMarketplaceVersion,
406
+ newerInMarketplace: latestMarketplaceVersion !== null && compareVersions(latestMarketplaceVersion, top) > 0,
407
+ contentChanged: marketplace.contentChanged,
408
+ updatedAt: i.updated_at.toISOString(),
409
+ };
410
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The enterprise side of the catalog: marketplaces, the one import review (prepare -> confirm) and
3
+ * the items with their policy. The CLI's `capybara plugins *` and `capybara bootstrap` run on this
4
+ * part alone.
5
+ */
6
+ export declare class CatalogImportModule {
7
+ }
8
+ /**
9
+ * The plugin catalog (spec §4, §10): {@link CatalogImportModule}, catalog requests, and org installs,
10
+ * upgrades and rollbacks with their dependencies. The catalog's periodic jobs (`CatalogJobs`) are
11
+ * the worker role's (`WorkerModule`).
12
+ */
13
+ export declare class CatalogModule {
14
+ }
@@ -0,0 +1,71 @@
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
+ import { Module } from "@nestjs/common";
8
+ import { ExtensionsModule } from "../extensions/extensions.module.js";
9
+ import { EnterpriseAdminLockModule } from "../identity/enterprise-admin.js";
10
+ import { OrgLockModule } from "../orgs/org-lock.js";
11
+ import { SkillsModule } from "../skills/skills.module.js";
12
+ import { StorageModule } from "../storage/storage.module.js";
13
+ import { ToolsModule } from "../tools/tools.module.js";
14
+ import { CatalogService } from "./catalog.service.js";
15
+ import { CatalogItemLock, CatalogSourceLock } from "./locks.js";
16
+ import { MarketplacesService } from "./marketplaces.service.js";
17
+ import { OrgCatalogService } from "./org-catalog.service.js";
18
+ import { PluginImport } from "./plugin-import.js";
19
+ import { PluginInstaller } from "./plugin-install.js";
20
+ import { PluginUpgrader } from "./plugin-upgrade.js";
21
+ import { CatalogRequestsService } from "./requests.service.js";
22
+ /**
23
+ * The enterprise side of the catalog: marketplaces, the one import review (prepare -> confirm) and
24
+ * the items with their policy. The CLI's `capybara plugins *` and `capybara bootstrap` run on this
25
+ * part alone.
26
+ */
27
+ let CatalogImportModule = class CatalogImportModule {
28
+ };
29
+ CatalogImportModule = __decorate([
30
+ Module({
31
+ imports: [ExtensionsModule, EnterpriseAdminLockModule, StorageModule],
32
+ providers: [
33
+ CatalogSourceLock,
34
+ CatalogItemLock,
35
+ MarketplacesService,
36
+ PluginImport,
37
+ CatalogService,
38
+ ],
39
+ exports: [MarketplacesService, PluginImport, CatalogService],
40
+ })
41
+ ], CatalogImportModule);
42
+ export { CatalogImportModule };
43
+ /**
44
+ * The plugin catalog (spec §4, §10): {@link CatalogImportModule}, catalog requests, and org installs,
45
+ * upgrades and rollbacks with their dependencies. The catalog's periodic jobs (`CatalogJobs`) are
46
+ * the worker role's (`WorkerModule`).
47
+ */
48
+ let CatalogModule = class CatalogModule {
49
+ };
50
+ CatalogModule = __decorate([
51
+ Module({
52
+ imports: [
53
+ CatalogImportModule,
54
+ ExtensionsModule,
55
+ EnterpriseAdminLockModule,
56
+ OrgLockModule,
57
+ StorageModule,
58
+ SkillsModule,
59
+ ToolsModule,
60
+ ],
61
+ providers: [CatalogRequestsService, PluginInstaller, PluginUpgrader, OrgCatalogService],
62
+ exports: [
63
+ CatalogImportModule,
64
+ CatalogRequestsService,
65
+ PluginInstaller,
66
+ PluginUpgrader,
67
+ OrgCatalogService,
68
+ ],
69
+ })
70
+ ], CatalogModule);
71
+ export { CatalogModule };