@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5
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 +47 -16
- package/dist/admin/admin.controller.js +44 -19
- package/dist/admin/extensions.controller.d.ts +24 -3
- package/dist/admin/extensions.controller.js +48 -8
- 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 +19 -0
- package/dist/agents/agent-lookup.js +21 -0
- package/dist/agents/agent-profile.service.d.ts +29 -0
- package/dist/agents/agent-profile.service.js +117 -0
- package/dist/agents/agents.controller.d.ts +168 -3
- package/dist/agents/agents.controller.js +201 -12
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +36 -6
- package/dist/agents/agents.service.d.ts +64 -27
- package/dist/agents/agents.service.js +199 -74
- package/dist/agents/definition.d.ts +53 -0
- package/dist/agents/definition.js +55 -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/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +9 -3
- package/dist/agents/models.controller.js +19 -4
- 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/profile.d.ts +96 -0
- package/dist/agents/profile.js +51 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +476 -53
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +87 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +94 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +36 -0
- package/dist/background/launch.js +70 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +190 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +79 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +243 -0
- package/dist/background/store.d.ts +162 -0
- package/dist/background/store.js +357 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +211 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +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/claude/agents.js +2 -0
- 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 +623 -83
- 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 +1148 -1137
- 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 +21 -3
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/connections.service.d.ts +16 -1
- package/dist/channels/connections.service.js +38 -4
- 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/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +24 -2
- package/dist/config/schema.js +145 -19
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -23
- package/dist/conversations/conversations.controller.js +141 -50
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.service.d.ts +108 -9
- package/dist/conversations/conversations.service.js +237 -30
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +21 -6
- package/dist/conversations/event-log.js +70 -1
- package/dist/conversations/events.d.ts +140 -0
- package/dist/conversations/events.js +142 -13
- package/dist/conversations/queue.d.ts +3 -1
- package/dist/conversations/queue.js +13 -2
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +8 -1
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +36 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +420 -20
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- 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 +90 -2
- package/dist/errors.js +90 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +7 -2
- package/dist/evals/run-replay.js +42 -7
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +13 -7
- package/dist/evals/trajectory.js +1 -1
- 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 +67 -42
- package/dist/extensions/admin-view.d.ts +39 -10
- package/dist/extensions/admin-view.js +111 -20
- package/dist/extensions/blobs.js +1 -0
- 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-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +6 -0
- package/dist/extensions/deployment-config.d.ts +78 -8
- package/dist/extensions/deployment-config.js +172 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +14 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +45 -2
- package/dist/extensions/host.js +112 -16
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +81 -6
- package/dist/extensions/org-config.js +195 -44
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +19 -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.controller.d.ts +34 -0
- package/dist/extensions/point-defaults.controller.js +71 -0
- package/dist/extensions/point-defaults.d.ts +71 -0
- package/dist/extensions/point-defaults.js +234 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +31 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- 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.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/cookies.d.ts +20 -5
- package/dist/identity/cookies.js +44 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.d.ts +5 -1
- package/dist/identity/me.controller.js +12 -3
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- 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 +2 -2
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +27 -1
- package/dist/infra/database/database.module.js +1 -0
- 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/lifecycle/process-guards.js +4 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- 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/log.d.ts +13 -1
- package/dist/log.js +93 -17
- 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 +43 -9
- package/dist/models/purposes.js +48 -18
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- 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 +20 -3
- package/dist/orgs/settings.service.js +19 -4
- 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 +1387 -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 +15 -1
- package/dist/runtime/context/build.d.ts +11 -7
- package/dist/runtime/context/build.js +46 -19
- package/dist/runtime/context/claude-tools.d.ts +3 -1
- package/dist/runtime/context/claude-tools.js +8 -6
- package/dist/runtime/context/compaction.js +13 -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.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +34 -5
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +46 -8
- package/dist/runtime/model-call.js +72 -21
- package/dist/runtime/providers.d.ts +6 -0
- package/dist/runtime/providers.js +8 -0
- 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 +59 -2
- package/dist/runtime/run-queue.js +311 -38
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +69 -33
- package/dist/runtime/runtime.module.js +11 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- 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 +44 -28
- 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.d.ts +2 -1
- package/dist/runtime/usage-report.js +19 -13
- package/dist/runtime/waits.d.ts +145 -36
- package/dist/runtime/waits.js +423 -109
- 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 +10 -4
- package/dist/sandbox/sandbox.service.d.ts +282 -129
- package/dist/sandbox/sandbox.service.js +736 -381
- 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 +25 -4
- package/dist/tools/builtin-names.d.ts +41 -7
- package/dist/tools/builtin-names.js +59 -7
- 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 +19 -1
- package/dist/tools/builtins/builtin-tools.js +59 -2
- 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.d.ts +1 -1
- package/dist/tools/builtins/sandbox/bash.js +241 -4
- package/dist/tools/builtins/sandbox/common.d.ts +69 -27
- package/dist/tools/builtins/sandbox/common.js +87 -48
- package/dist/tools/builtins/sandbox/deliver.js +1 -1
- 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 +3 -1
- package/dist/tools/builtins/sandbox/index.js +7 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
- package/dist/tools/builtins/sandbox/task-output.js +329 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.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/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/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/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -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 +202 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +120 -8
- package/dist/tools/registry.js +112 -19
- package/dist/tools/tools.module.js +24 -2
- package/dist/tools/validate.js +1 -1
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/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 -24
- package/dist/extensions/org-config.controller.js +0 -62
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { LocalizedName } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { PluginScope } from "../catalog/scope.js";
|
|
1
3
|
import { type PermissionSet } from "./permission-set.js";
|
|
2
4
|
import type { ExtensionSource } from "./sources.js";
|
|
3
5
|
/**
|
|
@@ -35,10 +37,10 @@ export interface PermissionItem {
|
|
|
35
37
|
reason?: SensitiveReason;
|
|
36
38
|
}
|
|
37
39
|
/**
|
|
38
|
-
* 敏感的能力(D10 + 计划扩展,F-AI):`sandbox@
|
|
40
|
+
* 敏感的能力(D10 + 计划扩展,F-AI):`sandbox@2` 在部署里执行任意命令、`object-store@1` 保管全部附件与插件包(D10);
|
|
39
41
|
* `channel@1` 收到组织在 IM 里的对话内容(Ruling A33)、`directory@1` 能把人加进组织(并为其建账号、建身份)、
|
|
40
42
|
* `identity-source@1` 决定谁能登录成哪个账号。插件提供其中任何一个时,「提供」一组标为敏感,
|
|
41
|
-
* 后台插件列表的 `sensitive`
|
|
43
|
+
* 后台插件列表的 `sensitive` 为真,须超级管理员批准。只影响展示,不改权限快照的键。
|
|
42
44
|
*/
|
|
43
45
|
export declare const SENSITIVE_EXTENSION_POINTS: readonly string[];
|
|
44
46
|
/**
|
|
@@ -58,13 +60,15 @@ export type DeploymentExtensionStatus = "enabled" | "disabled" | "pending_approv
|
|
|
58
60
|
/** The stored package is in the pre-0.1.0 format: reinstall it from a repacked tgz. */
|
|
59
61
|
| "legacy_format";
|
|
60
62
|
/**
|
|
61
|
-
*
|
|
63
|
+
* 需要超级管理员处理的状态(后台概览「需要处理的插件」):待批准、待配置、失败、依赖缺失,以及副本不一致
|
|
62
64
|
* (`converging` 收敛中、`pending_migration` 待迁移)。
|
|
63
65
|
*/
|
|
64
66
|
export declare function extensionNeedsAction(status: DeploymentExtensionStatus): boolean;
|
|
65
67
|
/** One item of the admin extension list (`GET /api/v1/admin/extensions`). */
|
|
66
68
|
export interface AdminExtensionView {
|
|
67
69
|
name: string;
|
|
70
|
+
/** The plugin's display name (`ExtensionDisplayNames`); null when it has none. */
|
|
71
|
+
displayName: LocalizedName | null;
|
|
68
72
|
version: string;
|
|
69
73
|
source: ExtensionSource;
|
|
70
74
|
/** 安装记录的包;配置声明为 null。 */
|
|
@@ -111,13 +115,24 @@ export interface AdminExtensionView {
|
|
|
111
115
|
/** 有部署级配置字段。 */
|
|
112
116
|
configurable: boolean;
|
|
113
117
|
configValid: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Only when the platform config leaves required overridable fields empty (spec A §5.4a; the
|
|
120
|
+
* extension still runs): the number of orgs where it is on and that still need their own config.
|
|
121
|
+
*/
|
|
122
|
+
orgsNeedingConfig?: number;
|
|
114
123
|
/** 能从部署卸载(只有安装记录,必需的引导插件除外;卸载前须先停用)。 */
|
|
115
124
|
removable: boolean;
|
|
116
125
|
/**
|
|
117
126
|
* A required bootstrap plugin (package ecosystem spec §7): enabled in every org, cannot be
|
|
118
|
-
* disabled or uninstalled;
|
|
127
|
+
* disabled or uninstalled; a super admin may upgrade it.
|
|
119
128
|
*/
|
|
120
129
|
required: boolean;
|
|
130
|
+
/** The scope of the catalog plugin the extension ships in (builtin: `all`); null without one. */
|
|
131
|
+
scope: PluginScope | null;
|
|
132
|
+
/** Orgs where the extension is enabled (a required plugin: every org). */
|
|
133
|
+
enabledOrgs: number;
|
|
134
|
+
/** Shipped with the deployment (a builtin plugin or a required bootstrap plugin). */
|
|
135
|
+
builtin: boolean;
|
|
121
136
|
/** Where the install record came from (`bootstrap` for the bootstrap step); null for config-declared. */
|
|
122
137
|
installSource: "npm" | "file" | "catalog" | "bootstrap" | null;
|
|
123
138
|
/**
|
|
@@ -18,16 +18,16 @@ export function reviewHash(set, warnings = []) {
|
|
|
18
18
|
return h.digest("hex").slice(0, 16);
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* 敏感的能力(D10 + 计划扩展,F-AI):`sandbox@
|
|
21
|
+
* 敏感的能力(D10 + 计划扩展,F-AI):`sandbox@2` 在部署里执行任意命令、`object-store@1` 保管全部附件与插件包(D10);
|
|
22
22
|
* `channel@1` 收到组织在 IM 里的对话内容(Ruling A33)、`directory@1` 能把人加进组织(并为其建账号、建身份)、
|
|
23
23
|
* `identity-source@1` 决定谁能登录成哪个账号。插件提供其中任何一个时,「提供」一组标为敏感,
|
|
24
|
-
* 后台插件列表的 `sensitive`
|
|
24
|
+
* 后台插件列表的 `sensitive` 为真,须超级管理员批准。只影响展示,不改权限快照的键。
|
|
25
25
|
*/
|
|
26
26
|
export const SENSITIVE_EXTENSION_POINTS = [
|
|
27
27
|
"channel@1",
|
|
28
28
|
"directory@1",
|
|
29
29
|
"identity-source@1",
|
|
30
|
-
"sandbox@
|
|
30
|
+
"sandbox@2",
|
|
31
31
|
"object-store@1",
|
|
32
32
|
];
|
|
33
33
|
/** 总是敏感的类别。 */
|
|
@@ -159,7 +159,7 @@ export function permissionGroups(set) {
|
|
|
159
159
|
});
|
|
160
160
|
}
|
|
161
161
|
/**
|
|
162
|
-
*
|
|
162
|
+
* 需要超级管理员处理的状态(后台概览「需要处理的插件」):待批准、待配置、失败、依赖缺失,以及副本不一致
|
|
163
163
|
* (`converging` 收敛中、`pending_migration` 待迁移)。
|
|
164
164
|
*/
|
|
165
165
|
export function extensionNeedsAction(status) {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PluginScope } from "../catalog/scope.js";
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
|
+
/** The catalog item (the plugin) an extension ships in. */
|
|
4
|
+
export interface ExtensionPluginItem {
|
|
5
|
+
id: string;
|
|
6
|
+
scope: PluginScope;
|
|
7
|
+
builtin: boolean;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The live catalog items of each extension in `names`, the one recorded on its install
|
|
12
|
+
* (`extension_installs.catalog_item_id`) first, then its other `extension_catalog_sources` by id.
|
|
13
|
+
* An extension without a live item (declared in the startup config, or its items deleted) is absent.
|
|
14
|
+
* `db` may be a transaction.
|
|
15
|
+
*/
|
|
16
|
+
export declare function pluginItemsOf(db: KernelSchemaDb, names: readonly string[]): Promise<Map<string, ExtensionPluginItem[]>>;
|
|
17
|
+
/**
|
|
18
|
+
* Whether an item keeps its plugin on in every org (builtin only: an org may switch off an `all`
|
|
19
|
+
* one, layering spec §4): its switch cannot go off.
|
|
20
|
+
*/
|
|
21
|
+
export declare const itemLocked: (i: ExtensionPluginItem) => boolean;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The live catalog items of each extension in `names`, the one recorded on its install
|
|
3
|
+
* (`extension_installs.catalog_item_id`) first, then its other `extension_catalog_sources` by id.
|
|
4
|
+
* An extension without a live item (declared in the startup config, or its items deleted) is absent.
|
|
5
|
+
* `db` may be a transaction.
|
|
6
|
+
*/
|
|
7
|
+
export async function pluginItemsOf(db, names) {
|
|
8
|
+
const out = new Map();
|
|
9
|
+
if (names.length === 0)
|
|
10
|
+
return out;
|
|
11
|
+
const add = (plugin, item) => {
|
|
12
|
+
const list = out.get(plugin) ?? [];
|
|
13
|
+
if (!list.some((i) => i.id === item.id))
|
|
14
|
+
list.push(item);
|
|
15
|
+
out.set(plugin, list);
|
|
16
|
+
};
|
|
17
|
+
const own = await db
|
|
18
|
+
.selectFrom("extension_installs as e")
|
|
19
|
+
.innerJoin("catalog_items as i", "i.id", "e.catalog_item_id")
|
|
20
|
+
.select(["e.name as plugin", "i.id", "i.scope", "i.builtin", "i.disabled"])
|
|
21
|
+
.where("e.name", "in", [...names])
|
|
22
|
+
.where("i.deleted_at", "is", null)
|
|
23
|
+
.execute();
|
|
24
|
+
for (const r of own)
|
|
25
|
+
add(r.plugin, r);
|
|
26
|
+
const sources = await db
|
|
27
|
+
.selectFrom("extension_catalog_sources as s")
|
|
28
|
+
.innerJoin("catalog_items as i", "i.id", "s.item_id")
|
|
29
|
+
.select(["s.plugin", "i.id", "i.scope", "i.builtin", "i.disabled"])
|
|
30
|
+
.where("s.plugin", "in", [...names])
|
|
31
|
+
.where("i.deleted_at", "is", null)
|
|
32
|
+
.orderBy("i.id")
|
|
33
|
+
.execute();
|
|
34
|
+
for (const r of sources)
|
|
35
|
+
add(r.plugin, r);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Whether an item keeps its plugin on in every org (builtin only: an org may switch off an `all`
|
|
40
|
+
* one, layering spec §4): its switch cannot go off.
|
|
41
|
+
*/
|
|
42
|
+
export const itemLocked = (i) => i.builtin;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type Principal } from "../identity/principal.js";
|
|
3
|
+
import { type OrgContext } from "../orgs/org.guard.js";
|
|
4
|
+
import { ExtensionPointDefaults, type OrgPointDefaultView } from "./point-defaults.js";
|
|
5
|
+
declare const PointParams: z.ZodObject<{
|
|
6
|
+
point: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
declare const DefaultBody: z.ZodObject<{
|
|
9
|
+
extension: z.ZodString;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
/**
|
|
12
|
+
* The org default provider of `org-default` extension points (web tools spec §6):
|
|
13
|
+
* - `GET /api/v1/orgs/:orgId/extension-points` (`org.extensions.manage`) → `{ points }`: each
|
|
14
|
+
* point with its candidate providers, the stored default and the effective provider;
|
|
15
|
+
* - `PUT /api/v1/orgs/:orgId/extension-points/:point/default` `{ extension }`
|
|
16
|
+
* (`org.extensions.manage`) → 204;
|
|
17
|
+
* - `GET /api/v1/orgs/:orgId/extension-points/available` (`agents.use`) → `{ points }`: whether
|
|
18
|
+
* each point has a provider now, without extension names (for the agent form).
|
|
19
|
+
*/
|
|
20
|
+
export declare class ExtensionPointDefaultsController {
|
|
21
|
+
private readonly points;
|
|
22
|
+
constructor(points: ExtensionPointDefaults);
|
|
23
|
+
list(org: OrgContext): Promise<{
|
|
24
|
+
points: OrgPointDefaultView[];
|
|
25
|
+
}>;
|
|
26
|
+
available(org: OrgContext): Promise<{
|
|
27
|
+
points: {
|
|
28
|
+
point: string;
|
|
29
|
+
available: boolean;
|
|
30
|
+
}[];
|
|
31
|
+
}>;
|
|
32
|
+
setDefault(principal: Principal, org: OrgContext, { point }: z.infer<typeof PointParams>, body: z.infer<typeof DefaultBody>): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
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, Get, HttpCode, Inject, Put } from "@nestjs/common";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { CurrentPrincipal, requireUser } from "../identity/principal.js";
|
|
13
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
14
|
+
import { ZBody, ZParam } from "../infra/validation/zod-params.js";
|
|
15
|
+
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
16
|
+
import { ExtensionPointDefaults } from "./point-defaults.js";
|
|
17
|
+
const PointParams = z.object({ point: z.string().min(1).max(100) });
|
|
18
|
+
const DefaultBody = z.object({ extension: z.string().min(1).max(214) }).strict();
|
|
19
|
+
class ExtensionPointParamsDto extends createZodDto(PointParams, "ExtensionPointParams") {
|
|
20
|
+
}
|
|
21
|
+
class ExtensionPointDefaultBodyDto extends createZodDto(DefaultBody, "ExtensionPointDefaultBody") {
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The org default provider of `org-default` extension points (web tools spec §6):
|
|
25
|
+
* - `GET /api/v1/orgs/:orgId/extension-points` (`org.extensions.manage`) → `{ points }`: each
|
|
26
|
+
* point with its candidate providers, the stored default and the effective provider;
|
|
27
|
+
* - `PUT /api/v1/orgs/:orgId/extension-points/:point/default` `{ extension }`
|
|
28
|
+
* (`org.extensions.manage`) → 204;
|
|
29
|
+
* - `GET /api/v1/orgs/:orgId/extension-points/available` (`agents.use`) → `{ points }`: whether
|
|
30
|
+
* each point has a provider now, without extension names (for the agent form).
|
|
31
|
+
*/
|
|
32
|
+
let ExtensionPointDefaultsController = class ExtensionPointDefaultsController {
|
|
33
|
+
points;
|
|
34
|
+
constructor(points) {
|
|
35
|
+
this.points = points;
|
|
36
|
+
}
|
|
37
|
+
async list(org) {
|
|
38
|
+
return { points: await this.points.list(org.orgId) };
|
|
39
|
+
}
|
|
40
|
+
async available(org) {
|
|
41
|
+
return { points: await this.points.available(org.orgId) };
|
|
42
|
+
}
|
|
43
|
+
async setDefault(principal, org, { point }, body) {
|
|
44
|
+
const p = requireUser(principal);
|
|
45
|
+
await this.points.setDefault(org.orgId, point, body.extension, p.account.id);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
__decorate([
|
|
49
|
+
Get(),
|
|
50
|
+
OrgAction("org.extensions.manage"),
|
|
51
|
+
__param(0, CurrentOrg())
|
|
52
|
+
], ExtensionPointDefaultsController.prototype, "list", null);
|
|
53
|
+
__decorate([
|
|
54
|
+
Get("available"),
|
|
55
|
+
OrgAction("agents.use"),
|
|
56
|
+
__param(0, CurrentOrg())
|
|
57
|
+
], ExtensionPointDefaultsController.prototype, "available", null);
|
|
58
|
+
__decorate([
|
|
59
|
+
Put(":point/default"),
|
|
60
|
+
HttpCode(204),
|
|
61
|
+
OrgAction("org.extensions.manage"),
|
|
62
|
+
__param(0, CurrentPrincipal()),
|
|
63
|
+
__param(1, CurrentOrg()),
|
|
64
|
+
__param(2, ZParam(ExtensionPointParamsDto)),
|
|
65
|
+
__param(3, ZBody(ExtensionPointDefaultBodyDto))
|
|
66
|
+
], ExtensionPointDefaultsController.prototype, "setDefault", null);
|
|
67
|
+
ExtensionPointDefaultsController = __decorate([
|
|
68
|
+
Controller("api/v1/orgs/:orgId/extension-points"),
|
|
69
|
+
__param(0, Inject(ExtensionPointDefaults))
|
|
70
|
+
], ExtensionPointDefaultsController);
|
|
71
|
+
export { ExtensionPointDefaultsController };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
2
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
3
|
+
import type { KernelLogger } from "../log.js";
|
|
4
|
+
import { EffectiveConfigs } from "./effective-config.js";
|
|
5
|
+
import { OrgExtensionConfigs } from "./org-config.js";
|
|
6
|
+
import { ExtensionRegistry } from "./registry.js";
|
|
7
|
+
/**
|
|
8
|
+
* The outcome of {@link ExtensionPointDefaults.resolve}: the provider with its org config and its
|
|
9
|
+
* effective deployment config for the org (layering spec A §6), both to pass back to it.
|
|
10
|
+
*/
|
|
11
|
+
export type PointResolution<T> = {
|
|
12
|
+
ok: true;
|
|
13
|
+
extension: string;
|
|
14
|
+
impl: T;
|
|
15
|
+
orgConfig: unknown;
|
|
16
|
+
config: unknown;
|
|
17
|
+
} | {
|
|
18
|
+
ok: false;
|
|
19
|
+
reason: "none" | "ambiguous";
|
|
20
|
+
};
|
|
21
|
+
/** One `org-default` extension point of an org (the admin view). */
|
|
22
|
+
export interface OrgPointDefaultView {
|
|
23
|
+
point: string;
|
|
24
|
+
/** The extensions that could serve the org now, by name. */
|
|
25
|
+
candidates: string[];
|
|
26
|
+
/** The stored default, also when it is not a candidate now. */
|
|
27
|
+
default: string | null;
|
|
28
|
+
/** The extension a call would use now; null when there is none or the choice is ambiguous. */
|
|
29
|
+
effective: string | null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The org default provider of an `org-default` extension point (web tools spec §6). Per call,
|
|
33
|
+
* never cached in process: the candidates are the providers loaded on this replica that are
|
|
34
|
+
* enabled in the org, whose org config and effective deployment config for the org (layering spec
|
|
35
|
+
* A §6) are valid, and whose `configured()` (when present) does not return false. One candidate is used as is; several need the org's stored default
|
|
36
|
+
* (`capybara.org_extension_point_defaults`), else the choice is ambiguous. A stored default that
|
|
37
|
+
* is not a candidate (disabled, uninstalled, unconfigured) stays and counts again once it is one.
|
|
38
|
+
*/
|
|
39
|
+
export declare class ExtensionPointDefaults {
|
|
40
|
+
private readonly kdb;
|
|
41
|
+
readonly txHost: TransactionHost;
|
|
42
|
+
private readonly registry;
|
|
43
|
+
private readonly orgConfigs;
|
|
44
|
+
private readonly effective;
|
|
45
|
+
private readonly log;
|
|
46
|
+
constructor(kdb: KernelDb, txHost: TransactionHost, registry: Pick<ExtensionRegistry, "list">, orgConfigs: Pick<OrgExtensionConfigs, "get">, effective: Pick<EffectiveConfigs, "get">, log: KernelLogger);
|
|
47
|
+
/**
|
|
48
|
+
* The provider of `point` (the name without the major, e.g. `web-search`) for `orgId`, with the
|
|
49
|
+
* org's decrypted config and the effective deployment config to pass back to it. Throws when the
|
|
50
|
+
* point has no `selection`.
|
|
51
|
+
*/
|
|
52
|
+
resolve<T>(orgId: string, point: string): Promise<PointResolution<T>>;
|
|
53
|
+
/** Every `org-default` point with its candidates, stored default and effective provider. */
|
|
54
|
+
list(orgId: string): Promise<OrgPointDefaultView[]>;
|
|
55
|
+
/** Whether each `org-default` point has a provider for the org now (no extension names). */
|
|
56
|
+
available(orgId: string): Promise<{
|
|
57
|
+
point: string;
|
|
58
|
+
available: boolean;
|
|
59
|
+
}[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Stores `extension` as the org's default provider of `point`. 400 `validation_failed` unless
|
|
62
|
+
* the point is an `org-default` one and the extension provides it (loaded here) and is enabled
|
|
63
|
+
* in the org. Audited as `extension_point.default_set`.
|
|
64
|
+
*/
|
|
65
|
+
setDefault(orgId: string, point: string, extension: string, actorId: string): Promise<void>;
|
|
66
|
+
/** The candidates of `point` in `orgId`, by extension name. */
|
|
67
|
+
private candidates;
|
|
68
|
+
private choose;
|
|
69
|
+
/** The org's stored defaults, point → extension. */
|
|
70
|
+
private storedDefaults;
|
|
71
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
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 { EXTENSION_POINTS } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { ApiError } from "../errors.js";
|
|
13
|
+
import { audit } from "../identity/audit.js";
|
|
14
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
15
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
16
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
17
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
18
|
+
import { EffectiveConfigs } from "./effective-config.js";
|
|
19
|
+
import { enabledExtensionsQuery, isExtensionEnabled } from "./enabled.js";
|
|
20
|
+
import { OrgExtensionConfigs } from "./org-config.js";
|
|
21
|
+
import { ExtensionRegistry } from "./registry.js";
|
|
22
|
+
/** The extension points whose provider each org chooses (`selection: "org-default"`). */
|
|
23
|
+
function selectionPoints() {
|
|
24
|
+
return Object.entries(EXTENSION_POINTS)
|
|
25
|
+
.filter(([, info]) => info.selection === "org-default")
|
|
26
|
+
.map(([name]) => name);
|
|
27
|
+
}
|
|
28
|
+
const hasSelection = (point) => EXTENSION_POINTS[point]?.selection === "org-default";
|
|
29
|
+
/**
|
|
30
|
+
* The org default provider of an `org-default` extension point (web tools spec §6). Per call,
|
|
31
|
+
* never cached in process: the candidates are the providers loaded on this replica that are
|
|
32
|
+
* enabled in the org, whose org config and effective deployment config for the org (layering spec
|
|
33
|
+
* A §6) are valid, and whose `configured()` (when present) does not return false. One candidate is used as is; several need the org's stored default
|
|
34
|
+
* (`capybara.org_extension_point_defaults`), else the choice is ambiguous. A stored default that
|
|
35
|
+
* is not a candidate (disabled, uninstalled, unconfigured) stays and counts again once it is one.
|
|
36
|
+
*/
|
|
37
|
+
let ExtensionPointDefaults = class ExtensionPointDefaults {
|
|
38
|
+
kdb;
|
|
39
|
+
txHost;
|
|
40
|
+
registry;
|
|
41
|
+
orgConfigs;
|
|
42
|
+
effective;
|
|
43
|
+
log;
|
|
44
|
+
constructor(kdb, txHost, registry, orgConfigs, effective, log) {
|
|
45
|
+
this.kdb = kdb;
|
|
46
|
+
this.txHost = txHost;
|
|
47
|
+
this.registry = registry;
|
|
48
|
+
this.orgConfigs = orgConfigs;
|
|
49
|
+
this.effective = effective;
|
|
50
|
+
this.log = log;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The provider of `point` (the name without the major, e.g. `web-search`) for `orgId`, with the
|
|
54
|
+
* org's decrypted config and the effective deployment config to pass back to it. Throws when the
|
|
55
|
+
* point has no `selection`.
|
|
56
|
+
*/
|
|
57
|
+
async resolve(orgId, point) {
|
|
58
|
+
if (!hasSelection(point)) {
|
|
59
|
+
throw new Error(`extension point ${point} has no org-default selection`);
|
|
60
|
+
}
|
|
61
|
+
const candidates = await this.candidates(orgId, point);
|
|
62
|
+
const chosen = await this.choose(orgId, point, candidates);
|
|
63
|
+
if (!chosen.ok)
|
|
64
|
+
return chosen;
|
|
65
|
+
const c = chosen.candidate;
|
|
66
|
+
return {
|
|
67
|
+
ok: true,
|
|
68
|
+
extension: c.extension,
|
|
69
|
+
impl: c.impl,
|
|
70
|
+
orgConfig: c.orgConfig,
|
|
71
|
+
config: c.config,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Every `org-default` point with its candidates, stored default and effective provider. */
|
|
75
|
+
async list(orgId) {
|
|
76
|
+
const stored = await this.storedDefaults(orgId);
|
|
77
|
+
const out = [];
|
|
78
|
+
for (const point of selectionPoints()) {
|
|
79
|
+
const candidates = await this.candidates(orgId, point);
|
|
80
|
+
const chosen = pick(candidates, stored.get(point));
|
|
81
|
+
out.push({
|
|
82
|
+
point,
|
|
83
|
+
candidates: candidates.map((c) => c.extension),
|
|
84
|
+
default: stored.get(point) ?? null,
|
|
85
|
+
effective: chosen.ok ? chosen.candidate.extension : null,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
/** Whether each `org-default` point has a provider for the org now (no extension names). */
|
|
91
|
+
async available(orgId) {
|
|
92
|
+
const out = [];
|
|
93
|
+
for (const point of selectionPoints()) {
|
|
94
|
+
out.push({ point, available: (await this.resolve(orgId, point)).ok });
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Stores `extension` as the org's default provider of `point`. 400 `validation_failed` unless
|
|
100
|
+
* the point is an `org-default` one and the extension provides it (loaded here) and is enabled
|
|
101
|
+
* in the org. Audited as `extension_point.default_set`.
|
|
102
|
+
*/
|
|
103
|
+
async setDefault(orgId, point, extension, actorId) {
|
|
104
|
+
const db = this.kdb.db;
|
|
105
|
+
if (!hasSelection(point)) {
|
|
106
|
+
throw new ApiError("validation_failed", `${point} is not an extension point with an organization default`);
|
|
107
|
+
}
|
|
108
|
+
const provides = this.registry.list(point).some((e) => e.plugin === extension);
|
|
109
|
+
if (!provides || !(await isExtensionEnabled(db, orgId, extension))) {
|
|
110
|
+
throw new ApiError("validation_failed", `Extension ${extension} does not provide ${point} or is not enabled in this organization`);
|
|
111
|
+
}
|
|
112
|
+
await db
|
|
113
|
+
.insertInto("org_extension_point_defaults")
|
|
114
|
+
.values({ org_id: orgId, point, extension, updated_by: actorId })
|
|
115
|
+
.onConflict((oc) => oc.columns(["org_id", "point"]).doUpdateSet({
|
|
116
|
+
extension,
|
|
117
|
+
updated_by: actorId,
|
|
118
|
+
updated_at: new Date(),
|
|
119
|
+
}))
|
|
120
|
+
.execute();
|
|
121
|
+
await audit(db, {
|
|
122
|
+
actorAccountId: actorId,
|
|
123
|
+
orgId,
|
|
124
|
+
action: "extension_point.default_set",
|
|
125
|
+
target: point,
|
|
126
|
+
detail: { point, extension },
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** The candidates of `point` in `orgId`, by extension name. */
|
|
130
|
+
async candidates(orgId, point) {
|
|
131
|
+
const db = this.kdb.db;
|
|
132
|
+
const enabled = new Set((await db
|
|
133
|
+
.selectFrom(enabledExtensionsQuery(db, orgId).as("en"))
|
|
134
|
+
.select("en.plugin")
|
|
135
|
+
.execute()).map((r) => r.plugin));
|
|
136
|
+
const providers = new Map();
|
|
137
|
+
for (const e of this.registry.list(point)) {
|
|
138
|
+
if (enabled.has(e.plugin) && !providers.has(e.plugin))
|
|
139
|
+
providers.set(e.plugin, e.impl);
|
|
140
|
+
}
|
|
141
|
+
const out = [];
|
|
142
|
+
for (const [extension, impl] of providers) {
|
|
143
|
+
let cfg;
|
|
144
|
+
try {
|
|
145
|
+
cfg = await this.orgConfigs.get(orgId, extension);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
this.log.warn("org default provider: provider excluded, its org config is invalid", {
|
|
149
|
+
orgId,
|
|
150
|
+
point,
|
|
151
|
+
extension,
|
|
152
|
+
err,
|
|
153
|
+
});
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (!cfg?.enabled)
|
|
157
|
+
continue;
|
|
158
|
+
// spec A §6: an org whose effective config is not valid gets no call from this extension
|
|
159
|
+
let effective;
|
|
160
|
+
try {
|
|
161
|
+
effective = await this.effective.get(orgId, extension);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
this.log.warn("org default provider: provider excluded, cannot read its effective config", {
|
|
165
|
+
orgId,
|
|
166
|
+
point,
|
|
167
|
+
extension,
|
|
168
|
+
err,
|
|
169
|
+
});
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (!effective.ok)
|
|
173
|
+
continue;
|
|
174
|
+
const configured = impl
|
|
175
|
+
.configured;
|
|
176
|
+
if (typeof configured === "function") {
|
|
177
|
+
let ok;
|
|
178
|
+
try {
|
|
179
|
+
ok = configured.call(impl, cfg.config, effective.config) !== false;
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
this.log.warn("org default provider: provider excluded, configured() threw", {
|
|
183
|
+
orgId,
|
|
184
|
+
point,
|
|
185
|
+
extension,
|
|
186
|
+
err,
|
|
187
|
+
});
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (!ok)
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
out.push({ extension, impl, orgConfig: cfg.config, config: effective.config });
|
|
194
|
+
}
|
|
195
|
+
return out.sort((a, b) => (a.extension < b.extension ? -1 : a.extension > b.extension ? 1 : 0));
|
|
196
|
+
}
|
|
197
|
+
async choose(orgId, point, candidates) {
|
|
198
|
+
if (candidates.length < 2)
|
|
199
|
+
return pick(candidates, undefined);
|
|
200
|
+
return pick(candidates, (await this.storedDefaults(orgId)).get(point));
|
|
201
|
+
}
|
|
202
|
+
/** The org's stored defaults, point → extension. */
|
|
203
|
+
async storedDefaults(orgId) {
|
|
204
|
+
const rows = await this.kdb.db
|
|
205
|
+
.selectFrom("org_extension_point_defaults")
|
|
206
|
+
.select(["point", "extension"])
|
|
207
|
+
.where("org_id", "=", orgId)
|
|
208
|
+
.execute();
|
|
209
|
+
return new Map(rows.map((r) => [r.point, r.extension]));
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
__decorate([
|
|
213
|
+
Transactional()
|
|
214
|
+
], ExtensionPointDefaults.prototype, "setDefault", null);
|
|
215
|
+
ExtensionPointDefaults = __decorate([
|
|
216
|
+
Injectable(),
|
|
217
|
+
__param(0, Inject(KernelDb)),
|
|
218
|
+
__param(1, Inject(TransactionHost)),
|
|
219
|
+
__param(2, Inject(ExtensionRegistry)),
|
|
220
|
+
__param(3, Inject(OrgExtensionConfigs)),
|
|
221
|
+
__param(4, Inject(EffectiveConfigs)),
|
|
222
|
+
__param(5, Inject(KERNEL_LOGGER))
|
|
223
|
+
], ExtensionPointDefaults);
|
|
224
|
+
export { ExtensionPointDefaults };
|
|
225
|
+
/** Rules 2-4 of spec §6: one candidate → it; several → the stored default if a candidate. */
|
|
226
|
+
function pick(candidates, stored) {
|
|
227
|
+
const [only] = candidates;
|
|
228
|
+
if (only === undefined)
|
|
229
|
+
return { ok: false, reason: "none" };
|
|
230
|
+
if (candidates.length === 1)
|
|
231
|
+
return { ok: true, candidate: only };
|
|
232
|
+
const chosen = candidates.find((c) => c.extension === stored);
|
|
233
|
+
return chosen ? { ok: true, candidate: chosen } : { ok: false, reason: "ambiguous" };
|
|
234
|
+
}
|
|
@@ -11,7 +11,7 @@ export interface ExtensionPointEntry {
|
|
|
11
11
|
version: string;
|
|
12
12
|
/** 部署配置摘要,见 `deploymentConfigHash`。 */
|
|
13
13
|
configHash: string;
|
|
14
|
-
/**
|
|
14
|
+
/** The provider instance's in-flight tracker (a tracked point's `impl`: connector, sandbox, model-provider, web-search, web-fetch, is already a proxy counted in it). */
|
|
15
15
|
inflight: InflightTracker;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
@@ -12,6 +12,8 @@ const TRACKED_EXTENSION_POINTS = {
|
|
|
12
12
|
connector: { sessions: ["open"] },
|
|
13
13
|
sandbox: {},
|
|
14
14
|
"model-provider": {},
|
|
15
|
+
"web-search": {},
|
|
16
|
+
"web-fetch": {},
|
|
15
17
|
};
|
|
16
18
|
/**
|
|
17
19
|
* The extension instances in effect in this process (by extension name, one each). One provider
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { type ExtensionManifest } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
/** 插件依赖解析失败(信息列出插件名与能力名)。 */
|
|
3
3
|
export declare class ExtensionResolveError extends Error {
|
|
4
|
-
|
|
4
|
+
/** Error code of the failure, when it has one. */
|
|
5
|
+
readonly code?: string | undefined;
|
|
6
|
+
constructor(message: string,
|
|
7
|
+
/** Error code of the failure, when it has one. */
|
|
8
|
+
code?: string | undefined);
|
|
5
9
|
}
|
|
6
10
|
/**
|
|
7
11
|
* 校验 sdk 范围、依赖满足度、单选能力唯一性与无环,返回按依赖拓扑排序后的列表(同层保持输入顺序)。
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { EXTENSION_POINT_CARDINALITY, OBJECT_STORE_EXTENSION_POINT, parseExtensionPoint, } from "@capybara-hq/plugin-sdk";
|
|
1
|
+
import { EXTENSION_POINT_CARDINALITY, EXTENSION_POINTS, OBJECT_STORE_EXTENSION_POINT, parseExtensionPoint, } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import semver from "semver";
|
|
3
3
|
/** 插件依赖解析失败(信息列出插件名与能力名)。 */
|
|
4
4
|
export class ExtensionResolveError extends Error {
|
|
5
|
-
|
|
5
|
+
code;
|
|
6
|
+
constructor(message,
|
|
7
|
+
/** Error code of the failure, when it has one. */
|
|
8
|
+
code) {
|
|
6
9
|
super(message);
|
|
10
|
+
this.code = code;
|
|
7
11
|
this.name = "ExtensionResolveError";
|
|
8
12
|
}
|
|
9
13
|
}
|
|
@@ -23,6 +27,15 @@ export function resolveExtensions(manifests, sdkVersion) {
|
|
|
23
27
|
throw new ExtensionResolveError(`plugin ${m.name}: sdk range "${m.sdk}" is not satisfied by SDK_VERSION ${sdkVersion}`);
|
|
24
28
|
}
|
|
25
29
|
}
|
|
30
|
+
for (const m of manifests) {
|
|
31
|
+
for (const ref of m.provides) {
|
|
32
|
+
const { name, major } = parseExtensionPoint(ref);
|
|
33
|
+
const majors = EXTENSION_POINTS[name]?.majors;
|
|
34
|
+
if (majors && !majors.includes(major)) {
|
|
35
|
+
throw new ExtensionResolveError(`Plugin ${m.name} provides ${ref}, which this kernel no longer supports; upgrade it to a version that provides ${name}@${Math.max(...majors)}.`, "extension.unsupported_extension_point");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
26
39
|
const providers = new Map();
|
|
27
40
|
for (const m of manifests) {
|
|
28
41
|
for (const cap of m.provides)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type FilePreviewer, type Logger, type UiView } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import { ConversationFiles } from "../conversations/files.js";
|
|
3
|
+
import { EffectiveConfigs } from "../extensions/effective-config.js";
|
|
3
4
|
import { ExtensionHost } from "../extensions/host.js";
|
|
4
5
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
6
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
@@ -39,7 +40,7 @@ export declare class PreviewerRegistry {
|
|
|
39
40
|
readonly txHost: TransactionHost;
|
|
40
41
|
private readonly timeoutMs;
|
|
41
42
|
private readonly d;
|
|
42
|
-
constructor(kdb: Pick<KernelDb, "db">, host: Pick<ExtensionHost, "list" | "enabledPlugins">, files: Pick<ConversationFiles, "file">, storage: Pick<StorageService, "kernel">, log: Pick<Logger, "warn">, txHost: TransactionHost, timeoutMs?: number);
|
|
43
|
+
constructor(kdb: Pick<KernelDb, "db">, host: Pick<ExtensionHost, "list" | "enabledPlugins">, files: Pick<ConversationFiles, "file">, storage: Pick<StorageService, "kernel">, effective: Pick<EffectiveConfigs, "get">, log: Pick<Logger, "warn">, txHost: TransactionHost, timeoutMs?: number);
|
|
43
44
|
/** Every previewer loaded on this replica, in provider order (load order, then list order). */
|
|
44
45
|
private loaded;
|
|
45
46
|
/** The org's previewers (enabled extensions only) in its order, disabled ones included. */
|
|
@@ -65,6 +66,12 @@ export declare class PreviewerRegistry {
|
|
|
65
66
|
private putIn;
|
|
66
67
|
/** Previewers that take this file (viewer must read the conversation), in the org's order. */
|
|
67
68
|
forFile(orgId: string, conversationId: string, viewer: string, fileId: string): Promise<PreviewerItem[]>;
|
|
69
|
+
/**
|
|
70
|
+
* The org's enabled previewers that take the file, each with its extension's effective config
|
|
71
|
+
* for the org. An extension whose effective config is not valid in the org (or cannot be read)
|
|
72
|
+
* previews nothing there (layering spec A §6): its previewers are left out, so the next one or a
|
|
73
|
+
* built-in takes the file.
|
|
74
|
+
*/
|
|
68
75
|
private accepting;
|
|
69
76
|
/**
|
|
70
77
|
* Renders a view previewer for one file: 404 `ui.not_found` when it does not take the file (or is
|