@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,326 @@
1
+ // Reading a catalog version's stored content (templates, skills, agent templates, icons) and the
2
+ // org install helpers (no providers), shared by PluginInstaller, PluginUpgrader and
3
+ // OrgCatalogService: kept out of org-catalog.service.ts so the installer's module never imports a
4
+ // module whose provider injects PluginInstaller (an ESM import cycle would run decorators early).
5
+ import { createHash } from "node:crypto";
6
+ import { parseAgentTemplate, parseConnectorTemplateFile, } from "@capybara-hq/plugin-sdk";
7
+ import { normalizeToolKeys } from "../agents/definition.js";
8
+ import { ApiError } from "../errors.js";
9
+ import { can } from "../orgs/roles.js";
10
+ import { packagePath } from "../packages/tgz.js";
11
+ import { checkSkillFiles, SkillArchiveError } from "../skills/package.js";
12
+ import { iconProblem } from "./plugin-package.js";
13
+ import { satisfiesRange } from "./versions.js";
14
+ /**
15
+ * A connector template as an org sees it (the install wizard and the upgrade preview's inputs):
16
+ * presets and editable paths, no credentials.
17
+ */
18
+ export function orgTemplateView(id, file) {
19
+ const t = file.template;
20
+ return {
21
+ id,
22
+ displayName: file.displayName,
23
+ description: file.description ?? "",
24
+ plugin: t.plugin,
25
+ connector: t.connector,
26
+ endpoint: t.endpoint,
27
+ editableEndpoint: t.editableEndpoint ?? [],
28
+ auth: t.auth,
29
+ ownership: t.ownership ??
30
+ (typeof t.auth.ownership === "string" ? t.auth.ownership : null),
31
+ };
32
+ }
33
+ const iconNotFound = () => new ApiError("catalog.icon_not_found", "This catalog item has no icon");
34
+ /**
35
+ * The item's latest version row; item missing, deleted or (when `includeDisabled` is false)
36
+ * disabled -> `catalog.item_not_found`.
37
+ */
38
+ async function latestVersionRow(db, itemId, includeDisabled) {
39
+ if (!UUID_RE.test(itemId))
40
+ throw itemNotFound();
41
+ const item = await db
42
+ .selectFrom("catalog_items")
43
+ .select(["latest_version", "policy"])
44
+ .where("id", "=", itemId)
45
+ .where("deleted_at", "is", null)
46
+ .executeTakeFirst();
47
+ // An item the caller cannot see is "not found" before any version / storage is read, so "no icon"
48
+ // never reveals that it exists
49
+ if (!item || (!includeDisabled && item.policy === "disabled"))
50
+ throw itemNotFound();
51
+ const v = await db
52
+ .selectFrom("catalog_item_versions")
53
+ .select(["manifest", "object_prefix", "files"])
54
+ .where("item_id", "=", itemId)
55
+ .where("version", "=", item.latest_version)
56
+ .executeTakeFirst();
57
+ if (!v)
58
+ throw itemNotFound();
59
+ return { item, v };
60
+ }
61
+ /** The icon's path in the version's files (undefined without an icon). */
62
+ const iconPath = (v) => {
63
+ const icon = v.manifest.icon;
64
+ return icon === undefined ? undefined : packagePath(icon);
65
+ };
66
+ /** Whether the item's latest version has an icon; unreadable counts as none. */
67
+ export async function catalogHasIcon(db, itemId) {
68
+ try {
69
+ const { v } = await latestVersionRow(db, itemId, true);
70
+ const path = iconPath(v);
71
+ return path !== undefined && v.files.some((f) => f.path === path);
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ /**
78
+ * Reads the icon of the item's latest version (served only through kernel routes, with nosniff and
79
+ * a CSP sandbox in the response headers; the web only shows it with `<img>`). Item missing, deleted
80
+ * or (when `includeDisabled` is false) disabled -> `catalog.item_not_found` (decided before reading
81
+ * storage); no icon -> `catalog.icon_not_found`; stored content that is not a valid svg / png
82
+ * (checked at import, this guards against tampered storage) -> `internal`.
83
+ */
84
+ export async function readCatalogIcon(db, storage, itemId, includeDisabled) {
85
+ const { item, v } = await latestVersionRow(db, itemId, includeDisabled);
86
+ const path = iconPath(v);
87
+ const f = path === undefined ? undefined : v.files.find((x) => x.path === path);
88
+ if (path === undefined || !f)
89
+ throw iconNotFound();
90
+ const [file] = await readCatalogFiles(storage, v.object_prefix, [f]);
91
+ if (!file)
92
+ throw iconNotFound();
93
+ const problem = iconProblem(path, file.data);
94
+ if (problem !== undefined)
95
+ throw new ApiError("internal", `Stored icon is invalid: ${problem}`);
96
+ return {
97
+ data: file.data,
98
+ contentType: /\.svg$/i.test(path) ? "image/svg+xml" : "image/png",
99
+ policy: item.policy,
100
+ };
101
+ }
102
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
103
+ const itemNotFound = () => new ApiError("catalog.item_not_found", "Catalog item not found");
104
+ const fail = (path, message) => new ApiError("validation_failed", "Request validation failed", [{ path, message }]);
105
+ /**
106
+ * The org actions installing / uninstalling a plugin needs: the union over its components (an
107
+ * extension -> `org.extensions.manage`, skills -> `skills.manage`, connector templates ->
108
+ * `connectors.manage`, agent templates -> `agents.manage`), re-checked inside the org row lock.
109
+ */
110
+ export function requiredActions(m) {
111
+ const out = [];
112
+ if (m.extension)
113
+ out.push("org.extensions.manage");
114
+ if ((m.connectorTemplates ?? []).length > 0)
115
+ out.push("connectors.manage");
116
+ if ((m.skills ?? []).length > 0)
117
+ out.push("skills.manage");
118
+ if ((m.agents ?? []).length > 0)
119
+ out.push("agents.manage");
120
+ return out.length > 0 ? out : ["org.extensions.manage"];
121
+ }
122
+ /** Locks the org row in the caller's transaction (`orgLock` joins it) and re-checks the actor can do every action (else `forbidden`). */
123
+ export async function lockOrgForActions(orgLock, orgId, actor, actions) {
124
+ const [first, ...rest] = actions;
125
+ const { role } = await orgLock.lockAndAuthorize(orgId, actor, first);
126
+ for (const a of rest) {
127
+ if (!can(role, a))
128
+ throw new ApiError("forbidden", "Insufficient organization role");
129
+ }
130
+ }
131
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
132
+ const UNSAFE_KEYS = new Set(["__proto__", "prototype", "constructor"]);
133
+ /** 对象的全部叶子点路径(数组与非对象值算叶子)。 */
134
+ function leafPaths(v, base = "") {
135
+ const out = [];
136
+ for (const [k, x] of Object.entries(v)) {
137
+ const p = base ? `${base}.${k}` : k;
138
+ if (isObj(x) && Object.keys(x).length > 0)
139
+ out.push(...leafPaths(x, p));
140
+ else
141
+ out.push(p);
142
+ }
143
+ return out;
144
+ }
145
+ /** The value at a dot path of `v` (own keys only), undefined when absent. */
146
+ export function getPath(v, path) {
147
+ let node = v;
148
+ for (const seg of path.split(".")) {
149
+ if (!isObj(node) || !Object.hasOwn(node, seg))
150
+ return undefined;
151
+ node = node[seg];
152
+ }
153
+ return node;
154
+ }
155
+ /** Sets the value at a dot path of `obj`, creating the objects on the way. */
156
+ export function setPath(obj, path, value) {
157
+ const segs = path.split(".");
158
+ let node = obj;
159
+ for (const seg of segs.slice(0, -1)) {
160
+ if (!isObj(node[seg]))
161
+ node[seg] = {};
162
+ node = node[seg];
163
+ }
164
+ node[segs[segs.length - 1]] = value;
165
+ }
166
+ /** The connector `kind` provided by extension `plugin` loaded on this replica (from the registry). */
167
+ export function findConnectorIn(registry, plugin, kind) {
168
+ return registry
169
+ .list("connector")
170
+ .find((e) => e.plugin === plugin && e.impl?.kind === kind)?.impl;
171
+ }
172
+ /**
173
+ * 模板的连接器插件此刻是否可用:插件加载且提供该 kind,并满足 `pluginVersion`(若写了);不可用返回原因
174
+ * (模型不可见,给管理员看的英文)。
175
+ */
176
+ export function templatePluginProblem(d, template) {
177
+ if (!d.findConnector(template.plugin, template.connector)) {
178
+ return `Connector extension ${template.plugin} providing "${template.connector}" is not deployed; ask the enterprise admin to install and enable it`;
179
+ }
180
+ const range = template.pluginVersion;
181
+ const version = d.pluginVersion(template.plugin);
182
+ if (range !== undefined && version !== undefined && !satisfiesRange(version, range)) {
183
+ return `Connector extension ${template.plugin} is deployed at version ${version}, but the template needs ${range}; ask the enterprise admin to upgrade it`;
184
+ }
185
+ return undefined;
186
+ }
187
+ /**
188
+ * Builds the connector install input from a connector template plus what the org filled in (C30):
189
+ * the endpoint comes from the template, only paths listed in `editableEndpoint` (or fields under
190
+ * them) may be changed by the org, changing another path -> `validation_failed`; the auth method
191
+ * comes from the template, the org only gives credentials (static credentials via `credential`,
192
+ * OAuth via `client`). Re-checks the template's plugin, kind and `pluginVersion` against the
193
+ * connectors loaded on this replica right now (unmet -> `catalog.not_deployed`); the endpoint
194
+ * (merged as a whole) schema check, credential pattern check and OAuth URL policy are re-checked by
195
+ * `ConnectorsService.create`.
196
+ */
197
+ export function templateConnectorInput(deps, template, ref, input, defaultName, at = "connector") {
198
+ const problem = templatePluginProblem(deps, template);
199
+ if (problem !== undefined)
200
+ throw new ApiError("catalog.not_deployed", problem);
201
+ const given = input ?? {};
202
+ const editable = template.editableEndpoint ?? [];
203
+ const endpoint = structuredClone(template.endpoint);
204
+ if (given.endpoint !== undefined) {
205
+ if (!isObj(given.endpoint))
206
+ throw fail(`${at}.endpoint`, "Expected an object");
207
+ for (const p of leafPaths(given.endpoint)) {
208
+ const segs = p.split(".");
209
+ if (segs.some((s) => UNSAFE_KEYS.has(s))) {
210
+ throw fail(`${at}.endpoint.${p}`, "Invalid key");
211
+ }
212
+ const allowed = editable.some((e) => p === e || p.startsWith(`${e}.`));
213
+ if (!allowed) {
214
+ throw fail(`${at}.endpoint.${p}`, "This endpoint field is set by the template and cannot be changed");
215
+ }
216
+ }
217
+ for (const e of editable) {
218
+ const v = getPath(given.endpoint, e);
219
+ if (v !== undefined)
220
+ setPath(endpoint, e, v);
221
+ }
222
+ }
223
+ const auth = template.auth;
224
+ const oauth = auth.type === "oauth_code" || auth.type === "oauth_client";
225
+ if (oauth && given.credential !== undefined) {
226
+ throw fail(`${at}.credential`, "This connector uses OAuth; provide client instead");
227
+ }
228
+ if (!oauth && given.client !== undefined) {
229
+ throw fail(`${at}.client`, "This connector does not use OAuth; provide credential instead");
230
+ }
231
+ const credential = oauth ? given.client : given.credential;
232
+ return {
233
+ name: given.name ?? defaultName,
234
+ ...(given.slug !== undefined && { slug: given.slug }),
235
+ connector: template.connector,
236
+ endpoint,
237
+ auth,
238
+ ...(credential !== undefined && { credential }),
239
+ template: {
240
+ ...ref,
241
+ ...(template.defaultToolPolicies !== undefined && {
242
+ defaultToolPolicies: template.defaultToolPolicies,
243
+ }),
244
+ },
245
+ };
246
+ }
247
+ /** 从部署存储读目录版本里的文件(按版本行的 sha256 校验);`under` 给出时只读该目录下的文件,路径去掉该前缀。 */
248
+ export async function readCatalogFiles(storage, objectPrefix, files, under) {
249
+ storage.assertAvailable();
250
+ if (objectPrefix === null)
251
+ return [];
252
+ const store = storage.deployment();
253
+ const dir = under === undefined ? "" : `${under}/`;
254
+ const out = [];
255
+ for (const f of files) {
256
+ if (!f.path.startsWith(dir))
257
+ continue;
258
+ const got = await store.get(`${objectPrefix}${f.path}`);
259
+ if (!got) {
260
+ throw new ApiError("storage.unavailable", `Catalog file ${f.path} is missing from object storage`);
261
+ }
262
+ const data = new Uint8Array(await new Response(got.body).arrayBuffer());
263
+ if (createHash("sha256").update(data).digest("hex") !== f.sha256) {
264
+ throw new ApiError("internal", `Catalog file ${f.path} does not match its recorded hash`);
265
+ }
266
+ out.push({ path: f.path.slice(dir.length), size: data.byteLength, sha256: f.sha256, data });
267
+ }
268
+ return out;
269
+ }
270
+ /** 校验技能文件并取名字与描述(导入时已校验过;这里防存储被改)。 */
271
+ export function skillOf(files) {
272
+ try {
273
+ // Stored files: a version imported before phase D keeps installing (its invocation keys are
274
+ // read leniently; `skillInvocation` ignores values of the wrong type)
275
+ return checkSkillFiles(files, { invocationKeys: false });
276
+ }
277
+ catch (e) {
278
+ if (e instanceof SkillArchiveError) {
279
+ throw new ApiError("internal", `Stored skill is invalid: ${e.problems.join("; ")}`);
280
+ }
281
+ throw e;
282
+ }
283
+ }
284
+ /** The connector templates of a catalog version, read from storage (id = the file's base name). */
285
+ export async function readCatalogTemplates(storage, v) {
286
+ const refs = v.manifest.connectorTemplates ?? [];
287
+ if (refs.length === 0)
288
+ return [];
289
+ const paths = refs.map((r) => packagePath(r.path));
290
+ const files = await readCatalogFiles(storage, v.object_prefix, v.files.filter((f) => paths.includes(f.path)));
291
+ return paths.map((path) => {
292
+ const f = files.find((x) => x.path === path);
293
+ let parsed;
294
+ try {
295
+ parsed = f && parseConnectorTemplateFile(JSON.parse(new TextDecoder().decode(f.data)));
296
+ }
297
+ catch {
298
+ parsed = undefined;
299
+ }
300
+ if (!parsed || "errors" in parsed) {
301
+ throw new ApiError("internal", `Stored connector template ${path} is missing or invalid`);
302
+ }
303
+ return { id: path.split("/").pop().replace(/\.json$/, ""), file: parsed };
304
+ });
305
+ }
306
+ /**
307
+ * The agent templates of a catalog version (`manifest.agents`, listed explicitly since import),
308
+ * parsed from storage (checked at import; parsed again in case storage was changed).
309
+ */
310
+ export async function readCatalogAgentTemplates(storage, v) {
311
+ const refs = v.manifest.agents ?? [];
312
+ if (refs.length === 0)
313
+ return [];
314
+ const paths = refs.map((r) => packagePath(r.path));
315
+ const files = await readCatalogFiles(storage, v.object_prefix, v.files.filter((f) => paths.includes(f.path)));
316
+ return paths.map((path) => {
317
+ const f = files.find((x) => x.path === path);
318
+ const parsed = f && parseAgentTemplate(new TextDecoder().decode(f.data));
319
+ if (!parsed || "errors" in parsed) {
320
+ throw new ApiError("internal", `Stored agent template ${path} is missing or invalid`);
321
+ }
322
+ // an rc package's template may name old builtins: read as the current names (tool naming
323
+ // spec §8.3); rc `<x>__<tool>` keys are read with the org's scope by `loadTemplates`
324
+ return { path, template: normalizeToolKeys(parsed.template) };
325
+ });
326
+ }
@@ -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 {};