@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
package/dist/kernel.js
CHANGED
|
@@ -1,153 +1,19 @@
|
|
|
1
1
|
import { fileURLToPath } from "node:url";
|
|
2
|
-
import { CHANNEL_EXTENSION_POINT, DIRECTORY_EXTENSION_POINT, OBJECT_STORE_EXTENSION_POINT, SANDBOX_EXTENSION_POINT, } from "@capybara-hq/plugin-sdk";
|
|
3
|
-
import { Redis } from "ioredis";
|
|
4
|
-
import { sql } from "kysely";
|
|
5
|
-
import { AgentsService } from "./agents/agents.service.js";
|
|
6
|
-
import { CatalogService } from "./catalog/catalog.service.js";
|
|
7
|
-
import { fetchMarketplaceArchive, marketplaceNetPolicy } from "./catalog/marketplace-fetch.js";
|
|
8
|
-
import { MARKETPLACES_REFRESH_DEADLINE_MS, MarketplacesService, } from "./catalog/marketplaces.service.js";
|
|
9
|
-
import { PluginImport } from "./catalog/plugin-import.js";
|
|
10
|
-
import { CHANNEL_CHANGED_TOPIC, ChannelConnections } from "./channels/connections.service.js";
|
|
11
|
-
import { ChannelInbound } from "./channels/inbound.js";
|
|
12
|
-
import { ChannelOutbound } from "./channels/outbound.js";
|
|
13
|
-
import { ChannelSupervisor, checkGatewayPresence, GATEWAY_CHECK_EVERY_MS, GATEWAY_CHECK_JOB, GATEWAY_CHECK_SCHEDULER_ID, } from "./channels/supervisor.js";
|
|
14
|
-
import { ChannelWebhooks } from "./channels/webhook.js";
|
|
15
|
-
import { changedPaths, configFields, getPath, secretValues, setPath } from "./config/fields.js";
|
|
16
|
-
import { resolveConfig } from "./config/load.js";
|
|
17
|
-
import { KernelConfigSchema } from "./config/schema.js";
|
|
18
|
-
import { configSourceKind, extensionConfigSources, } from "./config/sources.js";
|
|
19
|
-
import { ATTACHMENT_CLEANUP_EVERY_MS, ATTACHMENT_CLEANUP_JOB, ATTACHMENT_CLEANUP_SCHEDULER_ID, AttachmentsService, } from "./conversations/attachments.service.js";
|
|
20
|
-
import { ConversationsService } from "./conversations/conversations.service.js";
|
|
21
|
-
import { conversationTopic, EventLog, } from "./conversations/event-log.js";
|
|
22
|
-
import { TitleQueue } from "./conversations/titles.js";
|
|
23
|
-
import { createBus, createBusSubscriber } from "./ctx/bus.js";
|
|
24
|
-
import { createKeyring } from "./ctx/secrets.js";
|
|
25
|
-
import { kernelDb } from "./db/kernel-schema.js";
|
|
26
2
|
import { migrate } from "./db/migrator.js";
|
|
27
|
-
import { createDb } from "./db/pool.js";
|
|
28
|
-
import { EvalQueue } from "./evals/runs.service.js";
|
|
29
|
-
import { EvalWorker } from "./evals/worker.js";
|
|
30
|
-
import { ExtensionAdminOps } from "./extensions/admin-ops.js";
|
|
31
|
-
import { ExtensionAdmin } from "./extensions/admin-view.js";
|
|
32
|
-
import { ExtensionBlobs } from "./extensions/blobs.js";
|
|
33
|
-
import { BootstrapFailedError, BootstrapService, bootstrapManifestSha256, readBootstrapManifest, } from "./extensions/bootstrap.js";
|
|
34
|
-
import { ExtensionDeploymentConfigService, schemaFields, staticDeploymentSchema, } from "./extensions/deployment-config.js";
|
|
35
3
|
import { ExtensionHost } from "./extensions/host.js";
|
|
36
|
-
import { ExtensionInstalls } from "./extensions/installs.js";
|
|
37
|
-
import { ExtensionLifecycle, PLUGINS_RECONCILE_JOB, PLUGINS_RECONCILE_SCHEDULER_ID, PLUGINS_RECONCILE_TOPIC, STALE_RECONCILE_PERIODS, } from "./extensions/lifecycle.js";
|
|
38
|
-
import { ensureMigrated } from "./extensions/migrate-lock.js";
|
|
39
|
-
import { OrgExtensionConfigs } from "./extensions/org-config.js";
|
|
40
|
-
import { newReplicaId, ReplicaStatusStore } from "./extensions/sources.js";
|
|
41
|
-
import { syncPackage } from "./extensions/sync.js";
|
|
42
|
-
import { ApiModule } from "./http/api.module.js";
|
|
43
|
-
import { createHttpApp } from "./http/app.js";
|
|
44
|
-
import { AccountsService } from "./identity/accounts.js";
|
|
45
|
-
import { IdentityBinding } from "./identity/binding.js";
|
|
46
|
-
import { ExternalIdentities } from "./identity/external.js";
|
|
47
|
-
import { SessionService } from "./identity/sessions.js";
|
|
48
|
-
import { SettingsService } from "./identity/settings.js";
|
|
49
|
-
import { SsoFlow } from "./identity/sso.js";
|
|
50
|
-
import { createLogger } from "./log.js";
|
|
51
|
-
import { PricesService } from "./models/prices.js";
|
|
52
|
-
import { ModelPurposesService } from "./models/purposes.js";
|
|
53
|
-
import { DirectorySync } from "./orgs/directory-sync.js";
|
|
54
|
-
import { Offboarding } from "./orgs/offboarding.js";
|
|
55
|
-
import { RunAbort } from "./runtime/abort.js";
|
|
56
|
-
import { KyselyCheckpointSaver } from "./runtime/checkpointer.js";
|
|
57
|
-
import { ConversationLock } from "./runtime/conversation-lock.js";
|
|
58
|
-
import { LangGraphLoop } from "./runtime/langgraph-loop.js";
|
|
59
|
-
import { MARKETPLACES_REFRESH_JOB, MARKETPLACES_REFRESH_SCHEDULER_ID, Maintenance, PLUGIN_STAGING_CLEANUP_EVERY_MS, PLUGIN_STAGING_CLEANUP_JOB, PLUGIN_STAGING_CLEANUP_SCHEDULER_ID, } from "./runtime/maintenance.js";
|
|
60
|
-
import { ProviderRegistry } from "./runtime/providers.js";
|
|
61
|
-
import { EVAL_QUOTA_PREFIX, OrgQuota } from "./runtime/quota.js";
|
|
62
|
-
import { RunQueue } from "./runtime/run-queue.js";
|
|
63
|
-
import { RunWorker } from "./runtime/run-worker.js";
|
|
64
|
-
import { onChildFinished, stopChildren } from "./runtime/subagents/child.js";
|
|
65
|
-
import { dispatchSubagent } from "./runtime/subagents/dispatch.js";
|
|
66
|
-
import { publishSubagentProgress } from "./runtime/subagents/progress.js";
|
|
67
|
-
import { liveSkillForks } from "./runtime/subagents/skill-fork.js";
|
|
68
|
-
import { queryUnservable, queryUsageSubscribers, USAGE_SWEEP_EVERY_MS, USAGE_SWEEP_JOB, USAGE_SWEEP_SCHEDULER_ID, UsageReporter, } from "./runtime/usage-report.js";
|
|
69
|
-
import { Waits } from "./runtime/waits.js";
|
|
70
|
-
import { registerSandboxMaintenance, scheduleSandboxDestroy } from "./sandbox/lifecycle.js";
|
|
71
|
-
import { SandboxService, sandboxConfigWarnings } from "./sandbox/sandbox.service.js";
|
|
72
|
-
import { SkillChangesService } from "./skills/changes.service.js";
|
|
73
|
-
import { SkillInvoker } from "./skills/invoke.js";
|
|
74
|
-
import { SkillsService } from "./skills/skills.service.js";
|
|
75
|
-
import { purgeDeletedOrgStorage, STORAGE_PURGE_EVERY_MS, STORAGE_PURGE_JOB, STORAGE_PURGE_SCHEDULER_ID, } from "./storage/purge.js";
|
|
76
|
-
import { StorageService } from "./storage/storage.service.js";
|
|
77
|
-
import { ApprovalsService } from "./tools/approvals.service.js";
|
|
78
|
-
import { Breaker } from "./tools/breaker.js";
|
|
79
|
-
import { agentTool } from "./tools/builtins/agent.js";
|
|
80
|
-
import { askUserTool } from "./tools/builtins/ask-user.js";
|
|
81
|
-
import { readToolOutputTool } from "./tools/builtins/read-tool-output.js";
|
|
82
|
-
import { sandboxTools } from "./tools/builtins/sandbox/index.js";
|
|
83
|
-
import { skillLoadTool } from "./tools/builtins/skill-load.js";
|
|
84
|
-
import { skillWriteTool } from "./tools/builtins/skill-write.js";
|
|
85
|
-
import { toolSearchTool } from "./tools/builtins/tool-search.js";
|
|
86
|
-
import { ConnectorContent } from "./tools/connector-content.js";
|
|
87
|
-
import { Credentials } from "./tools/credentials.js";
|
|
88
|
-
import { ToolDrift } from "./tools/drift.js";
|
|
89
|
-
import { ToolOutputs } from "./tools/outputs.js";
|
|
90
|
-
import { ToolPipeline } from "./tools/pipeline.js";
|
|
91
|
-
import { QuestionsService } from "./tools/questions.service.js";
|
|
92
|
-
import { ToolRegistry } from "./tools/registry.js";
|
|
93
4
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
5
|
+
* The kernel migrations directory. `src/` and `dist/` are both one level below the package root,
|
|
6
|
+
* so this always points at `<package root>/src/migrations`: running from source with tsx and
|
|
7
|
+
* running the tsc output resolve to the same directory (the SQL files are not copied into dist;
|
|
8
|
+
* the package ships `src/migrations`).
|
|
96
9
|
*/
|
|
97
10
|
export const KERNEL_MIGRATIONS_DIR = fileURLToPath(new URL("../src/migrations/", import.meta.url));
|
|
98
|
-
/**
|
|
11
|
+
/** The kernel's PG schema. */
|
|
99
12
|
export const KERNEL_SCHEMA = "capybara";
|
|
100
|
-
/** 优雅停机的总时限:超时后强制关闭剩余资源。 */
|
|
101
|
-
const STOP_TIMEOUT_MS = 30_000;
|
|
102
13
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* http 阶段是一个截止时间:先等进行中的监听完成(否则关闭会与监听交错留下端口),再关闭 HTTP,
|
|
107
|
-
* 两步共用这 10s;到点仍未关完就强制断开所有连接。
|
|
108
|
-
* runs 阶段(从原插件阶段的 15s 中划出 10s):本进程的运行收到停机信号,在下一个步骤边界停下、
|
|
109
|
-
* 任务回到队列;超出预算的运行交给 BullMQ stalled 机制由其他 worker 续跑(spec 8.5)。
|
|
110
|
-
* 因此任一前序阶段卡死时,插件队列仍至少有 5s 排空,总时长不超过 30s。
|
|
111
|
-
*/
|
|
112
|
-
export const STOP_BUDGET_MS = {
|
|
113
|
-
migrate: 2_000,
|
|
114
|
-
http: 10_000,
|
|
115
|
-
runs: 10_000,
|
|
116
|
-
plugins: 5_000,
|
|
117
|
-
};
|
|
118
|
-
/** 停机时留给渠道长连接交还租约的最少时间(与 runs 阶段并行开始,runs 用尽预算时仍保底)。 */
|
|
119
|
-
const CHANNELS_STOP_MIN_MS = 2_000;
|
|
120
|
-
/** runs 阶段里留给强制关闭 worker 的余量(预算的其余部分用于等运行到达步骤边界)。 */
|
|
121
|
-
const RUNS_FORCE_CLOSE_MS = 500;
|
|
122
|
-
/**
|
|
123
|
-
* 可热更新字段的应用函数:键为 schema 中标记 `hot` 的点路径。
|
|
124
|
-
* 新增 hot 字段而漏写这里时 createKernel 直接抛错,避免「标了 hot 但从不生效」。
|
|
125
|
-
*/
|
|
126
|
-
const HOT_APPLIERS = {
|
|
127
|
-
"log.level": (k, v) => k.log.setLevel(String(v)),
|
|
128
|
-
// 并发上限由运行时在每次取额度时经 `config()` 读取当前值,替换配置即生效,无需额外动作。
|
|
129
|
-
"runtime.orgConcurrency": () => { },
|
|
130
|
-
// 评测的组织并发同样在每次取额度时经 `config()` 读取当前值。
|
|
131
|
-
"evals.orgConcurrency": () => { },
|
|
132
|
-
// 登录方式与受信任的身份源在每次请求时经 `config()` 读取,替换配置即生效。
|
|
133
|
-
"auth.loginSources": () => { },
|
|
134
|
-
"auth.trustedIdentitySources": () => { },
|
|
135
|
-
// The hook registry reads the time limit through `config()` on every run.
|
|
136
|
-
"hooks.timeoutMs": () => { },
|
|
137
|
-
// SandboxService reads the shared-lease cap through `config()` at every acquisition.
|
|
138
|
-
"sandbox.maxConcurrentCommands": () => { },
|
|
139
|
-
// Sub-agent limits are read through `config()` at every dispatch, child step and tool resolution.
|
|
140
|
-
"subagents.maxConcurrentPerRun": () => { },
|
|
141
|
-
"subagents.maxDispatchesPerRun": () => { },
|
|
142
|
-
"subagents.maxTokensPerRun": () => { },
|
|
143
|
-
};
|
|
144
|
-
const HOT_PATHS = configFields(KernelConfigSchema)
|
|
145
|
-
.filter((f) => f.meta?.hot)
|
|
146
|
-
.map((f) => f.path);
|
|
147
|
-
const errMsg = (e) => (e instanceof Error ? e.message : String(e));
|
|
148
|
-
/**
|
|
149
|
-
* 运行内核迁移与所有已配置插件的迁移(不调用插件 setup,不连接 Redis)。
|
|
150
|
-
* 权限待批准的插件不迁移(`extensionPermissions.autoApprove` 时除外),经 `opts.onPending` 报告。
|
|
14
|
+
* Runs the kernel migrations and those of every configured extension (no extension `setup`, no
|
|
15
|
+
* Redis connection). Extensions whose permissions await approval are not migrated (unless
|
|
16
|
+
* `extensionPermissions.autoApprove`); they are reported through `opts.onPending`.
|
|
151
17
|
*/
|
|
152
18
|
export async function migrateAll(config, opts = {}) {
|
|
153
19
|
const connectTimeoutMs = config.db.connectTimeoutMs;
|
|
@@ -161,1166 +27,3 @@ export async function migrateAll(config, opts = {}) {
|
|
|
161
27
|
});
|
|
162
28
|
return [{ schema: KERNEL_SCHEMA, applied: kernel.applied }, ...plugins];
|
|
163
29
|
}
|
|
164
|
-
/** 构建内核:创建连接(Redis 惰性连接)、插件宿主与 HTTP 应用;`start()` 才真正连接、迁移、加载插件与监听。 */
|
|
165
|
-
export async function createKernel(config, opts = {}) {
|
|
166
|
-
for (const p of HOT_PATHS) {
|
|
167
|
-
if (!HOT_APPLIERS[p])
|
|
168
|
-
throw new Error(`config field ${p} is marked hot but has no applier`);
|
|
169
|
-
}
|
|
170
|
-
const env = opts.env ?? process.env;
|
|
171
|
-
const log = opts.logger ?? createLogger(config.log.level);
|
|
172
|
-
log.setLevel(config.log.level);
|
|
173
|
-
log.addSecrets(secretValues(KernelConfigSchema, config));
|
|
174
|
-
let current = config;
|
|
175
|
-
let started = false;
|
|
176
|
-
let stopRequested = false;
|
|
177
|
-
let stopPromise;
|
|
178
|
-
let startPromise;
|
|
179
|
-
let port;
|
|
180
|
-
let listenPromise;
|
|
181
|
-
/** 进行中的内核迁移;stop() 中止它并等其会话结束。 */
|
|
182
|
-
let migratePromise;
|
|
183
|
-
const startAbort = new AbortController();
|
|
184
|
-
let unwatch;
|
|
185
|
-
/** 渠道 supervisor 对插件注册表变化的订阅(停机时取消)。 */
|
|
186
|
-
let unwatchPlugins;
|
|
187
|
-
const redis = new Redis(config.redis.url, { lazyConnect: true });
|
|
188
|
-
redis.on("error", (err) => log.error("redis connection error", { err }));
|
|
189
|
-
const busSubscriber = createBusSubscriber(() => new Redis(config.redis.url), log);
|
|
190
|
-
const db = createDb(config.db.url, config.db.poolMax, (err) => log.error("pg idle client error", { err }), { connectTimeoutMs: config.db.connectTimeoutMs });
|
|
191
|
-
const keyring = createKeyring(Buffer.from(config.masterKey, "base64"), config.masterKeyPrevious.map((k) => Buffer.from(k, "base64")));
|
|
192
|
-
const deps = {
|
|
193
|
-
db,
|
|
194
|
-
dbUrl: config.db.url,
|
|
195
|
-
connectTimeoutMs: config.db.connectTimeoutMs,
|
|
196
|
-
redis,
|
|
197
|
-
busSubscriber,
|
|
198
|
-
redisUrl: config.redis.url,
|
|
199
|
-
keyring,
|
|
200
|
-
runWorkers: config.roles.includes("worker"),
|
|
201
|
-
log,
|
|
202
|
-
};
|
|
203
|
-
const replicaId = newReplicaId();
|
|
204
|
-
const replicaStatus = new ReplicaStatusStore(kernelDb(db), replicaId, config.http.replicaId === undefined ? undefined : String(config.http.replicaId), (text) => log.redact(text));
|
|
205
|
-
const host = new ExtensionHost(deps, config.extensionConfig, {
|
|
206
|
-
...(opts.resolveFrom !== undefined && { resolveFrom: opts.resolveFrom }),
|
|
207
|
-
onSecrets: (v) => log.addSecrets(v),
|
|
208
|
-
autoApprove: config.extensionPermissions.autoApprove,
|
|
209
|
-
status: replicaStatus,
|
|
210
|
-
drainMs: () => current.extensionHost.drainSeconds * 1000,
|
|
211
|
-
disposeTimeoutMs: () => current.extensionHost.disposeTimeoutSeconds * 1000,
|
|
212
|
-
reloadSetupTimeoutMs: () => current.extensionHost.reloadSetupTimeoutSeconds * 1000,
|
|
213
|
-
hookTimeoutMs: () => current.hooks.timeoutMs,
|
|
214
|
-
// Extensions the route gate treats as "known to the deployment": install records (any desired_state); extensionInstalls is created below and read at call time
|
|
215
|
-
installedNames: async () => (await extensionInstalls.list()).map((r) => r.name),
|
|
216
|
-
// 生效部署配置 = 启动配置补上 PG 里保存的字段(C10);服务在下面创建,调用时才取
|
|
217
|
-
deploymentConfig: (plugin, fileValue, schema) => extensionDeploymentConfigs.effective(plugin, fileValue, schema),
|
|
218
|
-
});
|
|
219
|
-
const orgExtensionConfigs = new OrgExtensionConfigs(kernelDb(db), keyring, host, {
|
|
220
|
-
onSecrets: (v) => log.addOrgSecrets(v),
|
|
221
|
-
// 组织停用插件:该插件的渠道连接立即断开(扫描复核只是兜底)
|
|
222
|
-
afterPut: async (orgId, plugin, enabled) => {
|
|
223
|
-
if (!enabled)
|
|
224
|
-
await channelConnections.notifyOrgChanged(orgId, plugin);
|
|
225
|
-
},
|
|
226
|
-
// 部署上停用的安装记录插件:组织页显示「不可用」,组织的启用开关不变(T14)
|
|
227
|
-
installed: async () => (await extensionInstalls.list()).map((r) => ({ name: r.name, version: r.version })),
|
|
228
|
-
});
|
|
229
|
-
const servePlugins = config.roles.includes("api") || config.roles.includes("gateway");
|
|
230
|
-
const kdb = kernelDb(db);
|
|
231
|
-
const bus = createBus(redis, busSubscriber, "kernel", log);
|
|
232
|
-
// 每次日志推进后给有 IM 投递目标的会话排出站任务(任务追上后空闲即结束,之后的事件靠这里续上)
|
|
233
|
-
const eventLog = new EventLog(kdb, bus, log, (conversationId) => enqueueOutbound(conversationId));
|
|
234
|
-
const registry = new ProviderRegistry(host, redis, log);
|
|
235
|
-
const credentials = new Credentials(kdb, keyring, log, { redis, config: () => current });
|
|
236
|
-
const toolOutputs = new ToolOutputs(kdb, () => current);
|
|
237
|
-
// 内置工具;tool_search 由注册表按组织设置与阈值自动加入(不进 agent 定义)。
|
|
238
|
-
// 沙箱工具依赖下面才创建的存储、附件与沙箱服务,创建后追加进同一个数组(注册表每次调用时读它)。
|
|
239
|
-
const builtins = [
|
|
240
|
-
askUserTool({ config: () => current }),
|
|
241
|
-
readToolOutputTool({ outputs: toolOutputs, config: () => current }),
|
|
242
|
-
toolSearchTool(),
|
|
243
|
-
// dispatches sub-agents; the tool pipeline handles its calls (sub-agents spec §4, §7.1)
|
|
244
|
-
agentTool,
|
|
245
|
-
];
|
|
246
|
-
const toolRegistry = new ToolRegistry({
|
|
247
|
-
db: kdb,
|
|
248
|
-
host,
|
|
249
|
-
credentials,
|
|
250
|
-
log,
|
|
251
|
-
builtins,
|
|
252
|
-
config: () => current,
|
|
253
|
-
});
|
|
254
|
-
// 审批决定 / 输入回答提交后续跑(waits 在下面创建;回调只在运行期间被调用)
|
|
255
|
-
const approvals = new ApprovalsService({
|
|
256
|
-
db: kdb,
|
|
257
|
-
eventLog,
|
|
258
|
-
config: () => current,
|
|
259
|
-
log,
|
|
260
|
-
onDecided: async (a) => {
|
|
261
|
-
await waits.resume(a.runId, a.id);
|
|
262
|
-
enqueueOutbound(a.conversationId);
|
|
263
|
-
},
|
|
264
|
-
});
|
|
265
|
-
const questions = new QuestionsService({
|
|
266
|
-
db: kdb,
|
|
267
|
-
eventLog,
|
|
268
|
-
config: () => current,
|
|
269
|
-
log,
|
|
270
|
-
onAnswered: async (q) => {
|
|
271
|
-
await waits.resume(q.runId, q.id);
|
|
272
|
-
enqueueOutbound(q.conversationId);
|
|
273
|
-
},
|
|
274
|
-
});
|
|
275
|
-
const maintenance = new Maintenance({ db: kdb, redisUrl: config.redis.url, log });
|
|
276
|
-
// 对象存储:提供方在 host.load() 之后才就绪,按调用时取
|
|
277
|
-
const storage = new StorageService({
|
|
278
|
-
provider: () => host.list("object-store").find((e) => e.capability === OBJECT_STORE_EXTENSION_POINT)?.impl,
|
|
279
|
-
// 可能存过数据的插件:已批准过权限的(含已卸载的)与当前加载的
|
|
280
|
-
plugins: async () => {
|
|
281
|
-
const rows = await kdb
|
|
282
|
-
.selectFrom("extension_permission_snapshots")
|
|
283
|
-
.select("plugin")
|
|
284
|
-
.execute();
|
|
285
|
-
return [...rows.map((r) => r.plugin), ...host.manifests().map((m) => m.name)];
|
|
286
|
-
},
|
|
287
|
-
});
|
|
288
|
-
// 插件包:有对象存储放 deployment/plugins/blobs/,否则放 PG;安装记录与包的导入
|
|
289
|
-
const extensionBlobs = new ExtensionBlobs({
|
|
290
|
-
db: kdb,
|
|
291
|
-
storage,
|
|
292
|
-
maxBytes: () => current.packages.maxBytes,
|
|
293
|
-
});
|
|
294
|
-
const extensionInstalls = new ExtensionInstalls({
|
|
295
|
-
db: kdb,
|
|
296
|
-
blobs: extensionBlobs,
|
|
297
|
-
config: () => current,
|
|
298
|
-
declared: () => host.declared(),
|
|
299
|
-
});
|
|
300
|
-
const extensionAdmin = new ExtensionAdmin({
|
|
301
|
-
db: kdb,
|
|
302
|
-
blobs: extensionBlobs,
|
|
303
|
-
installs: extensionInstalls,
|
|
304
|
-
config: () => current,
|
|
305
|
-
host,
|
|
306
|
-
bus,
|
|
307
|
-
log,
|
|
308
|
-
// 批准后等本副本 reconcile 一次再返回视图(其他副本经 bus 收敛)
|
|
309
|
-
reconcile: (reason) => extensionLifecycle.reconcile(reason),
|
|
310
|
-
});
|
|
311
|
-
// 插件生命周期(C16):后台 / CLI 只写期望状态并发布 kernel.plugins.changed,各副本订阅后 reconcile;
|
|
312
|
-
// 维护任务 plugins-reconcile 每 extensionHost.reconcileIntervalSeconds 秒发布 kernel.plugins.reconcile 兜底
|
|
313
|
-
const extensionLifecycle = new ExtensionLifecycle({
|
|
314
|
-
host,
|
|
315
|
-
bus,
|
|
316
|
-
status: replicaStatus,
|
|
317
|
-
installedNames: async () => (await extensionInstalls.list()).map((r) => r.name),
|
|
318
|
-
reconcileIntervalSeconds: () => current.extensionHost.reconcileIntervalSeconds,
|
|
319
|
-
log,
|
|
320
|
-
});
|
|
321
|
-
const extensionAdminOps = new ExtensionAdminOps({
|
|
322
|
-
db: kdb,
|
|
323
|
-
view: (name) => extensionAdmin.get(name, { allowUnreadable: true }),
|
|
324
|
-
declared: () => host.declared(),
|
|
325
|
-
blobs: extensionBlobs,
|
|
326
|
-
config: () => current,
|
|
327
|
-
bus,
|
|
328
|
-
reconcile: (reason) => extensionLifecycle.reconcile(reason),
|
|
329
|
-
log,
|
|
330
|
-
});
|
|
331
|
-
const findConnector = (plugin, kind) => host
|
|
332
|
-
.list("connector")
|
|
333
|
-
.find((e) => e.plugin === plugin && e.impl?.kind === kind)?.impl;
|
|
334
|
-
// Plugin import (spec §4.3): one review for every plugin; staged for 24 hours, the maintenance
|
|
335
|
-
// job app-staging-cleanup removes expired staging every hour
|
|
336
|
-
const pluginImport = new PluginImport({
|
|
337
|
-
db: kdb,
|
|
338
|
-
config: () => current,
|
|
339
|
-
storage,
|
|
340
|
-
installs: extensionInstalls,
|
|
341
|
-
ops: extensionAdminOps,
|
|
342
|
-
blobs: extensionBlobs,
|
|
343
|
-
declared: () => host.declared(),
|
|
344
|
-
findConnector,
|
|
345
|
-
pluginVersion: (name) => host.manifests().find((m) => m.name === name)?.version,
|
|
346
|
-
log,
|
|
347
|
-
});
|
|
348
|
-
/** Config-declared extension names, resolved in start() before the bootstrap step. */
|
|
349
|
-
let configDeclared = new Set();
|
|
350
|
-
const bootstrap = new BootstrapService({
|
|
351
|
-
db: kdb,
|
|
352
|
-
dbUrl: config.db.url,
|
|
353
|
-
connectTimeoutMs: config.db.connectTimeoutMs,
|
|
354
|
-
declared: () => configDeclared,
|
|
355
|
-
config: () => current,
|
|
356
|
-
imports: pluginImport,
|
|
357
|
-
installs: extensionInstalls,
|
|
358
|
-
ops: extensionAdminOps,
|
|
359
|
-
log,
|
|
360
|
-
});
|
|
361
|
-
/**
|
|
362
|
-
* Runs the bootstrap step unless it is done for the manifest. A required entry that cannot be
|
|
363
|
-
* completed (or a missing / tampered package: then nothing was installed) stops the start, so the
|
|
364
|
-
* kernel never serves without a required plugin. A failed optional entry is logged and returns
|
|
365
|
-
* true: start() runs the step once more after the extensions loaded (a declarative entry's catalog
|
|
366
|
-
* files need the object store, which on a fresh deployment is itself a bootstrap plugin), and the
|
|
367
|
-
* next start tries again while it stays incomplete.
|
|
368
|
-
*/
|
|
369
|
-
let bootstrapCarry;
|
|
370
|
-
const runBootstrap = async (dir, final = false) => {
|
|
371
|
-
const manifest = opts.bootstrapManifest ?? (await readBootstrapManifest());
|
|
372
|
-
if (await bootstrap.isDone(bootstrapManifestSha256(manifest)))
|
|
373
|
-
return false;
|
|
374
|
-
try {
|
|
375
|
-
// The second pass records what the first one did (not `kept` for what it installed)
|
|
376
|
-
await bootstrap.run({
|
|
377
|
-
manifest,
|
|
378
|
-
dir,
|
|
379
|
-
signal: startAbort.signal,
|
|
380
|
-
...(bootstrapCarry !== undefined && { carry: bootstrapCarry }),
|
|
381
|
-
});
|
|
382
|
-
return false;
|
|
383
|
-
}
|
|
384
|
-
catch (e) {
|
|
385
|
-
if (e instanceof BootstrapFailedError && !e.requiredFailed) {
|
|
386
|
-
bootstrapCarry = e.results;
|
|
387
|
-
if (final) {
|
|
388
|
-
log.error("bootstrap: optional plugins could not be installed; retried on the next start", {
|
|
389
|
-
failures: e.failures,
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
else {
|
|
393
|
-
log.warn("bootstrap: optional plugins could not be installed yet; retried once the extensions have loaded", { failures: e.failures });
|
|
394
|
-
}
|
|
395
|
-
return true;
|
|
396
|
-
}
|
|
397
|
-
throw e;
|
|
398
|
-
}
|
|
399
|
-
};
|
|
400
|
-
maintenance.handle(PLUGIN_STAGING_CLEANUP_JOB, async () => {
|
|
401
|
-
const n = await pluginImport.cleanupExpired();
|
|
402
|
-
if (n > 0)
|
|
403
|
-
log.info("expired plugin imports cleaned up", { count: n });
|
|
404
|
-
});
|
|
405
|
-
maintenance.schedule({
|
|
406
|
-
id: PLUGIN_STAGING_CLEANUP_SCHEDULER_ID,
|
|
407
|
-
name: PLUGIN_STAGING_CLEANUP_JOB,
|
|
408
|
-
everyMs: () => PLUGIN_STAGING_CLEANUP_EVERY_MS,
|
|
409
|
-
});
|
|
410
|
-
// Marketplaces (D16 / C26): official is synced from config at startup; the maintenance job
|
|
411
|
-
// catalogs-refresh periodically refreshes every enabled marketplace
|
|
412
|
-
const marketplaces = new MarketplacesService({ db: kdb, config: () => current, keyring, log });
|
|
413
|
-
// Enterprise catalog (D9 / C21): every item is a plugin, imported through pluginImport;
|
|
414
|
-
// extensionAdminOps installs an item's extension on the deployment
|
|
415
|
-
const catalog = new CatalogService({
|
|
416
|
-
db: kdb,
|
|
417
|
-
config: () => current,
|
|
418
|
-
installs: extensionInstalls,
|
|
419
|
-
ops: extensionAdminOps,
|
|
420
|
-
pluginImport,
|
|
421
|
-
fetchArchive: (archive, signal) => fetchMarketplaceArchive(archive, {
|
|
422
|
-
maxBytes: current.packages.maxBytes,
|
|
423
|
-
timeoutMs: 120_000,
|
|
424
|
-
net: marketplaceNetPolicy(current),
|
|
425
|
-
...(signal !== undefined && { signal }),
|
|
426
|
-
}),
|
|
427
|
-
marketplaceToken: (id) => marketplaces.token(id),
|
|
428
|
-
});
|
|
429
|
-
maintenance.handle(MARKETPLACES_REFRESH_JOB, async () => {
|
|
430
|
-
await marketplaces.refreshAll(AbortSignal.timeout(MARKETPLACES_REFRESH_DEADLINE_MS));
|
|
431
|
-
});
|
|
432
|
-
maintenance.schedule({
|
|
433
|
-
id: MARKETPLACES_REFRESH_SCHEDULER_ID,
|
|
434
|
-
name: MARKETPLACES_REFRESH_JOB,
|
|
435
|
-
everyMs: () => current.marketplaces.refreshIntervalMinutes * 60_000,
|
|
436
|
-
});
|
|
437
|
-
// 部署级插件配置(D8 / C10):启动配置里有的字段只读;保存后发布 kernel.plugin-deployment-config,各副本重读
|
|
438
|
-
const extensionDeploymentConfigs = new ExtensionDeploymentConfigService({
|
|
439
|
-
db: kdb,
|
|
440
|
-
keyring,
|
|
441
|
-
fileConfig: () => current.extensionConfig,
|
|
442
|
-
sources: opts.extensionConfigSources ??
|
|
443
|
-
extensionConfigSources({ extensionConfig: config.extensionConfig }, env, configSourceKind(env)),
|
|
444
|
-
schemaOf: async (plugin) => {
|
|
445
|
-
const local = host.deploymentSchema(plugin);
|
|
446
|
-
if (local)
|
|
447
|
-
return { ...local, fields: schemaFields(local.schema) };
|
|
448
|
-
// 与配置声明重名的安装记录不生效
|
|
449
|
-
if (host.declared().has(plugin))
|
|
450
|
-
return undefined;
|
|
451
|
-
return staticDeploymentSchema(kdb, plugin);
|
|
452
|
-
},
|
|
453
|
-
bus,
|
|
454
|
-
applyLocal: (plugin) => extensionLifecycle.applyConfig(plugin),
|
|
455
|
-
onSecrets: (v) => log.addSecrets(v),
|
|
456
|
-
log,
|
|
457
|
-
});
|
|
458
|
-
maintenance.handle(PLUGINS_RECONCILE_JOB, async () => {
|
|
459
|
-
await bus.publish(PLUGINS_RECONCILE_TOPIC, {});
|
|
460
|
-
});
|
|
461
|
-
maintenance.schedule({
|
|
462
|
-
id: PLUGINS_RECONCILE_SCHEDULER_ID,
|
|
463
|
-
name: PLUGINS_RECONCILE_JOB,
|
|
464
|
-
everyMs: () => current.extensionHost.reconcileIntervalSeconds * 1000,
|
|
465
|
-
});
|
|
466
|
-
// 已删除组织的对象存储:软删除超过 storage.purgeDeletedOrgsAfterDays 天后由维护任务清理(每小时扫描)
|
|
467
|
-
maintenance.handle(STORAGE_PURGE_JOB, async () => {
|
|
468
|
-
await purgeDeletedOrgStorage({
|
|
469
|
-
db: kdb,
|
|
470
|
-
storage,
|
|
471
|
-
afterDays: current.storage.purgeDeletedOrgsAfterDays,
|
|
472
|
-
log,
|
|
473
|
-
});
|
|
474
|
-
});
|
|
475
|
-
maintenance.schedule({
|
|
476
|
-
id: STORAGE_PURGE_SCHEDULER_ID,
|
|
477
|
-
name: STORAGE_PURGE_JOB,
|
|
478
|
-
everyMs: () => STORAGE_PURGE_EVERY_MS,
|
|
479
|
-
});
|
|
480
|
-
// 对话附件:下载权限同会话流(只用 isAccessible,一条查询);未绑定的过期附件由维护任务每小时清理
|
|
481
|
-
// agent 自写技能(skill_write)与共享 agent 的技能变更审批(R4)
|
|
482
|
-
const skillChanges = new SkillChangesService({ db: kdb, storage, eventLog, log });
|
|
483
|
-
const conversationAccess = new ConversationsService(kdb, eventLog, new AgentsService(kdb, registry, toolRegistry, skillChanges));
|
|
484
|
-
const attachments = new AttachmentsService({
|
|
485
|
-
db: kdb,
|
|
486
|
-
storage,
|
|
487
|
-
config: () => current,
|
|
488
|
-
canAccessConversation: (orgId, id, viewer) => conversationAccess.isAccessible(orgId, id, viewer),
|
|
489
|
-
log,
|
|
490
|
-
});
|
|
491
|
-
const skills = new SkillsService({ db: kdb, storage, attachments });
|
|
492
|
-
const prices = new PricesService(kdb);
|
|
493
|
-
const purposes = new ModelPurposesService({
|
|
494
|
-
db: kdb,
|
|
495
|
-
registry,
|
|
496
|
-
config: () => current,
|
|
497
|
-
manifests: () => host.manifests(),
|
|
498
|
-
});
|
|
499
|
-
maintenance.handle(ATTACHMENT_CLEANUP_JOB, async () => {
|
|
500
|
-
const n = await attachments.deleteExpired();
|
|
501
|
-
if (n > 0)
|
|
502
|
-
log.info("expired attachments deleted", { count: n });
|
|
503
|
-
});
|
|
504
|
-
maintenance.schedule({
|
|
505
|
-
id: ATTACHMENT_CLEANUP_SCHEDULER_ID,
|
|
506
|
-
name: ATTACHMENT_CLEANUP_JOB,
|
|
507
|
-
everyMs: () => ATTACHMENT_CLEANUP_EVERY_MS,
|
|
508
|
-
});
|
|
509
|
-
// 沙箱:提供方在 host.load() 之后才就绪,按调用时取;休眠与销毁由维护队列扫描
|
|
510
|
-
const sandbox = new SandboxService({
|
|
511
|
-
db: kdb,
|
|
512
|
-
redis,
|
|
513
|
-
provider: () => {
|
|
514
|
-
const e = host.list("sandbox").find((x) => x.capability === SANDBOX_EXTENSION_POINT);
|
|
515
|
-
return e ? { plugin: e.plugin, impl: e.impl } : undefined;
|
|
516
|
-
},
|
|
517
|
-
lookup: (plugin) => host
|
|
518
|
-
.list("sandbox")
|
|
519
|
-
.find((x) => x.capability === SANDBOX_EXTENSION_POINT && x.plugin === plugin)?.impl,
|
|
520
|
-
config: () => current,
|
|
521
|
-
log,
|
|
522
|
-
});
|
|
523
|
-
registerSandboxMaintenance(maintenance, sandbox, log);
|
|
524
|
-
builtins.push(...sandboxTools({ sandbox, attachments, storage, eventLog, config: () => current }),
|
|
525
|
-
// 技能加载:对话日志里有技能目录快照时由注册表自动加入(Ruling M17)
|
|
526
|
-
skillLoadTool({ db: kdb, sandbox, attachments, storage, eventLog, config: () => current }),
|
|
527
|
-
// 自写技能:agent 定义显式引用才可用
|
|
528
|
-
skillWriteTool({ changes: skillChanges }));
|
|
529
|
-
// 漂移检测:登记周期扫描与检查任务(worker 角色执行);手动刷新与 list_changed 也经它
|
|
530
|
-
const toolDrift = new ToolDrift({
|
|
531
|
-
db: kdb,
|
|
532
|
-
registry: toolRegistry,
|
|
533
|
-
credentials,
|
|
534
|
-
config: () => current,
|
|
535
|
-
log,
|
|
536
|
-
maintenance,
|
|
537
|
-
});
|
|
538
|
-
const breaker = new Breaker(redis, () => current);
|
|
539
|
-
// 用户直接使用连接器内容(斜杠命令 / @ 资源引用)
|
|
540
|
-
const connectorContent = new ConnectorContent({
|
|
541
|
-
db: kdb,
|
|
542
|
-
registry: toolRegistry,
|
|
543
|
-
credentials,
|
|
544
|
-
breaker,
|
|
545
|
-
config: () => current,
|
|
546
|
-
log,
|
|
547
|
-
});
|
|
548
|
-
const toolPipeline = new ToolPipeline({
|
|
549
|
-
db: kdb,
|
|
550
|
-
eventLog,
|
|
551
|
-
registry: toolRegistry,
|
|
552
|
-
credentials,
|
|
553
|
-
breaker,
|
|
554
|
-
outputs: toolOutputs,
|
|
555
|
-
approvals,
|
|
556
|
-
questions,
|
|
557
|
-
config: () => current,
|
|
558
|
-
log,
|
|
559
|
-
// plugin hooks (chat runs only; the eval replay uses RecordedToolPipeline, which has none)
|
|
560
|
-
pluginHooks: host.hooks,
|
|
561
|
-
// ToolResult.card: the extension's inline ui contributions (read live, no alias)
|
|
562
|
-
inlineViews: (plugin) => new Set((host.current(plugin)?.manifest.ui ?? [])
|
|
563
|
-
.filter((c) => c.place === "inline" && c.aliasOf === undefined)
|
|
564
|
-
.map((c) => c.id)),
|
|
565
|
-
onToolsChanged: (orgId, connectorId) => {
|
|
566
|
-
void toolDrift.onToolsChanged(orgId, connectorId);
|
|
567
|
-
},
|
|
568
|
-
// sub-agents (phase C): `agent` calls dispatch child runs onto their own queue
|
|
569
|
-
subagents: {
|
|
570
|
-
dispatch: (a) => dispatchSubagent({
|
|
571
|
-
db: kdb,
|
|
572
|
-
eventLog,
|
|
573
|
-
purposes,
|
|
574
|
-
registry,
|
|
575
|
-
config: () => current,
|
|
576
|
-
enqueue: (data, jobId, kind) => runQueue.enqueue(data, jobId, kind),
|
|
577
|
-
log,
|
|
578
|
-
}, a),
|
|
579
|
-
},
|
|
580
|
-
});
|
|
581
|
-
const tools = {
|
|
582
|
-
registry: toolRegistry,
|
|
583
|
-
credentials,
|
|
584
|
-
outputs: toolOutputs,
|
|
585
|
-
pipeline: toolPipeline,
|
|
586
|
-
approvals,
|
|
587
|
-
questions,
|
|
588
|
-
drift: toolDrift,
|
|
589
|
-
connectorContent,
|
|
590
|
-
};
|
|
591
|
-
const lock = new ConversationLock(redis, log);
|
|
592
|
-
const quota = new OrgQuota(redis);
|
|
593
|
-
const abort = new RunAbort(redis, bus);
|
|
594
|
-
const checkpoints = new KyselyCheckpointSaver(kdb);
|
|
595
|
-
const runQueue = new RunQueue(kdb, eventLog, lock, config.redis.url, log, checkpoints, {
|
|
596
|
-
stopOpenCalls: (t, runId) => toolPipeline.stopOpenAgentCalls(t, runId),
|
|
597
|
-
stopChildren: (runId) => stopChildren(childDeps(), runId, null),
|
|
598
|
-
});
|
|
599
|
-
// sub-agents (spec §7.3, §12): reporting a finished child to its parent and stopping children
|
|
600
|
-
const childDeps = () => ({ db: kdb, eventLog, waits, runQueue, abort, log });
|
|
601
|
-
const reportChild = (runId) => onChildFinished(childDeps(), runId).catch((err) => log.error("cannot report finished sub-agent run to its parent", { runId, err }));
|
|
602
|
-
/** `abortIfOrphaned`, then a stopped sub-agent reports to its parent at once. */
|
|
603
|
-
const abortOrphan = async (c, runId, by) => {
|
|
604
|
-
const r = await runQueue.abortIfOrphaned(c, runId, by);
|
|
605
|
-
if (r) {
|
|
606
|
-
await reportChild(runId);
|
|
607
|
-
// a stopped parent stops its children (spec §12)
|
|
608
|
-
await stopChildren(childDeps(), runId, null).catch((err) => log.error("cannot stop the sub-agents of a run", { runId, err }));
|
|
609
|
-
}
|
|
610
|
-
return r;
|
|
611
|
-
};
|
|
612
|
-
const waits = new Waits({
|
|
613
|
-
db: kdb,
|
|
614
|
-
eventLog,
|
|
615
|
-
approvals,
|
|
616
|
-
questions,
|
|
617
|
-
runQueue,
|
|
618
|
-
checkpoints,
|
|
619
|
-
abortRequested: (runId) => abort.requested(runId),
|
|
620
|
-
maintenance,
|
|
621
|
-
log,
|
|
622
|
-
subagents: {
|
|
623
|
-
stop: (parentRunId, by, opts) => stopChildren(childDeps(), parentRunId, by, opts),
|
|
624
|
-
finished: (childRunId) => onChildFinished(childDeps(), childRunId),
|
|
625
|
-
stopOpenCalls: (t, runId) => toolPipeline.stopOpenAgentCalls(t, runId),
|
|
626
|
-
},
|
|
627
|
-
});
|
|
628
|
-
const external = new ExternalIdentities(kdb, () => current);
|
|
629
|
-
const offboarding = new Offboarding({
|
|
630
|
-
credentials,
|
|
631
|
-
approvals,
|
|
632
|
-
questions,
|
|
633
|
-
// Ruling A24:手动移出 / 离开时对该组织启用的每个通讯录插件写排除
|
|
634
|
-
directoryPlugins: () => host
|
|
635
|
-
.list("directory")
|
|
636
|
-
.filter((e) => e.capability === DIRECTORY_EXTENSION_POINT)
|
|
637
|
-
.map((e) => e.plugin),
|
|
638
|
-
// 只用来写吊销标记(Redis 快速路径);会话签发仍在 HTTP 层
|
|
639
|
-
sessions: new SessionService(kdb, redis, keyring, {
|
|
640
|
-
accessTtlSeconds: config.auth.accessTokenTtlSeconds,
|
|
641
|
-
refreshTtlDays: config.auth.refreshTokenTtlDays,
|
|
642
|
-
}),
|
|
643
|
-
eventLog,
|
|
644
|
-
runs: {
|
|
645
|
-
abortWaiting: async (c, runId, by) => {
|
|
646
|
-
const r = await waits.abortWaiting(c, runId, by);
|
|
647
|
-
enqueueOutbound(c);
|
|
648
|
-
return r;
|
|
649
|
-
},
|
|
650
|
-
abortIfOrphaned: abortOrphan,
|
|
651
|
-
requestAbort: (runId, by) => abort.request(runId, by),
|
|
652
|
-
},
|
|
653
|
-
db: kdb,
|
|
654
|
-
redis,
|
|
655
|
-
maintenance,
|
|
656
|
-
log,
|
|
657
|
-
// 离职者对话的沙箱:提交后投递维护任务,由 worker 逐个销毁(等正在跑的命令结束)
|
|
658
|
-
sandboxes: { destroy: (ids) => scheduleSandboxDestroy(maintenance, ids) },
|
|
659
|
-
});
|
|
660
|
-
const identity = {
|
|
661
|
-
external,
|
|
662
|
-
binding: new IdentityBinding({ db: kdb, redis, config: () => current, external }),
|
|
663
|
-
sso: new SsoFlow({ redis, config: () => current, host, external, log }),
|
|
664
|
-
offboarding,
|
|
665
|
-
// 通讯录同步:登记每小时扫描与同步任务(worker 角色执行);手动与 directory_changed 也经它投递
|
|
666
|
-
directory: new DirectorySync({
|
|
667
|
-
db: kdb,
|
|
668
|
-
redis,
|
|
669
|
-
host,
|
|
670
|
-
orgExtensionConfigs,
|
|
671
|
-
external,
|
|
672
|
-
offboarding,
|
|
673
|
-
maintenance,
|
|
674
|
-
log,
|
|
675
|
-
}),
|
|
676
|
-
};
|
|
677
|
-
const runControl = {
|
|
678
|
-
ensureRun: (id) => runQueue.ensureRun(id),
|
|
679
|
-
abortIfOrphaned: (id, runId, by) => abortOrphan(id, runId, by),
|
|
680
|
-
// 等待中被中止:审批 / 提问卡片变为已取消,排一个出站任务去更新
|
|
681
|
-
abortWaiting: async (id, runId, by) => {
|
|
682
|
-
const r = await waits.abortWaiting(id, runId, by);
|
|
683
|
-
enqueueOutbound(id);
|
|
684
|
-
return r;
|
|
685
|
-
},
|
|
686
|
-
requestAbort: (runId, by) => abort.request(runId, by),
|
|
687
|
-
};
|
|
688
|
-
const channelConnections = new ChannelConnections({
|
|
689
|
-
db: kdb,
|
|
690
|
-
keyring,
|
|
691
|
-
host,
|
|
692
|
-
bus,
|
|
693
|
-
redis,
|
|
694
|
-
log,
|
|
695
|
-
onSecrets: (v) => log.addOrgSecrets(v),
|
|
696
|
-
onResume: (id) => channelOutbound.resumeConnection(id),
|
|
697
|
-
config: () => current,
|
|
698
|
-
});
|
|
699
|
-
const channelOutbound = new ChannelOutbound({
|
|
700
|
-
db: kdb,
|
|
701
|
-
redis,
|
|
702
|
-
redisUrl: config.redis.url,
|
|
703
|
-
bus,
|
|
704
|
-
eventLog,
|
|
705
|
-
connections: channelConnections,
|
|
706
|
-
approvals,
|
|
707
|
-
questions,
|
|
708
|
-
config: () => current,
|
|
709
|
-
log,
|
|
710
|
-
// 入站任务(Ruling A21)在同一队列的 worker 上处理
|
|
711
|
-
inbound: (id, e) => channels.inbound.handle(id, e),
|
|
712
|
-
});
|
|
713
|
-
/** 会话有 IM 投递目标时排一个出站任务(审批 / 回答 / 运行开始后);失败只记日志。 */
|
|
714
|
-
function enqueueOutbound(conversationId) {
|
|
715
|
-
channelOutbound
|
|
716
|
-
.enqueue(conversationId)
|
|
717
|
-
.catch((err) => log.warn("cannot enqueue channel delivery", { conversationId, err }));
|
|
718
|
-
}
|
|
719
|
-
const channels = {
|
|
720
|
-
connections: channelConnections,
|
|
721
|
-
outbound: channelOutbound,
|
|
722
|
-
inbound: new ChannelInbound({
|
|
723
|
-
db: kdb,
|
|
724
|
-
redis,
|
|
725
|
-
connections: channelConnections,
|
|
726
|
-
// phase D: `/name args` in IM goes through the same skill invocation as the web
|
|
727
|
-
conversations: new ConversationsService(kdb, eventLog, new AgentsService(kdb, registry, toolRegistry, skillChanges), runControl, log, undefined, undefined, undefined, new SkillInvoker({ db: kdb, storage, log })),
|
|
728
|
-
external,
|
|
729
|
-
binding: identity.binding,
|
|
730
|
-
directorySync: identity.directory,
|
|
731
|
-
outbound: channelOutbound,
|
|
732
|
-
queue: channelOutbound,
|
|
733
|
-
approvals,
|
|
734
|
-
questions,
|
|
735
|
-
log,
|
|
736
|
-
}),
|
|
737
|
-
};
|
|
738
|
-
let channelSupervisor;
|
|
739
|
-
/** Channel webhook inbound (gateway role only; F8 / F9). */
|
|
740
|
-
const channelWebhooks = config.roles.includes("gateway")
|
|
741
|
-
? new ChannelWebhooks({ connections: channelConnections, inbound: channels.inbound, log })
|
|
742
|
-
: undefined;
|
|
743
|
-
let unwatchWebhooks;
|
|
744
|
-
let unsubscribeWebhooks;
|
|
745
|
-
// Warn (rate limited) when a channel plugin has holdable connections but no live gateway replica
|
|
746
|
-
// with it loaded (R1 / R3); silent for one lease TTL after this process starts (first heartbeats)
|
|
747
|
-
const gatewayCheckGraceFrom = Date.now();
|
|
748
|
-
maintenance.handle(GATEWAY_CHECK_JOB, async () => {
|
|
749
|
-
await checkGatewayPresence({
|
|
750
|
-
db: kdb,
|
|
751
|
-
redis,
|
|
752
|
-
config: () => current,
|
|
753
|
-
log,
|
|
754
|
-
graceUntil: gatewayCheckGraceFrom + current.channels.leaseTtlMs,
|
|
755
|
-
});
|
|
756
|
-
});
|
|
757
|
-
maintenance.schedule({
|
|
758
|
-
id: GATEWAY_CHECK_SCHEDULER_ID,
|
|
759
|
-
name: GATEWAY_CHECK_JOB,
|
|
760
|
-
everyMs: () => GATEWAY_CHECK_EVERY_MS,
|
|
761
|
-
});
|
|
762
|
-
const loopFactory = opts.loop ?? ((d) => new LangGraphLoop(checkpoints, d));
|
|
763
|
-
/**
|
|
764
|
-
* 流式增量发布到会话频道(与 `{ kind: "events" }` 共用 `conv.<id>`),任意副本上的订阅方都能收到。
|
|
765
|
-
* 发布失败只记日志:增量只是草稿,最终内容以日志中的 assistant_message 为准。
|
|
766
|
-
*/
|
|
767
|
-
const sinkFor = (conversationId) => {
|
|
768
|
-
// 本次运行执行中推出的文本字符数(按步,step_reset 清零):本进程正在执行的这次运行自己的计数
|
|
769
|
-
let at = { runId: "", step: -1, chars: 0 };
|
|
770
|
-
return (d) => {
|
|
771
|
-
if (at.runId !== d.runId || at.step !== d.step || d.kind === "step_reset") {
|
|
772
|
-
at = { runId: d.runId, step: d.step, chars: 0 };
|
|
773
|
-
}
|
|
774
|
-
const offset = at.chars;
|
|
775
|
-
if (d.kind === "text")
|
|
776
|
-
at.chars += d.text?.length ?? 0;
|
|
777
|
-
const msg = {
|
|
778
|
-
kind: "delta",
|
|
779
|
-
runId: d.runId,
|
|
780
|
-
step: d.step,
|
|
781
|
-
delta: d.kind,
|
|
782
|
-
...(d.text !== undefined && { text: d.text }),
|
|
783
|
-
...(d.kind === "text" && { offset }),
|
|
784
|
-
};
|
|
785
|
-
bus
|
|
786
|
-
.publish(conversationTopic(conversationId), msg)
|
|
787
|
-
.catch((err) => log.warn("stream delta publish failed", { conversationId, err }));
|
|
788
|
-
};
|
|
789
|
-
};
|
|
790
|
-
// usage.report metering: producer on every role, worker on the worker role (P-17)
|
|
791
|
-
const usageReporter = new UsageReporter({
|
|
792
|
-
db: kdb,
|
|
793
|
-
redisUrl: config.redis.url,
|
|
794
|
-
hooks: host.hooks,
|
|
795
|
-
isActive: (plugin) => host.current(plugin) !== undefined,
|
|
796
|
-
unservable: (plugins) => queryUnservable(kdb, plugins, STALE_RECONCILE_PERIODS * current.extensionHost.reconcileIntervalSeconds),
|
|
797
|
-
// deployment state (approved manifests in PG)
|
|
798
|
-
subscribers: (orgId) => queryUsageSubscribers(kdb, orgId),
|
|
799
|
-
config: () => current,
|
|
800
|
-
log,
|
|
801
|
-
});
|
|
802
|
-
// Conversation titles (UI refresh B): enqueued after a completed run, worker on the worker role
|
|
803
|
-
const titles = new TitleQueue({
|
|
804
|
-
db: kdb,
|
|
805
|
-
eventLog,
|
|
806
|
-
purposes,
|
|
807
|
-
usageReport: usageReporter,
|
|
808
|
-
hooks: host.hooks,
|
|
809
|
-
redisUrl: config.redis.url,
|
|
810
|
-
config: () => current,
|
|
811
|
-
log,
|
|
812
|
-
});
|
|
813
|
-
// R13 sweeper: re-enqueue recent usage events (once across replicas through the maintenance queue)
|
|
814
|
-
maintenance.handle(USAGE_SWEEP_JOB, async () => {
|
|
815
|
-
await usageReporter.sweep();
|
|
816
|
-
});
|
|
817
|
-
maintenance.schedule({
|
|
818
|
-
id: USAGE_SWEEP_SCHEDULER_ID,
|
|
819
|
-
name: USAGE_SWEEP_JOB,
|
|
820
|
-
everyMs: () => USAGE_SWEEP_EVERY_MS,
|
|
821
|
-
});
|
|
822
|
-
const stepDeps = {
|
|
823
|
-
db: kdb,
|
|
824
|
-
eventLog,
|
|
825
|
-
registry,
|
|
826
|
-
usageReport: usageReporter,
|
|
827
|
-
tools: toolRegistry,
|
|
828
|
-
config: () => current,
|
|
829
|
-
log,
|
|
830
|
-
toolPipeline,
|
|
831
|
-
// plugin hooks for chat runs; the full-run replay below drops them (P-18)
|
|
832
|
-
hooks: host.hooks,
|
|
833
|
-
// a sub-agent's steps on its parent's stream (sub-agents spec §14.2)
|
|
834
|
-
subagentProgress: (s) => publishSubagentProgress({ db: kdb, bus, log }, s),
|
|
835
|
-
// phase D: a person's fork invocation dispatches its sub-agent in the run's first prepare
|
|
836
|
-
skillForks: liveSkillForks({
|
|
837
|
-
db: kdb,
|
|
838
|
-
eventLog,
|
|
839
|
-
purposes,
|
|
840
|
-
registry,
|
|
841
|
-
config: () => current,
|
|
842
|
-
enqueue: (data, jobId, kind) => runQueue.enqueue(data, jobId, kind),
|
|
843
|
-
log,
|
|
844
|
-
invoker: new SkillInvoker({ db: kdb, storage, log }),
|
|
845
|
-
}),
|
|
846
|
-
media: {
|
|
847
|
-
info: (orgId, conversationId, ids) => attachments.mediaInfo(orgId, conversationId, ids),
|
|
848
|
-
fetch: (orgId, conversationId, ids, caps) => attachments.fetchMedia(orgId, conversationId, ids, caps),
|
|
849
|
-
},
|
|
850
|
-
};
|
|
851
|
-
const runs = {
|
|
852
|
-
eventLog,
|
|
853
|
-
registry,
|
|
854
|
-
queue: runQueue,
|
|
855
|
-
lock,
|
|
856
|
-
quota,
|
|
857
|
-
abort,
|
|
858
|
-
stepDeps,
|
|
859
|
-
waits,
|
|
860
|
-
maintenance,
|
|
861
|
-
};
|
|
862
|
-
let runWorker;
|
|
863
|
-
/** 评测队列(生产方:API 启动运行时入队)与 worker(含 worker 角色时启动)。 */
|
|
864
|
-
const evalQueue = new EvalQueue(config.redis.url, log);
|
|
865
|
-
let evalWorker;
|
|
866
|
-
/** 构建失败时释放已创建的连接对象(Redis / PG 池 / 总线订阅),再抛出。 */
|
|
867
|
-
const releaseConnections = async () => {
|
|
868
|
-
redis.disconnect();
|
|
869
|
-
await busSubscriber.close().catch(() => { });
|
|
870
|
-
await db.destroy().catch(() => { });
|
|
871
|
-
};
|
|
872
|
-
let httpApp;
|
|
873
|
-
try {
|
|
874
|
-
httpApp = await createHttpApp({
|
|
875
|
-
log,
|
|
876
|
-
health: {
|
|
877
|
-
isStopping: () => stopRequested,
|
|
878
|
-
log,
|
|
879
|
-
checks: {
|
|
880
|
-
pg: async () => {
|
|
881
|
-
await sql `select 1`.execute(db);
|
|
882
|
-
},
|
|
883
|
-
redis: async () => {
|
|
884
|
-
if (redis.status !== "ready")
|
|
885
|
-
throw new Error(`redis status ${redis.status}`);
|
|
886
|
-
await redis.ping();
|
|
887
|
-
},
|
|
888
|
-
},
|
|
889
|
-
},
|
|
890
|
-
serveApi: config.roles.includes("api"),
|
|
891
|
-
servePlugins,
|
|
892
|
-
...(channelWebhooks && {
|
|
893
|
-
gateway: {
|
|
894
|
-
webhooks: channelWebhooks,
|
|
895
|
-
webhookMaxBodyBytes: config.channels.webhookMaxBodyBytes,
|
|
896
|
-
},
|
|
897
|
-
}),
|
|
898
|
-
apiModule: ApiModule.register({
|
|
899
|
-
db: kdb,
|
|
900
|
-
redis,
|
|
901
|
-
keyring,
|
|
902
|
-
config: () => current,
|
|
903
|
-
log,
|
|
904
|
-
host,
|
|
905
|
-
orgExtensionConfigs,
|
|
906
|
-
bus,
|
|
907
|
-
eventLog,
|
|
908
|
-
registry,
|
|
909
|
-
credentials,
|
|
910
|
-
toolRegistry,
|
|
911
|
-
approvals,
|
|
912
|
-
questions,
|
|
913
|
-
drift: toolDrift,
|
|
914
|
-
outputs: toolOutputs,
|
|
915
|
-
connectorContent,
|
|
916
|
-
identity,
|
|
917
|
-
channels: channelConnections,
|
|
918
|
-
runs: runControl,
|
|
919
|
-
attachments,
|
|
920
|
-
storage,
|
|
921
|
-
sandbox,
|
|
922
|
-
skills,
|
|
923
|
-
skillChanges,
|
|
924
|
-
prices,
|
|
925
|
-
purposes,
|
|
926
|
-
extensionInstalls,
|
|
927
|
-
extensionAdmin,
|
|
928
|
-
extensionAdminOps,
|
|
929
|
-
extensionDeploymentConfigs,
|
|
930
|
-
catalog,
|
|
931
|
-
pluginImport,
|
|
932
|
-
marketplaces,
|
|
933
|
-
evalQueue,
|
|
934
|
-
sandboxDestroy: { destroy: (ids) => scheduleSandboxDestroy(maintenance, ids) },
|
|
935
|
-
}),
|
|
936
|
-
trustProxy: config.http.trustProxy,
|
|
937
|
-
replicaId: config.http.replicaId === undefined ? undefined : String(config.http.replicaId),
|
|
938
|
-
packageMaxBytes: config.packages.maxBytes,
|
|
939
|
-
});
|
|
940
|
-
}
|
|
941
|
-
catch (e) {
|
|
942
|
-
await releaseConnections();
|
|
943
|
-
throw e;
|
|
944
|
-
}
|
|
945
|
-
/** 热更新:重新校验;只应用 hot 字段,其余变化 warn 并列出需重启的键;校验失败保持原配置。 */
|
|
946
|
-
const onConfigChange = (raw) => {
|
|
947
|
-
let next;
|
|
948
|
-
try {
|
|
949
|
-
next = resolveConfig(raw, env);
|
|
950
|
-
}
|
|
951
|
-
catch (e) {
|
|
952
|
-
log.error("config reload rejected; keeping current config", { error: errMsg(e) });
|
|
953
|
-
return;
|
|
954
|
-
}
|
|
955
|
-
log.addSecrets(secretValues(KernelConfigSchema, next));
|
|
956
|
-
const changed = changedPaths(KernelConfigSchema, current, next);
|
|
957
|
-
if (changed.length === 0)
|
|
958
|
-
return;
|
|
959
|
-
const hot = changed.filter((p) => HOT_PATHS.includes(p));
|
|
960
|
-
const restart = changed.filter((p) => !HOT_PATHS.includes(p));
|
|
961
|
-
const updated = structuredClone(current);
|
|
962
|
-
const applied = [];
|
|
963
|
-
for (const p of hot) {
|
|
964
|
-
try {
|
|
965
|
-
HOT_APPLIERS[p]({ log }, getPath(next, p));
|
|
966
|
-
setPath(updated, p, getPath(next, p));
|
|
967
|
-
applied.push(p);
|
|
968
|
-
}
|
|
969
|
-
catch (e) {
|
|
970
|
-
log.error("config reload: cannot apply field; keeping current value", {
|
|
971
|
-
key: p,
|
|
972
|
-
error: errMsg(e),
|
|
973
|
-
});
|
|
974
|
-
}
|
|
975
|
-
}
|
|
976
|
-
current = updated;
|
|
977
|
-
if (applied.length > 0)
|
|
978
|
-
log.info("config reloaded", { applied });
|
|
979
|
-
if (restart.length > 0) {
|
|
980
|
-
log.warn("config changed but requires restart to take effect", { keys: restart });
|
|
981
|
-
}
|
|
982
|
-
};
|
|
983
|
-
/** 部署尚无活跃企业管理员时提示去初始化;查询失败只记日志,不影响启动。 */
|
|
984
|
-
async function warnIfSetupPending() {
|
|
985
|
-
try {
|
|
986
|
-
if ((await new AccountsService(kernelDb(db)).countEnterpriseAdmins()) === 0) {
|
|
987
|
-
log.warn("deployment is not set up; open the setup wizard or run `capybara admin create`");
|
|
988
|
-
}
|
|
989
|
-
}
|
|
990
|
-
catch (e) {
|
|
991
|
-
log.warn("cannot check whether the deployment is set up", { error: errMsg(e) });
|
|
992
|
-
}
|
|
993
|
-
}
|
|
994
|
-
async function doStop() {
|
|
995
|
-
const deadline = Date.now() + STOP_TIMEOUT_MS;
|
|
996
|
-
/** 在 `min(budgetMs, 总剩余)` 内等待 p;超时记 warn 并返回 false。 */
|
|
997
|
-
const within = async (label, p, budgetMs = Number.POSITIVE_INFINITY) => {
|
|
998
|
-
let timer;
|
|
999
|
-
const waitMs = Math.max(0, Math.min(budgetMs, deadline - Date.now()));
|
|
1000
|
-
const timeout = new Promise((resolve) => {
|
|
1001
|
-
timer = setTimeout(() => resolve("timeout"), waitMs);
|
|
1002
|
-
timer.unref();
|
|
1003
|
-
});
|
|
1004
|
-
try {
|
|
1005
|
-
const r = await Promise.race([p.then(() => "done"), timeout]);
|
|
1006
|
-
if (r === "timeout")
|
|
1007
|
-
log.warn("shutdown step timed out", { step: label });
|
|
1008
|
-
return r === "done";
|
|
1009
|
-
}
|
|
1010
|
-
catch (e) {
|
|
1011
|
-
log.error("shutdown step failed", { step: label, err: e });
|
|
1012
|
-
return false;
|
|
1013
|
-
}
|
|
1014
|
-
finally {
|
|
1015
|
-
clearTimeout(timer);
|
|
1016
|
-
}
|
|
1017
|
-
};
|
|
1018
|
-
// 不等待进行中的启动(插件 setup 可能任意慢):中止进行中的内核迁移并等其会话结束;
|
|
1019
|
-
// 宿主关闭时中止插件迁移、立即关闭 setup 中的 ctx;其余启动步骤在 checkpoint 处退出。
|
|
1020
|
-
// 正在进行的 listen 要先等完,否则关闭会与监听交错留下端口。
|
|
1021
|
-
startAbort.abort();
|
|
1022
|
-
// 先中止进行中的插件请求(SSE 等长连接据 req.signal 收尾),否则它们会占满 http 阶段的预算
|
|
1023
|
-
httpApp.abortPluginRequests();
|
|
1024
|
-
if (migratePromise)
|
|
1025
|
-
await within("migrate", migratePromise.catch(() => { }), STOP_BUDGET_MS.migrate);
|
|
1026
|
-
unwatch?.();
|
|
1027
|
-
unwatchPlugins?.();
|
|
1028
|
-
unwatchWebhooks?.();
|
|
1029
|
-
await unsubscribeWebhooks?.().catch(() => { });
|
|
1030
|
-
// 不再接 reconcile(进行中的那次由宿主关闭收尾)
|
|
1031
|
-
await within("plugin-lifecycle", extensionLifecycle.stop(), 1_000);
|
|
1032
|
-
unwatch = undefined;
|
|
1033
|
-
// http 阶段:等 listen 与关闭 HTTP 共用一个截止时间;listen 卡满预算时关闭只剩 0ms,直接强制断开
|
|
1034
|
-
const httpDeadline = Date.now() + STOP_BUDGET_MS.http;
|
|
1035
|
-
if (listenPromise) {
|
|
1036
|
-
await within("listen", listenPromise.catch(() => { }), STOP_BUDGET_MS.http);
|
|
1037
|
-
}
|
|
1038
|
-
if (!(await within("http", httpApp.close(), Math.max(0, httpDeadline - Date.now())))) {
|
|
1039
|
-
httpApp.closeAllConnections();
|
|
1040
|
-
}
|
|
1041
|
-
port = undefined;
|
|
1042
|
-
// runs 阶段:停止领取运行、让本进程的运行在步骤边界停下并回到队列;再关闭运行队列的生产方连接。
|
|
1043
|
-
// 渠道长连接与之并行停止(中止 connect、释放租约),必须在插件关闭之前。
|
|
1044
|
-
const runsDeadline = Date.now() + STOP_BUDGET_MS.runs;
|
|
1045
|
-
const channelsStopped = channelSupervisor?.stop();
|
|
1046
|
-
if (runWorker) {
|
|
1047
|
-
const budget = Math.min(STOP_BUDGET_MS.runs, deadline - Date.now()) - RUNS_FORCE_CLOSE_MS;
|
|
1048
|
-
await within("runs", runWorker.close(Math.max(0, budget)), STOP_BUDGET_MS.runs);
|
|
1049
|
-
}
|
|
1050
|
-
if (evalWorker) {
|
|
1051
|
-
await within("evals", evalWorker.close(Math.max(0, runsDeadline - Date.now() - RUNS_FORCE_CLOSE_MS)), Math.max(0, runsDeadline - Date.now()));
|
|
1052
|
-
}
|
|
1053
|
-
if (channelsStopped) {
|
|
1054
|
-
// 至少留 2s 交还租约:否则其他副本要等租约过期(默认 30s)才能接管
|
|
1055
|
-
await within("channels", channelsStopped, Math.max(CHANNELS_STOP_MIN_MS, runsDeadline - Date.now()));
|
|
1056
|
-
}
|
|
1057
|
-
await within("maintenance", maintenance.close(), Math.max(0, runsDeadline - Date.now()));
|
|
1058
|
-
// titles before usage.report: a finishing title call enqueues its usage report
|
|
1059
|
-
await within("titles", titles.stop(), Math.max(0, runsDeadline - Date.now()));
|
|
1060
|
-
// usage.report: in-flight deliveries are aborted and retried by any replica; before the plugins close
|
|
1061
|
-
await within("usage-report", usageReporter.stop(), Math.max(0, runsDeadline - Date.now()));
|
|
1062
|
-
// 出站投递:进行中的任务交还队列(由其他副本从 last_seq 续投),必须在插件关闭之前
|
|
1063
|
-
await within("channel-outbound", channelOutbound.close(), Math.max(CHANNELS_STOP_MIN_MS, runsDeadline - Date.now()));
|
|
1064
|
-
await within("run-queue", runQueue.close(), Math.max(0, runsDeadline - Date.now()));
|
|
1065
|
-
await within("eval-queue", evalQueue.close(), Math.max(0, runsDeadline - Date.now()));
|
|
1066
|
-
await within("plugins", host.close(), STOP_BUDGET_MS.plugins);
|
|
1067
|
-
// 删掉本副本的加载状态行(尽力而为;崩溃副本心跳过期的行由 reconcile 清理)
|
|
1068
|
-
await within("plugin-status", replicaStatus.removeAll(), 1_000);
|
|
1069
|
-
await within("bus", busSubscriber.close());
|
|
1070
|
-
if (redis.status === "ready") {
|
|
1071
|
-
if (!(await within("redis", redis.quit())))
|
|
1072
|
-
redis.disconnect();
|
|
1073
|
-
}
|
|
1074
|
-
else {
|
|
1075
|
-
redis.disconnect();
|
|
1076
|
-
}
|
|
1077
|
-
await within("pg", db.destroy());
|
|
1078
|
-
log.info("kernel stopped");
|
|
1079
|
-
}
|
|
1080
|
-
const kernel = {
|
|
1081
|
-
http: httpApp,
|
|
1082
|
-
host,
|
|
1083
|
-
usageReport: usageReporter,
|
|
1084
|
-
replicaId,
|
|
1085
|
-
extensionInstalls,
|
|
1086
|
-
extensionAdmin,
|
|
1087
|
-
extensionAdminOps,
|
|
1088
|
-
extensionLifecycle,
|
|
1089
|
-
extensionBlobs,
|
|
1090
|
-
catalog,
|
|
1091
|
-
pluginImport,
|
|
1092
|
-
bootstrap,
|
|
1093
|
-
marketplaces,
|
|
1094
|
-
extensionDeploymentConfigs,
|
|
1095
|
-
orgExtensionConfigs,
|
|
1096
|
-
bus,
|
|
1097
|
-
runs,
|
|
1098
|
-
tools,
|
|
1099
|
-
identity,
|
|
1100
|
-
channels,
|
|
1101
|
-
storage,
|
|
1102
|
-
attachments,
|
|
1103
|
-
skills,
|
|
1104
|
-
skillChanges,
|
|
1105
|
-
prices,
|
|
1106
|
-
purposes,
|
|
1107
|
-
sandbox,
|
|
1108
|
-
log,
|
|
1109
|
-
get config() {
|
|
1110
|
-
return current;
|
|
1111
|
-
},
|
|
1112
|
-
get port() {
|
|
1113
|
-
return port;
|
|
1114
|
-
},
|
|
1115
|
-
async start() {
|
|
1116
|
-
if (started)
|
|
1117
|
-
throw new Error("kernel already started; start() may be called once");
|
|
1118
|
-
if (stopRequested)
|
|
1119
|
-
throw new Error("kernel is stopped");
|
|
1120
|
-
started = true;
|
|
1121
|
-
const checkpoint = () => {
|
|
1122
|
-
if (stopRequested)
|
|
1123
|
-
throw new Error("kernel stopped during start");
|
|
1124
|
-
};
|
|
1125
|
-
startPromise = (async () => {
|
|
1126
|
-
await redis.connect();
|
|
1127
|
-
checkpoint();
|
|
1128
|
-
await sql `select 1`.execute(db);
|
|
1129
|
-
checkpoint();
|
|
1130
|
-
migratePromise = migrate(config.db.url, { schema: KERNEL_SCHEMA, dir: KERNEL_MIGRATIONS_DIR }, { connectTimeoutMs: config.db.connectTimeoutMs, signal: startAbort.signal });
|
|
1131
|
-
await migratePromise;
|
|
1132
|
-
checkpoint();
|
|
1133
|
-
// official 清单来源按配置同步(幂等;每个副本启动时都做)
|
|
1134
|
-
await marketplaces.syncOfficialFromConfig();
|
|
1135
|
-
// The bootstrap plugins (spec §7), once per manifest across replicas (advisory lock)
|
|
1136
|
-
if (opts.bootstrapDir !== undefined) {
|
|
1137
|
-
configDeclared = await ExtensionHost.declaredNames(config.extensions, {
|
|
1138
|
-
...(opts.resolveFrom !== undefined && { resolveFrom: opts.resolveFrom }),
|
|
1139
|
-
});
|
|
1140
|
-
}
|
|
1141
|
-
const bootstrapAgain = opts.bootstrapDir !== undefined && (await runBootstrap(opts.bootstrapDir));
|
|
1142
|
-
checkpoint();
|
|
1143
|
-
// 配置声明 → 安装记录(C15 / C13)。安装记录的包在本副本同步到 extensionHost.dir 后导入,
|
|
1144
|
-
// 与运行中的 reconcile 走同一条路径;迁移由一个副本持锁执行(ensureMigrated,C16)
|
|
1145
|
-
await host.load({
|
|
1146
|
-
config: config.extensions,
|
|
1147
|
-
installs: {
|
|
1148
|
-
desired: () => extensionInstalls.desired(),
|
|
1149
|
-
sync: (d) => syncPackage(current.extensionHost.dir, d.name, d.sha256, extensionBlobs, {
|
|
1150
|
-
maxBytes: current.packages.maxBytes,
|
|
1151
|
-
}),
|
|
1152
|
-
migrate: async (d, dir, signal) => d.migratedSha === d.sha256
|
|
1153
|
-
? "migrated"
|
|
1154
|
-
: ensureMigrated({
|
|
1155
|
-
db: kdb,
|
|
1156
|
-
dbUrl: config.db.url,
|
|
1157
|
-
connectTimeoutMs: config.db.connectTimeoutMs,
|
|
1158
|
-
bus,
|
|
1159
|
-
log,
|
|
1160
|
-
// 宿主关闭时中止(运行中 reconcile 的迁移);停机一开始就中止(启动加载中的迁移不等宿主关闭)
|
|
1161
|
-
signal: AbortSignal.any([signal, startAbort.signal]),
|
|
1162
|
-
timeoutMs: current.extensionHost.migrationTimeoutSeconds * 1000,
|
|
1163
|
-
}, d.name, d.sha256, dir),
|
|
1164
|
-
},
|
|
1165
|
-
});
|
|
1166
|
-
checkpoint();
|
|
1167
|
-
const sandboxEntry = host
|
|
1168
|
-
.list("sandbox")
|
|
1169
|
-
.find((x) => x.capability === SANDBOX_EXTENSION_POINT);
|
|
1170
|
-
if (sandboxEntry !== undefined) {
|
|
1171
|
-
for (const w of sandboxConfigWarnings(current, sandboxEntry.plugin, sandboxEntry.impl)) {
|
|
1172
|
-
log[w.level](w.message);
|
|
1173
|
-
}
|
|
1174
|
-
}
|
|
1175
|
-
if (config.roles.includes("worker")) {
|
|
1176
|
-
runWorker = new RunWorker({
|
|
1177
|
-
db: kdb,
|
|
1178
|
-
eventLog,
|
|
1179
|
-
lock,
|
|
1180
|
-
quota,
|
|
1181
|
-
abort,
|
|
1182
|
-
queue: runQueue,
|
|
1183
|
-
settings: new SettingsService(kdb, log),
|
|
1184
|
-
loop: loopFactory(stepDeps),
|
|
1185
|
-
config: () => current,
|
|
1186
|
-
log,
|
|
1187
|
-
redisUrl: config.redis.url,
|
|
1188
|
-
sinkFor,
|
|
1189
|
-
checkpoints,
|
|
1190
|
-
waits,
|
|
1191
|
-
onRunStart: enqueueOutbound,
|
|
1192
|
-
onRunCompleted: (conversationId) => void titles.maybeEnqueue(conversationId),
|
|
1193
|
-
models: registry,
|
|
1194
|
-
storage,
|
|
1195
|
-
onChildFinished: (runId) => onChildFinished(childDeps(), runId),
|
|
1196
|
-
stopChildren: (runId) => stopChildren(childDeps(), runId, null),
|
|
1197
|
-
stopOpenCalls: (t, runId) => toolPipeline.stopOpenAgentCalls(t, runId),
|
|
1198
|
-
...(opts.runHooks !== undefined && { hooks: opts.runHooks }),
|
|
1199
|
-
});
|
|
1200
|
-
runWorker.start();
|
|
1201
|
-
evalWorker = new EvalWorker({
|
|
1202
|
-
db: kdb,
|
|
1203
|
-
redisUrl: config.redis.url,
|
|
1204
|
-
quota: new OrgQuota(redis, EVAL_QUOTA_PREFIX),
|
|
1205
|
-
config: () => current,
|
|
1206
|
-
log,
|
|
1207
|
-
purposes,
|
|
1208
|
-
// 媒体按快照自己的组织与对话、经组织范围的附件接口取(C3)
|
|
1209
|
-
replay: {
|
|
1210
|
-
registry,
|
|
1211
|
-
config: () => current,
|
|
1212
|
-
...(stepDeps.media !== undefined && { media: stepDeps.media }),
|
|
1213
|
-
},
|
|
1214
|
-
// 整轮回放(C6):同一个 loop 工厂(同一 LangGraphLoop),只换工具管线(RecordedToolPipeline,
|
|
1215
|
-
// 从不执行工具)、计费的模型注册表与按原对话取附件的来源
|
|
1216
|
-
runReplay: {
|
|
1217
|
-
db: kdb,
|
|
1218
|
-
eventLog,
|
|
1219
|
-
config: () => current,
|
|
1220
|
-
log,
|
|
1221
|
-
registry,
|
|
1222
|
-
...(stepDeps.media !== undefined && { media: stepDeps.media }),
|
|
1223
|
-
checkpoints,
|
|
1224
|
-
// explicitly without plugin hooks: eval replays never fire them (P-18); nor do they
|
|
1225
|
-
// publish sub-agent progress on a live conversation's stream
|
|
1226
|
-
loop: (d) => {
|
|
1227
|
-
// nor dispatch fork invocations: run-replay passes the recorded reports instead
|
|
1228
|
-
const { hooks: _noHooks, subagentProgress: _noProgress, skillForks: _noForks, ...replayDeps } = stepDeps;
|
|
1229
|
-
return loopFactory({ ...replayDeps, ...d });
|
|
1230
|
-
},
|
|
1231
|
-
...(opts.evalHooks !== undefined && { hooks: opts.evalHooks }),
|
|
1232
|
-
},
|
|
1233
|
-
});
|
|
1234
|
-
evalWorker.start();
|
|
1235
|
-
// 维护队列:周期任务的 scheduler(幂等,多副本重复登记无害)与唯一的 Worker。
|
|
1236
|
-
// 登记失败只记日志、不阻止启动(与 Worker 的连接错误同样处理):任一 worker 副本下次启动时会再登记。
|
|
1237
|
-
try {
|
|
1238
|
-
await maintenance.ensureSchedules();
|
|
1239
|
-
}
|
|
1240
|
-
catch (err) {
|
|
1241
|
-
log.error("cannot register maintenance job schedulers", { err });
|
|
1242
|
-
}
|
|
1243
|
-
checkpoint();
|
|
1244
|
-
maintenance.startWorker();
|
|
1245
|
-
channelOutbound.startWorker();
|
|
1246
|
-
usageReporter.startWorker();
|
|
1247
|
-
titles.startWorker();
|
|
1248
|
-
if (!config.roles.includes("gateway")) {
|
|
1249
|
-
log.info("this process runs the worker role without gateway; channel long connections are held only by processes with the gateway role", { roles: config.roles });
|
|
1250
|
-
}
|
|
1251
|
-
}
|
|
1252
|
-
if (config.roles.includes("gateway")) {
|
|
1253
|
-
// Channel long-connection leader election: every gateway replica takes part, and only the
|
|
1254
|
-
// replica that holds a connection's lease connects it (E11-A)
|
|
1255
|
-
channelSupervisor = new ChannelSupervisor({
|
|
1256
|
-
db: kdb,
|
|
1257
|
-
redis,
|
|
1258
|
-
bus,
|
|
1259
|
-
connections: channelConnections,
|
|
1260
|
-
localPlugins: () => host
|
|
1261
|
-
.list("channel")
|
|
1262
|
-
.filter((e) => e.capability === CHANNEL_EXTENSION_POINT)
|
|
1263
|
-
.map((e) => e.plugin),
|
|
1264
|
-
onEvent: (id, e) => channels.inbound.onEvent(id, e),
|
|
1265
|
-
config: () => current,
|
|
1266
|
-
log,
|
|
1267
|
-
replicaId,
|
|
1268
|
-
});
|
|
1269
|
-
await channelSupervisor.start();
|
|
1270
|
-
// 插件实例撤销 / 替换:交还它持有的长连接,按新实例重新选主(C17)
|
|
1271
|
-
const supervisor = channelSupervisor;
|
|
1272
|
-
unwatchPlugins = host.onChange((plugin) => supervisor.pluginChanged(plugin));
|
|
1273
|
-
checkpoint();
|
|
1274
|
-
}
|
|
1275
|
-
if (channelWebhooks) {
|
|
1276
|
-
// The webhook runtime cache is read-through only: drop entries on every connection change
|
|
1277
|
-
// and whenever a plugin instance changes
|
|
1278
|
-
const webhooks = channelWebhooks;
|
|
1279
|
-
unsubscribeWebhooks = await bus.subscribe(CHANNEL_CHANGED_TOPIC, (payload) => {
|
|
1280
|
-
const id = payload?.connectionId;
|
|
1281
|
-
if (typeof id === "string")
|
|
1282
|
-
webhooks.invalidate(id);
|
|
1283
|
-
});
|
|
1284
|
-
unwatchWebhooks = host.onChange(() => webhooks.invalidateAll());
|
|
1285
|
-
checkpoint();
|
|
1286
|
-
}
|
|
1287
|
-
// Routes stay mounted and are resolved live: 503 extension.unavailable after an extension is revoked, back after it reloads (C17)
|
|
1288
|
-
httpApp.mountPlugins(host.routeTable());
|
|
1289
|
-
// 订阅插件生命周期主题后补一次 reconcile(启动加载期间错过的消息,并写下第一轮心跳)
|
|
1290
|
-
await extensionLifecycle.start();
|
|
1291
|
-
checkpoint();
|
|
1292
|
-
await extensionLifecycle.reconcile("startup");
|
|
1293
|
-
checkpoint();
|
|
1294
|
-
if (bootstrapAgain && opts.bootstrapDir !== undefined) {
|
|
1295
|
-
await runBootstrap(opts.bootstrapDir, true);
|
|
1296
|
-
checkpoint();
|
|
1297
|
-
}
|
|
1298
|
-
if (opts.source?.watch) {
|
|
1299
|
-
unwatch = opts.source.watch(onConfigChange, (err) => log.error("config watch error", { error: err.message }));
|
|
1300
|
-
}
|
|
1301
|
-
// 所有角色都监听:worker-only 时 HTTP 应用只有健康端点
|
|
1302
|
-
listenPromise = httpApp.listen(config.http.port);
|
|
1303
|
-
port = await listenPromise;
|
|
1304
|
-
checkpoint();
|
|
1305
|
-
log.info("kernel started", { roles: config.roles, port: kernel.port });
|
|
1306
|
-
await warnIfSetupPending();
|
|
1307
|
-
})();
|
|
1308
|
-
try {
|
|
1309
|
-
await startPromise;
|
|
1310
|
-
}
|
|
1311
|
-
catch (e) {
|
|
1312
|
-
if (!stopRequested) {
|
|
1313
|
-
log.error("kernel start failed", { err: e });
|
|
1314
|
-
await kernel.stop();
|
|
1315
|
-
}
|
|
1316
|
-
throw e;
|
|
1317
|
-
}
|
|
1318
|
-
},
|
|
1319
|
-
stop() {
|
|
1320
|
-
stopRequested = true;
|
|
1321
|
-
stopPromise ??= doStop();
|
|
1322
|
-
return stopPromise;
|
|
1323
|
-
},
|
|
1324
|
-
};
|
|
1325
|
-
return kernel;
|
|
1326
|
-
}
|