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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/bootstrap.json +10 -6
  2. package/dist/admin/admin.controller.d.ts +17 -17
  3. package/dist/admin/admin.controller.js +43 -26
  4. package/dist/admin/admin.module.d.ts +3 -0
  5. package/dist/admin/admin.module.js +22 -0
  6. package/dist/admin/extensions.controller.d.ts +14 -14
  7. package/dist/admin/extensions.controller.js +30 -17
  8. package/dist/admin/setup-lock.d.ts +16 -0
  9. package/dist/admin/setup-lock.js +47 -0
  10. package/dist/admin/setup.controller.d.ts +8 -8
  11. package/dist/admin/setup.controller.js +27 -25
  12. package/dist/admin/setup.service.d.ts +19 -27
  13. package/dist/admin/setup.service.js +61 -61
  14. package/dist/agents/agent-lookup.d.ts +53 -0
  15. package/dist/agents/agent-lookup.js +179 -0
  16. package/dist/agents/agents.controller.d.ts +1 -1
  17. package/dist/agents/agents.controller.js +14 -8
  18. package/dist/agents/agents.module.d.ts +7 -0
  19. package/dist/agents/agents.module.js +41 -0
  20. package/dist/agents/agents.service.d.ts +39 -58
  21. package/dist/agents/agents.service.js +261 -329
  22. package/dist/agents/definition.d.ts +8 -0
  23. package/dist/agents/definition.js +8 -0
  24. package/dist/agents/models.controller.d.ts +1 -1
  25. package/dist/agents/models.controller.js +2 -2
  26. package/dist/agents/templates.controller.d.ts +1 -1
  27. package/dist/agents/templates.controller.js +2 -2
  28. package/dist/agents/templates.d.ts +6 -8
  29. package/dist/agents/templates.js +20 -4
  30. package/dist/app.d.ts +93 -0
  31. package/dist/app.js +150 -0
  32. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  33. package/dist/catalog/admin-catalog.controller.js +27 -13
  34. package/dist/catalog/catalog-content.d.ts +185 -0
  35. package/dist/catalog/catalog-content.js +323 -0
  36. package/dist/catalog/catalog-items.d.ts +186 -0
  37. package/dist/catalog/catalog-items.js +410 -0
  38. package/dist/catalog/catalog.module.d.ts +14 -0
  39. package/dist/catalog/catalog.module.js +71 -0
  40. package/dist/catalog/catalog.service.d.ts +34 -188
  41. package/dist/catalog/catalog.service.js +155 -489
  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 +30 -13
  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 +2 -2
  70. package/dist/channels/channels.module.d.ts +40 -0
  71. package/dist/channels/channels.module.js +128 -0
  72. package/dist/channels/connections.controller.d.ts +1 -1
  73. package/dist/channels/connections.controller.js +11 -6
  74. package/dist/channels/connections.service.d.ts +43 -21
  75. package/dist/channels/connections.service.js +236 -131
  76. package/dist/channels/inbound.d.ts +34 -38
  77. package/dist/channels/inbound.js +107 -41
  78. package/dist/channels/job-ids.d.ts +10 -0
  79. package/dist/channels/job-ids.js +10 -0
  80. package/dist/channels/jobs.d.ts +85 -0
  81. package/dist/channels/jobs.js +157 -0
  82. package/dist/channels/outbound.d.ts +60 -82
  83. package/dist/channels/outbound.js +165 -193
  84. package/dist/channels/supervisor.d.ts +88 -46
  85. package/dist/channels/supervisor.js +230 -132
  86. package/dist/channels/threads.d.ts +29 -8
  87. package/dist/channels/threads.js +71 -13
  88. package/dist/channels/webhook.d.ts +20 -14
  89. package/dist/channels/webhook.js +51 -20
  90. package/dist/config/load.d.ts +3 -2
  91. package/dist/config/load.js +3 -2
  92. package/dist/config/nacos-source.js +11 -2
  93. package/dist/config/schema.d.ts +16 -1
  94. package/dist/config/schema.js +54 -7
  95. package/dist/conversations/access.d.ts +29 -0
  96. package/dist/conversations/access.js +86 -0
  97. package/dist/conversations/artifacts.d.ts +10 -10
  98. package/dist/conversations/artifacts.js +35 -9
  99. package/dist/conversations/attachments.controller.d.ts +1 -1
  100. package/dist/conversations/attachments.controller.js +8 -6
  101. package/dist/conversations/attachments.module.d.ts +7 -0
  102. package/dist/conversations/attachments.module.js +25 -0
  103. package/dist/conversations/attachments.service.d.ts +30 -22
  104. package/dist/conversations/attachments.service.js +119 -46
  105. package/dist/conversations/conversations.controller.d.ts +8 -7
  106. package/dist/conversations/conversations.controller.js +59 -29
  107. package/dist/conversations/conversations.module.d.ts +8 -0
  108. package/dist/conversations/conversations.module.js +69 -0
  109. package/dist/conversations/conversations.service.d.ts +40 -38
  110. package/dist/conversations/conversations.service.js +130 -140
  111. package/dist/conversations/event-log.d.ts +28 -18
  112. package/dist/conversations/event-log.js +74 -27
  113. package/dist/conversations/files.d.ts +10 -10
  114. package/dist/conversations/files.js +37 -11
  115. package/dist/conversations/idem-keys.d.ts +5 -0
  116. package/dist/conversations/idem-keys.js +5 -0
  117. package/dist/conversations/job-ids.d.ts +6 -0
  118. package/dist/conversations/job-ids.js +6 -0
  119. package/dist/conversations/outputs-read.d.ts +11 -11
  120. package/dist/conversations/outputs-read.js +31 -7
  121. package/dist/conversations/queue.d.ts +48 -56
  122. package/dist/conversations/queue.js +13 -289
  123. package/dist/conversations/queue.service.d.ts +60 -0
  124. package/dist/conversations/queue.service.js +343 -0
  125. package/dist/conversations/sandbox-status.d.ts +13 -10
  126. package/dist/conversations/sandbox-status.js +36 -8
  127. package/dist/conversations/titles.d.ts +71 -24
  128. package/dist/conversations/titles.js +159 -62
  129. package/dist/ctx/bus.js +9 -3
  130. package/dist/ctx/create-ctx.d.ts +6 -0
  131. package/dist/ctx/create-ctx.js +7 -9
  132. package/dist/ctx/lock.d.ts +7 -3
  133. package/dist/ctx/lock.js +9 -20
  134. package/dist/ctx/queue.js +3 -2
  135. package/dist/ctx/secrets.d.ts +10 -2
  136. package/dist/ctx/secrets.js +7 -3
  137. package/dist/db/kernel-schema.d.ts +2 -2
  138. package/dist/db/pool.d.ts +5 -0
  139. package/dist/db/pool.js +1 -0
  140. package/dist/errors.d.ts +2 -0
  141. package/dist/errors.js +2 -0
  142. package/dist/evals/budget.d.ts +42 -21
  143. package/dist/evals/budget.js +114 -62
  144. package/dist/evals/evals.module.d.ts +31 -0
  145. package/dist/evals/evals.module.js +114 -0
  146. package/dist/evals/jobs.d.ts +20 -0
  147. package/dist/evals/jobs.js +45 -0
  148. package/dist/evals/run-replay.d.ts +56 -8
  149. package/dist/evals/run-replay.js +140 -80
  150. package/dist/evals/runs.controller.d.ts +1 -1
  151. package/dist/evals/runs.controller.js +17 -8
  152. package/dist/evals/runs.service.d.ts +23 -45
  153. package/dist/evals/runs.service.js +245 -234
  154. package/dist/evals/sets.controller.d.ts +1 -1
  155. package/dist/evals/sets.controller.js +17 -8
  156. package/dist/evals/sets.service.d.ts +22 -6
  157. package/dist/evals/sets.service.js +248 -194
  158. package/dist/evals/snapshot.d.ts +2 -2
  159. package/dist/evals/step-replay.d.ts +2 -2
  160. package/dist/evals/step-replay.js +1 -1
  161. package/dist/evals/trajectory.controller.d.ts +1 -1
  162. package/dist/evals/trajectory.controller.js +11 -7
  163. package/dist/evals/trajectory.service.d.ts +5 -4
  164. package/dist/evals/trajectory.service.js +30 -7
  165. package/dist/evals/worker.d.ts +44 -27
  166. package/dist/evals/worker.js +220 -120
  167. package/dist/extensions/admin-ops.d.ts +61 -33
  168. package/dist/extensions/admin-ops.js +248 -154
  169. package/dist/extensions/admin-view.d.ts +38 -27
  170. package/dist/extensions/admin-view.js +126 -55
  171. package/dist/extensions/approvals.d.ts +12 -8
  172. package/dist/extensions/approvals.js +73 -46
  173. package/dist/extensions/blobs.d.ts +27 -10
  174. package/dist/extensions/blobs.js +111 -45
  175. package/dist/extensions/bootstrap.d.ts +96 -42
  176. package/dist/extensions/bootstrap.js +303 -155
  177. package/dist/extensions/cli.d.ts +20 -10
  178. package/dist/extensions/cli.js +41 -96
  179. package/dist/extensions/config-issues.d.ts +7 -0
  180. package/dist/extensions/config-issues.js +31 -0
  181. package/dist/extensions/deployment-config-store.d.ts +49 -0
  182. package/dist/extensions/deployment-config-store.js +133 -0
  183. package/dist/extensions/deployment-config.d.ts +58 -67
  184. package/dist/extensions/deployment-config.js +202 -230
  185. package/dist/extensions/enabled.d.ts +5 -5
  186. package/dist/extensions/extensions.module.d.ts +8 -0
  187. package/dist/extensions/extensions.module.js +77 -0
  188. package/dist/extensions/hooks.d.ts +3 -2
  189. package/dist/extensions/hooks.js +1 -1
  190. package/dist/extensions/host.d.ts +72 -68
  191. package/dist/extensions/host.js +191 -152
  192. package/dist/extensions/installs.d.ts +49 -16
  193. package/dist/extensions/installs.js +128 -32
  194. package/dist/extensions/job-ids.d.ts +6 -0
  195. package/dist/extensions/job-ids.js +6 -0
  196. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  197. package/dist/extensions/lifecycle-topics.js +18 -0
  198. package/dist/extensions/lifecycle.d.ts +35 -47
  199. package/dist/extensions/lifecycle.js +103 -39
  200. package/dist/extensions/locks.d.ts +33 -0
  201. package/dist/extensions/locks.js +86 -0
  202. package/dist/extensions/migrate-lock.d.ts +3 -4
  203. package/dist/extensions/org-config.controller.d.ts +1 -1
  204. package/dist/extensions/org-config.controller.js +8 -5
  205. package/dist/extensions/org-config.d.ts +48 -46
  206. package/dist/extensions/org-config.js +284 -226
  207. package/dist/extensions/registry.d.ts +50 -2
  208. package/dist/extensions/registry.js +89 -4
  209. package/dist/extensions/sources.d.ts +12 -8
  210. package/dist/extensions/sources.js +34 -13
  211. package/dist/files/files.module.d.ts +3 -0
  212. package/dist/files/files.module.js +22 -0
  213. package/dist/files/previewers.controller.d.ts +7 -2
  214. package/dist/files/previewers.controller.js +17 -9
  215. package/dist/files/previewers.d.ts +13 -18
  216. package/dist/files/previewers.js +83 -36
  217. package/dist/http/adapter.d.ts +3 -0
  218. package/dist/http/adapter.js +25 -0
  219. package/dist/http/api.module.d.ts +3 -110
  220. package/dist/http/api.module.js +47 -355
  221. package/dist/http/app.d.ts +11 -15
  222. package/dist/http/app.js +52 -47
  223. package/dist/http/error-filter.module.d.ts +5 -0
  224. package/dist/http/error-filter.module.js +18 -0
  225. package/dist/http/error.filter.js +2 -2
  226. package/dist/identity/accounts.d.ts +82 -29
  227. package/dist/identity/accounts.js +294 -175
  228. package/dist/identity/api-tokens.d.ts +11 -7
  229. package/dist/identity/api-tokens.js +71 -44
  230. package/dist/identity/audit.d.ts +7 -4
  231. package/dist/identity/audit.js +5 -1
  232. package/dist/identity/auth.controller.d.ts +11 -10
  233. package/dist/identity/auth.controller.js +31 -25
  234. package/dist/identity/auth.guard.d.ts +3 -3
  235. package/dist/identity/auth.guard.js +6 -4
  236. package/dist/identity/binding.d.ts +9 -11
  237. package/dist/identity/binding.js +41 -13
  238. package/dist/identity/enterprise-admin.d.ts +18 -12
  239. package/dist/identity/enterprise-admin.js +67 -13
  240. package/dist/identity/external-identity-lock.d.ts +17 -0
  241. package/dist/identity/external-identity-lock.js +39 -0
  242. package/dist/identity/external.d.ts +19 -15
  243. package/dist/identity/external.js +163 -125
  244. package/dist/identity/identity.module.d.ts +6 -0
  245. package/dist/identity/identity.module.js +56 -0
  246. package/dist/identity/me.controller.d.ts +16 -15
  247. package/dist/identity/me.controller.js +37 -31
  248. package/dist/identity/sessions.d.ts +12 -10
  249. package/dist/identity/sessions.js +74 -42
  250. package/dist/identity/settings.d.ts +20 -14
  251. package/dist/identity/settings.js +85 -57
  252. package/dist/identity/sso.controller.d.ts +7 -7
  253. package/dist/identity/sso.controller.js +13 -9
  254. package/dist/identity/sso.d.ts +9 -12
  255. package/dist/identity/sso.js +54 -24
  256. package/dist/inbox/inbox.module.d.ts +3 -0
  257. package/dist/inbox/inbox.module.js +22 -0
  258. package/dist/inbox/inbox.service.d.ts +7 -9
  259. package/dist/inbox/inbox.service.js +32 -11
  260. package/dist/index.d.ts +19 -12
  261. package/dist/index.js +13 -8
  262. package/dist/infra/cache/cache.module.d.ts +3 -0
  263. package/dist/infra/cache/cache.module.js +16 -0
  264. package/dist/infra/cache/cache.service.d.ts +21 -0
  265. package/dist/infra/cache/cache.service.js +80 -0
  266. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  267. package/dist/infra/cache/cacheable.decorator.js +83 -0
  268. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  269. package/dist/infra/cli/kernel-cli.module.js +165 -0
  270. package/dist/infra/close-within.d.ts +15 -0
  271. package/dist/infra/close-within.js +36 -0
  272. package/dist/infra/config/config.module.d.ts +13 -0
  273. package/dist/infra/config/config.module.js +39 -0
  274. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  275. package/dist/infra/config/kernel-config.service.js +126 -0
  276. package/dist/infra/database/after-commit.d.ts +6 -0
  277. package/dist/infra/database/after-commit.js +9 -0
  278. package/dist/infra/database/database.module.d.ts +25 -0
  279. package/dist/infra/database/database.module.js +90 -0
  280. package/dist/infra/database/kernel-db.d.ts +22 -0
  281. package/dist/infra/database/kernel-db.js +65 -0
  282. package/dist/infra/database/transaction-host.d.ts +50 -0
  283. package/dist/infra/database/transaction-host.js +125 -0
  284. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  285. package/dist/infra/database/transactional.decorator.js +27 -0
  286. package/dist/infra/database/xact-lock.d.ts +17 -0
  287. package/dist/infra/database/xact-lock.js +43 -0
  288. package/dist/infra/events/kernel-events.d.ts +96 -0
  289. package/dist/infra/events/kernel-events.js +65 -0
  290. package/dist/infra/health/health.controller.d.ts +26 -0
  291. package/dist/infra/health/health.controller.js +104 -0
  292. package/dist/infra/health/health.module.d.ts +9 -0
  293. package/dist/infra/health/health.module.js +24 -0
  294. package/dist/infra/health/health.options.d.ts +10 -0
  295. package/dist/infra/health/health.options.js +15 -0
  296. package/dist/infra/health/shutdown-state.d.ts +6 -0
  297. package/dist/infra/health/shutdown-state.js +2 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  300. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  301. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  302. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  303. package/dist/infra/lifecycle/process-guards.js +86 -0
  304. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  305. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  306. package/dist/infra/lock/key-template.d.ts +13 -0
  307. package/dist/infra/lock/key-template.js +46 -0
  308. package/dist/infra/lock/lock.module.d.ts +3 -0
  309. package/dist/infra/lock/lock.module.js +16 -0
  310. package/dist/infra/lock/lock.service.d.ts +120 -0
  311. package/dist/infra/lock/lock.service.js +343 -0
  312. package/dist/infra/lock/shared-lease.d.ts +44 -0
  313. package/dist/infra/lock/shared-lease.js +121 -0
  314. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  315. package/dist/infra/lock/with-lock.decorator.js +49 -0
  316. package/dist/infra/logging/logging.module.d.ts +16 -0
  317. package/dist/infra/logging/logging.module.js +34 -0
  318. package/dist/infra/queue/configured-processor.d.ts +18 -0
  319. package/dist/infra/queue/configured-processor.js +23 -0
  320. package/dist/infra/queue/job-failure.d.ts +18 -0
  321. package/dist/infra/queue/job-failure.js +26 -0
  322. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  323. package/dist/infra/queue/queue-shutdown.js +81 -0
  324. package/dist/infra/queue/queue.module.d.ts +16 -0
  325. package/dist/infra/queue/queue.module.js +61 -0
  326. package/dist/infra/queue/redis-connection.d.ts +7 -0
  327. package/dist/infra/queue/redis-connection.js +18 -0
  328. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  329. package/dist/infra/queue/retired-schedulers.js +9 -0
  330. package/dist/infra/queue/run-job.d.ts +16 -0
  331. package/dist/infra/queue/run-job.js +19 -0
  332. package/dist/infra/redis/redis.module.d.ts +24 -0
  333. package/dist/infra/redis/redis.module.js +87 -0
  334. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  335. package/dist/infra/schedule/cron-tick.js +25 -0
  336. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  337. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  338. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  339. package/dist/infra/schedule/locked-interval.js +190 -0
  340. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  341. package/dist/infra/schedule/locked-tick.js +137 -0
  342. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  343. package/dist/infra/schedule/schedule.module.js +27 -0
  344. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  345. package/dist/infra/schedule/scheduled-runs.js +163 -0
  346. package/dist/infra/swagger/swagger.d.ts +16 -0
  347. package/dist/infra/swagger/swagger.js +31 -0
  348. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  349. package/dist/infra/throttler/credential-throttler.js +77 -0
  350. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  351. package/dist/infra/throttler/named-throttlers.js +119 -0
  352. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  353. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  354. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  355. package/dist/infra/throttler/throttler.guard.js +68 -0
  356. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  357. package/dist/infra/throttler/throttler.module.js +53 -0
  358. package/dist/infra/tokens.d.ts +15 -0
  359. package/dist/infra/tokens.js +15 -0
  360. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  361. package/dist/infra/validation/create-zod-dto.js +35 -0
  362. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  363. package/dist/infra/validation/parse-with-zod.js +12 -0
  364. package/dist/infra/validation/validation.module.d.ts +3 -0
  365. package/dist/infra/validation/validation.module.js +16 -0
  366. package/dist/infra/validation/zod-params.d.ts +7 -0
  367. package/dist/infra/validation/zod-params.js +42 -0
  368. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  369. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  370. package/dist/kernel.d.ts +9 -241
  371. package/dist/kernel.js +8 -1305
  372. package/dist/kernel.module.d.ts +17 -0
  373. package/dist/kernel.module.js +136 -0
  374. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  375. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  376. package/dist/lifecycle/tokens.d.ts +3 -0
  377. package/dist/lifecycle/tokens.js +3 -0
  378. package/dist/log-config.d.ts +9 -0
  379. package/dist/log-config.js +27 -0
  380. package/dist/log-context.d.ts +34 -0
  381. package/dist/log-context.js +44 -0
  382. package/dist/log-loki.d.ts +34 -0
  383. package/dist/log-loki.js +145 -0
  384. package/dist/log.d.ts +41 -10
  385. package/dist/log.js +91 -17
  386. package/dist/models/models.module.d.ts +3 -0
  387. package/dist/models/models.module.js +24 -0
  388. package/dist/models/prices.d.ts +8 -2
  389. package/dist/models/prices.js +65 -37
  390. package/dist/models/purposes.controller.d.ts +1 -1
  391. package/dist/models/purposes.controller.js +5 -6
  392. package/dist/models/purposes.d.ts +35 -13
  393. package/dist/models/purposes.js +101 -51
  394. package/dist/net/public-address.js +3 -2
  395. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  396. package/dist/orgs/directory-sync.controller.js +2 -2
  397. package/dist/orgs/directory-sync.d.ts +61 -31
  398. package/dist/orgs/directory-sync.js +212 -125
  399. package/dist/orgs/invitations.controller.d.ts +8 -8
  400. package/dist/orgs/invitations.controller.js +27 -26
  401. package/dist/orgs/invitations.service.d.ts +12 -9
  402. package/dist/orgs/invitations.service.js +130 -92
  403. package/dist/orgs/job-ids.d.ts +8 -0
  404. package/dist/orgs/job-ids.js +8 -0
  405. package/dist/orgs/members.service.d.ts +19 -12
  406. package/dist/orgs/members.service.js +161 -117
  407. package/dist/orgs/offboarding.d.ts +54 -57
  408. package/dist/orgs/offboarding.js +161 -71
  409. package/dist/orgs/org-lock.d.ts +28 -19
  410. package/dist/orgs/org-lock.js +81 -35
  411. package/dist/orgs/org.guard.d.ts +1 -1
  412. package/dist/orgs/org.guard.js +2 -2
  413. package/dist/orgs/orgs.controller.d.ts +13 -13
  414. package/dist/orgs/orgs.controller.js +29 -17
  415. package/dist/orgs/orgs.module.d.ts +6 -0
  416. package/dist/orgs/orgs.module.js +68 -0
  417. package/dist/orgs/orgs.service.d.ts +30 -19
  418. package/dist/orgs/orgs.service.js +139 -86
  419. package/dist/orgs/settings.controller.d.ts +1 -1
  420. package/dist/orgs/settings.controller.js +8 -6
  421. package/dist/orgs/settings.service.d.ts +14 -8
  422. package/dist/orgs/settings.service.js +75 -46
  423. package/dist/overrides.d.ts +56 -0
  424. package/dist/overrides.js +30 -0
  425. package/dist/roles/gateway-role.d.ts +43 -0
  426. package/dist/roles/gateway-role.js +98 -0
  427. package/dist/roles/gateway.module.d.ts +8 -0
  428. package/dist/roles/gateway.module.js +28 -0
  429. package/dist/roles/worker-role.d.ts +63 -0
  430. package/dist/roles/worker-role.js +144 -0
  431. package/dist/roles/worker.module.d.ts +14 -0
  432. package/dist/roles/worker.module.js +90 -0
  433. package/dist/runtime/abort.js +19 -2
  434. package/dist/runtime/checkpointer.d.ts +8 -3
  435. package/dist/runtime/checkpointer.js +87 -55
  436. package/dist/runtime/conversation-lock.d.ts +20 -11
  437. package/dist/runtime/conversation-lock.js +62 -72
  438. package/dist/runtime/hook-calls.d.ts +3 -3
  439. package/dist/runtime/hook-calls.js +1 -6
  440. package/dist/runtime/job-ids.d.ts +10 -0
  441. package/dist/runtime/job-ids.js +10 -0
  442. package/dist/runtime/langgraph-loop.js +1 -1
  443. package/dist/runtime/loop.d.ts +7 -0
  444. package/dist/runtime/loop.js +14 -0
  445. package/dist/runtime/maintenance-queue.d.ts +10 -0
  446. package/dist/runtime/maintenance-queue.js +10 -0
  447. package/dist/runtime/maintenance.d.ts +45 -74
  448. package/dist/runtime/maintenance.js +139 -136
  449. package/dist/runtime/model-call.d.ts +7 -4
  450. package/dist/runtime/model-call.js +24 -57
  451. package/dist/runtime/providers.d.ts +17 -6
  452. package/dist/runtime/providers.js +66 -25
  453. package/dist/runtime/quota.d.ts +17 -3
  454. package/dist/runtime/quota.js +27 -2
  455. package/dist/runtime/retired-schedulers.d.ts +7 -0
  456. package/dist/runtime/retired-schedulers.js +31 -0
  457. package/dist/runtime/run-control.d.ts +33 -0
  458. package/dist/runtime/run-control.js +77 -0
  459. package/dist/runtime/run-finish.d.ts +26 -17
  460. package/dist/runtime/run-finish.js +98 -51
  461. package/dist/runtime/run-jobs.d.ts +48 -0
  462. package/dist/runtime/run-jobs.js +95 -0
  463. package/dist/runtime/run-processors.d.ts +60 -0
  464. package/dist/runtime/run-processors.js +185 -0
  465. package/dist/runtime/run-queue.d.ts +32 -57
  466. package/dist/runtime/run-queue.js +291 -295
  467. package/dist/runtime/run-steps.d.ts +39 -0
  468. package/dist/runtime/run-steps.js +96 -0
  469. package/dist/runtime/run-worker.d.ts +121 -75
  470. package/dist/runtime/run-worker.js +340 -225
  471. package/dist/runtime/runtime.module.d.ts +10 -0
  472. package/dist/runtime/runtime.module.js +112 -0
  473. package/dist/runtime/step-log.d.ts +40 -0
  474. package/dist/runtime/step-log.js +94 -0
  475. package/dist/runtime/stream.controller.d.ts +5 -8
  476. package/dist/runtime/stream.controller.js +14 -12
  477. package/dist/runtime/stream.d.ts +24 -6
  478. package/dist/runtime/stream.js +78 -7
  479. package/dist/runtime/subagents/child.d.ts +3 -44
  480. package/dist/runtime/subagents/child.js +0 -79
  481. package/dist/runtime/subagents/definition.d.ts +4 -4
  482. package/dist/runtime/subagents/definition.js +2 -2
  483. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  484. package/dist/runtime/subagents/dispatch.js +135 -140
  485. package/dist/runtime/subagents/limits.d.ts +9 -4
  486. package/dist/runtime/subagents/limits.js +4 -2
  487. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  488. package/dist/runtime/subagents/org-agents.js +1 -1
  489. package/dist/runtime/subagents/progress.d.ts +2 -2
  490. package/dist/runtime/subagents/roster.d.ts +3 -3
  491. package/dist/runtime/subagents/roster.js +1 -1
  492. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  493. package/dist/runtime/subagents/skill-fork.js +16 -5
  494. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  495. package/dist/runtime/subagents/subagents.service.js +101 -0
  496. package/dist/runtime/usage-report.d.ts +94 -52
  497. package/dist/runtime/usage-report.js +200 -99
  498. package/dist/runtime/waits.d.ts +125 -57
  499. package/dist/runtime/waits.js +431 -208
  500. package/dist/sandbox/job-ids.d.ts +10 -0
  501. package/dist/sandbox/job-ids.js +10 -0
  502. package/dist/sandbox/jobs.d.ts +41 -0
  503. package/dist/sandbox/jobs.js +113 -0
  504. package/dist/sandbox/leases.d.ts +39 -31
  505. package/dist/sandbox/leases.js +117 -257
  506. package/dist/sandbox/providers.d.ts +19 -0
  507. package/dist/sandbox/providers.js +38 -0
  508. package/dist/sandbox/sandbox.module.d.ts +8 -0
  509. package/dist/sandbox/sandbox.module.js +30 -0
  510. package/dist/sandbox/sandbox.service.d.ts +24 -29
  511. package/dist/sandbox/sandbox.service.js +106 -75
  512. package/dist/skills/catalog.d.ts +33 -20
  513. package/dist/skills/catalog.js +96 -53
  514. package/dist/skills/changes.controller.d.ts +4 -4
  515. package/dist/skills/changes.controller.js +15 -9
  516. package/dist/skills/changes.service.d.ts +28 -18
  517. package/dist/skills/changes.service.js +421 -364
  518. package/dist/skills/invocable.controller.d.ts +1 -1
  519. package/dist/skills/invocable.controller.js +8 -5
  520. package/dist/skills/invoke.d.ts +16 -15
  521. package/dist/skills/invoke.js +48 -17
  522. package/dist/skills/skills.controller.d.ts +1 -1
  523. package/dist/skills/skills.controller.js +11 -6
  524. package/dist/skills/skills.module.d.ts +6 -0
  525. package/dist/skills/skills.module.js +30 -0
  526. package/dist/skills/skills.service.d.ts +47 -30
  527. package/dist/skills/skills.service.js +221 -158
  528. package/dist/storage/job-ids.d.ts +6 -0
  529. package/dist/storage/job-ids.js +6 -0
  530. package/dist/storage/purge.d.ts +22 -7
  531. package/dist/storage/purge.js +55 -3
  532. package/dist/storage/storage.module.d.ts +6 -0
  533. package/dist/storage/storage.module.js +23 -0
  534. package/dist/storage/storage.service.d.ts +18 -4
  535. package/dist/storage/storage.service.js +44 -3
  536. package/dist/tools/approvals.controller.d.ts +1 -1
  537. package/dist/tools/approvals.controller.js +12 -8
  538. package/dist/tools/approvals.service.d.ts +27 -25
  539. package/dist/tools/approvals.service.js +324 -258
  540. package/dist/tools/breaker.d.ts +2 -2
  541. package/dist/tools/breaker.js +21 -3
  542. package/dist/tools/builtins/ask-user.d.ts +2 -2
  543. package/dist/tools/builtins/ask-user.js +1 -1
  544. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  545. package/dist/tools/builtins/builtin-tools.js +80 -0
  546. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  547. package/dist/tools/builtins/read-tool-output.js +1 -1
  548. package/dist/tools/builtins/sandbox/bash.js +2 -2
  549. package/dist/tools/builtins/sandbox/common.d.ts +7 -4
  550. package/dist/tools/builtins/sandbox/common.js +5 -3
  551. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  552. package/dist/tools/builtins/sandbox/edit.js +1 -1
  553. package/dist/tools/builtins/sandbox/glob.js +2 -2
  554. package/dist/tools/builtins/sandbox/grep.js +2 -2
  555. package/dist/tools/builtins/sandbox/read.js +1 -1
  556. package/dist/tools/builtins/sandbox/write.js +1 -1
  557. package/dist/tools/builtins/skill-load.d.ts +3 -3
  558. package/dist/tools/builtins/skill-load.js +1 -1
  559. package/dist/tools/canonical-json.d.ts +6 -0
  560. package/dist/tools/canonical-json.js +16 -0
  561. package/dist/tools/connector-content.controller.d.ts +1 -1
  562. package/dist/tools/connector-content.controller.js +11 -6
  563. package/dist/tools/connector-content.d.ts +12 -15
  564. package/dist/tools/connector-content.js +53 -18
  565. package/dist/tools/connectors.controller.d.ts +1 -1
  566. package/dist/tools/connectors.controller.js +21 -10
  567. package/dist/tools/connectors.service.d.ts +31 -13
  568. package/dist/tools/connectors.service.js +434 -344
  569. package/dist/tools/credentials.d.ts +17 -20
  570. package/dist/tools/credentials.js +55 -34
  571. package/dist/tools/drift.d.ts +29 -41
  572. package/dist/tools/drift.js +111 -79
  573. package/dist/tools/info.d.ts +12 -9
  574. package/dist/tools/info.js +33 -7
  575. package/dist/tools/job-ids.d.ts +13 -0
  576. package/dist/tools/job-ids.js +15 -0
  577. package/dist/tools/jobs.d.ts +24 -0
  578. package/dist/tools/jobs.js +69 -0
  579. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  580. package/dist/tools/oauth/flow-paths.js +38 -0
  581. package/dist/tools/oauth/flow.d.ts +30 -30
  582. package/dist/tools/oauth/flow.js +109 -81
  583. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  584. package/dist/tools/oauth/oauth.controller.js +12 -9
  585. package/dist/tools/oauth/tokens.d.ts +11 -3
  586. package/dist/tools/oauth/tokens.js +15 -14
  587. package/dist/tools/outputs.d.ts +13 -4
  588. package/dist/tools/outputs.js +47 -3
  589. package/dist/tools/pipeline.d.ts +62 -46
  590. package/dist/tools/pipeline.js +145 -64
  591. package/dist/tools/policy.d.ts +2 -2
  592. package/dist/tools/questions.controller.d.ts +1 -1
  593. package/dist/tools/questions.controller.js +8 -5
  594. package/dist/tools/questions.service.d.ts +25 -24
  595. package/dist/tools/questions.service.js +201 -142
  596. package/dist/tools/registry.d.ts +30 -20
  597. package/dist/tools/registry.js +73 -37
  598. package/dist/tools/specs.d.ts +5 -4
  599. package/dist/tools/specs.js +3 -1
  600. package/dist/tools/tools.module.d.ts +10 -0
  601. package/dist/tools/tools.module.js +91 -0
  602. package/dist/ui/call-extension.d.ts +16 -0
  603. package/dist/ui/call-extension.js +38 -0
  604. package/dist/ui/embed-token.d.ts +9 -5
  605. package/dist/ui/embed-token.js +34 -6
  606. package/dist/ui/ui-stream.d.ts +22 -17
  607. package/dist/ui/ui-stream.js +72 -12
  608. package/dist/ui/ui.module.d.ts +7 -0
  609. package/dist/ui/ui.module.js +28 -0
  610. package/dist/ui/views.controller.d.ts +14 -12
  611. package/dist/ui/views.controller.js +32 -25
  612. package/dist/ui/views.d.ts +9 -57
  613. package/dist/ui/views.js +43 -45
  614. package/package.json +11 -2
  615. package/dist/http/health.controller.d.ts +0 -26
  616. package/dist/http/health.controller.js +0 -79
  617. package/dist/http/tokens.d.ts +0 -131
  618. package/dist/http/tokens.js +0 -131
  619. package/dist/http/zod.pipe.d.ts +0 -8
  620. package/dist/http/zod.pipe.js +0 -14
  621. package/dist/identity/rate-limit.d.ts +0 -55
  622. package/dist/identity/rate-limit.js +0 -121
  623. package/dist/sandbox/lifecycle.d.ts +0 -21
  624. package/dist/sandbox/lifecycle.js +0 -68
  625. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  626. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -0,0 +1,185 @@
