@capybara-hq/kernel 0.1.0-rc.5 → 0.1.0-rc.7

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 (362) hide show
  1. package/bootstrap.json +27 -3
  2. package/dist/admin/admin.controller.d.ts +21 -74
  3. package/dist/admin/admin.controller.js +50 -50
  4. package/dist/admin/admin.schemas.d.ts +57 -0
  5. package/dist/admin/admin.schemas.js +50 -0
  6. package/dist/admin/extensions.controller.d.ts +10 -0
  7. package/dist/admin/extensions.controller.js +18 -0
  8. package/dist/admin/extensions.schemas.d.ts +7 -0
  9. package/dist/admin/extensions.schemas.js +10 -0
  10. package/dist/admin/limit-defaults.d.ts +20 -0
  11. package/dist/admin/limit-defaults.js +10 -0
  12. package/dist/agents/agent-profile.service.d.ts +7 -5
  13. package/dist/agents/agent-profile.service.js +14 -9
  14. package/dist/agents/agents.controller.d.ts +7 -287
  15. package/dist/agents/agents.controller.js +7 -67
  16. package/dist/agents/agents.schemas.d.ts +389 -0
  17. package/dist/agents/agents.schemas.js +126 -0
  18. package/dist/agents/agents.service.d.ts +16 -6
  19. package/dist/agents/agents.service.js +75 -19
  20. package/dist/agents/definition.d.ts +47 -19
  21. package/dist/agents/definition.js +119 -38
  22. package/dist/agents/from-template.d.ts +2 -2
  23. package/dist/agents/from-template.js +76 -45
  24. package/dist/agents/from-template.service.d.ts +12 -0
  25. package/dist/agents/from-template.service.js +23 -6
  26. package/dist/agents/models.controller.d.ts +33 -5
  27. package/dist/agents/models.controller.js +50 -6
  28. package/dist/agents/org-templates.d.ts +13 -3
  29. package/dist/agents/org-templates.js +69 -28
  30. package/dist/agents/pending-connector-requests.d.ts +2 -0
  31. package/dist/agents/pending-connector-requests.js +1 -1
  32. package/dist/agents/pending-connectors.controller.d.ts +1 -1
  33. package/dist/agents/pending-connectors.controller.js +2 -2
  34. package/dist/agents/pending-connectors.service.d.ts +2 -2
  35. package/dist/agents/pending-connectors.service.js +19 -19
  36. package/dist/agents/profile.d.ts +18 -0
  37. package/dist/agents/profile.js +5 -1
  38. package/dist/agents/readiness.controller.d.ts +5 -5
  39. package/dist/agents/readiness.controller.js +6 -6
  40. package/dist/agents/templates.controller.d.ts +8 -17
  41. package/dist/agents/templates.controller.js +13 -31
  42. package/dist/agents/templates.schemas.d.ts +20 -0
  43. package/dist/agents/templates.schemas.js +45 -0
  44. package/dist/background/background.controller.js +3 -2
  45. package/dist/background/background.schemas.d.ts +10 -0
  46. package/dist/background/background.schemas.js +16 -0
  47. package/dist/background/tasks.service.d.ts +1 -1
  48. package/dist/background/tasks.service.js +7 -2
  49. package/dist/catalog/admin-catalog.controller.d.ts +4 -57
  50. package/dist/catalog/admin-catalog.controller.js +8 -45
  51. package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
  52. package/dist/catalog/admin-catalog.schemas.js +92 -0
  53. package/dist/catalog/catalog-content.d.ts +12 -2
  54. package/dist/catalog/catalog-scope.service.js +8 -2
  55. package/dist/catalog/catalog.service.d.ts +2 -0
  56. package/dist/catalog/catalog.service.js +3 -0
  57. package/dist/catalog/component-scope.controller.d.ts +3 -65
  58. package/dist/catalog/component-scope.controller.js +3 -56
  59. package/dist/catalog/component-scope.schemas.d.ts +114 -0
  60. package/dist/catalog/component-scope.schemas.js +97 -0
  61. package/dist/catalog/component-scope.service.d.ts +28 -4
  62. package/dist/catalog/component-scope.service.js +55 -3
  63. package/dist/catalog/component-state.d.ts +9 -2
  64. package/dist/catalog/component-state.js +22 -13
  65. package/dist/catalog/marketplaces.controller.d.ts +5 -35
  66. package/dist/catalog/marketplaces.controller.js +6 -34
  67. package/dist/catalog/marketplaces.schemas.d.ts +48 -0
  68. package/dist/catalog/marketplaces.schemas.js +53 -0
  69. package/dist/catalog/marketplaces.service.d.ts +15 -1
  70. package/dist/catalog/marketplaces.service.js +22 -1
  71. package/dist/catalog/org-catalog.controller.d.ts +6 -62
  72. package/dist/catalog/org-catalog.controller.js +12 -66
  73. package/dist/catalog/org-catalog.schemas.d.ts +79 -0
  74. package/dist/catalog/org-catalog.schemas.js +82 -0
  75. package/dist/catalog/org-catalog.service.d.ts +9 -2
  76. package/dist/catalog/org-catalog.service.js +38 -5
  77. package/dist/catalog/org-extension.controller.d.ts +1 -12
  78. package/dist/catalog/org-extension.controller.js +1 -10
  79. package/dist/catalog/org-extension.schemas.d.ts +15 -0
  80. package/dist/catalog/org-extension.schemas.js +22 -0
  81. package/dist/catalog/org-plugin-uploads.controller.d.ts +2 -19
  82. package/dist/catalog/org-plugin-uploads.controller.js +15 -28
  83. package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
  84. package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
  85. package/dist/catalog/owned-items.d.ts +6 -2
  86. package/dist/catalog/owned-items.js +16 -4
  87. package/dist/catalog/platform-components.d.ts +2 -0
  88. package/dist/catalog/platform-components.js +2 -0
  89. package/dist/catalog/plugin-import.js +1 -0
  90. package/dist/catalog/plugin-install.js +1 -1
  91. package/dist/catalog/requests.service.d.ts +2 -1
  92. package/dist/catalog/requests.service.js +6 -2
  93. package/dist/channels/channels.schemas.d.ts +33 -0
  94. package/dist/channels/channels.schemas.js +34 -0
  95. package/dist/channels/connections.controller.d.ts +2 -29
  96. package/dist/channels/connections.controller.js +1 -23
  97. package/dist/channels/connections.service.d.ts +8 -2
  98. package/dist/channels/connections.service.js +23 -5
  99. package/dist/channels/inbound.js +4 -0
  100. package/dist/config/schema.d.ts +4 -0
  101. package/dist/config/schema.js +24 -0
  102. package/dist/conversations/conversations.controller.d.ts +16 -37
  103. package/dist/conversations/conversations.controller.js +16 -56
  104. package/dist/conversations/conversations.schemas.d.ts +52 -0
  105. package/dist/conversations/conversations.schemas.js +79 -0
  106. package/dist/conversations/conversations.service.d.ts +13 -4
  107. package/dist/conversations/conversations.service.js +32 -26
  108. package/dist/conversations/events.d.ts +80 -6
  109. package/dist/conversations/events.js +60 -5
  110. package/dist/conversations/message-context.d.ts +28 -0
  111. package/dist/conversations/message-context.js +56 -0
  112. package/dist/conversations/queue.d.ts +2 -1
  113. package/dist/conversations/queue.js +11 -2
  114. package/dist/ctx/create-ctx.d.ts +15 -1
  115. package/dist/ctx/create-ctx.js +23 -2
  116. package/dist/db/kernel-schema.d.ts +44 -0
  117. package/dist/environments/environments.schemas.d.ts +3 -0
  118. package/dist/environments/environments.schemas.js +14 -0
  119. package/dist/environments/environments.service.d.ts +16 -4
  120. package/dist/environments/environments.service.js +58 -13
  121. package/dist/errors.d.ts +6 -0
  122. package/dist/errors.js +6 -0
  123. package/dist/evals/evals.schemas.d.ts +110 -0
  124. package/dist/evals/evals.schemas.js +107 -0
  125. package/dist/evals/reconstruct.js +18 -11
  126. package/dist/evals/recorded-tools.d.ts +2 -1
  127. package/dist/evals/recorded-tools.js +11 -3
  128. package/dist/evals/run-replay.d.ts +8 -1
  129. package/dist/evals/run-replay.js +17 -2
  130. package/dist/evals/runs.controller.d.ts +2 -57
  131. package/dist/evals/runs.controller.js +1 -42
  132. package/dist/evals/runs.service.d.ts +8 -7
  133. package/dist/evals/runs.service.js +45 -30
  134. package/dist/evals/sets.controller.d.ts +2 -28
  135. package/dist/evals/sets.controller.js +1 -31
  136. package/dist/evals/sets.service.d.ts +7 -7
  137. package/dist/evals/sets.service.js +23 -17
  138. package/dist/evals/snapshot.d.ts +3 -2
  139. package/dist/evals/snapshot.js +17 -4
  140. package/dist/evals/step-replay.d.ts +2 -1
  141. package/dist/evals/step-replay.js +3 -2
  142. package/dist/extensions/admin-ops.d.ts +5 -3
  143. package/dist/extensions/admin-ops.js +17 -12
  144. package/dist/extensions/config-hash.d.ts +10 -0
  145. package/dist/extensions/config-hash.js +38 -0
  146. package/dist/extensions/deployment-config.d.ts +16 -1
  147. package/dist/extensions/deployment-config.js +83 -0
  148. package/dist/extensions/extensions.module.js +9 -12
  149. package/dist/extensions/host.d.ts +39 -12
  150. package/dist/extensions/host.js +129 -51
  151. package/dist/extensions/installs.d.ts +5 -0
  152. package/dist/extensions/installs.js +12 -0
  153. package/dist/extensions/org-config.d.ts +17 -2
  154. package/dist/extensions/org-config.js +23 -4
  155. package/dist/extensions/point-defaults.controller.d.ts +2 -8
  156. package/dist/extensions/point-defaults.controller.js +1 -3
  157. package/dist/extensions/point-defaults.d.ts +3 -1
  158. package/dist/extensions/point-defaults.js +4 -2
  159. package/dist/extensions/point-defaults.schemas.d.ts +9 -0
  160. package/dist/extensions/point-defaults.schemas.js +14 -0
  161. package/dist/extensions/state.module.d.ts +9 -0
  162. package/dist/extensions/state.module.js +38 -0
  163. package/dist/extensions/unavailable.d.ts +49 -0
  164. package/dist/extensions/unavailable.js +113 -0
  165. package/dist/files/previewers.controller.js +2 -3
  166. package/dist/files/previewers.d.ts +1 -1
  167. package/dist/files/previewers.js +4 -4
  168. package/dist/files/previewers.schemas.d.ts +10 -0
  169. package/dist/files/previewers.schemas.js +9 -0
  170. package/dist/http/api.module.js +4 -0
  171. package/dist/http/plugin-dispatch.d.ts +4 -1
  172. package/dist/http/plugin-dispatch.js +14 -2
  173. package/dist/identity/accounts.d.ts +43 -4
  174. package/dist/identity/accounts.js +74 -6
  175. package/dist/identity/auth.guard.js +10 -1
  176. package/dist/identity/cookies.d.ts +6 -0
  177. package/dist/identity/cookies.js +14 -0
  178. package/dist/identity/identity.module.js +3 -0
  179. package/dist/identity/initial-passwords.controller.d.ts +22 -0
  180. package/dist/identity/initial-passwords.controller.js +49 -0
  181. package/dist/identity/initial-passwords.d.ts +61 -0
  182. package/dist/identity/initial-passwords.job.d.ts +16 -0
  183. package/dist/identity/initial-passwords.job.js +46 -0
  184. package/dist/identity/initial-passwords.js +159 -0
  185. package/dist/identity/me.controller.d.ts +14 -0
  186. package/dist/identity/me.controller.js +39 -1
  187. package/dist/identity/principal.d.ts +8 -0
  188. package/dist/identity/principal.js +8 -0
  189. package/dist/identity/settings.d.ts +3 -1
  190. package/dist/identity/settings.js +6 -4
  191. package/dist/inbox/inbox.schemas.d.ts +8 -0
  192. package/dist/inbox/inbox.schemas.js +11 -0
  193. package/dist/inbox/platform-inbox.controller.d.ts +1 -1
  194. package/dist/inbox/platform-inbox.controller.js +2 -2
  195. package/dist/index.d.ts +4 -0
  196. package/dist/index.js +6 -0
  197. package/dist/infra/config/kernel-config.service.js +3 -0
  198. package/dist/infra/events/kernel-events.d.ts +8 -0
  199. package/dist/lifecycle/kernel-lifecycle.js +4 -0
  200. package/dist/models/embeddings.d.ts +82 -0
  201. package/dist/models/embeddings.js +326 -0
  202. package/dist/models/enablement.controller.d.ts +40 -0
  203. package/dist/models/enablement.controller.js +74 -0
  204. package/dist/models/enablement.d.ts +101 -0
  205. package/dist/models/enablement.js +264 -0
  206. package/dist/models/models.module.d.ts +5 -1
  207. package/dist/models/models.module.js +16 -4
  208. package/dist/models/org-models.schemas.d.ts +8 -0
  209. package/dist/models/org-models.schemas.js +22 -0
  210. package/dist/models/prices.d.ts +3 -1
  211. package/dist/models/prices.js +7 -5
  212. package/dist/models/purposes.d.ts +30 -6
  213. package/dist/models/purposes.js +68 -17
  214. package/dist/orgs/orgs.controller.d.ts +2 -5
  215. package/dist/orgs/orgs.controller.js +3 -6
  216. package/dist/orgs/orgs.schemas.d.ts +8 -0
  217. package/dist/orgs/orgs.schemas.js +16 -0
  218. package/dist/orgs/orgs.service.d.ts +3 -1
  219. package/dist/orgs/orgs.service.js +6 -4
  220. package/dist/orgs/settings.service.d.ts +9 -1
  221. package/dist/orgs/settings.service.js +20 -5
  222. package/dist/overrides.d.ts +4 -0
  223. package/dist/overrides.js +2 -0
  224. package/dist/platform/errors.d.ts +21 -4
  225. package/dist/platform/errors.js +45 -6
  226. package/dist/platform/exclusions.d.ts +2 -3
  227. package/dist/platform/exclusions.js +68 -831
  228. package/dist/platform/method.js +1 -1
  229. package/dist/platform/operation.d.ts +82 -5
  230. package/dist/platform/operation.js +62 -7
  231. package/dist/platform/ops/accounts.ops.d.ts +32 -0
  232. package/dist/platform/ops/accounts.ops.js +291 -0
  233. package/dist/platform/ops/admin.ops.d.ts +36 -0
  234. package/dist/platform/ops/admin.ops.js +389 -0
  235. package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
  236. package/dist/platform/ops/agent-skills.ops.js +226 -0
  237. package/dist/platform/ops/agent-templates.ops.d.ts +4 -1
  238. package/dist/platform/ops/agent-templates.ops.js +194 -14
  239. package/dist/platform/ops/agents.ops.d.ts +19 -1
  240. package/dist/platform/ops/agents.ops.js +481 -58
  241. package/dist/platform/ops/approvals.ops.d.ts +30 -0
  242. package/dist/platform/ops/approvals.ops.js +116 -0
  243. package/dist/platform/ops/background.ops.d.ts +14 -0
  244. package/dist/platform/ops/background.ops.js +134 -0
  245. package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
  246. package/dist/platform/ops/catalog-admin.ops.js +587 -0
  247. package/dist/platform/ops/channels.ops.d.ts +16 -0
  248. package/dist/platform/ops/channels.ops.js +195 -0
  249. package/dist/platform/ops/components.ops.d.ts +46 -0
  250. package/dist/platform/ops/components.ops.js +853 -0
  251. package/dist/platform/ops/connectors.ops.d.ts +4 -2
  252. package/dist/platform/ops/connectors.ops.js +68 -6
  253. package/dist/platform/ops/conversations.ops.d.ts +30 -0
  254. package/dist/platform/ops/conversations.ops.js +470 -0
  255. package/dist/platform/ops/environments.ops.d.ts +26 -0
  256. package/dist/platform/ops/environments.ops.js +289 -0
  257. package/dist/platform/ops/errors.d.ts +10 -5
  258. package/dist/platform/ops/errors.js +19 -11
  259. package/dist/platform/ops/evals.ops.d.ts +28 -0
  260. package/dist/platform/ops/evals.ops.js +783 -0
  261. package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
  262. package/dist/platform/ops/extensions-admin.ops.js +344 -0
  263. package/dist/platform/ops/extensions.ops.d.ts +7 -1
  264. package/dist/platform/ops/extensions.ops.js +248 -17
  265. package/dist/platform/ops/inbox.ops.d.ts +25 -0
  266. package/dist/platform/ops/inbox.ops.js +378 -0
  267. package/dist/platform/ops/marketplaces.ops.d.ts +7 -1
  268. package/dist/platform/ops/marketplaces.ops.js +326 -17
  269. package/dist/platform/ops/models.ops.d.ts +25 -0
  270. package/dist/platform/ops/models.ops.js +232 -0
  271. package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
  272. package/dist/platform/ops/org-plugins.ops.js +329 -0
  273. package/dist/platform/ops/org-settings.ops.d.ts +16 -0
  274. package/dist/platform/ops/org-settings.ops.js +102 -0
  275. package/dist/platform/ops/orgs.ops.d.ts +28 -0
  276. package/dist/platform/ops/orgs.ops.js +295 -0
  277. package/dist/platform/ops/other-orgs.d.ts +20 -0
  278. package/dist/platform/ops/other-orgs.js +72 -0
  279. package/dist/platform/ops/platform.ops.d.ts +4 -4
  280. package/dist/platform/ops/platform.ops.js +23 -24
  281. package/dist/platform/ops/plugins.ops.d.ts +10 -8
  282. package/dist/platform/ops/plugins.ops.js +176 -77
  283. package/dist/platform/ops/previewers.ops.d.ts +14 -0
  284. package/dist/platform/ops/previewers.ops.js +109 -0
  285. package/dist/platform/ops/requests.ops.js +57 -19
  286. package/dist/platform/ops/skills.ops.d.ts +5 -1
  287. package/dist/platform/ops/skills.ops.js +129 -11
  288. package/dist/platform/ops/unavailable.d.ts +23 -0
  289. package/dist/platform/ops/unavailable.js +111 -0
  290. package/dist/platform/parity.d.ts +33 -0
  291. package/dist/platform/parity.js +272 -0
  292. package/dist/platform/platform-ops.module.d.ts +32 -0
  293. package/dist/platform/platform-ops.module.js +78 -11
  294. package/dist/platform/route-schemas.d.ts +18 -0
  295. package/dist/platform/route-schemas.js +60 -0
  296. package/dist/roles/worker.module.js +2 -0
  297. package/dist/runtime/context/build.d.ts +2 -0
  298. package/dist/runtime/context/build.js +28 -2
  299. package/dist/runtime/context/compaction.js +10 -1
  300. package/dist/runtime/context/run-context.d.ts +65 -0
  301. package/dist/runtime/context/run-context.js +215 -0
  302. package/dist/runtime/hook-calls.d.ts +8 -1
  303. package/dist/runtime/hook-calls.js +40 -9
  304. package/dist/runtime/model-call.d.ts +8 -3
  305. package/dist/runtime/model-call.js +30 -6
  306. package/dist/runtime/providers.d.ts +146 -32
  307. package/dist/runtime/providers.js +328 -67
  308. package/dist/runtime/run-context.service.d.ts +65 -0
  309. package/dist/runtime/run-context.service.js +220 -0
  310. package/dist/runtime/run-worker.d.ts +6 -1
  311. package/dist/runtime/run-worker.js +35 -10
  312. package/dist/runtime/runtime.module.js +2 -0
  313. package/dist/runtime/subagents/definition.d.ts +15 -15
  314. package/dist/runtime/subagents/definition.js +49 -118
  315. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  316. package/dist/runtime/usage-report-jobs.js +158 -0
  317. package/dist/runtime/usage-report.d.ts +33 -38
  318. package/dist/runtime/usage-report.js +152 -84
  319. package/dist/skills/changes.controller.js +2 -1
  320. package/dist/skills/changes.service.d.ts +1 -1
  321. package/dist/skills/changes.service.js +4 -4
  322. package/dist/skills/invocable.controller.d.ts +1 -1
  323. package/dist/skills/invocable.controller.js +2 -2
  324. package/dist/skills/invoke.d.ts +2 -2
  325. package/dist/skills/invoke.js +8 -1
  326. package/dist/skills/skills.controller.d.ts +4 -13
  327. package/dist/skills/skills.controller.js +8 -24
  328. package/dist/skills/skills.schemas.d.ts +48 -0
  329. package/dist/skills/skills.schemas.js +61 -0
  330. package/dist/skills/skills.service.d.ts +11 -1
  331. package/dist/skills/skills.service.js +37 -14
  332. package/dist/time-zone.d.ts +5 -0
  333. package/dist/time-zone.js +19 -0
  334. package/dist/tools/approvals.controller.js +2 -3
  335. package/dist/tools/approvals.schemas.d.ts +21 -0
  336. package/dist/tools/approvals.schemas.js +15 -0
  337. package/dist/tools/builtin-names.d.ts +10 -8
  338. package/dist/tools/builtin-names.js +16 -11
  339. package/dist/tools/builtins/builtin-tools.d.ts +3 -1
  340. package/dist/tools/builtins/builtin-tools.js +15 -3
  341. package/dist/tools/builtins/current-time.d.ts +26 -0
  342. package/dist/tools/builtins/current-time.js +99 -0
  343. package/dist/tools/builtins/platform.d.ts +19 -2
  344. package/dist/tools/builtins/platform.js +105 -16
  345. package/dist/tools/connectors.controller.d.ts +1 -2
  346. package/dist/tools/connectors.controller.js +1 -4
  347. package/dist/tools/connectors.schemas.d.ts +12 -0
  348. package/dist/tools/connectors.schemas.js +19 -0
  349. package/dist/tools/connectors.service.d.ts +5 -2
  350. package/dist/tools/connectors.service.js +7 -5
  351. package/dist/tools/org-tool-switches.d.ts +16 -2
  352. package/dist/tools/org-tool-switches.js +26 -9
  353. package/dist/tools/pipeline.js +9 -1
  354. package/dist/tools/registry.d.ts +48 -51
  355. package/dist/tools/registry.js +222 -233
  356. package/package.json +3 -3
  357. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  358. package/src/migrations/0090_initial_passwords.sql +27 -0
  359. package/src/migrations/0091_account_time_zone.sql +4 -0
  360. package/src/migrations/0092_tools_default_on.sql +27 -0
  361. package/dist/platform/redact-orgs.d.ts +0 -7
  362. package/dist/platform/redact-orgs.js +0 -52
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import { MARKETPLACE_MAX_MIRRORS } from "../config/schema.js";
3
+ export const MarketplaceUrl = z.string().min(1).max(2000);
4
+ export const MarketplaceForm = z.enum(["http", "git"]);
5
+ export const MarketplaceRef = z.string().min(1).max(256);
6
+ export const MarketplaceAddBody = z.object({
7
+ name: z.string().min(1).max(100),
8
+ url: MarketplaceUrl,
9
+ form: MarketplaceForm.optional(),
10
+ ref: MarketplaceRef.optional(),
11
+ mirrors: z.array(MarketplaceUrl).max(MARKETPLACE_MAX_MIRRORS).optional(),
12
+ token: z.string().min(1).max(4096).optional(),
13
+ });
14
+ export const MarketplaceEntriesQuery = z.object({
15
+ sourceId: z.string().min(1).max(100).optional(),
16
+ q: z.string().max(200).optional(),
17
+ });
18
+ export const MarketplacePatchBody = z
19
+ .object({
20
+ name: z.string().min(1).max(100).optional(),
21
+ url: MarketplaceUrl.optional(),
22
+ form: MarketplaceForm.optional(),
23
+ ref: MarketplaceRef.nullable().optional(),
24
+ mirrors: z.array(MarketplaceUrl).max(MARKETPLACE_MAX_MIRRORS).optional(),
25
+ enabled: z.boolean().optional(),
26
+ token: z.string().min(1).max(4096).nullable().optional(),
27
+ })
28
+ .strict();
29
+ export const MarketplaceImportBody = z.object({ version: z.string().min(1).max(256).optional() });
30
+ /** `:id` of a marketplace as the routes take it (`@Param`). */
31
+ export const MarketplaceIdPathParams = z.object({ id: z.string().min(1) });
32
+ /** `:id` and the entry `:name` of the import route (`@Param`). */
33
+ export const MarketplaceEntryPathParams = MarketplaceIdPathParams.extend({
34
+ name: z.string().min(1),
35
+ });
36
+ export const MARKETPLACE_ROUTES = [
37
+ { route: "GET /api/v1/admin/marketplaces" },
38
+ { route: "POST /api/v1/admin/marketplaces", body: MarketplaceAddBody },
39
+ { route: "GET /api/v1/orgs/:orgId/marketplaces/entries", query: MarketplaceEntriesQuery },
40
+ { route: "GET /api/v1/admin/marketplaces/entries", query: MarketplaceEntriesQuery },
41
+ {
42
+ route: "PATCH /api/v1/admin/marketplaces/:id",
43
+ params: MarketplaceIdPathParams,
44
+ body: MarketplacePatchBody,
45
+ },
46
+ { route: "DELETE /api/v1/admin/marketplaces/:id", params: MarketplaceIdPathParams },
47
+ { route: "POST /api/v1/admin/marketplaces/:id/refresh", params: MarketplaceIdPathParams },
48
+ {
49
+ route: "POST /api/v1/admin/marketplaces/:id/entries/:name/import",
50
+ params: MarketplaceEntryPathParams,
51
+ body: MarketplaceImportBody,
52
+ },
53
+ ];
@@ -181,7 +181,7 @@ export declare function headsToResolve(entries: readonly MarketplaceEntry[], imp
181
181
  /** The host versions (an entry's `minKernel` is judged against them). */
182
182
  export declare const HOST_VERSIONS: {
183
183
  readonly kernel: string;
184
- readonly sdk: "0.1.0-rc.3";
184
+ readonly sdk: "0.1.0-rc.5";
185
185
  };
186
186
  /** Whether this deployment satisfies the entry's `minKernel`. */
187
187
  export declare const entryCompatible: (e: Pick<MarketplaceEntry, "minKernel">) => boolean;
@@ -297,6 +297,20 @@ export declare class MarketplacesService {
297
297
  mirrors?: string[];
298
298
  token?: string;
299
299
  }, opts?: ActorOpts): Promise<MarketplaceView>;
