@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
package/dist/extensions/hooks.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { HOOKS_AVAILABLE, POLICY_HOOKS, } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { NEEDS_CONFIG_REASON } from "./effective-config.js";
|
|
2
3
|
import { ExtensionUnloadedError } from "./inflight.js";
|
|
3
4
|
/** Default of `hooks.timeoutMs` (used when a host is built without kernel config, e.g. in tests). */
|
|
4
5
|
export const DEFAULT_HOOK_TIMEOUT_MS = 5000;
|
|
@@ -13,6 +14,18 @@ export const OBSERVE_INFLIGHT_MAX = 64;
|
|
|
13
14
|
export const EMPTY_DENY_REASON = "(no reason given)";
|
|
14
15
|
/** Warnings about a plugin's hooks are logged at most once per plugin, mount and kind in this window. */
|
|
15
16
|
const WARN_WINDOW_MS = 60_000;
|
|
17
|
+
/**
|
|
18
|
+
* Thrown by a `usage.report` handler wrapper (see {@link HookRegistry.handlers}) instead of calling
|
|
19
|
+
* a handler whose extension's effective config is not valid in the payload's organization.
|
|
20
|
+
*/
|
|
21
|
+
export class HookNeedsConfigError extends Error {
|
|
22
|
+
plugin;
|
|
23
|
+
constructor(plugin) {
|
|
24
|
+
super(`extension ${plugin} ${NEEDS_CONFIG_REASON}`);
|
|
25
|
+
this.plugin = plugin;
|
|
26
|
+
this.name = "HookNeedsConfigError";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
16
29
|
const AVAILABLE = new Set(HOOKS_AVAILABLE);
|
|
17
30
|
const POLICY = new Set(POLICY_HOOKS);
|
|
18
31
|
/** Error text that never throws itself (a hostile `message` getter or `toString`). */
|
|
@@ -110,7 +123,12 @@ const clipDetail = (s) => clipText(s, HOOK_DETAIL_MAX_CHARS);
|
|
|
110
123
|
* If a plugin the organization enabled is expected to run policy hooks on the mount (deployment
|
|
111
124
|
* state, `expectedPolicy`) but is not loaded on this replica, deny with a generic reason
|
|
112
125
|
* (`hook_error`, `notLoaded`) without running any policy hook (M-1: fail closed). Observe hooks
|
|
113
|
-
* of plugins that are not loaded are simply missing.
|
|
126
|
+
* of plugins that are not loaded are simply missing. Then each enabled plugin with a hook on the
|
|
127
|
+
* mount gets its effective config for the organization (layering spec A §6; one read per plugin
|
|
128
|
+
* and call, failing like the lookup above). A plugin whose config is not valid behaves as one
|
|
129
|
+
* that is not loaded: with a policy hook on the mount the call is denied (`hook_error`,
|
|
130
|
+
* `needsConfig`) without running any policy hook, and its observe hooks are skipped. Every
|
|
131
|
+
* hook is called with `{ config }` as its third argument.
|
|
114
132
|
* 3. Policy hooks run serially by plugin name (registration order within a plugin), each limited
|
|
115
133
|
* by `hooks.timeoutMs` (read on every run, hot). `{ deny }`, an error or a timeout stops the chain
|
|
116
134
|
* and denies (`deny` / `hook_error` / `timeout`). A policy hook cut off by its instance being
|
|
@@ -156,13 +174,18 @@ export class HookRegistry {
|
|
|
156
174
|
}
|
|
157
175
|
/**
|
|
158
176
|
* `usage.report` handlers by plugin name (delivered by the usage queue, not by {@link run}); each
|
|
159
|
-
* call runs through the instance's `inflight.run
|
|
177
|
+
* call runs through the instance's `inflight.run` with the plugin's effective config for the
|
|
178
|
+
* payload's organization, and throws {@link HookNeedsConfigError} without calling the handler
|
|
179
|
+
* when that config is not valid (layering spec A §6).
|
|
160
180
|
*/
|
|
161
181
|
handlers(mount) {
|
|
162
182
|
return this.entries(mount).map(({ src, hook }) => ({
|
|
163
183
|
plugin: src.name,
|
|
164
184
|
handler: (payload, signal) => src.inflight.run(signal, async (s) => {
|
|
165
|
-
await
|
|
185
|
+
const effective = await this.d.effectiveConfig(payload.orgId, src.name);
|
|
186
|
+
if (!effective.ok)
|
|
187
|
+
throw new HookNeedsConfigError(src.name);
|
|
188
|
+
await hook.handler(payload, s, { config: effective.config });
|
|
166
189
|
}),
|
|
167
190
|
}));
|
|
168
191
|
}
|
|
@@ -177,6 +200,8 @@ export class HookRegistry {
|
|
|
177
200
|
let enabled;
|
|
178
201
|
let frozen;
|
|
179
202
|
let missing;
|
|
203
|
+
/** Effective config per enabled plugin with a hook here; null = not valid in the org. */
|
|
204
|
+
const configs = new Map();
|
|
180
205
|
try {
|
|
181
206
|
const abort = abortOf(signal);
|
|
182
207
|
try {
|
|
@@ -194,6 +219,19 @@ export class HookRegistry {
|
|
|
194
219
|
}
|
|
195
220
|
if (!all.some((e) => enabled.has(e.src.name)))
|
|
196
221
|
return { allowed: true };
|
|
222
|
+
for (const name of new Set(all.map((e) => e.src.name).filter((n) => enabled.has(n)))) {
|
|
223
|
+
const abortCfg = abortOf(signal);
|
|
224
|
+
try {
|
|
225
|
+
const e = await Promise.race([
|
|
226
|
+
this.d.effectiveConfig(payload.orgId, name),
|
|
227
|
+
abortCfg.aborted,
|
|
228
|
+
]);
|
|
229
|
+
configs.set(name, e.ok ? { config: e.config } : null);
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
abortCfg.cleanup();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
197
235
|
// Cost: one clone + deep-freeze per call. The model.request payload carries no media bytes
|
|
198
236
|
// (hookRequestOf, I-3), so it stays small. Freezing in place would freeze the logged object.
|
|
199
237
|
// The clone is skipped when has() is false or no enabled plugin has a hook on this mount.
|
|
@@ -207,7 +245,7 @@ export class HookRegistry {
|
|
|
207
245
|
if (firstPolicy !== undefined) {
|
|
208
246
|
// R10: no plugin ran; the named plugin is only the first policy plugin on this mount, so
|
|
209
247
|
// the detail says so instead of blaming it
|
|
210
|
-
const detail = clipDetail(`Hooks could not run (organization lookup or payload copy failed) before any plugin was called; ${firstPolicy} is named only as the first policy plugin on ${mount}: ${raw}`);
|
|
248
|
+
const detail = clipDetail(`Hooks could not run (organization lookup, config read or payload copy failed) before any plugin was called; ${firstPolicy} is named only as the first policy plugin on ${mount}: ${raw}`);
|
|
211
249
|
this.d.log.warn("plugin hooks could not run; denying the call", {
|
|
212
250
|
mount,
|
|
213
251
|
firstPolicyPlugin: firstPolicy,
|
|
@@ -227,9 +265,19 @@ export class HookRegistry {
|
|
|
227
265
|
}
|
|
228
266
|
return { allowed: true };
|
|
229
267
|
}
|
|
230
|
-
const active = all.filter((e) => enabled.has(e.src.name));
|
|
268
|
+
const active = all.filter((e) => enabled.has(e.src.name) && configs.get(e.src.name));
|
|
231
269
|
const timeoutMs = this.d.config().hooks.timeoutMs;
|
|
232
|
-
|
|
270
|
+
// spec A §6: a policy plugin without a valid config in the org behaves as one not loaded
|
|
271
|
+
const needy = [
|
|
272
|
+
...new Set(all
|
|
273
|
+
.filter((e) => e.hook.mode === "policy" && configs.get(e.src.name) === null)
|
|
274
|
+
.map((e) => e.src.name)),
|
|
275
|
+
];
|
|
276
|
+
let outcome = missing.length > 0
|
|
277
|
+
? this.notLoadedDenial(mount, missing)
|
|
278
|
+
: needy.length > 0
|
|
279
|
+
? this.needsConfigDenial(mount, needy)
|
|
280
|
+
: { allowed: true };
|
|
233
281
|
// policy hooks grouped per plugin (entries are sorted, so groups are contiguous)
|
|
234
282
|
const groups = [];
|
|
235
283
|
for (const e of active) {
|
|
@@ -242,7 +290,8 @@ export class HookRegistry {
|
|
|
242
290
|
groups.push({ src: e.src, hooks: [e.hook] });
|
|
243
291
|
}
|
|
244
292
|
for (const g of outcome.allowed ? groups : []) {
|
|
245
|
-
const
|
|
293
|
+
const call = configs.get(g.src.name);
|
|
294
|
+
const denied = await this.runPolicies(mount, g.src, g.hooks, frozen, call, signal, timeoutMs);
|
|
246
295
|
if (denied) {
|
|
247
296
|
outcome = denied;
|
|
248
297
|
break;
|
|
@@ -251,8 +300,10 @@ export class HookRegistry {
|
|
|
251
300
|
// observe hooks are resolved again now: if the plugin was upgraded while the policy hooks ran,
|
|
252
301
|
// the current generation observes (the retiring one no longer accepts calls)
|
|
253
302
|
for (const e of this.entries(mount)) {
|
|
254
|
-
|
|
255
|
-
|
|
303
|
+
const call = configs.get(e.src.name);
|
|
304
|
+
// no config read for it (not valid in the org, or a plugin that appeared meanwhile): skipped
|
|
305
|
+
if (e.hook.mode === "observe" && enabled.has(e.src.name) && call) {
|
|
306
|
+
this.dispatchObserve(mount, e.src, e.hook, frozen, call, signal);
|
|
256
307
|
}
|
|
257
308
|
}
|
|
258
309
|
return outcome;
|
|
@@ -277,6 +328,21 @@ export class HookRegistry {
|
|
|
277
328
|
notLoaded: true,
|
|
278
329
|
};
|
|
279
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* The layering spec A §6 denial: `needy` (sorted) are enabled policy plugins whose effective
|
|
333
|
+
* config is not valid in the organization. Generic model-visible reason, as for M-1.
|
|
334
|
+
*/
|
|
335
|
+
needsConfigDenial(mount, needy) {
|
|
336
|
+
const plugin = needy[0];
|
|
337
|
+
return {
|
|
338
|
+
allowed: false,
|
|
339
|
+
plugin,
|
|
340
|
+
reason: unavailableReason(plugin),
|
|
341
|
+
cause: "hook_error",
|
|
342
|
+
detail: `extension ${needy.join(", ")} declares a policy hook on ${mount} but ${NEEDS_CONFIG_REASON}; the call was denied without running any policy hook`,
|
|
343
|
+
needsConfig: true,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
280
346
|
/** Active entries of a mount point, sorted by plugin name (stable: registration order within). */
|
|
281
347
|
entries(mount) {
|
|
282
348
|
return this.d
|
|
@@ -285,14 +351,14 @@ export class HookRegistry {
|
|
|
285
351
|
.sort((a, b) => (a.src.name < b.src.name ? -1 : a.src.name > b.src.name ? 1 : 0));
|
|
286
352
|
}
|
|
287
353
|
/** One plugin's policy hooks in registration order; reruns once on a newer generation if revoked. */
|
|
288
|
-
async runPolicies(mount, src, hooks, payload, signal, timeoutMs, rerun = false) {
|
|
354
|
+
async runPolicies(mount, src, hooks, payload, call, signal, timeoutMs, rerun = false) {
|
|
289
355
|
const plugin = src.name;
|
|
290
356
|
for (const hook of hooks) {
|
|
291
357
|
if (signal.aborted)
|
|
292
358
|
throw signal.reason;
|
|
293
359
|
let r;
|
|
294
360
|
try {
|
|
295
|
-
r = await src.inflight.run(signal, (s) => this.call(hook, payload, s, timeoutMs));
|
|
361
|
+
r = await src.inflight.run(signal, (s) => this.call(hook, payload, call, s, timeoutMs));
|
|
296
362
|
}
|
|
297
363
|
catch (err) {
|
|
298
364
|
if (signal.aborted)
|
|
@@ -301,7 +367,7 @@ export class HookRegistry {
|
|
|
301
367
|
const cur = this.d.current(plugin);
|
|
302
368
|
if (!rerun && cur && cur !== src) {
|
|
303
369
|
const again = cur.hooks.filter((h) => h.mount === mount && h.mode === "policy");
|
|
304
|
-
return this.runPolicies(mount, cur, again, payload, signal, timeoutMs, true);
|
|
370
|
+
return this.runPolicies(mount, cur, again, payload, call, signal, timeoutMs, true);
|
|
305
371
|
}
|
|
306
372
|
}
|
|
307
373
|
r = { kind: "error", message: errMsg(err) };
|
|
@@ -338,7 +404,7 @@ export class HookRegistry {
|
|
|
338
404
|
return undefined;
|
|
339
405
|
}
|
|
340
406
|
/** Fire-and-forget observe call through the instance's in-flight tracker, capped per plugin. */
|
|
341
|
-
dispatchObserve(mount, src, hook, payload, signal) {
|
|
407
|
+
dispatchObserve(mount, src, hook, payload, call, signal) {
|
|
342
408
|
const plugin = src.name;
|
|
343
409
|
const n = this.observing.get(plugin) ?? 0;
|
|
344
410
|
if (n >= OBSERVE_INFLIGHT_MAX) {
|
|
@@ -349,7 +415,7 @@ export class HookRegistry {
|
|
|
349
415
|
this.observing.set(plugin, n + 1);
|
|
350
416
|
void (async () => {
|
|
351
417
|
try {
|
|
352
|
-
const r = await src.inflight.run(signal, (s) => this.call(hook, payload, s, timeoutMs));
|
|
418
|
+
const r = await src.inflight.run(signal, (s) => this.call(hook, payload, call, s, timeoutMs));
|
|
353
419
|
if (r.kind === "error" || r.kind === "timeout") {
|
|
354
420
|
await this.warnOnce(plugin, mount, "failed", "plugin observe hook failed; the call continued", r.kind === "timeout" ? `timed out after ${timeoutMs} ms` : r.message);
|
|
355
421
|
}
|
|
@@ -371,7 +437,7 @@ export class HookRegistry {
|
|
|
371
437
|
* Calls one handler with its own signal (aborted on timeout or when `s` aborts). Rejects with
|
|
372
438
|
* `s.reason` when `s` aborts first, so callers can tell an abort from a hook failure.
|
|
373
439
|
*/
|
|
374
|
-
async call(hook, payload, s, timeoutMs) {
|
|
440
|
+
async call(hook, payload, call, s, timeoutMs) {
|
|
375
441
|
const ac = new AbortController();
|
|
376
442
|
const onAbort = () => ac.abort(s.reason);
|
|
377
443
|
if (s.aborted)
|
|
@@ -385,7 +451,7 @@ export class HookRegistry {
|
|
|
385
451
|
timer = setTimeout(() => resolve("timeout"), timeoutMs);
|
|
386
452
|
});
|
|
387
453
|
const handled = Promise.resolve()
|
|
388
|
-
.then(() => hook.handler(payload, ac.signal))
|
|
454
|
+
.then(() => hook.handler(payload, ac.signal, { config: call.config }))
|
|
389
455
|
.then((v) => ({ v }), (err) => ({ err }));
|
|
390
456
|
const result = await Promise.race([handled, timedOut, abort.aborted]);
|
|
391
457
|
if (result === "timeout") {
|
|
@@ -10,9 +10,12 @@ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
|
10
10
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
11
11
|
import { LockService } from "../infra/lock/lock.service.js";
|
|
12
12
|
import type { KernelLogger } from "../log.js";
|
|
13
|
+
import { ModelEmbeddings } from "../models/embeddings.js";
|
|
13
14
|
import { EmbedTokens } from "../ui/embed-token.js";
|
|
14
15
|
import type { UiActionHandler, UiRender } from "../ui/registry.js";
|
|
15
16
|
import { ExtensionApprovals, type PendingExtension } from "./approvals.js";
|
|
17
|
+
import { deploymentConfigHash } from "./config-hash.js";
|
|
18
|
+
import { EffectiveConfigs } from "./effective-config.js";
|
|
16
19
|
import { HookRegistry } from "./hooks.js";
|
|
17
20
|
import type { InflightTracker } from "./inflight.js";
|
|
18
21
|
import { type DesiredExtension, ExtensionInstalls } from "./installs.js";
|
|
@@ -20,15 +23,7 @@ import { type ExtensionInstance } from "./instance.js";
|
|
|
20
23
|
import { type PermissionSet } from "./permission-set.js";
|
|
21
24
|
import { type ExtensionPointEntry, ExtensionRegistry } from "./registry.js";
|
|
22
25
|
import { type ExtensionSource, ReplicaStatusStore } from "./sources.js";
|
|
23
|
-
|
|
24
|
-
* 插件部署配置(校验后)中非密钥部分的摘要:先把 schema 里所有 secret 叶子(`configFields` 可达路径,
|
|
25
|
-
* 加载时 `assertSecretsReachable` 已保证密钥都在这些路径上)换成固定占位值,再取 sha256(键排序 JSON) 前 16 位十六进制。
|
|
26
|
-
* 给需要「配置变了就失效」的缓存键用(如模型列表)。密钥不参与摘要:不加盐的短摘要写进 Redis 键名后,
|
|
27
|
-
* 低熵密钥可被离线猜测、泄露的密钥可被确认;代价是轮换密钥不会让缓存失效(缓存内容本来就不该依赖密钥)。
|
|
28
|
-
* 没有部署配置 schema 时无从得知哪些是密钥,摘要不按配置区分。同一份配置在各副本上得到同一摘要。
|
|
29
|
-
* 函数自己按 schema 遮蔽,调用方不必(也不能忘记)先打码。
|
|
30
|
-
*/
|
|
31
|
-
export declare function deploymentConfigHash(schema: core.$ZodType | undefined, config: unknown): string;
|
|
26
|
+
export { deploymentConfigHash };
|
|
32
27
|
/** One item of {@link ExtensionHost.uiContributions}: a UI contribution from the manifest with its registered view / action (embeds have none). */
|
|
33
28
|
export interface LoadedUiContribution {
|
|
34
29
|
plugin: string;
|
|
@@ -112,6 +107,11 @@ export declare class ExtensionHost {
|
|
|
112
107
|
private readonly status;
|
|
113
108
|
private readonly config;
|
|
114
109
|
private readonly log;
|
|
110
|
+
/**
|
|
111
|
+
* Each hook call's effective config for its organization, and the providers excluded from an
|
|
112
|
+
* org's point resolution (layering spec A §6).
|
|
113
|
+
*/
|
|
114
|
+
private readonly effective;
|
|
115
115
|
/**
|
|
116
116
|
* Only resolves extensions and runs migrations in dependency order: no deployment config check, no
|
|
117
117
|
* setup, no Redis (for `capybara migrate`). Like `load()` it checks secret markers first
|
|
@@ -244,7 +244,14 @@ export declare class ExtensionHost {
|
|
|
244
244
|
*/
|
|
245
245
|
installs: ExtensionInstalls, approvals: ExtensionApprovals,
|
|
246
246
|
/** This replica's load status table (`extension_replica_status`): every load result writes a row. */
|
|
247
|
-
status: ReplicaStatusStore, config: KernelConfigService, kdb: KernelDb, redis: Redis, busSubscriber: BusSubscriber, keyring: Keyring, embedTokens: EmbedTokens, locks: LockService, log: KernelLogger, options: Pick<KernelAppOptions, "resolveFrom"
|
|
247
|
+
status: ReplicaStatusStore, config: KernelConfigService, kdb: KernelDb, redis: Redis, busSubscriber: BusSubscriber, keyring: Keyring, embedTokens: EmbedTokens, locks: LockService, log: KernelLogger, options: Pick<KernelAppOptions, "resolveFrom">,
|
|
248
|
+
/**
|
|
249
|
+
* Each hook call's effective config for its organization, and the providers excluded from an
|
|
250
|
+
* org's point resolution (layering spec A §6).
|
|
251
|
+
*/
|
|
252
|
+
effective: Pick<EffectiveConfigs, "get">,
|
|
253
|
+
/** `ctx.models`: the embeddings broker (spec B §5.4). */
|
|
254
|
+
models: Pick<ModelEmbeddings, "embed" | "describe">);
|
|
248
255
|
/** The startup config's `extensionConfig` (file / Nacos merged with env). */
|
|
249
256
|
private get extensionConfig();
|
|
250
257
|
/** `extensionPermissions.autoApprove` (development and trials only; see `planApprovals`). */
|
|
@@ -489,6 +496,13 @@ export declare class ExtensionHost {
|
|
|
489
496
|
* (如 `identity-source@1` 的登录配置);未加载返回 undefined。不得回显到响应或日志。
|
|
490
497
|
*/
|
|
491
498
|
deploymentConfig(plugin: string): unknown;
|
|
499
|
+
/**
|
|
500
|
+
* The raw (unparsed) deployment config of a running extension: the startup config merged with
|
|
501
|
+
* the PG values, as the host reads it before parsing (secrets included; never echo it). An org
|
|
502
|
+
* copy is applied to this and parsed once (layering spec A §6), so schema transforms are not
|
|
503
|
+
* run twice. Without a running instance, the stored values without a schema.
|
|
504
|
+
*/
|
|
505
|
+
rawDeploymentConfig(plugin: string): Promise<unknown>;
|
|
492
506
|
/**
|
|
493
507
|
* 本副本拿得到的插件清单里的部署级 schema(生效实例 → 配置声明 → 安装记录准备好的候选);
|
|
494
508
|
* 都没有返回 undefined(如未加载的安装记录:调用方改用包内静态清单)。
|
package/dist/extensions/host.js
CHANGED
|
@@ -7,14 +7,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import { createHash } from "node:crypto";
|
|
11
10
|
import { readFile } from "node:fs/promises";
|
|
12
11
|
import { createRequire } from "node:module";
|
|
13
12
|
import { dirname, isAbsolute, join, resolve as resolvePath } from "node:path";
|
|
14
13
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
15
14
|
import { EXTENSION_POINT_CARDINALITY, parseExtensionPoint, SDK_VERSION, } from "@capybara-hq/plugin-sdk";
|
|
16
15
|
import { Inject, Injectable } from "@nestjs/common";
|
|
17
|
-
import { changedPaths, configFields,
|
|
16
|
+
import { changedPaths, configFields, secretValues, unreachableSecrets } from "../config/fields.js";
|
|
18
17
|
import { pluginSchemaName, queryEnabledPlugins, } from "../ctx/create-ctx.js";
|
|
19
18
|
import { kernelDb } from "../db/kernel-schema.js";
|
|
20
19
|
import { migrate } from "../db/migrator.js";
|
|
@@ -25,57 +24,26 @@ import { KernelDb } from "../infra/database/kernel-db.js";
|
|
|
25
24
|
import { LockService } from "../infra/lock/lock.service.js";
|
|
26
25
|
import { KERNEL_LOGGER, KEYRING, REDIS, REDIS_SUBSCRIBER } from "../infra/tokens.js";
|
|
27
26
|
import { KERNEL_APP_OPTIONS } from "../lifecycle/tokens.js";
|
|
27
|
+
import { ModelEmbeddings } from "../models/embeddings.js";
|
|
28
28
|
import { packagePath } from "../packages/tgz.js";
|
|
29
29
|
import { EmbedTokens } from "../ui/embed-token.js";
|
|
30
30
|
import { ExtensionApprovals, planApprovals, readSnapshots, withPreApproved, } from "./approvals.js";
|
|
31
31
|
import { ExtensionBlobIntegrityError } from "./blobs.js";
|
|
32
|
+
import { deploymentConfigHash } from "./config-hash.js";
|
|
32
33
|
import { toIssues } from "./config-issues.js";
|
|
33
34
|
import { configFormSchema, describeConfigUiProblems } from "./config-json-schema.js";
|
|
35
|
+
import { EffectiveConfigs } from "./effective-config.js";
|
|
34
36
|
import { HookRegistry } from "./hooks.js";
|
|
35
37
|
import { ExtensionInstalls } from "./installs.js";
|
|
36
38
|
import { ImportTracker, importExtensionModule, ManifestMismatchError, matchesSection, setupInstance, warnUpgrades, } from "./instance.js";
|
|
39
|
+
import { parseLoadGate } from "./org-levels.js";
|
|
37
40
|
import { declaredDisplayName, permissionSetOfSection, readMigrationSql } from "./package.js";
|
|
38
41
|
import { blockingKeys, computePermissionSet, UI_VIEW_KEY_PREFIX, } from "./permission-set.js";
|
|
39
42
|
import { ExtensionRegistry } from "./registry.js";
|
|
40
43
|
import { ExtensionResolveError, resolveExtensions } from "./resolve.js";
|
|
41
44
|
import { ReplicaStatusStore, } from "./sources.js";
|
|
42
45
|
import { PackageShaMismatchError, packageRootOf } from "./sync.js";
|
|
43
|
-
|
|
44
|
-
const canonicalJson = (v) => {
|
|
45
|
-
if (Array.isArray(v))
|
|
46
|
-
return `[${v.map((x) => (x === undefined ? "null" : canonicalJson(x))).join(",")}]`;
|
|
47
|
-
if (v !== null && typeof v === "object") {
|
|
48
|
-
const entries = Object.entries(v)
|
|
49
|
-
.filter(([, x]) => x !== undefined)
|
|
50
|
-
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
51
|
-
return `{${entries.map(([k, x]) => `${JSON.stringify(k)}:${canonicalJson(x)}`).join(",")}}`;
|
|
52
|
-
}
|
|
53
|
-
return JSON.stringify(v) ?? "null";
|
|
54
|
-
};
|
|
55
|
-
/** 遮蔽 secret 字段后参与摘要的固定占位值。 */
|
|
56
|
-
const SECRET_PLACEHOLDER = "<secret>";
|
|
57
|
-
/**
|
|
58
|
-
* 插件部署配置(校验后)中非密钥部分的摘要:先把 schema 里所有 secret 叶子(`configFields` 可达路径,
|
|
59
|
-
* 加载时 `assertSecretsReachable` 已保证密钥都在这些路径上)换成固定占位值,再取 sha256(键排序 JSON) 前 16 位十六进制。
|
|
60
|
-
* 给需要「配置变了就失效」的缓存键用(如模型列表)。密钥不参与摘要:不加盐的短摘要写进 Redis 键名后,
|
|
61
|
-
* 低熵密钥可被离线猜测、泄露的密钥可被确认;代价是轮换密钥不会让缓存失效(缓存内容本来就不该依赖密钥)。
|
|
62
|
-
* 没有部署配置 schema 时无从得知哪些是密钥,摘要不按配置区分。同一份配置在各副本上得到同一摘要。
|
|
63
|
-
* 函数自己按 schema 遮蔽,调用方不必(也不能忘记)先打码。
|
|
64
|
-
*/
|
|
65
|
-
export function deploymentConfigHash(schema, config) {
|
|
66
|
-
let redacted = null;
|
|
67
|
-
if (schema) {
|
|
68
|
-
redacted = structuredClone(config);
|
|
69
|
-
if (redacted !== null && typeof redacted === "object") {
|
|
70
|
-
for (const f of configFields(schema)) {
|
|
71
|
-
if (f.meta?.secret && getPath(redacted, f.path) !== undefined) {
|
|
72
|
-
setPath(redacted, f.path, SECRET_PLACEHOLDER);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return createHash("sha256").update(canonicalJson(redacted)).digest("hex").slice(0, 16);
|
|
78
|
-
}
|
|
46
|
+
export { deploymentConfigHash };
|
|
79
47
|
const CLOSED_DURING_LOAD = "plugin host closed during load";
|
|
80
48
|
/** 停机时等进行中的 unload / reload 的上限(之后直接关闭 setup 中的 ctx、撤销其余实例)。 */
|
|
81
49
|
const CLOSE_LIFECYCLE_WAIT_MS = 2_000;
|
|
@@ -172,7 +140,7 @@ function warnPending(log, p) {
|
|
|
172
140
|
: "extension not loaded: a required extension point is only provided by extensions awaiting permission approval", { plugin: p.plugin, version: p.version, blockedBy: p.blockedBy });
|
|
173
141
|
return;
|
|
174
142
|
}
|
|
175
|
-
log.warn("extension not loaded: permissions awaiting approval (
|
|
143
|
+
log.warn("extension not loaded: permissions awaiting approval (a super admin approves it in the admin console, or run `capybara extensions review`, then `capybara extensions approve <name>`; running replicas load it without a restart)", { plugin: p.plugin, version: p.version, reason: p.reason, added: p.added, removed: p.removed });
|
|
176
144
|
}
|
|
177
145
|
/**
|
|
178
146
|
* 跑单个插件的迁移(`migrationsDir` 为迁移目录的绝对路径;没有迁移时为 undefined);返回已应用的文件,
|
|
@@ -235,6 +203,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
235
203
|
status;
|
|
236
204
|
config;
|
|
237
205
|
log;
|
|
206
|
+
effective;
|
|
238
207
|
/**
|
|
239
208
|
* Only resolves extensions and runs migrations in dependency order: no deployment config check, no
|
|
240
209
|
* setup, no Redis (for `capybara migrate`). Like `load()` it checks secret markers first
|
|
@@ -407,14 +376,32 @@ let ExtensionHost = class ExtensionHost {
|
|
|
407
376
|
*/
|
|
408
377
|
installs, approvals,
|
|
409
378
|
/** This replica's load status table (`extension_replica_status`): every load result writes a row. */
|
|
410
|
-
status, config, kdb, redis, busSubscriber, keyring, embedTokens, locks, log, options
|
|
379
|
+
status, config, kdb, redis, busSubscriber, keyring, embedTokens, locks, log, options,
|
|
380
|
+
/**
|
|
381
|
+
* Each hook call's effective config for its organization, and the providers excluded from an
|
|
382
|
+
* org's point resolution (layering spec A §6).
|
|
383
|
+
*/
|
|
384
|
+
effective,
|
|
385
|
+
/** `ctx.models`: the embeddings broker (spec B §5.4). */
|
|
386
|
+
models) {
|
|
411
387
|
this.registry = registry;
|
|
412
388
|
this.installs = installs;
|
|
413
389
|
this.approvals = approvals;
|
|
414
390
|
this.status = status;
|
|
415
391
|
this.config = config;
|
|
416
392
|
this.log = log;
|
|
393
|
+
this.effective = effective;
|
|
417
394
|
const c = config.get();
|
|
395
|
+
this.hooks = new HookRegistry({
|
|
396
|
+
instances: () => this.registry.all(),
|
|
397
|
+
current: (plugin) => this.registry.current(plugin),
|
|
398
|
+
expectedPolicy: (mount) => this.expectedPolicy(mount),
|
|
399
|
+
enabledPlugins: (orgId) => this.enabledPlugins(orgId),
|
|
400
|
+
effectiveConfig: (orgId, plugin) => effective.get(orgId, plugin),
|
|
401
|
+
locks,
|
|
402
|
+
config: () => ({ hooks: { timeoutMs: this.config.get().hooks.timeoutMs } }),
|
|
403
|
+
log,
|
|
404
|
+
});
|
|
418
405
|
this.deps = {
|
|
419
406
|
db: kdb.pool,
|
|
420
407
|
dbUrl: c.db.url,
|
|
@@ -424,19 +411,13 @@ let ExtensionHost = class ExtensionHost {
|
|
|
424
411
|
redisUrl: c.redis.url,
|
|
425
412
|
keyring,
|
|
426
413
|
embedTokens,
|
|
414
|
+
models,
|
|
415
|
+
// ctx.models.embed fires model.request through the same registry (spec B §5.4)
|
|
416
|
+
hooks: this.hooks,
|
|
427
417
|
locks,
|
|
428
418
|
runWorkers: c.roles.includes("worker"),
|
|
429
419
|
log,
|
|
430
420
|
};
|
|
431
|
-
this.hooks = new HookRegistry({
|
|
432
|
-
instances: () => this.registry.all(),
|
|
433
|
-
current: (plugin) => this.registry.current(plugin),
|
|
434
|
-
expectedPolicy: (mount) => this.expectedPolicy(mount),
|
|
435
|
-
enabledPlugins: (orgId) => this.enabledPlugins(orgId),
|
|
436
|
-
locks,
|
|
437
|
-
config: () => ({ hooks: { timeoutMs: this.config.get().hooks.timeoutMs } }),
|
|
438
|
-
log,
|
|
439
|
-
});
|
|
440
421
|
this.registry.onChange(() => {
|
|
441
422
|
this.installedCache = undefined;
|
|
442
423
|
});
|
|
@@ -1190,7 +1171,9 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1190
1171
|
return undefined;
|
|
1191
1172
|
}
|
|
1192
1173
|
let config = raw;
|
|
1193
|
-
|
|
1174
|
+
// the load gate (spec A §5.4a): overridable fields may stay empty on the platform, so
|
|
1175
|
+
// `ctx.config` may lack them; hidden and read-only fields must be complete
|
|
1176
|
+
const parsed = readConfig && schema ? parseLoadGate(schema, raw) : undefined;
|
|
1194
1177
|
if (a.source !== "install")
|
|
1195
1178
|
this.configValidity.set(name, parsed?.success ?? true);
|
|
1196
1179
|
if (decision.action === "pending") {
|
|
@@ -1365,7 +1348,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1365
1348
|
permissions: d.set,
|
|
1366
1349
|
configurable: schema !== undefined,
|
|
1367
1350
|
configValid: this.configValidity.get(name) ??
|
|
1368
|
-
(schema ? schema
|
|
1351
|
+
(schema ? parseLoadGate(schema, this.extensionConfig[name] ?? {}).success : true),
|
|
1369
1352
|
displayName: this.declaredDisplayNames.get(name) ?? null,
|
|
1370
1353
|
};
|
|
1371
1354
|
});
|
|
@@ -1604,6 +1587,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1604
1587
|
.all()
|
|
1605
1588
|
.flatMap((i) => i.provided.has(ref) ? [{ plugin: i.name, impl: i.provided.get(ref) }] : []),
|
|
1606
1589
|
enabledPlugins: (orgId) => this.enabledPlugins(orgId),
|
|
1590
|
+
configOk: async (orgId, plugin) => (await this.effective.get(orgId, plugin)).ok,
|
|
1607
1591
|
};
|
|
1608
1592
|
get loadDeps() {
|
|
1609
1593
|
return {
|
|
@@ -1711,6 +1695,15 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1711
1695
|
deploymentConfig(plugin) {
|
|
1712
1696
|
return this.registry.deploymentConfig(plugin);
|
|
1713
1697
|
}
|
|
1698
|
+
/**
|
|
1699
|
+
* The raw (unparsed) deployment config of a running extension: the startup config merged with
|
|
1700
|
+
* the PG values, as the host reads it before parsing (secrets included; never echo it). An org
|
|
1701
|
+
* copy is applied to this and parsed once (layering spec A §6), so schema transforms are not
|
|
1702
|
+
* run twice. Without a running instance, the stored values without a schema.
|
|
1703
|
+
*/
|
|
1704
|
+
rawDeploymentConfig(plugin) {
|
|
1705
|
+
return this.rawConfigOf(plugin, this.registry.current(plugin)?.manifest.config?.deployment);
|
|
1706
|
+
}
|
|
1714
1707
|
/**
|
|
1715
1708
|
* 本副本拿得到的插件清单里的部署级 schema(生效实例 → 配置声明 → 安装记录准备好的候选);
|
|
1716
1709
|
* 都没有返回 undefined(如未加载的安装记录:调用方改用包内静态清单)。
|
|
@@ -1746,7 +1739,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1746
1739
|
if (schema) {
|
|
1747
1740
|
try {
|
|
1748
1741
|
const raw = await this.rawConfigOf(plugin, schema);
|
|
1749
|
-
this.configValidity.set(plugin, schema
|
|
1742
|
+
this.configValidity.set(plugin, parseLoadGate(schema, raw).success);
|
|
1750
1743
|
}
|
|
1751
1744
|
catch (err) {
|
|
1752
1745
|
this.log.warn("cannot read the stored deployment config of plugin", {
|
|
@@ -1768,7 +1761,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1768
1761
|
this.log.error("cannot read the stored deployment config of plugin; keeping its current config", { plugin, err });
|
|
1769
1762
|
return "invalid";
|
|
1770
1763
|
}
|
|
1771
|
-
const r = schema
|
|
1764
|
+
const r = parseLoadGate(schema, raw);
|
|
1772
1765
|
if (!r.success) {
|
|
1773
1766
|
this.log.warn("plugin deployment config changed but is invalid on this replica; keeping the current config", {
|
|
1774
1767
|
plugin,
|
|
@@ -2178,6 +2171,8 @@ ExtensionHost = __decorate([
|
|
|
2178
2171
|
__param(9, Inject(EmbedTokens)),
|
|
2179
2172
|
__param(10, Inject(LockService)),
|
|
2180
2173
|
__param(11, Inject(KERNEL_LOGGER)),
|
|
2181
|
-
__param(12, Inject(KERNEL_APP_OPTIONS))
|
|
2174
|
+
__param(12, Inject(KERNEL_APP_OPTIONS)),
|
|
2175
|
+
__param(13, Inject(EffectiveConfigs)),
|
|
2176
|
+
__param(14, Inject(ModelEmbeddings))
|
|
2182
2177
|
], ExtensionHost);
|
|
2183
2178
|
export { ExtensionHost };
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type PluginExtensionSection } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import type { core } from "zod";
|
|
3
3
|
import type { Keyring } from "../ctx/secrets.js";
|
|
4
|
-
import {
|
|
4
|
+
import { SuperAdminLock } from "../identity/super-admin.js";
|
|
5
5
|
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
6
6
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
7
7
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
8
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
8
9
|
import { type ProvenanceResult } from "../packages/provenance.js";
|
|
9
10
|
import { ExtensionApprovals } from "./approvals.js";
|
|
10
11
|
import { ExtensionBlobs } from "./blobs.js";
|
|
@@ -83,7 +84,7 @@ export interface IngestSource {
|
|
|
83
84
|
export declare class ExtensionInstalls {
|
|
84
85
|
private readonly db;
|
|
85
86
|
readonly txHost: TransactionHost;
|
|
86
|
-
/** The
|
|
87
|
+
/** The super admin lock (identity/super-admin.ts): joins the transaction. */
|
|
87
88
|
private readonly adminLock;
|
|
88
89
|
private readonly blobs;
|
|
89
90
|
private readonly approvals;
|
|
@@ -91,11 +92,15 @@ export declare class ExtensionInstalls {
|
|
|
91
92
|
private readonly registry;
|
|
92
93
|
private readonly config;
|
|
93
94
|
private readonly keyring;
|
|
95
|
+
/** The owner org's lock: an org upload re-checks its org admin instead (ruling P3-10). */
|
|
96
|
+
private readonly orgLock;
|
|
94
97
|
constructor(db: KernelDb, txHost: TransactionHost,
|
|
95
|
-
/** The
|
|
96
|
-
adminLock:
|
|
98
|
+
/** The super admin lock (identity/super-admin.ts): joins the transaction. */
|
|
99
|
+
adminLock: SuperAdminLock, blobs: ExtensionBlobs, approvals: ExtensionApprovals,
|
|
97
100
|
/** The config-declared extension names (an install cannot take them, C15). */
|
|
98
|
-
registry: ExtensionRegistry, config: KernelConfigService, keyring: Keyring
|
|
101
|
+
registry: ExtensionRegistry, config: KernelConfigService, keyring: Keyring,
|
|
102
|
+
/** The owner org's lock: an org upload re-checks its org admin instead (ruling P3-10). */
|
|
103
|
+
orgLock: OrgLock);
|
|
99
104
|
/**
|
|
100
105
|
* An extension's effective deployment config, not validated yet (C10): the startup config
|
|
101
106
|
* (`fileValue`, file / Nacos merged with env) completed by the fields stored in PG; merged by
|
|
@@ -112,19 +117,26 @@ export declare class ExtensionInstalls {
|
|
|
112
117
|
* - extension name equal to a config-declared one -> `extension.config_declared`;
|
|
113
118
|
* - an install record of the same name comes from another npm package -> `extension.name_conflict`
|
|
114
119
|
* (a new version of the same package is an upgrade, handled elsewhere).
|
|
115
|
-
* `actor` null means the CLI (no
|
|
120
|
+
* `actor` null means the CLI (no super admin re-check, audit without an actor). `owner`: an org
|
|
121
|
+
* upload (spec §14, P3-10): the actor is re-checked as an org admin of that org (`catalog.upload`)
|
|
122
|
+
* instead of a super admin; the package is only stored, as always (nothing runs, no install).
|
|
116
123
|
*/
|
|
117
124
|
ingest(actor: string | null, bytes: Uint8Array, src: IngestSource, opts?: {
|
|
118
125
|
actorTokenId?: string;
|
|
119
126
|
store?: "object" | "pg";
|
|
120
127
|
expectPackageName?: string;
|
|
128
|
+
owner?: {
|
|
129
|
+
orgId: string;
|
|
130
|
+
};
|
|
121
131
|
}): Promise<PackageReview>;
|
|
122
132
|
/**
|
|
123
|
-
* The
|
|
133
|
+
* The super admin re-check under its lock, in a transaction of its own (`requires_new`, as
|
|
124
134
|
* before the conversion): the package write that follows never runs inside a caller's
|
|
125
135
|
* transaction holding the lock.
|
|
126
136
|
*/
|
|
127
137
|
private authorize;
|
|
138
|
+
/** The super admin, or for an org upload the owner org's admin, re-checked under its lock. */
|
|
139
|
+
private authorizeIn;
|
|
128
140
|
/**
|
|
129
141
|
* The `extension.package_uploaded` audit, re-checking the actor under the lock, committed on its
|
|
130
142
|
* own (`requires_new`): the stored package it records is not rolled back by a caller either.
|
|
@@ -138,7 +150,7 @@ export declare class ExtensionInstalls {
|
|
|
138
150
|
/**
|
|
139
151
|
* Fetches one package from the configured npm registry (verified by `dist.integrity`, see
|
|
140
152
|
* packages/npm.ts), downloading only, not storing: download failure -> `packages.npm_failed` (502);
|
|
141
|
-
* over `packages.maxBytes` -> `extension.package_too_large`.
|
|
153
|
+
* over `packages.maxBytes` -> `extension.package_too_large`. Platform catalog npm imports use it
|
|
142
154
|
* too.
|
|
143
155
|
*/
|
|
144
156
|
fetchNpm(input: {
|