@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.11
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.
- package/bootstrap.json +85 -5
- package/dist/admin/admin.controller.d.ts +52 -71
- package/dist/admin/admin.controller.js +117 -63
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/admin.schemas.d.ts +60 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +47 -16
- package/dist/admin/extensions.controller.js +94 -23
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +9 -9
- package/dist/admin/setup.controller.js +28 -26
- package/dist/admin/setup.service.d.ts +20 -28
- package/dist/admin/setup.service.js +65 -65
- package/dist/agents/agent-lookup.d.ts +72 -0
- package/dist/agents/agent-lookup.js +208 -0
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +54 -169
- package/dist/agents/agents.controller.js +172 -37
- package/dist/agents/agents.module.d.ts +10 -0
- package/dist/agents/agents.module.js +71 -0
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +104 -76
- package/dist/agents/agents.service.js +509 -383
- package/dist/agents/definition.d.ts +133 -21
- package/dist/agents/definition.js +361 -41
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +868 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +114 -0
- package/dist/agents/profile.js +55 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +78 -6
- package/dist/agents/templates.controller.js +154 -8
- package/dist/agents/templates.d.ts +132 -30
- package/dist/agents/templates.js +500 -46
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +80 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +216 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +102 -52
- package/dist/catalog/admin-catalog.controller.js +222 -67
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +264 -0
- package/dist/catalog/catalog-content.js +430 -0
- package/dist/catalog/catalog-files.d.ts +41 -0
- package/dist/catalog/catalog-files.js +86 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +290 -0
- package/dist/catalog/catalog-items.js +677 -0
- package/dist/catalog/catalog-scope.service.d.ts +286 -0
- package/dist/catalog/catalog-scope.service.js +1196 -0
- package/dist/catalog/catalog.module.d.ts +12 -0
- package/dist/catalog/catalog.module.js +81 -0
- package/dist/catalog/catalog.service.d.ts +144 -207
- package/dist/catalog/catalog.service.js +258 -528
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/claude/translate.js +3 -0
- package/dist/catalog/cli.d.ts +14 -3
- package/dist/catalog/cli.js +39 -32
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +90 -0
- package/dist/catalog/component-scope.controller.js +234 -0
- package/dist/catalog/component-scope.schemas.d.ts +118 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +366 -0
- package/dist/catalog/component-scope.service.js +1115 -0
- package/dist/catalog/component-state.d.ts +197 -0
- package/dist/catalog/component-state.js +473 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- package/dist/catalog/job-ids.d.ts +45 -0
- package/dist/catalog/job-ids.js +40 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +53 -44
- package/dist/catalog/marketplaces.controller.js +146 -51
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +136 -26
- package/dist/catalog/marketplaces.service.js +663 -281
- package/dist/catalog/org-catalog.controller.d.ts +115 -63
- package/dist/catalog/org-catalog.controller.js +207 -100
- package/dist/catalog/org-catalog.schemas.d.ts +88 -0
- package/dist/catalog/org-catalog.schemas.js +93 -0
- package/dist/catalog/org-catalog.service.d.ts +89 -216
- package/dist/catalog/org-catalog.service.js +434 -472
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +113 -0
- package/dist/catalog/org-extension.controller.js +271 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +808 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +243 -0
- package/dist/catalog/platform-components.js +872 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +583 -0
- package/dist/catalog/plugin-import.d.ts +293 -71
- package/dist/catalog/plugin-import.js +1039 -281
- package/dist/catalog/plugin-install.d.ts +271 -66
- package/dist/catalog/plugin-install.js +1198 -344
- package/dist/catalog/plugin-package.d.ts +41 -4
- package/dist/catalog/plugin-package.js +140 -7
- package/dist/catalog/plugin-upgrade.d.ts +312 -188
- package/dist/catalog/plugin-upgrade.js +1371 -1065
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +205 -117
- package/dist/catalog/requests.service.js +612 -369
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +119 -0
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +11 -4
- package/dist/channels/cards.d.ts +33 -11
- package/dist/channels/cards.js +96 -24
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +130 -0
- package/dist/channels/channels.schemas.d.ts +37 -0
- package/dist/channels/channels.schemas.js +38 -0
- package/dist/channels/connections.controller.d.ts +44 -37
- package/dist/channels/connections.controller.js +83 -38
- package/dist/channels/connections.service.d.ts +101 -30
- package/dist/channels/connections.service.js +380 -147
- package/dist/channels/inbound.d.ts +44 -38
- package/dist/channels/inbound.js +190 -44
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +71 -80
- package/dist/channels/outbound.js +219 -202
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +34 -8
- package/dist/channels/threads.js +79 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/docs.js +5 -1
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +36 -2
- package/dist/config/schema.js +226 -25
- package/dist/conversations/access.d.ts +31 -0
- package/dist/conversations/access.js +110 -0
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +60 -22
- package/dist/conversations/attachments.service.js +249 -51
- package/dist/conversations/conversations.controller.d.ts +86 -50
- package/dist/conversations/conversations.controller.js +184 -103
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +72 -0
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +166 -49
- package/dist/conversations/conversations.service.js +383 -179
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +64 -27
- package/dist/conversations/event-log.js +167 -31
- package/dist/conversations/events.d.ts +252 -9
- package/dist/conversations/events.js +243 -32
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +53 -58
- package/dist/conversations/queue.js +37 -293
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +350 -0
- package/dist/conversations/titles.d.ts +83 -27
- package/dist/conversations/titles.js +195 -71
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +26 -1
- package/dist/ctx/create-ctx.js +45 -16
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +589 -27
- package/dist/db/pool.d.ts +10 -0
- package/dist/db/pool.js +4 -0
- package/dist/devices/device-auth.controller.d.ts +42 -0
- package/dist/devices/device-auth.controller.js +116 -0
- package/dist/devices/device-auth.d.ts +119 -0
- package/dist/devices/device-auth.js +403 -0
- package/dist/devices/device-auth.module.d.ts +7 -0
- package/dist/devices/device-auth.module.js +25 -0
- package/dist/devices/device-gateway.d.ts +128 -0
- package/dist/devices/device-gateway.js +530 -0
- package/dist/devices/device-provider.d.ts +89 -0
- package/dist/devices/device-provider.js +151 -0
- package/dist/devices/device-routes.d.ts +36 -0
- package/dist/devices/device-routes.js +90 -0
- package/dist/devices/devices.module.d.ts +16 -0
- package/dist/devices/devices.module.js +44 -0
- package/dist/devices/dto.d.ts +66 -0
- package/dist/devices/dto.js +44 -0
- package/dist/devices/keys.d.ts +25 -0
- package/dist/devices/keys.js +25 -0
- package/dist/devices/machines.d.ts +118 -0
- package/dist/devices/machines.js +366 -0
- package/dist/devices/relay.d.ts +100 -0
- package/dist/devices/relay.js +373 -0
- package/dist/devices/targets.d.ts +28 -0
- package/dist/devices/targets.js +73 -0
- package/dist/environments/access.d.ts +66 -0
- package/dist/environments/access.js +113 -0
- package/dist/environments/conversation-environments.d.ts +75 -0
- package/dist/environments/conversation-environments.js +231 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +36 -0
- package/dist/environments/environments.controller.js +124 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +31 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +251 -0
- package/dist/environments/environments.service.js +791 -0
- package/dist/environments/label.d.ts +11 -0
- package/dist/environments/label.js +25 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +160 -2
- package/dist/errors.js +160 -2
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +75 -10
- package/dist/evals/run-replay.js +218 -94
- package/dist/evals/runs.controller.d.ts +3 -58
- package/dist/evals/runs.controller.js +18 -50
- package/dist/evals/runs.service.d.ts +31 -52
- package/dist/evals/runs.service.js +281 -255
- package/dist/evals/sets.controller.d.ts +3 -29
- package/dist/evals/sets.controller.js +18 -39
- package/dist/evals/sets.service.d.ts +29 -13
- package/dist/evals/sets.service.js +262 -202
- package/dist/evals/snapshot.d.ts +5 -4
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +6 -8
- package/dist/evals/step-replay.js +17 -10
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +13 -7
- package/dist/evals/trajectory.service.js +56 -21
- package/dist/evals/worker.d.ts +48 -31
- package/dist/evals/worker.js +229 -124
- package/dist/extensions/admin-ops.d.ts +133 -41
- package/dist/extensions/admin-ops.js +378 -172
- package/dist/extensions/admin-view.d.ts +82 -32
- package/dist/extensions/admin-view.js +284 -71
- package/dist/extensions/approvals.d.ts +24 -10
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +112 -45
- package/dist/extensions/bootstrap.d.ts +99 -36
- package/dist/extensions/bootstrap.js +290 -134
- package/dist/extensions/cli.d.ts +32 -10
- package/dist/extensions/cli.js +52 -98
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +19 -0
- package/dist/extensions/config-issues.js +48 -0
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +55 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +146 -70
- package/dist/extensions/deployment-config.js +439 -246
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +96 -0
- package/dist/extensions/hooks.d.ts +40 -6
- package/dist/extensions/hooks.js +83 -17
- package/dist/extensions/host.d.ts +161 -80
- package/dist/extensions/host.js +505 -213
- package/dist/extensions/installs.d.ts +73 -19
- package/dist/extensions/installs.js +174 -37
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +45 -0
- package/dist/extensions/locks.js +112 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.d.ts +141 -49
- package/dist/extensions/org-config.js +471 -243
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +59 -6
- package/dist/extensions/permission-view.js +7 -5
- package/dist/extensions/plugin-guides.d.ts +129 -0
- package/dist/extensions/plugin-guides.js +283 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +91 -4
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +19 -10
- package/dist/extensions/sources.js +34 -13
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +19 -12
- package/dist/files/previewers.d.ts +21 -19
- package/dist/files/previewers.js +114 -38
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +93 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +46 -65
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +7 -3
- package/dist/http/gateway-routes.js +16 -0
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +137 -38
- package/dist/identity/accounts.js +386 -186
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +9 -5
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +40 -30
- package/dist/identity/auth.guard.d.ts +16 -8
- package/dist/identity/auth.guard.js +41 -13
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +59 -0
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +32 -15
- package/dist/identity/me.controller.js +80 -33
- package/dist/identity/me.schemas.d.ts +24 -0
- package/dist/identity/me.schemas.js +25 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +24 -10
- package/dist/identity/sessions.js +119 -42
- package/dist/identity/settings.d.ts +69 -23
- package/dist/identity/settings.js +201 -72
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/identity/super-admin.d.ts +20 -0
- package/dist/identity/super-admin.js +81 -0
- package/dist/inbox/inbox.module.d.ts +6 -0
- package/dist/inbox/inbox.module.js +26 -0
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +68 -11
- package/dist/inbox/inbox.service.js +104 -13
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +22 -13
- package/dist/index.js +16 -7
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +173 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +157 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +91 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +121 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +90 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +18 -0
- package/dist/infra/logging/logging.module.js +52 -0
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +13 -0
- package/dist/infra/queue/redis-connection.js +25 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +91 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +36 -0
- package/dist/infra/throttler/named-throttlers.js +157 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +20 -0
- package/dist/infra/tokens.js +20 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +145 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +465 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +7 -0
- package/dist/models/models.module.js +36 -0
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +13 -5
- package/dist/models/prices.js +69 -39
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +16 -11
- package/dist/models/purposes.d.ts +103 -23
- package/dist/models/purposes.js +208 -77
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +74 -35
- package/dist/orgs/directory-sync.js +243 -132
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +61 -60
- package/dist/orgs/offboarding.js +206 -95
- package/dist/orgs/org-lock.d.ts +33 -19
- package/dist/orgs/org-lock.js +94 -35
- package/dist/orgs/org.guard.d.ts +11 -1
- package/dist/orgs/org.guard.js +45 -34
- package/dist/orgs/orgs.controller.d.ts +13 -16
- package/dist/orgs/orgs.controller.js +29 -20
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +71 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +47 -21
- package/dist/orgs/orgs.service.js +166 -91
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +2 -2
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +76 -14
- package/dist/orgs/settings.service.js +140 -51
- package/dist/overrides.d.ts +63 -0
- package/dist/overrides.js +34 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +683 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +94 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin.ops.d.ts +38 -0
- package/dist/platform/ops/admin.ops.js +407 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +717 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +599 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +854 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +188 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +378 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +18 -0
- package/dist/platform/ops/org-settings.ops.js +127 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +296 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +30 -0
- package/dist/platform/ops/platform.ops.js +231 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +216 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/themes.ops.d.ts +14 -0
- package/dist/platform/ops/themes.ops.js +47 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +40 -0
- package/dist/platform/platform-ops.module.js +127 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +66 -0
- package/dist/roles/gateway-role.d.ts +54 -0
- package/dist/roles/gateway-role.js +118 -0
- package/dist/roles/gateway.module.d.ts +9 -0
- package/dist/roles/gateway.module.js +31 -0
- package/dist/roles/worker-role.d.ts +65 -0
- package/dist/roles/worker-role.js +151 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +106 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/context/build.d.ts +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/environment-paths.d.ts +40 -0
- package/dist/runtime/context/environment-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +11 -4
- package/dist/runtime/hook-calls.js +41 -13
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +37 -18
- package/dist/runtime/loop.d.ts +42 -6
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +50 -74
- package/dist/runtime/maintenance.js +166 -137
- package/dist/runtime/model-call.d.ts +61 -15
- package/dist/runtime/model-call.js +128 -84
- package/dist/runtime/providers.d.ts +158 -27
- package/dist/runtime/providers.js +373 -63
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -0
- package/dist/runtime/run-control.d.ts +43 -0
- package/dist/runtime/run-control.js +89 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-finish.d.ts +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +46 -0
- package/dist/runtime/run-jobs.js +91 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +90 -58
- package/dist/runtime/run-queue.js +566 -297
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +134 -77
- package/dist/runtime/run-worker.js +412 -237
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +122 -0
- package/dist/runtime/step-log.d.ts +51 -0
- package/dist/runtime/step-log.js +111 -0
- package/dist/runtime/stream.controller.d.ts +28 -9
- package/dist/runtime/stream.controller.js +72 -13
- package/dist/runtime/stream.d.ts +27 -6
- package/dist/runtime/stream.js +102 -7
- package/dist/runtime/subagents/child.d.ts +58 -51
- package/dist/runtime/subagents/child.js +105 -86
- package/dist/runtime/subagents/definition.d.ts +32 -28
- package/dist/runtime/subagents/definition.js +89 -143
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +197 -27
- package/dist/runtime/subagents/dispatch.js +336 -270
- package/dist/runtime/subagents/limits.d.ts +32 -8
- package/dist/runtime/subagents/limits.js +44 -8
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +10 -8
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +27 -10
- package/dist/runtime/subagents/roster.js +49 -13
- package/dist/runtime/subagents/skill-fork.d.ts +10 -10
- package/dist/runtime/subagents/skill-fork.js +23 -8
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +43 -0
- package/dist/runtime/subagents/subagents.service.js +106 -0
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +121 -83
- package/dist/runtime/usage-report.js +355 -181
- package/dist/runtime/waits.d.ts +258 -81
- package/dist/runtime/waits.js +800 -263
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +68 -0
- package/dist/sandbox/jobs.js +150 -0
- package/dist/sandbox/leases.d.ts +73 -82
- package/dist/sandbox/leases.js +162 -346
- package/dist/sandbox/providers.d.ts +46 -0
- package/dist/sandbox/providers.js +83 -0
- package/dist/sandbox/sandbox.module.d.ts +9 -0
- package/dist/sandbox/sandbox.module.js +36 -0
- package/dist/sandbox/sandbox.service.d.ts +359 -151
- package/dist/sandbox/sandbox.service.js +950 -435
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/skills/catalog.d.ts +40 -26
- package/dist/skills/catalog.js +120 -99
- package/dist/skills/changes.controller.d.ts +11 -4
- package/dist/skills/changes.controller.js +34 -9
- package/dist/skills/changes.service.d.ts +31 -21
- package/dist/skills/changes.service.js +426 -368
- package/dist/skills/invocable.controller.d.ts +2 -2
- package/dist/skills/invocable.controller.js +10 -7
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +19 -18
- package/dist/skills/invoke.js +68 -24
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +33 -7
- package/dist/skills/skills.controller.js +79 -12
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +39 -0
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +151 -44
- package/dist/skills/skills.service.js +636 -204
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/themes/render-css.d.ts +12 -0
- package/dist/themes/render-css.js +132 -0
- package/dist/themes/theme-delivery.service.d.ts +34 -0
- package/dist/themes/theme-delivery.service.js +111 -0
- package/dist/themes/theme-state.d.ts +95 -0
- package/dist/themes/theme-state.js +203 -0
- package/dist/themes/theme-usage.d.ts +61 -0
- package/dist/themes/theme-usage.js +98 -0
- package/dist/themes/themes-public.controller.d.ts +28 -0
- package/dist/themes/themes-public.controller.js +92 -0
- package/dist/themes/themes.controller.d.ts +13 -0
- package/dist/themes/themes.controller.js +38 -0
- package/dist/themes/themes.module.d.ts +3 -0
- package/dist/themes/themes.module.js +21 -0
- package/dist/themes/themes.schemas.d.ts +3 -0
- package/dist/themes/themes.schemas.js +2 -0
- package/dist/themes/themes.service.d.ts +50 -0
- package/dist/themes/themes.service.js +99 -0
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +14 -11
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +53 -27
- package/dist/tools/approvals.service.js +365 -260
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +109 -0
- package/dist/tools/builtin-names.js +173 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +41 -0
- package/dist/tools/builtins/builtin-tools.js +151 -0
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -0
- package/dist/tools/builtins/read-tool-output.d.ts +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +293 -41
- package/dist/tools/builtins/sandbox/common.d.ts +137 -37
- package/dist/tools/builtins/sandbox/common.js +222 -62
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +21 -18
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +65 -51
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +19 -14
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +155 -36
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +30 -20
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +52 -45
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +32 -21
- package/dist/tools/builtins/skill-load.js +125 -74
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +12 -12
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +16 -3
- package/dist/tools/connectors.controller.js +34 -14
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +80 -18
- package/dist/tools/connectors.service.js +529 -358
- package/dist/tools/credentials.d.ts +20 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +73 -13
- package/dist/tools/info.js +151 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +45 -10
- package/dist/tools/oauth/tokens.js +70 -24
- package/dist/tools/org-tool-switches.d.ts +88 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +108 -80
- package/dist/tools/pipeline.js +396 -409
- package/dist/tools/policy.d.ts +4 -17
- package/dist/tools/policy.js +49 -35
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +215 -84
- package/dist/tools/registry.js +382 -264
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +113 -0
- package/dist/tools/validate.js +1 -1
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +10 -57
- package/dist/ui/views.js +58 -46
- package/package.json +13 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/src/migrations/0102_themes.sql +64 -0
- package/src/migrations/0103_ui_theme_setting.sql +7 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -59
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -21
- package/dist/conversations/sandbox-status.js +0 -24
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -59
- package/dist/http/gateway.module.js +0 -13
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/enterprise-admin.d.ts +0 -14
- package/dist/identity/enterprise-admin.js +0 -27
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
|
@@ -1,17 +1,35 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
1
10
|
import { isSafePackagePath, marketplaceEntryVersion, } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
12
|
import { sql } from "kysely";
|
|
3
13
|
import { ApiError } from "../errors.js";
|
|
4
|
-
import {
|
|
14
|
+
import { ExtensionAdmin } from "../extensions/admin-view.js";
|
|
15
|
+
import { ExtensionInstalls } from "../extensions/installs.js";
|
|
16
|
+
import { PluginInstallLock } from "../extensions/locks.js";
|
|
5
17
|
import { audit } from "../identity/audit.js";
|
|
6
|
-
import {
|
|
18
|
+
import { SuperAdminLock } from "../identity/super-admin.js";
|
|
19
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
20
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
21
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
22
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
7
23
|
import { sameRepository } from "../packages/provenance.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
24
|
+
import { assertNotPlatformDefault } from "../themes/theme-usage.js";
|
|
25
|
+
import { countInstalls, itemConfirmations, itemScopeFacts, itemView, marketplaceLatest, versionUsable, } from "./catalog-items.js";
|
|
26
|
+
import { expandGitUrl, GitSourceError, gitErrorDetails, normalGitPath, readGitTreeAndOids, resolveGitCommit, } from "./git-source.js";
|
|
27
|
+
import { fetchMarketplaceArchive, marketplaceNetPolicy, marketplaceUrlProblem, } from "./marketplace-fetch.js";
|
|
28
|
+
import { assertEntryNotDeprecated, entryCompatible, entrySourceHost, HOST_VERSIONS, hostAllowed, loadMarketplaceEntry, MarketplacesService, pluginNameFrom, } from "./marketplaces.service.js";
|
|
29
|
+
import { releaseExtensionClaim } from "./ownership.js";
|
|
30
|
+
import { PluginImport } from "./plugin-import.js";
|
|
31
|
+
import { cancelPendingRequests } from "./request-rules.js";
|
|
32
|
+
import { newestFirst } from "./versions.js";
|
|
15
33
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
16
34
|
const notFound = () => new ApiError("catalog.item_not_found", "Catalog item not found");
|
|
17
35
|
/** An archive URL as recorded (origin + path): a query string or fragment may carry a token. */
|
|
@@ -58,33 +76,66 @@ function gitSource(loc, read, pinned) {
|
|
|
58
76
|
ref: `${u.origin}${u.pathname}@${commit}${path === "." ? "" : `:${path}`}`,
|
|
59
77
|
};
|
|
60
78
|
}
|
|
61
|
-
/**
|
|
62
|
-
* The object storage prefix of one import (relative to `deployment/`):
|
|
63
|
-
* `directory/<itemId>/<version>/<importId>/`. Each import gets a new `importId`, so the losing one of
|
|
64
|
-
* two concurrent imports of the same version never overwrites the committed version's files; reads
|
|
65
|
-
* always go through the `object_prefix` stored on the version row. Build metadata's `+` is written
|
|
66
|
-
* as `_` (a `+` in a key can turn into a space through URL query encoding).
|
|
67
|
-
*/
|
|
68
|
-
export const catalogObjectPrefix = (itemId, version, importId) => `directory/${itemId}/${version.replace(/\+/g, "_")}/${importId}/`;
|
|
69
79
|
/** Default / largest page size of the list. */
|
|
70
80
|
export const CATALOG_LIST_DEFAULT_LIMIT = 200;
|
|
71
81
|
export const CATALOG_LIST_MAX_LIMIT = 1000;
|
|
72
|
-
const PUT_CONCURRENCY = 8;
|
|
73
82
|
/**
|
|
74
|
-
*
|
|
83
|
+
* Platform catalog items (D9 / C21 / C22, `/api/v1/admin/catalog/*`, super admins only). One
|
|
75
84
|
* kind: every item is a plugin (spec §4), imported through {@link PluginImport} (prepare -> confirm,
|
|
76
|
-
* one review); this service lists and shows items,
|
|
77
|
-
*
|
|
85
|
+
* one review, whose confirm installs the plugin's extension); this service lists and shows items,
|
|
86
|
+
* deletes, and prepares marketplace imports (scope and disable: `CatalogScopeService`). Stateless,
|
|
87
|
+
* shared by every replica.
|
|
78
88
|
*/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
let CatalogService = class CatalogService {
|
|
90
|
+
kdb;
|
|
91
|
+
adminLock;
|
|
92
|
+
config;
|
|
93
|
+
installs;
|
|
94
|
+
admin;
|
|
95
|
+
pluginImport;
|
|
96
|
+
marketplaces;
|
|
97
|
+
installLock;
|
|
98
|
+
txHost;
|
|
99
|
+
constructor(kdb,
|
|
100
|
+
/** The super admin lock (identity/super-admin.ts): joins the caller's transaction. */
|
|
101
|
+
adminLock, config, installs,
|
|
102
|
+
/** The deployment's extensions with their approvals (what is pending confirmation). */
|
|
103
|
+
admin,
|
|
104
|
+
/** Plugin import (a marketplace entry goes through its prepare). */
|
|
105
|
+
pluginImport,
|
|
106
|
+
/** The token of a custom marketplace (sent only to its URL's origin). */
|
|
107
|
+
marketplaces,
|
|
108
|
+
/** Serializes a claim release with an install of that name still committing (F10). */
|
|
109
|
+
installLock, txHost) {
|
|
110
|
+
this.kdb = kdb;
|
|
111
|
+
this.adminLock = adminLock;
|
|
112
|
+
this.config = config;
|
|
113
|
+
this.installs = installs;
|
|
114
|
+
this.admin = admin;
|
|
115
|
+
this.pluginImport = pluginImport;
|
|
116
|
+
this.marketplaces = marketplaces;
|
|
117
|
+
this.installLock = installLock;
|
|
118
|
+
this.txHost = txHost;
|
|
119
|
+
}
|
|
120
|
+
/** The kernel-schema handle of the current context (the transaction, else the pool). */
|
|
121
|
+
get db() {
|
|
122
|
+
return this.kdb.db;
|
|
123
|
+
}
|
|
124
|
+
/** Downloads a marketplace archive source, verified against its integrity. */
|
|
125
|
+
fetchArchive(archive, signal) {
|
|
126
|
+
const config = this.config.get();
|
|
127
|
+
return fetchMarketplaceArchive(archive, {
|
|
128
|
+
maxBytes: config.packages.maxBytes,
|
|
129
|
+
timeoutMs: 120_000,
|
|
130
|
+
net: marketplaceNetPolicy(config),
|
|
131
|
+
...(signal !== undefined && { signal }),
|
|
132
|
+
});
|
|
83
133
|
}
|
|
84
134
|
/**
|
|
85
135
|
* Prepares the import of one marketplace entry (C25 / C26, spec §5.2): `version` defaults to the
|
|
86
136
|
* newest compatible version the marketplace lists for `name`; the entry must be compatible with
|
|
87
|
-
* the host (`marketplace.incompatible`)
|
|
137
|
+
* the host (`marketplace.incompatible`) and not deprecated (`marketplace.entry_deprecated`, 409; the
|
|
138
|
+
* confirm does not read the marketplace again); an npm source is downloaded from the configured registry
|
|
88
139
|
* and an archive source from its URL, both always verified against the marketplace's integrity
|
|
89
140
|
* (`marketplace.integrity_mismatch`, nothing written). A `path` source is read from the git
|
|
90
141
|
* marketplace's repository at its last refreshed commit (an http marketplace has none:
|
|
@@ -100,12 +151,13 @@ export class CatalogService {
|
|
|
100
151
|
* `marketplace.not_found`; disabled, or the entry / version missing -> `marketplace.entry_not_found`.
|
|
101
152
|
*/
|
|
102
153
|
async importFromMarketplace(actor, input, opts = {}) {
|
|
103
|
-
const config = this.
|
|
104
|
-
const { entry, marketplace, claude } = await loadMarketplaceEntry(this.
|
|
154
|
+
const config = this.config.get();
|
|
155
|
+
const { entry, marketplace, claude } = await loadMarketplaceEntry(this.db, config, input.marketplaceId, input.name, input.version);
|
|
105
156
|
const version = marketplaceEntryVersion(entry);
|
|
106
157
|
if (!entryCompatible(entry)) {
|
|
107
158
|
throw new ApiError("marketplace.incompatible", `${entry.name}${version !== null ? `@${version}` : ""} needs kernel >= ${entry.minKernel}; this deployment runs kernel ${HOST_VERSIONS.kernel}`);
|
|
108
159
|
}
|
|
160
|
+
assertEntryNotDeprecated(entry);
|
|
109
161
|
const src = entry.source;
|
|
110
162
|
const host = entrySourceHost(entry);
|
|
111
163
|
if (host !== undefined && !hostAllowed(host, config)) {
|
|
@@ -113,6 +165,7 @@ export class CatalogService {
|
|
|
113
165
|
}
|
|
114
166
|
const prepareOpts = {
|
|
115
167
|
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
168
|
+
...(opts.auditDetail !== undefined && { auditDetail: opts.auditDetail }),
|
|
116
169
|
expect: {
|
|
117
170
|
marketplace: {
|
|
118
171
|
name: entry.name,
|
|
@@ -129,20 +182,20 @@ export class CatalogService {
|
|
|
129
182
|
let detail;
|
|
130
183
|
let provenance;
|
|
131
184
|
if ("npm" in src) {
|
|
132
|
-
got = await this.
|
|
185
|
+
got = await this.installs.fetchMarketplacePackage({ package: src.npm.package, version: src.npm.version, integrity: src.npm.integrity }, opts.signal);
|
|
133
186
|
ref = `${input.marketplaceId}:${src.npm.package}@${src.npm.version}`;
|
|
134
187
|
detail = { registry: new URL(config.packages.npmRegistry).origin };
|
|
135
|
-
const p = await this.
|
|
188
|
+
const p = await this.installs.fetchProvenance({ package: src.npm.package, version: src.npm.version, integrity: got.integrity }, opts.signal);
|
|
136
189
|
// a git marketplace declares its repository: an attestation from another one is a warning
|
|
137
190
|
const mismatch = p.checked && marketplace.form === "git" && !sameRepository(p.repository, marketplace.url);
|
|
138
191
|
provenance = { provenance: p, ...(mismatch && { warning: "repository_mismatch" }) };
|
|
139
192
|
}
|
|
140
193
|
else {
|
|
141
|
-
got = await this.
|
|
194
|
+
got = await this.fetchArchive(src.archive, opts.signal);
|
|
142
195
|
ref = `${input.marketplaceId}:${archiveRef(src.archive.url)}`;
|
|
143
196
|
detail = { url: archiveRef(src.archive.url) };
|
|
144
197
|
}
|
|
145
|
-
staged = await this.
|
|
198
|
+
staged = await this.pluginImport.prepare(actor, got.bytes, {
|
|
146
199
|
kind: "marketplace",
|
|
147
200
|
ref,
|
|
148
201
|
integrity: got.integrity,
|
|
@@ -184,7 +237,7 @@ export class CatalogService {
|
|
|
184
237
|
}
|
|
185
238
|
const token = marketplace.builtin
|
|
186
239
|
? undefined
|
|
187
|
-
: await this.
|
|
240
|
+
: await this.marketplaces.token(input.marketplaceId);
|
|
188
241
|
const read = await this.readGit(loc, {
|
|
189
242
|
...(token !== undefined && { token, tokenOrigin: new URL(marketplace.url).origin }),
|
|
190
243
|
...(opts.signal !== undefined && { signal: opts.signal }),
|
|
@@ -192,7 +245,7 @@ export class CatalogService {
|
|
|
192
245
|
// path entries follow the marketplace's ref; git entries follow theirs unless a commit is pinned
|
|
193
246
|
const pinned = "git" in src && src.git.commit !== undefined;
|
|
194
247
|
const where = gitSource("path" in src && marketplace.ref !== null ? { ...loc, ref: marketplace.ref } : loc, read, pinned);
|
|
195
|
-
staged = await this.
|
|
248
|
+
staged = await this.pluginImport.prepareGit(actor, read.files, {
|
|
196
249
|
kind: "git",
|
|
197
250
|
ref: `${input.marketplaceId}:${where.ref}`,
|
|
198
251
|
marketplaceId: input.marketplaceId,
|
|
@@ -224,7 +277,7 @@ export class CatalogService {
|
|
|
224
277
|
*/
|
|
225
278
|
async importFromGit(actor, input, opts = {}) {
|
|
226
279
|
const url = expandGitUrl(input.url);
|
|
227
|
-
const problem = marketplaceUrlProblem(url, this.
|
|
280
|
+
const problem = marketplaceUrlProblem(url, this.config.get().marketplaces.allowInsecureLoopback);
|
|
228
281
|
if (problem !== null)
|
|
229
282
|
throw new ApiError("validation_failed", `url: ${problem}`);
|
|
230
283
|
if (input.path !== undefined) {
|
|
@@ -247,8 +300,9 @@ export class CatalogService {
|
|
|
247
300
|
.filter((s) => s !== "")
|
|
248
301
|
.pop() ?? "plugin")
|
|
249
302
|
: where.detail.path.split("/").pop();
|
|
250
|
-
const r = await this.
|
|
303
|
+
const r = await this.pluginImport.prepareGit(actor, read.files, { kind: "git", ref: where.ref, detail: where.detail }, {
|
|
251
304
|
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
305
|
+
...(opts.auditDetail !== undefined && { auditDetail: opts.auditDetail }),
|
|
252
306
|
fallback: {
|
|
253
307
|
name: pluginNameFrom(segment),
|
|
254
308
|
version: gitFallbackVersion(read.commit),
|
|
@@ -259,7 +313,7 @@ export class CatalogService {
|
|
|
259
313
|
}
|
|
260
314
|
/** Resolves the commit and reads the plugin's files; git failures become API errors. */
|
|
261
315
|
async readGit(loc, o) {
|
|
262
|
-
const config = this.
|
|
316
|
+
const config = this.config.get();
|
|
263
317
|
const options = {
|
|
264
318
|
net: marketplaceNetPolicy(config),
|
|
265
319
|
maxBytes: config.packages.maxBytes,
|
|
@@ -287,9 +341,28 @@ export class CatalogService {
|
|
|
287
341
|
}
|
|
288
342
|
/** Same as {@link list}, plus the offset of the next page (null when there is none). */
|
|
289
343
|
async page(q = {}) {
|
|
344
|
+
// `pending`: every item waiting for a confirmation (one list, not paged: the pending set is small)
|
|
345
|
+
if (q.pending === true) {
|
|
346
|
+
const all = await this.page({
|
|
347
|
+
...(q.includeDeleted && { includeDeleted: true }),
|
|
348
|
+
limit: CATALOG_LIST_MAX_LIMIT,
|
|
349
|
+
});
|
|
350
|
+
const items = [...all.items];
|
|
351
|
+
let next = all.nextOffset;
|
|
352
|
+
while (next !== null) {
|
|
353
|
+
const more = await this.page({
|
|
354
|
+
...(q.includeDeleted && { includeDeleted: true }),
|
|
355
|
+
limit: CATALOG_LIST_MAX_LIMIT,
|
|
356
|
+
offset: next,
|
|
357
|
+
});
|
|
358
|
+
items.push(...more.items);
|
|
359
|
+
next = more.nextOffset;
|
|
360
|
+
}
|
|
361
|
+
return { items: items.filter((i) => i.pending), nextOffset: null };
|
|
362
|
+
}
|
|
290
363
|
const limit = Math.min(Math.max(1, q.limit ?? CATALOG_LIST_DEFAULT_LIMIT), CATALOG_LIST_MAX_LIMIT);
|
|
291
364
|
const offset = Math.max(0, q.offset ?? 0);
|
|
292
|
-
let query = this.
|
|
365
|
+
let query = this.db
|
|
293
366
|
.selectFrom("catalog_items")
|
|
294
367
|
.selectAll()
|
|
295
368
|
.orderBy("name")
|
|
@@ -303,7 +376,7 @@ export class CatalogService {
|
|
|
303
376
|
const items = rows.slice(0, limit);
|
|
304
377
|
if (items.length === 0)
|
|
305
378
|
return { items: [], nextOffset: null };
|
|
306
|
-
const versions = await this.
|
|
379
|
+
const versions = await this.db
|
|
307
380
|
.selectFrom("catalog_item_versions")
|
|
308
381
|
.select([
|
|
309
382
|
"item_id",
|
|
@@ -314,19 +387,29 @@ export class CatalogService {
|
|
|
314
387
|
"integrity",
|
|
315
388
|
"source_detail",
|
|
316
389
|
"imported_at",
|
|
390
|
+
"manifest",
|
|
391
|
+
"source_format",
|
|
392
|
+
"applied_at",
|
|
393
|
+
"rejected_at",
|
|
317
394
|
])
|
|
318
395
|
.where("item_id", "in", items.map((i) => i.id))
|
|
319
396
|
.execute();
|
|
397
|
+
const platformOwned = new Set(items.filter((i) => i.owner_org_id === null).map((i) => i.id));
|
|
320
398
|
const byItem = new Map();
|
|
321
399
|
for (const v of versions) {
|
|
400
|
+
// a platform item offers only versions it may use (a transferred org item's rejected or
|
|
401
|
+
// never-applied uploads stay out, ruling P3-52); an org item's pending ones show in 待确认
|
|
402
|
+
if (platformOwned.has(v.item_id) && !versionUsable(v))
|
|
403
|
+
continue;
|
|
322
404
|
const list = byItem.get(v.item_id) ?? [];
|
|
323
405
|
list.push(v);
|
|
324
406
|
byItem.set(v.item_id, list);
|
|
325
407
|
}
|
|
326
|
-
const installs = await countInstalls(this.
|
|
327
|
-
const latest = await marketplaceLatest(this.
|
|
408
|
+
const installs = await countInstalls(this.db, items, byItem);
|
|
409
|
+
const latest = await marketplaceLatest(this.db, this.config.get(), items, byItem);
|
|
410
|
+
const facts = await itemScopeFacts(this.db, items, await itemConfirmations(this.admin, items, byItem));
|
|
328
411
|
return {
|
|
329
|
-
items: items.map((i) => itemView(i, byItem.get(i.id) ?? [], installs.get(i.id) ?? 0, latest.get(i.id))),
|
|
412
|
+
items: items.map((i) => itemView(i, byItem.get(i.id) ?? [], installs.get(i.id) ?? 0, latest.get(i.id), facts.get(i.id))),
|
|
330
413
|
nextOffset,
|
|
331
414
|
};
|
|
332
415
|
}
|
|
@@ -334,27 +417,29 @@ export class CatalogService {
|
|
|
334
417
|
async get(itemId) {
|
|
335
418
|
if (!UUID_RE.test(itemId))
|
|
336
419
|
throw notFound();
|
|
337
|
-
const item = await this.
|
|
420
|
+
const item = await this.db
|
|
338
421
|
.selectFrom("catalog_items")
|
|
339
422
|
.selectAll()
|
|
340
423
|
.where("id", "=", itemId)
|
|
341
424
|
.executeTakeFirst();
|
|
342
425
|
if (!item)
|
|
343
426
|
throw notFound();
|
|
344
|
-
const rows = await this.
|
|
427
|
+
const rows = (await this.db
|
|
345
428
|
.selectFrom("catalog_item_versions")
|
|
346
429
|
.selectAll()
|
|
347
430
|
.where("item_id", "=", itemId)
|
|
348
|
-
.execute();
|
|
431
|
+
.execute()).filter((v) => item.owner_org_id !== null || versionUsable(v));
|
|
349
432
|
rows.sort((a, b) => newestFirst({ version: a.version, importedAt: a.imported_at }, { version: b.version, importedAt: b.imported_at }));
|
|
350
433
|
const byItem = new Map([[item.id, rows]]);
|
|
351
|
-
const installs = await countInstalls(this.
|
|
352
|
-
const latest = await marketplaceLatest(this.
|
|
434
|
+
const installs = await countInstalls(this.db, [item], byItem);
|
|
435
|
+
const latest = await marketplaceLatest(this.db, this.config.get(), [item], byItem);
|
|
436
|
+
const facts = await itemScopeFacts(this.db, [item], await itemConfirmations(this.admin, [item], byItem));
|
|
353
437
|
return {
|
|
354
438
|
item: {
|
|
355
|
-
...itemView(item, rows, installs.get(item.id) ?? 0, latest.get(item.id)),
|
|
439
|
+
...itemView(item, rows, installs.get(item.id) ?? 0, latest.get(item.id), facts.get(item.id)),
|
|
356
440
|
packageName: item.package_name,
|
|
357
441
|
deletedAt: item.deleted_at?.toISOString() ?? null,
|
|
442
|
+
platformVersion: item.platform_synced_version ?? item.latest_version,
|
|
358
443
|
},
|
|
359
444
|
versions: rows.map((v) => ({
|
|
360
445
|
version: v.version,
|
|
@@ -376,507 +461,152 @@ export class CatalogService {
|
|
|
376
461
|
})),
|
|
377
462
|
};
|
|
378
463
|
}
|
|
379
|
-
/**
|
|
380
|
-
* Changes the policy (audit `catalog.policy_changed`, not written when unchanged). Deleted /
|
|
381
|
-
* missing -> `catalog.item_not_found`.
|
|
382
|
-
*/
|
|
383
|
-
async setPolicy(actor, itemId, policy, opts = {}) {
|
|
384
|
-
if (!UUID_RE.test(itemId))
|
|
385
|
-
throw notFound();
|
|
386
|
-
await this.d.db.transaction().execute(async (trx) => {
|
|
387
|
-
await lockEnterpriseAdminsAndAuthorize(trx, actor);
|
|
388
|
-
const row = await trx
|
|
389
|
-
.selectFrom("catalog_items")
|
|
390
|
-
.select(["name", "policy"])
|
|
391
|
-
.where("id", "=", itemId)
|
|
392
|
-
.where("deleted_at", "is", null)
|
|
393
|
-
.forUpdate()
|
|
394
|
-
.executeTakeFirst();
|
|
395
|
-
if (!row)
|
|
396
|
-
throw notFound();
|
|
397
|
-
if (row.policy === policy)
|
|
398
|
-
return;
|
|
399
|
-
await trx
|
|
400
|
-
.updateTable("catalog_items")
|
|
401
|
-
.set({ policy, updated_at: sql `now()` })
|
|
402
|
-
.where("id", "=", itemId)
|
|
403
|
-
.execute();
|
|
404
|
-
await audit(trx, {
|
|
405
|
-
actorAccountId: actor,
|
|
406
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
407
|
-
action: "catalog.policy_changed",
|
|
408
|
-
target: itemId,
|
|
409
|
-
detail: { name: row.name, from: row.policy, to: policy },
|
|
410
|
-
});
|
|
411
|
-
});
|
|
412
|
-
return this.view(itemId);
|
|
413
|
-
}
|
|
414
464
|
/**
|
|
415
465
|
* Deletes the item (soft delete, audit `catalog.removed`; requests still pending are cancelled in
|
|
416
466
|
* the same transaction): versions and stored files are kept (installed components still refer to
|
|
417
|
-
* them),
|
|
418
|
-
* item. Deleted / missing -> `catalog.item_not_found`.
|
|
467
|
+
* them), its themes are soft-deleted (nothing refers to their rows), organizations no longer see
|
|
468
|
+
* it; the same name can later be imported again as a new item. Deleted / missing -> `catalog.item_not_found`. A platform plugin whose extension is
|
|
469
|
+
* still enabled on the deployment -> 409 `catalog.extension_enabled` (details
|
|
470
|
+
* `[{ extension, displayName }]`): disable it on the Extensions page first, as an uninstall
|
|
471
|
+
* requires. A disabled extension keeps its install record (the super admin uninstalls it on the
|
|
472
|
+
* Extensions page); an org-owned item's extension is taken out by `OwnedPluginCleanup`.
|
|
419
473
|
*/
|
|
420
474
|
async remove(actor, itemId, opts = {}) {
|
|
421
475
|
if (!UUID_RE.test(itemId))
|
|
422
476
|
throw notFound();
|
|
423
|
-
await this.
|
|
424
|
-
await lockEnterpriseAdminsAndAuthorize(trx, actor);
|
|
425
|
-
const row = await trx
|
|
426
|
-
.updateTable("catalog_items")
|
|
427
|
-
.set({
|
|
428
|
-
deleted_at: sql `now()`,
|
|
429
|
-
updated_at: sql `now()`,
|
|
430
|
-
})
|
|
431
|
-
.where("id", "=", itemId)
|
|
432
|
-
.where("deleted_at", "is", null)
|
|
433
|
-
.returning(["name"])
|
|
434
|
-
.executeTakeFirst();
|
|
435
|
-
if (!row)
|
|
436
|
-
throw notFound();
|
|
437
|
-
// Pending requests for a deleted item are pointless: cancel them in the same transaction
|
|
438
|
-
await cancelPendingRequests(trx, { itemId }, actor, "item_removed", opts);
|
|
439
|
-
await audit(trx, {
|
|
440
|
-
actorAccountId: actor,
|
|
441
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
442
|
-
action: "catalog.removed",
|
|
443
|
-
target: itemId,
|
|
444
|
-
detail: { name: row.name },
|
|
445
|
-
});
|
|
446
|
-
});
|
|
477
|
+
await this.writeRemove(actor, itemId, opts);
|
|
447
478
|
}
|
|
448
479
|
/**
|
|
449
|
-
*
|
|
450
|
-
*
|
|
451
|
-
* state; audit `extension.installed`), with the install record linked to the item (F-AA). The
|
|
452
|
-
* returned status may be `pending_approval` when the version's permissions are not approved yet.
|
|
453
|
-
* A version without an extension -> `catalog.no_extension`; item or version missing ->
|
|
454
|
-
* `catalog.item_not_found`.
|
|
480
|
+
* The precheck of {@link remove} (the Platform tool's `plugins.delete`): throws what the delete
|
|
481
|
+
* would throw for an enabled extension; read-only, no locks.
|
|
455
482
|
*/
|
|
456
|
-
async
|
|
483
|
+
async assertRemovable(itemId) {
|
|
457
484
|
if (!UUID_RE.test(itemId))
|
|
458
485
|
throw notFound();
|
|
459
|
-
|
|
486
|
+
await this.assertExtensionDisabled(this.kdb.db, itemId);
|
|
487
|
+
}
|
|
488
|
+
async writeRemove(actor, itemId, opts) {
|
|
489
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
490
|
+
await this.assertExtensionDisabled(this.db, itemId, true);
|
|
491
|
+
if ((await this.removeIn(actor, itemId, opts)) === null)
|
|
492
|
+
throw notFound();
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* A live platform item whose extension (the install of the item's name from its package) is
|
|
496
|
+
* enabled -> 409 `catalog.extension_enabled`. With `lock`, under the per-name install lock an
|
|
497
|
+
* enable takes too (the caller's transaction), so no enable slips in between.
|
|
498
|
+
*/
|
|
499
|
+
async assertExtensionDisabled(db, itemId, lock = false) {
|
|
500
|
+
const item = await db
|
|
460
501
|
.selectFrom("catalog_items")
|
|
461
|
-
.select(["
|
|
502
|
+
.select(["name", "package_name", "owner_org_id", "display_name"])
|
|
462
503
|
.where("id", "=", itemId)
|
|
463
504
|
.where("deleted_at", "is", null)
|
|
464
505
|
.executeTakeFirst();
|
|
465
|
-
if (!item)
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
.
|
|
469
|
-
|
|
470
|
-
.
|
|
471
|
-
.
|
|
506
|
+
if (!item || item.owner_org_id !== null)
|
|
507
|
+
return;
|
|
508
|
+
if (lock)
|
|
509
|
+
await this.installLock.lock(item.name);
|
|
510
|
+
const install = await db
|
|
511
|
+
.selectFrom("extension_installs as x")
|
|
512
|
+
.innerJoin("extension_packages as p", "p.sha256", "x.sha256")
|
|
513
|
+
.select(["x.desired_state", "p.package_name"])
|
|
514
|
+
.where("x.name", "=", item.name)
|
|
472
515
|
.executeTakeFirst();
|
|
473
|
-
if (
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
}
|
|
479
|
-
return this.d.ops.install(item.name, v.extension_sha256, actor, opts.actorTokenId, {
|
|
480
|
-
catalogItemId: itemId,
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
async view(itemId) {
|
|
484
|
-
return (await this.get(itemId)).item;
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
/**
|
|
488
|
-
* Checks a connector template against the loaded connector `c` (problem paths start with `at`): the
|
|
489
|
-
* endpoint matches its `endpointSchema` and carries no credential-like headers / query / URL user
|
|
490
|
-
* info (the same rule as connector installs); every `editableEndpoint` path exists in the endpoint
|
|
491
|
-
* schema.
|
|
492
|
-
*/
|
|
493
|
-
export function templateProblems(c, t, at) {
|
|
494
|
-
const problems = [];
|
|
495
|
-
const r = c.endpointSchema.safeParse(t.endpoint);
|
|
496
|
-
if (!r.success) {
|
|
497
|
-
for (const i of r.error.issues) {
|
|
498
|
-
problems.push(`${[`${at}.endpoint`, ...i.path.map(String)].join(".")}: ${i.message}`);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
for (const leak of endpointCredentialIssues(r.data)) {
|
|
503
|
-
problems.push(`${at}.${leak.path}: ${leak.message}`);
|
|
504
|
-
}
|
|
516
|
+
if (install === undefined || install.desired_state !== "enabled")
|
|
517
|
+
return;
|
|
518
|
+
if (item.package_name !== null && install.package_name !== item.package_name)
|
|
519
|
+
return;
|
|
520
|
+
throw new ApiError("catalog.extension_enabled", `The extension "${item.name}" of this plugin is enabled on the deployment; disable it on the Extensions page first, then delete the plugin`, [{ extension: item.name, displayName: item.display_name ?? null }]);
|
|
505
521
|
}
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
const want = new Set(declared);
|
|
531
|
-
const have = new Set(actual);
|
|
532
|
-
const missing = [...have].filter((k) => !want.has(k)).sort();
|
|
533
|
-
const extra = [...want].filter((k) => !have.has(k)).sort();
|
|
534
|
-
return missing.length > 0 || extra.length > 0 ? { missing, extra } : null;
|
|
535
|
-
}
|
|
536
|
-
/** Takes the transaction-level advisory lock of an item name (concurrent imports of it serialize). */
|
|
537
|
-
export async function lockCatalogName(trx, name) {
|
|
538
|
-
await sql `SELECT pg_advisory_xact_lock(hashtext(${`capybara.directory-item:${name}`}))`.execute(trx);
|
|
539
|
-
}
|
|
540
|
-
/**
|
|
541
|
-
* The live item of a name, with the source identity of its latest version
|
|
542
|
-
* ({@link sourceIdentity}; null when there is none).
|
|
543
|
-
*/
|
|
544
|
-
async function liveItem(db, name) {
|
|
545
|
-
const item = await db
|
|
546
|
-
.selectFrom("catalog_items")
|
|
547
|
-
.select(["id", "package_name", "latest_version", "marketplace_id"])
|
|
548
|
-
.where("name", "=", name)
|
|
549
|
-
.where("deleted_at", "is", null)
|
|
550
|
-
.executeTakeFirst();
|
|
551
|
-
if (!item)
|
|
552
|
-
return undefined;
|
|
553
|
-
const latest = await db
|
|
554
|
-
.selectFrom("catalog_item_versions")
|
|
555
|
-
.select("source_detail")
|
|
556
|
-
.where("item_id", "=", item.id)
|
|
557
|
-
.where("version", "=", item.latest_version)
|
|
558
|
-
.executeTakeFirst();
|
|
559
|
-
return {
|
|
560
|
-
...item,
|
|
561
|
-
source: sourceIdentity(latest?.source_detail ?? undefined, item.marketplace_id ?? undefined),
|
|
562
|
-
};
|
|
563
|
-
}
|
|
564
|
-
/**
|
|
565
|
-
* The identity of a git source, `<host>/<repo>:<path>` (host lower case, no `.git`), or null when
|
|
566
|
-
* the source is not git. An item without package.json is identified by it instead of a package name.
|
|
567
|
-
*/
|
|
568
|
-
export function gitIdentity(detail) {
|
|
569
|
-
if (detail === undefined || !("commit" in detail))
|
|
570
|
-
return null;
|
|
571
|
-
return gitLocationIdentity(detail);
|
|
572
|
-
}
|
|
573
|
-
/**
|
|
574
|
-
* What identifies the source of a plugin without package.json: `git <host>/<repo>:<path>`, or, for
|
|
575
|
-
* a marketplace archive (a skills-only tgz without plugin.json), `marketplace <id>` (the
|
|
576
|
-
* marketplace vouches for its entries; archive URLs change from version to version). null for
|
|
577
|
-
* anything else.
|
|
578
|
-
*/
|
|
579
|
-
function sourceIdentity(detail, marketplaceId) {
|
|
580
|
-
const git = gitIdentity(detail);
|
|
581
|
-
if (git !== null)
|
|
582
|
-
return `git ${git}`;
|
|
583
|
-
if (detail !== undefined && "url" in detail && marketplaceId !== undefined) {
|
|
584
|
-
return `marketplace ${marketplaceId}`;
|
|
585
|
-
}
|
|
586
|
-
return null;
|
|
587
|
-
}
|
|
588
|
-
/** The versions of an item, with what tells their content apart. */
|
|
589
|
-
async function itemVersions(db, itemId) {
|
|
590
|
-
return db
|
|
591
|
-
.selectFrom("catalog_item_versions")
|
|
592
|
-
.select(["version", "content_digest", "integrity"])
|
|
593
|
-
.where("item_id", "=", itemId)
|
|
594
|
-
.execute();
|
|
595
|
-
}
|
|
596
|
-
/** `atConfirm`: found under the lock at confirm (another import committed after the review). */
|
|
597
|
-
const versionExists = (version, sameContent, atConfirm = false) => new ApiError("catalog.version_exists", (sameContent
|
|
598
|
-
? `Version ${version} of this catalog item is already imported with the same content`
|
|
599
|
-
: `Version ${version} of this catalog item has already been imported`) +
|
|
600
|
-
(atConfirm
|
|
601
|
-
? " (by another import since this one was prepared); prepare the import again"
|
|
602
|
-
: ""));
|
|
603
|
-
/**
|
|
604
|
-
* No version of the release of `p.version` (equal but for build metadata) holds the same content
|
|
605
|
-
* (digest; for a version without one, the same integrity), else `catalog.version_exists`.
|
|
606
|
-
*/
|
|
607
|
-
function assertNewContent(existing, p, atConfirm = false) {
|
|
608
|
-
const same = existing.find((v) => sameRelease(v.version, p.version) &&
|
|
609
|
-
(v.content_digest !== null
|
|
610
|
-
? v.content_digest === p.contentDigest
|
|
611
|
-
: v.integrity !== null && v.integrity === p.integrity));
|
|
612
|
-
if (same)
|
|
613
|
-
throw versionExists(same.version, true, atConfirm);
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
* The version a new import records (Decision 6, spec §5.3): the plugin's own version, unless that
|
|
617
|
-
* release is already imported. A version of the same release (equal but for build metadata) with
|
|
618
|
-
* the same content (digest; for versions without one, the same integrity) -> `catalog.version_exists`
|
|
619
|
-
* "already imported"; other content -> `<version>+git.<sha12>` (git) or `+sha256.<12>` (any other
|
|
620
|
-
* source, the digest's first 12 hex), never overwriting the imported version. A git commit already
|
|
621
|
-
* recorded with other content (a Claude Code plugin whose marketplace entry changed while its own
|
|
622
|
-
* commit did not, see `claudeContentDigest`) falls back to `+sha256.<12>`.
|
|
623
|
-
*/
|
|
624
|
-
export function recordedVersion(existing, p) {
|
|
625
|
-
assertNewContent(existing, p);
|
|
626
|
-
if (!existing.some((v) => v.version === p.version))
|
|
627
|
-
return p.version;
|
|
628
|
-
const d = p.detail;
|
|
629
|
-
const byDigest = withBuild(p.version, `sha256.${p.contentDigest.slice(0, 12)}`);
|
|
630
|
-
let next = d !== undefined && "commit" in d
|
|
631
|
-
? withBuild(p.version, `git.${d.commit.slice(0, 12)}`)
|
|
632
|
-
: byDigest;
|
|
633
|
-
if (existing.some((v) => v.version === next))
|
|
634
|
-
next = byDigest;
|
|
635
|
-
if (existing.some((v) => v.version === next))
|
|
636
|
-
throw versionExists(next, false);
|
|
637
|
-
return next;
|
|
638
|
-
}
|
|
639
|
-
/**
|
|
640
|
-
* Conflict precheck before writing (no lock; {@link writeCatalogVersion}'s re-check inside the
|
|
641
|
-
* transaction is final): an item with the same name from another npm package (or, without one,
|
|
642
|
-
* another git source) -> `catalog.name_conflict`; the release already imported with the same
|
|
643
|
-
* content -> `catalog.version_exists`. Returns the existing item (undefined when there is none) and
|
|
644
|
-
* the version to record ({@link recordedVersion}).
|
|
645
|
-
*/
|
|
646
|
-
export async function precheckCatalogImport(db, name, p) {
|
|
647
|
-
const existing = await liveItem(db, name);
|
|
648
|
-
if (!existing)
|
|
649
|
-
return { existing, version: p.version };
|
|
650
|
-
assertSameSource(existing, p.packageName, sourceIdentity(p.detail, p.marketplaceId));
|
|
651
|
-
return { existing, version: recordedVersion(await itemVersions(db, existing.id), p) };
|
|
652
|
-
}
|
|
653
|
-
/**
|
|
654
|
-
* Writes a catalog version in the caller's transaction (the caller has re-checked the enterprise
|
|
655
|
-
* admin): takes the name's advisory lock, checks conflicts again (the same source; no version of
|
|
656
|
-
* the release with the same content; `version` not taken meanwhile), creates the item when there is
|
|
657
|
-
* none or adds the version (latest and display fields change only for a newer version, a version
|
|
658
|
-
* equal but for build metadata being newer as the later import), and writes the version row (with
|
|
659
|
-
* its content digest) and the `catalog.imported` audit. Returns the item id.
|
|
660
|
-
*/
|
|
661
|
-
export async function writeCatalogVersion(trx, w) {
|
|
662
|
-
const { name, version, listing } = w;
|
|
663
|
-
await lockCatalogName(trx, name);
|
|
664
|
-
const live = await liveItem(trx, name);
|
|
665
|
-
let id;
|
|
666
|
-
if (live) {
|
|
667
|
-
id = live.id;
|
|
668
|
-
assertSameSource(live, w.packageName, sourceIdentity(w.source.detail, w.marketplaceId));
|
|
669
|
-
const existing = await itemVersions(trx, id);
|
|
670
|
-
// the same content under any version of the release, then the recorded version itself
|
|
671
|
-
assertNewContent(existing, {
|
|
672
|
-
version,
|
|
673
|
-
contentDigest: w.contentDigest,
|
|
674
|
-
...(w.source.integrity !== undefined && { integrity: w.source.integrity }),
|
|
675
|
-
}, true);
|
|
676
|
-
if (existing.some((v) => v.version === version))
|
|
677
|
-
throw versionExists(version, false, true);
|
|
678
|
-
const newer = compareVersions(version, live.latest_version) >= 0;
|
|
679
|
-
await trx
|
|
522
|
+
/**
|
|
523
|
+
* The soft delete of {@link remove} in the caller's transaction, without its super admin check
|
|
524
|
+
* (pre-flight F14: the super admin's remove and an owner's delete or an org deletion,
|
|
525
|
+
* `OwnedItems.transferOrRemove`, share it): `deleted_at` set, a pending version cleared, the
|
|
526
|
+
* extension name claim of a first upload still waiting released (ruling P3-37, F10), its themes
|
|
527
|
+
* soft-deleted (refused with 409 `theme.platform_default` while one is the platform default),
|
|
528
|
+
* pending requests cancelled, audit `catalog.removed` (`actor` null: the kernel). Returns the
|
|
529
|
+
* removed item's name, or null when it is gone already.
|
|
530
|
+
*/
|
|
531
|
+
async removeIn(actor, itemId, opts = {}) {
|
|
532
|
+
const t = this.db;
|
|
533
|
+
const now = sql `now()`;
|
|
534
|
+
// Its themes go with it: refused while one is the platform default (themes spec §7), before
|
|
535
|
+
// anything is written
|
|
536
|
+
// (the theme rows FOR UPDATE first: the theme lock order is item, theme row, `uiTheme`)
|
|
537
|
+
const themes = await t
|
|
538
|
+
.selectFrom("platform_themes")
|
|
539
|
+
.select("id")
|
|
540
|
+
.where("catalog_item_id", "=", itemId)
|
|
541
|
+
.where("deleted_at", "is", null)
|
|
542
|
+
.forUpdate()
|
|
543
|
+
.execute();
|
|
544
|
+
await assertNotPlatformDefault(t, themes.map((r) => r.id), () => "gone");
|
|
545
|
+
const row = await t
|
|
680
546
|
.updateTable("catalog_items")
|
|
681
547
|
.set({
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
description: listing.description,
|
|
688
|
-
display_name: listing.displayName ? JSON.stringify(listing.displayName) : null,
|
|
689
|
-
}),
|
|
690
|
-
})
|
|
691
|
-
.where("id", "=", id)
|
|
692
|
-
.execute();
|
|
693
|
-
}
|
|
694
|
-
else {
|
|
695
|
-
id = w.newItemId;
|
|
696
|
-
await trx
|
|
697
|
-
.insertInto("catalog_items")
|
|
698
|
-
.values({
|
|
699
|
-
id,
|
|
700
|
-
name,
|
|
701
|
-
package_name: w.packageName,
|
|
702
|
-
publisher: listing.publisher,
|
|
703
|
-
description: listing.description,
|
|
704
|
-
display_name: listing.displayName ? JSON.stringify(listing.displayName) : null,
|
|
705
|
-
latest_version: version,
|
|
706
|
-
created_by: w.actor,
|
|
707
|
-
marketplace_id: w.marketplaceId ?? null,
|
|
548
|
+
deleted_at: now,
|
|
549
|
+
updated_at: now,
|
|
550
|
+
pending_version: null,
|
|
551
|
+
pending_by: null,
|
|
552
|
+
pending_at: null,
|
|
708
553
|
})
|
|
554
|
+
.where("id", "=", itemId)
|
|
555
|
+
.where("deleted_at", "is", null)
|
|
556
|
+
.returning(["name", "awaiting_confirmation", "package_name", "owner_org_id"])
|
|
557
|
+
.executeTakeFirst();
|
|
558
|
+
if (!row)
|
|
559
|
+
return null;
|
|
560
|
+
// An org upload still waiting: free the name when nothing is installed under its claim
|
|
561
|
+
// (ruling P3-37, pre-flight F10). Under the install lock, so an install a running confirmation
|
|
562
|
+
// is committing is seen: that claim stays for its take-out or the cleanup job
|
|
563
|
+
if (row.awaiting_confirmation && row.package_name !== null) {
|
|
564
|
+
await this.installLock.lock(row.name);
|
|
565
|
+
await releaseExtensionClaim(t, row.name, row.package_name);
|
|
566
|
+
}
|
|
567
|
+
// Its themes go with it (themes spec §6): nothing refers to a theme row (a theme picked by an
|
|
568
|
+
// org or a person is an id that falls back once no live theme has it)
|
|
569
|
+
await t
|
|
570
|
+
.updateTable("platform_themes")
|
|
571
|
+
.set({ deleted_at: now, updated_at: now })
|
|
572
|
+
.where("catalog_item_id", "=", itemId)
|
|
573
|
+
.where("deleted_at", "is", null)
|
|
709
574
|
.execute();
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
size: w.size,
|
|
726
|
-
imported_by: w.actor,
|
|
727
|
-
source_format: w.sourceFormat ?? "capybara",
|
|
728
|
-
translation: w.translation != null ? JSON.stringify(w.translation) : null,
|
|
729
|
-
license_text: w.licenseText ?? null,
|
|
730
|
-
license_truncated: w.licenseTruncated === true,
|
|
731
|
-
})
|
|
732
|
-
.execute();
|
|
733
|
-
await audit(trx, {
|
|
734
|
-
...(w.actor !== null && { actorAccountId: w.actor }),
|
|
735
|
-
...(w.actorTokenId !== undefined && { actorTokenId: w.actorTokenId }),
|
|
736
|
-
action: "catalog.imported",
|
|
737
|
-
target: id,
|
|
738
|
-
detail: {
|
|
739
|
-
name,
|
|
740
|
-
version,
|
|
741
|
-
source: w.source.source,
|
|
742
|
-
sourceRef: w.source.ref,
|
|
743
|
-
contentDigest: w.contentDigest,
|
|
744
|
-
...(w.extensionSha256 !== null && { sha256: w.extensionSha256 }),
|
|
745
|
-
...(w.source.integrity !== undefined && { integrity: w.source.integrity }),
|
|
746
|
-
...(w.marketplaceId !== undefined && { marketplaceId: w.marketplaceId }),
|
|
747
|
-
...w.auditDetail,
|
|
748
|
-
},
|
|
749
|
-
});
|
|
750
|
-
return id;
|
|
751
|
-
}
|
|
752
|
-
/**
|
|
753
|
-
* An extension name belongs to the npm package that first installed it (`extension_name_owners`,
|
|
754
|
-
* Ruling P3): when another package owns it, the import is refused right away with
|
|
755
|
-
* `extension.name_conflict` (the same code as at install), instead of failing only at deploy time.
|
|
756
|
-
*/
|
|
757
|
-
export async function assertPluginNameOwner(db, name, packageName) {
|
|
758
|
-
const owner = await db
|
|
759
|
-
.selectFrom("extension_name_owners")
|
|
760
|
-
.select("package_name")
|
|
761
|
-
.where("name", "=", name)
|
|
762
|
-
.executeTakeFirst();
|
|
763
|
-
if (owner && owner.package_name !== packageName) {
|
|
764
|
-
throw new ApiError("extension.name_conflict", `Extension name ${name} belongs to package ${owner.package_name}; ${packageLabel(packageName)} cannot use it`);
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
/** "package <name>", or what a plugin without package.json is called in messages. */
|
|
768
|
-
const packageLabel = (p) => p === null ? "a plugin without package.json" : `package ${p}`;
|
|
769
|
-
/**
|
|
770
|
-
* Whether a plugin may add a version to an existing item: the same npm package, or, for an item
|
|
771
|
-
* without package.json, the same source ({@link sourceIdentity}: git host, repo and path, so
|
|
772
|
-
* unrelated repos that resolve to the same name never merge; or the same marketplace for an
|
|
773
|
-
* archive); never a mix of the two.
|
|
774
|
-
*/
|
|
775
|
-
function assertSameSource(item, packageName, source) {
|
|
776
|
-
const from = (p, src) => p !== null ? `package ${p}` : (src ?? "a plugin without package.json");
|
|
777
|
-
const same = item.package_name !== null
|
|
778
|
-
? item.package_name === packageName
|
|
779
|
-
: packageName === null && item.source !== null && item.source === source;
|
|
780
|
-
if (!same) {
|
|
781
|
-
throw new ApiError("catalog.name_conflict", `A catalog item with this name comes from ${from(item.package_name, item.source)}; ${from(packageName, source)} cannot add versions to it`);
|
|
782
|
-
}
|
|
783
|
-
}
|
|
784
|
-
/**
|
|
785
|
-
* For each marketplace-imported item, its marketplace (when enabled): the highest compatible
|
|
786
|
-
* version listed, and whether a compatible entry's content changed at an imported version.
|
|
787
|
-
*/
|
|
788
|
-
async function marketplaceLatest(db, config, items, versions) {
|
|
789
|
-
const out = new Map();
|
|
790
|
-
const sourced = items.filter((i) => typeof i.marketplace_id === "string");
|
|
791
|
-
if (sourced.length === 0)
|
|
792
|
-
return out;
|
|
793
|
-
const rows = await db
|
|
794
|
-
.selectFrom("marketplace_entries as e")
|
|
795
|
-
.innerJoin("marketplaces as s", "s.id", "e.source_id")
|
|
796
|
-
.select([
|
|
797
|
-
"e.source_id",
|
|
798
|
-
"e.name",
|
|
799
|
-
"e.version",
|
|
800
|
-
"e.entry",
|
|
801
|
-
"e.head_commit",
|
|
802
|
-
"e.tree_oid",
|
|
803
|
-
"s.builtin",
|
|
804
|
-
"s.enabled",
|
|
805
|
-
"s.url",
|
|
806
|
-
"s.last_commit",
|
|
807
|
-
])
|
|
808
|
-
.where("e.source_id", "in", [...new Set(sourced.map((i) => i.marketplace_id))])
|
|
809
|
-
.where("e.name", "in", [...new Set(sourced.map((i) => i.name))])
|
|
810
|
-
.execute();
|
|
811
|
-
for (const i of sourced) {
|
|
812
|
-
const listed = rows.filter((r) => r.source_id === i.marketplace_id &&
|
|
813
|
-
r.name === i.name &&
|
|
814
|
-
sourceEffective(r, config) &&
|
|
815
|
-
entryCompatible(r.entry));
|
|
816
|
-
const [best] = listed
|
|
817
|
-
.filter((r) => r.version !== "")
|
|
818
|
-
.map((r) => r.version)
|
|
819
|
-
.sort(newestFirst);
|
|
820
|
-
const recorded = versions.get(i.id) ?? [];
|
|
821
|
-
out.set(i.id, {
|
|
822
|
-
latest: best ?? null,
|
|
823
|
-
contentChanged: listed.some((r) => entryContentChanged(r.entry, {
|
|
824
|
-
marketplaceId: r.source_id,
|
|
825
|
-
headCommit: r.head_commit,
|
|
826
|
-
treeOid: r.tree_oid,
|
|
827
|
-
url: r.url,
|
|
828
|
-
lastCommit: r.last_commit,
|
|
829
|
-
}, recorded)),
|
|
575
|
+
// Pending requests for a deleted item are pointless: cancel them in the same transaction
|
|
576
|
+
await cancelPendingRequests(t, { itemId }, actor, "item_removed", opts);
|
|
577
|
+
await audit(t, {
|
|
578
|
+
actorAccountId: actor,
|
|
579
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
580
|
+
// an org-owned item's removal shows in its owner org's audit log too
|
|
581
|
+
...(row.owner_org_id !== null && { orgId: row.owner_org_id }),
|
|
582
|
+
action: "catalog.removed",
|
|
583
|
+
target: itemId,
|
|
584
|
+
detail: {
|
|
585
|
+
name: row.name,
|
|
586
|
+
...(row.owner_org_id !== null && { ownerOrgId: row.owner_org_id }),
|
|
587
|
+
...(opts.reason !== undefined && { reason: opts.reason }),
|
|
588
|
+
...opts.auditDetail,
|
|
589
|
+
},
|
|
830
590
|
});
|
|
591
|
+
return { name: row.name };
|
|
831
592
|
}
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
.execute();
|
|
853
|
-
for (const i of withExtension) {
|
|
854
|
-
for (const r of enabled)
|
|
855
|
-
if (r.plugin === i.name)
|
|
856
|
-
orgs.get(i.id)?.add(r.org_id);
|
|
857
|
-
}
|
|
858
|
-
}
|
|
859
|
-
return new Map([...orgs].map(([id, set]) => [id, set.size]));
|
|
860
|
-
}
|
|
861
|
-
export function itemView(i, versions, installs = 0, marketplace = { latest: null, contentChanged: false }) {
|
|
862
|
-
const sorted = [...versions].sort((a, b) => newestFirst({ version: a.version, importedAt: a.imported_at ?? null }, { version: b.version, importedAt: b.imported_at ?? null }));
|
|
863
|
-
const top = sorted[0]?.version ?? i.latest_version;
|
|
864
|
-
const latestMarketplaceVersion = marketplace.latest;
|
|
865
|
-
return {
|
|
866
|
-
id: i.id,
|
|
867
|
-
name: i.name,
|
|
868
|
-
publisher: i.publisher,
|
|
869
|
-
displayName: i.display_name,
|
|
870
|
-
description: i.description,
|
|
871
|
-
policy: i.policy,
|
|
872
|
-
latestVersion: i.latest_version,
|
|
873
|
-
versions: sorted.map((v) => v.version),
|
|
874
|
-
installs,
|
|
875
|
-
source: versions.find((v) => v.version === i.latest_version)?.source ?? "file",
|
|
876
|
-
marketplaceId: i.marketplace_id ?? null,
|
|
877
|
-
latestMarketplaceVersion,
|
|
878
|
-
newerInMarketplace: latestMarketplaceVersion !== null && compareVersions(latestMarketplaceVersion, top) > 0,
|
|
879
|
-
contentChanged: marketplace.contentChanged,
|
|
880
|
-
updatedAt: i.updated_at.toISOString(),
|
|
881
|
-
};
|
|
882
|
-
}
|
|
593
|
+
};
|
|
594
|
+
__decorate([
|
|
595
|
+
Transactional()
|
|
596
|
+
], CatalogService.prototype, "writeRemove", null);
|
|
597
|
+
__decorate([
|
|
598
|
+
Transactional({ propagation: "mandatory" })
|
|
599
|
+
], CatalogService.prototype, "removeIn", null);
|
|
600
|
+
CatalogService = __decorate([
|
|
601
|
+
Injectable(),
|
|
602
|
+
__param(0, Inject(KernelDb)),
|
|
603
|
+
__param(1, Inject(SuperAdminLock)),
|
|
604
|
+
__param(2, Inject(KernelConfigService)),
|
|
605
|
+
__param(3, Inject(ExtensionInstalls)),
|
|
606
|
+
__param(4, Inject(ExtensionAdmin)),
|
|
607
|
+
__param(5, Inject(PluginImport)),
|
|
608
|
+
__param(6, Inject(MarketplacesService)),
|
|
609
|
+
__param(7, Inject(PluginInstallLock)),
|
|
610
|
+
__param(8, Inject(TransactionHost))
|
|
611
|
+
], CatalogService);
|
|
612
|
+
export { CatalogService };
|