@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
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { isThemeAssetPath } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { ApiError } from "../errors.js";
|
|
13
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
14
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
15
|
+
import { packagePath } from "../packages/tgz.js";
|
|
16
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
17
|
+
import { renderThemeCss } from "./render-css.js";
|
|
18
|
+
import { THEME_CSS_REVISION, themeUrl } from "./theme-state.js";
|
|
19
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
20
|
+
/** A version number as it appears in a delivery URL: a positive int4. */
|
|
21
|
+
const VERSION_RE = /^[1-9]\d{0,9}$/;
|
|
22
|
+
const INT4_MAX = 2_147_483_647;
|
|
23
|
+
/** The content type of each asset kind a theme names (fonts and logos). */
|
|
24
|
+
const ASSET_TYPES = [
|
|
25
|
+
[/\.woff2$/i, "font/woff2"],
|
|
26
|
+
[/\.svg$/i, "image/svg+xml"],
|
|
27
|
+
[/\.png$/i, "image/png"],
|
|
28
|
+
];
|
|
29
|
+
/** 404 `theme.not_found`. */
|
|
30
|
+
const notFound = (what) => new ApiError("theme.not_found", `${what} does not exist; reload the page to get the current theme`);
|
|
31
|
+
/**
|
|
32
|
+
* Delivery of theme versions (themes spec §8): the stylesheet rendered from the stored definition
|
|
33
|
+
* and the stored assets. A version is identified by the theme id and version number only; a theme
|
|
34
|
+
* removed later (soft-deleted) still serves its versions, because their URLs are immutable and may
|
|
35
|
+
* be cached in open pages, and a theme's styles are not sensitive (§8, public access).
|
|
36
|
+
*/
|
|
37
|
+
let ThemeDeliveryService = class ThemeDeliveryService {
|
|
38
|
+
db;
|
|
39
|
+
storage;
|
|
40
|
+
log;
|
|
41
|
+
constructor(db, storage, log) {
|
|
42
|
+
this.db = db;
|
|
43
|
+
this.storage = storage;
|
|
44
|
+
this.log = log;
|
|
45
|
+
}
|
|
46
|
+
/** The stored version row, or 404 `theme.not_found`. */
|
|
47
|
+
async version(id, version) {
|
|
48
|
+
if (!UUID_RE.test(id) || !VERSION_RE.test(version) || Number(version) > INT4_MAX) {
|
|
49
|
+
throw notFound(`Theme ${id} version ${version}`);
|
|
50
|
+
}
|
|
51
|
+
const row = await this.db
|
|
52
|
+
.selectFrom("platform_theme_versions")
|
|
53
|
+
.select(["definition", "object_prefix"])
|
|
54
|
+
.where("theme_id", "=", id)
|
|
55
|
+
.where("version", "=", Number(version))
|
|
56
|
+
.executeTakeFirst();
|
|
57
|
+
if (!row)
|
|
58
|
+
throw notFound(`Theme ${id} version ${version}`);
|
|
59
|
+
return { definition: row.definition, objectPrefix: row.object_prefix };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The stylesheet of version `version` of theme `id` ({@link renderThemeCss}, asset URLs from
|
|
63
|
+
* {@link themeUrl}); a stored value that fails re-validation is left out with one warning per
|
|
64
|
+
* render naming every skipped value. Unknown theme or version, or a `revision` other than the
|
|
65
|
+
* current `r<THEME_CSS_REVISION>` (an older one promised another format; a later one belongs to a
|
|
66
|
+
* newer replica): 404 `theme.not_found`, never cached.
|
|
67
|
+
*/
|
|
68
|
+
async stylesheet(id, version, revision) {
|
|
69
|
+
if (revision !== `r${THEME_CSS_REVISION}`) {
|
|
70
|
+
throw notFound(`Theme ${id} version ${version} stylesheet revision ${revision}`);
|
|
71
|
+
}
|
|
72
|
+
const { definition } = await this.version(id, version);
|
|
73
|
+
return renderThemeCss(definition, (path) => themeUrl(id, version, path), (skipped) => this.log.warn("theme stylesheet: stored values failed re-validation and were left out", {
|
|
74
|
+
themeId: id,
|
|
75
|
+
version,
|
|
76
|
+
skipped,
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Asset `file` (a path inside the plugin, as stored: `fonts/MiSans.woff2`) of version `version`
|
|
81
|
+
* of theme `id`: only a font or logo the version's definition names. Unknown theme, version or
|
|
82
|
+
* file: 404 `theme.not_found`.
|
|
83
|
+
*/
|
|
84
|
+
async asset(id, version, file) {
|
|
85
|
+
const v = await this.version(id, version);
|
|
86
|
+
const def = v.definition;
|
|
87
|
+
const named = [
|
|
88
|
+
...(Array.isArray(def.fonts) ? def.fonts.map((f) => f?.file) : []),
|
|
89
|
+
def.logo?.mark,
|
|
90
|
+
def.logo?.favicon,
|
|
91
|
+
]
|
|
92
|
+
.filter((p) => typeof p === "string")
|
|
93
|
+
.map(packagePath);
|
|
94
|
+
const type = ASSET_TYPES.find(([re]) => re.test(file))?.[1];
|
|
95
|
+
if (v.objectPrefix === null ||
|
|
96
|
+
type === undefined ||
|
|
97
|
+
!isThemeAssetPath(file) ||
|
|
98
|
+
!named.includes(file)) {
|
|
99
|
+
throw notFound(`Theme asset ${file}`);
|
|
100
|
+
}
|
|
101
|
+
this.storage.assertAvailable();
|
|
102
|
+
const got = await this.storage.deployment().get(`${v.objectPrefix}${file}`);
|
|
103
|
+
if (!got) {
|
|
104
|
+
this.log.warn("theme asset missing from object storage", { themeId: id, version, file });
|
|
105
|
+
throw notFound(`Theme asset ${file}`);
|
|
106
|
+
}
|
|
107
|
+
return { contentType: type, data: new Uint8Array(await new Response(got.body).arrayBuffer()) };
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
ThemeDeliveryService = __decorate([
|
|
111
|
+
Injectable(),
|
|
112
|
+
__param(0, Inject(KernelDb)),
|
|
113
|
+
__param(1, Inject(StorageService)),
|
|
114
|
+
__param(2, Inject(KERNEL_LOGGER))
|
|
115
|
+
], ThemeDeliveryService);
|
|
116
|
+
export { ThemeDeliveryService };
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { type LocalizedName, type ParsedTheme, type ThemeScheme } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { type ComponentRow } from "../catalog/component-state.js";
|
|
3
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
|
+
import { ApiError } from "../errors.js";
|
|
5
|
+
/** A theme as the web uses it (spec §8): what to load and how to draw the logo. */
|
|
6
|
+
export interface ThemeRef {
|
|
7
|
+
/** The `platform_themes` id (what settings and picks store). */
|
|
8
|
+
id: string;
|
|
9
|
+
/**
|
|
10
|
+
* `"<plugin>/<theme file id>"`: the name the web's `theme=` state token and `useTheme()` carry
|
|
11
|
+
* (client extensions spec §7.3). Stable across versions, unlike `id`.
|
|
12
|
+
*/
|
|
13
|
+
key: string;
|
|
14
|
+
/** Its current version. */
|
|
15
|
+
version: string;
|
|
16
|
+
name: LocalizedName;
|
|
17
|
+
/** The schemes the theme defines, `dark` first. */
|
|
18
|
+
schemes: ThemeScheme[];
|
|
19
|
+
/** The only scheme of a single-scheme theme, else null. */
|
|
20
|
+
singleScheme: ThemeScheme | null;
|
|
21
|
+
/** null: the theme has no logo (the built-in mark and wordmark). */
|
|
22
|
+
logo: {
|
|
23
|
+
markUrl: string | null;
|
|
24
|
+
wordmark: string | null;
|
|
25
|
+
faviconUrl: string | null;
|
|
26
|
+
} | null;
|
|
27
|
+
/** `/api/v1/themes/<id>/<version>/r<THEME_CSS_REVISION>/theme.css`. */
|
|
28
|
+
cssUrl: string;
|
|
29
|
+
}
|
|
30
|
+
/** The four colors a theme picker draws per scheme. */
|
|
31
|
+
export interface ThemeSwatch {
|
|
32
|
+
bg: string;
|
|
33
|
+
panel: string;
|
|
34
|
+
ink: string;
|
|
35
|
+
accent: string;
|
|
36
|
+
}
|
|
37
|
+
/** A theme of an org's listing: its reference and swatches for each scheme it defines. */
|
|
38
|
+
export type ListedTheme = ThemeRef & {
|
|
39
|
+
swatches: Partial<Record<ThemeScheme, ThemeSwatch>>;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* The render revision of theme stylesheets, a segment of the stylesheet URL (`r<N>/theme.css`).
|
|
43
|
+
* The stylesheet is cached as immutable for a year, keyed by its URL: bump this whenever
|
|
44
|
+
* `renderThemeCss`'s output format changes, so no browser keeps an older format under a URL
|
|
45
|
+
* that now means the new one. The delivery route serves only the current revision (404
|
|
46
|
+
* `theme.not_found` otherwise). History: (none, `<version>/theme.css`) plain rules; 2: one
|
|
47
|
+
* `@layer theme { … }` block (client extensions spec §7.2).
|
|
48
|
+
*/
|
|
49
|
+
export declare const THEME_CSS_REVISION = 2;
|
|
50
|
+
/**
|
|
51
|
+
* The delivery URL of a theme version (spec §8): its stylesheet (with the render revision,
|
|
52
|
+
* {@link THEME_CSS_REVISION}), or with `asset` (a path inside the
|
|
53
|
+
* plugin as the theme file names it, e.g. `./fonts/MiSans.woff2`) that asset, as one path segment
|
|
54
|
+
* (`assets/fonts%2FMiSans.woff2`; the route decodes it back to the stored path `fonts/MiSans.woff2`).
|
|
55
|
+
* The one builder of these URLs: the listing, the stylesheet and the asset routes all use it.
|
|
56
|
+
*/
|
|
57
|
+
export declare function themeUrl(id: string, version: string, asset?: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* The {@link ThemeRef} of version `version` of theme `id` of plugin `plugin` (null only for a row
|
|
60
|
+
* without provenance: the key is then the file id alone).
|
|
61
|
+
*/
|
|
62
|
+
export declare function themeRefOf(id: string, version: string, def: ParsedTheme, plugin: string | null): ThemeRef;
|
|
63
|
+
/**
|
|
64
|
+
* The swatches of each scheme the theme defines: its overrides merged onto the current built-in
|
|
65
|
+
* values (a stored definition holds only the theme file's own values, themes spec §6).
|
|
66
|
+
*/
|
|
67
|
+
export declare function themeSwatches(def: ParsedTheme): Partial<Record<ThemeScheme, ThemeSwatch>>;
|
|
68
|
+
/** A live theme's current definition and its plugin (null: no provenance). */
|
|
69
|
+
export interface ThemeDefinition {
|
|
70
|
+
version: string;
|
|
71
|
+
definition: ParsedTheme;
|
|
72
|
+
plugin: string | null;
|
|
73
|
+
}
|
|
74
|
+
/** The current definitions of live themes `ids`, by id. */
|
|
75
|
+
export declare function themeDefinitions(db: KernelSchemaDb, ids: readonly string[]): Promise<Map<string, ThemeDefinition>>;
|
|
76
|
+
/** The live themes on in the org, sorted by id. */
|
|
77
|
+
export declare function themesOnIn(db: KernelSchemaDb, orgId: string): Promise<ComponentRow[]>;
|
|
78
|
+
/** The live theme `id` if it can be the platform default, else null. */
|
|
79
|
+
export declare function eligiblePlatformDefault(db: KernelSchemaDb, id: string): Promise<ComponentRow | null>;
|
|
80
|
+
/**
|
|
81
|
+
* 400 `theme.not_available`: theme `id` cannot be chosen where it was set; `orgs`: the live orgs
|
|
82
|
+
* where it is off (a platform default must be on in every org).
|
|
83
|
+
*/
|
|
84
|
+
export declare const themeNotAvailable: (id: string, where: string, orgs?: {
|
|
85
|
+
orgId: string;
|
|
86
|
+
orgName: string;
|
|
87
|
+
}[]) => ApiError;
|
|
88
|
+
/**
|
|
89
|
+
* Locks theme `id`'s catalog item, then its `platform_themes` row, FOR SHARE (the one theme lock
|
|
90
|
+
* order: catalog item, then theme row, then the `uiTheme` setting row; the scope, disable, switch
|
|
91
|
+
* and removal writers hold the item or theme row FOR UPDATE before they read `uiTheme`), so the
|
|
92
|
+
* check that follows reads a state no such writer changes before the caller commits.
|
|
93
|
+
*/
|
|
94
|
+
export declare function lockThemeShared(db: KernelSchemaDb, id: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Refuses (400 `theme.not_available`) a platform default that is not a platform-owned theme with
|
|
97
|
+
* effective scope `all`, live and not disabled, or that is off in some live org (an org switched it
|
|
98
|
+
* off, or does not have the plugin a `follow` theme comes with; details list those orgs): the
|
|
99
|
+
* default is locked on in every org and every org falls back to it (spec §7). Call it in the
|
|
100
|
+
* setting's transaction after {@link lockThemeShared} and the `uiTheme` row lock.
|
|
101
|
+
*/
|
|
102
|
+
export declare function assertPlatformDefaultEligible(db: KernelSchemaDb, id: string): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Refuses (400 `theme.not_available`) an org default that is not on in the org. Call it in the
|
|
105
|
+
* setting's transaction after the org lock: it locks the theme's rows FOR SHARE before reading.
|
|
106
|
+
*/
|
|
107
|
+
export declare function assertThemeOnIn(db: KernelSchemaDb, orgId: string, id: string): Promise<void>;
|
|
108
|
+
/** Whether theme `id` is on in the org (no locks: a read for display). */
|
|
109
|
+
export declare function themeOnIn(db: KernelSchemaDb, orgId: string, id: string): Promise<boolean>;
|
|
110
|
+
/** Whether theme `id` is on in at least one of the person's live orgs. */
|
|
111
|
+
export declare function themeOnForAccount(db: KernelSchemaDb, accountId: string, id: string): Promise<boolean>;
|
|
112
|
+
/**
|
|
113
|
+
* Refuses (400 `theme.not_available`) a person's pick that is on in none of their live orgs (the
|
|
114
|
+
* pick is one value across their orgs, spec §7; where it is off, the org's default applies).
|
|
115
|
+
*/
|
|
116
|
+
export declare function assertThemeOnForAccount(db: KernelSchemaDb, accountId: string, id: string): Promise<void>;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// Which themes an org can use and which can be the platform default (themes spec §7), the theme
|
|
2
|
+
// references the web reads, and the delivery URLs (§8). Plain functions in the caller's context (a
|
|
3
|
+
// transaction's connection when there is one): the settings writers (deployment, org, person) and
|
|
4
|
+
// `ThemesService` decide with the same predicates.
|
|
5
|
+
import { mergeThemeSchemes, } from "@capybara-hq/plugin-sdk";
|
|
6
|
+
import { componentOn, listedIn, loadComponents, loadScopeState, pluginFactsOf, switchOf, } from "../catalog/component-state.js";
|
|
7
|
+
import { ApiError } from "../errors.js";
|
|
8
|
+
import { packagePath } from "../packages/tgz.js";
|
|
9
|
+
/** The schemes in the order they are listed. */
|
|
10
|
+
const SCHEMES = ["dark", "light"];
|
|
11
|
+
/**
|
|
12
|
+
* The render revision of theme stylesheets, a segment of the stylesheet URL (`r<N>/theme.css`).
|
|
13
|
+
* The stylesheet is cached as immutable for a year, keyed by its URL: bump this whenever
|
|
14
|
+
* `renderThemeCss`'s output format changes, so no browser keeps an older format under a URL
|
|
15
|
+
* that now means the new one. The delivery route serves only the current revision (404
|
|
16
|
+
* `theme.not_found` otherwise). History: (none, `<version>/theme.css`) plain rules; 2: one
|
|
17
|
+
* `@layer theme { … }` block (client extensions spec §7.2).
|
|
18
|
+
*/
|
|
19
|
+
export const THEME_CSS_REVISION = 2;
|
|
20
|
+
/**
|
|
21
|
+
* The delivery URL of a theme version (spec §8): its stylesheet (with the render revision,
|
|
22
|
+
* {@link THEME_CSS_REVISION}), or with `asset` (a path inside the
|
|
23
|
+
* plugin as the theme file names it, e.g. `./fonts/MiSans.woff2`) that asset, as one path segment
|
|
24
|
+
* (`assets/fonts%2FMiSans.woff2`; the route decodes it back to the stored path `fonts/MiSans.woff2`).
|
|
25
|
+
* The one builder of these URLs: the listing, the stylesheet and the asset routes all use it.
|
|
26
|
+
*/
|
|
27
|
+
export function themeUrl(id, version, asset) {
|
|
28
|
+
const base = `/api/v1/themes/${encodeURIComponent(id)}/${encodeURIComponent(version)}`;
|
|
29
|
+
return asset === undefined
|
|
30
|
+
? `${base}/r${THEME_CSS_REVISION}/theme.css`
|
|
31
|
+
: `${base}/assets/${encodeURIComponent(packagePath(asset))}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The {@link ThemeRef} of version `version` of theme `id` of plugin `plugin` (null only for a row
|
|
35
|
+
* without provenance: the key is then the file id alone).
|
|
36
|
+
*/
|
|
37
|
+
export function themeRefOf(id, version, def, plugin) {
|
|
38
|
+
const url = (ref) => (ref === undefined ? null : themeUrl(id, version, ref));
|
|
39
|
+
return {
|
|
40
|
+
id,
|
|
41
|
+
key: plugin === null ? def.id : `${plugin}/${def.id}`,
|
|
42
|
+
version,
|
|
43
|
+
name: def.name,
|
|
44
|
+
schemes: SCHEMES.filter((s) => def.schemes[s] !== undefined),
|
|
45
|
+
singleScheme: def.singleScheme,
|
|
46
|
+
logo: def.logo === undefined
|
|
47
|
+
? null
|
|
48
|
+
: {
|
|
49
|
+
markUrl: url(def.logo.mark),
|
|
50
|
+
wordmark: def.logo.wordmark ?? null,
|
|
51
|
+
faviconUrl: url(def.logo.favicon),
|
|
52
|
+
},
|
|
53
|
+
cssUrl: themeUrl(id, version),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The swatches of each scheme the theme defines: its overrides merged onto the current built-in
|
|
58
|
+
* values (a stored definition holds only the theme file's own values, themes spec §6).
|
|
59
|
+
*/
|
|
60
|
+
export function themeSwatches(def) {
|
|
61
|
+
const out = {};
|
|
62
|
+
const merged = mergeThemeSchemes(def);
|
|
63
|
+
for (const s of SCHEMES) {
|
|
64
|
+
const c = merged[s]?.color;
|
|
65
|
+
if (def.schemes[s] === undefined || c === undefined)
|
|
66
|
+
continue;
|
|
67
|
+
out[s] = { bg: c.bg ?? "", panel: c.panel ?? "", ink: c.ink ?? "", accent: c.accent ?? "" };
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
/** The current definitions of live themes `ids`, by id. */
|
|
72
|
+
export async function themeDefinitions(db, ids) {
|
|
73
|
+
const out = new Map();
|
|
74
|
+
if (ids.length === 0)
|
|
75
|
+
return out;
|
|
76
|
+
const rows = await db
|
|
77
|
+
.selectFrom("platform_themes as p")
|
|
78
|
+
.innerJoin("platform_theme_versions as v", (j) => j.onRef("v.theme_id", "=", "p.id").onRef("v.version", "=", "p.current_version"))
|
|
79
|
+
.select(["p.id", "p.current_version", "p.plugin_name", "v.definition"])
|
|
80
|
+
.where("p.id", "in", [...ids])
|
|
81
|
+
.where("p.deleted_at", "is", null)
|
|
82
|
+
.execute();
|
|
83
|
+
for (const r of rows) {
|
|
84
|
+
out.set(r.id, {
|
|
85
|
+
version: String(r.current_version),
|
|
86
|
+
definition: r.definition,
|
|
87
|
+
plugin: r.plugin_name,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/** Whether theme `c` is on in the org (offered in its pickers, spec §6), from `st`. */
|
|
93
|
+
const onIn = (st, c, orgId) => componentOn(c, pluginFactsOf(st, c.itemId, orgId), listedIn(st, c.id, orgId), switchOf(st, c.id, orgId));
|
|
94
|
+
/** The live themes on in the org, sorted by id. */
|
|
95
|
+
export async function themesOnIn(db, orgId) {
|
|
96
|
+
const comps = await loadComponents(db, "theme");
|
|
97
|
+
if (comps.length === 0)
|
|
98
|
+
return [];
|
|
99
|
+
const st = await loadScopeState(db, "theme", comps);
|
|
100
|
+
return comps.filter((c) => onIn(st, c, orgId));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Whether theme `c` can be the platform default (spec §7): platform-owned, not disabled, its
|
|
104
|
+
* plugin live and not disabled, and its effective scope `all` (its own, or its plugin's when it
|
|
105
|
+
* follows; a builtin plugin is `all`).
|
|
106
|
+
*/
|
|
107
|
+
function platformDefaultEligible(st, c) {
|
|
108
|
+
if (c.ownerOrgId !== null || c.disabled)
|
|
109
|
+
return false;
|
|
110
|
+
const p = c.itemId === null ? undefined : st.plugins.get(c.itemId);
|
|
111
|
+
if (c.itemId !== null && (p === undefined || p.disabled))
|
|
112
|
+
return false;
|
|
113
|
+
if (c.scopeMode === "own")
|
|
114
|
+
return c.scope === "all";
|
|
115
|
+
return p !== undefined && (p.builtin || p.scope === "all");
|
|
116
|
+
}
|
|
117
|
+
/** The live theme `id` if it can be the platform default, else null. */
|
|
118
|
+
export async function eligiblePlatformDefault(db, id) {
|
|
119
|
+
const [c] = await loadComponents(db, "theme", { ids: [id] });
|
|
120
|
+
if (!c)
|
|
121
|
+
return null;
|
|
122
|
+
const st = await loadScopeState(db, "theme", [c]);
|
|
123
|
+
return platformDefaultEligible(st, c) ? c : null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 400 `theme.not_available`: theme `id` cannot be chosen where it was set; `orgs`: the live orgs
|
|
127
|
+
* where it is off (a platform default must be on in every org).
|
|
128
|
+
*/
|
|
129
|
+
export const themeNotAvailable = (id, where, orgs) => new ApiError("theme.not_available", orgs === undefined
|
|
130
|
+
? `Theme ${id} is not available ${where}; choose one of the themes listed for it`
|
|
131
|
+
: `Theme ${id} is off in ${orgs.length} organization(s) (${orgs.map((o) => o.orgName).join(", ")}), so it cannot be the platform default; choose a theme that is on in every organization`, [{ theme: id, ...(orgs !== undefined && { orgs }) }]);
|
|
132
|
+
/**
|
|
133
|
+
* Locks theme `id`'s catalog item, then its `platform_themes` row, FOR SHARE (the one theme lock
|
|
134
|
+
* order: catalog item, then theme row, then the `uiTheme` setting row; the scope, disable, switch
|
|
135
|
+
* and removal writers hold the item or theme row FOR UPDATE before they read `uiTheme`), so the
|
|
136
|
+
* check that follows reads a state no such writer changes before the caller commits.
|
|
137
|
+
*/
|
|
138
|
+
export async function lockThemeShared(db, id) {
|
|
139
|
+
const row = await db
|
|
140
|
+
.selectFrom("platform_themes")
|
|
141
|
+
.select("catalog_item_id")
|
|
142
|
+
.where("id", "=", id)
|
|
143
|
+
.executeTakeFirst();
|
|
144
|
+
if (!row)
|
|
145
|
+
return;
|
|
146
|
+
if (row.catalog_item_id !== null) {
|
|
147
|
+
await db
|
|
148
|
+
.selectFrom("catalog_items")
|
|
149
|
+
.select("id")
|
|
150
|
+
.where("id", "=", row.catalog_item_id)
|
|
151
|
+
.forShare()
|
|
152
|
+
.execute();
|
|
153
|
+
}
|
|
154
|
+
await db.selectFrom("platform_themes").select("id").where("id", "=", id).forShare().execute();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Refuses (400 `theme.not_available`) a platform default that is not a platform-owned theme with
|
|
158
|
+
* effective scope `all`, live and not disabled, or that is off in some live org (an org switched it
|
|
159
|
+
* off, or does not have the plugin a `follow` theme comes with; details list those orgs): the
|
|
160
|
+
* default is locked on in every org and every org falls back to it (spec §7). Call it in the
|
|
161
|
+
* setting's transaction after {@link lockThemeShared} and the `uiTheme` row lock.
|
|
162
|
+
*/
|
|
163
|
+
export async function assertPlatformDefaultEligible(db, id) {
|
|
164
|
+
const [c] = await loadComponents(db, "theme", { ids: [id] });
|
|
165
|
+
const st = c && (await loadScopeState(db, "theme", [c]));
|
|
166
|
+
if (!c || !st || !platformDefaultEligible(st, c)) {
|
|
167
|
+
throw themeNotAvailable(id, "as the platform default (a platform theme whose scope is all)");
|
|
168
|
+
}
|
|
169
|
+
const orgs = await db
|
|
170
|
+
.selectFrom("orgs")
|
|
171
|
+
.select(["id", "name"])
|
|
172
|
+
.where("deleted_at", "is", null)
|
|
173
|
+
.orderBy("name")
|
|
174
|
+
.orderBy("id")
|
|
175
|
+
.execute();
|
|
176
|
+
const off = orgs.filter((o) => !onIn(st, c, o.id)).map((o) => ({ orgId: o.id, orgName: o.name }));
|
|
177
|
+
if (off.length > 0)
|
|
178
|
+
throw themeNotAvailable(id, "as the platform default", off);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Refuses (400 `theme.not_available`) an org default that is not on in the org. Call it in the
|
|
182
|
+
* setting's transaction after the org lock: it locks the theme's rows FOR SHARE before reading.
|
|
183
|
+
*/
|
|
184
|
+
export async function assertThemeOnIn(db, orgId, id) {
|
|
185
|
+
await lockThemeShared(db, id);
|
|
186
|
+
const [c] = await loadComponents(db, "theme", { ids: [id] });
|
|
187
|
+
const st = c && (await loadScopeState(db, "theme", [c]));
|
|
188
|
+
if (!c || !st || !onIn(st, c, orgId))
|
|
189
|
+
throw themeNotAvailable(id, "in this organization");
|
|
190
|
+
}
|
|
191
|
+
/** Whether theme `id` is on in the org (no locks: a read for display). */
|
|
192
|
+
export async function themeOnIn(db, orgId, id) {
|
|
193
|
+
const [c] = await loadComponents(db, "theme", { ids: [id] });
|
|
194
|
+
if (!c)
|
|
195
|
+
return false;
|
|
196
|
+
return onIn(await loadScopeState(db, "theme", [c]), c, orgId);
|
|
197
|
+
}
|
|
198
|
+
/** Whether theme `id` is on in at least one of the person's live orgs. */
|
|
199
|
+
export async function themeOnForAccount(db, accountId, id) {
|
|
200
|
+
const orgs = await db
|
|
201
|
+
.selectFrom("memberships as m")
|
|
202
|
+
.innerJoin("orgs as o", "o.id", "m.org_id")
|
|
203
|
+
.select("m.org_id")
|
|
204
|
+
.where("m.account_id", "=", accountId)
|
|
205
|
+
.where("o.deleted_at", "is", null)
|
|
206
|
+
.execute();
|
|
207
|
+
const [c] = await loadComponents(db, "theme", { ids: [id] });
|
|
208
|
+
if (!c || orgs.length === 0)
|
|
209
|
+
return false;
|
|
210
|
+
const st = await loadScopeState(db, "theme", [c]);
|
|
211
|
+
return orgs.some((o) => onIn(st, c, o.org_id));
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Refuses (400 `theme.not_available`) a person's pick that is on in none of their live orgs (the
|
|
215
|
+
* pick is one value across their orgs, spec §7; where it is off, the org's default applies).
|
|
216
|
+
*/
|
|
217
|
+
export async function assertThemeOnForAccount(db, accountId, id) {
|
|
218
|
+
if (!(await themeOnForAccount(db, accountId, id))) {
|
|
219
|
+
throw themeNotAvailable(id, "in any of your organizations");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
2
|
+
import { ApiError } from "../errors.js";
|
|
3
|
+
/** Where a theme is chosen (spec §7). */
|
|
4
|
+
export interface ThemeUsage {
|
|
5
|
+
/** It is the platform default (`uiTheme.id`). */
|
|
6
|
+
platformDefault: boolean;
|
|
7
|
+
/** The live orgs whose default it is, by name. */
|
|
8
|
+
orgDefaults: {
|
|
9
|
+
orgId: string;
|
|
10
|
+
orgName: string;
|
|
11
|
+
}[];
|
|
12
|
+
/** The accounts that picked it (`accounts.theme`). */
|
|
13
|
+
pickedBy: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* One theme a change takes away from some orgs, as a preview lists it (`themes?` of the scope,
|
|
17
|
+
* disable, uninstall and update previews): the orgs among those losing it whose default it is, and
|
|
18
|
+
* the number of people who picked it among those orgs' members (a preview never counts people of
|
|
19
|
+
* orgs it does not name).
|
|
20
|
+
*/
|
|
21
|
+
export interface ThemePreview {
|
|
22
|
+
id: string;
|
|
23
|
+
orgDefaults: {
|
|
24
|
+
orgId: string;
|
|
25
|
+
orgName: string;
|
|
26
|
+
}[];
|
|
27
|
+
pickedBy: number;
|
|
28
|
+
}
|
|
29
|
+
/** What a theme's availability is after a change: still `all`, narrower, or gone. */
|
|
30
|
+
export type ThemeAfter = "all" | "narrower" | "gone";
|
|
31
|
+
/**
|
|
32
|
+
* The platform default theme's id (null: the built-in theme, or not set), through the setting's
|
|
33
|
+
* typed reader; `lock`: the row is read FOR SHARE, so a concurrent write of the setting (which
|
|
34
|
+
* locks it FOR UPDATE first, see `SettingsService`) waits for the caller's transaction, and the
|
|
35
|
+
* reverse.
|
|
36
|
+
*/
|
|
37
|
+
export declare function platformDefaultThemeId(db: KernelSchemaDb, opts?: {
|
|
38
|
+
lock?: boolean;
|
|
39
|
+
}): Promise<string | null>;
|
|
40
|
+
/** Where theme `themeId` (a `platform_themes` id) is chosen: see {@link ThemeUsage}. */
|
|
41
|
+
export declare function themeUsage(db: KernelSchemaDb, themeId: string): Promise<ThemeUsage>;
|
|
42
|
+
/**
|
|
43
|
+
* The `themes` block of a preview: for each theme of `lost` (theme id -> the orgs losing it) that
|
|
44
|
+
* some org loses, the orgs among those whose default it is and how many of their members picked
|
|
45
|
+
* it, by id.
|
|
46
|
+
* Undefined when no theme is lost, so a preview without themes keeps its shape and its hash.
|
|
47
|
+
*/
|
|
48
|
+
export declare function themesPreview(db: KernelSchemaDb, lost: ReadonlyMap<string, ReadonlySet<string>>): Promise<ThemePreview[] | undefined>;
|
|
49
|
+
/** How many members of `orgs` (each counted once) picked theme `id`. */
|
|
50
|
+
export declare function pickedByIn(db: KernelSchemaDb, id: string, orgs: ReadonlySet<string>): Promise<number>;
|
|
51
|
+
/** 409 `theme.platform_default`: theme `theme` is the platform default (spec §7). */
|
|
52
|
+
export declare const platformDefaultError: (theme: string) => ApiError;
|
|
53
|
+
/**
|
|
54
|
+
* Refuses a change that takes the platform default theme away from any org (spec §7): when one of
|
|
55
|
+
* `themeIds` is the platform default and `after` says it would no longer be `all` (narrower, or
|
|
56
|
+
* gone), 409 `theme.platform_default`. Call it in the change's transaction before anything is
|
|
57
|
+
* written, after locking the catalog item or theme rows the change touches (the one theme lock
|
|
58
|
+
* order: catalog item, theme row, then the `uiTheme` row, which this reads FOR SHARE; the setting's
|
|
59
|
+
* write takes them in the same order).
|
|
60
|
+
*/
|
|
61
|
+
export declare function assertNotPlatformDefault(db: KernelSchemaDb, themeIds: readonly string[], after: (id: string) => ThemeAfter): Promise<void>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Who uses a theme (themes spec §6 "Losing access", §7): the platform default (`deployment_settings`
|
|
2
|
+
// key `uiTheme`), the orgs whose default it is (`orgs.settings.theme.id`) and the people who picked
|
|
3
|
+
// it (`accounts.theme`); the previews of changes that take a theme away list them, and the guard
|
|
4
|
+
// refuses any change that takes the platform default away from an org. Plain reads in the caller's
|
|
5
|
+
// context (a transaction's connection when there is one). The settings are read through the same
|
|
6
|
+
// readers and schemas as their services (`readUiTheme`, `parseOrgSettings`), so the two never drift.
|
|
7
|
+
import { sql } from "kysely";
|
|
8
|
+
import { ApiError } from "../errors.js";
|
|
9
|
+
import { readUiTheme, UI_THEME_SETTING } from "../identity/settings.js";
|
|
10
|
+
import { parseOrgSettings } from "../orgs/settings.service.js";
|
|
11
|
+
/**
|
|
12
|
+
* The platform default theme's id (null: the built-in theme, or not set), through the setting's
|
|
13
|
+
* typed reader; `lock`: the row is read FOR SHARE, so a concurrent write of the setting (which
|
|
14
|
+
* locks it FOR UPDATE first, see `SettingsService`) waits for the caller's transaction, and the
|
|
15
|
+
* reverse.
|
|
16
|
+
*/
|
|
17
|
+
export async function platformDefaultThemeId(db, opts = {}) {
|
|
18
|
+
return (await readUiTheme(db, opts)).id;
|
|
19
|
+
}
|
|
20
|
+
/** Where theme `themeId` (a `platform_themes` id) is chosen: see {@link ThemeUsage}. */
|
|
21
|
+
export async function themeUsage(db, themeId) {
|
|
22
|
+
const platformDefault = (await platformDefaultThemeId(db)) === themeId;
|
|
23
|
+
// the jsonb filter narrows the rows; the typed parse decides (an invalid stored value is no default)
|
|
24
|
+
const orgs = (await db
|
|
25
|
+
.selectFrom("orgs")
|
|
26
|
+
.select(["id", "name", "settings"])
|
|
27
|
+
.where("deleted_at", "is", null)
|
|
28
|
+
.where(sql `settings -> 'theme' ->> 'id'`, "=", themeId)
|
|
29
|
+
.orderBy("name")
|
|
30
|
+
.orderBy("id")
|
|
31
|
+
.execute()).filter((o) => parseOrgSettings(o.settings).theme?.id === themeId);
|
|
32
|
+
const picked = await db
|
|
33
|
+
.selectFrom("accounts")
|
|
34
|
+
.select((eb) => eb.fn.countAll().as("n"))
|
|
35
|
+
.where("theme", "=", themeId)
|
|
36
|
+
.executeTakeFirstOrThrow();
|
|
37
|
+
return {
|
|
38
|
+
platformDefault,
|
|
39
|
+
orgDefaults: orgs.map((o) => ({ orgId: o.id, orgName: o.name })),
|
|
40
|
+
pickedBy: Number(picked.n),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The `themes` block of a preview: for each theme of `lost` (theme id -> the orgs losing it) that
|
|
45
|
+
* some org loses, the orgs among those whose default it is and how many of their members picked
|
|
46
|
+
* it, by id.
|
|
47
|
+
* Undefined when no theme is lost, so a preview without themes keeps its shape and its hash.
|
|
48
|
+
*/
|
|
49
|
+
export async function themesPreview(db, lost) {
|
|
50
|
+
const out = [];
|
|
51
|
+
for (const id of [...lost.keys()].sort()) {
|
|
52
|
+
const orgs = lost.get(id);
|
|
53
|
+
if (!orgs || orgs.size === 0)
|
|
54
|
+
continue;
|
|
55
|
+
const u = await themeUsage(db, id);
|
|
56
|
+
out.push({
|
|
57
|
+
id,
|
|
58
|
+
orgDefaults: u.orgDefaults.filter((o) => orgs.has(o.orgId)),
|
|
59
|
+
pickedBy: await pickedByIn(db, id, orgs),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return out.length > 0 ? out : undefined;
|
|
63
|
+
}
|
|
64
|
+
/** How many members of `orgs` (each counted once) picked theme `id`. */
|
|
65
|
+
export async function pickedByIn(db, id, orgs) {
|
|
66
|
+
if (orgs.size === 0)
|
|
67
|
+
return 0;
|
|
68
|
+
const picked = await db
|
|
69
|
+
.selectFrom("accounts as a")
|
|
70
|
+
.select((eb) => eb.fn.count("a.id").distinct().as("n"))
|
|
71
|
+
.where("a.theme", "=", id)
|
|
72
|
+
.where((eb) => eb.exists(eb
|
|
73
|
+
.selectFrom("memberships as m")
|
|
74
|
+
.select("m.account_id")
|
|
75
|
+
.whereRef("m.account_id", "=", "a.id")
|
|
76
|
+
.where("m.org_id", "in", [...orgs])))
|
|
77
|
+
.executeTakeFirstOrThrow();
|
|
78
|
+
return Number(picked.n);
|
|
79
|
+
}
|
|
80
|
+
/** 409 `theme.platform_default`: theme `theme` is the platform default (spec §7). */
|
|
81
|
+
export const platformDefaultError = (theme) => new ApiError("theme.platform_default", `Theme ${theme} is the platform default theme (setting ${UI_THEME_SETTING}): it must stay on in every organization. Choose another platform default theme first, then narrow, disable or remove this one`, [{ theme, setting: UI_THEME_SETTING }]);
|
|
82
|
+
/**
|
|
83
|
+
* Refuses a change that takes the platform default theme away from any org (spec §7): when one of
|
|
84
|
+
* `themeIds` is the platform default and `after` says it would no longer be `all` (narrower, or
|
|
85
|
+
* gone), 409 `theme.platform_default`. Call it in the change's transaction before anything is
|
|
86
|
+
* written, after locking the catalog item or theme rows the change touches (the one theme lock
|
|
87
|
+
* order: catalog item, theme row, then the `uiTheme` row, which this reads FOR SHARE; the setting's
|
|
88
|
+
* write takes them in the same order).
|
|
89
|
+
*/
|
|
90
|
+
export async function assertNotPlatformDefault(db, themeIds, after) {
|
|
91
|
+
if (themeIds.length === 0)
|
|
92
|
+
return;
|
|
93
|
+
const id = await platformDefaultThemeId(db, { lock: true });
|
|
94
|
+
if (id === null || !themeIds.includes(id))
|
|
95
|
+
return;
|
|
96
|
+
if (after(id) !== "all")
|
|
97
|
+
throw platformDefaultError(id);
|
|
98
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { FastifyReply } from "fastify";
|
|
2
|
+
import { ThemeDeliveryService } from "./theme-delivery.service.js";
|
|
3
|
+
import type { ThemeRef } from "./theme-state.js";
|
|
4
|
+
import { ThemesService } from "./themes.service.js";
|
|
5
|
+
/**
|
|
6
|
+
* Theme delivery (themes spec §8): every theme version's stylesheet and assets, public (styles are
|
|
7
|
+
* not sensitive; the URLs reveal only that the theme exists) and immutable. The URLs are the ones
|
|
8
|
+
* `themeUrl` builds; an unknown theme, version or file is 404 `theme.not_found`.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ThemeDeliveryController {
|
|
11
|
+
private readonly delivery;
|
|
12
|
+
constructor(delivery: ThemeDeliveryService);
|
|
13
|
+
/**
|
|
14
|
+
* The version's stylesheet: scheme overrides, `@font-face` rules and font stacks, in the render
|
|
15
|
+
* revision `revision` (`r<THEME_CSS_REVISION>`; only the current one is served). The URL without
|
|
16
|
+
* a revision (before revision 2) has no route: 404, so a browser's cached unlayered copy is never
|
|
17
|
+
* answered with the new format under an immutable cache.
|
|
18
|
+
*/
|
|
19
|
+
css(id: string, version: string, revision: string, reply: FastifyReply): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* A font (`font/woff2`) or logo (`image/svg+xml`, sanitized at import, served under a CSP
|
|
22
|
+
* sandbox; `image/png`) the version names; `file` is its plugin path as one segment
|
|
23
|
+
* (`fonts%2FMiSans.woff2`).
|
|
24
|
+
*/
|
|
25
|
+
asset(id: string, version: string, file: string, reply: FastifyReply): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/** The platform default theme for pages before sign-in (themes spec §8-§9), public. */
|
|
28
|
+
export declare class PlatformThemeController {
|
|
29
|
+
private readonly themes;
|
|
30
|
+
constructor(themes: ThemesService);
|
|
31
|
+
/** The platform default's reference while it is eligible; null: the built-in theme. */
|
|
32
|
+
platformTheme(): Promise<ThemeRef | null>;
|
|
33
|
+
}
|