300
+ /**
301
+ * The read-only checks of {@link add}, for the `Platform` tool's precheck (before the card): the
302
+ * name, URL and git fields as `add` checks them (throws `validation_failed`), then the source
303
+ * that has the same URL and ref already, if any (adding a duplicate is allowed; the tool points
304
+ * the agent at the existing source instead).
305
+ */
306
+ checkAdd(input: {
307
+ name: string;
308
+ url: string;
309
+ ref?: string;
310
+ }): Promise<{
311
+ id: string;
312
+ name: string;
313
+ } | null>;
300
314
  private writeAdd;
301
315
  /**
302
316
  * Updates a custom marketplace (audit `marketplace.updated`, listing the changed fields, the
@@ -496,6 +496,25 @@ let MarketplacesService = class MarketplacesService {
496
496
  await this.writeAdd(actor, id, { ...input, name, form, url }, opts);
497
497
  return this.get(id);
498
498
  }
499
+ /**
500
+ * The read-only checks of {@link add}, for the `Platform` tool's precheck (before the card): the
501
+ * name, URL and git fields as `add` checks them (throws `validation_failed`), then the source
502
+ * that has the same URL and ref already, if any (adding a duplicate is allowed; the tool points
503
+ * the agent at the existing source instead).
504
+ */
505
+ async checkAdd(input) {
506
+ this.checkName(input.name);
507
+ const { form, url } = marketplaceForm(input.url);
508
+ this.checkUrls(url, []);
509
+ this.checkGitFields(form, input.ref ?? null, []);
510
+ const same = await this.db
511
+ .selectFrom("marketplaces")
512
+ .select(["id", "name"])
513
+ .where("url", "=", url)
514
+ .where("ref", input.ref === undefined ? "is" : "=", input.ref ?? null)
515
+ .executeTakeFirst();
516
+ return same ?? null;
517
+ }
499
518
  async writeAdd(actor, id, input, opts) {
500
519
  const { name, url, form } = input;
501
520
  const t = this.db;
@@ -639,6 +658,7 @@ let MarketplacesService = class MarketplacesService {
639
658
  ...(set.url !== undefined && { url: set.url }),
640
659
  ...(set.form !== undefined && { form: set.form }),
641
660
  ...(set.ref !== undefined && { ref: set.ref }),
661
+ ...opts.auditDetail,
642
662
  },
643
663
  });
