@capybara-hq/kernel 0.1.0-rc.2 → 0.1.0-rc.21
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 +94 -5
- package/dist/admin/admin-agents.controller.d.ts +28 -0
- package/dist/admin/admin-agents.controller.js +79 -0
- package/dist/admin/admin-connectors.controller.d.ts +29 -0
- package/dist/admin/admin-connectors.controller.js +79 -0
- package/dist/admin/admin-items.schemas.d.ts +42 -0
- package/dist/admin/admin-items.schemas.js +48 -0
- package/dist/admin/admin.controller.d.ts +52 -80
- package/dist/admin/admin.controller.js +112 -81
- package/dist/admin/admin.module.d.ts +4 -1
- package/dist/admin/admin.module.js +50 -4
- package/dist/admin/admin.schemas.d.ts +69 -0
- package/dist/admin/admin.schemas.js +53 -0
- package/dist/admin/audit.controller.d.ts +14 -0
- package/dist/admin/audit.controller.js +42 -0
- package/dist/admin/audit.schemas.d.ts +8 -0
- package/dist/admin/audit.schemas.js +17 -0
- package/dist/admin/extensions.controller.d.ts +34 -3
- package/dist/admin/extensions.controller.js +66 -8
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/health.service.d.ts +104 -0
- package/dist/admin/health.service.js +246 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/overview.controller.d.ts +31 -0
- package/dist/admin/overview.controller.js +78 -0
- package/dist/admin/overview.schemas.d.ts +8 -0
- package/dist/admin/overview.schemas.js +13 -0
- package/dist/admin/overview.service.d.ts +112 -0
- package/dist/admin/overview.service.js +223 -0
- package/dist/admin/platform-audit.service.d.ts +41 -0
- package/dist/admin/platform-audit.service.js +70 -0
- 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/admin/usage.service.d.ts +149 -0
- package/dist/admin/usage.service.js +321 -0
- package/dist/agents/admin-agents.d.ts +92 -0
- package/dist/agents/admin-agents.js +170 -0
- package/dist/agents/agent-lookup.d.ts +24 -0
- package/dist/agents/agent-lookup.js +46 -2
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +53 -168
- package/dist/agents/agents.controller.js +163 -34
- package/dist/agents/agents.module.d.ts +6 -2
- package/dist/agents/agents.module.js +41 -7
- package/dist/agents/agents.schemas.d.ts +392 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +121 -36
- package/dist/agents/agents.service.js +411 -121
- package/dist/agents/definition.d.ts +142 -21
- package/dist/agents/definition.js +389 -43
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +876 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +114 -0
- package/dist/agents/profile.js +55 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +77 -5
- package/dist/agents/templates.controller.js +153 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +482 -44
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +80 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +109 -0
- package/dist/background/tasks.service.js +271 -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 +136 -52
- package/dist/catalog/admin-catalog.controller.js +275 -65
- package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
- package/dist/catalog/admin-catalog.schemas.js +99 -0
- package/dist/catalog/appearance.schemas.d.ts +10 -0
- package/dist/catalog/appearance.schemas.js +20 -0
- package/dist/catalog/appearance.service.d.ts +105 -0
- package/dist/catalog/appearance.service.js +306 -0
- package/dist/catalog/catalog-content.d.ts +122 -35
- package/dist/catalog/catalog-content.js +122 -14
- package/dist/catalog/catalog-files.d.ts +42 -0
- package/dist/catalog/catalog-files.js +89 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +63 -0
- package/dist/catalog/catalog-items.d.ts +122 -7
- package/dist/catalog/catalog-items.js +301 -13
- package/dist/catalog/catalog-scope.service.d.ts +293 -0
- package/dist/catalog/catalog-scope.service.js +1236 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +47 -31
- package/dist/catalog/catalog.service.d.ts +122 -31
- package/dist/catalog/catalog.service.js +177 -105
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/claude/translate.js +3 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +29 -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 +102 -0
- package/dist/catalog/component-scope.controller.js +257 -0
- package/dist/catalog/component-scope.schemas.d.ts +118 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +394 -0
- package/dist/catalog/component-scope.service.js +1133 -0
- package/dist/catalog/component-state.d.ts +207 -0
- package/dist/catalog/component-state.js +484 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +50 -41
- package/dist/catalog/marketplaces.controller.js +130 -46
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +110 -17
- package/dist/catalog/marketplaces.service.js +337 -29
- package/dist/catalog/org-catalog.controller.d.ts +114 -62
- package/dist/catalog/org-catalog.controller.js +191 -98
- package/dist/catalog/org-catalog.schemas.d.ts +104 -0
- package/dist/catalog/org-catalog.schemas.js +107 -0
- package/dist/catalog/org-catalog.service.d.ts +72 -33
- package/dist/catalog/org-catalog.service.js +367 -158
- 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 +133 -0
- package/dist/catalog/org-extension.controller.js +313 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +808 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +243 -0
- package/dist/catalog/platform-components.js +872 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +583 -0
- package/dist/catalog/plugin-import.d.ts +254 -47
- package/dist/catalog/plugin-import.js +810 -112
- package/dist/catalog/plugin-install.d.ts +205 -42
- package/dist/catalog/plugin-install.js +828 -126
- package/dist/catalog/plugin-package.d.ts +43 -4
- package/dist/catalog/plugin-package.js +194 -7
- package/dist/catalog/plugin-upgrade.d.ts +308 -225
- package/dist/catalog/plugin-upgrade.js +1325 -1131
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +194 -118
- package/dist/catalog/requests.service.js +530 -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 +119 -0
- package/dist/channels/actions.js +10 -3
- package/dist/channels/cards.d.ts +36 -10
- package/dist/channels/cards.js +100 -25
- package/dist/channels/channels.module.js +13 -2
- package/dist/channels/channels.schemas.d.ts +41 -0
- package/dist/channels/channels.schemas.js +40 -0
- package/dist/channels/connections.controller.d.ts +46 -37
- package/dist/channels/connections.controller.js +76 -34
- package/dist/channels/connections.service.d.ts +102 -10
- package/dist/channels/connections.service.js +271 -24
- package/dist/channels/inbound.d.ts +11 -1
- package/dist/channels/inbound.js +87 -7
- package/dist/channels/outbound.d.ts +14 -1
- package/dist/channels/outbound.js +64 -15
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +2 -0
- package/dist/channels/supervisor.js +4 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/channels/webhook.d.ts +21 -1
- package/dist/channels/webhook.js +39 -4
- package/dist/client/client-access.service.d.ts +102 -0
- package/dist/client/client-access.service.js +303 -0
- package/dist/client/client-builds.service.d.ts +109 -0
- package/dist/client/client-builds.service.js +229 -0
- package/dist/client/client-delivery.controller.d.ts +25 -0
- package/dist/client/client-delivery.controller.js +66 -0
- package/dist/client/client-files.d.ts +48 -0
- package/dist/client/client-files.js +136 -0
- package/dist/client/client-reports.cron.d.ts +13 -0
- package/dist/client/client-reports.cron.js +42 -0
- package/dist/client/client-reports.service.d.ts +30 -0
- package/dist/client/client-reports.service.js +102 -0
- package/dist/client/client-sign-in.service.d.ts +21 -0
- package/dist/client/client-sign-in.service.js +49 -0
- package/dist/client/client.controller.d.ts +49 -0
- package/dist/client/client.controller.js +129 -0
- package/dist/client/client.module.d.ts +8 -0
- package/dist/client/client.module.js +28 -0
- package/dist/client/client.schemas.d.ts +61 -0
- package/dist/client/client.schemas.js +27 -0
- package/dist/config/docs.js +5 -1
- package/dist/config/schema.d.ts +35 -2
- package/dist/config/schema.js +216 -21
- 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/artifacts.d.ts +1 -1
- package/dist/conversations/artifacts.js +1 -1
- 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 -44
- package/dist/conversations/conversations.controller.js +133 -82
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +161 -13
- package/dist/conversations/conversations.service.js +329 -57
- package/dist/conversations/device-status.d.ts +24 -0
- package/dist/conversations/device-status.js +71 -0
- package/dist/conversations/event-log.d.ts +45 -9
- package/dist/conversations/event-log.js +113 -6
- package/dist/conversations/events.d.ts +255 -9
- package/dist/conversations/events.js +250 -34
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/queue.d.ts +5 -2
- package/dist/conversations/queue.js +24 -4
- package/dist/conversations/queue.service.d.ts +2 -2
- package/dist/conversations/queue.service.js +21 -3
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +40 -16
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +48 -5
- package/dist/ctx/create-ctx.js +174 -34
- package/dist/db/kernel-schema.d.ts +668 -27
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/devices/access.d.ts +66 -0
- package/dist/devices/access.js +113 -0
- package/dist/devices/conversation-devices.d.ts +75 -0
- package/dist/devices/conversation-devices.js +230 -0
- package/dist/devices/devices.controller.d.ts +36 -0
- package/dist/devices/devices.controller.js +124 -0
- package/dist/devices/devices.module.d.ts +8 -0
- package/dist/devices/devices.module.js +34 -0
- package/dist/devices/devices.schemas.d.ts +3 -0
- package/dist/devices/devices.schemas.js +14 -0
- package/dist/devices/devices.service.d.ts +251 -0
- package/dist/devices/devices.service.js +791 -0
- package/dist/devices/dto.d.ts +25 -0
- package/dist/devices/dto.js +12 -0
- package/dist/devices/label.d.ts +11 -0
- package/dist/devices/label.js +25 -0
- package/dist/devices/legacy-cleanup.job.d.ts +34 -0
- package/dist/devices/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +215 -3
- package/dist/errors.js +215 -3
- package/dist/evals/evals.module.js +11 -2
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +20 -3
- package/dist/evals/run-replay.js +78 -14
- package/dist/evals/runs.controller.d.ts +2 -57
- package/dist/evals/runs.controller.js +1 -42
- package/dist/evals/runs.service.d.ts +8 -7
- package/dist/evals/runs.service.js +45 -30
- package/dist/evals/sets.controller.d.ts +2 -28
- package/dist/evals/sets.controller.js +1 -31
- package/dist/evals/sets.service.d.ts +7 -7
- package/dist/evals/sets.service.js +23 -17
- package/dist/evals/snapshot.d.ts +3 -2
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +16 -9
- package/dist/evals/trajectory.d.ts +5 -3
- package/dist/evals/trajectory.js +4 -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 +81 -14
- package/dist/extensions/admin-ops.js +181 -47
- package/dist/extensions/admin-view.d.ts +57 -10
- package/dist/extensions/admin-view.js +249 -27
- package/dist/extensions/approvals.d.ts +12 -2
- package/dist/extensions/blobs.d.ts +14 -1
- package/dist/extensions/blobs.js +49 -5
- package/dist/extensions/bootstrap.d.ts +85 -10
- package/dist/extensions/bootstrap.js +215 -36
- 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/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 +94 -9
- package/dist/extensions/deployment-config.js +255 -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 +133 -0
- package/dist/extensions/effective-config.js +379 -0
- package/dist/extensions/extensions.module.js +31 -12
- package/dist/extensions/guide-places.d.ts +68 -0
- package/dist/extensions/guide-places.js +152 -0
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +105 -12
- package/dist/extensions/host.js +372 -87
- package/dist/extensions/installs.d.ts +30 -9
- package/dist/extensions/installs.js +57 -16
- package/dist/extensions/instance.d.ts +17 -2
- package/dist/extensions/instance.js +21 -0
- package/dist/extensions/ledger.d.ts +1 -1
- package/dist/extensions/locks.d.ts +12 -0
- package/dist/extensions/locks.js +26 -0
- package/dist/extensions/org-config.d.ts +97 -7
- package/dist/extensions/org-config.js +215 -45
- 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 +18 -4
- package/dist/extensions/package.js +56 -3
- package/dist/extensions/permission-set.d.ts +35 -5
- package/dist/extensions/permission-set.js +36 -5
- package/dist/extensions/permission-view.d.ts +106 -13
- package/dist/extensions/permission-view.js +33 -15
- package/dist/extensions/plugin-guides.d.ts +282 -0
- package/dist/extensions/plugin-guides.js +554 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +13 -2
- package/dist/extensions/sources.js +2 -0
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +46 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/previewers.controller.js +2 -3
- package/dist/files/previewers.d.ts +10 -3
- package/dist/files/previewers.js +40 -11
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/api.module.js +76 -4
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/gateway-routes.d.ts +7 -3
- package/dist/http/gateway-routes.js +6 -3
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +77 -31
- package/dist/identity/accounts.js +133 -52
- 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 +35 -9
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +7 -4
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +17 -1
- package/dist/identity/me.controller.js +45 -4
- package/dist/identity/me.schemas.d.ts +24 -0
- package/dist/identity/me.schemas.js +25 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +99 -12
- package/dist/identity/settings.js +234 -25
- 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/identity/write-actor.d.ts +11 -0
- package/dist/identity/write-actor.js +7 -0
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +64 -4
- 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 +157 -0
- package/dist/inbox/platform-inbox.service.js +281 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +7 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +32 -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 +31 -3
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/lock/lock.service.d.ts +8 -0
- package/dist/infra/lock/lock.service.js +27 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/presence/presence.module.d.ts +6 -0
- package/dist/infra/presence/presence.module.js +22 -0
- package/dist/infra/presence/replica-presence.d.ts +87 -0
- package/dist/infra/presence/replica-presence.js +189 -0
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/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/throttler/named-throttlers.d.ts +12 -0
- package/dist/infra/throttler/named-throttlers.js +67 -0
- package/dist/infra/throttler/throttler.guard.js +1 -1
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +15 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +9 -3
- package/dist/lifecycle/kernel-lifecycle.js +51 -11
- package/dist/local-devices/device-auth.controller.d.ts +42 -0
- package/dist/local-devices/device-auth.controller.js +116 -0
- package/dist/local-devices/device-auth.d.ts +119 -0
- package/dist/local-devices/device-auth.js +401 -0
- package/dist/local-devices/device-auth.module.d.ts +7 -0
- package/dist/local-devices/device-auth.module.js +25 -0
- package/dist/local-devices/device-routes.d.ts +36 -0
- package/dist/local-devices/device-routes.js +90 -0
- package/dist/local-devices/dto.d.ts +66 -0
- package/dist/local-devices/dto.js +44 -0
- package/dist/local-devices/keys.d.ts +25 -0
- package/dist/local-devices/keys.js +25 -0
- package/dist/local-devices/local-device-gateway.d.ts +134 -0
- package/dist/local-devices/local-device-gateway.js +542 -0
- package/dist/local-devices/local-device-provider.d.ts +89 -0
- package/dist/local-devices/local-device-provider.js +151 -0
- package/dist/local-devices/local-devices.module.d.ts +16 -0
- package/dist/local-devices/local-devices.module.js +44 -0
- package/dist/local-devices/machines.d.ts +118 -0
- package/dist/local-devices/machines.js +366 -0
- package/dist/local-devices/relay.d.ts +100 -0
- package/dist/local-devices/relay.js +373 -0
- package/dist/local-devices/targets.d.ts +28 -0
- package/dist/local-devices/targets.js +73 -0
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -4
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +8 -6
- package/dist/models/prices.js +11 -9
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +72 -14
- package/dist/models/purposes.js +115 -34
- 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.controller.d.ts +2 -5
- package/dist/orgs/orgs.controller.js +3 -6
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +23 -8
- package/dist/orgs/orgs.service.js +38 -16
- 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 +66 -6
- package/dist/orgs/settings.service.js +89 -10
- package/dist/overrides.d.ts +16 -1
- package/dist/overrides.js +10 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +774 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +102 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin-items.ops.d.ts +37 -0
- package/dist/platform/ops/admin-items.ops.js +278 -0
- package/dist/platform/ops/admin.ops.d.ts +38 -0
- package/dist/platform/ops/admin.ops.js +497 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
- package/dist/platform/ops/agent-skills.ops.js +509 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +730 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
- package/dist/platform/ops/catalog-admin.ops.js +682 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +854 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +190 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/devices.ops.d.ts +26 -0
- package/dist/platform/ops/devices.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +381 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
- package/dist/platform/ops/org-plugins.ops.js +388 -0
- package/dist/platform/ops/org-settings.ops.d.ts +18 -0
- package/dist/platform/ops/org-settings.ops.js +127 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +298 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +30 -0
- package/dist/platform/ops/platform.ops.js +231 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/setup.ops.d.ts +24 -0
- package/dist/platform/ops/setup.ops.js +212 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +160 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/themes.ops.d.ts +14 -0
- package/dist/platform/ops/themes.ops.js +47 -0
- package/dist/platform/ops/ui.ops.d.ts +8 -0
- package/dist/platform/ops/ui.ops.js +41 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +43 -0
- package/dist/platform/platform-ops.module.js +142 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +85 -0
- package/dist/roles/gateway-role.d.ts +18 -3
- package/dist/roles/gateway-role.js +33 -5
- package/dist/roles/gateway.module.d.ts +2 -1
- package/dist/roles/gateway.module.js +6 -3
- 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 +21 -1
- package/dist/runtime/context/build.d.ts +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/device-paths.d.ts +40 -0
- package/dist/runtime/context/device-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/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 +36 -17
- package/dist/runtime/loop.d.ts +35 -6
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +54 -11
- package/dist/runtime/model-call.js +105 -28
- package/dist/runtime/providers.d.ts +149 -29
- package/dist/runtime/providers.js +332 -63
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -0
- package/dist/runtime/run-control.d.ts +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-finish.d.ts +1 -1
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +7 -9
- package/dist/runtime/run-queue.d.ts +62 -5
- package/dist/runtime/run-queue.js +313 -40
- package/dist/runtime/run-worker.d.ts +19 -8
- package/dist/runtime/run-worker.js +105 -44
- package/dist/runtime/runtime.module.js +13 -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 +31 -26
- package/dist/runtime/subagents/definition.js +89 -142
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +116 -27
- package/dist/runtime/subagents/dispatch.js +213 -142
- 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/org-agents.js +2 -1
- 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 +25 -8
- package/dist/runtime/subagents/roster.js +48 -12
- package/dist/runtime/subagents/skill-fork.d.ts +4 -3
- package/dist/runtime/subagents/skill-fork.js +9 -5
- 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 +9 -6
- package/dist/runtime/subagents/subagents.service.js +13 -8
- 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 +35 -39
- package/dist/runtime/usage-report.js +171 -97
- package/dist/runtime/waits.d.ts +148 -39
- package/dist/runtime/waits.js +426 -112
- 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 +34 -7
- package/dist/sandbox/providers.js +54 -9
- package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
- package/dist/sandbox/sandbox-file-reader.js +98 -0
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +345 -132
- package/dist/sandbox/sandbox.service.js +883 -399
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/setup/kernel-checks.d.ts +91 -0
- package/dist/setup/kernel-checks.js +295 -0
- package/dist/setup/oauth-token-probe.d.ts +47 -0
- package/dist/setup/oauth-token-probe.js +108 -0
- package/dist/setup/redact-check.d.ts +18 -0
- package/dist/setup/redact-check.js +46 -0
- package/dist/setup/setup-check-registry.d.ts +86 -0
- package/dist/setup/setup-check-registry.js +75 -0
- package/dist/setup/setup-checks.controller.d.ts +28 -0
- package/dist/setup/setup-checks.controller.js +78 -0
- package/dist/setup/setup-checks.schemas.d.ts +38 -0
- package/dist/setup/setup-checks.schemas.js +43 -0
- package/dist/setup/setup-checks.service.d.ts +144 -0
- package/dist/setup/setup-checks.service.js +683 -0
- package/dist/setup/setup-guides.controller.d.ts +18 -0
- package/dist/setup/setup-guides.controller.js +48 -0
- package/dist/setup/setup-guides.schemas.d.ts +10 -0
- package/dist/setup/setup-guides.schemas.js +6 -0
- package/dist/setup/setup-guides.service.d.ts +126 -0
- package/dist/setup/setup-guides.service.js +315 -0
- package/dist/setup/setup.module.d.ts +8 -0
- package/dist/setup/setup.module.js +31 -0
- package/dist/skills/agent-skills.controller.d.ts +48 -0
- package/dist/skills/agent-skills.controller.js +131 -0
- package/dist/skills/agent-skills.service.d.ts +262 -0
- package/dist/skills/agent-skills.service.js +996 -0
- package/dist/skills/catalog.d.ts +14 -11
- package/dist/skills/catalog.js +32 -50
- package/dist/skills/changes.controller.d.ts +12 -22
- package/dist/skills/changes.controller.js +27 -56
- package/dist/skills/changes.service.d.ts +69 -115
- package/dist/skills/changes.service.js +249 -598
- package/dist/skills/conversation-catalog.d.ts +53 -0
- package/dist/skills/conversation-catalog.js +149 -0
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +2 -2
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +3 -3
- package/dist/skills/invoke.js +21 -8
- package/dist/skills/package.d.ts +15 -1
- package/dist/skills/package.js +14 -1
- package/dist/skills/skills.controller.d.ts +32 -6
- package/dist/skills/skills.controller.js +64 -11
- package/dist/skills/skills.module.js +25 -3
- package/dist/skills/skills.schemas.d.ts +44 -0
- package/dist/skills/skills.schemas.js +68 -0
- package/dist/skills/skills.service.d.ts +123 -26
- package/dist/skills/skills.service.js +493 -76
- package/dist/skills/usable.d.ts +82 -0
- package/dist/skills/usable.js +388 -0
- package/dist/themes/render-css.d.ts +13 -0
- package/dist/themes/render-css.js +135 -0
- package/dist/themes/theme-delivery.service.d.ts +36 -0
- package/dist/themes/theme-delivery.service.js +116 -0
- package/dist/themes/theme-state.d.ts +116 -0
- package/dist/themes/theme-state.js +221 -0
- package/dist/themes/theme-usage.d.ts +61 -0
- package/dist/themes/theme-usage.js +98 -0
- package/dist/themes/themes-public.controller.d.ts +33 -0
- package/dist/themes/themes-public.controller.js +98 -0
- package/dist/themes/themes.controller.d.ts +13 -0
- package/dist/themes/themes.controller.js +38 -0
- package/dist/themes/themes.module.d.ts +3 -0
- package/dist/themes/themes.module.js +21 -0
- package/dist/themes/themes.schemas.d.ts +3 -0
- package/dist/themes/themes.schemas.js +2 -0
- package/dist/themes/themes.service.d.ts +50 -0
- package/dist/themes/themes.service.js +99 -0
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/admin-connectors.d.ts +69 -0
- package/dist/tools/admin-connectors.js +135 -0
- package/dist/tools/approvals.controller.js +2 -3
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +26 -2
- package/dist/tools/approvals.service.js +44 -5
- package/dist/tools/builtin-names.d.ts +104 -0
- package/dist/tools/builtin-names.js +164 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- package/dist/tools/builtins/ask-user.d.ts +1 -1
- package/dist/tools/builtins/ask-user.js +5 -4
- package/dist/tools/builtins/builtin-tools.d.ts +23 -4
- package/dist/tools/builtins/builtin-tools.js +78 -12
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -0
- package/dist/tools/builtins/read-tool-output.d.ts +1 -1
- package/dist/tools/builtins/read-tool-output.js +2 -2
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +291 -39
- package/dist/tools/builtins/sandbox/common.d.ts +135 -36
- package/dist/tools/builtins/sandbox/common.js +222 -62
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +19 -16
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +64 -50
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +17 -12
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +153 -34
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +29 -19
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +51 -44
- 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 +29 -18
- package/dist/tools/builtins/skill-load.js +125 -73
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/connector-account-policies.d.ts +51 -0
- package/dist/tools/connector-account-policies.js +165 -0
- package/dist/tools/connectors.controller.d.ts +74 -9
- package/dist/tools/connectors.controller.js +133 -16
- package/dist/tools/connectors.schemas.d.ts +27 -0
- package/dist/tools/connectors.schemas.js +34 -0
- package/dist/tools/connectors.service.d.ts +101 -8
- package/dist/tools/connectors.service.js +266 -28
- package/dist/tools/credentials.d.ts +23 -0
- package/dist/tools/credentials.js +90 -1
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.js +5 -5
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +61 -4
- package/dist/tools/info.js +119 -33
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +114 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/oauth/flow.js +1 -1
- package/dist/tools/oauth/tokens.d.ts +54 -7
- package/dist/tools/oauth/tokens.js +87 -17
- package/dist/tools/org-tool-switches.d.ts +89 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.js +1 -1
- package/dist/tools/pipeline.d.ts +67 -47
- package/dist/tools/pipeline.js +319 -380
- package/dist/tools/policy.d.ts +30 -23
- package/dist/tools/policy.js +142 -64
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +1 -1
- package/dist/tools/questions.service.d.ts +23 -2
- package/dist/tools/questions.service.js +104 -2
- package/dist/tools/registry.d.ts +189 -68
- package/dist/tools/registry.js +318 -236
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/tools.module.js +31 -3
- package/dist/tools/validate.js +1 -1
- package/dist/ui/admin-ui.controller.d.ts +56 -0
- package/dist/ui/admin-ui.controller.js +192 -0
- package/dist/ui/arrangement.d.ts +65 -0
- package/dist/ui/arrangement.js +171 -0
- package/dist/ui/embed-token.d.ts +2 -2
- package/dist/ui/embed-token.js +30 -5
- package/dist/ui/registry.d.ts +42 -17
- package/dist/ui/registry.js +46 -14
- package/dist/ui/slots.controller.d.ts +11 -0
- package/dist/ui/slots.controller.js +25 -0
- package/dist/ui/ui-stream.d.ts +20 -3
- package/dist/ui/ui-stream.js +25 -7
- package/dist/ui/ui.schemas.d.ts +70 -0
- package/dist/ui/ui.schemas.js +65 -0
- package/dist/ui/views.controller.d.ts +35 -49
- package/dist/ui/views.controller.js +48 -70
- package/dist/ui/views.d.ts +112 -18
- package/dist/ui/views.js +254 -47
- package/package.json +6 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/src/migrations/0102_themes.sql +64 -0
- package/src/migrations/0103_ui_theme_setting.sql +7 -0
- package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
- package/src/migrations/0105_devices_rename.sql +136 -0
- package/src/migrations/0106_setup_guides_v2.sql +10 -0
- package/src/migrations/0107_extension_client_builds.sql +50 -0
- package/src/migrations/0108_question_skipped.sql +6 -0
- package/src/migrations/0109_audit_platform_idx.sql +5 -0
- package/src/migrations/0110_usage_time_idx.sql +8 -0
- package/src/migrations/0111_agent_skill_sharing.sql +22 -0
- package/src/migrations/0112_skill_share_requests.sql +4 -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
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- package/dist/tools/builtins/skill-write.d.ts +0 -59
- package/dist/tools/builtins/skill-write.js +0 -244
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,56 +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";
|
|
34
|
+
import { configFormSchema, describeConfigUiProblems } from "./config-json-schema.js";
|
|
35
|
+
import { EffectiveConfigs } from "./effective-config.js";
|
|
33
36
|
import { HookRegistry } from "./hooks.js";
|
|
34
37
|
import { ExtensionInstalls } from "./installs.js";
|
|
35
38
|
import { ImportTracker, importExtensionModule, ManifestMismatchError, matchesSection, setupInstance, warnUpgrades, } from "./instance.js";
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
39
|
+
import { parseLoadGate } from "./org-levels.js";
|
|
40
|
+
import { declaredDisplayName, permissionSetOfSection, readMigrationSql } from "./package.js";
|
|
41
|
+
import { blockingKeys, computePermissionSet, SETUP_CHECK_KEY_PREFIX, UI_VIEW_KEY_PREFIX, } from "./permission-set.js";
|
|
38
42
|
import { ExtensionRegistry } from "./registry.js";
|
|
39
|
-
import { ExtensionResolveError, resolveExtensions } from "./resolve.js";
|
|
43
|
+
import { ExtensionResolveError, electSingleProviders, PROVIDER_CONFLICT, providerConflictMessage, resolveExtensions, } from "./resolve.js";
|
|
40
44
|
import { ReplicaStatusStore, } from "./sources.js";
|
|
41
45
|
import { PackageShaMismatchError, packageRootOf } from "./sync.js";
|
|
42
|
-
|
|
43
|
-
const canonicalJson = (v) => {
|
|
44
|
-
if (Array.isArray(v))
|
|
45
|
-
return `[${v.map((x) => (x === undefined ? "null" : canonicalJson(x))).join(",")}]`;
|
|
46
|
-
if (v !== null && typeof v === "object") {
|
|
47
|
-
const entries = Object.entries(v)
|
|
48
|
-
.filter(([, x]) => x !== undefined)
|
|
49
|
-
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
50
|
-
return `{${entries.map(([k, x]) => `${JSON.stringify(k)}:${canonicalJson(x)}`).join(",")}}`;
|
|
51
|
-
}
|
|
52
|
-
return JSON.stringify(v) ?? "null";
|
|
53
|
-
};
|
|
54
|
-
/** 遮蔽 secret 字段后参与摘要的固定占位值。 */
|
|
55
|
-
const SECRET_PLACEHOLDER = "<secret>";
|
|
56
|
-
/**
|
|
57
|
-
* 插件部署配置(校验后)中非密钥部分的摘要:先把 schema 里所有 secret 叶子(`configFields` 可达路径,
|
|
58
|
-
* 加载时 `assertSecretsReachable` 已保证密钥都在这些路径上)换成固定占位值,再取 sha256(键排序 JSON) 前 16 位十六进制。
|
|
59
|
-
* 给需要「配置变了就失效」的缓存键用(如模型列表)。密钥不参与摘要:不加盐的短摘要写进 Redis 键名后,
|
|
60
|
-
* 低熵密钥可被离线猜测、泄露的密钥可被确认;代价是轮换密钥不会让缓存失效(缓存内容本来就不该依赖密钥)。
|
|
61
|
-
* 没有部署配置 schema 时无从得知哪些是密钥,摘要不按配置区分。同一份配置在各副本上得到同一摘要。
|
|
62
|
-
* 函数自己按 schema 遮蔽,调用方不必(也不能忘记)先打码。
|
|
63
|
-
*/
|
|
64
|
-
export function deploymentConfigHash(schema, config) {
|
|
65
|
-
let redacted = null;
|
|
66
|
-
if (schema) {
|
|
67
|
-
redacted = structuredClone(config);
|
|
68
|
-
if (redacted !== null && typeof redacted === "object") {
|
|
69
|
-
for (const f of configFields(schema)) {
|
|
70
|
-
if (f.meta?.secret && getPath(redacted, f.path) !== undefined) {
|
|
71
|
-
setPath(redacted, f.path, SECRET_PLACEHOLDER);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return createHash("sha256").update(canonicalJson(redacted)).digest("hex").slice(0, 16);
|
|
77
|
-
}
|
|
46
|
+
export { deploymentConfigHash };
|
|
78
47
|
const CLOSED_DURING_LOAD = "plugin host closed during load";
|
|
79
48
|
/** 停机时等进行中的 unload / reload 的上限(之后直接关闭 setup 中的 ctx、撤销其余实例)。 */
|
|
80
49
|
const CLOSE_LIFECYCLE_WAIT_MS = 2_000;
|
|
@@ -162,8 +131,31 @@ async function permissionSets(ordered, dirs) {
|
|
|
162
131
|
}
|
|
163
132
|
return sets;
|
|
164
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* The single-provider extension points `manifest` provides that `others` already provide, with
|
|
136
|
+
* those providers (a `conflict` pending's {@link PendingExtension.conflicts}).
|
|
137
|
+
*/
|
|
138
|
+
function conflictsOf(manifest, others) {
|
|
139
|
+
return manifest.provides
|
|
140
|
+
.filter((ref) => EXTENSION_POINT_CARDINALITY[parseExtensionPoint(ref).name] === "single")
|
|
141
|
+
.map((extensionPoint) => ({
|
|
142
|
+
extensionPoint,
|
|
143
|
+
providers: others
|
|
144
|
+
.filter((m) => m.name !== manifest.name && m.provides.includes(extensionPoint))
|
|
145
|
+
.map((m) => m.name),
|
|
146
|
+
}))
|
|
147
|
+
.filter((c) => c.providers.length > 0);
|
|
148
|
+
}
|
|
149
|
+
/** The replica status reason of a pending extension (`new` / `added` are both `approval`). */
|
|
150
|
+
function pendingReasonOf(p) {
|
|
151
|
+
return p.reason === "dependency" || p.reason === "conflict" ? p.reason : "approval";
|
|
152
|
+
}
|
|
165
153
|
/** 待批准插件的 warn 日志:点名插件、原因与新增项(依赖原因写明阻塞的能力与提供方)。 */
|
|
166
154
|
function warnPending(log, p) {
|
|
155
|
+
if (p.reason === "conflict") {
|
|
156
|
+
log.warn("extension not loaded: it provides a single-provider extension point another extension already provides (disable that one and this one loads, no restart)", { plugin: p.plugin, version: p.version, conflicts: p.conflicts });
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
167
159
|
if (p.reason === "dependency") {
|
|
168
160
|
const missing = (p.blockedBy ?? []).some((b) => b.providers.length === 0);
|
|
169
161
|
log.warn(missing
|
|
@@ -171,7 +163,7 @@ function warnPending(log, p) {
|
|
|
171
163
|
: "extension not loaded: a required extension point is only provided by extensions awaiting permission approval", { plugin: p.plugin, version: p.version, blockedBy: p.blockedBy });
|
|
172
164
|
return;
|
|
173
165
|
}
|
|
174
|
-
log.warn("extension not loaded: permissions awaiting approval (
|
|
166
|
+
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 });
|
|
175
167
|
}
|
|
176
168
|
/**
|
|
177
169
|
* 跑单个插件的迁移(`migrationsDir` 为迁移目录的绝对路径;没有迁移时为 undefined);返回已应用的文件,
|
|
@@ -234,6 +226,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
234
226
|
status;
|
|
235
227
|
config;
|
|
236
228
|
log;
|
|
229
|
+
effective;
|
|
237
230
|
/**
|
|
238
231
|
* Only resolves extensions and runs migrations in dependency order: no deployment config check, no
|
|
239
232
|
* setup, no Redis (for `capybara migrate`). Like `load()` it checks secret markers first
|
|
@@ -298,12 +291,18 @@ let ExtensionHost = class ExtensionHost {
|
|
|
298
291
|
for (const manifest of ordered)
|
|
299
292
|
assertSecretsReachable(manifest);
|
|
300
293
|
const sets = await permissionSets(ordered, dirs);
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
manifest
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
294
|
+
const out = [];
|
|
295
|
+
for (const manifest of ordered) {
|
|
296
|
+
const dir = dirs.get(manifest.name);
|
|
297
|
+
out.push({
|
|
298
|
+
source: "config",
|
|
299
|
+
manifest,
|
|
300
|
+
dir,
|
|
301
|
+
permissions: sets.get(manifest.name),
|
|
302
|
+
displayName: (await declaredDisplayName(dir, manifest.name)).displayName ?? null,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
return out;
|
|
307
306
|
}
|
|
308
307
|
/**
|
|
309
308
|
* M-1: plugin → mount points where deployment state expects `policy` hooks. A per-replica copy of PG
|
|
@@ -335,6 +334,11 @@ let ExtensionHost = class ExtensionHost {
|
|
|
335
334
|
* 安装记录不在这里:每次 converge 都按 PG 期望状态重新判定。
|
|
336
335
|
*/
|
|
337
336
|
pendingActivations = new Map();
|
|
337
|
+
/**
|
|
338
|
+
* The load parameters of each config-declared extension that loaded: when its deployment config
|
|
339
|
+
* is cleared and the rest is invalid it goes back to {@link pendingActivations} (pending config).
|
|
340
|
+
*/
|
|
341
|
+
declaredActivations = new Map();
|
|
338
342
|
/** 安装记录准备好的候选(按插件名;sha 变了就作废)。 */
|
|
339
343
|
prepared = new Map();
|
|
340
344
|
/** 闸门放行后导入过的安装记录真实清单(按插件名;部署配置 schema 用,含待配置而未加载的)。 */
|
|
@@ -351,6 +355,11 @@ let ExtensionHost = class ExtensionHost {
|
|
|
351
355
|
retiring = new Map();
|
|
352
356
|
/** 配置声明插件的清单与权限集合(含未加载的;后台列表与网页批准用)。 */
|
|
353
357
|
declaredInfo = new Map();
|
|
358
|
+
/**
|
|
359
|
+
* Config-declared extensions' display names, read from their plugin directory's plugin.json at
|
|
360
|
+
* load (from the startup config, the same on every replica; never written elsewhere).
|
|
361
|
+
*/
|
|
362
|
+
declaredDisplayNames = new Map();
|
|
354
363
|
/** 导入过的插件名 → 来源与包(含未加载的;重名被跳过的一方不在这里)。 */
|
|
355
364
|
sources = new Map();
|
|
356
365
|
didLoad = false;
|
|
@@ -370,6 +379,8 @@ let ExtensionHost = class ExtensionHost {
|
|
|
370
379
|
configValidity = new Map();
|
|
371
380
|
/** 已告警过的「部署配置不合法」(插件名 → 说明;每个周期都会重新判定,同一说明只告警一次)。 */
|
|
372
381
|
configWarned = new Map();
|
|
382
|
+
/** `<name>@<version>` whose invalid config UI hints were warned about (a log dedupe only). */
|
|
383
|
+
configUiWarned = new Set();
|
|
373
384
|
/**
|
|
374
385
|
* The host builds each extension's `ctx` from the injected kernel services: the pool for
|
|
375
386
|
* `ctx.db` on the extension's schema, Redis for `kv` / `lock` / `bus` and the queues, the
|
|
@@ -393,14 +404,32 @@ let ExtensionHost = class ExtensionHost {
|
|
|
393
404
|
*/
|
|
394
405
|
installs, approvals,
|
|
395
406
|
/** This replica's load status table (`extension_replica_status`): every load result writes a row. */
|
|
396
|
-
status, config, kdb, redis, busSubscriber, keyring, embedTokens, locks, log, options
|
|
407
|
+
status, config, kdb, redis, busSubscriber, keyring, embedTokens, locks, log, options,
|
|
408
|
+
/**
|
|
409
|
+
* Each hook call's effective config for its organization, and the providers excluded from an
|
|
410
|
+
* org's point resolution (layering spec A §6).
|
|
411
|
+
*/
|
|
412
|
+
effective,
|
|
413
|
+
/** `ctx.models`: the embeddings broker (spec B §5.4). */
|
|
414
|
+
models) {
|
|
397
415
|
this.registry = registry;
|
|
398
416
|
this.installs = installs;
|
|
399
417
|
this.approvals = approvals;
|
|
400
418
|
this.status = status;
|
|
401
419
|
this.config = config;
|
|
402
420
|
this.log = log;
|
|
421
|
+
this.effective = effective;
|
|
403
422
|
const c = config.get();
|
|
423
|
+
this.hooks = new HookRegistry({
|
|
424
|
+
instances: () => this.registry.all(),
|
|
425
|
+
current: (plugin) => this.registry.current(plugin),
|
|
426
|
+
expectedPolicy: (mount) => this.expectedPolicy(mount),
|
|
427
|
+
enabledPlugins: (orgId) => this.enabledPlugins(orgId),
|
|
428
|
+
effectiveConfig: (orgId, plugin) => effective.get(orgId, plugin),
|
|
429
|
+
locks,
|
|
430
|
+
config: () => ({ hooks: { timeoutMs: this.config.get().hooks.timeoutMs } }),
|
|
431
|
+
log,
|
|
432
|
+
});
|
|
404
433
|
this.deps = {
|
|
405
434
|
db: kdb.pool,
|
|
406
435
|
dbUrl: c.db.url,
|
|
@@ -410,19 +439,13 @@ let ExtensionHost = class ExtensionHost {
|
|
|
410
439
|
redisUrl: c.redis.url,
|
|
411
440
|
keyring,
|
|
412
441
|
embedTokens,
|
|
442
|
+
models,
|
|
443
|
+
// ctx.models.embed fires model.request through the same registry (spec B §5.4)
|
|
444
|
+
hooks: this.hooks,
|
|
413
445
|
locks,
|
|
414
446
|
runWorkers: c.roles.includes("worker"),
|
|
415
447
|
log,
|
|
416
448
|
};
|
|
417
|
-
this.hooks = new HookRegistry({
|
|
418
|
-
instances: () => this.registry.all(),
|
|
419
|
-
current: (plugin) => this.registry.current(plugin),
|
|
420
|
-
expectedPolicy: (mount) => this.expectedPolicy(mount),
|
|
421
|
-
enabledPlugins: (orgId) => this.enabledPlugins(orgId),
|
|
422
|
-
locks,
|
|
423
|
-
config: () => ({ hooks: { timeoutMs: this.config.get().hooks.timeoutMs } }),
|
|
424
|
-
log,
|
|
425
|
-
});
|
|
426
449
|
this.registry.onChange(() => {
|
|
427
450
|
this.installedCache = undefined;
|
|
428
451
|
});
|
|
@@ -461,6 +484,8 @@ let ExtensionHost = class ExtensionHost {
|
|
|
461
484
|
manifest: p.manifest,
|
|
462
485
|
set: p.permissions,
|
|
463
486
|
});
|
|
487
|
+
if (p.displayName)
|
|
488
|
+
this.declaredDisplayNames.set(p.manifest.name, p.displayName);
|
|
464
489
|
const valid = configValid.get(p.manifest.name);
|
|
465
490
|
if (valid !== undefined)
|
|
466
491
|
this.configValidity.set(p.manifest.name, valid);
|
|
@@ -516,6 +541,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
516
541
|
this.installLoader = p.installs;
|
|
517
542
|
const entries = await importEntries(p.config ?? [], this.resolveFrom);
|
|
518
543
|
await this.claimNames(entries);
|
|
544
|
+
await this.noteDisplayNames(entries);
|
|
519
545
|
const dirs = new Map(entries.map((e) => [e.manifest.name, e.dir]));
|
|
520
546
|
const urls = new Map(entries.map((e) => [e.manifest.name, e.url]));
|
|
521
547
|
// 有安装记录时:配置声明的插件若 requires 只能由安装记录满足,先挑出来,等安装记录加载完再解析与加载
|
|
@@ -568,7 +594,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
568
594
|
// the first pass unloads nothing; the second skips what the first loaded.
|
|
569
595
|
const inPg = desired.filter((d) => d.blobStore === "pg");
|
|
570
596
|
if (inPg.length > 0 && inPg.length < desired.length) {
|
|
571
|
-
await this.applyInstalls(p.installs, inPg, true);
|
|
597
|
+
await this.applyInstalls(p.installs, inPg, true, desired);
|
|
572
598
|
}
|
|
573
599
|
installProviders = await this.applyInstalls(p.installs, desired, true);
|
|
574
600
|
}
|
|
@@ -584,6 +610,23 @@ let ExtensionHost = class ExtensionHost {
|
|
|
584
610
|
});
|
|
585
611
|
}
|
|
586
612
|
}
|
|
613
|
+
/**
|
|
614
|
+
* Records each config-declared extension's display name from its plugin directory's plugin.json
|
|
615
|
+
* (spec §2.2); an invalid plugin.json only warns (no display name).
|
|
616
|
+
*/
|
|
617
|
+
async noteDisplayNames(entries) {
|
|
618
|
+
for (const e of entries) {
|
|
619
|
+
const { displayName, problem } = await declaredDisplayName(e.dir, e.manifest.name);
|
|
620
|
+
if (displayName)
|
|
621
|
+
this.declaredDisplayNames.set(e.manifest.name, displayName);
|
|
622
|
+
if (problem !== undefined) {
|
|
623
|
+
this.log.warn("plugin.json of a config-declared extension is invalid; no display name", {
|
|
624
|
+
plugin: e.manifest.name,
|
|
625
|
+
problem,
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
}
|
|
587
630
|
/**
|
|
588
631
|
* Config-declared extensions also take their name (I4, an addition to Ruling P3): the
|
|
589
632
|
* name is inserted into `extension_name_owners` with its npm package name (left alone when present).
|
|
@@ -683,10 +726,23 @@ let ExtensionHost = class ExtensionHost {
|
|
|
683
726
|
* 4. 运行中(非启动):对变了的能力做依赖方连锁(本轮刚加载的除外),此前因依赖卸下的插件随之补回。
|
|
684
727
|
* 返回启用的安装记录在静态清单里声明提供的能力(启动第 4 步据此判断待定还是缺提供方)。
|
|
685
728
|
*/
|
|
686
|
-
async applyInstalls(loader, desired, startup
|
|
729
|
+
async applyInstalls(loader, desired, startup,
|
|
730
|
+
/**
|
|
731
|
+
* Every install record desired enabled, in {@link ExtensionInstalls.desired} order (the
|
|
732
|
+
* single-provider election runs over all of them even when `desired` is the startup's first
|
|
733
|
+
* pass over the packages kept in PG).
|
|
734
|
+
*/
|
|
735
|
+
electAmong = desired) {
|
|
687
736
|
const declared = this.declared();
|
|
688
737
|
const installProviders = new Map();
|
|
689
738
|
const wanted = new Map();
|
|
739
|
+
// Single-provider election: of the enabled install records providing one single-provider
|
|
740
|
+
// extension point, only the earliest enabled is loaded (desired() order: enabled_at, install
|
|
741
|
+
// time, name). Decided from PG alone, never from what loaded here, so every replica and every
|
|
742
|
+
// restart picks the same one. Two enabled providers only remain from before a second enable
|
|
743
|
+
// was refused; the others are pending / conflict until the super admin disables one. A loser
|
|
744
|
+
// provides nothing (left out of `installProviders`, so `blockedBy` never names it).
|
|
745
|
+
const { losers } = electSingleProviders(electAmong.filter((d) => !declared.has(d.name)));
|
|
690
746
|
for (const d of desired) {
|
|
691
747
|
const taken = declared.get(d.name);
|
|
692
748
|
if (taken) {
|
|
@@ -698,6 +754,8 @@ let ExtensionHost = class ExtensionHost {
|
|
|
698
754
|
}
|
|
699
755
|
continue;
|
|
700
756
|
}
|
|
757
|
+
if (losers.has(d.name))
|
|
758
|
+
continue;
|
|
701
759
|
wanted.set(d.name, d);
|
|
702
760
|
// 按审阅过的静态清单(不论随后加载成败)
|
|
703
761
|
for (const cap of d.section.manifest.provides) {
|
|
@@ -716,7 +774,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
716
774
|
changed.push(...gone.manifest.provides);
|
|
717
775
|
}
|
|
718
776
|
for (const [name, row] of [...this.installRows]) {
|
|
719
|
-
if (wanted.has(name) || this.registry.current(name))
|
|
777
|
+
if (wanted.has(name) || losers.has(name) || this.registry.current(name))
|
|
720
778
|
continue;
|
|
721
779
|
this.dropPending(name);
|
|
722
780
|
this.prepared.delete(name);
|
|
@@ -774,22 +832,30 @@ let ExtensionHost = class ExtensionHost {
|
|
|
774
832
|
}
|
|
775
833
|
for (const c of remaining) {
|
|
776
834
|
let detail = "cannot resolve the plugin's dependencies";
|
|
835
|
+
let conflict = false;
|
|
777
836
|
try {
|
|
778
837
|
tryResolve(c);
|
|
779
838
|
}
|
|
780
839
|
catch (e) {
|
|
781
840
|
detail = errMsg(e);
|
|
841
|
+
conflict = e instanceof ExtensionResolveError && e.code === PROVIDER_CONFLICT;
|
|
782
842
|
}
|
|
843
|
+
// A single-provider point another extension already provides: a conflict, not a missing
|
|
844
|
+
// dependency. Converge tries it again on every pass, so it loads once the other is gone.
|
|
845
|
+
const reason = conflict ? "conflict" : "dependency";
|
|
783
846
|
this.notePending({
|
|
784
847
|
plugin: c.d.name,
|
|
785
848
|
version: c.d.version,
|
|
786
849
|
added: [],
|
|
787
850
|
removed: [],
|
|
788
|
-
reason
|
|
851
|
+
reason,
|
|
789
852
|
blockedBy: (c.manifest.requires ?? []).map((extensionPoint) => ({
|
|
790
853
|
extensionPoint,
|
|
791
854
|
providers: (installProviders.get(extensionPoint) ?? []).filter((n) => n !== c.d.name),
|
|
792
855
|
})),
|
|
856
|
+
...(conflict && {
|
|
857
|
+
conflicts: conflictsOf(c.manifest, [...base(), ...accepted.map((a) => a.manifest)]),
|
|
858
|
+
}),
|
|
793
859
|
});
|
|
794
860
|
await this.writeStatus({
|
|
795
861
|
plugin: c.d.name,
|
|
@@ -797,11 +863,12 @@ let ExtensionHost = class ExtensionHost {
|
|
|
797
863
|
sha256: c.d.sha256,
|
|
798
864
|
source: "install",
|
|
799
865
|
state: "pending",
|
|
800
|
-
reason
|
|
866
|
+
reason,
|
|
801
867
|
detail,
|
|
802
868
|
});
|
|
803
869
|
}
|
|
804
870
|
if (accepted.length === 0) {
|
|
871
|
+
await this.noteLosers(desired, losers);
|
|
805
872
|
if (!startup && changed.length > 0)
|
|
806
873
|
await this.cascade(changed, drainMs);
|
|
807
874
|
return installProviders;
|
|
@@ -841,10 +908,42 @@ let ExtensionHost = class ExtensionHost {
|
|
|
841
908
|
changed.push(...inst.manifest.provides, ...(old?.manifest.provides ?? []));
|
|
842
909
|
}
|
|
843
910
|
}
|
|
911
|
+
await this.noteLosers(desired, losers);
|
|
844
912
|
if (!startup && changed.length > 0)
|
|
845
913
|
await this.cascade(changed, drainMs, activated);
|
|
846
914
|
return installProviders;
|
|
847
915
|
}
|
|
916
|
+
/**
|
|
917
|
+
* Marks the losers of the single-provider election pending / conflict, naming the winner; after
|
|
918
|
+
* this pass loaded what it could, so a winner not loaded here (failed, pending) is known: the
|
|
919
|
+
* election stays (replicas must agree), but the loser's detail says the point has no running
|
|
920
|
+
* provider and the admin view warns about it.
|
|
921
|
+
*/
|
|
922
|
+
async noteLosers(desired, losers) {
|
|
923
|
+
for (const d of desired) {
|
|
924
|
+
const lost = losers.get(d.name);
|
|
925
|
+
if (!lost)
|
|
926
|
+
continue;
|
|
927
|
+
const unloaded = this.registry.current(lost.winner) === undefined;
|
|
928
|
+
this.notePending({
|
|
929
|
+
plugin: d.name,
|
|
930
|
+
version: d.version,
|
|
931
|
+
added: [],
|
|
932
|
+
removed: [],
|
|
933
|
+
reason: "conflict",
|
|
934
|
+
conflicts: [{ extensionPoint: lost.extensionPoint, providers: [lost.winner] }],
|
|
935
|
+
});
|
|
936
|
+
await this.writeStatus({
|
|
937
|
+
plugin: d.name,
|
|
938
|
+
version: d.version,
|
|
939
|
+
sha256: d.sha256,
|
|
940
|
+
source: "install",
|
|
941
|
+
state: "pending",
|
|
942
|
+
reason: "conflict",
|
|
943
|
+
detail: providerConflictMessage(lost.extensionPoint, [lost.winner, d.name], unloaded ? lost.winner : undefined),
|
|
944
|
+
});
|
|
945
|
+
}
|
|
946
|
+
}
|
|
848
947
|
/**
|
|
849
948
|
* The load candidate of an install record: sync it locally, then compute the permission set from
|
|
850
949
|
* the reviewed static manifest and the package's migration SQL (the same algorithm as
|
|
@@ -1032,6 +1131,39 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1032
1131
|
});
|
|
1033
1132
|
}
|
|
1034
1133
|
}
|
|
1134
|
+
/**
|
|
1135
|
+
* Checks the config UI hints of a loaded module's deployment and org schemas (spec §4.1). Invalid
|
|
1136
|
+
* hints never fail the load: the form schemas drop their `x-ui` (`configFormSchema`), one warning
|
|
1137
|
+
* per `<name>@<version>` is logged, and the returned text goes into the status detail (null when
|
|
1138
|
+
* every hint is valid). The packer refuses such a package; this covers hand-made ones. It never
|
|
1139
|
+
* throws (it runs after the instance is active, before its status row is written): a conversion
|
|
1140
|
+
* that throws is warned about and reported in the detail the same way.
|
|
1141
|
+
*/
|
|
1142
|
+
checkConfigUi(manifest) {
|
|
1143
|
+
const parts = [];
|
|
1144
|
+
for (const level of ["deployment", "org"]) {
|
|
1145
|
+
const schema = manifest.config?.[level];
|
|
1146
|
+
if (!schema)
|
|
1147
|
+
continue;
|
|
1148
|
+
try {
|
|
1149
|
+
const { problems } = configFormSchema(schema, level);
|
|
1150
|
+
if (problems.length > 0)
|
|
1151
|
+
parts.push(describeConfigUiProblems(level, problems));
|
|
1152
|
+
}
|
|
1153
|
+
catch (err) {
|
|
1154
|
+
parts.push(`${level} config UI hints could not be checked (${err instanceof Error ? err.message : String(err)})`);
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
if (parts.length === 0)
|
|
1158
|
+
return null;
|
|
1159
|
+
const detail = parts.join("; ");
|
|
1160
|
+
const key = `${manifest.name}@${manifest.version}`;
|
|
1161
|
+
if (!this.configUiWarned.has(key)) {
|
|
1162
|
+
this.configUiWarned.add(key);
|
|
1163
|
+
this.log.warn("extension config UI hints are invalid and ignored: its config forms show plain fields", { plugin: manifest.name, version: manifest.version, detail });
|
|
1164
|
+
}
|
|
1165
|
+
return detail;
|
|
1166
|
+
}
|
|
1035
1167
|
/** 给已有状态行补说明;失败只记 warn。 */
|
|
1036
1168
|
async noteStatus(plugin, detail) {
|
|
1037
1169
|
try {
|
|
@@ -1044,15 +1176,24 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1044
1176
|
/**
|
|
1045
1177
|
* 写本副本的加载状态;失败只记 warn(状态是给后台看的,不影响加载)。这一行的版本没加载成(failed / pending)
|
|
1046
1178
|
* 而本副本仍有别的版本在跑时,记下那个版本(`servingVersion`,后台同时显示「新版失败、旧版仍在服务」)。
|
|
1179
|
+
* `servingSha256` is the package this replica actually serves for the plugin (client code follows
|
|
1180
|
+
* it, client extensions spec §9.3): the row's own package when loaded; for a failed / pending row
|
|
1181
|
+
* the package of the instance still running here (an older one, or the row's own package when it
|
|
1182
|
+
* stays loaded, e.g. beside a provider conflict), else null.
|
|
1047
1183
|
*/
|
|
1048
1184
|
async writeStatus(s) {
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1185
|
+
const waiting = s.state === "failed" || s.state === "pending";
|
|
1186
|
+
const cur = waiting ? this.registry.current(s.plugin) : undefined;
|
|
1187
|
+
const other = cur && (cur.sha256 !== s.sha256 || cur.version !== s.version) ? cur : null;
|
|
1188
|
+
s = {
|
|
1189
|
+
...s,
|
|
1190
|
+
...(waiting && s.servingVersion === undefined && { servingVersion: other?.version ?? null }),
|
|
1191
|
+
servingSha256: s.servingSha256 !== undefined
|
|
1192
|
+
? s.servingSha256
|
|
1193
|
+
: s.state === "loaded"
|
|
1194
|
+
? s.sha256
|
|
1195
|
+
: (cur?.sha256 ?? null),
|
|
1196
|
+
};
|
|
1056
1197
|
if (s.source === "install") {
|
|
1057
1198
|
if (s.state === "unloaded")
|
|
1058
1199
|
this.installRows.delete(s.plugin);
|
|
@@ -1123,7 +1264,9 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1123
1264
|
return undefined;
|
|
1124
1265
|
}
|
|
1125
1266
|
let config = raw;
|
|
1126
|
-
|
|
1267
|
+
// the load gate (spec A §5.4a): overridable fields may stay empty on the platform, so
|
|
1268
|
+
// `ctx.config` may lack them; hidden and read-only fields must be complete
|
|
1269
|
+
const parsed = readConfig && schema ? parseLoadGate(schema, raw) : undefined;
|
|
1127
1270
|
if (a.source !== "install")
|
|
1128
1271
|
this.configValidity.set(name, parsed?.success ?? true);
|
|
1129
1272
|
if (decision.action === "pending") {
|
|
@@ -1138,7 +1281,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1138
1281
|
before.reason !== decision.pending.reason) {
|
|
1139
1282
|
warnPending(this.log, decision.pending);
|
|
1140
1283
|
}
|
|
1141
|
-
const reason = decision.pending
|
|
1284
|
+
const reason = pendingReasonOf(decision.pending);
|
|
1142
1285
|
await this.writeStatus({ ...base, state: "pending", reason, detail: null });
|
|
1143
1286
|
return undefined;
|
|
1144
1287
|
}
|
|
@@ -1157,9 +1300,9 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1157
1300
|
// 权限变少、不变(版本变了)或只多出视图(ui.view:*,不卡加载):直接加载,快照跟上当前清单。
|
|
1158
1301
|
// 补进视图不写审计(与 autoApprove 一样,Ruling A4),只记日志
|
|
1159
1302
|
const updated = await approvals.refresh(name, manifest.version, a.set);
|
|
1160
|
-
const merged = decision.added.filter((k) => k.startsWith(UI_VIEW_KEY_PREFIX));
|
|
1303
|
+
const merged = decision.added.filter((k) => k.startsWith(UI_VIEW_KEY_PREFIX) || k.startsWith(SETUP_CHECK_KEY_PREFIX));
|
|
1161
1304
|
if (updated && merged.length > 0 && blockingKeys(decision.added).length === 0) {
|
|
1162
|
-
this.log.info("plugin ui views merged into the permission snapshot", {
|
|
1305
|
+
this.log.info("plugin ui views and setup checks merged into the permission snapshot", {
|
|
1163
1306
|
plugin: name,
|
|
1164
1307
|
version: manifest.version,
|
|
1165
1308
|
merged,
|
|
@@ -1244,10 +1387,17 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1244
1387
|
}
|
|
1245
1388
|
// 升级:替换加载参数(之后的依赖方连锁与 reload 用新版本),先登记新实例、再撤销旧实例
|
|
1246
1389
|
this.specs.set(name, spec);
|
|
1390
|
+
if (a.source !== "install")
|
|
1391
|
+
this.declaredActivations.set(name, a);
|
|
1247
1392
|
this.unloadedForDependency.delete(name);
|
|
1248
1393
|
const old = this.registry.activate(inst);
|
|
1249
1394
|
this.loggedFailures.delete(name);
|
|
1250
|
-
await this.writeStatus({
|
|
1395
|
+
await this.writeStatus({
|
|
1396
|
+
...base,
|
|
1397
|
+
state: "loaded",
|
|
1398
|
+
reason: null,
|
|
1399
|
+
detail: this.checkConfigUi(manifest),
|
|
1400
|
+
});
|
|
1251
1401
|
if (old)
|
|
1252
1402
|
this.retire(old);
|
|
1253
1403
|
return inst;
|
|
@@ -1293,7 +1443,8 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1293
1443
|
permissions: d.set,
|
|
1294
1444
|
configurable: schema !== undefined,
|
|
1295
1445
|
configValid: this.configValidity.get(name) ??
|
|
1296
|
-
(schema ? schema
|
|
1446
|
+
(schema ? parseLoadGate(schema, this.extensionConfig[name] ?? {}).success : true),
|
|
1447
|
+
displayName: this.declaredDisplayNames.get(name) ?? null,
|
|
1297
1448
|
};
|
|
1298
1449
|
});
|
|
1299
1450
|
}
|
|
@@ -1491,7 +1642,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1491
1642
|
this.pendingPlugins.push(p);
|
|
1492
1643
|
if (before?.reason === p.reason)
|
|
1493
1644
|
return;
|
|
1494
|
-
const reason = p
|
|
1645
|
+
const reason = pendingReasonOf(p);
|
|
1495
1646
|
await this.writeStatus({
|
|
1496
1647
|
plugin: p.plugin,
|
|
1497
1648
|
version: a.manifest.version,
|
|
@@ -1531,6 +1682,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1531
1682
|
.all()
|
|
1532
1683
|
.flatMap((i) => i.provided.has(ref) ? [{ plugin: i.name, impl: i.provided.get(ref) }] : []),
|
|
1533
1684
|
enabledPlugins: (orgId) => this.enabledPlugins(orgId),
|
|
1685
|
+
configOk: async (orgId, plugin) => (await this.effective.get(orgId, plugin)).ok,
|
|
1534
1686
|
};
|
|
1535
1687
|
get loadDeps() {
|
|
1536
1688
|
return {
|
|
@@ -1569,7 +1721,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1569
1721
|
},
|
|
1570
1722
|
});
|
|
1571
1723
|
if (timeoutMs === undefined)
|
|
1572
|
-
return p;
|
|
1724
|
+
return p.then((inst) => this.logUiResolution(inst));
|
|
1573
1725
|
let timer;
|
|
1574
1726
|
let onClose = () => { };
|
|
1575
1727
|
const stop = new Promise((resolve) => {
|
|
@@ -1582,8 +1734,9 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1582
1734
|
});
|
|
1583
1735
|
try {
|
|
1584
1736
|
const r = await Promise.race([p.then((inst) => ({ inst })), stop]);
|
|
1737
|
+
// a late instance that is disposed right away never logs its UI resolution
|
|
1585
1738
|
if (typeof r === "object")
|
|
1586
|
-
return r.inst;
|
|
1739
|
+
return this.logUiResolution(r.inst);
|
|
1587
1740
|
// setup 迟迟不返回:关闭它的 ctx(此后它的登记立即撤销),迟到完成的实例直接撤销
|
|
1588
1741
|
p.then((inst) => this.disposeQuietly(inst, 0), () => { });
|
|
1589
1742
|
if (this.settingUp === ctx)
|
|
@@ -1600,6 +1753,20 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1600
1753
|
this.abort.signal.removeEventListener("abort", onClose);
|
|
1601
1754
|
}
|
|
1602
1755
|
}
|
|
1756
|
+
/** Logs once per load what slot resolution left out or flagged (UI slots spec §3.2). */
|
|
1757
|
+
logUiResolution(inst) {
|
|
1758
|
+
const at = { plugin: inst.name, version: inst.version };
|
|
1759
|
+
if (inst.uiDropped.length > 0) {
|
|
1760
|
+
this.log.warn("plugin ui contributions dropped", { ...at, dropped: inst.uiDropped });
|
|
1761
|
+
}
|
|
1762
|
+
if (inst.uiUnknownAnchors.length > 0) {
|
|
1763
|
+
this.log.warn("plugin ui anchors unknown", { ...at, anchors: inst.uiUnknownAnchors });
|
|
1764
|
+
}
|
|
1765
|
+
if (inst.uiDeprecatedPlace.length > 0) {
|
|
1766
|
+
this.log.info("plugin ui uses the deprecated place", { ...at, ids: inst.uiDeprecatedPlace });
|
|
1767
|
+
}
|
|
1768
|
+
return inst;
|
|
1769
|
+
}
|
|
1603
1770
|
/** 取能力实现:单选能力无需 providerName,多选能力必须指定。 */
|
|
1604
1771
|
get(capability, providerName) {
|
|
1605
1772
|
const providers = this.registry.all().filter((i) => i.provided.has(capability));
|
|
@@ -1638,6 +1805,15 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1638
1805
|
deploymentConfig(plugin) {
|
|
1639
1806
|
return this.registry.deploymentConfig(plugin);
|
|
1640
1807
|
}
|
|
1808
|
+
/**
|
|
1809
|
+
* The raw (unparsed) deployment config of a running extension: the startup config merged with
|
|
1810
|
+
* the PG values, as the host reads it before parsing (secrets included; never echo it). An org
|
|
1811
|
+
* copy is applied to this and parsed once (layering spec A §6), so schema transforms are not
|
|
1812
|
+
* run twice. Without a running instance, the stored values without a schema.
|
|
1813
|
+
*/
|
|
1814
|
+
rawDeploymentConfig(plugin) {
|
|
1815
|
+
return this.rawConfigOf(plugin, this.registry.current(plugin)?.manifest.config?.deployment);
|
|
1816
|
+
}
|
|
1641
1817
|
/**
|
|
1642
1818
|
* 本副本拿得到的插件清单里的部署级 schema(生效实例 → 配置声明 → 安装记录准备好的候选);
|
|
1643
1819
|
* 都没有返回 undefined(如未加载的安装记录:调用方改用包内静态清单)。
|
|
@@ -1658,7 +1834,9 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1658
1834
|
/**
|
|
1659
1835
|
* 部署配置保存后(`kernel.plugin-deployment-config`)本副本重读并校验(C10;与 unload / reload 串行):
|
|
1660
1836
|
* - 插件没在本副本生效 → `not_loaded`(配置声明的刷新后台的合法性判定;待配置的由 reconcile 加载);
|
|
1661
|
-
* - 不合法 → `invalid
|
|
1837
|
+
* - 不合法 → `invalid`:保持当前值,告警;但 PG 里已没有保存的配置(超级管理员清空了,`DELETE
|
|
1838
|
+
* /api/v1/admin/extensions/:name/config`)、剩下的来源(启动配置、默认值)又不够时 → `unloaded`:卸下实例、
|
|
1839
|
+
* 记为待配置(pending / config),依赖方连锁;重新配好后由 reconcile 加载;
|
|
1662
1840
|
* - 没变 → `unchanged`;只改了 hot 字段 → `hot`:就地替换,插件经 `ctx.config` 读到新值,不重新 setup;
|
|
1663
1841
|
* - 改了非 hot 字段 → `reload`:用新配置重新加载实例(先新后旧,排空在途调用),依赖方连锁;
|
|
1664
1842
|
* 重新加载失败旧实例保留(`reload_failed`,记 error)。
|
|
@@ -1673,7 +1851,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1673
1851
|
if (schema) {
|
|
1674
1852
|
try {
|
|
1675
1853
|
const raw = await this.rawConfigOf(plugin, schema);
|
|
1676
|
-
this.configValidity.set(plugin, schema
|
|
1854
|
+
this.configValidity.set(plugin, parseLoadGate(schema, raw).success);
|
|
1677
1855
|
}
|
|
1678
1856
|
catch (err) {
|
|
1679
1857
|
this.log.warn("cannot read the stored deployment config of plugin", {
|
|
@@ -1695,8 +1873,12 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1695
1873
|
this.log.error("cannot read the stored deployment config of plugin; keeping its current config", { plugin, err });
|
|
1696
1874
|
return "invalid";
|
|
1697
1875
|
}
|
|
1698
|
-
const r = schema
|
|
1876
|
+
const r = parseLoadGate(schema, raw);
|
|
1699
1877
|
if (!r.success) {
|
|
1878
|
+
if (await this.clearedInPg(plugin)) {
|
|
1879
|
+
await this.unloadForMissingConfig(inst, toIssues(r.error));
|
|
1880
|
+
return "unloaded";
|
|
1881
|
+
}
|
|
1700
1882
|
this.log.warn("plugin deployment config changed but is invalid on this replica; keeping the current config", {
|
|
1701
1883
|
plugin,
|
|
1702
1884
|
detail: toIssues(r.error)
|
|
@@ -1746,6 +1928,95 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1746
1928
|
return "reload";
|
|
1747
1929
|
});
|
|
1748
1930
|
}
|
|
1931
|
+
/** PG holds no deployment config for the plugin (it was cleared); a read error counts as no. */
|
|
1932
|
+
async clearedInPg(plugin) {
|
|
1933
|
+
try {
|
|
1934
|
+
return !(await this.installs.hasStoredDeploymentConfig(plugin));
|
|
1935
|
+
}
|
|
1936
|
+
catch (err) {
|
|
1937
|
+
this.log.warn("cannot read whether the plugin has a stored deployment config", {
|
|
1938
|
+
plugin,
|
|
1939
|
+
err,
|
|
1940
|
+
});
|
|
1941
|
+
return false;
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
/**
|
|
1945
|
+
* Unloads an extension whose deployment config was cleared and is now missing or invalid (in
|
|
1946
|
+
* the host's serial queue): drains it, records pending / config (a config-declared one goes back
|
|
1947
|
+
* to {@link pendingActivations}; an install record is decided again on every converge) and
|
|
1948
|
+
* cascades to its dependents. It loads again without a restart once it is configured.
|
|
1949
|
+
*/
|
|
1950
|
+
async unloadForMissingConfig(inst, issues) {
|
|
1951
|
+
const plugin = inst.name;
|
|
1952
|
+
const drainMs = this.drainMs();
|
|
1953
|
+
const gone = await this.doUnload(plugin, drainMs, null);
|
|
1954
|
+
if (!gone)
|
|
1955
|
+
return;
|
|
1956
|
+
await this.markPendingConfig({ plugin, version: gone.version, sha256: gone.sha256, source: gone.source }, issues, "extension unloaded: its deployment config was cleared and what remains is missing or invalid (set it in the admin console or the startup config; it loads without a restart)");
|
|
1957
|
+
await this.cascade(gone.manifest.provides, drainMs);
|
|
1958
|
+
}
|
|
1959
|
+
/**
|
|
1960
|
+
* Records an extension that is not loaded as pending configuration: a config-declared one goes
|
|
1961
|
+
* back to {@link pendingActivations} (a later save loads it); an install record is decided again
|
|
1962
|
+
* on every converge.
|
|
1963
|
+
*/
|
|
1964
|
+
async markPendingConfig(p, issues, message) {
|
|
1965
|
+
const detail = issues.map((i) => `${i.path || "<root>"}: ${i.message}`).join("; ");
|
|
1966
|
+
const declared = this.declaredActivations.get(p.plugin);
|
|
1967
|
+
if (p.source !== "install") {
|
|
1968
|
+
this.configValidity.set(p.plugin, false);
|
|
1969
|
+
if (declared)
|
|
1970
|
+
this.pendingActivations.set(p.plugin, { ...declared, fatal: false });
|
|
1971
|
+
}
|
|
1972
|
+
this.configWarned.set(p.plugin, detail);
|
|
1973
|
+
this.log.warn(message, { plugin: p.plugin, source: p.source, detail });
|
|
1974
|
+
await this.writeStatus({ ...p, state: "pending", reason: "config", detail });
|
|
1975
|
+
}
|
|
1976
|
+
/**
|
|
1977
|
+
* Before an extension unloaded for a dependency comes back ({@link cascade}): re-reads its
|
|
1978
|
+
* deployment config, which may have been saved or cleared while it was down (applyDeploymentConfig
|
|
1979
|
+
* only records validity then), and refreshes its load parameters, so it never returns on a stale
|
|
1980
|
+
* config or revoked secrets. Returns false when the config is now missing or invalid and PG holds
|
|
1981
|
+
* none: the extension is left pending configuration instead. A read error, or an invalid config
|
|
1982
|
+
* that is still stored, keeps the previous config (as for a loaded extension).
|
|
1983
|
+
*/
|
|
1984
|
+
async refreshConfigForRestore(name, spec) {
|
|
1985
|
+
const schema = spec.manifest.config?.deployment;
|
|
1986
|
+
if (!schema)
|
|
1987
|
+
return true;
|
|
1988
|
+
let raw;
|
|
1989
|
+
try {
|
|
1990
|
+
raw = await this.rawConfigOf(name, schema);
|
|
1991
|
+
}
|
|
1992
|
+
catch (err) {
|
|
1993
|
+
this.log.error("cannot read the stored deployment config of plugin; restoring it on its previous config", { plugin: name, err });
|
|
1994
|
+
return true;
|
|
1995
|
+
}
|
|
1996
|
+
const r = parseLoadGate(schema, raw);
|
|
1997
|
+
if (!r.success) {
|
|
1998
|
+
if (!(await this.clearedInPg(name)))
|
|
1999
|
+
return true;
|
|
2000
|
+
await this.markPendingConfig({
|
|
2001
|
+
plugin: name,
|
|
2002
|
+
version: spec.manifest.version,
|
|
2003
|
+
sha256: spec.sha256,
|
|
2004
|
+
source: spec.source,
|
|
2005
|
+
}, toIssues(r.error), "extension not restored after its dependency came back: its deployment config was cleared and what remains is missing or invalid (set it in the admin console or the startup config; it loads without a restart)");
|
|
2006
|
+
return false;
|
|
2007
|
+
}
|
|
2008
|
+
if (spec.source !== "install")
|
|
2009
|
+
this.configValidity.set(name, true);
|
|
2010
|
+
if (changedPaths(schema, spec.config, r.data).length > 0) {
|
|
2011
|
+
this.reportSecrets(schema, r.data);
|
|
2012
|
+
this.specs.set(name, {
|
|
2013
|
+
...spec,
|
|
2014
|
+
config: r.data,
|
|
2015
|
+
configHash: deploymentConfigHash(schema, r.data),
|
|
2016
|
+
});
|
|
2017
|
+
}
|
|
2018
|
+
return true;
|
|
2019
|
+
}
|
|
1749
2020
|
/** 本次未加载、等待批准权限的插件(含因 `requires` 只能由它们满足而未加载的插件),按依赖拓扑序。 */
|
|
1750
2021
|
pending() {
|
|
1751
2022
|
return structuredClone(this.pendingPlugins);
|
|
@@ -1840,17 +2111,25 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1840
2111
|
* 是否在某组织启用由调用方另查(每次查询,不缓存)。
|
|
1841
2112
|
*/
|
|
1842
2113
|
uiContributions() {
|
|
1843
|
-
return this.registry.all().flatMap((i) =>
|
|
1844
|
-
|
|
1845
|
-
const
|
|
2114
|
+
return this.registry.all().flatMap((i) => i.ui.map(({ contribution: c, slot, after }) => {
|
|
2115
|
+
// a view's, or a component's server view (client extensions spec §5.2); embeds have none
|
|
2116
|
+
const served = c.kind === "view" || c.kind === "component";
|
|
2117
|
+
const render = served ? i.uiViews.get(c.id) : undefined;
|
|
2118
|
+
const action = served ? i.uiActions.get(c.id) : undefined;
|
|
1846
2119
|
return {
|
|
1847
2120
|
plugin: i.name,
|
|
1848
2121
|
contribution: c,
|
|
2122
|
+
slot,
|
|
2123
|
+
...(after !== undefined && { after }),
|
|
1849
2124
|
...(render !== undefined && { render }),
|
|
1850
2125
|
...(action !== undefined && { action }),
|
|
1851
2126
|
};
|
|
1852
2127
|
}));
|
|
1853
2128
|
}
|
|
2129
|
+
/** The UI contributions the loaded extension left out at load (UI slots spec §3.2); `[]` when not loaded. */
|
|
2130
|
+
uiDropped(name) {
|
|
2131
|
+
return [...(this.registry.current(name)?.uiDropped ?? [])];
|
|
2132
|
+
}
|
|
1854
2133
|
/** 串行执行生命周期操作(unload / reload 互不交错);宿主关闭后拒绝。 */
|
|
1855
2134
|
serial(fn) {
|
|
1856
2135
|
const guarded = () => {
|
|
@@ -1947,7 +2226,7 @@ let ExtensionHost = class ExtensionHost {
|
|
|
1947
2226
|
source: inst.source,
|
|
1948
2227
|
state: "loaded",
|
|
1949
2228
|
reason: null,
|
|
1950
|
-
detail:
|
|
2229
|
+
detail: this.checkConfigUi(spec.manifest),
|
|
1951
2230
|
});
|
|
1952
2231
|
if (old)
|
|
1953
2232
|
await this.disposeQuietly(old, drainMs);
|
|
@@ -2023,6 +2302,10 @@ let ExtensionHost = class ExtensionHost {
|
|
|
2023
2302
|
const available = providedNow();
|
|
2024
2303
|
if (!(spec.manifest.requires ?? []).every((c) => available.has(c)))
|
|
2025
2304
|
continue;
|
|
2305
|
+
if (!(await this.refreshConfigForRestore(name, spec))) {
|
|
2306
|
+
this.unloadedForDependency.delete(name);
|
|
2307
|
+
continue;
|
|
2308
|
+
}
|
|
2026
2309
|
try {
|
|
2027
2310
|
await this.doReload(name, drainMs);
|
|
2028
2311
|
progress = true;
|
|
@@ -2105,6 +2388,8 @@ ExtensionHost = __decorate([
|
|
|
2105
2388
|
__param(9, Inject(EmbedTokens)),
|
|
2106
2389
|
__param(10, Inject(LockService)),
|
|
2107
2390
|
__param(11, Inject(KERNEL_LOGGER)),
|
|
2108
|
-
__param(12, Inject(KERNEL_APP_OPTIONS))
|
|
2391
|
+
__param(12, Inject(KERNEL_APP_OPTIONS)),
|
|
2392
|
+
__param(13, Inject(EffectiveConfigs)),
|
|
2393
|
+
__param(14, Inject(ModelEmbeddings))
|
|
2109
2394
|
], ExtensionHost);
|
|
2110
2395
|
export { ExtensionHost };
|