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

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 (670) 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 +187 -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 +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  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 +39 -8
  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 +326 -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/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -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 };