1
+ import { type AgentTemplate, type Connector, type ConnectorTemplateFile, type ConnectorTemplateSpec, type LocalizedName, type PluginManifest } from "@capybara-hq/plugin-sdk";
2
+ import type { KernelSchemaDb } from "../db/kernel-schema.js";
3
+ import type { ExtensionRegistry } from "../extensions/registry.js";
4
+ import type { OrgLock } from "../orgs/org-lock.js";
5
+ import { type OrgAction } from "../orgs/roles.js";
6
+ import { checkSkillFiles, type SkillPackageFile } from "../skills/package.js";
7
+ import type { StorageService } from "../storage/storage.service.js";
8
+ import type { ConnectorTemplateRef, CreateConnectorInput } from "../tools/connectors.service.js";
9
+ import type { CatalogItemView } from "./catalog.service.js";
10
+ import type { ConnectorInstallInput, PluginInstallInput, PluginInstallView } from "./plugin-install.js";
11
+ import type { CatalogRequestView } from "./requests.service.js";
12
+ /** A catalog item from an organization's view (`GET /orgs/:orgId/catalog`). */
13
+ export interface OrgCatalogItem extends Omit<CatalogItemView, "installs" | "marketplaceId" | "latestMarketplaceVersion" | "newerInMarketplace"> {
14
+ /**
15
+ * `yes` installable now; `needs_approval` needs enterprise admin approval (install returns 202 and
16
+ * creates a request); `granted` approved for this org; `disabled` disabled by the enterprise admin
17
+ * (members don't see it); `not_deployed` the plugin's extension is not on the deployment.
18
+ */
19
+ installable: "yes" | "needs_approval" | "granted" | "disabled" | "not_deployed";
20
+ /**
21
+ * This org's live plugin install of the item (installing, installed or upgrading);
22
+ * `upgradeAvailable` is the version it can be upgraded to now (spec §10), null when none.
23
+ */
24
+ installed: {
25
+ pluginInstallId: string;
26
+ version: string;
27
+ upgradeAvailable: string | null;
28
+ } | null;
29
+ /** This org's latest request for the item. */
30
+ request: {
31
+ id: string;
32
+ stage: "org" | "deployment";
33
+ status: string;
34
+ } | null;
35
+ }
36
+ /**
37
+ * One connector template in an item's detail (for the install wizard): the endpoint preset, the
38
+ * paths an org may edit and the auth preset (no credentials). `id` is the template file's base name,
39
+ * sent as `connectors[id]` in the install body.
40
+ */
41
+ export interface OrgCatalogTemplate {
42
+ id: string;
43
+ displayName: LocalizedName | null;
44
+ description: string;
45
+ plugin: string;
46
+ connector: string;
47
+ endpoint: Record<string, unknown>;
48
+ editableEndpoint: string[];
49
+ auth: Record<string, unknown>;
50
+ ownership: "org" | "personal" | null;
51
+ }
52
+ /** `GET /orgs/:orgId/catalog/:itemId`: the item and what the install wizard needs (latest version). */
53
+ export interface OrgCatalogDetail {
54
+ item: OrgCatalogItem;
55
+ /** The latest version has an icon (`GET .../icon`). */
56
+ hasIcon: boolean;
57
+ /** The plugin's extension (its name), null without one. */
58
+ extension: string | null;
59
+ templates: OrgCatalogTemplate[];
60
+ /** The plugin's dependencies (name and range). */
61
+ dependencies: {
62
+ name: string;
63
+ range: string;
64
+ }[];
65
+ /** The skill directories. */
66
+ skills: string[];
67
+ /** The agent template files (`agents/<name>.md`, sub-agents spec §16). */
68
+ agents: string[];
69
+ }
70
+ /**
71
+ * A connector template as an org sees it (the install wizard and the upgrade preview's inputs):
72
+ * presets and editable paths, no credentials.
73
+ */
74
+ export declare function orgTemplateView(id: string, file: ConnectorTemplateFile): OrgCatalogTemplate;
75
+ /** An item's icon (the latest version's plugin icon). */
76
+ export interface CatalogIcon {
77
+ data: Uint8Array;
78
+ contentType: "image/svg+xml" | "image/png";
79
+ policy: "allow" | "needs_approval" | "disabled";
80
+ }
81
+ /** The parts of a catalog version row an org install reads. */
82
+ export interface CatalogVersionFiles {
83
+ manifest: unknown;
84
+ object_prefix: string | null;
85
+ files: {
86
+ path: string;
87
+ size: number;
88
+ sha256: string;
89
+ }[];
90
+ }
91
+ /** Whether the item's latest version has an icon; unreadable counts as none. */
92
+ export declare function catalogHasIcon(db: KernelSchemaDb, itemId: string): Promise<boolean>;
93
+ /**
94
+ * Reads the icon of the item's latest version (served only through kernel routes, with nosniff and
95
+ * a CSP sandbox in the response headers; the web only shows it with `<img>`). Item missing, deleted
96
+ * or (when `includeDisabled` is false) disabled -> `catalog.item_not_found` (decided before reading
97
+ * storage); no icon -> `catalog.icon_not_found`; stored content that is not a valid svg / png
98
+ * (checked at import, this guards against tampered storage) -> `internal`.
99
+ */
100
+ export declare function readCatalogIcon(db: KernelSchemaDb, storage: StorageService, itemId: string, includeDisabled: boolean): Promise<CatalogIcon>;
101
+ export type { ConnectorInstallInput };
102
+ /** The input of `POST /orgs/:orgId/catalog/:itemId/install` (default version: the latest). */
103
+ export interface OrgInstallInput extends PluginInstallInput {
104
+ version?: string;
105
+ }
106
+ /** Install result: 201 installed; 202 needs enterprise admin approval, a request was created (or escalated). */
107
+ export type OrgInstallResult = {
108
+ status: 201;
109
+ installed: {
110
+ itemId: string;
111
+ version: string;
112
+ pluginInstallId: string;
113
+ };
114
+ /** The install view (its components, dependency installs included). */
115
+ install: PluginInstallView;
116
+ } | {
117
+ status: 202;
118
+ request: CatalogRequestView;
119
+ };
120
+ /** Upgrade result: 200 upgraded (the install view); 202 needs enterprise admin approval, a request was created. */
121
+ export type OrgUpgradeResult = {
122
+ status: 200;
123
+ install: PluginInstallView;
124
+ } | {
125
+ status: 202;
126
+ request: CatalogRequestView;
127
+ };
128
+ /**
129
+ * The org actions installing / uninstalling a plugin needs: the union over its components (an
130
+ * extension -> `org.extensions.manage`, skills -> `skills.manage`, connector templates ->
131
+ * `connectors.manage`, agent templates -> `agents.manage`), re-checked inside the org row lock.
132
+ */
133
+ export declare function requiredActions(m: PluginManifest): OrgAction[];
134
+ /** Locks the org row in the caller's transaction (`orgLock` joins it) and re-checks the actor can do every action (else `forbidden`). */
135
+ export declare function lockOrgForActions(orgLock: Pick<OrgLock, "lockAndAuthorize">, orgId: string, actor: string, actions: OrgAction[]): Promise<void>;
136
+ /** The value at a dot path of `v` (own keys only), undefined when absent. */
137
+ export declare function getPath(v: unknown, path: string): unknown;
138
+ /** Sets the value at a dot path of `obj`, creating the objects on the way. */
139
+ export declare function setPath(obj: Record<string, unknown>, path: string, value: unknown): void;
140
+ /** The connector `kind` provided by extension `plugin` loaded on this replica (from the registry). */
141
+ export declare function findConnectorIn(registry: Pick<ExtensionRegistry, "list">, plugin: string, kind: string): Connector | undefined;
142
+ /** What checking a template's connector extension needs. */
143
+ export interface TemplateDeps {
144
+ /** The connector `kind` provided by extension `plugin` loaded on this replica. */
145
+ findConnector: (plugin: string, kind: string) => Connector | undefined;
146
+ /** The version of an extension loaded on this replica (undefined when not loaded). */
147
+ pluginVersion: (plugin: string) => string | undefined;
148
+ }
149
+ /**
150
+ * 模板的连接器插件此刻是否可用:插件加载且提供该 kind,并满足 `pluginVersion`(若写了);不可用返回原因
151
+ * (模型不可见,给管理员看的英文)。
152
+ */
153
+ export declare function templatePluginProblem(d: TemplateDeps, template: ConnectorTemplateSpec): string | undefined;
154
+ /**
155
+ * Builds the connector install input from a connector template plus what the org filled in (C30):
156
+ * the endpoint comes from the template, only paths listed in `editableEndpoint` (or fields under
157
+ * them) may be changed by the org, changing another path -> `validation_failed`; the auth method
158
+ * comes from the template, the org only gives credentials (static credentials via `credential`,
159
+ * OAuth via `client`). Re-checks the template's plugin, kind and `pluginVersion` against the
160
+ * connectors loaded on this replica right now (unmet -> `catalog.not_deployed`); the endpoint
161
+ * (merged as a whole) schema check, credential pattern check and OAuth URL policy are re-checked by
162
+ * `ConnectorsService.create`.
163
+ */
164
+ export declare function templateConnectorInput(deps: TemplateDeps, template: ConnectorTemplateSpec, ref: ConnectorTemplateRef, input: ConnectorInstallInput | undefined, defaultName: string, at?: string): CreateConnectorInput;
165
+ /** 从部署存储读目录版本里的文件(按版本行的 sha256 校验);`under` 给出时只读该目录下的文件,路径去掉该前缀。 */
166
+ export declare function readCatalogFiles(storage: StorageService, objectPrefix: string | null, files: {
167
+ path: string;
168
+ size: number;
169
+ sha256: string;
170
+ }[], under?: string): Promise<SkillPackageFile[]>;
171
+ /** 校验技能文件并取名字与描述(导入时已校验过;这里防存储被改)。 */
172
+ export declare function skillOf(files: SkillPackageFile[]): ReturnType<typeof checkSkillFiles>;
173
+ /** The connector templates of a catalog version, read from storage (id = the file's base name). */
174
+ export declare function readCatalogTemplates(storage: StorageService, v: CatalogVersionFiles): Promise<{
175
+ id: string;
176
+ file: ConnectorTemplateFile;
177
+ }[]>;
178
+ /**
179
+ * The agent templates of a catalog version (`manifest.agents`, listed explicitly since import),
180
+ * parsed from storage (checked at import; parsed again in case storage was changed).
181
+ */
182
+ export declare function readCatalogAgentTemplates(storage: StorageService, v: CatalogVersionFiles): Promise<{
183
+ path: string;
184
+ template: AgentTemplate;
185
+ }[]>;
@@ -0,0 +1,323 @@
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 { ApiError } from "../errors.js";
8
+ import { can } from "../orgs/roles.js";
9
+ import { packagePath } from "../packages/tgz.js";
10
+ import { checkSkillFiles, SkillArchiveError } from "../skills/package.js";
11
+ import { iconProblem } from "./plugin-package.js";
12
+ import { satisfiesRange } from "./versions.js";
13
+ /**
14
+ * A connector template as an org sees it (the install wizard and the upgrade preview's inputs):
15
+ * presets and editable paths, no credentials.
16
+ */
17
+ export function orgTemplateView(id, file) {
18
+ const t = file.template;
19
+ return {
20
+ id,
21
+ displayName: file.displayName,
22
+ description: file.description ?? "",
23
+ plugin: t.plugin,
24
+ connector: t.connector,
25
+ endpoint: t.endpoint,
26
+ editableEndpoint: t.editableEndpoint ?? [],
27
+ auth: t.auth,
28
+ ownership: t.ownership ??
29
+ (typeof t.auth.ownership === "string" ? t.auth.ownership : null),
30
+ };
31
+ }
32
+ const iconNotFound = () => new ApiError("catalog.icon_not_found", "This catalog item has no icon");
33
+ /**
34
+ * The item's latest version row; item missing, deleted or (when `includeDisabled` is false)
35
+ * disabled -> `catalog.item_not_found`.
36
+ */
37
+ async function latestVersionRow(db, itemId, includeDisabled) {
38
+ if (!UUID_RE.test(itemId))
39
+ throw itemNotFound();
40
+ const item = await db
41
+ .selectFrom("catalog_items")
42
+ .select(["latest_version", "policy"])
43
+ .where("id", "=", itemId)
44
+ .where("deleted_at", "is", null)
45
+ .executeTakeFirst();
46
+ // An item the caller cannot see is "not found" before any version / storage is read, so "no icon"
47
+ // never reveals that it exists
48
+ if (!item || (!includeDisabled && item.policy === "disabled"))
49
+ throw itemNotFound();
50
+ const v = await db
51
+ .selectFrom("catalog_item_versions")
52
+ .select(["manifest", "object_prefix", "files"])
53
+ .where("item_id", "=", itemId)
54
+ .where("version", "=", item.latest_version)
55
+ .executeTakeFirst();
56
+ if (!v)
57
+ throw itemNotFound();
58
+ return { item, v };
59
+ }
60
+ /** The icon's path in the version's files (undefined without an icon). */
61
+ const iconPath = (v) => {
62
+ const icon = v.manifest.icon;
63
+ return icon === undefined ? undefined : packagePath(icon);
64
+ };
65
+ /** Whether the item's latest version has an icon; unreadable counts as none. */
66
+ export async function catalogHasIcon(db, itemId) {
67
+ try {
68
+ const { v } = await latestVersionRow(db, itemId, true);
69
+ const path = iconPath(v);
70
+ return path !== undefined && v.files.some((f) => f.path === path);
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ /**
77
+ * Reads the icon of the item's latest version (served only through kernel routes, with nosniff and
78
+ * a CSP sandbox in the response headers; the web only shows it with `<img>`). Item missing, deleted
79
+ * or (when `includeDisabled` is false) disabled -> `catalog.item_not_found` (decided before reading
80
+ * storage); no icon -> `catalog.icon_not_found`; stored content that is not a valid svg / png
81
+ * (checked at import, this guards against tampered storage) -> `internal`.
82
+ */
83
+ export async function readCatalogIcon(db, storage, itemId, includeDisabled) {
84
+ const { item, v } = await latestVersionRow(db, itemId, includeDisabled);
85
+ const path = iconPath(v);
86
+ const f = path === undefined ? undefined : v.files.find((x) => x.path === path);
87
+ if (path === undefined || !f)
88
+ throw iconNotFound();
89
+ const [file] = await readCatalogFiles(storage, v.object_prefix, [f]);
90
+ if (!file)
91
+ throw iconNotFound();
92
+ const problem = iconProblem(path, file.data);
93
+ if (problem !== undefined)
94
+ throw new ApiError("internal", `Stored icon is invalid: ${problem}`);
95
+ return {
96
+ data: file.data,
97
+ contentType: /\.svg$/i.test(path) ? "image/svg+xml" : "image/png",
98
+ policy: item.policy,
99
+ };
100
+ }
101
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
102
+ const itemNotFound = () => new ApiError("catalog.item_not_found", "Catalog item not found");
103
+ const fail = (path, message) => new ApiError("validation_failed", "Request validation failed", [{ path, message }]);
104
+ /**
105
+ * The org actions installing / uninstalling a plugin needs: the union over its components (an
106
+ * extension -> `org.extensions.manage`, skills -> `skills.manage`, connector templates ->
107
+ * `connectors.manage`, agent templates -> `agents.manage`), re-checked inside the org row lock.
108
+ */
109
+ export function requiredActions(m) {
110
+ const out = [];
111
+ if (m.extension)
112
+ out.push("org.extensions.manage");
113
+ if ((m.connectorTemplates ?? []).length > 0)
114
+ out.push("connectors.manage");
115
+ if ((m.skills ?? []).length > 0)
116
+ out.push("skills.manage");
117
+ if ((m.agents ?? []).length > 0)
118
+ out.push("agents.manage");
119
+ return out.length > 0 ? out : ["org.extensions.manage"];
120
+ }
121
+ /** Locks the org row in the caller's transaction (`orgLock` joins it) and re-checks the actor can do every action (else `forbidden`). */
122
+ export async function lockOrgForActions(orgLock, orgId, actor, actions) {
123
+ const [first, ...rest] = actions;
124
+ const { role } = await orgLock.lockAndAuthorize(orgId, actor, first);
125
+ for (const a of rest) {
126
+ if (!can(role, a))
127
+ throw new ApiError("forbidden", "Insufficient organization role");
128
+ }
129
+ }
130
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
131
+ const UNSAFE_KEYS = new Set(["__proto__", "prototype", "constructor"]);
132
+ /** 对象的全部叶子点路径(数组与非对象值算叶子)。 */
133
+ function leafPaths(v, base = "") {
134
+ const out = [];
135
+ for (const [k, x] of Object.entries(v)) {
136
+ const p = base ? `${base}.${k}` : k;
137
+ if (isObj(x) && Object.keys(x).length > 0)
138
+ out.push(...leafPaths(x, p));
139
+ else
140
+ out.push(p);
141
+ }
142
+ return out;
143
+ }
144
+ /** The value at a dot path of `v` (own keys only), undefined when absent. */
145
+ export function getPath(v, path) {
146
+ let node = v;
147
+ for (const seg of path.split(".")) {
148
+ if (!isObj(node) || !Object.hasOwn(node, seg))
149
+ return undefined;
150
+ node = node[seg];
151
+ }
152
+ return node;
153
+ }
154
+ /** Sets the value at a dot path of `obj`, creating the objects on the way. */
155
+ export function setPath(obj, path, value) {
156
+ const segs = path.split(".");
157
+ let node = obj;
158
+ for (const seg of segs.slice(0, -1)) {
159
+ if (!isObj(node[seg]))
160
+ node[seg] = {};
161
+ node = node[seg];
162
+ }
163
+ node[segs[segs.length - 1]] = value;
164
+ }
165
+ /** The connector `kind` provided by extension `plugin` loaded on this replica (from the registry). */
166
+ export function findConnectorIn(registry, plugin, kind) {
167
+ return registry
168
+ .list("connector")
169
+ .find((e) => e.plugin === plugin && e.impl?.kind === kind)?.impl;
170
+ }
171
+ /**
172
+ * 模板的连接器插件此刻是否可用:插件加载且提供该 kind,并满足 `pluginVersion`(若写了);不可用返回原因
173
+ * (模型不可见,给管理员看的英文)。
174
+ */
175
+ export function templatePluginProblem(d, template) {
176
+ if (!d.findConnector(template.plugin, template.connector)) {
177
+ return `Connector extension ${template.plugin} providing "${template.connector}" is not deployed; ask the enterprise admin to install and enable it`;
178
+ }
179
+ const range = template.pluginVersion;
180
+ const version = d.pluginVersion(template.plugin);
181
+ if (range !== undefined && version !== undefined && !satisfiesRange(version, range)) {
182
+ return `Connector extension ${template.plugin} is deployed at version ${version}, but the template needs ${range}; ask the enterprise admin to upgrade it`;
183
+ }
184
+ return undefined;
185
+ }
186
+ /**
187
+ * Builds the connector install input from a connector template plus what the org filled in (C30):
188
+ * the endpoint comes from the template, only paths listed in `editableEndpoint` (or fields under
189
+ * them) may be changed by the org, changing another path -> `validation_failed`; the auth method
190
+ * comes from the template, the org only gives credentials (static credentials via `credential`,
191
+ * OAuth via `client`). Re-checks the template's plugin, kind and `pluginVersion` against the
192
+ * connectors loaded on this replica right now (unmet -> `catalog.not_deployed`); the endpoint
193
+ * (merged as a whole) schema check, credential pattern check and OAuth URL policy are re-checked by
194
+ * `ConnectorsService.create`.
195
+ */
196
+ export function templateConnectorInput(deps, template, ref, input, defaultName, at = "connector") {
197
+ const problem = templatePluginProblem(deps, template);
198
+ if (problem !== undefined)
199
+ throw new ApiError("catalog.not_deployed", problem);
200
+ const given = input ?? {};
201
+ const editable = template.editableEndpoint ?? [];
202
+ const endpoint = structuredClone(template.endpoint);
203
+ if (given.endpoint !== undefined) {
204
+ if (!isObj(given.endpoint))
205
+ throw fail(`${at}.endpoint`, "Expected an object");
206
+ for (const p of leafPaths(given.endpoint)) {
207
+ const segs = p.split(".");
208
+ if (segs.some((s) => UNSAFE_KEYS.has(s))) {
209
+ throw fail(`${at}.endpoint.${p}`, "Invalid key");
210
+ }
211
+ const allowed = editable.some((e) => p === e || p.startsWith(`${e}.`));
212
+ if (!allowed) {
213
+ throw fail(`${at}.endpoint.${p}`, "This endpoint field is set by the template and cannot be changed");
214
+ }
215
+ }
216
+ for (const e of editable) {
217
+ const v = getPath(given.endpoint, e);
218
+ if (v !== undefined)
219
+ setPath(endpoint, e, v);
220
+ }
221
+ }
222
+ const auth = template.auth;
223
+ const oauth = auth.type === "oauth_code" || auth.type === "oauth_client";
224
+ if (oauth && given.credential !== undefined) {
225
+ throw fail(`${at}.credential`, "This connector uses OAuth; provide client instead");
226
+ }
227
+ if (!oauth && given.client !== undefined) {
228
+ throw fail(`${at}.client`, "This connector does not use OAuth; provide credential instead");
229
+ }
230
+ const credential = oauth ? given.client : given.credential;
231
+ return {
232
+ name: given.name ?? defaultName,
233
+ ...(given.slug !== undefined && { slug: given.slug }),
234
+ connector: template.connector,
235
+ endpoint,
236
+ auth,
237
+ ...(credential !== undefined && { credential }),
238
+ template: {
239
+ ...ref,
240
+ ...(template.defaultToolPolicies !== undefined && {
241
+ defaultToolPolicies: template.defaultToolPolicies,
242
+ }),
243
+ },
244
+ };
245
+ }
246
+ /** 从部署存储读目录版本里的文件(按版本行的 sha256 校验);`under` 给出时只读该目录下的文件,路径去掉该前缀。 */
247
+ export async function readCatalogFiles(storage, objectPrefix, files, under) {
248
+ storage.assertAvailable();
249
+ if (objectPrefix === null)
250
+ return [];
251
+ const store = storage.deployment();
252
+ const dir = under === undefined ? "" : `${under}/`;
253
+ const out = [];
254
+ for (const f of files) {
255
+ if (!f.path.startsWith(dir))
256
+ continue;
257
+ const got = await store.get(`${objectPrefix}${f.path}`);
258
+ if (!got) {
259
+ throw new ApiError("storage.unavailable", `Catalog file ${f.path} is missing from object storage`);
260
+ }
261
+ const data = new Uint8Array(await new Response(got.body).arrayBuffer());
262
+ if (createHash("sha256").update(data).digest("hex") !== f.sha256) {
263
+ throw new ApiError("internal", `Catalog file ${f.path} does not match its recorded hash`);
264
+ }
265
+ out.push({ path: f.path.slice(dir.length), size: data.byteLength, sha256: f.sha256, data });
266
+ }
267
+ return out;
268
+ }
269
+ /** 校验技能文件并取名字与描述(导入时已校验过;这里防存储被改)。 */
270
+ export function skillOf(files) {
271
+ try {
272
+ // Stored files: a version imported before phase D keeps installing (its invocation keys are
273
+ // read leniently; `skillInvocation` ignores values of the wrong type)
274
+ return checkSkillFiles(files, { invocationKeys: false });
275
+ }
276
+ catch (e) {
277
+ if (e instanceof SkillArchiveError) {
278
+ throw new ApiError("internal", `Stored skill is invalid: ${e.problems.join("; ")}`);
279
+ }
280
+ throw e;
281
+ }
282
+ }
283
+ /** The connector templates of a catalog version, read from storage (id = the file's base name). */
284
+ export async function readCatalogTemplates(storage, v) {
285
+ const refs = v.manifest.connectorTemplates ?? [];
286
+ if (refs.length === 0)
287
+ return [];
288
+ const paths = refs.map((r) => packagePath(r.path));
289
+ const files = await readCatalogFiles(storage, v.object_prefix, v.files.filter((f) => paths.includes(f.path)));
290
+ return paths.map((path) => {
291
+ const f = files.find((x) => x.path === path);
292
+ let parsed;
293
+ try {
294
+ parsed = f && parseConnectorTemplateFile(JSON.parse(new TextDecoder().decode(f.data)));
295
+ }
296
+ catch {
297
+ parsed = undefined;
298
+ }
299
+ if (!parsed || "errors" in parsed) {
300
+ throw new ApiError("internal", `Stored connector template ${path} is missing or invalid`);
301
+ }
302
+ return { id: path.split("/").pop().replace(/\.json$/, ""), file: parsed };
303
+ });
304
+ }
305
+ /**
306
+ * The agent templates of a catalog version (`manifest.agents`, listed explicitly since import),
307
+ * parsed from storage (checked at import; parsed again in case storage was changed).
308
+ */
309
+ export async function readCatalogAgentTemplates(storage, v) {
310
+ const refs = v.manifest.agents ?? [];
311
+ if (refs.length === 0)
312
+ return [];
313
+ const paths = refs.map((r) => packagePath(r.path));
314
+ const files = await readCatalogFiles(storage, v.object_prefix, v.files.filter((f) => paths.includes(f.path)));
315
+ return paths.map((path) => {
316
+ const f = files.find((x) => x.path === path);
317
+ const parsed = f && parseAgentTemplate(new TextDecoder().decode(f.data));
318
+ if (!parsed || "errors" in parsed) {
319
+ throw new ApiError("internal", `Stored agent template ${path} is missing or invalid`);
320
+ }
321
+ return { path, template: parsed.template };
322
+ });
323
+ }