644
664
  }
@@ -667,7 +687,7 @@ let MarketplacesService = class MarketplacesService {
667
687
  ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
668
688
  action: "marketplace.removed",
669
689
  target: id,
670
- detail: { name: row.name, url: row.url },
690
+ detail: { name: row.name, url: row.url, ...opts.auditDetail },
671
691
  });
672
692
  }
673
693
  /**
@@ -1204,6 +1224,7 @@ let MarketplacesService = class MarketplacesService {
1204
1224
  from: cur.last_status,
1205
1225
  to: status,
1206
1226
  ...(lastError !== null && { error: lastError }),
1227
+ ...opts.auditDetail,
1207
1228
  },
1208
1229
  });
1209
1230
  }
@@ -5,40 +5,10 @@ import { type OrgContext } from "../orgs/org.guard.js";
5
5
  import type { ConnectorDetail, ToolIssue } from "../tools/connectors.service.js";
6
6
  import type { MarketplaceImportResult } from "./catalog.service.js";
7
7
  import type { CatalogIcon, OrgCatalogDetail, OrgCatalogItem, OrgInstallResult } from "./catalog-content.js";
8
+ import { CatalogMarketplaceRequestBody, CatalogRequestBody, CatalogRequestsListQuery, OrgPluginInstallBody, OrgPluginSwitchBody } from "./org-catalog.schemas.js";
8
9
  import { OrgCatalogService } from "./org-catalog.service.js";
9
10
  import { PluginInstaller, type PluginInstallView, type UninstallPreview, type UninstallReport } from "./plugin-install.js";
10
11
  import { CatalogRequestsService, type CatalogRequestView } from "./requests.service.js";
11
- declare const RequestBody: z.ZodObject<{
12
- kind: z.ZodEnum<{
13
- access: "access";
14
- enable: "enable";
15
- }>;
16
- note: z.ZodOptional<z.ZodString>;
17
- }, z.core.$strict>;
18
- /** An org admin's request for a marketplace entry not in the catalog yet. */
19
- declare const MarketplaceRequestBody: z.ZodObject<{
20
- marketplaceId: z.ZodString;
21
- name: z.ZodString;
22
- version: z.ZodString;
23
- note: z.ZodOptional<z.ZodString>;
24
- }, z.core.$strict>;
25
- /**
26
- * The org install body: template input, the extension's org config. No version: an org installs the
27
- * platform version (one per deployment, ruling P2-17).
28
- */
29
- declare const InstallBody: z.ZodObject<{
30
- connectors: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
31
- name: z.ZodOptional<z.ZodString>;
32
- slug: z.ZodOptional<z.ZodString>;
33
- endpoint: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
34
- credential: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
35
- client: z.ZodOptional<z.ZodObject<{
36
- clientId: z.ZodString;
37
- clientSecret: z.ZodOptional<z.ZodString>;
38
- }, z.core.$strict>>;
39
- }, z.core.$strict>>>;
40
- extensionConfig: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
41
- }, z.core.$strict>;
42
12
  /** The connectors body (ruling P2-10): the input of missing connectors, by template id, as at install. */
