@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.6
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 +61 -5
- package/dist/admin/admin.controller.d.ts +51 -14
- package/dist/admin/admin.controller.js +60 -19
- package/dist/admin/extensions.controller.d.ts +16 -2
- package/dist/admin/extensions.controller.js +26 -6
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +16 -0
- package/dist/agents/agent-lookup.js +11 -0
- package/dist/agents/agents.controller.d.ts +76 -1
- package/dist/agents/agents.controller.js +90 -11
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +32 -6
- package/dist/agents/agents.service.d.ts +54 -23
- package/dist/agents/agents.service.js +180 -76
- package/dist/agents/definition.d.ts +49 -0
- package/dist/agents/definition.js +45 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -0
- package/dist/agents/models.controller.d.ts +34 -5
- package/dist/agents/models.controller.js +50 -6
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -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/readiness.controller.d.ts +5 -5
- package/dist/agents/readiness.controller.js +6 -6
- package/dist/agents/templates.controller.d.ts +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +475 -52
- package/dist/background/background.module.js +8 -1
- package/dist/background/finish.d.ts +3 -2
- package/dist/background/launch-lock.d.ts +4 -3
- package/dist/background/launch-lock.js +4 -3
- package/dist/background/poll.job.d.ts +9 -6
- package/dist/background/poll.job.js +30 -22
- package/dist/background/session.d.ts +13 -2
- package/dist/background/session.js +13 -0
- package/dist/background/stop.d.ts +12 -6
- package/dist/background/stop.js +57 -39
- package/dist/background/store.d.ts +18 -6
- package/dist/background/store.js +12 -6
- package/dist/background/tasks.service.d.ts +15 -5
- package/dist/background/tasks.service.js +42 -17
- package/dist/background/wake-rules.d.ts +27 -18
- package/dist/background/wake-rules.js +52 -22
- package/dist/background/wake.d.ts +13 -11
- package/dist/background/wake.js +20 -14
- package/dist/catalog/admin-catalog.controller.d.ts +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- 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 +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- 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 +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- 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 +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -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 +221 -0
- package/dist/catalog/platform-components.js +761 -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 +178 -34
- package/dist/catalog/plugin-import.js +622 -82
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1147 -1136
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- 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.js +1 -0
- package/dist/channels/cards.js +20 -2
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +10 -2
- package/dist/config/schema.js +70 -22
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +27 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/conversations.controller.d.ts +43 -18
- package/dist/conversations/conversations.controller.js +79 -38
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +7 -7
- package/dist/conversations/conversations.service.d.ts +73 -15
- package/dist/conversations/conversations.service.js +115 -35
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +20 -5
- package/dist/conversations/event-log.js +60 -0
- package/dist/conversations/events.d.ts +84 -2
- package/dist/conversations/events.js +91 -17
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +5 -0
- package/dist/conversations/titles.d.ts +5 -3
- package/dist/conversations/titles.js +21 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +20 -1
- package/dist/ctx/create-ctx.js +38 -7
- package/dist/db/kernel-schema.d.ts +386 -18
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -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 +85 -2
- package/dist/errors.js +85 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +4 -2
- package/dist/evals/run-replay.js +20 -6
- package/dist/evals/runs.service.d.ts +2 -1
- package/dist/evals/runs.service.js +13 -12
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +4 -3
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +65 -42
- package/dist/extensions/admin-view.d.ts +37 -10
- package/dist/extensions/admin-view.js +103 -20
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/deployment-config.d.ts +28 -5
- package/dist/extensions/deployment-config.js +48 -7
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +11 -11
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +24 -10
- package/dist/extensions/host.js +49 -54
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +75 -6
- package/dist/extensions/org-config.js +184 -32
- 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/permission-view.d.ts +16 -4
- package/dist/extensions/permission-view.js +4 -4
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.d.ts +12 -5
- package/dist/extensions/point-defaults.js +37 -9
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +25 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.js +1 -1
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- 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 +1 -1
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +24 -1
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +19 -2
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- 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 +99 -0
- package/dist/models/enablement.js +263 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -4
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +37 -12
- package/dist/models/purposes.js +63 -17
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +9 -7
- package/dist/orgs/offboarding.js +28 -17
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +15 -3
- package/dist/orgs/settings.service.js +6 -2
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -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 +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1405 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -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 +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -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 +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +9 -1
- package/dist/runtime/context/build.d.ts +6 -4
- package/dist/runtime/context/build.js +26 -7
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +5 -4
- package/dist/runtime/context/compaction.js +9 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.d.ts +8 -1
- package/dist/runtime/hook-calls.js +40 -7
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +35 -17
- package/dist/runtime/loop.d.ts +32 -4
- package/dist/runtime/maintenance.d.ts +7 -4
- package/dist/runtime/maintenance.js +23 -8
- package/dist/runtime/model-call.d.ts +38 -11
- package/dist/runtime/model-call.js +97 -24
- package/dist/runtime/providers.d.ts +146 -32
- package/dist/runtime/providers.js +321 -67
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +37 -3
- package/dist/runtime/run-queue.js +188 -11
- package/dist/runtime/run-worker.d.ts +12 -6
- package/dist/runtime/run-worker.js +58 -35
- package/dist/runtime/runtime.module.js +3 -0
- package/dist/runtime/step-log.d.ts +9 -4
- package/dist/runtime/step-log.js +8 -5
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +46 -32
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- 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 +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- 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 +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- 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 +33 -38
- package/dist/runtime/usage-report.js +169 -96
- package/dist/runtime/waits.d.ts +140 -37
- package/dist/runtime/waits.js +394 -106
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +4 -3
- package/dist/sandbox/sandbox.service.d.ts +229 -134
- package/dist/sandbox/sandbox.service.js +630 -409
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +23 -4
- package/dist/tools/builtin-names.d.ts +21 -5
- package/dist/tools/builtin-names.js +30 -5
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +6 -2
- package/dist/tools/builtins/builtin-tools.js +37 -12
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.js +13 -3
- package/dist/tools/builtins/sandbox/common.d.ts +43 -24
- package/dist/tools/builtins/sandbox/common.js +80 -45
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
- package/dist/tools/builtins/sandbox/task-output.js +30 -5
- package/dist/tools/builtins/sandbox/task-stop.js +2 -1
- package/dist/tools/builtins/sandbox/write.js +2 -2
- 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 +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- package/dist/tools/builtins/web/extract.js +5 -1
- package/dist/tools/builtins/web/fetch.js +1 -0
- package/dist/tools/builtins/web/search.js +1 -0
- package/dist/tools/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- 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 +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +193 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +98 -5
- package/dist/tools/registry.js +87 -9
- package/dist/tools/tools.module.js +12 -2
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- 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/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -32
- package/dist/extensions/org-config.controller.js +0 -70
|
@@ -0,0 +1,213 @@
|
|
|
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 { Controller, Delete, Get, HttpCode, Inject, Post, Put, Req } from "@nestjs/common";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { ApiError } from "../errors.js";
|
|
13
|
+
import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
|
|
14
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
15
|
+
import { ZBody, ZParam } from "../infra/validation/zod-params.js";
|
|
16
|
+
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
17
|
+
import { CatalogScopeService } from "./catalog-scope.service.js";
|
|
18
|
+
import { OrgPluginUploads, } from "./org-plugin-uploads.js";
|
|
19
|
+
import { OwnedItems } from "./owned-items.js";
|
|
20
|
+
const StagingParams = z.object({ stagingId: z.string().min(1).max(100) });
|
|
21
|
+
const OwnedParams = z.object({ id: z.string().min(1).max(100) });
|
|
22
|
+
const ConfirmBody = z
|
|
23
|
+
.object({
|
|
24
|
+
reviewHash: z.string().min(1).max(128),
|
|
25
|
+
/** The org shares the new item with other orgs (default false, P3-16). */
|
|
26
|
+
shareable: z.boolean().optional(),
|
|
27
|
+
/** Skill names suggested as pinned (spec §9.1); omitted keeps the plugin's flags. */
|
|
28
|
+
pinnedSuggestions: z.array(z.string().min(1).max(64)).max(50).optional(),
|
|
29
|
+
})
|
|
30
|
+
.strict();
|
|
31
|
+
class OrgUploadStagingParams extends createZodDto(StagingParams, "OrgUploadStagingParams") {
|
|
32
|
+
}
|
|
33
|
+
class OrgUploadConfirmBody extends createZodDto(ConfirmBody, "OrgUploadConfirmBody") {
|
|
34
|
+
}
|
|
35
|
+
class OrgOwnedPluginParams extends createZodDto(OwnedParams, "OrgOwnedPluginParams") {
|
|
36
|
+
}
|
|
37
|
+
const ShareableBody = z.object({ shareable: z.boolean() }).strict();
|
|
38
|
+
const DeleteBody = z.object({ previewHash: z.string().min(1).max(128) }).strict();
|
|
39
|
+
class OrgOwnedShareableBody extends createZodDto(ShareableBody, "OrgOwnedShareableBody") {
|
|
40
|
+
}
|
|
41
|
+
class OrgOwnedDeleteBody extends createZodDto(DeleteBody, "OrgOwnedDeleteBody") {
|
|
42
|
+
}
|
|
43
|
+
const actorOpts = (actor) => {
|
|
44
|
+
const tokenId = patTokenId(actor);
|
|
45
|
+
return tokenId !== undefined ? { actorTokenId: tokenId } : {};
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* An org admin's plugin uploads (`/api/v1/orgs/:orgId/catalog/uploads/*`, spec §14, rulings P3-7,
|
|
49
|
+
* P3-8): a `.tgz` without an extension, prepared (one review) and confirmed like the super admin's
|
|
50
|
+
* import, owned by the org. Writes re-check the org admin under the org row lock.
|
|
51
|
+
*/
|
|
52
|
+
let OrgPluginUploadsController = class OrgPluginUploadsController {
|
|
53
|
+
uploads;
|
|
54
|
+
constructor(uploads) {
|
|
55
|
+
this.uploads = uploads;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Prepares an upload (the tgz as the raw body, `application/octet-stream`, at most
|
|
59
|
+
* `packages.maxBytes`): `{ stagingId, review, update }`, the staging kept 24 hours for this org.
|
|
60
|
+
* The checks of the platform import, plus: `customSkills` = deny with skills or agent templates,
|
|
61
|
+
* or `customConnectors` = deny with connector templates -> 403 `catalog.custom_disabled`
|
|
62
|
+
* (ruling P3-15'); a name live for another owner -> 409 `plugin.name_taken` (details
|
|
63
|
+
* `[{ owner }]`); a dependency the org cannot use -> 409 `plugin.dependency_unavailable`
|
|
64
|
+
* (details `[{ dependencies }]`).
|
|
65
|
+
*/
|
|
66
|
+
async upload(principal, org, req) {
|
|
67
|
+
const actor = requireUser(principal);
|
|
68
|
+
const body = req.body;
|
|
69
|
+
if (!Buffer.isBuffer(body) || body.byteLength === 0) {
|
|
70
|
+
throw new ApiError("unsupported_media_type", "Send the plugin package (.tgz) as the request body with content-type application/octet-stream");
|
|
71
|
+
}
|
|
72
|
+
return this.uploads.prepare(actor.account.id, org.orgId, new Uint8Array(body.buffer, body.byteOffset, body.byteLength), actorOpts(actor));
|
|
73
|
+
}
|
|
74
|
+
/** The org's staged upload; unknown, expired, confirmed, another org's or the platform's -> 404. */
|
|
75
|
+
staged(org, params) {
|
|
76
|
+
return this.uploads.staged(org.orgId, params.stagingId);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Confirms the org's staged upload (201 `{ item, outcome }`): a new item owned by the org, scope
|
|
80
|
+
* `named: [org]`, not shown to other orgs, `shareable` as sent (default false), installed in the
|
|
81
|
+
* org by the scope sync (`installed`); a new version of its own item (`updated`). The checks of
|
|
82
|
+
* prepare run again under the item name's lock (the first confirm of a name wins). A package
|
|
83
|
+
* with an extension waits for the super admin (`pending`, ruling P3-10): stored, its extension
|
|
84
|
+
* name claimed (another package's -> 409 `extension.name_conflict` naming the owner), nothing
|
|
85
|
+
* installed or usable until confirmed in 待确认; a later upload replaces the pending version
|
|
86
|
+
* (P3-11). A version without an extension for an item whose first version still waits replaces
|
|
87
|
+
* that upload and is installed at once (`installed`).
|
|
88
|
+
*/
|
|
89
|
+
confirm(principal, org, params, body) {
|
|
90
|
+
const actor = requireUser(principal);
|
|
91
|
+
return this.uploads.confirm(actor.account.id, org.orgId, params.stagingId, {
|
|
92
|
+
reviewHash: body.reviewHash,
|
|
93
|
+
...(body.shareable !== undefined && { shareable: body.shareable }),
|
|
94
|
+
...(body.pinnedSuggestions !== undefined && { pinnedSuggestions: body.pinnedSuggestions }),
|
|
95
|
+
}, actorOpts(actor));
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
__decorate([
|
|
99
|
+
Post("file"),
|
|
100
|
+
HttpCode(200),
|
|
101
|
+
OrgAction("catalog.upload"),
|
|
102
|
+
__param(0, CurrentPrincipal()),
|
|
103
|
+
__param(1, CurrentOrg()),
|
|
104
|
+
__param(2, Req())
|
|
105
|
+
], OrgPluginUploadsController.prototype, "upload", null);
|
|
106
|
+
__decorate([
|
|
107
|
+
Get(":stagingId"),
|
|
108
|
+
OrgAction("catalog.upload"),
|
|
109
|
+
__param(0, CurrentOrg()),
|
|
110
|
+
__param(1, ZParam(OrgUploadStagingParams))
|
|
111
|
+
], OrgPluginUploadsController.prototype, "staged", null);
|
|
112
|
+
__decorate([
|
|
113
|
+
Post(":stagingId/confirm"),
|
|
114
|
+
HttpCode(201),
|
|
115
|
+
OrgAction("catalog.upload"),
|
|
116
|
+
__param(0, CurrentPrincipal()),
|
|
117
|
+
__param(1, CurrentOrg()),
|
|
118
|
+
__param(2, ZParam(OrgUploadStagingParams)),
|
|
119
|
+
__param(3, ZBody(OrgUploadConfirmBody))
|
|
120
|
+
], OrgPluginUploadsController.prototype, "confirm", null);
|
|
121
|
+
OrgPluginUploadsController = __decorate([
|
|
122
|
+
Controller("api/v1/orgs/:orgId/catalog/uploads"),
|
|
123
|
+
__param(0, Inject(OrgPluginUploads))
|
|
124
|
+
], OrgPluginUploadsController);
|
|
125
|
+
export { OrgPluginUploadsController };
|
|
126
|
+
/**
|
|
127
|
+
* The org's own plugins (`/api/v1/orgs/:orgId/owned-plugins/*`, spec §14, P3-17 to P3-19): the
|
|
128
|
+
* owner org's admin withdraws a pending upload, toggles 可共享 and deletes the plugin after a
|
|
129
|
+
* preview. Another org's or a platform plugin -> 404. Writes re-check the org admin under the org
|
|
130
|
+
* row lock.
|
|
131
|
+
*/
|
|
132
|
+
let OrgOwnedPluginsController = class OrgOwnedPluginsController {
|
|
133
|
+
scope;
|
|
134
|
+
owned;
|
|
135
|
+
constructor(scope, owned) {
|
|
136
|
+
this.scope = scope;
|
|
137
|
+
this.owned = owned;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Sets 可共享 (ruling P3-2: the plugin and its component rows in one transaction; turning it
|
|
141
|
+
* off keeps the orgs already associated and hides it from new ones, ruling P3-25). 204.
|
|
142
|
+
*/
|
|
143
|
+
async setShareable(principal, org, params, body) {
|
|
144
|
+
const actor = requireUser(principal);
|
|
145
|
+
await this.owned.setShareable(org.orgId, actor.account.id, { kind: "plugin", id: params.id }, body.shareable, actorOpts(actor));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* What deleting the plugin does (P3-19, nothing written): `outcome` `removed` (no other org
|
|
149
|
+
* uses it) or `transferred` (to the platform), `orgs` the other orgs using it, `agents` the
|
|
150
|
+
* org's agents that lose it, and the `previewHash` to confirm.
|
|
151
|
+
*/
|
|
152
|
+
previewDelete(org, params) {
|
|
153
|
+
return this.owned.previewDelete(org.orgId, params.id);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Deletes the plugin after its preview: removed, or transferred to the platform when another
|
|
157
|
+
* org uses it (platform notice `ownership_transferred`). A preview that changed meanwhile ->
|
|
158
|
+
* 409 `catalog.preview_stale`. 204.
|
|
159
|
+
*/
|
|
160
|
+
async delete(principal, org, params, body) {
|
|
161
|
+
const actor = requireUser(principal);
|
|
162
|
+
await this.owned.delete(org.orgId, actor.account.id, params.id, body.previewHash, actorOpts(actor));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Withdraws the org's pending upload of the plugin (ruling P3-10, no notice): a first version
|
|
166
|
+
* is removed (its name free again), a new version's pending state cleared (the platform version
|
|
167
|
+
* keeps running). Another org's or a platform plugin -> 404; nothing pending -> 409
|
|
168
|
+
* `extension.not_pending`. 204.
|
|
169
|
+
*/
|
|
170
|
+
async withdraw(principal, org, params) {
|
|
171
|
+
const actor = requireUser(principal);
|
|
172
|
+
await this.scope.withdraw(org.orgId, actor.account.id, params.id, actorOpts(actor));
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
__decorate([
|
|
176
|
+
Put(":id/shareable"),
|
|
177
|
+
HttpCode(204),
|
|
178
|
+
OrgAction("catalog.upload"),
|
|
179
|
+
__param(0, CurrentPrincipal()),
|
|
180
|
+
__param(1, CurrentOrg()),
|
|
181
|
+
__param(2, ZParam(OrgOwnedPluginParams)),
|
|
182
|
+
__param(3, ZBody(OrgOwnedShareableBody))
|
|
183
|
+
], OrgOwnedPluginsController.prototype, "setShareable", null);
|
|
184
|
+
__decorate([
|
|
185
|
+
Post(":id/delete/preview"),
|
|
186
|
+
HttpCode(200),
|
|
187
|
+
OrgAction("catalog.upload"),
|
|
188
|
+
__param(0, CurrentOrg()),
|
|
189
|
+
__param(1, ZParam(OrgOwnedPluginParams))
|
|
190
|
+
], OrgOwnedPluginsController.prototype, "previewDelete", null);
|
|
191
|
+
__decorate([
|
|
192
|
+
Post(":id/delete"),
|
|
193
|
+
HttpCode(204),
|
|
194
|
+
OrgAction("catalog.upload"),
|
|
195
|
+
__param(0, CurrentPrincipal()),
|
|
196
|
+
__param(1, CurrentOrg()),
|
|
197
|
+
__param(2, ZParam(OrgOwnedPluginParams)),
|
|
198
|
+
__param(3, ZBody(OrgOwnedDeleteBody))
|
|
199
|
+
], OrgOwnedPluginsController.prototype, "delete", null);
|
|
200
|
+
__decorate([
|
|
201
|
+
Delete(":id/pending"),
|
|
202
|
+
HttpCode(204),
|
|
203
|
+
OrgAction("catalog.upload"),
|
|
204
|
+
__param(0, CurrentPrincipal()),
|
|
205
|
+
__param(1, CurrentOrg()),
|
|
206
|
+
__param(2, ZParam(OrgOwnedPluginParams))
|
|
207
|
+
], OrgOwnedPluginsController.prototype, "withdraw", null);
|
|
208
|
+
OrgOwnedPluginsController = __decorate([
|
|
209
|
+
Controller("api/v1/orgs/:orgId/owned-plugins"),
|
|
210
|
+
__param(0, Inject(CatalogScopeService)),
|
|
211
|
+
__param(1, Inject(OwnedItems))
|
|
212
|
+
], OrgOwnedPluginsController);
|
|
213
|
+
export { OrgOwnedPluginsController };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ActorOpts, CatalogItemView } from "./catalog.service.js";
|
|
2
|
+
import { CatalogScopeService } from "./catalog-scope.service.js";
|
|
3
|
+
import { PluginImport, type PluginReview } from "./plugin-import.js";
|
|
4
|
+
import { PlatformPluginUpdater, type PlatformUpdatePreview } from "./plugin-upgrade.js";
|
|
5
|
+
/** A staged org upload: the review, and the update preview of a new version (null: none). */
|
|
6
|
+
export interface OrgUploadReview {
|
|
7
|
+
stagingId: string;
|
|
8
|
+
/**
|
|
9
|
+
* The review. For a new version of the org's own plugin its `reviewHash` covers the update
|
|
10
|
+
* preview too (one hash, ruling P3-12): confirm with it.
|
|
11
|
+
*/
|
|
12
|
+
review: PluginReview;
|
|
13
|
+
/**
|
|
14
|
+
* The platform update a new version of the org's own plugin without an extension applies at
|
|
15
|
+
* once (ruling P3-12); null for a first upload and for a version with an extension (it waits for
|
|
16
|
+
* the super admin, plan Task 6).
|
|
17
|
+
*/
|
|
18
|
+
update: PlatformUpdatePreview | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* What a confirmed org upload did: `installed` (a new item, installed in the owner org by the scope
|
|
22
|
+
* sync), `pending` (waiting for the super admin: an extension, plan Task 6), `updated` (a new
|
|
23
|
+
* version of the org's own item, applied through the platform updater).
|
|
24
|
+
*/
|
|
25
|
+
export type OrgUploadOutcome = "installed" | "pending" | "updated";
|
|
26
|
+
/** The hash an org confirms a new version with: the review's and the update's (P3-12). */
|
|
27
|
+
export declare function ownerUpdateHash(reviewHash: string, diffHash: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* An org admin's plugin upload (spec §14.1 item 1, rulings P3-7, P3-8, P3-12, P3-13 to P3-15'): a
|
|
30
|
+
* `.tgz` prepared and confirmed through {@link PluginImport} in owner mode (the org's own staging,
|
|
31
|
+
* its admin re-checked under the org row lock), owned by the org with scope `named: [owner]`. After
|
|
32
|
+
* the confirm's commit the item's scope sync is enqueued here (as `CatalogScopeService.confirmImport`
|
|
33
|
+
* does; `PluginImport` cannot reach the scope service, which depends on it), and installs it in the
|
|
34
|
+
* owner org.
|
|
35
|
+
*
|
|
36
|
+
* A new version of the org's own plugin without an extension (P3-12, P3-12') is reviewed with the
|
|
37
|
+
* platform update it applies (`PlatformPluginUpdater.previewForOwner` on the staged target,
|
|
38
|
+
* pre-flight F3) and one hash ({@link ownerUpdateHash}); the confirm checks it, commits the version,
|
|
39
|
+
* then runs `updateAsOwner` with that diff. A failed update leaves the version imported; the same
|
|
40
|
+
* tgz uploaded again gets an update-only review (F4) whose confirm retries the update. Pinned
|
|
41
|
+
* suggestions are the plugin's own on a new version (they would change the reviewed update).
|
|
42
|
+
*/
|
|
43
|
+
export declare class OrgPluginUploads {
|
|
44
|
+
private readonly pluginImport;
|
|
45
|
+
private readonly scope;
|
|
46
|
+
private readonly updater;
|
|
47
|
+
constructor(pluginImport: PluginImport, scope: CatalogScopeService, updater: PlatformPluginUpdater);
|
|
48
|
+
/** Reads, checks and stages the uploaded tgz for the org (see `PluginImport.prepare`). */
|
|
49
|
+
prepare(actor: string, orgId: string, bytes: Uint8Array, opts?: ActorOpts): Promise<OrgUploadReview>;
|
|
50
|
+
/** The org's own staged upload; another org's or the platform's -> 404 `plugin.staging_not_found`. */
|
|
51
|
+
staged(orgId: string, stagingId: string): Promise<OrgUploadReview>;
|
|
52
|
+
/** Confirms the org's staged upload (applying a new version), then enqueues the scope sync. */
|
|
53
|
+
confirm(actor: string, orgId: string, stagingId: string, input: {
|
|
54
|
+
reviewHash: string;
|
|
55
|
+
shareable?: boolean;
|
|
56
|
+
pinnedSuggestions?: string[];
|
|
57
|
+
}, opts?: ActorOpts): Promise<{
|
|
58
|
+
item: CatalogItemView;
|
|
59
|
+
outcome: OrgUploadOutcome;
|
|
60
|
+
}>;
|
|
61
|
+
/** The review with the update preview of a new version and the combined hash (P3-12). */
|
|
62
|
+
private withUpdate;
|
|
63
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
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 { createHash } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { ApiError } from "../errors.js";
|
|
13
|
+
import { canonicalJson } from "../tools/canonical-json.js";
|
|
14
|
+
import { CatalogScopeService } from "./catalog-scope.service.js";
|
|
15
|
+
import { PluginImport } from "./plugin-import.js";
|
|
16
|
+
import { PlatformPluginUpdater } from "./plugin-upgrade.js";
|
|
17
|
+
/** The hash an org confirms a new version with: the review's and the update's (P3-12). */
|
|
18
|
+
export function ownerUpdateHash(reviewHash, diffHash) {
|
|
19
|
+
return createHash("sha256")
|
|
20
|
+
.update(canonicalJson({ reviewHash, diffHash }))
|
|
21
|
+
.digest("hex")
|
|
22
|
+
.slice(0, 32);
|
|
23
|
+
}
|
|
24
|
+
const reviewStale = (name, version) => new ApiError("plugin.review_stale", `The review of plugin ${name} ${version} is out of date (it changed, or its extension on this deployment changed since it was prepared); review it again`);
|
|
25
|
+
/**
|
|
26
|
+
* An org admin's plugin upload (spec §14.1 item 1, rulings P3-7, P3-8, P3-12, P3-13 to P3-15'): a
|
|
27
|
+
* `.tgz` prepared and confirmed through {@link PluginImport} in owner mode (the org's own staging,
|
|
28
|
+
* its admin re-checked under the org row lock), owned by the org with scope `named: [owner]`. After
|
|
29
|
+
* the confirm's commit the item's scope sync is enqueued here (as `CatalogScopeService.confirmImport`
|
|
30
|
+
* does; `PluginImport` cannot reach the scope service, which depends on it), and installs it in the
|
|
31
|
+
* owner org.
|
|
32
|
+
*
|
|
33
|
+
* A new version of the org's own plugin without an extension (P3-12, P3-12') is reviewed with the
|
|
34
|
+
* platform update it applies (`PlatformPluginUpdater.previewForOwner` on the staged target,
|
|
35
|
+
* pre-flight F3) and one hash ({@link ownerUpdateHash}); the confirm checks it, commits the version,
|
|
36
|
+
* then runs `updateAsOwner` with that diff. A failed update leaves the version imported; the same
|
|
37
|
+
* tgz uploaded again gets an update-only review (F4) whose confirm retries the update. Pinned
|
|
38
|
+
* suggestions are the plugin's own on a new version (they would change the reviewed update).
|
|
39
|
+
*/
|
|
40
|
+
let OrgPluginUploads = class OrgPluginUploads {
|
|
41
|
+
pluginImport;
|
|
42
|
+
scope;
|
|
43
|
+
updater;
|
|
44
|
+
constructor(pluginImport, scope, updater) {
|
|
45
|
+
this.pluginImport = pluginImport;
|
|
46
|
+
this.scope = scope;
|
|
47
|
+
this.updater = updater;
|
|
48
|
+
}
|
|
49
|
+
/** Reads, checks and stages the uploaded tgz for the org (see `PluginImport.prepare`). */
|
|
50
|
+
async prepare(actor, orgId, bytes, opts = {}) {
|
|
51
|
+
const r = await this.pluginImport.prepare(actor, bytes, { kind: "file", ref: "upload" }, { ...opts, owner: { orgId } });
|
|
52
|
+
return this.withUpdate(orgId, r.stagingId, r.review);
|
|
53
|
+
}
|
|
54
|
+
/** The org's own staged upload; another org's or the platform's -> 404 `plugin.staging_not_found`. */
|
|
55
|
+
async staged(orgId, stagingId) {
|
|
56
|
+
const r = await this.pluginImport.staged(stagingId, { orgId });
|
|
57
|
+
return this.withUpdate(orgId, r.stagingId, r.review);
|
|
58
|
+
}
|
|
59
|
+
/** Confirms the org's staged upload (applying a new version), then enqueues the scope sync. */
|
|
60
|
+
async confirm(actor, orgId, stagingId, input, opts = {}) {
|
|
61
|
+
const st = await this.pluginImport.stagedTarget(stagingId, { orgId });
|
|
62
|
+
if (!appliesAtOnce(st)) {
|
|
63
|
+
const r = await this.pluginImport.confirm(actor, stagingId, input, {
|
|
64
|
+
...opts,
|
|
65
|
+
owner: { orgId },
|
|
66
|
+
});
|
|
67
|
+
// A version waiting for the super admin is synced by their confirmation (P3-10)
|
|
68
|
+
if (r.pending)
|
|
69
|
+
return { item: r.item, outcome: "pending" };
|
|
70
|
+
await this.scope.enqueueSync(r.item.id);
|
|
71
|
+
return { item: r.item, outcome: r.firstVersion ? "installed" : "updated" };
|
|
72
|
+
}
|
|
73
|
+
if (input.pinnedSuggestions !== undefined) {
|
|
74
|
+
throw new ApiError("validation_failed", "pinnedSuggestions: a new version keeps the plugin's own pinned suggestions", [{ path: "pinnedSuggestions", message: "not allowed for a new version" }]);
|
|
75
|
+
}
|
|
76
|
+
// The one hash covers the review and the update (P3-12): both recomputed now
|
|
77
|
+
const preview = await this.updater.previewForOwner(orgId, st.itemId, st.version, st.target);
|
|
78
|
+
if (input.reviewHash !== ownerUpdateHash(st.reviewHash, preview.diffHash)) {
|
|
79
|
+
throw reviewStale(preview.name, st.version);
|
|
80
|
+
}
|
|
81
|
+
const r = await this.pluginImport.confirm(actor, stagingId, {
|
|
82
|
+
reviewHash: st.reviewHash,
|
|
83
|
+
...(input.shareable !== undefined && { shareable: input.shareable }),
|
|
84
|
+
}, { ...opts, owner: { orgId } });
|
|
85
|
+
// The version is committed; a failed update leaves it imported (uploading it again retries)
|
|
86
|
+
await this.updater.updateAsOwner(orgId, actor, r.item.id, st.version, preview.diffHash, opts);
|
|
87
|
+
return { item: await this.pluginImport.view(r.item.id), outcome: "updated" };
|
|
88
|
+
}
|
|
89
|
+
/** The review with the update preview of a new version and the combined hash (P3-12). */
|
|
90
|
+
async withUpdate(orgId, stagingId, review) {
|
|
91
|
+
const st = await this.pluginImport.stagedTarget(stagingId, { orgId });
|
|
92
|
+
if (!appliesAtOnce(st))
|
|
93
|
+
return { stagingId, review, update: null };
|
|
94
|
+
const update = await this.updater.previewForOwner(orgId, st.itemId, st.version, st.target);
|
|
95
|
+
return {
|
|
96
|
+
stagingId,
|
|
97
|
+
review: { ...review, reviewHash: ownerUpdateHash(review.reviewHash, update.diffHash) },
|
|
98
|
+
update,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
OrgPluginUploads = __decorate([
|
|
103
|
+
Injectable(),
|
|
104
|
+
__param(0, Inject(PluginImport)),
|
|
105
|
+
__param(1, Inject(CatalogScopeService)),
|
|
106
|
+
__param(2, Inject(PlatformPluginUpdater))
|
|
107
|
+
], OrgPluginUploads);
|
|
108
|
+
export { OrgPluginUploads };
|
|
109
|
+
/**
|
|
110
|
+
* A new version of the org's own plugin without an extension: applied at once through the
|
|
111
|
+
* platform updater (P3-12). Not while the item's first version still waits for the super admin:
|
|
112
|
+
* such an upload replaces that first version instead (`PluginImport.commit`, plan Task 6).
|
|
113
|
+
*/
|
|
114
|
+
function appliesAtOnce(st) {
|
|
115
|
+
return st.existing && !st.extension && !st.awaiting;
|
|
116
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { Queue } from "bullmq";
|
|
2
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
3
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
4
|
+
import type { KernelLogger } from "../log.js";
|
|
5
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
6
|
+
import { SkillsService } from "../skills/skills.service.js";
|
|
7
|
+
import { type ActorOpts, CatalogService } from "./catalog.service.js";
|
|
8
|
+
import { CatalogScopeService } from "./catalog-scope.service.js";
|
|
9
|
+
import { type OwnedRef } from "./ownership.js";
|
|
10
|
+
import { PluginInstaller } from "./plugin-install.js";
|
|
11
|
+
/**
|
|
12
|
+
* What deleting an owned plugin does (P3-19): `removed` when no other org uses it, else
|
|
13
|
+
* `transferred` to the platform; `orgs` the other orgs using it (their names were disclosed by
|
|
14
|
+
* `item_shared` notices already), `agents` the owner's agents that lose it. Confirmed with
|
|
15
|
+
* `previewHash`.
|
|
16
|
+
*/
|
|
17
|
+
export interface OwnedDeletePreview {
|
|
18
|
+
outcome: "removed" | "transferred";
|
|
19
|
+
orgs: {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}[];
|
|
23
|
+
agents: {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
}[];
|
|
27
|
+
previewHash: string;
|
|
28
|
+
}
|
|
29
|
+
/** Why an owned item leaves its owner (the `ownership_transferred` notice's `reason`). */
|
|
30
|
+
export type OwnerLeaveReason = "owner_deleted" | "org_deleted";
|
|
31
|
+
/** What deleting an org skill does (`GET orgs/:orgId/skills/:id/delete-preview`, pre-flight F19). */
|
|
32
|
+
export type OwnedSkillDeletePreview = Omit<OwnedDeletePreview, "previewHash">;
|
|
33
|
+
/**
|
|
34
|
+
* The owner org's actions on the items it owns (P3-17: it toggles 可共享, switches the item off in
|
|
35
|
+
* its own org and deletes it; it never changes the scope or the list). The org admin is re-checked
|
|
36
|
+
* under the org row lock; another org's or a platform item -> 404. Stateless, shared by every
|
|
37
|
+
* replica.
|
|
38
|
+
*/
|
|
39
|
+
export declare class OwnedItems {
|
|
40
|
+
private readonly kdb;
|
|
41
|
+
private readonly orgLock;
|
|
42
|
+
private readonly catalog;
|
|
43
|
+
private readonly scope;
|
|
44
|
+
/** The owner org's own uninstall of a removed plugin (ruling P3-41). */
|
|
45
|
+
private readonly installer;
|
|
46
|
+
/** The owner's org skill row, soft-deleted after its promoted platform row leaves it. */
|
|
47
|
+
private readonly skills;
|
|
48
|
+
/** The removed plugin's cleanup job (`owned-plugin-cleanup-<itemId>`, P3-20). */
|
|
49
|
+
private readonly queue;
|
|
50
|
+
private readonly log;
|
|
51
|
+
readonly txHost: TransactionHost;
|
|
52
|
+
constructor(kdb: KernelDb, orgLock: OrgLock, catalog: CatalogService, scope: CatalogScopeService,
|
|
53
|
+
/** The owner org's own uninstall of a removed plugin (ruling P3-41). */
|
|
54
|
+
installer: PluginInstaller,
|
|
55
|
+
/** The owner's org skill row, soft-deleted after its promoted platform row leaves it. */
|
|
56
|
+
skills: SkillsService,
|
|
57
|
+
/** The removed plugin's cleanup job (`owned-plugin-cleanup-<itemId>`, P3-20). */
|
|
58
|
+
queue: Pick<Queue, "add">, log: KernelLogger, txHost: TransactionHost);
|
|
59
|
+
private get db();
|
|
60
|
+
/**
|
|
61
|
+
* The owner org's 可共享 flag of its item, written on the item and (a plugin) every component
|
|
62
|
+
* row in one transaction (ruling P3-2; turning it off narrows as ruling P3-25 says). A skill or
|
|
63
|
+
* an agent template is named by the org row's id (`skills.manage` / `agents.manage`): only the
|
|
64
|
+
* org's own rows (ruling P3-6: not an agent's skill, not a copy of another owner's platform item:
|
|
65
|
+
* 409 `catalog.not_owned`); one it promoted writes its platform row too (pre-flight F16). Audits
|
|
66
|
+
* `catalog.shareable_changed`.
|
|
67
|
+
*/
|
|
68
|
+
setShareable(orgId: string, actor: string, ref: OwnedRef, shareable: boolean, opts?: ActorOpts): Promise<void>;
|
|
69
|
+
/** {@link setShareable} of an org skill or agent template (named by the org row's id). */
|
|
70
|
+
private setComponentShareable;
|
|
71
|
+
/** The other live orgs the item is on in (P3-18, {@link orgsUsing}), by name. */
|
|
72
|
+
usedByOthers(ref: OwnedRef): Promise<{
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
}[]>;
|
|
76
|
+
/**
|
|
77
|
+
* What deleting the org's skill `skillId` does (pre-flight F19, P3-19): one it promoted that
|
|
78
|
+
* another org uses is `transferred` (`orgs`: those orgs), else `removed`; `agents`: the org's
|
|
79
|
+
* agents that lose it (by its id, or its platform id). Not an org-scope skill of the org -> 404
|
|
80
|
+
* `skill.not_found`.
|
|
81
|
+
*/
|
|
82
|
+
previewSkillDelete(orgId: string, skillId: string): Promise<OwnedSkillDeletePreview>;
|
|
83
|
+
/**
|
|
84
|
+
* The owner deletes its org skill (`DELETE orgs/:orgId/skills/:id`, `skills.manage` re-checked
|
|
85
|
+
* under the org row lock): one it promoted goes through {@link transferOrRemove} with reason
|
|
86
|
+
* `owner_deleted` (another org using it keeps it, now the platform's), then the org row is
|
|
87
|
+
* soft-deleted as before (audit `skill.deleted`). Not an org-scope skill of the org -> 404.
|
|
88
|
+
*/
|
|
89
|
+
deleteSkill(orgId: string, actor: string, skillId: string, opts?: ActorOpts): Promise<"transferred" | "removed">;
|
|
90
|
+
/**
|
|
91
|
+
* What deleting the org's own agent template `id` does (ruling P4-12, as
|
|
92
|
+
* {@link previewSkillDelete}): one it promoted that another org uses is `transferred` (`orgs`:
|
|
93
|
+
* those orgs), else `removed`; `agents`: the org's agents whose roster loses it. Not the org's
|
|
94
|
+
* own -> 409 `catalog.not_owned`; missing -> 404 `component.not_found`.
|
|
95
|
+
*/
|
|
96
|
+
previewAgentTemplateDelete(orgId: string, id: string): Promise<OwnedSkillDeletePreview>;
|
|
97
|
+
/**
|
|
98
|
+
* The owner deletes its org template (`DELETE orgs/:orgId/agent-templates/:id`, ruling P4-12;
|
|
99
|
+
* `agents.manage` re-checked under the org row lock), by the P3 owner rules: one it promoted
|
|
100
|
+
* goes through {@link transferOrRemove} with reason `owner_deleted` (another org using it keeps
|
|
101
|
+
* it, now the platform's, ruling P3-19), then the org row is soft-deleted (sub-agents already
|
|
102
|
+
* started keep their frozen definition; the roster skips it). Agents created from it are never
|
|
103
|
+
* touched (ruling P4-3). Audits `agent_template.deleted`. Not the org's own -> 409
|
|
104
|
+
* `catalog.not_owned`; missing -> 404.
|
|
105
|
+
*/
|
|
106
|
+
deleteAgentTemplate(orgId: string, actor: string, id: string, opts?: ActorOpts): Promise<"transferred" | "removed">;
|
|
107
|
+
/**
|
|
108
|
+
* The org-scope skill `skillId` of the org (`forUpdate`: row locked), with the platform row it
|
|
109
|
+
* promoted (`link`; a copy of another owner's platform skill has none here). Missing -> 404.
|
|
110
|
+
*/
|
|
111
|
+
private orgSkill;
|
|
112
|
+
/**
|
|
113
|
+
* The org's own skill or agent template `id` (ruling P3-6), locked with `forUpdate`: missing
|
|
114
|
+
* (or another org's) -> 404; an agent's own skill, or a copy linked to a platform item another
|
|
115
|
+
* owner has (or pinned to one) -> 409 `catalog.not_owned`. `link`: the platform row it promoted.
|
|
116
|
+
*/
|
|
117
|
+
private ownedComponent;
|
|
118
|
+
/** The preview of deleting the org's own plugin (nothing written). */
|
|
119
|
+
previewDelete(orgId: string, itemId: string): Promise<OwnedDeletePreview>;
|
|
120
|
+
/**
|
|
121
|
+
* Deletes the org's own plugin after its preview (P3-19): the preview recomputed under the item
|
|
122
|
+
* row lock must give `previewHash` (else 409 `catalog.preview_stale`), then
|
|
123
|
+
* {@link transferOrRemove} with reason `owner_deleted`.
|
|
124
|
+
*/
|
|
125
|
+
delete(orgId: string, actor: string, itemId: string, previewHash: string, opts?: ActorOpts): Promise<"transferred" | "removed">;
|
|
126
|
+
/**
|
|
127
|
+
* The owner leaves its item, in the caller's transaction (P3-19, P3-20; pre-flight F14, F15).
|
|
128
|
+
* Another live org uses it ({@link orgsUsing}) -> `transferred`: the item and its components
|
|
129
|
+
* become platform-owned, a pending version is cleared, `shown_to_others` is turned off when the
|
|
130
|
+
* owner had not made it shareable (no exposure the owner switched off), the former owner leaves
|
|
131
|
+
* the list and its switches (an `all` scope, the item's or a component's own, is narrowed to
|
|
132
|
+
* `named` = the orgs using it, ruling P3-39; an `optional` item stays `optional`, ruling P3-40:
|
|
133
|
+
* it passed the share gate already, so every org could see it, and the former owner is then an
|
|
134
|
+
* ordinary org that may switch it on again), written
|
|
135
|
+
* directly rather than through the guarded scope writer (ruling P3-27); platform notice
|
|
136
|
+
* `ownership_transferred`, audit `catalog.ownership_transferred`, the scope sync enqueued after
|
|
137
|
+
* the commit (it uninstalls the former owner's install). Otherwise -> `removed`: the soft delete
|
|
138
|
+
* of `catalog.remove` ({@link CatalogService.removeIn}) and, after the commit, the cleanup job
|
|
139
|
+
* `owned-plugin-cleanup-<itemId>` that takes its extension out; an owner delete
|
|
140
|
+
* (`owner_deleted`) also uninstalls it in the owner org through the normal uninstall, keeping the
|
|
141
|
+
* connectors it created as the org's own (ruling P3-41). A first upload still waiting is never
|
|
142
|
+
* transferred. A gone or platform item -> 404.
|
|
143
|
+
*/
|
|
144
|
+
transferOrRemove(ref: OwnedRef, reason: OwnerLeaveReason, actor: string | null, opts?: ActorOpts): Promise<"transferred" | "removed">;
|
|
145
|
+
/**
|
|
146
|
+
* An org is deleted (P3-20), in `OrgsService.softDeleteIn`'s transaction (PG writes only; the
|
|
147
|
+
* org row is already marked deleted, so it counts as no user): the org's live plugins and the
|
|
148
|
+
* platform skills and agent templates it promoted (ruling P3-3) are locked `FOR UPDATE`, then
|
|
149
|
+
* each goes through {@link transferOrRemove} with reason `org_deleted`. A first upload still
|
|
150
|
+
* waiting is removed and its extension name released here (nothing is installed under it,
|
|
151
|
+
* pre-flight F10); a pending new version of a transferred plugin is cleared; a removed plugin's
|
|
152
|
+
* extension is taken out by the cleanup job after the commit. The org's unpromoted rows (its own
|
|
153
|
+
* skills, copies, installs) are left: they go with the org as before. Must not inject
|
|
154
|
+
* `OrgsService` (it calls this).
|
|
155
|
+
*/
|
|
156
|
+
onOrgDeleted(orgId: string, actor: string | null, opts?: ActorOpts): Promise<{
|
|
157
|
+
transferred: number;
|
|
158
|
+
removed: number;
|
|
159
|
+
}>;
|
|
160
|
+
/**
|
|
161
|
+
* {@link transferOrRemove} of a platform skill or agent template the org promoted (ruling P3-3;
|
|
162
|
+
* `id` its platform id): another live org uses it -> `transferred`: platform-owned, not shown
|
|
163
|
+
* when the owner had not made it shareable, an `all` scope narrowed to `named` = the orgs using
|
|
164
|
+
* it (ruling P3-39), the former owner off its list and switches, platform notice
|
|
165
|
+
* `ownership_transferred`, audit `catalog.ownership_transferred`. Otherwise `removed`: the
|
|
166
|
+
* platform row is soft-deleted (audit `component.removed`). The owner's org row is the caller's
|
|
167
|
+
* (an owner delete soft-deletes it). Gone or platform-owned -> 404.
|
|
168
|
+
*/
|
|
169
|
+
private transferOrRemoveComponent;
|
|
170
|
+
/** The live orgs other than `except` where component `c` is on now ({@link componentOn}). */
|
|
171
|
+
private componentOrgsOn;
|
|
172
|
+
/**
|
|
173
|
+
* The owner org's live install of a removed plugin, uninstalled in the caller's transaction
|
|
174
|
+
* through the normal uninstall (ruling P3-41): `via: "scope"` (the item is gone, so no scope
|
|
175
|
+
* wants it), which keeps the connectors it created as the org's own. One that another install
|
|
176
|
+
* still depends on, or one still installing, stays (logged).
|
|
177
|
+
*/
|
|
178
|
+
private uninstallInOwner;
|
|
179
|
+
/** Enqueues the removed plugin's cleanup; a failure only warns (the daily sweep repairs it). */
|
|
180
|
+
enqueueCleanup(itemId: string): Promise<void>;
|
|
181
|
+
private computeDelete;
|
|
182
|
+
/** The org's own live plugin (`forUpdate`: row locked); another org's or a platform one -> 404. */
|
|
183
|
+
private ownedRow;
|
|
184
|
+
}
|