@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.10
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 +92 -8
- 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 +57 -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 +232 -0
- package/dist/catalog/catalog-content.js +367 -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 +676 -0
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1124 -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 +141 -206
- package/dist/catalog/catalog.service.js +237 -528
- package/dist/catalog/claude/agents.js +15 -10
- 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 +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +327 -0
- package/dist/catalog/component-scope.service.js +990 -0
- package/dist/catalog/component-state.d.ts +188 -0
- package/dist/catalog/component-state.js +455 -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 +431 -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 +801 -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 +223 -0
- package/dist/catalog/platform-components.js +763 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +270 -68
- package/dist/catalog/plugin-import.js +1004 -277
- package/dist/catalog/plugin-install.d.ts +251 -65
- package/dist/catalog/plugin-install.js +1128 -344
- package/dist/catalog/plugin-package.js +14 -1
- package/dist/catalog/plugin-upgrade.d.ts +301 -188
- package/dist/catalog/plugin-upgrade.js +1256 -1068
- 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 +118 -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 -201
- 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 +51 -3
- package/dist/config/schema.js +269 -27
- 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 -70
- 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/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +550 -25
- 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 +136 -2
- package/dist/errors.js +136 -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 -123
- 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 +136 -46
- package/dist/extensions/bootstrap.js +417 -167
- 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 +86 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +83 -52
- 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 +130 -38
- package/dist/identity/accounts.js +373 -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 +78 -33
- package/dist/identity/me.schemas.d.ts +14 -0
- package/dist/identity/me.schemas.js +17 -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 +42 -23
- package/dist/identity/settings.js +137 -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 +25 -14
- package/dist/index.js +20 -9
- 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 -241
- 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-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +53 -10
- package/dist/log.js +168 -18
- 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/net/public-address.js +3 -2
- 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 +45 -14
- package/dist/orgs/settings.service.js +110 -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 +667 -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 +90 -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 +36 -0
- package/dist/platform/ops/admin.ops.js +389 -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 +853 -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 +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -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 +28 -0
- package/dist/platform/ops/platform.ops.js +204 -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/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 +39 -0
- package/dist/platform/platform-ops.module.js +122 -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 +63 -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 -136
- 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 -236
- 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 -180
- 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/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 +142 -40
- package/dist/tools/builtins/sandbox/common.js +227 -65
- 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 +15 -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/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,345 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
+
};
|
|
10
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
3
11
|
import { ApiError } from "../errors.js";
|
|
4
|
-
import {
|
|
12
|
+
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
13
|
+
import { ExtensionAvailability } from "../extensions/unavailable.js";
|
|
14
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
15
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
16
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
17
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
18
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
5
19
|
import { can, roleAtLeast } from "../orgs/roles.js";
|
|
6
20
|
import { packagePath } from "../packages/tgz.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* presets and editable paths, no credentials.
|
|
15
|
-
*/
|
|
16
|
-
export function orgTemplateView(id, file) {
|
|
17
|
-
const t = file.template;
|
|
18
|
-
return {
|
|
19
|
-
id,
|
|
20
|
-
displayName: file.displayName,
|
|
21
|
-
description: file.description ?? "",
|
|
22
|
-
plugin: t.plugin,
|
|
23
|
-
connector: t.connector,
|
|
24
|
-
endpoint: t.endpoint,
|
|
25
|
-
editableEndpoint: t.editableEndpoint ?? [],
|
|
26
|
-
auth: t.auth,
|
|
27
|
-
ownership: t.ownership ??
|
|
28
|
-
(typeof t.auth.ownership === "string" ? t.auth.ownership : null),
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
const iconNotFound = () => new ApiError("catalog.icon_not_found", "This catalog item has no icon");
|
|
32
|
-
/**
|
|
33
|
-
* The item's latest version row; item missing, deleted or (when `includeDisabled` is false)
|
|
34
|
-
* disabled -> `catalog.item_not_found`.
|
|
35
|
-
*/
|
|
36
|
-
async function latestVersionRow(db, itemId, includeDisabled) {
|
|
37
|
-
if (!UUID_RE.test(itemId))
|
|
38
|
-
throw itemNotFound();
|
|
39
|
-
const item = await db
|
|
40
|
-
.selectFrom("catalog_items")
|
|
41
|
-
.select(["latest_version", "policy"])
|
|
42
|
-
.where("id", "=", itemId)
|
|
43
|
-
.where("deleted_at", "is", null)
|
|
44
|
-
.executeTakeFirst();
|
|
45
|
-
// An item the caller cannot see is "not found" before any version / storage is read, so "no icon"
|
|
46
|
-
// never reveals that it exists
|
|
47
|
-
if (!item || (!includeDisabled && item.policy === "disabled"))
|
|
48
|
-
throw itemNotFound();
|
|
49
|
-
const v = await db
|
|
50
|
-
.selectFrom("catalog_item_versions")
|
|
51
|
-
.select(["manifest", "object_prefix", "files"])
|
|
52
|
-
.where("item_id", "=", itemId)
|
|
53
|
-
.where("version", "=", item.latest_version)
|
|
54
|
-
.executeTakeFirst();
|
|
55
|
-
if (!v)
|
|
56
|
-
throw itemNotFound();
|
|
57
|
-
return { item, v };
|
|
58
|
-
}
|
|
59
|
-
/** The icon's path in the version's files (undefined without an icon). */
|
|
60
|
-
const iconPath = (v) => {
|
|
61
|
-
const icon = v.manifest.icon;
|
|
62
|
-
return icon === undefined ? undefined : packagePath(icon);
|
|
63
|
-
};
|
|
64
|
-
/** Whether the item's latest version has an icon; unreadable counts as none. */
|
|
65
|
-
export async function catalogHasIcon(db, itemId) {
|
|
66
|
-
try {
|
|
67
|
-
const { v } = await latestVersionRow(db, itemId, true);
|
|
68
|
-
const path = iconPath(v);
|
|
69
|
-
return path !== undefined && v.files.some((f) => f.path === path);
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Reads the icon of the item's latest version (served only through kernel routes, with nosniff and
|
|
77
|
-
* a CSP sandbox in the response headers; the web only shows it with `<img>`). Item missing, deleted
|
|
78
|
-
* or (when `includeDisabled` is false) disabled -> `catalog.item_not_found` (decided before reading
|
|
79
|
-
* storage); no icon -> `catalog.icon_not_found`; stored content that is not a valid svg / png
|
|
80
|
-
* (checked at import, this guards against tampered storage) -> `internal`.
|
|
81
|
-
*/
|
|
82
|
-
export async function readCatalogIcon(db, storage, itemId, includeDisabled) {
|
|
83
|
-
const { item, v } = await latestVersionRow(db, itemId, includeDisabled);
|
|
84
|
-
const path = iconPath(v);
|
|
85
|
-
const f = path === undefined ? undefined : v.files.find((x) => x.path === path);
|
|
86
|
-
if (path === undefined || !f)
|
|
87
|
-
throw iconNotFound();
|
|
88
|
-
const [file] = await readCatalogFiles(storage, v.object_prefix, [f]);
|
|
89
|
-
if (!file)
|
|
90
|
-
throw iconNotFound();
|
|
91
|
-
const problem = iconProblem(path, file.data);
|
|
92
|
-
if (problem !== undefined)
|
|
93
|
-
throw new ApiError("internal", `Stored icon is invalid: ${problem}`);
|
|
94
|
-
return {
|
|
95
|
-
data: file.data,
|
|
96
|
-
contentType: /\.svg$/i.test(path) ? "image/svg+xml" : "image/png",
|
|
97
|
-
policy: item.policy,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
21
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
22
|
+
import { catalogHasIcon, findConnectorIn, orgTemplateView, readCatalogIcon, readCatalogTemplates, templatePluginProblem, } from "./catalog-content.js";
|
|
23
|
+
import { itemView, ownerOnlyFacts, versionUsable } from "./catalog-items.js";
|
|
24
|
+
import { connectorTemplatesOn, templateIdOfPath } from "./component-state.js";
|
|
25
|
+
import { itemPendingError, ownerOf, ownersOf } from "./ownership.js";
|
|
26
|
+
import { PluginInstaller, uninstallPreviewHash, upsertOrgSwitch, } from "./plugin-install.js";
|
|
27
|
+
import { requestable, switchable, visibleTo, wantedOn } from "./scope.js";
|
|
100
28
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
101
29
|
const itemNotFound = () => new ApiError("catalog.item_not_found", "Catalog item not found");
|
|
102
|
-
const
|
|
103
|
-
const
|
|
104
|
-
/**
|
|
105
|
-
* The org actions installing / uninstalling a plugin needs: the union over its components (an
|
|
106
|
-
* extension -> `org.extensions.manage`, skills -> `skills.manage`, connector templates ->
|
|
107
|
-
* `connectors.manage`, agent templates -> `agents.manage`), re-checked inside the org row lock.
|
|
108
|
-
*/
|
|
109
|
-
export function requiredActions(m) {
|
|
110
|
-
const out = [];
|
|
111
|
-
if (m.extension)
|
|
112
|
-
out.push("org.extensions.manage");
|
|
113
|
-
if ((m.connectorTemplates ?? []).length > 0)
|
|
114
|
-
out.push("connectors.manage");
|
|
115
|
-
if ((m.skills ?? []).length > 0)
|
|
116
|
-
out.push("skills.manage");
|
|
117
|
-
if ((m.agents ?? []).length > 0)
|
|
118
|
-
out.push("agents.manage");
|
|
119
|
-
return out.length > 0 ? out : ["org.extensions.manage"];
|
|
120
|
-
}
|
|
121
|
-
/** Locks the org row in the caller's transaction and re-checks the actor can do every action (else `forbidden`). */
|
|
122
|
-
export async function lockOrgForActions(t, orgId, actor, actions) {
|
|
123
|
-
const [first, ...rest] = actions;
|
|
124
|
-
const { role } = await lockOrgAndAuthorize(t, orgId, actor, first);
|
|
125
|
-
for (const a of rest) {
|
|
126
|
-
if (!can(role, a))
|
|
127
|
-
throw new ApiError("forbidden", "Insufficient organization role");
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
131
|
-
const UNSAFE_KEYS = new Set(["__proto__", "prototype", "constructor"]);
|
|
132
|
-
/** 对象的全部叶子点路径(数组与非对象值算叶子)。 */
|
|
133
|
-
function leafPaths(v, base = "") {
|
|
134
|
-
const out = [];
|
|
135
|
-
for (const [k, x] of Object.entries(v)) {
|
|
136
|
-
const p = base ? `${base}.${k}` : k;
|
|
137
|
-
if (isObj(x) && Object.keys(x).length > 0)
|
|
138
|
-
out.push(...leafPaths(x, p));
|
|
139
|
-
else
|
|
140
|
-
out.push(p);
|
|
141
|
-
}
|
|
142
|
-
return out;
|
|
143
|
-
}
|
|
144
|
-
/** The value at a dot path of `v` (own keys only), undefined when absent. */
|
|
145
|
-
export function getPath(v, path) {
|
|
146
|
-
let node = v;
|
|
147
|
-
for (const seg of path.split(".")) {
|
|
148
|
-
if (!isObj(node) || !Object.hasOwn(node, seg))
|
|
149
|
-
return undefined;
|
|
150
|
-
node = node[seg];
|
|
151
|
-
}
|
|
152
|
-
return node;
|
|
153
|
-
}
|
|
154
|
-
/** Sets the value at a dot path of `obj`, creating the objects on the way. */
|
|
155
|
-
export function setPath(obj, path, value) {
|
|
156
|
-
const segs = path.split(".");
|
|
157
|
-
let node = obj;
|
|
158
|
-
for (const seg of segs.slice(0, -1)) {
|
|
159
|
-
if (!isObj(node[seg]))
|
|
160
|
-
node[seg] = {};
|
|
161
|
-
node = node[seg];
|
|
162
|
-
}
|
|
163
|
-
node[segs[segs.length - 1]] = value;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* 模板的连接器插件此刻是否可用:插件加载且提供该 kind,并满足 `pluginVersion`(若写了);不可用返回原因
|
|
167
|
-
* (模型不可见,给管理员看的英文)。
|
|
168
|
-
*/
|
|
169
|
-
export function templatePluginProblem(d, template) {
|
|
170
|
-
if (!d.findConnector(template.plugin, template.connector)) {
|
|
171
|
-
return `Connector extension ${template.plugin} providing "${template.connector}" is not deployed; ask the enterprise admin to install and enable it`;
|
|
172
|
-
}
|
|
173
|
-
const range = template.pluginVersion;
|
|
174
|
-
const version = d.pluginVersion(template.plugin);
|
|
175
|
-
if (range !== undefined && version !== undefined && !satisfiesRange(version, range)) {
|
|
176
|
-
return `Connector extension ${template.plugin} is deployed at version ${version}, but the template needs ${range}; ask the enterprise admin to upgrade it`;
|
|
177
|
-
}
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
30
|
+
const notOffered = () => new ApiError("catalog.approval_required", "This plugin is not offered to this organization; an org admin can request access");
|
|
31
|
+
const pluginDisabled = () => new ApiError("plugin.disabled", "This plugin is disabled by the super admin and cannot be switched on");
|
|
180
32
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
* `
|
|
33
|
+
* Organizations see the platform catalog with the plugin scope rules applied (plugin and component
|
|
34
|
+
* management spec §5): a plugin is `all` (on in every org unless an org admin switched it off,
|
|
35
|
+
* layering spec §4), `optional` (an org admin switches it on), or `named` (offered to the listed
|
|
36
|
+
* orgs). Members get the list read-only; org admins switch a plugin on (an install by
|
|
37
|
+
* {@link PluginInstaller}, with its dependencies; the union of the component actions of the plugins
|
|
38
|
+
* it brings in is re-checked inside the org row lock) or off (an uninstall, after a preview they
|
|
39
|
+
* confirm with its hash). Disabled item -> `plugin.disabled`; a
|
|
40
|
+
* dependency unresolved / disabled / in a cycle -> `catalog.dependency_*`; an extension or a
|
|
41
|
+
* template's connector not on the deployment -> `catalog.not_deployed`. No in-process state.
|
|
189
42
|
*/
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (v !== undefined)
|
|
213
|
-
setPath(endpoint, e, v);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
const auth = template.auth;
|
|
217
|
-
const oauth = auth.type === "oauth_code" || auth.type === "oauth_client";
|
|
218
|
-
if (oauth && given.credential !== undefined) {
|
|
219
|
-
throw fail(`${at}.credential`, "This connector uses OAuth; provide client instead");
|
|
43
|
+
let OrgCatalogService = class OrgCatalogService {
|
|
44
|
+
kdb;
|
|
45
|
+
orgLock;
|
|
46
|
+
storage;
|
|
47
|
+
registry;
|
|
48
|
+
pluginInstaller;
|
|
49
|
+
log;
|
|
50
|
+
txHost;
|
|
51
|
+
availability;
|
|
52
|
+
constructor(kdb,
|
|
53
|
+
/** The org row lock (orgs/org-lock.ts): joins the caller's transaction. */
|
|
54
|
+
orgLock, storage, registry, pluginInstaller, log, txHost,
|
|
55
|
+
/** Why a plugin's extension cannot run (the `unavailable` state's reason). */
|
|
56
|
+
availability) {
|
|
57
|
+
this.kdb = kdb;
|
|
58
|
+
this.orgLock = orgLock;
|
|
59
|
+
this.storage = storage;
|
|
60
|
+
this.registry = registry;
|
|
61
|
+
this.pluginInstaller = pluginInstaller;
|
|
62
|
+
this.log = log;
|
|
63
|
+
this.txHost = txHost;
|
|
64
|
+
this.availability = availability;
|
|
220
65
|
}
|
|
221
|
-
|
|
222
|
-
|
|
66
|
+
/** The kernel-schema handle of the current context (the transaction, else the pool). */
|
|
67
|
+
get db() {
|
|
68
|
+
return this.kdb.db;
|
|
223
69
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
endpoint,
|
|
230
|
-
auth,
|
|
231
|
-
...(credential !== undefined && { credential }),
|
|
232
|
-
template: {
|
|
233
|
-
...ref,
|
|
234
|
-
...(template.defaultToolPolicies !== undefined && {
|
|
235
|
-
defaultToolPolicies: template.defaultToolPolicies,
|
|
236
|
-
}),
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
/** 从部署存储读目录版本里的文件(按版本行的 sha256 校验);`under` 给出时只读该目录下的文件,路径去掉该前缀。 */
|
|
241
|
-
export async function readCatalogFiles(storage, objectPrefix, files, under) {
|
|
242
|
-
storage.assertAvailable();
|
|
243
|
-
if (objectPrefix === null)
|
|
244
|
-
return [];
|
|
245
|
-
const store = storage.deployment();
|
|
246
|
-
const dir = under === undefined ? "" : `${under}/`;
|
|
247
|
-
const out = [];
|
|
248
|
-
for (const f of files) {
|
|
249
|
-
if (!f.path.startsWith(dir))
|
|
250
|
-
continue;
|
|
251
|
-
const got = await store.get(`${objectPrefix}${f.path}`);
|
|
252
|
-
if (!got) {
|
|
253
|
-
throw new ApiError("storage.unavailable", `Catalog file ${f.path} is missing from object storage`);
|
|
254
|
-
}
|
|
255
|
-
const data = new Uint8Array(await new Response(got.body).arrayBuffer());
|
|
256
|
-
if (createHash("sha256").update(data).digest("hex") !== f.sha256) {
|
|
257
|
-
throw new ApiError("internal", `Catalog file ${f.path} does not match its recorded hash`);
|
|
258
|
-
}
|
|
259
|
-
out.push({ path: f.path.slice(dir.length), size: data.byteLength, sha256: f.sha256, data });
|
|
260
|
-
}
|
|
261
|
-
return out;
|
|
262
|
-
}
|
|
263
|
-
/** 校验技能文件并取名字与描述(导入时已校验过;这里防存储被改)。 */
|
|
264
|
-
export function skillOf(files) {
|
|
265
|
-
try {
|
|
266
|
-
// Stored files: a version imported before phase D keeps installing (its invocation keys are
|
|
267
|
-
// read leniently; `skillInvocation` ignores values of the wrong type)
|
|
268
|
-
return checkSkillFiles(files, { invocationKeys: false });
|
|
269
|
-
}
|
|
270
|
-
catch (e) {
|
|
271
|
-
if (e instanceof SkillArchiveError) {
|
|
272
|
-
throw new ApiError("internal", `Stored skill is invalid: ${e.problems.join("; ")}`);
|
|
273
|
-
}
|
|
274
|
-
throw e;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
/** The connector templates of a catalog version, read from storage (id = the file's base name). */
|
|
278
|
-
export async function readCatalogTemplates(storage, v) {
|
|
279
|
-
const refs = v.manifest.connectorTemplates ?? [];
|
|
280
|
-
if (refs.length === 0)
|
|
281
|
-
return [];
|
|
282
|
-
const paths = refs.map((r) => packagePath(r.path));
|
|
283
|
-
const files = await readCatalogFiles(storage, v.object_prefix, v.files.filter((f) => paths.includes(f.path)));
|
|
284
|
-
return paths.map((path) => {
|
|
285
|
-
const f = files.find((x) => x.path === path);
|
|
286
|
-
let parsed;
|
|
287
|
-
try {
|
|
288
|
-
parsed = f && parseConnectorTemplateFile(JSON.parse(new TextDecoder().decode(f.data)));
|
|
289
|
-
}
|
|
290
|
-
catch {
|
|
291
|
-
parsed = undefined;
|
|
292
|
-
}
|
|
293
|
-
if (!parsed || "errors" in parsed) {
|
|
294
|
-
throw new ApiError("internal", `Stored connector template ${path} is missing or invalid`);
|
|
295
|
-
}
|
|
296
|
-
return { id: path.split("/").pop().replace(/\.json$/, ""), file: parsed };
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* The agent templates of a catalog version (`manifest.agents`, listed explicitly since import),
|
|
301
|
-
* parsed from storage (checked at import; parsed again in case storage was changed).
|
|
302
|
-
*/
|
|
303
|
-
export async function readCatalogAgentTemplates(storage, v) {
|
|
304
|
-
const refs = v.manifest.agents ?? [];
|
|
305
|
-
if (refs.length === 0)
|
|
306
|
-
return [];
|
|
307
|
-
const paths = refs.map((r) => packagePath(r.path));
|
|
308
|
-
const files = await readCatalogFiles(storage, v.object_prefix, v.files.filter((f) => paths.includes(f.path)));
|
|
309
|
-
return paths.map((path) => {
|
|
310
|
-
const f = files.find((x) => x.path === path);
|
|
311
|
-
const parsed = f && parseAgentTemplate(new TextDecoder().decode(f.data));
|
|
312
|
-
if (!parsed || "errors" in parsed) {
|
|
313
|
-
throw new ApiError("internal", `Stored agent template ${path} is missing or invalid`);
|
|
314
|
-
}
|
|
315
|
-
return { path, template: parsed.template };
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Organizations browse and install from the enterprise catalog (C22): members browse (without
|
|
320
|
-
* disabled items) and request, org admins install. Every item is a plugin, installed with its
|
|
321
|
-
* dependencies by {@link PluginInstaller}; installing requires the union of the component actions
|
|
322
|
-
* of the plugins it brings in ({@link requiredActions}), re-checked inside the org row lock; item
|
|
323
|
-
* disabled -> `catalog.item_disabled`; a dependency unresolved / disabled / in a cycle ->
|
|
324
|
-
* `catalog.dependency_*`; an extension or a template's connector not on the deployment ->
|
|
325
|
-
* `catalog.not_deployed`; needs_approval without a grant -> a stage deployment request (HTTP 202;
|
|
326
|
-
* dependencies are not approved separately, spec §10). No in-process state.
|
|
327
|
-
*/
|
|
328
|
-
export class OrgCatalogService {
|
|
329
|
-
d;
|
|
330
|
-
constructor(d) {
|
|
331
|
-
this.d = d;
|
|
332
|
-
}
|
|
333
|
-
/** The org's view of the items; members (not admins) don't see disabled items. */
|
|
70
|
+
/**
|
|
71
|
+
* The org's view of the items: a `named` item without the org on its list is `not_offered` when
|
|
72
|
+
* shown to other orgs and absent otherwise; disabled ones are shown to admins as `unavailable`
|
|
73
|
+
* and absent for members. Each item carries the org's pending request for it.
|
|
74
|
+
*/
|
|
334
75
|
async list(orgId, accountId, itemId) {
|
|
335
|
-
const m = await this.
|
|
76
|
+
const m = await this.db
|
|
336
77
|
.selectFrom("memberships")
|
|
337
78
|
.select("role")
|
|
338
79
|
.where("org_id", "=", orgId)
|
|
339
80
|
.where("account_id", "=", accountId)
|
|
340
81
|
.executeTakeFirst();
|
|
341
82
|
const isAdmin = m !== undefined && roleAtLeast(m.role, "admin");
|
|
342
|
-
let q = this.
|
|
83
|
+
let q = this.db
|
|
343
84
|
.selectFrom("catalog_items")
|
|
344
85
|
.selectAll()
|
|
345
86
|
.where("deleted_at", "is", null)
|
|
@@ -348,67 +89,163 @@ export class OrgCatalogService {
|
|
|
348
89
|
if (itemId !== undefined)
|
|
349
90
|
q = q.where("id", "=", itemId);
|
|
350
91
|
if (!isAdmin)
|
|
351
|
-
q = q.where("
|
|
352
|
-
const
|
|
92
|
+
q = q.where("disabled", "=", false);
|
|
93
|
+
const all = await q.execute();
|
|
94
|
+
const [listed, switches] = await Promise.all([
|
|
95
|
+
this.db
|
|
96
|
+
.selectFrom("catalog_item_scope_orgs")
|
|
97
|
+
.select("item_id")
|
|
98
|
+
.where("org_id", "=", orgId)
|
|
99
|
+
.execute(),
|
|
100
|
+
this.db
|
|
101
|
+
.selectFrom("catalog_item_org_switches")
|
|
102
|
+
.select(["item_id", "enabled"])
|
|
103
|
+
.where("org_id", "=", orgId)
|
|
104
|
+
.execute(),
|
|
105
|
+
]);
|
|
106
|
+
const inList = new Set(listed.map((r) => r.item_id));
|
|
107
|
+
// Hidden `named` items (not listed, not shown to other orgs) are absent; shown ones are
|
|
108
|
+
// `not_offered`
|
|
109
|
+
// An org upload waiting for the super admin is its owner's only (ruling P3-9)
|
|
110
|
+
const items = all.filter((i) => (!i.awaiting_confirmation || i.owner_org_id === orgId) &&
|
|
111
|
+
(visibleTo({ scope: i.builtin ? "all" : i.scope }, inList.has(i.id)) ||
|
|
112
|
+
requestable(i, inList.has(i.id))));
|
|
353
113
|
if (items.length === 0)
|
|
354
114
|
return [];
|
|
115
|
+
const sw = new Map(switches.map((r) => [r.item_id, r.enabled]));
|
|
355
116
|
const ids = items.map((i) => i.id);
|
|
356
|
-
const [versions,
|
|
357
|
-
this.
|
|
117
|
+
const [versions, pluginInstalls, configs, requests] = await Promise.all([
|
|
118
|
+
this.db
|
|
358
119
|
.selectFrom("catalog_item_versions")
|
|
359
|
-
.select([
|
|
120
|
+
.select([
|
|
121
|
+
"item_id",
|
|
122
|
+
"version",
|
|
123
|
+
"source",
|
|
124
|
+
"source_format",
|
|
125
|
+
"manifest",
|
|
126
|
+
"object_prefix",
|
|
127
|
+
"files",
|
|
128
|
+
"applied_at",
|
|
129
|
+
"rejected_at",
|
|
130
|
+
])
|
|
360
131
|
.where("item_id", "in", ids)
|
|
361
132
|
.execute(),
|
|
362
|
-
this.
|
|
363
|
-
.selectFrom("catalog_org_grants")
|
|
364
|
-
.select("item_id")
|
|
365
|
-
.where("org_id", "=", orgId)
|
|
366
|
-
.execute(),
|
|
367
|
-
this.d.requests.latestByItem(orgId),
|
|
368
|
-
this.d.db
|
|
133
|
+
this.db
|
|
369
134
|
.selectFrom("plugin_installs")
|
|
370
135
|
.select(["id", "item_id", "version"])
|
|
371
136
|
.where("org_id", "=", orgId)
|
|
372
137
|
.where("status", "in", ["installing", "installed", "upgrading"])
|
|
373
138
|
.execute(),
|
|
139
|
+
this.db
|
|
140
|
+
.selectFrom("extension_org_configs")
|
|
141
|
+
.select("plugin")
|
|
142
|
+
.where("org_id", "=", orgId)
|
|
143
|
+
.where("config", "is not", null)
|
|
144
|
+
.execute(),
|
|
145
|
+
this.db
|
|
146
|
+
.selectFrom("catalog_requests")
|
|
147
|
+
.select(["id", "item_id", "kind", "created_at"])
|
|
148
|
+
.where("org_id", "=", orgId)
|
|
149
|
+
.where("item_id", "in", ids)
|
|
150
|
+
.where("kind", "in", ["access", "enable"])
|
|
151
|
+
.where("status", "=", "pending")
|
|
152
|
+
.orderBy("created_at")
|
|
153
|
+
.execute(),
|
|
374
154
|
]);
|
|
375
|
-
const
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
const granted = new Set(grants.map((g) => g.item_id));
|
|
155
|
+
const pending = new Map(requests.map((r) => [
|
|
156
|
+
r.item_id,
|
|
157
|
+
{ id: r.id, kind: r.kind, createdAt: r.created_at.toISOString() },
|
|
158
|
+
]));
|
|
380
159
|
const undeployed = await this.undeployed(items.flatMap((i) => {
|
|
381
160
|
const v = versions.find((x) => x.item_id === i.id && x.version === i.latest_version);
|
|
382
161
|
return v ? [v] : [];
|
|
383
162
|
}));
|
|
163
|
+
const configured = new Set(configs.map((c) => c.plugin));
|
|
164
|
+
const owners = await ownersOf(this.db, items.flatMap((i) => (i.owner_org_id === null ? [] : [i.owner_org_id])));
|
|
165
|
+
const loaded = new Map(this.registry.manifests().map((x) => [x.name, x]));
|
|
166
|
+
// the extensions of the latest versions that are not loaded: why (the `unavailable` reason)
|
|
167
|
+
const extensionOf = (i) => {
|
|
168
|
+
const v = versions.find((x) => x.item_id === i.id && x.version === i.latest_version);
|
|
169
|
+
const m = v?.manifest;
|
|
170
|
+
return m?.extension ? m.name : undefined;
|
|
171
|
+
};
|
|
172
|
+
const unloaded = await this.availability.unavailable(items.flatMap((i) => {
|
|
173
|
+
const n = extensionOf(i);
|
|
174
|
+
return n === undefined ? [] : [n];
|
|
175
|
+
}));
|
|
384
176
|
const out = [];
|
|
385
177
|
for (const i of items) {
|
|
386
|
-
|
|
387
|
-
|
|
178
|
+
// Another org sees only an org-owned plugin's applied version, never one its owner
|
|
179
|
+
// uploaded that is pending or was rejected (ruling P3-34), nor such a version of a plugin
|
|
180
|
+
// transferred to the platform since (ruling P3-52)
|
|
181
|
+
const vs = versions.filter((v) => v.item_id === i.id &&
|
|
182
|
+
(i.owner_org_id === orgId ||
|
|
183
|
+
(versionUsable(v) && (i.owner_org_id === null || v.version === i.latest_version))));
|
|
184
|
+
const { installs: _installs, marketplaceId: _source, latestMarketplaceVersion: _latest, newerInMarketplace: _newer, scopeOrgs: _scopeOrgs, enabledOrgs: _enabledOrgs, offCount: _offCount, pending: _pending, shownToOthers: _shown, awaitingConfirmation, pendingVersion, ...view } = itemView(i, vs, 0, undefined, ownerOnlyFacts(ownerOf(i.owner_org_id, owners)));
|
|
388
185
|
const latest = vs.find((v) => v.version === i.latest_version);
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
186
|
+
const a = pluginInstalls.find((x) => x.item_id === i.id);
|
|
187
|
+
const scope = i.builtin ? "all" : i.scope;
|
|
188
|
+
const wanted = wantedOn(i, inList.has(i.id), sw.get(i.id) ?? null);
|
|
189
|
+
let state;
|
|
190
|
+
let reason;
|
|
191
|
+
const extName = extensionOf(i);
|
|
192
|
+
const why = extName === undefined ? undefined : unloaded.get(extName);
|
|
193
|
+
if (i.awaiting_confirmation)
|
|
194
|
+
state = "awaiting_confirmation";
|
|
195
|
+
else if (i.disabled) {
|
|
196
|
+
state = "unavailable";
|
|
197
|
+
reason = "plugin_disabled";
|
|
394
198
|
}
|
|
395
|
-
else if (i.
|
|
396
|
-
|
|
199
|
+
else if (requestable(i, inList.has(i.id)))
|
|
200
|
+
state = "not_offered";
|
|
201
|
+
// not installed here and its extension cannot run: switching it on would fail (spec §14.2
|
|
202
|
+
// problem 1); an installed one keeps its state (an org admin can still switch it off)
|
|
203
|
+
else if (!a && why !== undefined) {
|
|
204
|
+
state = "unavailable";
|
|
205
|
+
reason = why.reason;
|
|
206
|
+
}
|
|
207
|
+
else if (a) {
|
|
208
|
+
// An on connector template without a connector here (ruling P2-10)
|
|
209
|
+
const missing = await this.pluginInstaller.missingConnectors(orgId, i.id);
|
|
210
|
+
state = (missing?.templates.length ?? 0) > 0 ? "needs_config" : "on";
|
|
211
|
+
}
|
|
212
|
+
else if (i.builtin)
|
|
213
|
+
state = "on";
|
|
214
|
+
else if (!wanted)
|
|
215
|
+
state = "off";
|
|
216
|
+
else {
|
|
217
|
+
const m = latest?.manifest;
|
|
218
|
+
const ext = m?.extension ? loaded.get(m.name) : undefined;
|
|
219
|
+
// only the connector templates on in the org need input (ruling P2-6)
|
|
220
|
+
const templateIds = (m?.connectorTemplates ?? []).map((t) => templateIdOfPath(t.path));
|
|
221
|
+
const needsInputs = (await connectorTemplatesOn(this.db, orgId, i.id, templateIds)).size > 0 ||
|
|
222
|
+
(m?.extension !== undefined &&
|
|
223
|
+
ext?.config?.org !== undefined &&
|
|
224
|
+
!ext.config.org.safeParse({}).success &&
|
|
225
|
+
!configured.has(m.name));
|
|
226
|
+
// Wanted but not installed and needing nothing: the sync has not installed it (yet, or its
|
|
227
|
+
// install failed); `off`, so an org admin can switch it on (the worker start retries it)
|
|
228
|
+
state = needsInputs ? "needs_config" : "off";
|
|
397
229
|
}
|
|
398
|
-
else
|
|
399
|
-
installable = "yes";
|
|
400
|
-
const a = pluginInstalls.find((x) => x.item_id === i.id);
|
|
401
230
|
out.push({
|
|
402
231
|
...view,
|
|
403
|
-
|
|
232
|
+
// A pending upload is the owner's business only (other orgs never learn of it)
|
|
233
|
+
...(i.owner_org_id === orgId && { awaitingConfirmation, pendingVersion }),
|
|
234
|
+
scope,
|
|
235
|
+
builtin: i.builtin,
|
|
236
|
+
state,
|
|
237
|
+
...(reason !== undefined && { reason }),
|
|
238
|
+
switchable: state !== "not_offered" && state !== "awaiting_confirmation" && switchable(i),
|
|
239
|
+
notDeployed: latest !== undefined && undeployed.has(i.id),
|
|
404
240
|
installed: a
|
|
405
241
|
? {
|
|
406
242
|
pluginInstallId: a.id,
|
|
407
243
|
version: a.version,
|
|
408
|
-
|
|
244
|
+
// no per-org upgrade: the platform update moves every org (ruling F2)
|
|
245
|
+
upgradeAvailable: null,
|
|
409
246
|
}
|
|
410
247
|
: null,
|
|
411
|
-
request:
|
|
248
|
+
request: pending.get(i.id) ?? null,
|
|
412
249
|
});
|
|
413
250
|
}
|
|
414
251
|
return out;
|
|
@@ -425,7 +262,7 @@ export class OrgCatalogService {
|
|
|
425
262
|
const [item] = await this.list(orgId, accountId, itemId);
|
|
426
263
|
if (!item)
|
|
427
264
|
throw itemNotFound();
|
|
428
|
-
const v = await this.
|
|
265
|
+
const v = await this.db
|
|
429
266
|
.selectFrom("catalog_item_versions")
|
|
430
267
|
.select(["manifest", "object_prefix", "files"])
|
|
431
268
|
.where("item_id", "=", itemId)
|
|
@@ -434,26 +271,64 @@ export class OrgCatalogService {
|
|
|
434
271
|
if (!v)
|
|
435
272
|
throw itemNotFound();
|
|
436
273
|
const m = v.manifest;
|
|
274
|
+
const templates = await readCatalogTemplates(this.storage, v);
|
|
275
|
+
// Providers the install would switch on first (a refusal is the install's to report)
|
|
276
|
+
const implied = await this.pluginInstaller
|
|
277
|
+
.impliedProviders(orgId, m, templates, m.dependencies ?? [])
|
|
278
|
+
.catch((e) => {
|
|
279
|
+
if (e instanceof ApiError)
|
|
280
|
+
return [];
|
|
281
|
+
throw e;
|
|
282
|
+
});
|
|
437
283
|
return {
|
|
438
284
|
item,
|
|
439
285
|
hasIcon: m.icon !== undefined,
|
|
440
286
|
extension: m.extension ? m.name : null,
|
|
441
|
-
templates:
|
|
442
|
-
dependencies:
|
|
287
|
+
templates: templates.map((t) => orgTemplateView(t.id, t.file)),
|
|
288
|
+
dependencies: [
|
|
289
|
+
...(m.dependencies ?? []).map((d) => ({ name: d.name, range: d.version })),
|
|
290
|
+
...implied.map((d) => ({ name: d.name, range: d.range, implied: true })),
|
|
291
|
+
],
|
|
443
292
|
skills: (m.skills ?? []).map((s) => packagePath(s.path)),
|
|
444
293
|
agents: (m.agents ?? []).map((a) => packagePath(a.path)),
|
|
294
|
+
missingTemplates: item.installed !== null && item.state === "needs_config"
|
|
295
|
+
? ((await this.pluginInstaller.missingConnectors(orgId, itemId))?.templates ?? []).map((t) => orgTemplateView(t.id, t.file))
|
|
296
|
+
: [],
|
|
445
297
|
};
|
|
446
298
|
}
|
|
447
299
|
/**
|
|
448
|
-
* The item's icon; members don't see disabled items
|
|
449
|
-
* reading storage).
|
|
300
|
+
* The item's icon; members don't see disabled items, nobody outside its list sees a hidden
|
|
301
|
+
* `named` item (-> `catalog.item_not_found`, decided before reading storage). Without `orgId`
|
|
302
|
+
* (the super admin) every item.
|
|
450
303
|
*/
|
|
451
|
-
icon(itemId, isAdmin) {
|
|
452
|
-
|
|
304
|
+
async icon(itemId, isAdmin, orgId) {
|
|
305
|
+
if (orgId === undefined)
|
|
306
|
+
return readCatalogIcon(this.db, itemId, isAdmin);
|
|
307
|
+
if (!UUID_RE.test(itemId))
|
|
308
|
+
throw itemNotFound();
|
|
309
|
+
// A hidden `named` item stays absent here too
|
|
310
|
+
const item = await this.db
|
|
311
|
+
.selectFrom("catalog_items")
|
|
312
|
+
.select(["scope", "builtin", "shown_to_others", "owner_org_id", "shareable"])
|
|
313
|
+
.where("id", "=", itemId)
|
|
314
|
+
.where("deleted_at", "is", null)
|
|
315
|
+
.executeTakeFirst();
|
|
316
|
+
// Not requestable from outside its list (hidden, or held back by the share gate): only listed orgs
|
|
317
|
+
if (item && !item.builtin && item.scope === "named" && !requestable(item, false)) {
|
|
318
|
+
const listed = await this.db
|
|
319
|
+
.selectFrom("catalog_item_scope_orgs")
|
|
320
|
+
.select("item_id")
|
|
321
|
+
.where("item_id", "=", itemId)
|
|
322
|
+
.where("org_id", "=", orgId)
|
|
323
|
+
.executeTakeFirst();
|
|
324
|
+
if (listed === undefined)
|
|
325
|
+
throw itemNotFound();
|
|
326
|
+
}
|
|
327
|
+
return readCatalogIcon(this.db, itemId, isAdmin);
|
|
453
328
|
}
|
|
454
329
|
/** For the admin item detail: whether the latest version has an icon. */
|
|
455
330
|
hasIcon(itemId) {
|
|
456
|
-
return catalogHasIcon(this.
|
|
331
|
+
return catalogHasIcon(this.db, itemId);
|
|
457
332
|
}
|
|
458
333
|
/**
|
|
459
334
|
* The items (latest versions) this replica cannot install now: the plugin's extension is not
|
|
@@ -462,9 +337,9 @@ export class OrgCatalogService {
|
|
|
462
337
|
* deployed here (the install reads it again).
|
|
463
338
|
*/
|
|
464
339
|
async undeployed(versions) {
|
|
465
|
-
const loaded = new Map(this.
|
|
340
|
+
const loaded = new Map(this.registry.manifests().map((m) => [m.name, m.version]));
|
|
466
341
|
const deps = {
|
|
467
|
-
findConnector: this.
|
|
342
|
+
findConnector: (plugin, kind) => findConnectorIn(this.registry, plugin, kind),
|
|
468
343
|
pluginVersion: (n) => loaded.get(n),
|
|
469
344
|
};
|
|
470
345
|
const out = new Set();
|
|
@@ -477,14 +352,14 @@ export class OrgCatalogService {
|
|
|
477
352
|
if ((m.connectorTemplates ?? []).length === 0)
|
|
478
353
|
return;
|
|
479
354
|
try {
|
|
480
|
-
const templates = await readCatalogTemplates(this.
|
|
355
|
+
const templates = await readCatalogTemplates(this.storage, v);
|
|
481
356
|
if (templates.some((t) => templatePluginProblem(deps, t.file.template) !== undefined)) {
|
|
482
357
|
out.add(v.item_id);
|
|
483
358
|
}
|
|
484
359
|
}
|
|
485
360
|
catch (e) {
|
|
486
361
|
// Unreadable here: counted as deployed, the install reports it
|
|
487
|
-
this.
|
|
362
|
+
this.log.warn("catalog template read failed in the org list", {
|
|
488
363
|
itemId: v.item_id,
|
|
489
364
|
error: e instanceof Error ? e.message : String(e),
|
|
490
365
|
});
|
|
@@ -492,28 +367,19 @@ export class OrgCatalogService {
|
|
|
492
367
|
}));
|
|
493
368
|
return out;
|
|
494
369
|
}
|
|
495
|
-
/**
|
|
496
|
-
|
|
370
|
+
/**
|
|
371
|
+
* Installs a plugin in the org (the old install route, an alias of switching it on): the role
|
|
372
|
+
* first, then item errors (a member cannot probe a disabled item through error codes), then the
|
|
373
|
+
* installer. Records the org's switch as on.
|
|
374
|
+
*/
|
|
375
|
+
async install(orgId, actor, itemId, body, actorTokenId, auditDetail) {
|
|
497
376
|
if (!UUID_RE.test(itemId))
|
|
498
377
|
throw itemNotFound();
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
if (!canAny)
|
|
505
|
-
throw new ApiError("forbidden", "Insufficient organization role");
|
|
506
|
-
});
|
|
507
|
-
const item = await this.d.db
|
|
508
|
-
.selectFrom("catalog_items")
|
|
509
|
-
.selectAll()
|
|
510
|
-
.where("id", "=", itemId)
|
|
511
|
-
.where("deleted_at", "is", null)
|
|
512
|
-
.executeTakeFirst();
|
|
513
|
-
if (!item)
|
|
514
|
-
throw itemNotFound();
|
|
515
|
-
const version = body.version ?? item.latest_version;
|
|
516
|
-
const v = await this.d.db
|
|
378
|
+
await this.assertCanInstall(orgId, actor);
|
|
379
|
+
const item = await this.visibleItem(orgId, itemId);
|
|
380
|
+
// The platform's version (one per deployment, ruling P2-17)
|
|
381
|
+
const version = item.platform_synced_version ?? item.latest_version;
|
|
382
|
+
const v = await this.db
|
|
517
383
|
.selectFrom("catalog_item_versions")
|
|
518
384
|
.select("version")
|
|
519
385
|
.where("item_id", "=", itemId)
|
|
@@ -521,105 +387,198 @@ export class OrgCatalogService {
|
|
|
521
387
|
.executeTakeFirst();
|
|
522
388
|
if (!v)
|
|
523
389
|
throw new ApiError("catalog.item_not_found", `Version ${version} of this item not found`);
|
|
524
|
-
const opts =
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
//
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
const locked = await t
|
|
535
|
-
.selectFrom("catalog_items")
|
|
536
|
-
.select(["policy", "deleted_at"])
|
|
537
|
-
.where("id", "=", itemId)
|
|
538
|
-
.forShare()
|
|
539
|
-
.executeTakeFirst();
|
|
540
|
-
if (!locked || locked.deleted_at !== null)
|
|
541
|
-
throw itemNotFound();
|
|
542
|
-
if (locked.policy === "disabled")
|
|
543
|
-
throw itemDisabled();
|
|
544
|
-
if (locked.policy === "needs_approval") {
|
|
545
|
-
const grant = await t
|
|
546
|
-
.selectFrom("catalog_org_grants")
|
|
547
|
-
.select("item_id")
|
|
548
|
-
.where("item_id", "=", itemId)
|
|
549
|
-
.where("org_id", "=", orgId)
|
|
550
|
-
.executeTakeFirst();
|
|
551
|
-
if (!grant) {
|
|
552
|
-
return this.d.requests.requestDeployment(t, orgId, actor, item, version, opts);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
return undefined;
|
|
556
|
-
});
|
|
557
|
-
if (pending !== undefined) {
|
|
558
|
-
return { status: 202, request: await this.d.requests.view(this.d.db, pending) };
|
|
559
|
-
}
|
|
560
|
-
// 2. Install (each step re-checks the item policy in its own transaction)
|
|
561
|
-
const { version: _version, ...input } = body;
|
|
562
|
-
const view = await this.d.pluginInstaller.install(orgId, actor, itemId, version, input, opts);
|
|
390
|
+
const opts = {
|
|
391
|
+
switchOn: true,
|
|
392
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
393
|
+
...(auditDetail !== undefined && { auditDetail }),
|
|
394
|
+
};
|
|
395
|
+
if (item.disabled)
|
|
396
|
+
throw pluginDisabled();
|
|
397
|
+
// Dependencies resolved, extensions deployed, template connectors available
|
|
398
|
+
await this.pluginInstaller.preflight(orgId, actor, itemId, version);
|
|
399
|
+
const view = await this.pluginInstaller.install(orgId, actor, itemId, version, body, opts);
|
|
563
400
|
return {
|
|
564
401
|
status: 201,
|
|
565
402
|
installed: { itemId, version, pluginInstallId: view.id },
|
|
566
403
|
install: view,
|
|
567
404
|
};
|
|
568
405
|
}
|
|
569
|
-
/** The
|
|
570
|
-
async
|
|
571
|
-
await this.
|
|
572
|
-
|
|
406
|
+
/** The item when the org may see it (scope), else `catalog.item_not_found`. */
|
|
407
|
+
async visibleItem(orgId, itemId) {
|
|
408
|
+
const item = await this.db
|
|
409
|
+
.selectFrom("catalog_items")
|
|
410
|
+
.selectAll()
|
|
411
|
+
.where("id", "=", itemId)
|
|
412
|
+
.where("deleted_at", "is", null)
|
|
413
|
+
.executeTakeFirst();
|
|
414
|
+
if (!item)
|
|
415
|
+
throw itemNotFound();
|
|
416
|
+
// An org upload waiting for the super admin: absent for other orgs, not switchable by its
|
|
417
|
+
// owner (ruling P3-9)
|
|
418
|
+
if (item.awaiting_confirmation) {
|
|
419
|
+
if (item.owner_org_id !== orgId)
|
|
420
|
+
throw itemNotFound();
|
|
421
|
+
throw itemPendingError(item.name);
|
|
422
|
+
}
|
|
423
|
+
const listed = await this.db
|
|
424
|
+
.selectFrom("catalog_item_scope_orgs")
|
|
425
|
+
.select("item_id")
|
|
426
|
+
.where("item_id", "=", itemId)
|
|
427
|
+
.where("org_id", "=", orgId)
|
|
428
|
+
.executeTakeFirst();
|
|
429
|
+
if (!visibleTo({ scope: item.builtin ? "all" : item.scope }, listed !== undefined)) {
|
|
430
|
+
// Shown to other orgs: the org sees it and may request access, but cannot switch it on
|
|
431
|
+
if (requestable(item, false))
|
|
432
|
+
throw notOffered();
|
|
433
|
+
throw itemNotFound();
|
|
434
|
+
}
|
|
435
|
+
return item;
|
|
436
|
+
}
|
|
437
|
+
/** The org's live plugin install of the item, if any. */
|
|
438
|
+
liveInstall(orgId, itemId) {
|
|
439
|
+
return this.db
|
|
440
|
+
.selectFrom("plugin_installs")
|
|
441
|
+
.select("id")
|
|
442
|
+
.where("org_id", "=", orgId)
|
|
443
|
+
.where("item_id", "=", itemId)
|
|
444
|
+
.where("status", "in", ["installing", "installed", "upgrading"])
|
|
445
|
+
.executeTakeFirst();
|
|
573
446
|
}
|
|
574
447
|
/**
|
|
575
|
-
*
|
|
576
|
-
*
|
|
577
|
-
*
|
|
578
|
-
*
|
|
448
|
+
* The org admin's switch of a plugin (`PUT catalog/:itemId/switch`). On: installs it (or just
|
|
449
|
+
* records the switch when it is installed already). Off: refused for builtin items
|
|
450
|
+
* (`plugin.scope_locked`; an `all` one may go off, layering spec §4); without `confirm` returns
|
|
451
|
+
* the uninstall preview and its hash, with the hash of the current preview uninstalls (a changed
|
|
452
|
+
* preview -> `plugin.switch_stale`). The switch row is written after the install / uninstall.
|
|
579
453
|
*/
|
|
580
|
-
async
|
|
454
|
+
async setSwitch(orgId, actor, itemId, body, actorTokenId, auditDetail) {
|
|
455
|
+
if (!UUID_RE.test(itemId))
|
|
456
|
+
throw itemNotFound();
|
|
581
457
|
await this.assertCanInstall(orgId, actor);
|
|
582
|
-
const
|
|
583
|
-
const
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
.
|
|
592
|
-
|
|
458
|
+
const item = await this.visibleItem(orgId, itemId);
|
|
459
|
+
const opts = {
|
|
460
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
461
|
+
...(auditDetail !== undefined && { auditDetail }),
|
|
462
|
+
};
|
|
463
|
+
if (body.enabled) {
|
|
464
|
+
if (item.disabled)
|
|
465
|
+
throw pluginDisabled();
|
|
466
|
+
if ((await this.liveInstall(orgId, itemId)) !== undefined) {
|
|
467
|
+
await this.recordSwitch(orgId, actor, itemId, true);
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
await this.install(orgId, actor, itemId, body.inputs ?? {}, actorTokenId, auditDetail);
|
|
471
|
+
}
|
|
472
|
+
return { kind: "done", item: await this.itemOf(orgId, actor, itemId) };
|
|
473
|
+
}
|
|
474
|
+
if (!switchable(item)) {
|
|
475
|
+
throw new ApiError("plugin.scope_locked", "This plugin is built in: it is on for every organization and cannot be switched off here");
|
|
476
|
+
}
|
|
477
|
+
const live = await this.liveInstall(orgId, itemId);
|
|
478
|
+
if (live === undefined) {
|
|
479
|
+
await this.recordSwitch(orgId, actor, itemId, false);
|
|
480
|
+
return { kind: "done", item: await this.itemOf(orgId, actor, itemId) };
|
|
481
|
+
}
|
|
482
|
+
const preview = await this.pluginInstaller.previewUninstall(orgId, live.id);
|
|
483
|
+
const confirm = uninstallPreviewHash(preview);
|
|
484
|
+
if (body.confirm === undefined)
|
|
485
|
+
return { kind: "preview", preview, confirm };
|
|
486
|
+
// The hash is re-checked and the switch row written inside the uninstall's transaction
|
|
487
|
+
await this.pluginInstaller.uninstall(orgId, actor, live.id, opts, { expectHash: body.confirm });
|
|
488
|
+
return { kind: "done", item: await this.itemOf(orgId, actor, itemId) };
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* `DELETE plugin-installs/:installId` of a catalog plugin follows the switch-off semantics: builtin
|
|
492
|
+
* items are refused (`plugin.scope_locked`) unless the install is not live (failed, or
|
|
493
|
+
* `installing`: the installer cleans up a stale one and refuses a fresh one). Removing a live
|
|
494
|
+
* install writes the switch row false in the uninstall's transaction (an `all` item then stays
|
|
495
|
+
* off in the org); removing a failed or stale one writes none.
|
|
496
|
+
*/
|
|
497
|
+
async uninstall(orgId, actor, installId, actorTokenId,
|
|
498
|
+
/** Merged into the audit detail (a write made through the Platform tool). */
|
|
499
|
+
auditDetail) {
|
|
500
|
+
if (!UUID_RE.test(installId))
|
|
501
|
+
throw new ApiError("plugin.install_not_found", "Plugin install not found");
|
|
502
|
+
const row = await this.db
|
|
503
|
+
.selectFrom("plugin_installs as a")
|
|
504
|
+
.innerJoin("catalog_items as i", "i.id", "a.item_id")
|
|
505
|
+
.select(["i.scope", "i.builtin", "a.status"])
|
|
506
|
+
.where("a.id", "=", installId)
|
|
507
|
+
.where("a.org_id", "=", orgId)
|
|
508
|
+
.executeTakeFirst();
|
|
509
|
+
// A failed or stuck install is cleaned up whatever the scope (it is not on anyway)
|
|
510
|
+
const live = row?.status === "installed" || row?.status === "upgrading";
|
|
511
|
+
if (row !== undefined && live && !switchable(row)) {
|
|
512
|
+
throw new ApiError("plugin.scope_locked", "This plugin is built in: it is on for every organization and cannot be uninstalled here");
|
|
513
|
+
}
|
|
514
|
+
return this.pluginInstaller.uninstall(orgId, actor, installId, {
|
|
515
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
516
|
+
...(auditDetail !== undefined && { auditDetail }),
|
|
517
|
+
},
|
|
518
|
+
// only a live install was on: removing a failed or stale one writes no switch row, so an
|
|
519
|
+
// item its scope wants stays wanted and the sync installs it again
|
|
520
|
+
row !== undefined && live ? {} : undefined);
|
|
521
|
+
}
|
|
522
|
+
async itemOf(orgId, accountId, itemId) {
|
|
523
|
+
const [item] = await this.list(orgId, accountId, itemId);
|
|
524
|
+
if (!item)
|
|
525
|
+
throw itemNotFound();
|
|
526
|
+
return item;
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Writes the org's switch row of the item under the org row lock. The item row is locked FOR
|
|
530
|
+
* SHARE first (exclusive with a scope change, an unshare, ruling P3-25, and an owner's delete or
|
|
531
|
+
* transfer); switching on re-checks that the org may still see it; the install path re-checks the same in `assertItemInstallable`.
|
|
532
|
+
*/
|
|
533
|
+
async recordSwitch(orgId, actor, itemId, enabled) {
|
|
534
|
+
await this.orgLock.lock(orgId);
|
|
535
|
+
// Both directions lock the item row FOR SHARE: an owner's delete or transfer (FOR UPDATE)
|
|
536
|
+
// decides on who uses it, so a switch-off racing it must not change that answer meanwhile
|
|
537
|
+
const item = await this.db
|
|
538
|
+
.selectFrom("catalog_items")
|
|
539
|
+
.select(["scope", "builtin"])
|
|
540
|
+
.where("id", "=", itemId)
|
|
541
|
+
.where("deleted_at", "is", null)
|
|
542
|
+
.forShare()
|
|
543
|
+
.executeTakeFirst();
|
|
544
|
+
if (enabled) {
|
|
545
|
+
if (!item)
|
|
593
546
|
throw itemNotFound();
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
if (locked.policy !== "needs_approval")
|
|
597
|
-
return undefined;
|
|
598
|
-
const grant = await t
|
|
599
|
-
.selectFrom("catalog_org_grants")
|
|
547
|
+
const listed = await this.db
|
|
548
|
+
.selectFrom("catalog_item_scope_orgs")
|
|
600
549
|
.select("item_id")
|
|
601
550
|
.where("item_id", "=", itemId)
|
|
602
551
|
.where("org_id", "=", orgId)
|
|
603
552
|
.executeTakeFirst();
|
|
604
|
-
if (
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
});
|
|
608
|
-
if (pending !== undefined) {
|
|
609
|
-
return { status: 202, request: await this.d.requests.view(this.d.db, pending) };
|
|
553
|
+
if (!visibleTo({ scope: item.builtin ? "all" : item.scope }, listed !== undefined)) {
|
|
554
|
+
throw itemNotFound();
|
|
555
|
+
}
|
|
610
556
|
}
|
|
611
|
-
|
|
612
|
-
status: 200,
|
|
613
|
-
install: await this.d.pluginUpgrader.upgrade(orgId, actor, installId, body, opts, diff),
|
|
614
|
-
};
|
|
557
|
+
await upsertOrgSwitch(this.db, orgId, itemId, enabled, actor);
|
|
615
558
|
}
|
|
616
559
|
/** The actor can install something in the org (forbidden otherwise), checked before item errors. */
|
|
617
560
|
async assertCanInstall(orgId, actor) {
|
|
618
|
-
await this.
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
throw new ApiError("forbidden", "Insufficient organization role");
|
|
623
|
-
});
|
|
561
|
+
const { role } = await this.orgLock.lockAndAuthorize(orgId, actor, "catalog.read");
|
|
562
|
+
const canAny = ["org.extensions.manage", "connectors.manage", "skills.manage"].some((a) => can(role, a));
|
|
563
|
+
if (!canAny)
|
|
564
|
+
throw new ApiError("forbidden", "Insufficient organization role");
|
|
624
565
|
}
|
|
625
|
-
}
|
|
566
|
+
};
|
|
567
|
+
__decorate([
|
|
568
|
+
Transactional()
|
|
569
|
+
], OrgCatalogService.prototype, "recordSwitch", null);
|
|
570
|
+
__decorate([
|
|
571
|
+
Transactional()
|
|
572
|
+
], OrgCatalogService.prototype, "assertCanInstall", null);
|
|
573
|
+
OrgCatalogService = __decorate([
|
|
574
|
+
Injectable(),
|
|
575
|
+
__param(0, Inject(KernelDb)),
|
|
576
|
+
__param(1, Inject(OrgLock)),
|
|
577
|
+
__param(2, Inject(StorageService)),
|
|
578
|
+
__param(3, Inject(ExtensionRegistry)),
|
|
579
|
+
__param(4, Inject(PluginInstaller)),
|
|
580
|
+
__param(5, Inject(KERNEL_LOGGER)),
|
|
581
|
+
__param(6, Inject(TransactionHost)),
|
|
582
|
+
__param(7, Inject(ExtensionAvailability))
|
|
583
|
+
], OrgCatalogService);
|
|
584
|
+
export { OrgCatalogService };
|