43
13
  declare const ConnectorsBody: z.ZodObject<{
44
14
  inputs: z.ZodObject<{
@@ -70,24 +40,6 @@ declare const TemplateConnectorBody: z.ZodObject<{
70
40
  }, z.core.$strict>>;
71
41
  }, z.core.$strict>;
72
42
  }, z.core.$strict>;
73
- /** The switch body: on (with the install inputs), or off (with the preview's hash to confirm). */
74
- declare const SwitchBody: z.ZodObject<{
75
- enabled: z.ZodBoolean;
76
- inputs: z.ZodOptional<z.ZodObject<{
77
- connectors: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
78
- name: z.ZodOptional<z.ZodString>;
79
- slug: z.ZodOptional<z.ZodString>;
80
- endpoint: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
81
- credential: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
82
- client: z.ZodOptional<z.ZodObject<{
83
- clientId: z.ZodString;
84
- clientSecret: z.ZodOptional<z.ZodString>;
85
- }, z.core.$strict>>;
86
- }, z.core.$strict>>>;
87
- extensionConfig: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
88
- }, z.core.$strict>>;
89
- confirm: z.ZodOptional<z.ZodString>;
90
- }, z.core.$strict>;
91
43
  /**
92
44
  * 条目图标的响应头:图标可能是 SVG(可含脚本),只许网页以 `<img>` 显示;直接打开时 CSP sandbox 禁止脚本与一切外部
93
45
  * 请求,nosniff 防浏览器按内容另行判型。
@@ -97,14 +49,6 @@ declare const DecideBody: z.ZodObject<{
97
49
  approve: z.ZodBoolean;
98
50
  reason: z.ZodOptional<z.ZodString>;
99
51
  }, z.core.$strict>;
100
- declare const AdminListQuery: z.ZodObject<{
101
- status: z.ZodOptional<z.ZodEnum<{
102
- approved: "approved";
103
- cancelled: "cancelled";
104
- pending: "pending";
105
- rejected: "rejected";
106
- }>>;
107
- }, z.core.$strip>;
108
52
  /**
109
53
  * The platform catalog from an organization's view (`/api/v1/orgs/:orgId/...`, human users only):
110
54
  * - `GET catalog` (`catalog.read`, member and up; members do not see disabled items);
@@ -150,23 +94,23 @@ export declare class OrgCatalogController {
150
94
  * A request for an item (spec §5.1): `enable` (members and up, an item that is off) or `access`
151
95
  * (org admins, a `named` item shown to the org) -> 201 `{ request }`.
152
96
  */
