@capybara-hq/kernel 0.1.0-rc.2 → 0.1.0-rc.20
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 +85 -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 +41 -5
- package/dist/extensions/bootstrap.js +121 -19
- 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 +4 -2
- package/dist/lifecycle/kernel-lifecycle.js +35 -7
- 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/blobs.js
CHANGED
|
@@ -9,10 +9,13 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
9
9
|
};
|
|
10
10
|
import { createHash } from "node:crypto";
|
|
11
11
|
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { ClientBuilds } from "../client/client-builds.service.js";
|
|
13
|
+
import { CLIENT_DIR } from "../client/client-files.js";
|
|
12
14
|
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
13
15
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
14
16
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
15
17
|
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
18
|
+
import { unpackPackageTgz } from "../packages/tgz.js";
|
|
16
19
|
import { StorageService } from "../storage/storage.service.js";
|
|
17
20
|
/**
|
|
18
21
|
* Content-addressed extension package store (C13): one copy per sha256 of the whole tgz.
|
|
@@ -21,6 +24,13 @@ import { StorageService } from "../storage/storage.service.js";
|
|
|
21
24
|
* extension, F-Q): PG `extension_blobs` (`blob_store = pg`, also limited by `packages.maxBytes`).
|
|
22
25
|
* Each package's location is recorded in `extension_packages.blob_store`; reads follow the record and
|
|
23
26
|
* check the sha256.
|
|
27
|
+
*
|
|
28
|
+
* A package with an `extension.client` section also stores its client build (`ClientBuilds`,
|
|
29
|
+
* client extensions spec §9.1): the client files are read again from the bytes being stored,
|
|
30
|
+
* checked against the section and written to object storage before the package row's transaction,
|
|
31
|
+
* and the build row is inserted in that transaction, all under the build's lock. Without object
|
|
32
|
+
* storage (`ClientBuilds`' own, which the CLI points at its store) such a package is refused
|
|
33
|
+
* (`storage.unavailable`), so a stored build always has its files.
|
|
24
34
|
*/
|
|
25
35
|
/** 取到的包与 sha256 不符(存储里的字节被篡改或损坏)。 */
|
|
26
36
|
export class ExtensionBlobIntegrityError extends Error {
|
|
@@ -39,6 +49,7 @@ let ExtensionBlobs = class ExtensionBlobs {
|
|
|
39
49
|
txHost;
|
|
40
50
|
storage;
|
|
41
51
|
config;
|
|
52
|
+
clientBuilds;
|
|
42
53
|
/**
|
|
43
54
|
* CLI only: packages the CLI process imported itself and reads back before the store, since such
|
|
44
55
|
* a package may be recorded in an object store the CLI cannot read. Each entry's sha256 was
|
|
@@ -48,11 +59,12 @@ let ExtensionBlobs = class ExtensionBlobs {
|
|
|
48
59
|
local = new Map();
|
|
49
60
|
constructor(db, txHost,
|
|
50
61
|
/** Without an object-store extension (the CLI) packages go to PG. */
|
|
51
|
-
storage, config) {
|
|
62
|
+
storage, config, clientBuilds) {
|
|
52
63
|
this.db = db;
|
|
53
64
|
this.txHost = txHost;
|
|
54
65
|
this.storage = storage;
|
|
55
66
|
this.config = config;
|
|
67
|
+
this.clientBuilds = clientBuilds;
|
|
56
68
|
}
|
|
57
69
|
/** `packages.maxBytes` (read at every call). */
|
|
58
70
|
maxBytes() {
|
|
@@ -85,16 +97,38 @@ let ExtensionBlobs = class ExtensionBlobs {
|
|
|
85
97
|
if (createHash("sha256").update(bytes).digest("hex") !== p.sha256) {
|
|
86
98
|
throw new ExtensionBlobIntegrityError(p.sha256);
|
|
87
99
|
}
|
|
100
|
+
const client = p.section.client;
|
|
101
|
+
if (client === undefined) {
|
|
102
|
+
await this.store(p, bytes, src, undefined);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// client code is delivered from object storage: refused before anything is written without it
|
|
106
|
+
this.clientBuilds.assertAvailable();
|
|
107
|
+
const files = await this.clientFiles(bytes);
|
|
108
|
+
// one store or delete of this package's client build at a time (ClientBuilds header)
|
|
109
|
+
await this.clientBuilds.locked(p.sha256, () => this.store(p, bytes, src, { section: client, files }));
|
|
110
|
+
}
|
|
111
|
+
/** {@link put} after its checks; `client` for a package with client code (under its lock). */
|
|
112
|
+
async store(p, bytes, src, client) {
|
|
113
|
+
const plugin = p.section.manifest.name;
|
|
88
114
|
const existing = await this.db
|
|
89
115
|
.selectFrom("extension_packages")
|
|
90
116
|
.select("blob_store")
|
|
91
117
|
.where("sha256", "=", p.sha256)
|
|
92
118
|
.executeTakeFirst();
|
|
93
119
|
if (existing) {
|
|
94
|
-
//
|
|
120
|
+
// The row is there: bytes that went missing (an object deleted, a database cleared) are
|
|
121
|
+
// restored where the row says, and so are the client build's files and row
|
|
95
122
|
await this.repair(p.sha256, existing.blob_store, bytes);
|
|
123
|
+
if (client !== undefined) {
|
|
124
|
+
await this.clientBuilds.extract(p.sha256, plugin, client.files, client.section);
|
|
125
|
+
}
|
|
96
126
|
return;
|
|
97
127
|
}
|
|
128
|
+
// checked and written before the transaction (no object storage call inside one)
|
|
129
|
+
const build = client !== undefined
|
|
130
|
+
? await this.clientBuilds.writeFiles(p.sha256, plugin, client.files, client.section)
|
|
131
|
+
: undefined;
|
|
98
132
|
const store = src.store ?? (this.storage.available ? "object" : "pg");
|
|
99
133
|
if (store === "object") {
|
|
100
134
|
if (!this.storage.available)
|
|
@@ -106,9 +140,14 @@ let ExtensionBlobs = class ExtensionBlobs {
|
|
|
106
140
|
}
|
|
107
141
|
// the row stores the plugin's extension section as reviewed (without the name / version copy)
|
|
108
142
|
const { name: _name, version: _version, ...section } = p.section;
|
|
109
|
-
await this.record(p, section, bytes, src, store);
|
|
143
|
+
await this.record(p, section, bytes, src, store, build);
|
|
144
|
+
}
|
|
145
|
+
/** The files under `dist/client/` of a package's bytes (sha256 already checked by the caller). */
|
|
146
|
+
async clientFiles(bytes) {
|
|
147
|
+
const files = await unpackPackageTgz(bytes, { maxBytes: this.maxBytes() });
|
|
148
|
+
return new Map(files.filter((f) => f.path.startsWith(CLIENT_DIR)).map((f) => [f.path, f.data]));
|
|
110
149
|
}
|
|
111
|
-
async record(p, section, bytes, src, store) {
|
|
150
|
+
async record(p, section, bytes, src, store, build) {
|
|
112
151
|
const m = p.section.manifest;
|
|
113
152
|
const inserted = await this.db
|
|
114
153
|
.insertInto("extension_packages")
|
|
@@ -123,6 +162,7 @@ let ExtensionBlobs = class ExtensionBlobs {
|
|
|
123
162
|
source: src.source,
|
|
124
163
|
source_ref: src.ref,
|
|
125
164
|
uploaded_by: src.actor,
|
|
165
|
+
display_name: p.displayName === undefined ? null : JSON.stringify(p.displayName),
|
|
126
166
|
})
|
|
127
167
|
.onConflict((oc) => oc.column("sha256").doNothing())
|
|
128
168
|
.returning("sha256")
|
|
@@ -134,6 +174,9 @@ let ExtensionBlobs = class ExtensionBlobs {
|
|
|
134
174
|
.onConflict((oc) => oc.column("sha256").doNothing())
|
|
135
175
|
.execute();
|
|
136
176
|
}
|
|
177
|
+
// the build row commits with the package row it references (or after another replica's)
|
|
178
|
+
if (build !== undefined)
|
|
179
|
+
await this.clientBuilds.insert(build);
|
|
137
180
|
}
|
|
138
181
|
/** 已有记录的包:按记录的存放位置检查字节在不在,不在就写回(调用方已校验 sha256)。 */
|
|
139
182
|
async repair(sha256, store, bytes) {
|
|
@@ -204,7 +247,8 @@ ExtensionBlobs = __decorate([
|
|
|
204
247
|
__param(0, Inject(KernelDb)),
|
|
205
248
|
__param(1, Inject(TransactionHost)),
|
|
206
249
|
__param(2, Inject(StorageService)),
|
|
207
|
-
__param(3, Inject(KernelConfigService))
|
|
250
|
+
__param(3, Inject(KernelConfigService)),
|
|
251
|
+
__param(4, Inject(ClientBuilds))
|
|
208
252
|
], ExtensionBlobs);
|
|
209
253
|
export { ExtensionBlobs };
|
|
210
254
|
async function readCapped(body, max) {
|
|
@@ -11,6 +11,7 @@ import { ExtensionAdminOps } from "./admin-ops.js";
|
|
|
11
11
|
import { ExtensionInstalls } from "./installs.js";
|
|
12
12
|
import { PluginApproveLock } from "./locks.js";
|
|
13
13
|
import { ExtensionRegistry } from "./registry.js";
|
|
14
|
+
import type { SingleProviderNote } from "./single-provider.js";
|
|
14
15
|
/**
|
|
15
16
|
* The bootstrap step (package ecosystem spec §7, startup bootstrap spec): installs the plugins
|
|
16
17
|
* pinned by the bootstrap manifest (`packages/kernel/bootstrap.json`). It replaced the builtin
|
|
@@ -35,7 +36,7 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
35
36
|
* manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
|
|
36
37
|
* succeeded; otherwise the next start runs it again, which is idempotent).
|
|
37
38
|
* - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
|
|
38
|
-
* completed run already handled and that is not installed now (
|
|
39
|
+
* completed run already handled and that is not installed now (a super admin uninstalled
|
|
39
40
|
* it) stays uninstalled -> `kept`. A required entry is always installed.
|
|
40
41
|
* - Per entry, by the installed state of its extension:
|
|
41
42
|
* - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
|
|
@@ -44,8 +45,8 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
44
45
|
* and enabled -> `installed`;
|
|
45
46
|
* - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
|
|
46
47
|
* for the version, so new permissions are pre-approved and audited), keeping the desired state
|
|
47
|
-
*
|
|
48
|
-
* - installed at a higher version, or from another source (
|
|
48
|
+
* a super admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
|
|
49
|
+
* - installed at a higher version, or from another source (a super admin upgraded it), or
|
|
49
50
|
* the name is config-declared (`declared`: config wins, no install record is created):
|
|
50
51
|
* untouched, never downgraded -> `kept`;
|
|
51
52
|
* - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
|
|
@@ -61,7 +62,10 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
61
62
|
* A failed entry does not stop the others; the run then throws {@link BootstrapFailedError} naming
|
|
62
63
|
* them. The packages are kept in PG (`blob_store = 'pg'`), so installing an extension never needs
|
|
63
64
|
* the object store (object-store-s3 is itself a bootstrap plugin) and the directory and npm are
|
|
64
|
-
* never needed again
|
|
65
|
+
* never needed again. A plugin's icons and setup guide files are kept in PG too (`catalog_files`),
|
|
66
|
+
* so they never need it either; its skills, connector templates and agent templates do (an entry
|
|
67
|
+
* shipping them fails while no object store runs; an optional one is retried after the extensions
|
|
68
|
+
* loaded).
|
|
65
69
|
*/
|
|
66
70
|
/** The bootstrap manifest that ships with the kernel package. */
|
|
67
71
|
export declare const BOOTSTRAP_MANIFEST_FILE: string;
|
|
@@ -71,6 +75,11 @@ export interface BootstrapEntryResult {
|
|
|
71
75
|
action: "installed" | "upgraded" | "kept" | "imported" | "required_cleared";
|
|
72
76
|
/** The version installed / imported now, or the version kept. */
|
|
73
77
|
version: string;
|
|
78
|
+
/**
|
|
79
|
+
* An optional entry installed (or upgraded) but left disabled: another enabled extension holds
|
|
80
|
+
* a single-provider extension point it provides. (A required entry fails instead.)
|
|
81
|
+
*/
|
|
82
|
+
leftDisabled?: SingleProviderNote;
|
|
74
83
|
}
|
|
75
84
|
export interface BootstrapResult {
|
|
76
85
|
/** sha256 (hex) of the manifest ({@link bootstrapManifestSha256}). */
|
|
@@ -175,6 +184,12 @@ export declare class BootstrapService {
|
|
|
175
184
|
/** The plugin import a declarative entry (or an entry's catalog version) goes through. */
|
|
176
185
|
imports: BootstrapImports;
|
|
177
186
|
}): Promise<BootstrapResult>;
|
|
187
|
+
/**
|
|
188
|
+
* A pin whose plugin name an org holds (a live org-owned catalog item): the bootstrap takes no
|
|
189
|
+
* name over (ruling P3-28), so the entry fails; this warning tells the super admin why and
|
|
190
|
+
* which org holds it (final review M4).
|
|
191
|
+
*/
|
|
192
|
+
private warnIfHeld;
|
|
178
193
|
/** The `bootstrap_runs` row and the `bootstrap.completed` audit, in one transaction. */
|
|
179
194
|
private recordDone;
|
|
180
195
|
/**
|
|
@@ -186,16 +201,37 @@ export declare class BootstrapService {
|
|
|
186
201
|
/** The entry names the last completed run handled (undefined before any run completed). */
|
|
187
202
|
private lastRunNames;
|
|
188
203
|
private entry;
|
|
204
|
+
/**
|
|
205
|
+
* The catalog item of a bootstrap entry follows `required`: a required entry is builtin, offered
|
|
206
|
+
* to every org (scope `all`) and not disabled (migration 0075 could leave a required plugin
|
|
207
|
+
* disabled); an entry that stops being required is no longer builtin and keeps scope `all` (the
|
|
208
|
+
* admin may change it from then on).
|
|
209
|
+
*/
|
|
210
|
+
private markBuiltin;
|
|
189
211
|
/** A declarative plugin: catalog only. Returns false when that version is already imported. */
|
|
190
212
|
private importOnly;
|
|
191
213
|
/**
|
|
192
|
-
* Imports, approves, installs and enables (one review
|
|
214
|
+
* Imports, approves, installs and enables (one review; its confirm deploys the extension). When
|
|
193
215
|
* the catalog already has this version (an earlier run stopped after importing, or the same
|
|
194
216
|
* package came from a marketplace), the extension is deployed from the package store instead.
|
|
195
217
|
*/
|
|
196
218
|
private deploy;
|
|
197
219
|
/** The extension of a catalog version already imported: ingest, approve, install (, enable). */
|
|
198
220
|
private deployFromStore;
|
|
221
|
+
/**
|
|
222
|
+
* Enables a bootstrap extension unless another enabled extension provides one of its
|
|
223
|
+
* single-provider extension points (see {@link leftDisabled}).
|
|
224
|
+
*/
|
|
225
|
+
private enableOrWarn;
|
|
226
|
+
/**
|
|
227
|
+
* A bootstrap extension left disabled because another enabled extension holds a single-provider
|
|
228
|
+
* extension point it provides. An optional preinstall (a sandbox while the super admin runs
|
|
229
|
+
* another one) stays disabled with a warning, and the entry's result says so. A required entry
|
|
230
|
+
* fails (thrown, so the run is not recorded done, `capybara bootstrap` exits 1 and
|
|
231
|
+
* `capybara start` refuses to serve): the deployment cannot run without it, and only the super
|
|
232
|
+
* admin can free the point, by disabling the other provider and running the bootstrap again.
|
|
233
|
+
*/
|
|
234
|
+
private leftDisabled;
|
|
199
235
|
/** The permission snapshot of a stored package (source `bootstrap`), under the approve lock. */
|
|
200
236
|
private approveStored;
|
|
201
237
|
/** Install records still `required` whose entry left the manifest lose `required`. */
|
|
@@ -15,6 +15,7 @@ import { parseBootstrapManifest, SDK_VERSION, } from "@capybara-hq/plugin-sdk";
|
|
|
15
15
|
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
16
16
|
import { sql } from "kysely";
|
|
17
17
|
import semver from "semver";
|
|
18
|
+
import { otherNameOwner } from "../catalog/ownership.js";
|
|
18
19
|
import { catalogPackageError } from "../catalog/plugin-import.js";
|
|
19
20
|
import { PluginPackageError, readPluginPackage } from "../catalog/plugin-package.js";
|
|
20
21
|
import { ApiError } from "../errors.js";
|
|
@@ -57,7 +58,7 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
57
58
|
* manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
|
|
58
59
|
* succeeded; otherwise the next start runs it again, which is idempotent).
|
|
59
60
|
* - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
|
|
60
|
-
* completed run already handled and that is not installed now (
|
|
61
|
+
* completed run already handled and that is not installed now (a super admin uninstalled
|
|
61
62
|
* it) stays uninstalled -> `kept`. A required entry is always installed.
|
|
62
63
|
* - Per entry, by the installed state of its extension:
|
|
63
64
|
* - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
|
|
@@ -66,8 +67,8 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
66
67
|
* and enabled -> `installed`;
|
|
67
68
|
* - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
|
|
68
69
|
* for the version, so new permissions are pre-approved and audited), keeping the desired state
|
|
69
|
-
*
|
|
70
|
-
* - installed at a higher version, or from another source (
|
|
70
|
+
* a super admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
|
|
71
|
+
* - installed at a higher version, or from another source (a super admin upgraded it), or
|
|
71
72
|
* the name is config-declared (`declared`: config wins, no install record is created):
|
|
72
73
|
* untouched, never downgraded -> `kept`;
|
|
73
74
|
* - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
|
|
@@ -83,7 +84,10 @@ import { ExtensionRegistry } from "./registry.js";
|
|
|
83
84
|
* A failed entry does not stop the others; the run then throws {@link BootstrapFailedError} naming
|
|
84
85
|
* them. The packages are kept in PG (`blob_store = 'pg'`), so installing an extension never needs
|
|
85
86
|
* the object store (object-store-s3 is itself a bootstrap plugin) and the directory and npm are
|
|
86
|
-
* never needed again
|
|
87
|
+
* never needed again. A plugin's icons and setup guide files are kept in PG too (`catalog_files`),
|
|
88
|
+
* so they never need it either; its skills, connector templates and agent templates do (an entry
|
|
89
|
+
* shipping them fails while no object store runs; an optional one is retried after the extensions
|
|
90
|
+
* loaded).
|
|
87
91
|
*/
|
|
88
92
|
/** The bootstrap manifest that ships with the kernel package. */
|
|
89
93
|
export const BOOTSTRAP_MANIFEST_FILE = fileURLToPath(new URL("../../bootstrap.json", import.meta.url));
|
|
@@ -306,6 +310,7 @@ let BootstrapService = class BootstrapService {
|
|
|
306
310
|
const failures = [];
|
|
307
311
|
for (const e of o.manifest.plugins) {
|
|
308
312
|
signal.throwIfAborted();
|
|
313
|
+
await this.warnIfHeld(e);
|
|
309
314
|
try {
|
|
310
315
|
const r = await this.entry(e, files.get(e.name), handled, o.imports);
|
|
311
316
|
results.push(carried(r, o.carry));
|
|
@@ -334,6 +339,23 @@ let BootstrapService = class BootstrapService {
|
|
|
334
339
|
return { manifestSha256, results };
|
|
335
340
|
});
|
|
336
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* A pin whose plugin name an org holds (a live org-owned catalog item): the bootstrap takes no
|
|
344
|
+
* name over (ruling P3-28), so the entry fails; this warning tells the super admin why and
|
|
345
|
+
* which org holds it (final review M4).
|
|
346
|
+
*/
|
|
347
|
+
async warnIfHeld(e) {
|
|
348
|
+
const holder = await otherNameOwner(this.db, e.name, null);
|
|
349
|
+
if (holder?.kind !== "org")
|
|
350
|
+
return;
|
|
351
|
+
this.log.warn("bootstrap: the plugin name is held by an organization; the entry cannot take it over until the organization renames or deletes its plugin", {
|
|
352
|
+
plugin: e.name,
|
|
353
|
+
version: e.version,
|
|
354
|
+
required: e.required,
|
|
355
|
+
ownerOrgId: holder.orgId,
|
|
356
|
+
ownerOrg: holder.name,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
337
359
|
/** The `bootstrap_runs` row and the `bootstrap.completed` audit, in one transaction. */
|
|
338
360
|
async recordDone(manifestSha256, results) {
|
|
339
361
|
await this.db
|
|
@@ -400,9 +422,11 @@ let BootstrapService = class BootstrapService {
|
|
|
400
422
|
// Not new to the manifest: an optional entry left out on purpose stays out (Ruling 5)
|
|
401
423
|
const isNew = handled === undefined || !handled.has(e.name);
|
|
402
424
|
if (!pkg.manifest.extension) {
|
|
425
|
+
await this.markBuiltin(e.name, e.required);
|
|
403
426
|
if (!isNew)
|
|
404
427
|
return { name: e.name, action: "kept", version: e.version };
|
|
405
428
|
const imported = await this.importOnly(e, bytes, ref, imports);
|
|
429
|
+
await this.markBuiltin(e.name, e.required);
|
|
406
430
|
return { name: e.name, action: imported ? "imported" : "kept", version: e.version };
|
|
407
431
|
}
|
|
408
432
|
if (this.registry.declared().has(e.name)) {
|
|
@@ -421,13 +445,14 @@ let BootstrapService = class BootstrapService {
|
|
|
421
445
|
return { name: e.name, action: "kept", version: e.version };
|
|
422
446
|
}
|
|
423
447
|
let result;
|
|
448
|
+
let leftDisabled;
|
|
424
449
|
if (!row) {
|
|
425
|
-
await this.deploy(e, bytes, ref, true, imports);
|
|
450
|
+
leftDisabled = await this.deploy(e, bytes, ref, true, imports);
|
|
426
451
|
result = { name: e.name, action: "installed", version: e.version };
|
|
427
452
|
}
|
|
428
453
|
else if (row.source === "bootstrap" && isLower(row.version, e.version)) {
|
|
429
454
|
// The desired state the admin chose is kept; a required plugin is enabled below anyway
|
|
430
|
-
await this.deploy(e, bytes, ref, row.desired_state === "enabled", imports);
|
|
455
|
+
leftDisabled = await this.deploy(e, bytes, ref, row.desired_state === "enabled", imports);
|
|
431
456
|
result = { name: e.name, action: "upgraded", version: e.version };
|
|
432
457
|
}
|
|
433
458
|
else {
|
|
@@ -449,9 +474,42 @@ let BootstrapService = class BootstrapService {
|
|
|
449
474
|
}
|
|
450
475
|
// A required install must run on the deployment (an org cannot use it otherwise)
|
|
451
476
|
if (e.required && row?.desired_state === "disabled") {
|
|
452
|
-
await this.
|
|
477
|
+
leftDisabled = await this.enableOrWarn(e);
|
|
453
478
|
}
|
|
454
|
-
|
|
479
|
+
await this.markBuiltin(e.name, e.required);
|
|
480
|
+
return leftDisabled === undefined ? result : { ...result, leftDisabled };
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* The catalog item of a bootstrap entry follows `required`: a required entry is builtin, offered
|
|
484
|
+
* to every org (scope `all`) and not disabled (migration 0075 could leave a required plugin
|
|
485
|
+
* disabled); an entry that stops being required is no longer builtin and keeps scope `all` (the
|
|
486
|
+
* admin may change it from then on).
|
|
487
|
+
*/
|
|
488
|
+
async markBuiltin(name, required) {
|
|
489
|
+
const touch = { updated_at: sql `now()` };
|
|
490
|
+
if (required) {
|
|
491
|
+
await this.db
|
|
492
|
+
.updateTable("catalog_items")
|
|
493
|
+
.set({
|
|
494
|
+
builtin: true,
|
|
495
|
+
scope: "all",
|
|
496
|
+
disabled: false,
|
|
497
|
+
scope_version: sql `scope_version + 1`,
|
|
498
|
+
...touch,
|
|
499
|
+
})
|
|
500
|
+
.where("name", "=", name)
|
|
501
|
+
.where("deleted_at", "is", null)
|
|
502
|
+
.where((eb) => eb.or([eb("builtin", "=", false), eb("scope", "<>", "all"), eb("disabled", "=", true)]))
|
|
503
|
+
.execute();
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
await this.db
|
|
507
|
+
.updateTable("catalog_items")
|
|
508
|
+
.set({ builtin: false, ...touch })
|
|
509
|
+
.where("name", "=", name)
|
|
510
|
+
.where("deleted_at", "is", null)
|
|
511
|
+
.where("builtin", "=", true)
|
|
512
|
+
.execute();
|
|
455
513
|
}
|
|
456
514
|
/** A declarative plugin: catalog only. Returns false when that version is already imported. */
|
|
457
515
|
async importOnly(e, bytes, ref, imports) {
|
|
@@ -461,10 +519,7 @@ let BootstrapService = class BootstrapService {
|
|
|
461
519
|
ref,
|
|
462
520
|
integrity: e.integrity,
|
|
463
521
|
});
|
|
464
|
-
await imports.confirm(null, stagingId, {
|
|
465
|
-
reviewHash: review.reviewHash,
|
|
466
|
-
deployExtension: false,
|
|
467
|
-
});
|
|
522
|
+
await imports.confirm(null, stagingId, { reviewHash: review.reviewHash });
|
|
468
523
|
return true;
|
|
469
524
|
}
|
|
470
525
|
catch (err) {
|
|
@@ -474,7 +529,7 @@ let BootstrapService = class BootstrapService {
|
|
|
474
529
|
}
|
|
475
530
|
}
|
|
476
531
|
/**
|
|
477
|
-
* Imports, approves, installs and enables (one review
|
|
532
|
+
* Imports, approves, installs and enables (one review; its confirm deploys the extension). When
|
|
478
533
|
* the catalog already has this version (an earlier run stopped after importing, or the same
|
|
479
534
|
* package came from a marketplace), the extension is deployed from the package store instead.
|
|
480
535
|
*/
|
|
@@ -489,19 +544,25 @@ let BootstrapService = class BootstrapService {
|
|
|
489
544
|
}
|
|
490
545
|
catch (err) {
|
|
491
546
|
if (err instanceof ApiError && err.code === "catalog.version_exists") {
|
|
492
|
-
|
|
493
|
-
return;
|
|
547
|
+
return this.deployFromStore(e, bytes, ref, enable);
|
|
494
548
|
}
|
|
495
549
|
throw err;
|
|
496
550
|
}
|
|
497
551
|
const r = await imports.confirm(null, staged.stagingId, {
|
|
498
552
|
reviewHash: staged.review.reviewHash,
|
|
499
|
-
deployExtension: true,
|
|
500
553
|
enable,
|
|
501
554
|
});
|
|
502
555
|
if (r.deploy?.result === "failed") {
|
|
503
556
|
throw new ApiError((r.deploy.code ?? "internal"), r.deploy.message ?? `installing extension ${e.name} failed`);
|
|
504
557
|
}
|
|
558
|
+
if (r.deploy?.singleProvider !== undefined) {
|
|
559
|
+
return this.leftDisabled(e, {
|
|
560
|
+
code: r.deploy.code,
|
|
561
|
+
message: r.deploy.message,
|
|
562
|
+
singleProvider: r.deploy.singleProvider,
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
return undefined;
|
|
505
566
|
}
|
|
506
567
|
/** The extension of a catalog version already imported: ingest, approve, install (, enable). */
|
|
507
568
|
async deployFromStore(e, bytes, ref, enable) {
|
|
@@ -523,9 +584,39 @@ let BootstrapService = class BootstrapService {
|
|
|
523
584
|
.where("name", "=", e.name)
|
|
524
585
|
.where("deleted_at", "is", null)
|
|
525
586
|
.executeTakeFirst();
|
|
526
|
-
await this.ops.install(e.name, review.sha256, null, undefined, item ? { catalogItemId: item.id } : {});
|
|
527
|
-
|
|
528
|
-
|
|
587
|
+
const installed = await this.ops.install(e.name, review.sha256, null, undefined, item ? { catalogItemId: item.id } : {});
|
|
588
|
+
// An upgrade newly providing a held single-provider point is left disabled by the install
|
|
589
|
+
if (installed.leftDisabled !== undefined)
|
|
590
|
+
return this.leftDisabled(e, installed.leftDisabled);
|
|
591
|
+
return enable ? this.enableOrWarn(e) : undefined;
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Enables a bootstrap extension unless another enabled extension provides one of its
|
|
595
|
+
* single-provider extension points (see {@link leftDisabled}).
|
|
596
|
+
*/
|
|
597
|
+
async enableOrWarn(e) {
|
|
598
|
+
const r = await this.ops.enableUnlessOccupied(e.name, null);
|
|
599
|
+
return r.enabled ? undefined : this.leftDisabled(e, r.note);
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* A bootstrap extension left disabled because another enabled extension holds a single-provider
|
|
603
|
+
* extension point it provides. An optional preinstall (a sandbox while the super admin runs
|
|
604
|
+
* another one) stays disabled with a warning, and the entry's result says so. A required entry
|
|
605
|
+
* fails (thrown, so the run is not recorded done, `capybara bootstrap` exits 1 and
|
|
606
|
+
* `capybara start` refuses to serve): the deployment cannot run without it, and only the super
|
|
607
|
+
* admin can free the point, by disabling the other provider and running the bootstrap again.
|
|
608
|
+
*/
|
|
609
|
+
leftDisabled(e, note) {
|
|
610
|
+
const block = note.singleProvider;
|
|
611
|
+
if (e.required) {
|
|
612
|
+
const other = block.enabled.name;
|
|
613
|
+
throw new ApiError(note.code, `Required plugin ${e.name} provides ${block.extensionPoint}, which ${other} already provides; disable ${other} and run the bootstrap again`, [block]);
|
|
614
|
+
}
|
|
615
|
+
this.log.warn(`bootstrap: the plugin is installed disabled; ${note.message}`, {
|
|
616
|
+
plugin: e.name,
|
|
617
|
+
required: e.required,
|
|
618
|
+
});
|
|
619
|
+
return note;
|
|
529
620
|
}
|
|
530
621
|
/** The permission snapshot of a stored package (source `bootstrap`), under the approve lock. */
|
|
531
622
|
async approveStored(e, set, sha256) {
|
|
@@ -552,6 +643,17 @@ let BootstrapService = class BootstrapService {
|
|
|
552
643
|
if (names.length > 0)
|
|
553
644
|
q = q.where("name", "not in", names);
|
|
554
645
|
const rows = await q.returning(["name", "version"]).execute();
|
|
646
|
+
for (const r of rows)
|
|
647
|
+
await this.markBuiltin(r.name, false);
|
|
648
|
+
// A declarative plugin has no install record: clear builtin by catalog name
|
|
649
|
+
let items = this.db
|
|
650
|
+
.updateTable("catalog_items")
|
|
651
|
+
.set({ builtin: false, updated_at: sql `now()` })
|
|
652
|
+
.where("builtin", "=", true)
|
|
653
|
+
.where("deleted_at", "is", null);
|
|
654
|
+
if (names.length > 0)
|
|
655
|
+
items = items.where("name", "not in", names);
|
|
656
|
+
await items.execute();
|
|
555
657
|
return rows.map((r) => ({ name: r.name, action: "required_cleared", version: r.version }));
|
|
556
658
|
}
|
|
557
659
|
};
|
package/dist/extensions/cli.d.ts
CHANGED
|
@@ -54,6 +54,18 @@ export interface ExtensionCli {
|
|
|
54
54
|
publishChanged(plugin: string): Promise<boolean>;
|
|
55
55
|
close(): Promise<void>;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* The effective deployment config (the startup config `fileValue` completed by the `stored` PG
|
|
59
|
+
* fields) parsed as the host's load gate does: overridable fields may stay empty (spec A §5.4a),
|
|
60
|
+
* hidden and read-only ones must be complete.
|
|
61
|
+
*/
|
|
62
|
+
export declare function parseDeploymentConfig(schema: z.ZodTypeAny, stored: Record<string, unknown>, fileValue: unknown): {
|
|
63
|
+
ok: true;
|
|
64
|
+
value: unknown;
|
|
65
|
+
} | {
|
|
66
|
+
ok: false;
|
|
67
|
+
issues: ConfigIssue[];
|
|
68
|
+
};
|
|
57
69
|
/**
|
|
58
70
|
* The CLI's extension management context (C18, F-Q): a Nest application context with
|
|
59
71
|
* the extensions module over the database and a lazy Redis connection used only for publishing
|
package/dist/extensions/cli.js
CHANGED
|
@@ -13,7 +13,17 @@ import { ExtensionsModule } from "./extensions.module.js";
|
|
|
13
13
|
import { ExtensionHost } from "./host.js";
|
|
14
14
|
import { ExtensionInstalls } from "./installs.js";
|
|
15
15
|
import { PLUGINS_CHANGED_TOPIC } from "./lifecycle-topics.js";
|
|
16
|
+
import { parseLoadGate } from "./org-levels.js";
|
|
16
17
|
import { ExtensionPackageError, extensionPackageApiError, permissionSetOfPackage, readExtensionPackage, } from "./package.js";
|
|
18
|
+
/**
|
|
19
|
+
* The effective deployment config (the startup config `fileValue` completed by the `stored` PG
|
|
20
|
+
* fields) parsed as the host's load gate does: overridable fields may stay empty (spec A §5.4a),
|
|
21
|
+
* hidden and read-only ones must be complete.
|
|
22
|
+
*/
|
|
23
|
+
export function parseDeploymentConfig(schema, stored, fileValue) {
|
|
24
|
+
const r = parseLoadGate(schema, mergeDeploymentConfig(stored, fileValue, schemaFields(schema).map((f) => f.path)));
|
|
25
|
+
return r.success ? { ok: true, value: r.data } : { ok: false, issues: toIssues(r.error) };
|
|
26
|
+
}
|
|
17
27
|
/**
|
|
18
28
|
* The CLI's extension management context (C18, F-Q): a Nest application context with
|
|
19
29
|
* the extensions module over the database and a lazy Redis connection used only for publishing
|
|
@@ -44,8 +54,7 @@ export async function openExtensionCli(config, log, opts = {}) {
|
|
|
44
54
|
const stored = await readStoredDeploymentConfig(db.db, keyring, name, {
|
|
45
55
|
secretPaths: secretPathsOf(schemaFields(schema)),
|
|
46
56
|
});
|
|
47
|
-
|
|
48
|
-
return r.success ? { ok: true, value: r.data } : { ok: false, issues: toIssues(r.error) };
|
|
57
|
+
return parseDeploymentConfig(schema, stored, config.extensionConfig[name]);
|
|
49
58
|
};
|
|
50
59
|
const configIssues = new Map();
|
|
51
60
|
const deploymentConfigs = new Map();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { core } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* 插件部署配置(校验后)中非密钥部分的摘要:先把 schema 里所有 secret 叶子(`configFields` 可达路径,
|
|
4
|
+
* 加载时 `assertSecretsReachable` 已保证密钥都在这些路径上)换成固定占位值,再取 sha256(键排序 JSON) 前 16 位十六进制。
|
|
5
|
+
* 给需要「配置变了就失效」的缓存键用(如模型列表)。密钥不参与摘要:不加盐的短摘要写进 Redis 键名后,
|
|
6
|
+
* 低熵密钥可被离线猜测、泄露的密钥可被确认;代价是轮换密钥不会让缓存失效(缓存内容本来就不该依赖密钥)。
|
|
7
|
+
* 没有部署配置 schema 时无从得知哪些是密钥,摘要不按配置区分。同一份配置在各副本上得到同一摘要。
|
|
8
|
+
* 函数自己按 schema 遮蔽,调用方不必(也不能忘记)先打码。
|
|
9
|
+
*/
|
|
10
|
+
export declare function deploymentConfigHash(schema: core.$ZodType | undefined, config: unknown): string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { configFields, getPath, setPath } from "../config/fields.js";
|
|
3
|
+
/** 键排序后的 JSON(对象键顺序不影响结果);undefined 字段与 JSON.stringify 一样省略。 */
|
|
4
|
+
const canonicalJson = (v) => {
|
|
5
|
+
if (Array.isArray(v))
|
|
6
|
+
return `[${v.map((x) => (x === undefined ? "null" : canonicalJson(x))).join(",")}]`;
|
|
7
|
+
if (v !== null && typeof v === "object") {
|
|
8
|
+
const entries = Object.entries(v)
|
|
9
|
+
.filter(([, x]) => x !== undefined)
|
|
10
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
11
|
+
return `{${entries.map(([k, x]) => `${JSON.stringify(k)}:${canonicalJson(x)}`).join(",")}}`;
|
|
12
|
+
}
|
|
13
|
+
return JSON.stringify(v) ?? "null";
|
|
14
|
+
};
|
|
15
|
+
/** 遮蔽 secret 字段后参与摘要的固定占位值。 */
|
|
16
|
+
const SECRET_PLACEHOLDER = "<secret>";
|
|
17
|
+
/**
|
|
18
|
+
* 插件部署配置(校验后)中非密钥部分的摘要:先把 schema 里所有 secret 叶子(`configFields` 可达路径,
|
|
19
|
+
* 加载时 `assertSecretsReachable` 已保证密钥都在这些路径上)换成固定占位值,再取 sha256(键排序 JSON) 前 16 位十六进制。
|
|
20
|
+
* 给需要「配置变了就失效」的缓存键用(如模型列表)。密钥不参与摘要:不加盐的短摘要写进 Redis 键名后,
|
|
21
|
+
* 低熵密钥可被离线猜测、泄露的密钥可被确认;代价是轮换密钥不会让缓存失效(缓存内容本来就不该依赖密钥)。
|
|
22
|
+
* 没有部署配置 schema 时无从得知哪些是密钥,摘要不按配置区分。同一份配置在各副本上得到同一摘要。
|
|
23
|
+
* 函数自己按 schema 遮蔽,调用方不必(也不能忘记)先打码。
|
|
24
|
+
*/
|
|
25
|
+
export function deploymentConfigHash(schema, config) {
|
|
26
|
+
let redacted = null;
|
|
27
|
+
if (schema) {
|
|
28
|
+
redacted = structuredClone(config);
|
|
29
|
+
if (redacted !== null && typeof redacted === "object") {
|
|
30
|
+
for (const f of configFields(schema)) {
|
|
31
|
+
if (f.meta?.secret && getPath(redacted, f.path) !== undefined) {
|
|
32
|
+
setPath(redacted, f.path, SECRET_PLACEHOLDER);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return createHash("sha256").update(canonicalJson(redacted)).digest("hex").slice(0, 16);
|
|
38
|
+
}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
2
|
/** 校验失败的单条原因:只含路径与按 issue 类型生成的说明,不回显字段值。 */
|
|
3
3
|
export interface ConfigIssue {
|
|
4
|
+
/** The path joined with dots (`""` = the root); ambiguous when a key contains a dot. */
|
|
4
5
|
path: string;
|
|
6
|
+
/** The zod path unjoined (record keys such as endpoint names may contain dots). */
|
|
7
|
+
segments: (string | number)[];
|
|
5
8
|
message: string;
|
|
9
|
+
/**
|
|
10
|
+
* A custom issue whose `params.ui` names a key of the schema's root `x-ui.messages`: the form
|
|
11
|
+
* shows that localized message (spec §4.4). Never zod's own custom text.
|
|
12
|
+
*/
|
|
13
|
+
messageKey?: string;
|
|
6
14
|
}
|
|
7
|
-
|
|
15
|
+
/**
|
|
16
|
+
* The issues of a failed config parse. `messages` is the root `x-ui.messages` of the schema's
|
|
17
|
+
* form JSON Schema (`configMessages`): custom issues naming one of its keys get `messageKey`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function toIssues(error: z.ZodError, messages?: Record<string, unknown>): ConfigIssue[];
|
|
@@ -23,9 +23,26 @@ function issueMessage(i) {
|
|
|
23
23
|
return "invalid value";
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
/** The `params.ui` of a custom issue when it names one of `messages` (own keys only). */
|
|
27
|
+
function messageKeyOf(i, messages) {
|
|
28
|
+
if (i.code !== "custom" || messages === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
const key = i.params?.ui;
|
|
31
|
+
return typeof key === "string" && Object.hasOwn(messages, key) ? key : undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The issues of a failed config parse. `messages` is the root `x-ui.messages` of the schema's
|
|
35
|
+
* form JSON Schema (`configMessages`): custom issues naming one of its keys get `messageKey`.
|
|
36
|
+
*/
|
|
37
|
+
export function toIssues(error, messages) {
|
|
38
|
+
return error.issues.map((i) => {
|
|
39
|
+
const segments = i.path.map((s) => (typeof s === "number" ? s : String(s)));
|
|
40
|
+
const messageKey = messageKeyOf(i, messages);
|
|
41
|
+
return {
|
|
42
|
+
path: segments.join("."),
|
|
43
|
+
segments,
|
|
44
|
+
message: issueMessage(i),
|
|
45
|
+
...(messageKey !== undefined && { messageKey }),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
31
48
|
}
|