@capybara-hq/kernel 0.1.0-rc.1 → 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 +85 -5
- 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 -202
- 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 +36 -2
- package/dist/config/schema.js +226 -25
- 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 -71
- 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/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 +135 -2
- package/dist/errors.js +135 -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 -124
- 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 +99 -36
- package/dist/extensions/bootstrap.js +290 -134
- 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 +46 -65
- 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 +22 -13
- package/dist/index.js +16 -7
- 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 -244
- 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-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +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/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 -137
- 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 -237
- 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 -181
- 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 +137 -37
- package/dist/tools/builtins/sandbox/common.js +222 -62
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +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 +13 -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
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { randomBytes } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { EnvironmentsService } from "../environments/environments.service.js";
|
|
13
|
+
import { ApiError } from "../errors.js";
|
|
14
|
+
import { audit } from "../identity/audit.js";
|
|
15
|
+
import { sha256Hex } from "../identity/hash.js";
|
|
16
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
17
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
18
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
19
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
20
|
+
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
21
|
+
import { authorizeOrgAction } from "../orgs/org.guard.js";
|
|
22
|
+
import { DEVICE_PROVIDER } from "../sandbox/providers.js";
|
|
23
|
+
import { environmentNotFound } from "../sandbox/sandbox.service.js";
|
|
24
|
+
import { MachinesService } from "./machines.js";
|
|
25
|
+
/** The 20 consonants a user code is made of (no vowels: no words; no look-alike letters). */
|
|
26
|
+
export const USER_CODE_ALPHABET = "BCDFGHJKLMNPQRSTVWXZ";
|
|
27
|
+
const USER_CODE_LENGTH = 8;
|
|
28
|
+
const DEVICE_CODE_PREFIX = "cap_dvc_";
|
|
29
|
+
const DEVICE_CODE_RE = /^cap_dvc_[A-Za-z0-9_-]{43}$/;
|
|
30
|
+
/** What `slow_down` adds to the poll interval (RFC 8628 §3.5). */
|
|
31
|
+
export const SLOW_DOWN_STEP_SECONDS = 5;
|
|
32
|
+
/** Polls this much earlier than the interval are still on time (network jitter). */
|
|
33
|
+
const POLL_JITTER_MS = 500;
|
|
34
|
+
/** The web page that confirms a code: `<http.publicUrl>/device`. */
|
|
35
|
+
export const DEVICE_PAGE_PATH = "/device";
|
|
36
|
+
/** The machine's WebSocket route: `ws(s)://<http.publicUrl host>/device/connect`. */
|
|
37
|
+
export const DEVICE_CONNECT_PATH = "/device/connect";
|
|
38
|
+
/** The sign-in state of one device code: `capk:device-auth:<sha256(deviceCode)>` (a hash). */
|
|
39
|
+
export const deviceAuthKey = (deviceCode) => authKeyOf(sha256Hex(deviceCode));
|
|
40
|
+
const authKeyOf = (deviceCodeHash) => `capk:device-auth:${deviceCodeHash}`;
|
|
41
|
+
/** The user code's pointer to its device code's hash: `capk:device-user:<XXXX-XXXX>`. */
|
|
42
|
+
export const deviceUserKey = (userCode) => `capk:device-user:${userCode}`;
|
|
43
|
+
/**
|
|
44
|
+
* The poll (`ARGV[1]` now in ms, `ARGV[2]` jitter ms, `ARGV[3]` slow-down step s). Missing →
|
|
45
|
+
* `expired`. Earlier than the interval → `slow_down` with the grown interval. Approved → the
|
|
46
|
+
* parked grant, and the code is deleted (get-and-delete: the credential is handed out once).
|
|
47
|
+
* Otherwise the status (`pending`, `claimed`, `denied`). Every poll records its time.
|
|
48
|
+
*/
|
|
49
|
+
const POLL = `
|
|
50
|
+
if redis.call('EXISTS', KEYS[1]) == 0 then return {'expired'} end
|
|
51
|
+
local now = tonumber(ARGV[1])
|
|
52
|
+
local interval = tonumber(redis.call('HGET', KEYS[1], 'interval'))
|
|
53
|
+
local last = redis.call('HGET', KEYS[1], 'lastPollAt')
|
|
54
|
+
redis.call('HSET', KEYS[1], 'lastPollAt', ARGV[1])
|
|
55
|
+
if last and now - tonumber(last) < interval * 1000 - tonumber(ARGV[2]) then
|
|
56
|
+
interval = interval + tonumber(ARGV[3])
|
|
57
|
+
redis.call('HSET', KEYS[1], 'interval', interval)
|
|
58
|
+
return {'slow_down', tostring(interval)}
|
|
59
|
+
end
|
|
60
|
+
local status = redis.call('HGET', KEYS[1], 'status')
|
|
61
|
+
if status == 'approved' then
|
|
62
|
+
local grant = redis.call('HGET', KEYS[1], 'grant')
|
|
63
|
+
redis.call('DEL', KEYS[1])
|
|
64
|
+
return {'approved', grant}
|
|
65
|
+
end
|
|
66
|
+
return {status}
|
|
67
|
+
`;
|
|
68
|
+
/** Writes the user code's pointer (`ARGV[1]`, TTL `ARGV[2]` s) unless the code is in use. */
|
|
69
|
+
const CREATE_POINTER = `
|
|
70
|
+
if redis.call('EXISTS', KEYS[1]) == 1 then return 0 end
|
|
71
|
+
redis.call('SET', KEYS[1], ARGV[1], 'EX', ARGV[2])
|
|
72
|
+
return 1
|
|
73
|
+
`;
|
|
74
|
+
/** Moves the status from `ARGV[1]` to `ARGV[2]` (setting field `ARGV[3]` to `ARGV[4]` if given). */
|
|
75
|
+
const TRANSITION = `
|
|
76
|
+
if redis.call('HGET', KEYS[1], 'status') ~= ARGV[1] then return 0 end
|
|
77
|
+
redis.call('HSET', KEYS[1], 'status', ARGV[2])
|
|
78
|
+
if ARGV[3] then redis.call('HSET', KEYS[1], ARGV[3], ARGV[4]) end
|
|
79
|
+
return 1
|
|
80
|
+
`;
|
|
81
|
+
const codeInvalid = () => new ApiError("device.code_invalid", "This code is unknown or has expired; check the code shown by capybara-device, or run capybara-device login again");
|
|
82
|
+
/** A user code as typed → `XXXX-XXXX`, or null when it cannot be one. */
|
|
83
|
+
export function normalizeUserCode(input) {
|
|
84
|
+
const s = input.toUpperCase().replace(/[\s-]/g, "");
|
|
85
|
+
if (s.length !== USER_CODE_LENGTH)
|
|
86
|
+
return null;
|
|
87
|
+
for (const c of s)
|
|
88
|
+
if (!USER_CODE_ALPHABET.includes(c))
|
|
89
|
+
return null;
|
|
90
|
+
return `${s.slice(0, 4)}-${s.slice(4)}`;
|
|
91
|
+
}
|
|
92
|
+
/** A uniformly random user code (rejection sampling keeps every letter equally likely). */
|
|
93
|
+
function newUserCode() {
|
|
94
|
+
const n = USER_CODE_ALPHABET.length;
|
|
95
|
+
const limit = 256 - (256 % n);
|
|
96
|
+
let out = "";
|
|
97
|
+
while (out.length < USER_CODE_LENGTH) {
|
|
98
|
+
for (const b of randomBytes(USER_CODE_LENGTH * 2)) {
|
|
99
|
+
if (b < limit && out.length < USER_CODE_LENGTH)
|
|
100
|
+
out += USER_CODE_ALPHABET[b % n];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return `${out.slice(0, 4)}-${out.slice(4)}`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Device authorization (environments spec §6.2, §13.3; the shape of RFC 8628). The program asks
|
|
107
|
+
* for a code pair (`authorize`), the signed-in person confirms the user code on the web page
|
|
108
|
+
* `/device` (`pending`, `confirm` or `deny`), and the program polls `token` until it gets the
|
|
109
|
+
* machine credential, once. State lives only in Redis, both keys with the code's TTL
|
|
110
|
+
* (`environments.device.authCodeTtlSeconds`): `capk:device-auth:<sha256(deviceCode)>` (a hash:
|
|
111
|
+
* `info` JSON, `status`, `interval`, `lastPollAt`, the parked `grant`) and
|
|
112
|
+
* `capk:device-user:<userCode>` → the device code's hash. The device code itself is never stored.
|
|
113
|
+
*/
|
|
114
|
+
let DeviceAuthService = class DeviceAuthService {
|
|
115
|
+
db;
|
|
116
|
+
txHost;
|
|
117
|
+
redis;
|
|
118
|
+
config;
|
|
119
|
+
environments;
|
|
120
|
+
machines;
|
|
121
|
+
log;
|
|
122
|
+
constructor(db, txHost, redis, config, environments, machines, log) {
|
|
123
|
+
this.db = db;
|
|
124
|
+
this.txHost = txHost;
|
|
125
|
+
this.redis = redis;
|
|
126
|
+
this.config = config;
|
|
127
|
+
this.environments = environments;
|
|
128
|
+
this.machines = machines;
|
|
129
|
+
this.log = log;
|
|
130
|
+
}
|
|
131
|
+
/** A new code pair for a machine. Needs `http.publicUrl` (the page and the connection URL). */
|
|
132
|
+
async authorize(machine) {
|
|
133
|
+
const web = this.publicUrl();
|
|
134
|
+
const { authCodeTtlSeconds: ttl, pollIntervalSeconds: interval } = this.config.get().environments.device;
|
|
135
|
+
const deviceCode = DEVICE_CODE_PREFIX + randomBytes(32).toString("base64url");
|
|
136
|
+
const hash = sha256Hex(deviceCode);
|
|
137
|
+
for (let attempt = 0;; attempt++) {
|
|
138
|
+
const userCode = newUserCode();
|
|
139
|
+
// the pointer first: a user code is never shared by two device codes
|
|
140
|
+
const free = await this.redis.eval(CREATE_POINTER, 1, deviceUserKey(userCode), hash, ttl);
|
|
141
|
+
if (free !== 1) {
|
|
142
|
+
if (attempt >= 4)
|
|
143
|
+
throw new Error("could not find a free device user code");
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const info = {
|
|
147
|
+
machine,
|
|
148
|
+
userCode,
|
|
149
|
+
expiresAt: new Date(Date.now() + ttl * 1000).toISOString(),
|
|
150
|
+
};
|
|
151
|
+
await this.redis
|
|
152
|
+
.multi()
|
|
153
|
+
.hset(authKeyOf(hash), {
|
|
154
|
+
info: JSON.stringify(info),
|
|
155
|
+
status: "pending",
|
|
156
|
+
interval: String(interval),
|
|
157
|
+
})
|
|
158
|
+
.expire(authKeyOf(hash), ttl)
|
|
159
|
+
.exec();
|
|
160
|
+
return {
|
|
161
|
+
deviceCode,
|
|
162
|
+
userCode,
|
|
163
|
+
verificationUri: `${web}${DEVICE_PAGE_PATH}`,
|
|
164
|
+
verificationUriComplete: `${web}${DEVICE_PAGE_PATH}?code=${userCode}`,
|
|
165
|
+
interval,
|
|
166
|
+
expiresIn: ttl,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The program's poll: the grant once the person confirmed (the code is consumed), else
|
|
172
|
+
* `device.authorization_pending`, `device.slow_down` (details `[{ interval }]`, the grown
|
|
173
|
+
* interval), `device.denied` or `device.expired` (also for an unknown code).
|
|
174
|
+
*/
|
|
175
|
+
async token(deviceCode) {
|
|
176
|
+
const connectUrl = this.connectUrl();
|
|
177
|
+
if (!DEVICE_CODE_RE.test(deviceCode))
|
|
178
|
+
throw expired();
|
|
179
|
+
const r = (await this.redis.eval(POLL, 1, deviceAuthKey(deviceCode), String(Date.now()), String(POLL_JITTER_MS), String(SLOW_DOWN_STEP_SECONDS)));
|
|
180
|
+
switch (r[0]) {
|
|
181
|
+
case "approved": {
|
|
182
|
+
const grant = JSON.parse(r[1]);
|
|
183
|
+
const device = this.config.get().environments.device;
|
|
184
|
+
return {
|
|
185
|
+
...grant,
|
|
186
|
+
connectUrl,
|
|
187
|
+
reconnectGraceSeconds: device.reconnectGraceSeconds,
|
|
188
|
+
maxFrameBytes: device.maxFrameBytes,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
case "slow_down":
|
|
192
|
+
throw new ApiError("device.slow_down", `Polling too fast; wait ${r[1]} seconds between polls`, [{ interval: Number(r[1]) }]);
|
|
193
|
+
case "denied":
|
|
194
|
+
throw new ApiError("device.denied", "The sign-in was denied in the browser");
|
|
195
|
+
case "pending":
|
|
196
|
+
case "claimed":
|
|
197
|
+
throw new ApiError("device.authorization_pending", "Waiting for the code to be confirmed in the browser");
|
|
198
|
+
default:
|
|
199
|
+
throw expired();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/** The machine waiting behind a user code, for the confirmation page. */
|
|
203
|
+
async pending(userCode) {
|
|
204
|
+
const { info } = await this.lookup(userCode, "pending");
|
|
205
|
+
return { machine: info.machine, expiresAt: info.expiresAt };
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The person confirms a user code: in an org where they may use agents (`agents.use`), into
|
|
209
|
+
* one of their own live device environments or a new one named `name` (` 2`, ` 3`, … appended
|
|
210
|
+
* while the name is taken). One transaction creates the environment if needed, issues the
|
|
211
|
+
* machine (revoking the environment's previous one) and audits
|
|
212
|
+
* `environment.machine_connected` (retried once when a concurrent confirmation took the new
|
|
213
|
+
* name); after the commit the credential is parked for the poll ({@link park}). The code is
|
|
214
|
+
* claimed first, so two confirmations of one code cannot both issue a machine; a confirmation
|
|
215
|
+
* that fails before the commit leaves it pending.
|
|
216
|
+
*/
|
|
217
|
+
async confirm(principal, input) {
|
|
218
|
+
await authorizeOrgAction(this.db.db, principal, input.orgId, "agents.use");
|
|
219
|
+
const { info, hash } = await this.lookup(input.userCode, "pending");
|
|
220
|
+
if (!(await this.transition(hash, "pending", "claimed")))
|
|
221
|
+
throw codeInvalid();
|
|
222
|
+
let issued;
|
|
223
|
+
try {
|
|
224
|
+
issued = await this.confirmIn(principal.account.id, input, info).catch((e) => {
|
|
225
|
+
// a concurrent confirmation took the same new name between our read and our insert
|
|
226
|
+
if (input.name !== undefined &&
|
|
227
|
+
e instanceof ApiError &&
|
|
228
|
+
e.code === "environment.name_taken") {
|
|
229
|
+
return this.confirmIn(principal.account.id, input, info);
|
|
230
|
+
}
|
|
231
|
+
throw e;
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
await this.transition(hash, "claimed", "pending").catch(() => undefined);
|
|
236
|
+
throw e;
|
|
237
|
+
}
|
|
238
|
+
await this.park(hash, info, issued);
|
|
239
|
+
return { environmentId: issued.environmentId };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Parks the committed machine's credential for the poll. When that fails (the code expired
|
|
243
|
+
* meanwhile, or Redis failed) the machine is revoked again, so no credential nobody holds stays
|
|
244
|
+
* valid, and the person is told to start over: `device.expired` / `device.unavailable`.
|
|
245
|
+
*/
|
|
246
|
+
async park(hash, info, issued) {
|
|
247
|
+
let parked;
|
|
248
|
+
let failure;
|
|
249
|
+
try {
|
|
250
|
+
parked = await this.transition(hash, "claimed", "approved", JSON.stringify(issued.grant));
|
|
251
|
+
}
|
|
252
|
+
catch (e) {
|
|
253
|
+
parked = false;
|
|
254
|
+
failure = e;
|
|
255
|
+
}
|
|
256
|
+
if (parked) {
|
|
257
|
+
await this.redis.del(deviceUserKey(info.userCode)).catch((err) => {
|
|
258
|
+
this.log.warn("could not delete a used device user code", { err });
|
|
259
|
+
});
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
this.log.warn("device credential could not be parked; the machine is revoked", {
|
|
263
|
+
environmentId: issued.environmentId,
|
|
264
|
+
machineId: issued.machineId,
|
|
265
|
+
err: failure,
|
|
266
|
+
});
|
|
267
|
+
await this.abandon(issued);
|
|
268
|
+
// the program's next poll then ends with device.expired instead of waiting out the TTL
|
|
269
|
+
await this.redis.del(authKeyOf(hash), deviceUserKey(info.userCode)).catch(() => undefined);
|
|
270
|
+
if (failure === undefined)
|
|
271
|
+
throw expired();
|
|
272
|
+
throw new ApiError("device.unavailable", "The machine could not be connected; run capybara-device login again");
|
|
273
|
+
}
|
|
274
|
+
/** Revokes a machine whose credential never reached the program (see {@link park}). */
|
|
275
|
+
async abandon(issued) {
|
|
276
|
+
const { grant, machineId } = issued;
|
|
277
|
+
if (!(await this.machines.revokeMachine(machineId)))
|
|
278
|
+
return;
|
|
279
|
+
await audit(this.db.db, {
|
|
280
|
+
actorAccountId: issued.accountId,
|
|
281
|
+
orgId: grant.orgId,
|
|
282
|
+
action: "environment.machine_revoked",
|
|
283
|
+
target: grant.environmentId,
|
|
284
|
+
detail: { machineId, reason: "sign_in_incomplete" },
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
/** The person refuses a user code: the program's next poll gets `device.denied`. */
|
|
288
|
+
async deny(userCode) {
|
|
289
|
+
const { info, hash } = await this.lookup(userCode, "pending");
|
|
290
|
+
if (!(await this.transition(hash, "pending", "denied")))
|
|
291
|
+
throw codeInvalid();
|
|
292
|
+
await this.redis.del(deviceUserKey(info.userCode));
|
|
293
|
+
}
|
|
294
|
+
async confirmIn(accountId, input, info) {
|
|
295
|
+
const { orgId } = input;
|
|
296
|
+
let environmentId;
|
|
297
|
+
if (input.name !== undefined) {
|
|
298
|
+
const name = await this.freeName(orgId, accountId, input.name);
|
|
299
|
+
environmentId = (await this.environments.createDevice(orgId, accountId, name)).id;
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
const env = await this.db
|
|
303
|
+
.selectFrom("environments")
|
|
304
|
+
.select("id")
|
|
305
|
+
.where("id", "=", input.environmentId)
|
|
306
|
+
.where("org_id", "=", orgId)
|
|
307
|
+
.where("owner_kind", "=", "personal")
|
|
308
|
+
.where("owner_account_id", "=", accountId)
|
|
309
|
+
.where("source", "=", "device")
|
|
310
|
+
.where("provider", "=", DEVICE_PROVIDER)
|
|
311
|
+
.where("deleted_at", "is", null)
|
|
312
|
+
.forNoKeyUpdate()
|
|
313
|
+
.executeTakeFirst();
|
|
314
|
+
if (!env)
|
|
315
|
+
throw environmentNotFound();
|
|
316
|
+
environmentId = env.id;
|
|
317
|
+
}
|
|
318
|
+
const { machine } = info;
|
|
319
|
+
const { machineId, credential } = await this.machines.issue({
|
|
320
|
+
orgId,
|
|
321
|
+
environmentId,
|
|
322
|
+
accountId,
|
|
323
|
+
...machine,
|
|
324
|
+
});
|
|
325
|
+
await audit(this.db.db, {
|
|
326
|
+
actorAccountId: accountId,
|
|
327
|
+
orgId,
|
|
328
|
+
action: "environment.machine_connected",
|
|
329
|
+
target: environmentId,
|
|
330
|
+
detail: { machineId, ...machine },
|
|
331
|
+
});
|
|
332
|
+
return {
|
|
333
|
+
environmentId,
|
|
334
|
+
machineId,
|
|
335
|
+
accountId,
|
|
336
|
+
grant: { credential, orgId, environmentId },
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
/** `name`, or `name 2`, `name 3`, … : the first that is none of the person's live names. */
|
|
340
|
+
async freeName(orgId, accountId, name) {
|
|
341
|
+
const taken = new Set((await this.db
|
|
342
|
+
.selectFrom("environments")
|
|
343
|
+
.select("name")
|
|
344
|
+
.where("org_id", "=", orgId)
|
|
345
|
+
.where("owner_account_id", "=", accountId)
|
|
346
|
+
.where("deleted_at", "is", null)
|
|
347
|
+
.where("name", "is not", null)
|
|
348
|
+
.execute()).map((r) => r.name.toLowerCase()));
|
|
349
|
+
let candidate = name;
|
|
350
|
+
for (let n = 2; taken.has(candidate.toLowerCase()); n++) {
|
|
351
|
+
const suffix = ` ${n}`;
|
|
352
|
+
candidate = `${name.slice(0, 64 - suffix.length)}${suffix}`;
|
|
353
|
+
}
|
|
354
|
+
return candidate;
|
|
355
|
+
}
|
|
356
|
+
/** The code behind a user code with status `status`, else `device.code_invalid`. */
|
|
357
|
+
async lookup(userCode, status) {
|
|
358
|
+
const code = normalizeUserCode(userCode);
|
|
359
|
+
if (code === null)
|
|
360
|
+
throw codeInvalid();
|
|
361
|
+
const hash = await this.redis.get(deviceUserKey(code));
|
|
362
|
+
if (hash === null)
|
|
363
|
+
throw codeInvalid();
|
|
364
|
+
const [info, current] = await this.redis.hmget(authKeyOf(hash), "info", "status");
|
|
365
|
+
if (info === null || info === undefined || current !== status)
|
|
366
|
+
throw codeInvalid();
|
|
367
|
+
return { info: JSON.parse(info), hash };
|
|
368
|
+
}
|
|
369
|
+
async transition(hash, from, to, grant) {
|
|
370
|
+
const args = grant === undefined ? [from, to] : [from, to, "grant", grant];
|
|
371
|
+
return (await this.redis.eval(TRANSITION, 1, authKeyOf(hash), ...args)) === 1;
|
|
372
|
+
}
|
|
373
|
+
/** `http.publicUrl` without trailing slashes; unset → `environment.unavailable`. */
|
|
374
|
+
publicUrl() {
|
|
375
|
+
const url = this.config.get().http.publicUrl;
|
|
376
|
+
if (!url) {
|
|
377
|
+
throw new ApiError("environment.unavailable", "Connecting machines needs http.publicUrl to be configured; ask the super admin");
|
|
378
|
+
}
|
|
379
|
+
return url.replace(/\/+$/, "");
|
|
380
|
+
}
|
|
381
|
+
/** The machine's WebSocket URL: the public URL with `ws` / `wss` and `/device/connect`. */
|
|
382
|
+
connectUrl() {
|
|
383
|
+
return `${this.publicUrl().replace(/^http/i, "ws")}${DEVICE_CONNECT_PATH}`;
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
__decorate([
|
|
387
|
+
Transactional()
|
|
388
|
+
], DeviceAuthService.prototype, "abandon", null);
|
|
389
|
+
__decorate([
|
|
390
|
+
Transactional()
|
|
391
|
+
], DeviceAuthService.prototype, "confirmIn", null);
|
|
392
|
+
DeviceAuthService = __decorate([
|
|
393
|
+
Injectable(),
|
|
394
|
+
__param(0, Inject(KernelDb)),
|
|
395
|
+
__param(1, Inject(TransactionHost)),
|
|
396
|
+
__param(2, Inject(REDIS)),
|
|
397
|
+
__param(3, Inject(KernelConfigService)),
|
|
398
|
+
__param(4, Inject(EnvironmentsService)),
|
|
399
|
+
__param(5, Inject(MachinesService)),
|
|
400
|
+
__param(6, Inject(KERNEL_LOGGER))
|
|
401
|
+
], DeviceAuthService);
|
|
402
|
+
export { DeviceAuthService };
|
|
403
|
+
const expired = () => new ApiError("device.expired", "This sign-in code has expired or was already used; run capybara-device login again");
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device sign-in (environments spec §13.3): {@link DeviceAuthService} behind
|
|
3
|
+
* `DeviceAuthController`. Kept apart from {@link DevicesModule}, which `EnvironmentsModule`
|
|
4
|
+
* imports (deleting an environment revokes its machine), while sign-in needs both.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DeviceAuthModule {
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
import { Module } from "@nestjs/common";
|
|
8
|
+
import { EnvironmentsModule } from "../environments/environments.module.js";
|
|
9
|
+
import { DeviceAuthService } from "./device-auth.js";
|
|
10
|
+
import { DevicesModule } from "./devices.module.js";
|
|
11
|
+
/**
|
|
12
|
+
* Device sign-in (environments spec §13.3): {@link DeviceAuthService} behind
|
|
13
|
+
* `DeviceAuthController`. Kept apart from {@link DevicesModule}, which `EnvironmentsModule`
|
|
14
|
+
* imports (deleting an environment revokes its machine), while sign-in needs both.
|
|
15
|
+
*/
|
|
16
|
+
let DeviceAuthModule = class DeviceAuthModule {
|
|
17
|
+
};
|
|
18
|
+
DeviceAuthModule = __decorate([
|
|
19
|
+
Module({
|
|
20
|
+
imports: [DevicesModule, EnvironmentsModule],
|
|
21
|
+
providers: [DeviceAuthService],
|
|
22
|
+
exports: [DeviceAuthService],
|
|
23
|
+
})
|
|
24
|
+
], DeviceAuthModule);
|
|
25
|
+
export { DeviceAuthModule };
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { type ExtensionContext } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { WebSocket } from "@fastify/websocket";
|
|
3
|
+
import type { Redis } from "ioredis";
|
|
4
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
5
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
6
|
+
import type { KernelLogger } from "../log.js";
|
|
7
|
+
import { type MachineIdentity, MachinesService } from "./machines.js";
|
|
8
|
+
/** WebSocket close codes the gateway uses (the program reads 4002 and 4003). */
|
|
9
|
+
export declare const DEVICE_CLOSE: {
|
|
10
|
+
/** The kernel is shutting down: reconnect (another gateway replica takes over). */
|
|
11
|
+
readonly shutdown: 1001;
|
|
12
|
+
/** A frame larger than `environments.device.maxFrameBytes` (sent by `ws` itself). */
|
|
13
|
+
readonly tooBig: 1009;
|
|
14
|
+
/** The kernel failed (e.g. the database): reconnect. */
|
|
15
|
+
readonly internal: 1011;
|
|
16
|
+
/** The lease was lost (renewal kept failing or the key was taken): reconnect. */
|
|
17
|
+
readonly leaseLost: 4001;
|
|
18
|
+
/** A newer connection of the environment took over: the program exits. */
|
|
19
|
+
readonly replaced: 4002;
|
|
20
|
+
/** The machine's credential was revoked: the program exits. */
|
|
21
|
+
readonly revoked: 4003;
|
|
22
|
+
/** No valid `hello` first, or a frame that is not protocol v1 from a device. */
|
|
23
|
+
readonly protocol: 4400;
|
|
24
|
+
/** The lease could not be claimed in time: reconnect. */
|
|
25
|
+
readonly claimTimeout: 4409;
|
|
26
|
+
};
|
|
27
|
+
/** How long the program has to send `hello` after the upgrade. */
|
|
28
|
+
export declare const HELLO_TIMEOUT_MS = 10000;
|
|
29
|
+
/** How often a connection is pinged; two pings without a pong close it. */
|
|
30
|
+
export declare const PING_INTERVAL_MS = 20000;
|
|
31
|
+
/** How long a new connection retries the lease after asking the holder to let go. */
|
|
32
|
+
export declare const CLAIM_TIMEOUT_MS = 5000;
|
|
33
|
+
/** The pause between two tries at the lease while claiming. */
|
|
34
|
+
export declare const CLAIM_RETRY_MS = 250;
|
|
35
|
+
type State = "hello" | "claiming" | "holding" | "closed";
|
|
36
|
+
/**
|
|
37
|
+
* One machine connection on this replica. Its state (the socket, the lease handle, the requests
|
|
38
|
+
* it forwarded) is the socket's own and lives exactly as long as the socket.
|
|
39
|
+
*/
|
|
40
|
+
declare class DeviceConnection {
|
|
41
|
+
private readonly gw;
|
|
42
|
+
private readonly socket;
|
|
43
|
+
readonly identity: MachineIdentity;
|
|
44
|
+
private readonly credential;
|
|
45
|
+
readonly token: `${string}-${string}-${string}-${string}-${string}`;
|
|
46
|
+
state: State;
|
|
47
|
+
private lease;
|
|
48
|
+
private readonly unsubscribes;
|
|
49
|
+
private helloTimer;
|
|
50
|
+
private pingTimer;
|
|
51
|
+
private missedPongs;
|
|
52
|
+
private lastTouch;
|
|
53
|
+
private lastAuth;
|
|
54
|
+
/** The drains (and the close after a revocation) run one after another. */
|
|
55
|
+
private chain;
|
|
56
|
+
/** Resolves once the lease is handed back (or was never held). */
|
|
57
|
+
private released;
|
|
58
|
+
constructor(gw: DeviceGateway, socket: WebSocket, identity: MachineIdentity, credential: string);
|
|
59
|
+
get environmentId(): string;
|
|
60
|
+
start(): void;
|
|
61
|
+
private onFrame;
|
|
62
|
+
/**
|
|
63
|
+
* Stores one result and announces it (the relay's wire, relay.ts), only for a request taken for
|
|
64
|
+
* this environment (ruling R20); anything else is dropped.
|
|
65
|
+
*/
|
|
66
|
+
private store;
|
|
67
|
+
/**
|
|
68
|
+
* Claims the environment's lease; true when this connection holds it. The newest connection
|
|
69
|
+
* wins (ruling R21): when another connection holds the lease, a takeover is published (the
|
|
70
|
+
* holder yields to any takeover) and the lease retried every {@link CLAIM_RETRY_MS} for
|
|
71
|
+
* {@link CLAIM_TIMEOUT_MS}, then 4409 (the program reconnects). A claimer never yields.
|
|
72
|
+
*/
|
|
73
|
+
private claim;
|
|
74
|
+
/** Subscribes for this connection; a subscription that completes after the close is ended. */
|
|
75
|
+
private subscribe;
|
|
76
|
+
/** Queues one drain of the request list after the ones already queued. */
|
|
77
|
+
private drain;
|
|
78
|
+
private drainOnce;
|
|
79
|
+
/** The next ping (a chain of timeouts; the lease renewal is LockService's, not this timer's). */
|
|
80
|
+
private schedulePing;
|
|
81
|
+
private ping;
|
|
82
|
+
/** The credential still stands (membership, org and environment are read live). */
|
|
83
|
+
private reauthenticate;
|
|
84
|
+
private traffic;
|
|
85
|
+
/** Closes the socket with `code` and hands the lease back; idempotent. */
|
|
86
|
+
close(code: number, reason: string): Promise<void>;
|
|
87
|
+
/** Stops timers and subscriptions and releases the lease (a lost one is abandoned). */
|
|
88
|
+
shutdown(): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The gateway role's half of the device relay (environments spec §13.4): holds the WebSocket
|
|
92
|
+
* connections of connected machines (`GET /device/connect`, device-routes.ts). One connection per
|
|
93
|
+
* environment across replicas, under the lease `capk:device-lease:<environmentId>` (the newest
|
|
94
|
+
* connection wins: it publishes `device.takeover.<environmentId>` and the holder lets go). The
|
|
95
|
+
* holder drains `capk:device-req:<environmentId>` on every `device.req.<environmentId>` nudge,
|
|
96
|
+
* once after claiming and on every ping, marking each forwarded request taken for its environment
|
|
97
|
+
* (`capk:device-taken:<id>`, TTL the reconnect grace plus the request's deadline plus a margin).
|
|
98
|
+
* A `res` is accepted only for a request taken for the socket's environment: it is stored under
|
|
99
|
+
* `capk:device-res:<id>` for the rest of that TTL and published on `device.res.<id>`.
|
|
100
|
+
* `device.revoked.<environmentId>` closes the connection of that machine only (ruling R16). The
|
|
101
|
+
* sockets are this process's own; everything other replicas need is in Redis.
|
|
102
|
+
*/
|
|
103
|
+
export declare class DeviceGateway {
|
|
104
|
+
readonly machines: Pick<MachinesService, "authenticate" | "recordHello" | "touch">;
|
|
105
|
+
readonly locks: Pick<LockService, "hold">;
|
|
106
|
+
readonly bus: ExtensionContext["bus"];
|
|
107
|
+
readonly redis: Redis;
|
|
108
|
+
private readonly config;
|
|
109
|
+
readonly log: Pick<KernelLogger, "info" | "warn">;
|
|
110
|
+
/** This replica's open connections (the sockets cannot live anywhere else). */
|
|
111
|
+
private readonly connections;
|
|
112
|
+
private stopping;
|
|
113
|
+
/** How often connections are pinged ({@link PING_INTERVAL_MS}; a test seam). */
|
|
114
|
+
pingIntervalMs: number;
|
|
115
|
+
constructor(machines: Pick<MachinesService, "authenticate" | "recordHello" | "touch">, locks: Pick<LockService, "hold">, bus: ExtensionContext["bus"], redis: Redis, config: KernelConfigService, log: Pick<KernelLogger, "info" | "warn">);
|
|
116
|
+
graceMs(): number;
|
|
117
|
+
leaseTtlMs(): number;
|
|
118
|
+
maxFrameBytes(): number;
|
|
119
|
+
/** Who a `Bearer` machine credential stands for, or null (checked before the upgrade). */
|
|
120
|
+
authenticate(credential: string): Promise<MachineIdentity | null>;
|
|
121
|
+
/** Serves one upgraded socket of an authenticated machine until it closes. */
|
|
122
|
+
accept(socket: WebSocket, identity: MachineIdentity, credential: string): void;
|
|
123
|
+
/** @internal a connection that ended. */
|
|
124
|
+
forget(conn: DeviceConnection): void;
|
|
125
|
+
/** Closes every connection (1001) and hands their leases back. */
|
|
126
|
+
stop(): Promise<void>;
|
|
127
|
+
}
|
|
128
|
+
export {};
|