153
- request(principal: Principal, org: OrgContext, itemId: string, body: z.infer<typeof RequestBody>): Promise<{
97
+ request(principal: Principal, org: OrgContext, itemId: string, body: z.infer<typeof CatalogRequestBody>): Promise<{
154
98
  request: CatalogRequestView;
155
99
  }>;
156
100
  /**
157
101
  * An org admin asks for a marketplace entry to be imported (deployment setting
158
102
  * `orgMarketplaceBrowse`) -> 201 `{ request }`.
159
103
  */
160
- marketplaceRequest(principal: Principal, org: OrgContext, body: z.infer<typeof MarketplaceRequestBody>): Promise<{
104
+ marketplaceRequest(principal: Principal, org: OrgContext, body: z.infer<typeof CatalogMarketplaceRequestBody>): Promise<{
161
105
  request: CatalogRequestView;
162
106
  }>;
163
- setSwitch(principal: Principal, org: OrgContext, itemId: string, body: z.infer<typeof SwitchBody>): Promise<{
107
+ setSwitch(principal: Principal, org: OrgContext, itemId: string, body: z.infer<typeof OrgPluginSwitchBody>): Promise<{
164
108
  item: OrgCatalogItem;
165
109
  } | {
166
110
  preview: UninstallPreview;
167
111
  confirm: string;
168
112
  }>;
169
- install(principal: Principal, org: OrgContext, itemId: string, body: z.infer<typeof InstallBody>, reply: FastifyReply): Promise<Omit<OrgInstallResult, "status">>;
113
+ install(principal: Principal, org: OrgContext, itemId: string, body: z.infer<typeof OrgPluginInstallBody>, reply: FastifyReply): Promise<Omit<OrgInstallResult, "status">>;
170
114
  /**
171
115
  * Creates the connectors an installed plugin is missing (ruling P2-10: a connector template on
172
116
  * in the org without a connector there, e.g. added by a platform update; the plugin shows
@@ -209,7 +153,7 @@ export declare class OrgCatalogController {
209
153
  export declare class AdminCatalogRequestsController {
210
154
  private readonly requests;
211
155
  constructor(requests: CatalogRequestsService);
212
- list(q: z.infer<typeof AdminListQuery>): Promise<{
156
+ list(q: z.infer<typeof CatalogRequestsListQuery>): Promise<{
213
157
  requests: CatalogRequestView[];
214
158
  }>;
215
159
  decide(principal: Principal, id: string, body: z.infer<typeof DecideBody>): Promise<{
@@ -14,54 +14,14 @@ import { createZodDto } from "../infra/validation/create-zod-dto.js";
14
14
  import { ZBody, ZQuery } from "../infra/validation/zod-params.js";
15
15
  import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
16
16
  import { roleAtLeast } from "../orgs/roles.js";
17
- import { CredentialValue } from "../tools/connectors.controller.js";
17
+ import { CatalogConnectorInput, CatalogMarketplaceRequestBody, CatalogRequestBody, CatalogRequestsListQuery, OrgPluginInstallBody, OrgPluginSwitchBody, } from "./org-catalog.schemas.js";
18
18
  import { OrgCatalogService } from "./org-catalog.service.js";
19
19
  import { PluginInstaller, } from "./plugin-install.js";
20
20
  import { CatalogRequestsService } from "./requests.service.js";
21
- const RequestBody = z
22
- .object({
23
- kind: z.enum(["access", "enable"]),
24
- note: z.string().max(1000).optional(),
25
- })
26
- .strict();
27
- /** An org admin's request for a marketplace entry not in the catalog yet. */
28
- const MarketplaceRequestBody = z
29
- .object({
30
- marketplaceId: z.string().min(1).max(100),
31
- name: z.string().min(1).max(214),
32
- version: z.string().min(1).max(256),
33
- note: z.string().max(1000).optional(),
34
- })
35
- .strict();
36
- const ConnectorInput = z
37
- .object({
38
- name: z.string().trim().min(1).max(80).optional(),
39
- slug: z.string().max(24).optional(),
40
- endpoint: z.record(z.string(), z.unknown()).optional(),
41
- credential: CredentialValue.optional(),
42
- client: z
43
- .object({
44
- clientId: z.string().min(1).max(500),
45
- clientSecret: z.string().min(1).max(4000).optional(),
46
- })
47
- .strict()
48
- .optional(),
49
- })
50
- .strict();
51
- /**
52
- * The org install body: template input, the extension's org config. No version: an org installs the
53
- * platform version (one per deployment, ruling P2-17).
54
- */
55
- const InstallBody = z
56
- .object({
57
- connectors: z.record(z.string(), ConnectorInput).optional(),
58
- extensionConfig: z.record(z.string(), z.unknown()).optional(),
59
- })
60
- .strict();
61
21
  /** The connectors body (ruling P2-10): the input of missing connectors, by template id, as at install. */
62
22
  const ConnectorsBody = z
63
23
  .object({
64
- inputs: z.object({ connectors: z.record(z.string(), ConnectorInput) }).strict(),
24
+ inputs: z.object({ connectors: z.record(z.string(), CatalogConnectorInput) }).strict(),
65
25
  })
66
26
  .strict();
67
27
  /**
@@ -71,18 +31,7 @@ const ConnectorsBody = z
71
31
  const TemplateConnectorBody = z
72
32
  .object({
73
33
  name: z.string().trim().min(1).max(80).optional(),
74
- config: ConnectorInput.omit({ name: true }),
75
- })
76
- .strict();
77
- /** The switch body: on (with the install inputs), or off (with the preview's hash to confirm). */
78
- const SwitchBody = z
79
- .object({
80
- enabled: z.boolean(),
81
- inputs: InstallBody.optional(),
82
- confirm: z
83
- .string()
84
- .regex(/^[0-9a-f]{64}$/)
85
- .optional(),
34
+ config: CatalogConnectorInput.omit({ name: true }),
86
35
  })
87
36
  .strict();
88
37
  /**
@@ -100,24 +49,21 @@ export async function sendCatalogIcon(reply, icon) {
100
49
  const DecideBody = z
101
50
  .object({ approve: z.boolean(), reason: z.string().max(1000).optional() })
102
51
  .strict();
103
- const AdminListQuery = z.object({
104
- status: z.enum(["pending", "approved", "rejected", "cancelled"]).optional(),
105
- });
106
- class CatalogRequestsQuery extends createZodDto(AdminListQuery, "CatalogRequestsQuery") {
52
+ class CatalogRequestsQuery extends createZodDto(CatalogRequestsListQuery, "CatalogRequestsQuery") {
107
53
  }
108
54
  class CatalogDecideBody extends createZodDto(DecideBody, "CatalogDecideBody") {
109
55
  }
110
- class OrgPluginInstallBody extends createZodDto(InstallBody, "OrgPluginInstallBody") {
56
+ class OrgPluginInstallBodyDto extends createZodDto(OrgPluginInstallBody, "OrgPluginInstallBody") {
111
57
  }
112
58
  class OrgPluginConnectorsBody extends createZodDto(ConnectorsBody, "OrgPluginConnectorsBody") {
113
59
  }
114
- class OrgPluginSwitchBody extends createZodDto(SwitchBody, "OrgPluginSwitchBody") {
60
+ class OrgPluginSwitchBodyDto extends createZodDto(OrgPluginSwitchBody, "OrgPluginSwitchBody") {
115
61
  }
116
62
  class OrgTemplateConnectorBody extends createZodDto(TemplateConnectorBody, "OrgTemplateConnectorBody") {
117
63
  }
118
- class CatalogRequestBody extends createZodDto(RequestBody, "CatalogRequestBody") {
64
+ class CatalogRequestBodyDto extends createZodDto(CatalogRequestBody, "CatalogRequestBody") {
119
65
  }
120
- class CatalogMarketplaceRequestBody extends createZodDto(MarketplaceRequestBody, "CatalogMarketplaceRequestBody") {
66
+ class CatalogMarketplaceRequestBodyDto extends createZodDto(CatalogMarketplaceRequestBody, "CatalogMarketplaceRequestBody") {
121
67
  }
122
68
  /**
123
69
  * The platform catalog from an organization's view (`/api/v1/orgs/:orgId/...`, human users only):
@@ -289,7 +235,7 @@ __decorate([
289
235
  __param(0, CurrentPrincipal()),
290
236
  __param(1, CurrentOrg()),
291
237
  __param(2, Param("itemId")),
292
- __param(3, ZBody(CatalogRequestBody))
238
+ __param(3, ZBody(CatalogRequestBodyDto))
293
239
  ], OrgCatalogController.prototype, "request", null);
294
240
  __decorate([
295
241
  Post("marketplace-requests"),
@@ -297,7 +243,7 @@ __decorate([
297
243
  OrgAction("catalog.decide"),
298
244
  __param(0, CurrentPrincipal()),
299
245
  __param(1, CurrentOrg()),
300
- __param(2, ZBody(CatalogMarketplaceRequestBody))
246
+ __param(2, ZBody(CatalogMarketplaceRequestBodyDto))
301
247
  ], OrgCatalogController.prototype, "marketplaceRequest", null);
302
248
  __decorate([
303
249
  Put("catalog/:itemId/switch"),
@@ -305,7 +251,7 @@ __decorate([
305
251
  __param(0, CurrentPrincipal()),
306
252
  __param(1, CurrentOrg()),
307
253
  __param(2, Param("itemId")),
308
- __param(3, ZBody(OrgPluginSwitchBody))
254
+ __param(3, ZBody(OrgPluginSwitchBodyDto))
309
255
  ], OrgCatalogController.prototype, "setSwitch", null);
310
256
  __decorate([
311
257
  Post("catalog/:itemId/install"),
@@ -313,7 +259,7 @@ __decorate([
313
259
  __param(0, CurrentPrincipal()),
314
260
  __param(1, CurrentOrg()),
315
261
  __param(2, Param("itemId")),
316
- __param(3, ZBody(OrgPluginInstallBody)),
262
+ __param(3, ZBody(OrgPluginInstallBodyDto)),
317
263
  __param(4, Res({ passthrough: true }))
318
264
  ], OrgCatalogController.prototype, "install", null);
319
265
  __decorate([
@@ -0,0 +1,79 @@
1
+ import { z } from "zod";
2
+ import type { RouteSchemas } from "../platform/route-schemas.js";
3
+ export declare const CatalogRequestBody: z.ZodObject<{
4
+ kind: z.ZodEnum<{
5
+ access: "access";
6
+ enable: "enable";
7
+ }>;
8
+ note: z.ZodOptional<z.ZodString>;
9
+ }, z.core.$strict>;
10
+ /** An org admin's request for a marketplace entry not in the catalog yet. */
11
+ export declare const CatalogMarketplaceRequestBody: z.ZodObject<{
12
+ marketplaceId: z.ZodString;
13
+ name: z.ZodString;
14
+ version: z.ZodString;
15
+ note: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strict>;
17
+ export declare const CatalogConnectorInput: z.ZodObject<{
18
+ name: z.ZodOptional<z.ZodString>;
19
+ slug: z.ZodOptional<z.ZodString>;
20
+ endpoint: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
21
+ credential: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
22
+ client: z.ZodOptional<z.ZodObject<{
23
+ clientId: z.ZodString;
24
+ clientSecret: z.ZodOptional<z.ZodString>;
25
+ }, z.core.$strict>>;
26
+ }, z.core.$strict>;
27
+ /**
28
+ * The org install body: template input, the extension's org config. No version: an org installs the
29
+ * platform version (one per deployment, ruling P2-17).
30
+ */
31
+ export declare const OrgPluginInstallBody: z.ZodObject<{
32
+ connectors: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
33
+ name: z.ZodOptional<z.ZodString>;
34
+ slug: z.ZodOptional<z.ZodString>;
35
+ endpoint: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
36
+ credential: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
37
+ client: z.ZodOptional<z.ZodObject<{
38
+ clientId: z.ZodString;
39
+ clientSecret: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strict>>;
41
+ }, z.core.$strict>>>;
42
+ extensionConfig: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
43
+ }, z.core.$strict>;
44
+ /** The switch body: on (with the install inputs), or off (with the preview's hash to confirm). */
45
+ export declare const OrgPluginSwitchBody: z.ZodObject<{
46
+ enabled: z.ZodBoolean;
47
+ inputs: z.ZodOptional<z.ZodObject<{
48
+ connectors: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
49
+ name: z.ZodOptional<z.ZodString>;
50
+ slug: z.ZodOptional<z.ZodString>;
51
+ endpoint: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
52
+ credential: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
53
+ client: z.ZodOptional<z.ZodObject<{
54
+ clientId: z.ZodString;
55
+ clientSecret: z.ZodOptional<z.ZodString>;
56
+ }, z.core.$strict>>;
57
+ }, z.core.$strict>>>;
58
+ extensionConfig: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
59
+ }, z.core.$strict>>;
60
+ confirm: z.ZodOptional<z.ZodString>;
61
+ }, z.core.$strict>;
62
+ /** `:itemId` as the routes take it (`@Param`). */
63
+ export declare const CatalogItemPathParams: z.ZodObject<{
64
+ itemId: z.ZodString;
65
+ }, z.core.$strip>;
66
+ /** `:installId` as the uninstall route takes it (`@Param`). */
67
+ export declare const PluginInstallPathParams: z.ZodObject<{
68
+ installId: z.ZodString;
69
+ }, z.core.$strip>;
70
+ /** The super admin's request list filter. */
71
+ export declare const CatalogRequestsListQuery: z.ZodObject<{
72
+ status: z.ZodOptional<z.ZodEnum<{
73
+ approved: "approved";
74
+ cancelled: "cancelled";
75
+ pending: "pending";
76
+ rejected: "rejected";
77
+ }>>;
78
+ }, z.core.$strip>;
79
+ export declare const ORG_CATALOG_ROUTES: readonly RouteSchemas[];
@@ -0,0 +1,82 @@
1
+ import { z } from "zod";
2
+ import { CredentialValue } from "../tools/connectors.schemas.js";
3
+ export const CatalogRequestBody = z
4
+ .object({
5
+ kind: z.enum(["access", "enable"]),
6
+ note: z.string().max(1000).optional(),
7
+ })
8
+ .strict();
9
+ /** An org admin's request for a marketplace entry not in the catalog yet. */
10
+ export const CatalogMarketplaceRequestBody = z
11
+ .object({
12
+ marketplaceId: z.string().min(1).max(100),
13
+ name: z.string().min(1).max(214),
14
+ version: z.string().min(1).max(256),
15
+ note: z.string().max(1000).optional(),
16
+ })
17
+ .strict();
18
+ export const CatalogConnectorInput = z
19
+ .object({
20
+ name: z.string().trim().min(1).max(80).optional(),
21
+ slug: z.string().max(24).optional(),
22
+ endpoint: z.record(z.string(), z.unknown()).optional(),
23
+ credential: CredentialValue.optional(),
24
+ client: z
25
+ .object({
26
+ clientId: z.string().min(1).max(500),
27
+ clientSecret: z.string().min(1).max(4000).optional(),
28
+ })
29
+ .strict()
30
+ .optional(),
31
+ })
32
+ .strict();
33
+ /**
34
+ * The org install body: template input, the extension's org config. No version: an org installs the
35
+ * platform version (one per deployment, ruling P2-17).
36
+ */
37
+ export const OrgPluginInstallBody = z
38
+ .object({
39
+ connectors: z.record(z.string(), CatalogConnectorInput).optional(),
40
+ extensionConfig: z.record(z.string(), z.unknown()).optional(),
41
+ })
42
+ .strict();
43
+ /** The switch body: on (with the install inputs), or off (with the preview's hash to confirm). */
44
+ export const OrgPluginSwitchBody = z
45
+ .object({
46
+ enabled: z.boolean(),
47
+ inputs: OrgPluginInstallBody.optional(),
48
+ confirm: z
49
+ .string()
50
+ .regex(/^[0-9a-f]{64}$/)
51
+ .optional(),
52
+ })
53
+ .strict();
54
+ /** `:itemId` as the routes take it (`@Param`). */
55
+ export const CatalogItemPathParams = z.object({ itemId: z.string().min(1) });
56
+ /** `:installId` as the uninstall route takes it (`@Param`). */
57
+ export const PluginInstallPathParams = z.object({ installId: z.string().min(1) });
58
+ /** The super admin's request list filter. */
59
+ export const CatalogRequestsListQuery = z.object({
60
+ status: z.enum(["pending", "approved", "rejected", "cancelled"]).optional(),
61
+ });
62
+ export const ORG_CATALOG_ROUTES = [
63
+ { route: "GET /api/v1/orgs/:orgId/catalog" },
64
+ { route: "GET /api/v1/orgs/:orgId/catalog/:itemId", params: CatalogItemPathParams },
65
+ {
66
+ route: "POST /api/v1/orgs/:orgId/catalog/:itemId/requests",
67
+ params: CatalogItemPathParams,
68
+ body: CatalogRequestBody,
69
+ },
70
+ { route: "POST /api/v1/orgs/:orgId/marketplace-requests", body: CatalogMarketplaceRequestBody },
71
+ {
72
+ route: "PUT /api/v1/orgs/:orgId/catalog/:itemId/switch",
73
+ params: CatalogItemPathParams,
74
+ body: OrgPluginSwitchBody,
75
+ },
76
+ { route: "GET /api/v1/orgs/:orgId/plugin-installs" },
77
+ {
78
+ route: "DELETE /api/v1/orgs/:orgId/plugin-installs/:installId",
79
+ params: PluginInstallPathParams,
80
+ },
81
+ { route: "GET /api/v1/admin/catalog/requests", query: CatalogRequestsListQuery },
82
+ ];
@@ -1,4 +1,5 @@
1
1
  import { ExtensionRegistry } from "../extensions/registry.js";
2
+ import { ExtensionAvailability } from "../extensions/unavailable.js";
2
3
  import { KernelDb } from "../infra/database/kernel-db.js";
3
4
  import { TransactionHost } from "../infra/database/transaction-host.js";
4
5
  import type { KernelLogger } from "../log.js";
@@ -35,9 +36,13 @@ export declare class OrgCatalogService {
35
36
  private readonly pluginInstaller;
36
37
  private readonly log;
37
38
  readonly txHost: TransactionHost;
39
+ /** Why a plugin's extension cannot run (the `unavailable` state's reason). */
40
+ private readonly availability;
38
41
  constructor(kdb: KernelDb,
39
42
  /** The org row lock (orgs/org-lock.ts): joins the caller's transaction. */
40
- orgLock: OrgLock, storage: StorageService, registry: ExtensionRegistry, pluginInstaller: PluginInstaller, log: KernelLogger, txHost: TransactionHost);
43
+ orgLock: OrgLock, storage: StorageService, registry: ExtensionRegistry, pluginInstaller: PluginInstaller, log: KernelLogger, txHost: TransactionHost,
44
+ /** Why a plugin's extension cannot run (the `unavailable` state's reason). */
45
+ availability: ExtensionAvailability);
41
46
  /** The kernel-schema handle of the current context (the transaction, else the pool). */
42
47
  private get db();
43
48
  /**
@@ -99,7 +104,9 @@ export declare class OrgCatalogService {
99
104
  * install writes the switch row false in the uninstall's transaction (an `all` item then stays
100
105
  * off in the org); removing a failed or stale one writes none.
101
106
  */
102
- uninstall(orgId: string, actor: string, installId: string, actorTokenId?: string): Promise<UninstallReport>;
107
+ uninstall(orgId: string, actor: string, installId: string, actorTokenId?: string,
108
+ /** Merged into the audit detail (a write made through the Platform tool). */
109
+ auditDetail?: Record<string, unknown>): Promise<UninstallReport>;
103
110
  private itemOf;
104
111
  /**
105
112
  * Writes the org's switch row of the item under the org row lock. The item row is locked FOR