@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.10
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 +92 -8
- package/dist/admin/admin.controller.d.ts +52 -71
- package/dist/admin/admin.controller.js +117 -63
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/admin.schemas.d.ts +57 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +47 -16
- package/dist/admin/extensions.controller.js +94 -23
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +9 -9
- package/dist/admin/setup.controller.js +28 -26
- package/dist/admin/setup.service.d.ts +20 -28
- package/dist/admin/setup.service.js +65 -65
- package/dist/agents/agent-lookup.d.ts +72 -0
- package/dist/agents/agent-lookup.js +208 -0
- 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 +54 -169
- package/dist/agents/agents.controller.js +172 -37
- package/dist/agents/agents.module.d.ts +10 -0
- package/dist/agents/agents.module.js +71 -0
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +104 -76
- package/dist/agents/agents.service.js +509 -383
- package/dist/agents/definition.d.ts +133 -21
- package/dist/agents/definition.js +361 -41
- 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 +868 -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 +78 -6
- package/dist/agents/templates.controller.js +154 -8
- package/dist/agents/templates.d.ts +132 -30
- package/dist/agents/templates.js +500 -46
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -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 +77 -0
- package/dist/background/tasks.service.js +216 -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 +102 -52
- package/dist/catalog/admin-catalog.controller.js +222 -67
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +232 -0
- package/dist/catalog/catalog-content.js +367 -0
- package/dist/catalog/catalog-files.d.ts +41 -0
- package/dist/catalog/catalog-files.js +86 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +290 -0
- package/dist/catalog/catalog-items.js +676 -0
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1124 -0
- package/dist/catalog/catalog.module.d.ts +12 -0
- package/dist/catalog/catalog.module.js +81 -0
- package/dist/catalog/catalog.service.d.ts +141 -206
- package/dist/catalog/catalog.service.js +237 -528
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/cli.d.ts +14 -3
- package/dist/catalog/cli.js +39 -32
- 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 +90 -0
- package/dist/catalog/component-scope.controller.js +234 -0
- package/dist/catalog/component-scope.schemas.d.ts +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +327 -0
- package/dist/catalog/component-scope.service.js +990 -0
- package/dist/catalog/component-state.d.ts +188 -0
- package/dist/catalog/component-state.js +455 -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 +45 -0
- package/dist/catalog/job-ids.js +40 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -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 +53 -44
- package/dist/catalog/marketplaces.controller.js +146 -51
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +136 -26
- package/dist/catalog/marketplaces.service.js +663 -281
- package/dist/catalog/org-catalog.controller.d.ts +115 -63
- package/dist/catalog/org-catalog.controller.js +207 -100
- package/dist/catalog/org-catalog.schemas.d.ts +88 -0
- package/dist/catalog/org-catalog.schemas.js +93 -0
- package/dist/catalog/org-catalog.service.d.ts +89 -216
- package/dist/catalog/org-catalog.service.js +431 -472
- 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 +113 -0
- package/dist/catalog/org-extension.controller.js +271 -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 +801 -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 +223 -0
- package/dist/catalog/platform-components.js +763 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +270 -68
- package/dist/catalog/plugin-import.js +1004 -277
- package/dist/catalog/plugin-install.d.ts +251 -65
- package/dist/catalog/plugin-install.js +1128 -344
- package/dist/catalog/plugin-package.js +14 -1
- package/dist/catalog/plugin-upgrade.d.ts +301 -188
- package/dist/catalog/plugin-upgrade.js +1256 -1068
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +205 -117
- package/dist/catalog/requests.service.js +612 -369
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +11 -4
- package/dist/channels/cards.d.ts +33 -11
- package/dist/channels/cards.js +96 -24
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +130 -0
- package/dist/channels/channels.schemas.d.ts +37 -0
- package/dist/channels/channels.schemas.js +38 -0
- package/dist/channels/connections.controller.d.ts +44 -37
- package/dist/channels/connections.controller.js +83 -38
- package/dist/channels/connections.service.d.ts +101 -30
- package/dist/channels/connections.service.js +380 -147
- package/dist/channels/inbound.d.ts +44 -38
- package/dist/channels/inbound.js +190 -44
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +71 -80
- package/dist/channels/outbound.js +219 -201
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +34 -8
- package/dist/channels/threads.js +79 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/docs.js +5 -1
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +51 -3
- package/dist/config/schema.js +269 -27
- package/dist/conversations/access.d.ts +31 -0
- package/dist/conversations/access.js +110 -0
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +60 -22
- package/dist/conversations/attachments.service.js +249 -51
- package/dist/conversations/conversations.controller.d.ts +86 -50
- package/dist/conversations/conversations.controller.js +184 -103
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +72 -0
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +166 -49
- package/dist/conversations/conversations.service.js +383 -179
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +64 -27
- package/dist/conversations/event-log.js +167 -31
- package/dist/conversations/events.d.ts +252 -9
- package/dist/conversations/events.js +243 -32
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +53 -58
- package/dist/conversations/queue.js +37 -293
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +350 -0
- package/dist/conversations/titles.d.ts +83 -27
- package/dist/conversations/titles.js +195 -70
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +26 -1
- package/dist/ctx/create-ctx.js +45 -16
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +550 -25
- package/dist/db/pool.d.ts +10 -0
- package/dist/db/pool.js +4 -0
- package/dist/devices/device-auth.controller.d.ts +42 -0
- package/dist/devices/device-auth.controller.js +116 -0
- package/dist/devices/device-auth.d.ts +119 -0
- package/dist/devices/device-auth.js +403 -0
- package/dist/devices/device-auth.module.d.ts +7 -0
- package/dist/devices/device-auth.module.js +25 -0
- package/dist/devices/device-gateway.d.ts +128 -0
- package/dist/devices/device-gateway.js +530 -0
- package/dist/devices/device-provider.d.ts +89 -0
- package/dist/devices/device-provider.js +151 -0
- package/dist/devices/device-routes.d.ts +36 -0
- package/dist/devices/device-routes.js +90 -0
- package/dist/devices/devices.module.d.ts +16 -0
- package/dist/devices/devices.module.js +44 -0
- package/dist/devices/dto.d.ts +66 -0
- package/dist/devices/dto.js +44 -0
- package/dist/devices/keys.d.ts +25 -0
- package/dist/devices/keys.js +25 -0
- package/dist/devices/machines.d.ts +118 -0
- package/dist/devices/machines.js +366 -0
- package/dist/devices/relay.d.ts +100 -0
- package/dist/devices/relay.js +373 -0
- package/dist/devices/targets.d.ts +28 -0
- package/dist/devices/targets.js +73 -0
- package/dist/environments/access.d.ts +66 -0
- package/dist/environments/access.js +113 -0
- package/dist/environments/conversation-environments.d.ts +75 -0
- package/dist/environments/conversation-environments.js +231 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +36 -0
- package/dist/environments/environments.controller.js +124 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +31 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +251 -0
- package/dist/environments/environments.service.js +791 -0
- package/dist/environments/label.d.ts +11 -0
- package/dist/environments/label.js +25 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +136 -2
- package/dist/errors.js +136 -2
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -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 +75 -10
- package/dist/evals/run-replay.js +218 -94
- package/dist/evals/runs.controller.d.ts +3 -58
- package/dist/evals/runs.controller.js +18 -50
- package/dist/evals/runs.service.d.ts +31 -52
- package/dist/evals/runs.service.js +281 -255
- package/dist/evals/sets.controller.d.ts +3 -29
- package/dist/evals/sets.controller.js +18 -39
- package/dist/evals/sets.service.d.ts +29 -13
- package/dist/evals/sets.service.js +262 -202
- package/dist/evals/snapshot.d.ts +5 -4
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +6 -8
- package/dist/evals/step-replay.js +17 -10
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +13 -7
- package/dist/evals/trajectory.service.js +56 -21
- package/dist/evals/worker.d.ts +48 -31
- package/dist/evals/worker.js +229 -123
- package/dist/extensions/admin-ops.d.ts +133 -41
- package/dist/extensions/admin-ops.js +378 -172
- package/dist/extensions/admin-view.d.ts +82 -32
- package/dist/extensions/admin-view.js +284 -71
- package/dist/extensions/approvals.d.ts +24 -10
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +112 -45
- package/dist/extensions/bootstrap.d.ts +136 -46
- package/dist/extensions/bootstrap.js +417 -167
- package/dist/extensions/cli.d.ts +32 -10
- package/dist/extensions/cli.js +52 -98
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +19 -0
- package/dist/extensions/config-issues.js +48 -0
- 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 +55 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +146 -70
- package/dist/extensions/deployment-config.js +439 -246
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +96 -0
- package/dist/extensions/hooks.d.ts +40 -6
- package/dist/extensions/hooks.js +83 -17
- package/dist/extensions/host.d.ts +161 -80
- package/dist/extensions/host.js +505 -213
- package/dist/extensions/installs.d.ts +73 -19
- package/dist/extensions/installs.js +174 -37
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +45 -0
- package/dist/extensions/locks.js +112 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.d.ts +141 -49
- package/dist/extensions/org-config.js +471 -243
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +59 -6
- package/dist/extensions/permission-view.js +7 -5
- package/dist/extensions/plugin-guides.d.ts +129 -0
- package/dist/extensions/plugin-guides.js +283 -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 +50 -2
- package/dist/extensions/registry.js +91 -4
- 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 +19 -10
- package/dist/extensions/sources.js +34 -13
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +19 -12
- package/dist/files/previewers.d.ts +21 -19
- package/dist/files/previewers.js +114 -38
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +86 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +83 -52
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +7 -3
- package/dist/http/gateway-routes.js +16 -0
- 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 +130 -38
- package/dist/identity/accounts.js +373 -186
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +9 -5
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +40 -30
- package/dist/identity/auth.guard.d.ts +16 -8
- package/dist/identity/auth.guard.js +41 -13
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +59 -0
- 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 +32 -15
- package/dist/identity/me.controller.js +78 -33
- package/dist/identity/me.schemas.d.ts +14 -0
- package/dist/identity/me.schemas.js +17 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +24 -10
- package/dist/identity/sessions.js +119 -42
- package/dist/identity/settings.d.ts +42 -23
- package/dist/identity/settings.js +137 -72
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/identity/super-admin.d.ts +20 -0
- package/dist/identity/super-admin.js +81 -0
- package/dist/inbox/inbox.module.d.ts +6 -0
- package/dist/inbox/inbox.module.js +26 -0
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +68 -11
- package/dist/inbox/inbox.service.js +104 -13
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +25 -14
- package/dist/index.js +20 -9
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +173 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +157 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +91 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +121 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +90 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +18 -0
- package/dist/infra/logging/logging.module.js +52 -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/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +13 -0
- package/dist/infra/queue/redis-connection.js +25 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +91 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +36 -0
- package/dist/infra/throttler/named-throttlers.js +157 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +20 -0
- package/dist/infra/tokens.js +20 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +145 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +465 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +53 -10
- package/dist/log.js +168 -18
- 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 +7 -0
- package/dist/models/models.module.js +36 -0
- 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 +13 -5
- package/dist/models/prices.js +69 -39
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +16 -11
- package/dist/models/purposes.d.ts +103 -23
- package/dist/models/purposes.js +208 -77
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +74 -35
- package/dist/orgs/directory-sync.js +243 -132
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +61 -60
- package/dist/orgs/offboarding.js +206 -95
- package/dist/orgs/org-lock.d.ts +33 -19
- package/dist/orgs/org-lock.js +94 -35
- package/dist/orgs/org.guard.d.ts +11 -1
- package/dist/orgs/org.guard.js +45 -34
- package/dist/orgs/orgs.controller.d.ts +13 -16
- package/dist/orgs/orgs.controller.js +29 -20
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +71 -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 +47 -21
- package/dist/orgs/orgs.service.js +166 -91
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +2 -2
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +45 -14
- package/dist/orgs/settings.service.js +110 -51
- package/dist/overrides.d.ts +63 -0
- package/dist/overrides.js +34 -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 +667 -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 +90 -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.ops.d.ts +36 -0
- package/dist/platform/ops/admin.ops.js +389 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -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 +717 -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 +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +599 -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 +853 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +188 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.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 +378 -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 +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -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 +28 -0
- package/dist/platform/ops/platform.ops.js +204 -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/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +216 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -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 +39 -0
- package/dist/platform/platform-ops.module.js +122 -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 +63 -0
- package/dist/roles/gateway-role.d.ts +54 -0
- package/dist/roles/gateway-role.js +118 -0
- package/dist/roles/gateway.module.d.ts +9 -0
- package/dist/roles/gateway.module.js +31 -0
- package/dist/roles/worker-role.d.ts +65 -0
- package/dist/roles/worker-role.js +151 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +106 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- 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/environment-paths.d.ts +40 -0
- package/dist/runtime/context/environment-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/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +11 -4
- package/dist/runtime/hook-calls.js +41 -13
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +37 -18
- package/dist/runtime/loop.d.ts +42 -6
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +50 -74
- package/dist/runtime/maintenance.js +166 -136
- package/dist/runtime/model-call.d.ts +61 -15
- package/dist/runtime/model-call.js +128 -84
- package/dist/runtime/providers.d.ts +158 -27
- package/dist/runtime/providers.js +373 -63
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- 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 +43 -0
- package/dist/runtime/run-control.js +89 -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 +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +46 -0
- package/dist/runtime/run-jobs.js +91 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +90 -58
- package/dist/runtime/run-queue.js +566 -297
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +134 -77
- package/dist/runtime/run-worker.js +412 -236
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +122 -0
- package/dist/runtime/step-log.d.ts +51 -0
- package/dist/runtime/step-log.js +111 -0
- package/dist/runtime/stream.controller.d.ts +28 -9
- package/dist/runtime/stream.controller.js +72 -13
- package/dist/runtime/stream.d.ts +27 -6
- package/dist/runtime/stream.js +102 -7
- package/dist/runtime/subagents/child.d.ts +58 -51
- package/dist/runtime/subagents/child.js +105 -86
- package/dist/runtime/subagents/definition.d.ts +32 -28
- package/dist/runtime/subagents/definition.js +89 -143
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +197 -27
- package/dist/runtime/subagents/dispatch.js +336 -270
- package/dist/runtime/subagents/limits.d.ts +32 -8
- package/dist/runtime/subagents/limits.js +44 -8
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +10 -8
- 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 +27 -10
- package/dist/runtime/subagents/roster.js +49 -13
- package/dist/runtime/subagents/skill-fork.d.ts +10 -10
- package/dist/runtime/subagents/skill-fork.js +23 -8
- 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 +43 -0
- package/dist/runtime/subagents/subagents.service.js +106 -0
- 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 +121 -83
- package/dist/runtime/usage-report.js +355 -180
- package/dist/runtime/waits.d.ts +258 -81
- package/dist/runtime/waits.js +800 -263
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +68 -0
- package/dist/sandbox/jobs.js +150 -0
- package/dist/sandbox/leases.d.ts +73 -82
- package/dist/sandbox/leases.js +162 -346
- package/dist/sandbox/providers.d.ts +46 -0
- package/dist/sandbox/providers.js +83 -0
- package/dist/sandbox/sandbox.module.d.ts +9 -0
- package/dist/sandbox/sandbox.module.js +36 -0
- package/dist/sandbox/sandbox.service.d.ts +359 -151
- package/dist/sandbox/sandbox.service.js +950 -435
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/skills/catalog.d.ts +40 -26
- package/dist/skills/catalog.js +120 -99
- package/dist/skills/changes.controller.d.ts +11 -4
- package/dist/skills/changes.controller.js +34 -9
- package/dist/skills/changes.service.d.ts +31 -21
- package/dist/skills/changes.service.js +426 -368
- package/dist/skills/invocable.controller.d.ts +2 -2
- package/dist/skills/invocable.controller.js +10 -7
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +19 -18
- package/dist/skills/invoke.js +68 -24
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +33 -7
- package/dist/skills/skills.controller.js +79 -12
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +39 -0
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +151 -44
- package/dist/skills/skills.service.js +636 -204
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +14 -11
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +53 -27
- package/dist/tools/approvals.service.js +365 -260
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +109 -0
- package/dist/tools/builtin-names.js +173 -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 +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +41 -0
- package/dist/tools/builtins/builtin-tools.js +151 -0
- 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 +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +293 -41
- package/dist/tools/builtins/sandbox/common.d.ts +142 -40
- package/dist/tools/builtins/sandbox/common.js +227 -65
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +21 -18
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +65 -51
- 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 +19 -14
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +155 -36
- 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 +30 -20
- 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 +52 -45
- 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 +32 -21
- package/dist/tools/builtins/skill-load.js +125 -74
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +12 -12
- 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/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +16 -3
- package/dist/tools/connectors.controller.js +34 -14
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +80 -18
- package/dist/tools/connectors.service.js +529 -358
- package/dist/tools/credentials.d.ts +20 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- 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 +73 -13
- package/dist/tools/info.js +151 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- 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 +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +45 -10
- package/dist/tools/oauth/tokens.js +70 -24
- package/dist/tools/org-tool-switches.d.ts +88 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +108 -80
- package/dist/tools/pipeline.js +396 -409
- package/dist/tools/policy.d.ts +4 -17
- package/dist/tools/policy.js +49 -35
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +215 -84
- package/dist/tools/registry.js +382 -264
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +113 -0
- package/dist/tools/validate.js +1 -1
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +10 -57
- package/dist/ui/views.js +58 -46
- package/package.json +15 -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/dist/catalog/upgrade-targets.d.ts +0 -59
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -21
- package/dist/conversations/sandbox-status.js +0 -24
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -59
- package/dist/http/gateway.module.js +0 -13
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/enterprise-admin.d.ts +0 -14
- package/dist/identity/enterprise-admin.js +0 -27
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
|
@@ -1,39 +1,64 @@
|
|
|
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
|
+
};
|
|
1
10
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
11
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
3
12
|
import { join } from "node:path";
|
|
4
13
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import {
|
|
14
|
+
import { parseBootstrapManifest, SDK_VERSION, } from "@capybara-hq/plugin-sdk";
|
|
15
|
+
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
6
16
|
import { sql } from "kysely";
|
|
7
|
-
import pg from "pg";
|
|
8
17
|
import semver from "semver";
|
|
18
|
+
import { otherNameOwner } from "../catalog/ownership.js";
|
|
9
19
|
import { catalogPackageError } from "../catalog/plugin-import.js";
|
|
10
20
|
import { PluginPackageError, readPluginPackage } from "../catalog/plugin-package.js";
|
|
11
|
-
import { pgConnectOptions } from "../db/pool.js";
|
|
12
21
|
import { ApiError } from "../errors.js";
|
|
13
22
|
import { audit } from "../identity/audit.js";
|
|
23
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
24
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
25
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
26
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
27
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
28
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
29
|
+
import { fetchNpmPackage, IntegrityMismatchError, NpmFetchError, PackageTooLargeError, } from "../packages/npm.js";
|
|
30
|
+
import { ExtensionAdminOps } from "./admin-ops.js";
|
|
14
31
|
import { writeSnapshot } from "./approvals.js";
|
|
32
|
+
import { ExtensionInstalls } from "./installs.js";
|
|
33
|
+
import { PluginApproveLock } from "./locks.js";
|
|
15
34
|
import { ExtensionPackageError, permissionSetOfPackage, readExtensionPackage } from "./package.js";
|
|
16
35
|
import { diffPermissions } from "./permission-set.js";
|
|
36
|
+
import { ExtensionRegistry } from "./registry.js";
|
|
17
37
|
/**
|
|
18
|
-
* The bootstrap step (package ecosystem spec §7): installs the plugins
|
|
19
|
-
* manifest (`packages/kernel/bootstrap.json`)
|
|
20
|
-
*
|
|
38
|
+
* The bootstrap step (package ecosystem spec §7, startup bootstrap spec): installs the plugins
|
|
39
|
+
* pinned by the bootstrap manifest (`packages/kernel/bootstrap.json`). It replaced the builtin
|
|
40
|
+
* extensions.
|
|
21
41
|
*
|
|
22
|
-
* -
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
42
|
+
* - When the run is already done for the manifest nothing is read: no directory, no network, so a
|
|
43
|
+
* restart of an installed deployment never needs npm.
|
|
44
|
+
* - Otherwise, inside the lock and before anything is written, every entry's tgz is obtained
|
|
45
|
+
* ({@link resolveBootstrapPackages}): a `*.tgz` file of the optional offline directory whose
|
|
46
|
+
* sha512 equals the entry's `integrity` (the file name does not matter), else the npm download
|
|
47
|
+
* of a `source: "npm"` entry (`packages.npmRegistry` / `npmToken` / `maxBytes`, verified against
|
|
48
|
+
* the pin only). A workspace entry without a matching file is `bootstrap.missing_file`, a failed
|
|
49
|
+
* download `bootstrap.download_failed`, a download that differs from the pin
|
|
50
|
+
* `bootstrap.integrity_mismatch` (all name the plugin), and then nothing is written. Downloading
|
|
51
|
+
* inside the lock means a fleet starting together downloads once.
|
|
52
|
+
* - The whole run holds the Redis lock `lock:bootstrap` (`LockService`, decision R5 of the Nest
|
|
53
|
+
* kernel spec: TTL {@link BOOTSTRAP_LOCK_TTL_MS}, renewed every third of it, so a run longer than the TTL keeps
|
|
54
|
+
* it and a crashed holder's lock expires within it), taken by an unbounded wait that observes
|
|
55
|
+
* the signal: when several replicas (or `capybara bootstrap` and a starting kernel) run it
|
|
56
|
+
* together only one runs it; the others wait, then find it done. A lost lock (renewal failed
|
|
57
|
+
* until expiry) aborts the run at its next step. "Done" is a `bootstrap_runs` row for the
|
|
30
58
|
* manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
|
|
31
|
-
* succeeded; otherwise the next start runs it again, which is idempotent).
|
|
32
|
-
* that drops mid-run is not detected (its errors are swallowed) and the run goes on without the
|
|
33
|
-
* lock, so a second replica could run concurrently: accepted, since a concurrent import or
|
|
34
|
-
* install degrades to `catalog.version_exists` and a deploy from the package store.
|
|
59
|
+
* succeeded; otherwise the next start runs it again, which is idempotent).
|
|
35
60
|
* - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
|
|
36
|
-
* 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
|
|
37
62
|
* it) stays uninstalled -> `kept`. A required entry is always installed.
|
|
38
63
|
* - Per entry, by the installed state of its extension:
|
|
39
64
|
* - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
|
|
@@ -42,8 +67,8 @@ import { diffPermissions } from "./permission-set.js";
|
|
|
42
67
|
* and enabled -> `installed`;
|
|
43
68
|
* - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
|
|
44
69
|
* for the version, so new permissions are pre-approved and audited), keeping the desired state
|
|
45
|
-
*
|
|
46
|
-
* - 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
|
|
47
72
|
* the name is config-declared (`declared`: config wins, no install record is created):
|
|
48
73
|
* untouched, never downgraded -> `kept`;
|
|
49
74
|
* - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
|
|
@@ -58,8 +83,11 @@ import { diffPermissions } from "./permission-set.js";
|
|
|
58
83
|
* loses `required` -> `required_cleared`.
|
|
59
84
|
* A failed entry does not stop the others; the run then throws {@link BootstrapFailedError} naming
|
|
60
85
|
* them. The packages are kept in PG (`blob_store = 'pg'`), so installing an extension never needs
|
|
61
|
-
* the object store (object-store-s3 is itself a bootstrap plugin)
|
|
62
|
-
* files
|
|
86
|
+
* the object store (object-store-s3 is itself a bootstrap plugin) and the directory and npm are
|
|
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).
|
|
63
91
|
*/
|
|
64
92
|
/** The bootstrap manifest that ships with the kernel package. */
|
|
65
93
|
export const BOOTSTRAP_MANIFEST_FILE = fileURLToPath(new URL("../../bootstrap.json", import.meta.url));
|
|
@@ -95,16 +123,149 @@ export async function readBootstrapManifest(file = BOOTSTRAP_MANIFEST_FILE) {
|
|
|
95
123
|
return parsed;
|
|
96
124
|
}
|
|
97
125
|
const integrityOf = (bytes) => `sha512-${createHash("sha512").update(bytes).digest("base64")}`;
|
|
98
|
-
/**
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
126
|
+
/**
|
|
127
|
+
* Obtains every entry's tgz, checked against its pinned sha512: from the offline directory when a
|
|
128
|
+
* file there has that sha512, else (a `source: "npm"` entry) downloaded from the npm registry and
|
|
129
|
+
* verified against the pin (the packument's `dist.integrity` is not consulted). Throws an
|
|
130
|
+
* {@link ApiError} naming the plugin for the first entry it cannot obtain
|
|
131
|
+
* (`bootstrap.missing_file`, `bootstrap.download_failed`, `bootstrap.integrity_mismatch`).
|
|
132
|
+
*/
|
|
133
|
+
export async function resolveBootstrapPackages(manifest, o) {
|
|
134
|
+
const out = new Map();
|
|
135
|
+
if (manifest.plugins.length === 0)
|
|
136
|
+
return out;
|
|
137
|
+
const { npmRegistry, npmToken, maxBytes } = o.config.packages;
|
|
138
|
+
const offline = o.dir !== undefined ? await scanOfflineDir(o.dir, maxBytes, o.log) : new Map();
|
|
139
|
+
const fetchPackage = o.fetch ?? fetchNpmPackage;
|
|
140
|
+
const signal = o.signal ?? new AbortController().signal;
|
|
141
|
+
const where = o.dir !== undefined ? o.dir : "the bootstrap directory (config bootstrap.dir)";
|
|
142
|
+
for (const e of manifest.plugins) {
|
|
143
|
+
signal.throwIfAborted();
|
|
144
|
+
const found = offline.get(e.integrity);
|
|
145
|
+
if (found !== undefined) {
|
|
146
|
+
out.set(e.name, found);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (e.source === "workspace") {
|
|
150
|
+
throw new ApiError("bootstrap.missing_file", `Bootstrap plugin ${e.name} ${e.version}: no file in ${where} has its pinned sha512 (${e.integrity.slice(0, 19)}…), and a workspace entry cannot be downloaded; put its package tgz (pnpm pack-plugin ${e.path}) in that directory`);
|
|
151
|
+
}
|
|
152
|
+
const registry = registryOrigin(npmRegistry);
|
|
153
|
+
const offlineHint = `to install offline, put the package tgz (npm pack ${e.npm}@${e.version}, any file name) in ${where}`;
|
|
154
|
+
try {
|
|
155
|
+
const r = await fetchPackage({ registry: npmRegistry, ...(npmToken !== undefined && { token: npmToken }), maxBytes }, e.npm, e.version, signal, { expectedIntegrity: e.integrity });
|
|
156
|
+
out.set(e.name, r.bytes);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
if (signal.aborted)
|
|
160
|
+
throw err;
|
|
161
|
+
if (err instanceof IntegrityMismatchError) {
|
|
162
|
+
throw new ApiError("bootstrap.integrity_mismatch", `Bootstrap plugin ${e.name} ${e.version}: the package ${e.npm}@${e.version} downloaded from ${registry} does not match its pinned sha512 (expected ${e.integrity.slice(0, 19)}…, got ${err.actual.slice(0, 19)}…); refusing to install anything`);
|
|
163
|
+
}
|
|
164
|
+
const reason = err instanceof NpmFetchError || err instanceof PackageTooLargeError
|
|
165
|
+
? err.message
|
|
166
|
+
: err instanceof Error
|
|
167
|
+
? err.message
|
|
168
|
+
: String(err);
|
|
169
|
+
throw new ApiError("bootstrap.download_failed", `Bootstrap plugin ${e.name} ${e.version}: cannot download ${e.npm}@${e.version} from ${registry} (${reason}); ${offlineHint}, or set packages.npmRegistry to a reachable mirror`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return out;
|
|
173
|
+
}
|
|
174
|
+
/** The registry's origin, for messages (never its credentials or path). */
|
|
175
|
+
function registryOrigin(registry) {
|
|
176
|
+
try {
|
|
177
|
+
return new URL(registry).origin;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return "the configured npm registry";
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The `*.tgz` files directly in `dir` by their sha512 integrity. A missing directory is an empty
|
|
185
|
+
* one; a file larger than `maxBytes` is skipped with a warning.
|
|
186
|
+
*/
|
|
187
|
+
async function scanOfflineDir(dir, maxBytes, log) {
|
|
188
|
+
const out = new Map();
|
|
189
|
+
let names;
|
|
190
|
+
try {
|
|
191
|
+
names = await readdir(dir);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
const code = err.code;
|
|
195
|
+
if (code === "ENOENT" || code === "ENOTDIR")
|
|
196
|
+
return out;
|
|
197
|
+
throw err;
|
|
198
|
+
}
|
|
199
|
+
for (const name of names.sort()) {
|
|
200
|
+
if (!name.endsWith(".tgz"))
|
|
201
|
+
continue;
|
|
202
|
+
const file = join(dir, name);
|
|
203
|
+
const st = await stat(file).catch(() => undefined);
|
|
204
|
+
if (!st?.isFile())
|
|
205
|
+
continue;
|
|
206
|
+
if (st.size > maxBytes) {
|
|
207
|
+
log?.warn("bootstrap: a file in the bootstrap directory exceeds packages.maxBytes; skipped", {
|
|
208
|
+
file,
|
|
209
|
+
size: st.size,
|
|
210
|
+
maxBytes,
|
|
211
|
+
});
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const bytes = new Uint8Array(await readFile(file));
|
|
215
|
+
const integrity = integrityOf(bytes);
|
|
216
|
+
if (!out.has(integrity))
|
|
217
|
+
out.set(integrity, bytes);
|
|
218
|
+
}
|
|
219
|
+
return out;
|
|
220
|
+
}
|
|
221
|
+
/** The lock around a whole run (`lock:bootstrap`). */
|
|
222
|
+
export const BOOTSTRAP_LOCK_KEY = "bootstrap";
|
|
223
|
+
/** Its lifetime without renewal; a run keeps it by renewal, a crashed holder's expires. */
|
|
224
|
+
export const BOOTSTRAP_LOCK_TTL_MS = 120_000;
|
|
225
|
+
/** Optional provider: the lock's lifetime (ms) instead of {@link BOOTSTRAP_LOCK_TTL_MS} (tests shorten it). */
|
|
226
|
+
export const BOOTSTRAP_LOCK_TTL = Symbol("BOOTSTRAP_LOCK_TTL");
|
|
227
|
+
/** The pause between attempts while another holder runs the step. */
|
|
228
|
+
const LOCK_RETRY_MS = 500;
|
|
229
|
+
let BootstrapService = class BootstrapService {
|
|
230
|
+
kdb;
|
|
231
|
+
txHost;
|
|
232
|
+
locks;
|
|
233
|
+
approveLock;
|
|
234
|
+
installs;
|
|
235
|
+
ops;
|
|
236
|
+
registry;
|
|
237
|
+
configService;
|
|
238
|
+
log;
|
|
239
|
+
lockTtlMs;
|
|
240
|
+
constructor(kdb, txHost, locks, approveLock, installs, ops,
|
|
241
|
+
/**
|
|
242
|
+
* Config-declared extension names (an entry of the same name is kept, config wins, and no
|
|
243
|
+
* install record is created): the start sequence records them before the bootstrap step, the
|
|
244
|
+
* CLI from its inspection.
|
|
245
|
+
*/
|
|
246
|
+
registry, configService, log,
|
|
247
|
+
/** The lock's lifetime without renewal. */
|
|
248
|
+
lockTtlMs = BOOTSTRAP_LOCK_TTL_MS) {
|
|
249
|
+
this.kdb = kdb;
|
|
250
|
+
this.txHost = txHost;
|
|
251
|
+
this.locks = locks;
|
|
252
|
+
this.approveLock = approveLock;
|
|
253
|
+
this.installs = installs;
|
|
254
|
+
this.ops = ops;
|
|
255
|
+
this.registry = registry;
|
|
256
|
+
this.configService = configService;
|
|
257
|
+
this.log = log;
|
|
258
|
+
this.lockTtlMs = lockTtlMs;
|
|
259
|
+
}
|
|
260
|
+
get db() {
|
|
261
|
+
return this.kdb.db;
|
|
262
|
+
}
|
|
263
|
+
config() {
|
|
264
|
+
return this.configService.get();
|
|
104
265
|
}
|
|
105
266
|
/** Whether the bootstrap step completed for the manifest with this sha256. */
|
|
106
267
|
async isDone(manifestSha256) {
|
|
107
|
-
const row = await this.
|
|
268
|
+
const row = await this.db
|
|
108
269
|
.selectFrom("bootstrap_runs")
|
|
109
270
|
.select("manifest_sha256")
|
|
110
271
|
.where("manifest_sha256", "=", manifestSha256)
|
|
@@ -120,27 +281,42 @@ export class BootstrapService {
|
|
|
120
281
|
*/
|
|
121
282
|
async run(o) {
|
|
122
283
|
const manifestSha256 = bootstrapManifestSha256(o.manifest);
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
const done = await this.d.db
|
|
284
|
+
const recorded = async () => {
|
|
285
|
+
const done = await this.db
|
|
126
286
|
.selectFrom("bootstrap_runs")
|
|
127
287
|
.select("results")
|
|
128
288
|
.where("manifest_sha256", "=", manifestSha256)
|
|
129
289
|
.executeTakeFirst();
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
290
|
+
return done && { manifestSha256, results: done.results };
|
|
291
|
+
};
|
|
292
|
+
// Done: no lock, no directory, no network
|
|
293
|
+
const before = await recorded();
|
|
294
|
+
if (before)
|
|
295
|
+
return before;
|
|
296
|
+
return this.locked(o.signal, async (signal) => {
|
|
297
|
+
// Another replica may have finished it while this one waited for the lock
|
|
298
|
+
const done = await recorded();
|
|
299
|
+
if (done)
|
|
300
|
+
return done;
|
|
301
|
+
// Every package is obtained and checked before the first write
|
|
302
|
+
const files = await resolveBootstrapPackages(o.manifest, {
|
|
303
|
+
...(o.dir !== undefined && { dir: o.dir }),
|
|
304
|
+
config: this.config(),
|
|
305
|
+
signal,
|
|
306
|
+
log: this.log,
|
|
307
|
+
});
|
|
133
308
|
const handled = await this.lastRunNames();
|
|
134
309
|
const results = [];
|
|
135
310
|
const failures = [];
|
|
136
311
|
for (const e of o.manifest.plugins) {
|
|
137
|
-
|
|
312
|
+
signal.throwIfAborted();
|
|
313
|
+
await this.warnIfHeld(e);
|
|
138
314
|
try {
|
|
139
|
-
const r = await this.entry(e, files.get(e.name), handled);
|
|
315
|
+
const r = await this.entry(e, files.get(e.name), handled, o.imports);
|
|
140
316
|
results.push(carried(r, o.carry));
|
|
141
317
|
}
|
|
142
318
|
catch (err) {
|
|
143
|
-
this.
|
|
319
|
+
this.log.error("bootstrap: a plugin could not be installed", {
|
|
144
320
|
plugin: e.name,
|
|
145
321
|
version: e.version,
|
|
146
322
|
required: e.required,
|
|
@@ -157,63 +333,70 @@ export class BootstrapService {
|
|
|
157
333
|
results.push(...(await this.clearRemoved(o.manifest)));
|
|
158
334
|
if (failures.length > 0)
|
|
159
335
|
throw new BootstrapFailedError(failures, results);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
.values({
|
|
164
|
-
manifest_sha256: manifestSha256,
|
|
165
|
-
completed_at: sql `now()`,
|
|
166
|
-
results: JSON.stringify(results),
|
|
167
|
-
})
|
|
168
|
-
.execute();
|
|
169
|
-
await audit(trx, {
|
|
170
|
-
action: "bootstrap.completed",
|
|
171
|
-
target: manifestSha256,
|
|
172
|
-
detail: { manifestSha256, results },
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
this.d.log.info("bootstrap completed", { manifestSha256, results });
|
|
336
|
+
signal.throwIfAborted();
|
|
337
|
+
await this.recordDone(manifestSha256, results);
|
|
338
|
+
this.log.info("bootstrap completed", { manifestSha256, results });
|
|
176
339
|
return { manifestSha256, results };
|
|
177
340
|
});
|
|
178
341
|
}
|
|
179
342
|
/**
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
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
|
+
}
|
|
359
|
+
/** The `bootstrap_runs` row and the `bootstrap.completed` audit, in one transaction. */
|
|
360
|
+
async recordDone(manifestSha256, results) {
|
|
361
|
+
await this.db
|
|
362
|
+
.insertInto("bootstrap_runs")
|
|
363
|
+
.values({
|
|
364
|
+
manifest_sha256: manifestSha256,
|
|
365
|
+
completed_at: sql `now()`,
|
|
366
|
+
results: JSON.stringify(results),
|
|
367
|
+
})
|
|
368
|
+
.execute();
|
|
369
|
+
await audit(this.db, {
|
|
370
|
+
action: "bootstrap.completed",
|
|
371
|
+
target: manifestSha256,
|
|
372
|
+
detail: { manifestSha256, results },
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Runs `fn` holding `lock:bootstrap`: waits without bound while another replica holds it
|
|
377
|
+
* (until `signal` aborts), renews it while `fn` runs and releases it afterwards. `fn` gets a
|
|
378
|
+
* signal that also aborts when the lock is lost.
|
|
183
379
|
*/
|
|
184
380
|
async locked(signal, fn) {
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
381
|
+
const handle = await this.locks.acquire(BOOTSTRAP_LOCK_KEY, {
|
|
382
|
+
ttlMs: this.lockTtlMs,
|
|
383
|
+
waitMs: Number.POSITIVE_INFINITY,
|
|
384
|
+
retryMs: LOCK_RETRY_MS,
|
|
385
|
+
...(signal !== undefined && { signal }),
|
|
188
386
|
});
|
|
189
|
-
|
|
387
|
+
// An unbounded wait returns a handle or throws the abort reason
|
|
388
|
+
if (!handle)
|
|
389
|
+
throw new Error("bootstrap: the lock could not be taken");
|
|
190
390
|
try {
|
|
191
|
-
await
|
|
192
|
-
for (let wait = 100;; wait = Math.min(wait * 2, 1_000)) {
|
|
193
|
-
signal?.throwIfAborted();
|
|
194
|
-
const r = await client.query("SELECT pg_try_advisory_lock(hashtext($1)) AS ok", [LOCK_KEY]);
|
|
195
|
-
if (r.rows[0]?.ok === true)
|
|
196
|
-
break;
|
|
197
|
-
await sleep(wait, signal);
|
|
198
|
-
}
|
|
199
|
-
try {
|
|
200
|
-
return await fn();
|
|
201
|
-
}
|
|
202
|
-
finally {
|
|
203
|
-
await client
|
|
204
|
-
.query("SELECT pg_advisory_unlock(hashtext($1))", [LOCK_KEY])
|
|
205
|
-
.catch((err) => this.d.log.warn("bootstrap: cannot release the advisory lock; closing its connection", {
|
|
206
|
-
err,
|
|
207
|
-
}));
|
|
208
|
-
}
|
|
391
|
+
return await fn(signal ? AbortSignal.any([signal, handle.lost]) : handle.lost);
|
|
209
392
|
}
|
|
210
393
|
finally {
|
|
211
|
-
await
|
|
394
|
+
await handle.release();
|
|
212
395
|
}
|
|
213
396
|
}
|
|
214
397
|
/** The entry names the last completed run handled (undefined before any run completed). */
|
|
215
398
|
async lastRunNames() {
|
|
216
|
-
const row = await this.
|
|
399
|
+
const row = await this.db
|
|
217
400
|
.selectFrom("bootstrap_runs")
|
|
218
401
|
.select("results")
|
|
219
402
|
.orderBy("completed_at", "desc")
|
|
@@ -225,31 +408,9 @@ export class BootstrapService {
|
|
|
225
408
|
.filter((r) => r.action !== "required_cleared")
|
|
226
409
|
.map((r) => r.name));
|
|
227
410
|
}
|
|
228
|
-
|
|
229
|
-
async verifyFiles(manifest, dir) {
|
|
230
|
-
const out = new Map();
|
|
231
|
-
for (const e of manifest.plugins) {
|
|
232
|
-
const file = join(dir, bootstrapFileName(e));
|
|
233
|
-
let bytes;
|
|
234
|
-
try {
|
|
235
|
-
bytes = new Uint8Array(await readFile(file));
|
|
236
|
-
}
|
|
237
|
-
catch (err) {
|
|
238
|
-
if (err.code !== "ENOENT")
|
|
239
|
-
throw err;
|
|
240
|
-
throw new ApiError("bootstrap.missing_file", `Bootstrap plugin ${e.name} ${e.version}: ${file} is missing; the image must carry every package bootstrap.json pins`);
|
|
241
|
-
}
|
|
242
|
-
const actual = integrityOf(bytes);
|
|
243
|
-
if (actual !== e.integrity) {
|
|
244
|
-
throw new ApiError("bootstrap.integrity_mismatch", `Bootstrap plugin ${e.name} ${e.version}: ${file} does not match its pinned sha512 (expected ${e.integrity.slice(0, 19)}…, got ${actual.slice(0, 19)}…); refusing to install anything`);
|
|
245
|
-
}
|
|
246
|
-
out.set(e.name, bytes);
|
|
247
|
-
}
|
|
248
|
-
return out;
|
|
249
|
-
}
|
|
250
|
-
async entry(e, bytes, handled) {
|
|
411
|
+
async entry(e, bytes, handled, imports) {
|
|
251
412
|
const pkg = await readPluginPackage(bytes, {
|
|
252
|
-
maxBytes: this.
|
|
413
|
+
maxBytes: this.config().packages.maxBytes,
|
|
253
414
|
hostSdkVersion: SDK_VERSION,
|
|
254
415
|
}).catch((err) => {
|
|
255
416
|
throw err instanceof PluginPackageError ? catalogPackageError(err) : err;
|
|
@@ -261,34 +422,37 @@ export class BootstrapService {
|
|
|
261
422
|
// Not new to the manifest: an optional entry left out on purpose stays out (Ruling 5)
|
|
262
423
|
const isNew = handled === undefined || !handled.has(e.name);
|
|
263
424
|
if (!pkg.manifest.extension) {
|
|
425
|
+
await this.markBuiltin(e.name, e.required);
|
|
264
426
|
if (!isNew)
|
|
265
427
|
return { name: e.name, action: "kept", version: e.version };
|
|
266
|
-
const imported = await this.importOnly(e, bytes, ref);
|
|
428
|
+
const imported = await this.importOnly(e, bytes, ref, imports);
|
|
429
|
+
await this.markBuiltin(e.name, e.required);
|
|
267
430
|
return { name: e.name, action: imported ? "imported" : "kept", version: e.version };
|
|
268
431
|
}
|
|
269
|
-
if (this.
|
|
270
|
-
this.
|
|
432
|
+
if (this.registry.declared().has(e.name)) {
|
|
433
|
+
this.log.warn("bootstrap: the plugin is declared in the extensions config list; the config plugin is used", { plugin: e.name });
|
|
271
434
|
return { name: e.name, action: "kept", version: e.version };
|
|
272
435
|
}
|
|
273
|
-
const row = await this.
|
|
436
|
+
const row = await this.db
|
|
274
437
|
.selectFrom("extension_installs")
|
|
275
438
|
.select(["version", "source", "required", "desired_state", "sha256"])
|
|
276
439
|
.where("name", "=", e.name)
|
|
277
440
|
.executeTakeFirst();
|
|
278
441
|
if (!row && !isNew && !e.required) {
|
|
279
|
-
this.
|
|
442
|
+
this.log.info("bootstrap: an optional plugin that is not installed stays uninstalled", {
|
|
280
443
|
plugin: e.name,
|
|
281
444
|
});
|
|
282
445
|
return { name: e.name, action: "kept", version: e.version };
|
|
283
446
|
}
|
|
284
447
|
let result;
|
|
448
|
+
let leftDisabled;
|
|
285
449
|
if (!row) {
|
|
286
|
-
await this.deploy(e, bytes, ref, true);
|
|
450
|
+
leftDisabled = await this.deploy(e, bytes, ref, true, imports);
|
|
287
451
|
result = { name: e.name, action: "installed", version: e.version };
|
|
288
452
|
}
|
|
289
453
|
else if (row.source === "bootstrap" && isLower(row.version, e.version)) {
|
|
290
454
|
// The desired state the admin chose is kept; a required plugin is enabled below anyway
|
|
291
|
-
await this.deploy(e, bytes, ref, row.desired_state === "enabled");
|
|
455
|
+
leftDisabled = await this.deploy(e, bytes, ref, row.desired_state === "enabled", imports);
|
|
292
456
|
result = { name: e.name, action: "upgraded", version: e.version };
|
|
293
457
|
}
|
|
294
458
|
else {
|
|
@@ -297,12 +461,12 @@ export class BootstrapService {
|
|
|
297
461
|
row.sha256 !== createHash("sha256").update(bytes).digest("hex")) {
|
|
298
462
|
// The pin changed bytes without a version bump (an image built from main between
|
|
299
463
|
// releases): the installed package stays, so say so instead of keeping it silently
|
|
300
|
-
this.
|
|
464
|
+
this.log.warn("bootstrap: the image's package differs from the installed one at the same version; the installed package is kept (bump the version to roll it out)", { plugin: e.name, version: e.version });
|
|
301
465
|
}
|
|
302
466
|
result = { name: e.name, action: "kept", version: row.version };
|
|
303
467
|
}
|
|
304
468
|
if (row?.required !== e.required) {
|
|
305
|
-
await this.
|
|
469
|
+
await this.db
|
|
306
470
|
.updateTable("extension_installs")
|
|
307
471
|
.set({ required: e.required })
|
|
308
472
|
.where("name", "=", e.name)
|
|
@@ -310,22 +474,52 @@ export class BootstrapService {
|
|
|
310
474
|
}
|
|
311
475
|
// A required install must run on the deployment (an org cannot use it otherwise)
|
|
312
476
|
if (e.required && row?.desired_state === "disabled") {
|
|
313
|
-
await this.
|
|
477
|
+
leftDisabled = await this.enableOrWarn(e);
|
|
314
478
|
}
|
|
315
|
-
|
|
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();
|
|
316
513
|
}
|
|
317
514
|
/** A declarative plugin: catalog only. Returns false when that version is already imported. */
|
|
318
|
-
async importOnly(e, bytes, ref) {
|
|
515
|
+
async importOnly(e, bytes, ref, imports) {
|
|
319
516
|
try {
|
|
320
|
-
const { stagingId, review } = await
|
|
517
|
+
const { stagingId, review } = await imports.prepare(null, bytes, {
|
|
321
518
|
kind: "bootstrap",
|
|
322
519
|
ref,
|
|
323
520
|
integrity: e.integrity,
|
|
324
521
|
});
|
|
325
|
-
await
|
|
326
|
-
reviewHash: review.reviewHash,
|
|
327
|
-
deployExtension: false,
|
|
328
|
-
});
|
|
522
|
+
await imports.confirm(null, stagingId, { reviewHash: review.reviewHash });
|
|
329
523
|
return true;
|
|
330
524
|
}
|
|
331
525
|
catch (err) {
|
|
@@ -335,14 +529,14 @@ export class BootstrapService {
|
|
|
335
529
|
}
|
|
336
530
|
}
|
|
337
531
|
/**
|
|
338
|
-
* Imports, approves, installs and enables (one review
|
|
532
|
+
* Imports, approves, installs and enables (one review; its confirm deploys the extension). When
|
|
339
533
|
* the catalog already has this version (an earlier run stopped after importing, or the same
|
|
340
534
|
* package came from a marketplace), the extension is deployed from the package store instead.
|
|
341
535
|
*/
|
|
342
|
-
async deploy(e, bytes, ref, enable) {
|
|
536
|
+
async deploy(e, bytes, ref, enable, imports) {
|
|
343
537
|
let staged;
|
|
344
538
|
try {
|
|
345
|
-
staged = await
|
|
539
|
+
staged = await imports.prepare(null, bytes, {
|
|
346
540
|
kind: "bootstrap",
|
|
347
541
|
ref,
|
|
348
542
|
integrity: e.integrity,
|
|
@@ -350,70 +544,140 @@ export class BootstrapService {
|
|
|
350
544
|
}
|
|
351
545
|
catch (err) {
|
|
352
546
|
if (err instanceof ApiError && err.code === "catalog.version_exists") {
|
|
353
|
-
|
|
354
|
-
return;
|
|
547
|
+
return this.deployFromStore(e, bytes, ref, enable);
|
|
355
548
|
}
|
|
356
549
|
throw err;
|
|
357
550
|
}
|
|
358
|
-
const r = await
|
|
551
|
+
const r = await imports.confirm(null, staged.stagingId, {
|
|
359
552
|
reviewHash: staged.review.reviewHash,
|
|
360
|
-
deployExtension: true,
|
|
361
553
|
enable,
|
|
362
554
|
});
|
|
363
555
|
if (r.deploy?.result === "failed") {
|
|
364
556
|
throw new ApiError((r.deploy.code ?? "internal"), r.deploy.message ?? `installing extension ${e.name} failed`);
|
|
365
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;
|
|
366
566
|
}
|
|
367
567
|
/** The extension of a catalog version already imported: ingest, approve, install (, enable). */
|
|
368
568
|
async deployFromStore(e, bytes, ref, enable) {
|
|
369
|
-
const review = await this.
|
|
569
|
+
const review = await this.installs.ingest(null, bytes, { source: "bootstrap", ref }, { store: "pg" });
|
|
370
570
|
let set;
|
|
371
571
|
try {
|
|
372
572
|
set = permissionSetOfPackage(await readExtensionPackage(bytes, {
|
|
373
|
-
maxBytes: this.
|
|
573
|
+
maxBytes: this.config().packages.maxBytes,
|
|
374
574
|
hostSdkVersion: SDK_VERSION,
|
|
375
575
|
}));
|
|
376
576
|
}
|
|
377
577
|
catch (err) {
|
|
378
578
|
throw err instanceof ExtensionPackageError ? catalogPackageError(err) : err;
|
|
379
579
|
}
|
|
380
|
-
await this.
|
|
381
|
-
|
|
382
|
-
const snap = await trx
|
|
383
|
-
.selectFrom("extension_permission_snapshots")
|
|
384
|
-
.select("permissions")
|
|
385
|
-
.where("plugin", "=", e.name)
|
|
386
|
-
.forUpdate()
|
|
387
|
-
.executeTakeFirst();
|
|
388
|
-
const { added, removed } = diffPermissions(snap?.permissions, set);
|
|
389
|
-
await writeSnapshot(trx, e.name, e.version, set, {
|
|
390
|
-
source: "bootstrap",
|
|
391
|
-
audit: { added, removed, sha256: review.sha256 },
|
|
392
|
-
});
|
|
393
|
-
});
|
|
394
|
-
const item = await this.d.db
|
|
580
|
+
await this.approveStored(e, set, review.sha256);
|
|
581
|
+
const item = await this.db
|
|
395
582
|
.selectFrom("catalog_items")
|
|
396
583
|
.select("id")
|
|
397
584
|
.where("name", "=", e.name)
|
|
398
585
|
.where("deleted_at", "is", null)
|
|
399
586
|
.executeTakeFirst();
|
|
400
|
-
await this.
|
|
401
|
-
|
|
402
|
-
|
|
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;
|
|
620
|
+
}
|
|
621
|
+
/** The permission snapshot of a stored package (source `bootstrap`), under the approve lock. */
|
|
622
|
+
async approveStored(e, set, sha256) {
|
|
623
|
+
await this.approveLock.lock(e.name);
|
|
624
|
+
const snap = await this.db
|
|
625
|
+
.selectFrom("extension_permission_snapshots")
|
|
626
|
+
.select("permissions")
|
|
627
|
+
.where("plugin", "=", e.name)
|
|
628
|
+
.forUpdate()
|
|
629
|
+
.executeTakeFirst();
|
|
630
|
+
const { added, removed } = diffPermissions(snap?.permissions, set);
|
|
631
|
+
await writeSnapshot(this.db, e.name, e.version, set, {
|
|
632
|
+
source: "bootstrap",
|
|
633
|
+
audit: { added, removed, sha256 },
|
|
634
|
+
});
|
|
403
635
|
}
|
|
404
636
|
/** Install records still `required` whose entry left the manifest lose `required`. */
|
|
405
637
|
async clearRemoved(manifest) {
|
|
406
638
|
const names = manifest.plugins.map((p) => p.name);
|
|
407
|
-
let q = this.
|
|
639
|
+
let q = this.db
|
|
408
640
|
.updateTable("extension_installs")
|
|
409
641
|
.set({ required: false })
|
|
410
642
|
.where("required", "=", true);
|
|
411
643
|
if (names.length > 0)
|
|
412
644
|
q = q.where("name", "not in", names);
|
|
413
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();
|
|
414
657
|
return rows.map((r) => ({ name: r.name, action: "required_cleared", version: r.version }));
|
|
415
658
|
}
|
|
416
|
-
}
|
|
659
|
+
};
|
|
660
|
+
__decorate([
|
|
661
|
+
Transactional()
|
|
662
|
+
], BootstrapService.prototype, "recordDone", null);
|
|
663
|
+
__decorate([
|
|
664
|
+
Transactional()
|
|
665
|
+
], BootstrapService.prototype, "approveStored", null);
|
|
666
|
+
BootstrapService = __decorate([
|
|
667
|
+
Injectable(),
|
|
668
|
+
__param(0, Inject(KernelDb)),
|
|
669
|
+
__param(1, Inject(TransactionHost)),
|
|
670
|
+
__param(2, Inject(LockService)),
|
|
671
|
+
__param(3, Inject(PluginApproveLock)),
|
|
672
|
+
__param(4, Inject(ExtensionInstalls)),
|
|
673
|
+
__param(5, Inject(ExtensionAdminOps)),
|
|
674
|
+
__param(6, Inject(ExtensionRegistry)),
|
|
675
|
+
__param(7, Inject(KernelConfigService)),
|
|
676
|
+
__param(8, Inject(KERNEL_LOGGER)),
|
|
677
|
+
__param(9, Optional()),
|
|
678
|
+
__param(9, Inject(BOOTSTRAP_LOCK_TTL))
|
|
679
|
+
], BootstrapService);
|
|
680
|
+
export { BootstrapService };
|
|
417
681
|
/** A `kept` result whose entry an earlier pass of the same start installed / upgraded / imported. */
|
|
418
682
|
function carried(r, carry) {
|
|
419
683
|
if (r.action !== "kept")
|
|
@@ -423,19 +687,5 @@ function carried(r, carry) {
|
|
|
423
687
|
? before
|
|
424
688
|
: r;
|
|
425
689
|
}
|
|
426
|
-
/** Resolves after `ms`; rejects with the abort reason when `signal` aborts first. */
|
|
427
|
-
function sleep(ms, signal) {
|
|
428
|
-
return new Promise((resolve, reject) => {
|
|
429
|
-
const onAbort = () => {
|
|
430
|
-
clearTimeout(timer);
|
|
431
|
-
reject(signal?.reason);
|
|
432
|
-
};
|
|
433
|
-
const timer = setTimeout(() => {
|
|
434
|
-
signal?.removeEventListener("abort", onAbort);
|
|
435
|
-
resolve();
|
|
436
|
-
}, ms);
|
|
437
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
690
|
/** `installed` is below `pinned` (a version that is not semver is never upgraded). */
|
|
441
691
|
const isLower = (installed, pinned) => semver.valid(installed) !== null && semver.valid(pinned) !== null && semver.lt(installed, pinned);
|