@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +92 -8
- package/dist/admin/admin.controller.d.ts +52 -71
- package/dist/admin/admin.controller.js +117 -63
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/admin.schemas.d.ts +57 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +47 -16
- package/dist/admin/extensions.controller.js +94 -23
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +9 -9
- package/dist/admin/setup.controller.js +28 -26
- package/dist/admin/setup.service.d.ts +20 -28
- package/dist/admin/setup.service.js +65 -65
- package/dist/agents/agent-lookup.d.ts +72 -0
- package/dist/agents/agent-lookup.js +208 -0
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +54 -169
- package/dist/agents/agents.controller.js +172 -37
- package/dist/agents/agents.module.d.ts +10 -0
- package/dist/agents/agents.module.js +71 -0
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +104 -76
- package/dist/agents/agents.service.js +509 -383
- package/dist/agents/definition.d.ts +133 -21
- package/dist/agents/definition.js +361 -41
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +868 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +114 -0
- package/dist/agents/profile.js +55 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +78 -6
- package/dist/agents/templates.controller.js +154 -8
- package/dist/agents/templates.d.ts +132 -30
- package/dist/agents/templates.js +500 -46
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +80 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +216 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +102 -52
- package/dist/catalog/admin-catalog.controller.js +222 -67
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +232 -0
- package/dist/catalog/catalog-content.js +367 -0
- package/dist/catalog/catalog-files.d.ts +41 -0
- package/dist/catalog/catalog-files.js +86 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +290 -0
- package/dist/catalog/catalog-items.js +676 -0
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1124 -0
- package/dist/catalog/catalog.module.d.ts +12 -0
- package/dist/catalog/catalog.module.js +81 -0
- package/dist/catalog/catalog.service.d.ts +141 -206
- package/dist/catalog/catalog.service.js +237 -528
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/cli.d.ts +14 -3
- package/dist/catalog/cli.js +39 -32
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +90 -0
- package/dist/catalog/component-scope.controller.js +234 -0
- package/dist/catalog/component-scope.schemas.d.ts +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +327 -0
- package/dist/catalog/component-scope.service.js +990 -0
- package/dist/catalog/component-state.d.ts +188 -0
- package/dist/catalog/component-state.js +455 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- package/dist/catalog/job-ids.d.ts +45 -0
- package/dist/catalog/job-ids.js +40 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +53 -44
- package/dist/catalog/marketplaces.controller.js +146 -51
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +136 -26
- package/dist/catalog/marketplaces.service.js +663 -281
- package/dist/catalog/org-catalog.controller.d.ts +115 -63
- package/dist/catalog/org-catalog.controller.js +207 -100
- package/dist/catalog/org-catalog.schemas.d.ts +88 -0
- package/dist/catalog/org-catalog.schemas.js +93 -0
- package/dist/catalog/org-catalog.service.d.ts +89 -216
- package/dist/catalog/org-catalog.service.js +431 -472
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +113 -0
- package/dist/catalog/org-extension.controller.js +271 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +801 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +223 -0
- package/dist/catalog/platform-components.js +763 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +270 -68
- package/dist/catalog/plugin-import.js +1004 -277
- package/dist/catalog/plugin-install.d.ts +251 -65
- package/dist/catalog/plugin-install.js +1128 -344
- package/dist/catalog/plugin-package.js +14 -1
- package/dist/catalog/plugin-upgrade.d.ts +301 -188
- package/dist/catalog/plugin-upgrade.js +1256 -1068
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +205 -117
- package/dist/catalog/requests.service.js +612 -369
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +11 -4
- package/dist/channels/cards.d.ts +33 -11
- package/dist/channels/cards.js +96 -24
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +130 -0
- package/dist/channels/channels.schemas.d.ts +37 -0
- package/dist/channels/channels.schemas.js +38 -0
- package/dist/channels/connections.controller.d.ts +44 -37
- package/dist/channels/connections.controller.js +83 -38
- package/dist/channels/connections.service.d.ts +101 -30
- package/dist/channels/connections.service.js +380 -147
- package/dist/channels/inbound.d.ts +44 -38
- package/dist/channels/inbound.js +190 -44
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +71 -80
- package/dist/channels/outbound.js +219 -201
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +34 -8
- package/dist/channels/threads.js +79 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/docs.js +5 -1
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +51 -3
- package/dist/config/schema.js +269 -27
- package/dist/conversations/access.d.ts +31 -0
- package/dist/conversations/access.js +110 -0
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +60 -22
- package/dist/conversations/attachments.service.js +249 -51
- package/dist/conversations/conversations.controller.d.ts +86 -50
- package/dist/conversations/conversations.controller.js +184 -103
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +72 -0
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +166 -49
- package/dist/conversations/conversations.service.js +383 -179
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +64 -27
- package/dist/conversations/event-log.js +167 -31
- package/dist/conversations/events.d.ts +252 -9
- package/dist/conversations/events.js +243 -32
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +53 -58
- package/dist/conversations/queue.js +37 -293
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +350 -0
- package/dist/conversations/titles.d.ts +83 -27
- package/dist/conversations/titles.js +195 -70
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +26 -1
- package/dist/ctx/create-ctx.js +45 -16
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +550 -25
- package/dist/db/pool.d.ts +10 -0
- package/dist/db/pool.js +4 -0
- package/dist/devices/device-auth.controller.d.ts +42 -0
- package/dist/devices/device-auth.controller.js +116 -0
- package/dist/devices/device-auth.d.ts +119 -0
- package/dist/devices/device-auth.js +403 -0
- package/dist/devices/device-auth.module.d.ts +7 -0
- package/dist/devices/device-auth.module.js +25 -0
- package/dist/devices/device-gateway.d.ts +128 -0
- package/dist/devices/device-gateway.js +530 -0
- package/dist/devices/device-provider.d.ts +89 -0
- package/dist/devices/device-provider.js +151 -0
- package/dist/devices/device-routes.d.ts +36 -0
- package/dist/devices/device-routes.js +90 -0
- package/dist/devices/devices.module.d.ts +16 -0
- package/dist/devices/devices.module.js +44 -0
- package/dist/devices/dto.d.ts +66 -0
- package/dist/devices/dto.js +44 -0
- package/dist/devices/keys.d.ts +25 -0
- package/dist/devices/keys.js +25 -0
- package/dist/devices/machines.d.ts +118 -0
- package/dist/devices/machines.js +366 -0
- package/dist/devices/relay.d.ts +100 -0
- package/dist/devices/relay.js +373 -0
- package/dist/devices/targets.d.ts +28 -0
- package/dist/devices/targets.js +73 -0
- package/dist/environments/access.d.ts +66 -0
- package/dist/environments/access.js +113 -0
- package/dist/environments/conversation-environments.d.ts +75 -0
- package/dist/environments/conversation-environments.js +231 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +36 -0
- package/dist/environments/environments.controller.js +124 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +31 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +251 -0
- package/dist/environments/environments.service.js +791 -0
- package/dist/environments/label.d.ts +11 -0
- package/dist/environments/label.js +25 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +136 -2
- package/dist/errors.js +136 -2
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +75 -10
- package/dist/evals/run-replay.js +218 -94
- package/dist/evals/runs.controller.d.ts +3 -58
- package/dist/evals/runs.controller.js +18 -50
- package/dist/evals/runs.service.d.ts +31 -52
- package/dist/evals/runs.service.js +281 -255
- package/dist/evals/sets.controller.d.ts +3 -29
- package/dist/evals/sets.controller.js +18 -39
- package/dist/evals/sets.service.d.ts +29 -13
- package/dist/evals/sets.service.js +262 -202
- package/dist/evals/snapshot.d.ts +5 -4
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +6 -8
- package/dist/evals/step-replay.js +17 -10
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +13 -7
- package/dist/evals/trajectory.service.js +56 -21
- package/dist/evals/worker.d.ts +48 -31
- package/dist/evals/worker.js +229 -123
- package/dist/extensions/admin-ops.d.ts +133 -41
- package/dist/extensions/admin-ops.js +378 -172
- package/dist/extensions/admin-view.d.ts +82 -32
- package/dist/extensions/admin-view.js +284 -71
- package/dist/extensions/approvals.d.ts +24 -10
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +112 -45
- package/dist/extensions/bootstrap.d.ts +136 -46
- package/dist/extensions/bootstrap.js +417 -167
- package/dist/extensions/cli.d.ts +32 -10
- package/dist/extensions/cli.js +52 -98
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +19 -0
- package/dist/extensions/config-issues.js +48 -0
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +55 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +146 -70
- package/dist/extensions/deployment-config.js +439 -246
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +96 -0
- package/dist/extensions/hooks.d.ts +40 -6
- package/dist/extensions/hooks.js +83 -17
- package/dist/extensions/host.d.ts +161 -80
- package/dist/extensions/host.js +505 -213
- package/dist/extensions/installs.d.ts +73 -19
- package/dist/extensions/installs.js +174 -37
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +45 -0
- package/dist/extensions/locks.js +112 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.d.ts +141 -49
- package/dist/extensions/org-config.js +471 -243
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +59 -6
- package/dist/extensions/permission-view.js +7 -5
- package/dist/extensions/plugin-guides.d.ts +129 -0
- package/dist/extensions/plugin-guides.js +283 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +91 -4
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +19 -10
- package/dist/extensions/sources.js +34 -13
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +19 -12
- package/dist/files/previewers.d.ts +21 -19
- package/dist/files/previewers.js +114 -38
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +86 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +83 -52
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +7 -3
- package/dist/http/gateway-routes.js +16 -0
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +130 -38
- package/dist/identity/accounts.js +373 -186
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +9 -5
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +40 -30
- package/dist/identity/auth.guard.d.ts +16 -8
- package/dist/identity/auth.guard.js +41 -13
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +59 -0
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +32 -15
- package/dist/identity/me.controller.js +78 -33
- package/dist/identity/me.schemas.d.ts +14 -0
- package/dist/identity/me.schemas.js +17 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +24 -10
- package/dist/identity/sessions.js +119 -42
- package/dist/identity/settings.d.ts +42 -23
- package/dist/identity/settings.js +137 -72
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/identity/super-admin.d.ts +20 -0
- package/dist/identity/super-admin.js +81 -0
- package/dist/inbox/inbox.module.d.ts +6 -0
- package/dist/inbox/inbox.module.js +26 -0
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +68 -11
- package/dist/inbox/inbox.service.js +104 -13
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +25 -14
- package/dist/index.js +20 -9
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +173 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +157 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +91 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +121 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +90 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +18 -0
- package/dist/infra/logging/logging.module.js +52 -0
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +13 -0
- package/dist/infra/queue/redis-connection.js +25 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +91 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +36 -0
- package/dist/infra/throttler/named-throttlers.js +157 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +20 -0
- package/dist/infra/tokens.js +20 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +145 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +465 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +53 -10
- package/dist/log.js +168 -18
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +7 -0
- package/dist/models/models.module.js +36 -0
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +13 -5
- package/dist/models/prices.js +69 -39
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +16 -11
- package/dist/models/purposes.d.ts +103 -23
- package/dist/models/purposes.js +208 -77
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +74 -35
- package/dist/orgs/directory-sync.js +243 -132
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +61 -60
- package/dist/orgs/offboarding.js +206 -95
- package/dist/orgs/org-lock.d.ts +33 -19
- package/dist/orgs/org-lock.js +94 -35
- package/dist/orgs/org.guard.d.ts +11 -1
- package/dist/orgs/org.guard.js +45 -34
- package/dist/orgs/orgs.controller.d.ts +13 -16
- package/dist/orgs/orgs.controller.js +29 -20
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +71 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +47 -21
- package/dist/orgs/orgs.service.js +166 -91
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +2 -2
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +45 -14
- package/dist/orgs/settings.service.js +110 -51
- package/dist/overrides.d.ts +63 -0
- package/dist/overrides.js +34 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +667 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +90 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin.ops.d.ts +36 -0
- package/dist/platform/ops/admin.ops.js +389 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +717 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +599 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +853 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +188 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +378 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +28 -0
- package/dist/platform/ops/platform.ops.js +204 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +216 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +39 -0
- package/dist/platform/platform-ops.module.js +122 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +63 -0
- package/dist/roles/gateway-role.d.ts +54 -0
- package/dist/roles/gateway-role.js +118 -0
- package/dist/roles/gateway.module.d.ts +9 -0
- package/dist/roles/gateway.module.js +31 -0
- package/dist/roles/worker-role.d.ts +65 -0
- package/dist/roles/worker-role.js +151 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +106 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/context/build.d.ts +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/environment-paths.d.ts +40 -0
- package/dist/runtime/context/environment-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +11 -4
- package/dist/runtime/hook-calls.js +41 -13
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +37 -18
- package/dist/runtime/loop.d.ts +42 -6
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +50 -74
- package/dist/runtime/maintenance.js +166 -136
- package/dist/runtime/model-call.d.ts +61 -15
- package/dist/runtime/model-call.js +128 -84
- package/dist/runtime/providers.d.ts +158 -27
- package/dist/runtime/providers.js +373 -63
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -0
- package/dist/runtime/run-control.d.ts +43 -0
- package/dist/runtime/run-control.js +89 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-finish.d.ts +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +46 -0
- package/dist/runtime/run-jobs.js +91 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +90 -58
- package/dist/runtime/run-queue.js +566 -297
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +134 -77
- package/dist/runtime/run-worker.js +412 -236
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +122 -0
- package/dist/runtime/step-log.d.ts +51 -0
- package/dist/runtime/step-log.js +111 -0
- package/dist/runtime/stream.controller.d.ts +28 -9
- package/dist/runtime/stream.controller.js +72 -13
- package/dist/runtime/stream.d.ts +27 -6
- package/dist/runtime/stream.js +102 -7
- package/dist/runtime/subagents/child.d.ts +58 -51
- package/dist/runtime/subagents/child.js +105 -86
- package/dist/runtime/subagents/definition.d.ts +32 -28
- package/dist/runtime/subagents/definition.js +89 -143
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +197 -27
- package/dist/runtime/subagents/dispatch.js +336 -270
- package/dist/runtime/subagents/limits.d.ts +32 -8
- package/dist/runtime/subagents/limits.js +44 -8
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +10 -8
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +27 -10
- package/dist/runtime/subagents/roster.js +49 -13
- package/dist/runtime/subagents/skill-fork.d.ts +10 -10
- package/dist/runtime/subagents/skill-fork.js +23 -8
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +43 -0
- package/dist/runtime/subagents/subagents.service.js +106 -0
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +121 -83
- package/dist/runtime/usage-report.js +355 -180
- package/dist/runtime/waits.d.ts +258 -81
- package/dist/runtime/waits.js +800 -263
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +68 -0
- package/dist/sandbox/jobs.js +150 -0
- package/dist/sandbox/leases.d.ts +73 -82
- package/dist/sandbox/leases.js +162 -346
- package/dist/sandbox/providers.d.ts +46 -0
- package/dist/sandbox/providers.js +83 -0
- package/dist/sandbox/sandbox.module.d.ts +9 -0
- package/dist/sandbox/sandbox.module.js +36 -0
- package/dist/sandbox/sandbox.service.d.ts +359 -151
- package/dist/sandbox/sandbox.service.js +950 -435
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/skills/catalog.d.ts +40 -26
- package/dist/skills/catalog.js +120 -99
- package/dist/skills/changes.controller.d.ts +11 -4
- package/dist/skills/changes.controller.js +34 -9
- package/dist/skills/changes.service.d.ts +31 -21
- package/dist/skills/changes.service.js +426 -368
- package/dist/skills/invocable.controller.d.ts +2 -2
- package/dist/skills/invocable.controller.js +10 -7
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +19 -18
- package/dist/skills/invoke.js +68 -24
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +33 -7
- package/dist/skills/skills.controller.js +79 -12
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +39 -0
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +151 -44
- package/dist/skills/skills.service.js +636 -204
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +14 -11
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +53 -27
- package/dist/tools/approvals.service.js +365 -260
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +109 -0
- package/dist/tools/builtin-names.js +173 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +41 -0
- package/dist/tools/builtins/builtin-tools.js +151 -0
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -0
- package/dist/tools/builtins/read-tool-output.d.ts +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +293 -41
- package/dist/tools/builtins/sandbox/common.d.ts +142 -40
- package/dist/tools/builtins/sandbox/common.js +227 -65
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +21 -18
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +65 -51
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +19 -14
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +155 -36
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +30 -20
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +52 -45
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +32 -21
- package/dist/tools/builtins/skill-load.js +125 -74
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +12 -12
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +16 -3
- package/dist/tools/connectors.controller.js +34 -14
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +80 -18
- package/dist/tools/connectors.service.js +529 -358
- package/dist/tools/credentials.d.ts +20 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +73 -13
- package/dist/tools/info.js +151 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +45 -10
- package/dist/tools/oauth/tokens.js +70 -24
- package/dist/tools/org-tool-switches.d.ts +88 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +108 -80
- package/dist/tools/pipeline.js +396 -409
- package/dist/tools/policy.d.ts +4 -17
- package/dist/tools/policy.js +49 -35
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +215 -84
- package/dist/tools/registry.js +382 -264
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +113 -0
- package/dist/tools/validate.js +1 -1
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +10 -57
- package/dist/ui/views.js +58 -46
- package/package.json +15 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -59
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -21
- package/dist/conversations/sandbox-status.js +0 -24
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -59
- package/dist/http/gateway.module.js +0 -13
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/enterprise-admin.d.ts +0 -14
- package/dist/identity/enterprise-admin.js +0 -27
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
|
@@ -1,31 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { getQueueToken } from "@nestjs/bullmq";
|
|
11
|
+
import { Inject, Injectable, Module, Optional } from "@nestjs/common";
|
|
12
|
+
import { DelayedError, Job, UnrecoverableError } from "bullmq";
|
|
2
13
|
import { sql } from "kysely";
|
|
3
|
-
import {
|
|
4
|
-
import { deepFreeze, errMsg } from "../extensions/hooks.js";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const KEEP_FAILED_S = 7 * 86_400;
|
|
16
|
-
/** Upper bound on kept failed jobs (I-2): a long outage of a billing endpoint cannot grow Redis. */
|
|
17
|
-
const KEEP_FAILED_MAX = 100_000;
|
|
14
|
+
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
15
|
+
import { deepFreeze, errMsg, HookNeedsConfigError, } from "../extensions/hooks.js";
|
|
16
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
17
|
+
import { STALE_RECONCILE_PERIODS } from "../extensions/lifecycle-topics.js";
|
|
18
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
19
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
20
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
21
|
+
import { LockedCron } from "../infra/schedule/locked-cron.decorator.js";
|
|
22
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
23
|
+
import { deliveryRowOfChildRun } from "./subagents/child.js";
|
|
24
|
+
import { modelUsageJobId, queryUsageSubscribers, USAGE_REPORT_ATTEMPTS, USAGE_REPORT_BACKOFF_MS, USAGE_REPORT_JOB, USAGE_REPORT_QUEUE, USAGE_REPORT_RETRY, UsageReportJobsModule, usageReportJobId, usageReportJobOpts, } from "./usage-report-jobs.js";
|
|
25
|
+
export { ModelUsageJobs, modelUsageJobId, queryUsageSubscribers, USAGE_REPORT_ATTEMPTS, USAGE_REPORT_BACKOFF_MS, USAGE_REPORT_QUEUE, USAGE_REPORT_RETRY, UsageReportJobsModule, usageReportJobId, } from "./usage-report-jobs.js";
|
|
18
26
|
/** Warnings about a plugin that cannot take deliveries are logged at most once per this window. */
|
|
19
27
|
const WARN_WINDOW_MS = 60_000;
|
|
20
|
-
/**
|
|
21
|
-
* Upper bound on kept finished jobs (Redis memory). At the default retention it only bites above
|
|
22
|
-
* ~1.1 usage events per second sustained for a day; dedupe needs the jobs only for the sweeper overlap.
|
|
23
|
-
*/
|
|
24
|
-
const KEEP_COMPLETED_MAX = 100_000;
|
|
25
|
-
/** Maintenance job of the sweeper (no `:`), its scheduler id and period. */
|
|
28
|
+
/** The sweeper's cron job name (no `:`; every minute, once across replicas). */
|
|
26
29
|
export const USAGE_SWEEP_JOB = "usage-report-sweep";
|
|
27
|
-
|
|
28
|
-
export
|
|
30
|
+
/** The maintenance scheduler the sweep ran on before it became a `@LockedCron` (retired). */
|
|
31
|
+
export { USAGE_SWEEP_SCHEDULER_ID } from "./job-ids.js";
|
|
29
32
|
/** The sweep leaves the newest events to the fast path (and to transactions still committing). */
|
|
30
33
|
export const USAGE_SWEEP_LAG_MS = 30_000;
|
|
31
34
|
/**
|
|
@@ -35,38 +38,6 @@ export const USAGE_SWEEP_LAG_MS = 30_000;
|
|
|
35
38
|
*/
|
|
36
39
|
export const USAGE_SWEEP_OVERLAP_MS = 10 * 60_000;
|
|
37
40
|
const SWEEP_PAGE = 500;
|
|
38
|
-
const JOB = "usage-report";
|
|
39
|
-
/**
|
|
40
|
-
* Plugins that subscribe to `usage.report` according to deployment state: an approved permission
|
|
41
|
-
* snapshot that declares the `usage.report` hook, for a plugin the deployment still knows: an enabled
|
|
42
|
-
* install, or a config-declared plugin with a replica status row that is not `unloaded`. With `orgId`, only plugins
|
|
43
|
-
* the organization enabled (org config rows and required bootstrap plugins).
|
|
44
|
-
*/
|
|
45
|
-
export async function queryUsageSubscribers(db, orgId) {
|
|
46
|
-
let q = db
|
|
47
|
-
.selectFrom("extension_permission_snapshots as s")
|
|
48
|
-
.select("s.plugin")
|
|
49
|
-
.where(sql `s.permissions -> 'permissions' -> 'hooks' ? 'usage.report'`)
|
|
50
|
-
.where((eb) => eb.or([
|
|
51
|
-
eb.exists(eb
|
|
52
|
-
.selectFrom("extension_installs as i")
|
|
53
|
-
.select(sql `1`.as("one"))
|
|
54
|
-
.whereRef("i.name", "=", "s.plugin")
|
|
55
|
-
.where("i.desired_state", "=", "enabled")),
|
|
56
|
-
// config-declared plugins still declared (and not unloaded) on some replica; installs are
|
|
57
|
-
// covered by desired_state above (their replica rows linger as `unloaded` when disabled)
|
|
58
|
-
eb.exists(eb
|
|
59
|
-
.selectFrom("extension_replica_status as r")
|
|
60
|
-
.select(sql `1`.as("one"))
|
|
61
|
-
.whereRef("r.plugin", "=", "s.plugin")
|
|
62
|
-
.where("r.source", "=", "config")
|
|
63
|
-
.where("r.state", "<>", "unloaded")),
|
|
64
|
-
]));
|
|
65
|
-
if (orgId !== undefined) {
|
|
66
|
-
q = q.where("s.plugin", "in", enabledExtensionsQuery(db, orgId));
|
|
67
|
-
}
|
|
68
|
-
return new Set((await q.execute()).map((r) => r.plugin));
|
|
69
|
-
}
|
|
70
41
|
/**
|
|
71
42
|
* Of `plugins`, those that are **definitely** unservable right now (I-2, N-3): live replicas report
|
|
72
43
|
* them (a `extension_replica_status` row with a heartbeat newer than `staleSeconds`), no live row is
|
|
@@ -106,6 +77,10 @@ class Undeliverable extends Error {
|
|
|
106
77
|
this.name = "Undeliverable";
|
|
107
78
|
}
|
|
108
79
|
}
|
|
80
|
+
/** A job's identity: its `usage` event or its `model_usage` row. */
|
|
81
|
+
const keyOf = (d) => d.usageId !== undefined
|
|
82
|
+
? { usageId: d.usageId }
|
|
83
|
+
: { conversationId: d.conversationId, seq: d.seq };
|
|
109
84
|
/**
|
|
110
85
|
* The next `pending` set (m-2 fence): plugins that failed now, narrowed to what the stored job data
|
|
111
86
|
* still lists. A plugin another (stalled-over) execution already delivered never comes back.
|
|
@@ -137,33 +112,82 @@ export function narrowPending(stored, failed) {
|
|
|
137
112
|
* most 100 000. Each call runs through the instance's `inflight.run`, limited by `hooks.timeoutMs`;
|
|
138
113
|
* when this replica stops, in-flight calls are aborted and the job goes back to the queue without
|
|
139
114
|
* using up an attempt.
|
|
140
|
-
* Handlers must be idempotent by `eventId` (`<conversationId>/<seq
|
|
141
|
-
* log (never model-visible). Compaction calls log usage too (`purpose: "compaction"`) and are reported,
|
|
142
|
-
* as are conversation title calls (`purpose: "title"`, no run: `runId` is "")
|
|
115
|
+
* Handlers must be idempotent by `eventId` (`<conversationId>/<seq>`, or a `model_usage` row id).
|
|
116
|
+
* Nothing is written to the event log (never model-visible). Compaction calls log usage too (`purpose: "compaction"`) and are reported,
|
|
117
|
+
* as are conversation title calls (`purpose: "title"`, no run: `runId` is "") and `WebFetch`
|
|
118
|
+
* extraction calls (`purpose: "web_fetch"`).
|
|
143
119
|
* Single-step eval replays and judge requests log no usage: not reported (M7).
|
|
120
|
+
* - **Model usage outside conversations** (spec B §5.4): each `ctx.models.embed` call writes a
|
|
121
|
+
* `model_usage` row; on its `model_usage.recorded` event `ModelUsageJobs` (`usage-report-jobs.ts`)
|
|
122
|
+
* enqueues job `usage-model-<rowId>` (only while some plugin subscribes); the payload
|
|
123
|
+
* (`purpose: "embedding"`, `eventId` = the row id, the calling `extension`, no conversation fields)
|
|
124
|
+
* is read from the row when the job runs, and the row's `reported_at` is set once nothing is left
|
|
125
|
+
* to deliver; a job that gives up after its last attempt sets `report_failed_at`. The sweep
|
|
126
|
+
* re-enqueues recent rows that are neither (see {@link sweep}).
|
|
144
127
|
*/
|
|
145
|
-
|
|
146
|
-
|
|
128
|
+
let UsageReporter = class UsageReporter {
|
|
129
|
+
kdb;
|
|
147
130
|
queue;
|
|
148
|
-
|
|
131
|
+
host;
|
|
132
|
+
config;
|
|
133
|
+
locks;
|
|
134
|
+
log;
|
|
135
|
+
retry;
|
|
149
136
|
worker;
|
|
150
|
-
workerConn;
|
|
151
137
|
closed = false;
|
|
152
138
|
stopping = new AbortController();
|
|
153
|
-
constructor(
|
|
154
|
-
|
|
139
|
+
constructor(kdb, queue,
|
|
140
|
+
/**
|
|
141
|
+
* The host's hook registry: handlers of the current local plugin generations (through
|
|
142
|
+
* inflight.run), and `has("usage.report")`, the in-process check that lets `enqueue` skip all
|
|
143
|
+
* I/O without handlers; and whether a plugin's current instance is active here.
|
|
144
|
+
*/
|
|
145
|
+
host, config,
|
|
146
|
+
/** The warning throttle's markers (`capk:usage-warn:<plugin>:<kind>`, SET NX PX). */
|
|
147
|
+
locks, log, retry = {
|
|
148
|
+
attempts: USAGE_REPORT_ATTEMPTS,
|
|
149
|
+
backoffMs: USAGE_REPORT_BACKOFF_MS,
|
|
150
|
+
}) {
|
|
151
|
+
this.kdb = kdb;
|
|
152
|
+
this.queue = queue;
|
|
153
|
+
this.host = host;
|
|
154
|
+
this.config = config;
|
|
155
|
+
this.locks = locks;
|
|
156
|
+
this.log = log;
|
|
157
|
+
this.retry = retry;
|
|
158
|
+
queue.on("error", (err) => this.log.error("usage report queue error", { err }));
|
|
155
159
|
}
|
|
156
|
-
|
|
157
|
-
return
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
160
|
+
get db() {
|
|
161
|
+
return this.kdb.db;
|
|
162
|
+
}
|
|
163
|
+
get hooks() {
|
|
164
|
+
return this.host.hooks;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Whether the plugin's current instance is active on this replica (I-2): an active instance that
|
|
168
|
+
* registered no `usage.report` handler is not a subscriber, and its target is dropped.
|
|
169
|
+
*/
|
|
170
|
+
isActive(plugin) {
|
|
171
|
+
return this.host.current(plugin) !== undefined;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Of these plugins, the ones no replica can serve right now (I-2): replicas report them (live
|
|
175
|
+
* `extension_replica_status` rows) and none has them loaded. Their targets are dropped at once
|
|
176
|
+
* instead of failing every attempt. See {@link queryUnservable}.
|
|
177
|
+
*/
|
|
178
|
+
unservable(plugins) {
|
|
179
|
+
return queryUnservable(this.db, plugins, STALE_RECONCILE_PERIODS * this.config.get().extensionHost.reconcileIntervalSeconds);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Plugins that subscribe to `usage.report`, from deployment state (approved manifests in PG),
|
|
183
|
+
* not from this replica's loaded handlers. With `orgId`: only those the organization enabled.
|
|
184
|
+
* See {@link queryUsageSubscribers}.
|
|
185
|
+
*/
|
|
186
|
+
subscribers(orgId) {
|
|
187
|
+
return queryUsageSubscribers(this.db, orgId);
|
|
188
|
+
}
|
|
189
|
+
jobOpts(jobId) {
|
|
190
|
+
return usageReportJobOpts(jobId, this.retry, this.config.get().hooks.usageReportKeepHours);
|
|
167
191
|
}
|
|
168
192
|
/**
|
|
169
193
|
* Enqueues the delivery of one `usage` event. Returns without a job when no plugin subscribes.
|
|
@@ -174,41 +198,45 @@ export class UsageReporter {
|
|
|
174
198
|
return;
|
|
175
199
|
// M-2: no usage.report handler on this replica → no I/O at all. A plugin loaded only on other
|
|
176
200
|
// replicas still gets the event: the sweeper re-offers it within about a minute and a half.
|
|
177
|
-
if (!this.
|
|
201
|
+
if (!this.hooks.has("usage.report"))
|
|
178
202
|
return;
|
|
179
203
|
try {
|
|
180
|
-
if ((await this.
|
|
204
|
+
if ((await this.subscribers()).size === 0)
|
|
181
205
|
return;
|
|
182
|
-
await this.
|
|
206
|
+
await this.queue.add(USAGE_REPORT_JOB, { conversationId, seq }, this.jobOpts(usageReportJobId(conversationId, seq)));
|
|
183
207
|
}
|
|
184
208
|
catch (err) {
|
|
185
|
-
this.
|
|
209
|
+
this.log.warn("cannot enqueue usage report", { conversationId, seq, err });
|
|
186
210
|
}
|
|
187
211
|
}
|
|
188
212
|
/**
|
|
189
213
|
* One sweep (R13): re-enqueues the `usage` events created in `[watermark - overlap, now - lag]` in
|
|
190
214
|
* pages, then advances the watermark to `now - lag`. With no subscriber it only advances. The first
|
|
191
|
-
* sweep starts at `now - lag - overlap`.
|
|
215
|
+
* sweep starts at `now - lag - overlap`. Also re-enqueues the `model_usage` rows of the same
|
|
216
|
+
* window that are neither reported nor given up (spec B §5.4),
|
|
217
|
+
* or, with no subscriber, marks those rows reported (nobody to deliver to). Returns the number of
|
|
218
|
+
* events and rows offered to the queue.
|
|
192
219
|
*/
|
|
193
220
|
async sweep(opts = {}) {
|
|
194
221
|
// bounds and keyset as full-precision timestamp text (microseconds), computed with the DB clock
|
|
195
222
|
// unless a test fixes "now" (m-a, m-c)
|
|
196
223
|
const to = opts.now !== undefined
|
|
197
224
|
? new Date(opts.now - USAGE_SWEEP_LAG_MS).toISOString()
|
|
198
|
-
: (await sql `SELECT (now() - make_interval(secs => ${USAGE_SWEEP_LAG_MS / 1000}))::text AS to`.execute(this.
|
|
225
|
+
: (await sql `SELECT (now() - make_interval(secs => ${USAGE_SWEEP_LAG_MS / 1000}))::text AS to`.execute(this.db)).rows[0]?.to;
|
|
199
226
|
if (to === undefined)
|
|
200
227
|
return 0;
|
|
201
|
-
const row = await this.
|
|
228
|
+
const row = await this.db
|
|
202
229
|
.selectFrom("usage_report_sweep")
|
|
203
230
|
.select(sql `watermark::text`.as("watermark"))
|
|
204
231
|
.where("id", "=", 1)
|
|
205
232
|
.executeTakeFirst();
|
|
206
233
|
const watermark = row?.watermark ?? to;
|
|
207
234
|
let offered = 0;
|
|
208
|
-
|
|
235
|
+
const subscribed = (await this.subscribers()).size > 0;
|
|
236
|
+
if (subscribed) {
|
|
209
237
|
let after;
|
|
210
238
|
for (;;) {
|
|
211
|
-
let q = this.
|
|
239
|
+
let q = this.db
|
|
212
240
|
.selectFrom("conversation_events")
|
|
213
241
|
.select(["conversation_id", "seq", sql `created_at::text`.as("at")])
|
|
214
242
|
.where("type", "=", "usage")
|
|
@@ -224,10 +252,10 @@ export class UsageReporter {
|
|
|
224
252
|
.limit(SWEEP_PAGE)
|
|
225
253
|
.execute();
|
|
226
254
|
if (page.length > 0) {
|
|
227
|
-
await this.
|
|
228
|
-
name:
|
|
255
|
+
await this.queue.addBulk(page.map((r) => ({
|
|
256
|
+
name: USAGE_REPORT_JOB,
|
|
229
257
|
data: { conversationId: r.conversation_id, seq: Number(r.seq) },
|
|
230
|
-
opts: this.jobOpts(r.conversation_id, Number(r.seq)),
|
|
258
|
+
opts: this.jobOpts(usageReportJobId(r.conversation_id, Number(r.seq))),
|
|
231
259
|
})));
|
|
232
260
|
offered += page.length;
|
|
233
261
|
}
|
|
@@ -237,7 +265,8 @@ export class UsageReporter {
|
|
|
237
265
|
after = { at: last.at, conv: last.conversation_id, seq: String(last.seq) };
|
|
238
266
|
}
|
|
239
267
|
}
|
|
240
|
-
await this.
|
|
268
|
+
offered += await this.sweepModelUsage(watermark, to, subscribed);
|
|
269
|
+
await this.db
|
|
241
270
|
.insertInto("usage_report_sweep")
|
|
242
271
|
.values({ id: 1, watermark: sql `${to}::timestamptz` })
|
|
243
272
|
.onConflict((oc) => oc.column("id").doUpdateSet({
|
|
@@ -247,80 +276,167 @@ export class UsageReporter {
|
|
|
247
276
|
.execute();
|
|
248
277
|
return offered;
|
|
249
278
|
}
|
|
250
|
-
/**
|
|
251
|
-
|
|
279
|
+
/**
|
|
280
|
+
* The `model_usage` half of {@link sweep}: rows neither reported nor given up that occurred in
|
|
281
|
+
* the same window as the events (`[watermark - overlap, to]`), oldest first. Bounded like the
|
|
282
|
+
* event sweep, so a row whose job failed for good is never offered again, even after its failed
|
|
283
|
+
* job left Redis (no repeated backlog, no second delivery to plugins already served).
|
|
284
|
+
*/
|
|
285
|
+
async sweepModelUsage(watermark, to, subscribed) {
|
|
286
|
+
if (!subscribed) {
|
|
287
|
+
await this.db
|
|
288
|
+
.updateTable("model_usage")
|
|
289
|
+
.set({ reported_at: sql `now()` })
|
|
290
|
+
.where("reported_at", "is", null)
|
|
291
|
+
.where(sql `occurred_at <= ${to}::timestamptz`)
|
|
292
|
+
.execute();
|
|
293
|
+
return 0;
|
|
294
|
+
}
|
|
295
|
+
let offered = 0;
|
|
296
|
+
let after;
|
|
297
|
+
for (;;) {
|
|
298
|
+
let q = this.db
|
|
299
|
+
.selectFrom("model_usage")
|
|
300
|
+
.select(["id", sql `occurred_at::text`.as("at")])
|
|
301
|
+
.where("reported_at", "is", null)
|
|
302
|
+
.where("report_failed_at", "is", null)
|
|
303
|
+
.where(sql `occurred_at >= ${watermark}::timestamptz - make_interval(secs => ${USAGE_SWEEP_OVERLAP_MS / 1000})`)
|
|
304
|
+
.where(sql `occurred_at <= ${to}::timestamptz`);
|
|
305
|
+
if (after) {
|
|
306
|
+
q = q.where(sql `(occurred_at, id) > (${after.at}::timestamptz, ${after.id}::uuid)`);
|
|
307
|
+
}
|
|
308
|
+
const page = await q.orderBy("occurred_at").orderBy("id").limit(SWEEP_PAGE).execute();
|
|
309
|
+
if (page.length > 0) {
|
|
310
|
+
await this.queue.addBulk(page.map((r) => ({
|
|
311
|
+
name: USAGE_REPORT_JOB,
|
|
312
|
+
data: { usageId: r.id },
|
|
313
|
+
opts: this.jobOpts(modelUsageJobId(r.id)),
|
|
314
|
+
})));
|
|
315
|
+
offered += page.length;
|
|
316
|
+
}
|
|
317
|
+
const last = page.at(-1);
|
|
318
|
+
if (!last || page.length < SWEEP_PAGE)
|
|
319
|
+
break;
|
|
320
|
+
after = { at: last.at, id: last.id };
|
|
321
|
+
}
|
|
322
|
+
return offered;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Starts consuming (worker role only): `worker` is the `@Processor` worker of
|
|
326
|
+
* {@link USAGE_REPORT_QUEUE} (built with the run queue's job lock and stalled detection).
|
|
327
|
+
*/
|
|
328
|
+
startWorker(worker) {
|
|
252
329
|
if (this.worker || this.closed)
|
|
253
330
|
return;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
this.
|
|
260
|
-
connection: this.workerConn,
|
|
261
|
-
concurrency: this.d.config().hooks.usageReportConcurrency,
|
|
262
|
-
lockDuration: jobLockMs,
|
|
263
|
-
stalledInterval: stalledIntervalMs,
|
|
264
|
-
maxStalledCount: 3,
|
|
265
|
-
});
|
|
266
|
-
this.worker.on("error", (err) => this.d.log.error("usage report worker error", { err }));
|
|
267
|
-
this.worker.on("failed", (j, err) => {
|
|
268
|
-
if (!j || err instanceof DelayedError || err.name === "DelayedError")
|
|
269
|
-
return;
|
|
270
|
-
// a definite drop (N-3) was already warned about (throttled); the failed job is the trace
|
|
271
|
-
if (err instanceof UnrecoverableError || err.name === "UnrecoverableError")
|
|
272
|
-
return;
|
|
273
|
-
const final = j.attemptsMade >= (j.opts.attempts ?? 1);
|
|
274
|
-
const fields = {
|
|
275
|
-
jobId: j.id,
|
|
276
|
-
conversationId: j.data.conversationId,
|
|
277
|
-
seq: j.data.seq,
|
|
278
|
-
pending: j.data.pending,
|
|
279
|
-
attempt: j.attemptsMade,
|
|
280
|
-
error: err.message,
|
|
281
|
-
};
|
|
282
|
-
if (final)
|
|
283
|
-
this.d.log.error("usage report given up after retries", fields);
|
|
284
|
-
else
|
|
285
|
-
this.d.log.warn("usage report attempt failed; retrying", fields);
|
|
286
|
-
});
|
|
331
|
+
this.worker = worker;
|
|
332
|
+
void worker.run().catch((err) => this.log.error("usage report worker error", { err }));
|
|
333
|
+
}
|
|
334
|
+
/** The worker's `error` event. */
|
|
335
|
+
onError(err) {
|
|
336
|
+
this.log.error("usage report worker error", { err });
|
|
287
337
|
}
|
|
288
|
-
/**
|
|
338
|
+
/** A job failed (the worker's `failed` event): logs retries and the final failure. */
|
|
339
|
+
onFailed(j, err) {
|
|
340
|
+
if (!j || err instanceof DelayedError || err.name === "DelayedError")
|
|
341
|
+
return;
|
|
342
|
+
// a definite drop (N-3) was already warned about (throttled); the failed job is the trace
|
|
343
|
+
if (err instanceof UnrecoverableError || err.name === "UnrecoverableError")
|
|
344
|
+
return;
|
|
345
|
+
const final = j.attemptsMade >= (j.opts.attempts ?? 1);
|
|
346
|
+
const fields = {
|
|
347
|
+
jobId: j.id,
|
|
348
|
+
...(j.data.usageId !== undefined
|
|
349
|
+
? { usageId: j.data.usageId }
|
|
350
|
+
: { conversationId: j.data.conversationId, seq: j.data.seq }),
|
|
351
|
+
pending: j.data.pending,
|
|
352
|
+
attempt: j.attemptsMade,
|
|
353
|
+
error: err.message,
|
|
354
|
+
};
|
|
355
|
+
if (final) {
|
|
356
|
+
this.log.error("usage report given up after retries", fields);
|
|
357
|
+
void this.markFailed(j.data);
|
|
358
|
+
}
|
|
359
|
+
else
|
|
360
|
+
this.log.warn("usage report attempt failed; retrying", fields);
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Stops: no more enqueues, in-flight calls are aborted (their jobs requeued) and the worker
|
|
364
|
+
* closes. The queue itself closes with the application.
|
|
365
|
+
*/
|
|
289
366
|
async stop() {
|
|
290
367
|
this.closed = true;
|
|
291
368
|
this.stopping.abort();
|
|
292
369
|
const w = this.worker;
|
|
293
370
|
this.worker = undefined;
|
|
294
|
-
// the worker first: its in-flight jobs still use the queue to fence and requeue
|
|
295
371
|
await w?.close().catch(() => { });
|
|
296
|
-
const q = this.queue;
|
|
297
|
-
this.queue = undefined;
|
|
298
|
-
await q?.close().catch(() => { });
|
|
299
|
-
for (const c of [this.workerConn, this.queueConn]) {
|
|
300
|
-
if (c)
|
|
301
|
-
await c.quit().catch(() => c.disconnect());
|
|
302
|
-
}
|
|
303
|
-
this.workerConn = undefined;
|
|
304
|
-
this.queueConn = undefined;
|
|
305
372
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
this.
|
|
311
|
-
|
|
312
|
-
|
|
373
|
+
/** The payload of a job: a `usage` event's or a `model_usage` row's; null when it is gone. */
|
|
374
|
+
payloadOfJob(data) {
|
|
375
|
+
return data.usageId !== undefined
|
|
376
|
+
? this.payloadOfUsage(data.usageId)
|
|
377
|
+
: this.payloadOf(data.conversationId, data.seq);
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* The payload of one `model_usage` row (spec B §5.4): purpose `embedding`, the calling extension,
|
|
381
|
+
* no conversation fields; `eventId` is the row id. Null when the row no longer exists.
|
|
382
|
+
*/
|
|
383
|
+
async payloadOfUsage(id) {
|
|
384
|
+
const row = await this.db
|
|
385
|
+
.selectFrom("model_usage")
|
|
386
|
+
.select(["id", "org_id", "extension", "provider", "model", "input_tokens", "occurred_at"])
|
|
387
|
+
.where("id", "=", id)
|
|
388
|
+
.executeTakeFirst();
|
|
389
|
+
if (!row)
|
|
390
|
+
return null;
|
|
391
|
+
return {
|
|
392
|
+
eventId: row.id,
|
|
393
|
+
purpose: "embedding",
|
|
394
|
+
orgId: row.org_id,
|
|
395
|
+
extension: row.extension,
|
|
396
|
+
provider: row.provider,
|
|
397
|
+
model: row.model,
|
|
398
|
+
usage: {
|
|
399
|
+
inputTokens: row.input_tokens,
|
|
400
|
+
outputTokens: 0,
|
|
401
|
+
cacheReadTokens: 0,
|
|
402
|
+
cacheWriteTokens: 0,
|
|
403
|
+
},
|
|
404
|
+
occurredAt: new Date(row.occurred_at).toISOString(),
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
/** A `model_usage` job is done (delivered, or nothing left to deliver to): marks the row. */
|
|
408
|
+
async markReported(data) {
|
|
409
|
+
if (data.usageId === undefined)
|
|
410
|
+
return;
|
|
411
|
+
await this.db
|
|
412
|
+
.updateTable("model_usage")
|
|
413
|
+
.set({ reported_at: sql `now()` })
|
|
414
|
+
.where("id", "=", data.usageId)
|
|
415
|
+
.where("reported_at", "is", null)
|
|
416
|
+
.execute();
|
|
417
|
+
}
|
|
418
|
+
/** A `model_usage` job gave up after its last attempt: the sweep never offers the row again. */
|
|
419
|
+
async markFailed(data) {
|
|
420
|
+
if (data.usageId === undefined)
|
|
421
|
+
return;
|
|
422
|
+
try {
|
|
423
|
+
await this.db
|
|
424
|
+
.updateTable("model_usage")
|
|
425
|
+
.set({ report_failed_at: sql `now()` })
|
|
426
|
+
.where("id", "=", data.usageId)
|
|
427
|
+
.where("reported_at", "is", null)
|
|
428
|
+
.execute();
|
|
429
|
+
}
|
|
430
|
+
catch (err) {
|
|
431
|
+
this.log.warn("cannot mark a model usage report as given up", { usageId: data.usageId, err });
|
|
313
432
|
}
|
|
314
|
-
return this.queue;
|
|
315
433
|
}
|
|
316
434
|
/** The payload of one usage event, read from the log; null when the event no longer exists. */
|
|
317
435
|
async payloadOf(conversationId, seq) {
|
|
318
|
-
const row = await this.
|
|
436
|
+
const row = await this.db
|
|
319
437
|
.selectFrom("conversation_events as e")
|
|
320
438
|
.innerJoin("conversations as c", "c.id", "e.conversation_id")
|
|
321
439
|
.leftJoin("runs as r", "r.id", "e.run_id")
|
|
322
|
-
// a sub-agent's run: its dispatch says where it was dispatched from (spec §11)
|
|
323
|
-
.leftJoin("subagent_dispatches as sd", "sd.child_run_id", "e.run_id")
|
|
324
440
|
.select([
|
|
325
441
|
"e.payload",
|
|
326
442
|
"e.run_id",
|
|
@@ -331,9 +447,6 @@ export class UsageReporter {
|
|
|
331
447
|
"c.account_id",
|
|
332
448
|
"c.kind",
|
|
333
449
|
"r.trigger_account_id",
|
|
334
|
-
"sd.parent_conversation_id",
|
|
335
|
-
"sd.parent_run_id",
|
|
336
|
-
"sd.parent_call_id",
|
|
337
450
|
])
|
|
338
451
|
.where("e.conversation_id", "=", conversationId)
|
|
339
452
|
.where("e.seq", "=", String(seq))
|
|
@@ -341,6 +454,11 @@ export class UsageReporter {
|
|
|
341
454
|
if (row?.type !== "usage")
|
|
342
455
|
return null;
|
|
343
456
|
const p = row.payload;
|
|
457
|
+
// a sub-agent's run: where it was dispatched from (spec §11), its own dispatch, else (a wake
|
|
458
|
+
// run nobody dispatched, agent map spec §5.3) its conversation's latest one
|
|
459
|
+
const parent = row.kind === "subagent" && row.run_id !== null
|
|
460
|
+
? await deliveryRowOfChildRun(this.db, row.run_id)
|
|
461
|
+
: null;
|
|
344
462
|
return {
|
|
345
463
|
eventId: `${conversationId}/${seq}`,
|
|
346
464
|
purpose: p.purpose ?? "step",
|
|
@@ -351,13 +469,11 @@ export class UsageReporter {
|
|
|
351
469
|
// a sub-agent's calls report "chat" (spec §11: the SDK union is not widened)
|
|
352
470
|
conversationKind: row.kind === "eval" ? "eval" : "chat",
|
|
353
471
|
runId: row.run_id ?? "",
|
|
354
|
-
...(
|
|
355
|
-
row.parent_run_id !== null &&
|
|
356
|
-
row.parent_call_id !== null && {
|
|
472
|
+
...(parent !== null && {
|
|
357
473
|
parent: {
|
|
358
|
-
conversationId:
|
|
359
|
-
runId:
|
|
360
|
-
callId:
|
|
474
|
+
conversationId: parent.parentConversationId,
|
|
475
|
+
runId: parent.parentRunId,
|
|
476
|
+
callId: parent.parentCallId,
|
|
361
477
|
},
|
|
362
478
|
}),
|
|
363
479
|
provider: p.provider,
|
|
@@ -377,48 +493,50 @@ export class UsageReporter {
|
|
|
377
493
|
* dropped can stay, so a plugin another execution delivered never comes back.
|
|
378
494
|
*/
|
|
379
495
|
async writePending(j, next, dropped) {
|
|
380
|
-
const fresh = j.id === undefined ? undefined : await Job.fromId(this.
|
|
496
|
+
const fresh = j.id === undefined ? undefined : await Job.fromId(this.queue, j.id);
|
|
381
497
|
const data = fresh?.data;
|
|
382
498
|
const stored = data?.pending ?? j.data.pending;
|
|
383
499
|
const storedDropped = data?.dropped ?? j.data.dropped ?? {};
|
|
384
500
|
const allowed = stored === undefined ? undefined : [...stored, ...Object.keys(storedDropped)];
|
|
385
501
|
const keep = [...dropped].filter(([p]) => allowed === undefined || allowed.includes(p));
|
|
386
502
|
const out = {
|
|
387
|
-
|
|
388
|
-
seq: j.data.seq,
|
|
503
|
+
...keyOf(j.data),
|
|
389
504
|
pending: narrowPending(allowed, next),
|
|
390
505
|
...(keep.length > 0 && { dropped: Object.fromEntries(keep) }),
|
|
391
506
|
};
|
|
392
507
|
await j.updateData(out);
|
|
393
508
|
j.data = out;
|
|
394
509
|
}
|
|
510
|
+
/** One delivery job (the `@Processor` of {@link USAGE_REPORT_QUEUE} calls it). */
|
|
395
511
|
async process(j, token) {
|
|
396
|
-
const
|
|
397
|
-
|
|
512
|
+
const payload = await this.payloadOfJob(j.data);
|
|
513
|
+
// conversation (or org) deleted meanwhile: nothing to report
|
|
398
514
|
if (payload === null)
|
|
399
|
-
return;
|
|
400
|
-
const subscribers = await this.
|
|
515
|
+
return;
|
|
516
|
+
const subscribers = await this.subscribers(payload.orgId);
|
|
401
517
|
if (j.data.pending === undefined) {
|
|
402
518
|
// first attempt: the targets come from deployment state, recorded so later attempts (on any
|
|
403
519
|
// replica) deliver exactly the plugins that have not succeeded yet
|
|
404
520
|
const targets = [...subscribers];
|
|
405
|
-
await j.updateData({
|
|
521
|
+
await j.updateData({ ...keyOf(j.data), pending: targets });
|
|
406
522
|
j.data.pending = targets;
|
|
407
523
|
}
|
|
408
524
|
// plugins the organization disabled meanwhile are dropped (not a failure)
|
|
409
525
|
const targets = (j.data.pending ?? []).filter((p) => subscribers.has(p));
|
|
410
|
-
if (targets.length === 0)
|
|
526
|
+
if (targets.length === 0) {
|
|
527
|
+
await this.markReported(j.data);
|
|
411
528
|
return;
|
|
529
|
+
}
|
|
412
530
|
const byPlugin = new Map();
|
|
413
|
-
for (const h of this.
|
|
531
|
+
for (const h of this.hooks.handlers("usage.report")) {
|
|
414
532
|
byPlugin.set(h.plugin, [...(byPlugin.get(h.plugin) ?? []), h.handler]);
|
|
415
533
|
}
|
|
416
534
|
const frozen = deepFreeze(structuredClone(payload));
|
|
417
|
-
const timeoutMs = this.
|
|
535
|
+
const timeoutMs = this.config.get().hooks.timeoutMs;
|
|
418
536
|
const results = await Promise.allSettled(targets.map(async (plugin) => {
|
|
419
537
|
const handlers = byPlugin.get(plugin);
|
|
420
538
|
if (!handlers || handlers.length === 0) {
|
|
421
|
-
throw new Undeliverable(plugin, this.
|
|
539
|
+
throw new Undeliverable(plugin, this.isActive(plugin) ? "no_handler" : "not_loaded");
|
|
422
540
|
}
|
|
423
541
|
for (const h of handlers)
|
|
424
542
|
await this.call(h, frozen, timeoutMs);
|
|
@@ -440,9 +558,15 @@ export class UsageReporter {
|
|
|
440
558
|
notHere.push(plugin);
|
|
441
559
|
return;
|
|
442
560
|
}
|
|
561
|
+
// layering spec A §6: the extension's effective config is not valid in this organization, so
|
|
562
|
+
// it is not called there (an observe hook skipped); dropped, not retried
|
|
563
|
+
if (r.reason instanceof HookNeedsConfigError) {
|
|
564
|
+
dropped.set(plugin, "needs configuration in this organization");
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
443
567
|
failed.push(plugin);
|
|
444
568
|
if (!this.stopping.signal.aborted) {
|
|
445
|
-
this.
|
|
569
|
+
this.log.warn("usage.report delivery to a plugin failed", {
|
|
446
570
|
plugin,
|
|
447
571
|
eventId: payload.eventId,
|
|
448
572
|
error: errMsg(r.reason),
|
|
@@ -453,7 +577,7 @@ export class UsageReporter {
|
|
|
453
577
|
// target is dropped only when it is definitely unservable; unknown ones fail the job as before.
|
|
454
578
|
const final = j.attemptsMade + 1 >= (j.opts.attempts ?? 1);
|
|
455
579
|
const gone = final && notHere.length > 0 && !this.stopping.signal.aborted
|
|
456
|
-
? await this.
|
|
580
|
+
? await this.unservableOrNone(notHere)
|
|
457
581
|
: new Set();
|
|
458
582
|
for (const plugin of notHere) {
|
|
459
583
|
if (gone.has(plugin))
|
|
@@ -481,6 +605,8 @@ export class UsageReporter {
|
|
|
481
605
|
// m-1: pending = the dropped plugins only, so a manual retry reaches them and never the
|
|
482
606
|
// plugins already served
|
|
483
607
|
await this.writePending(j, [...allDropped.keys()], allDropped);
|
|
608
|
+
// delivered to every target still servable (a definite drop is final too): the row is done
|
|
609
|
+
await this.markReported(j.data);
|
|
484
610
|
const traced = new Map([...allDropped].filter(([p]) => j.data.dropped?.[p] !== undefined));
|
|
485
611
|
if (traced.size === 0)
|
|
486
612
|
return;
|
|
@@ -495,15 +621,13 @@ export class UsageReporter {
|
|
|
495
621
|
}
|
|
496
622
|
throw new UnrecoverableError(`usage.report delivered to the rest;${droppedNote(traced)}`);
|
|
497
623
|
}
|
|
498
|
-
/** {@link
|
|
499
|
-
async
|
|
500
|
-
if (!this.d.unservable)
|
|
501
|
-
return new Set();
|
|
624
|
+
/** {@link unservable}; a lookup failure counts as "unknown" (keep retrying). */
|
|
625
|
+
async unservableOrNone(plugins) {
|
|
502
626
|
try {
|
|
503
|
-
return await this.
|
|
627
|
+
return await this.unservable(plugins);
|
|
504
628
|
}
|
|
505
629
|
catch (err) {
|
|
506
|
-
this.
|
|
630
|
+
this.log.warn("cannot read plugin replica status for usage.report", { err });
|
|
507
631
|
return new Set();
|
|
508
632
|
}
|
|
509
633
|
}
|
|
@@ -511,15 +635,13 @@ export class UsageReporter {
|
|
|
511
635
|
async warnOnce(plugin, kind, msg, fields) {
|
|
512
636
|
let first = true;
|
|
513
637
|
try {
|
|
514
|
-
this.
|
|
515
|
-
const key = `capk:usage-warn:${plugin}:${kind}`;
|
|
516
|
-
first = (await this.queueConn?.set(key, "1", "PX", WARN_WINDOW_MS, "NX")) !== null;
|
|
638
|
+
first = await this.locks.lease(`capk:usage-warn:${plugin}:${kind}`, "1", WARN_WINDOW_MS);
|
|
517
639
|
}
|
|
518
640
|
catch {
|
|
519
641
|
// Redis unavailable: log anyway rather than hiding it
|
|
520
642
|
}
|
|
521
643
|
if (first)
|
|
522
|
-
this.
|
|
644
|
+
this.log.warn(msg, fields);
|
|
523
645
|
}
|
|
524
646
|
/** One handler call with its own signal (timeout or replica stop aborts it); rejects on either. */
|
|
525
647
|
async call(h, payload, timeoutMs) {
|
|
@@ -547,4 +669,57 @@ export class UsageReporter {
|
|
|
547
669
|
this.stopping.signal.removeEventListener("abort", onStop);
|
|
548
670
|
}
|
|
549
671
|
}
|
|
550
|
-
}
|
|
672
|
+
};
|
|
673
|
+
UsageReporter = __decorate([
|
|
674
|
+
Injectable(),
|
|
675
|
+
__param(0, Inject(KernelDb)),
|
|
676
|
+
__param(1, Inject(getQueueToken(USAGE_REPORT_QUEUE))),
|
|
677
|
+
__param(2, Inject(ExtensionHost)),
|
|
678
|
+
__param(3, Inject(KernelConfigService)),
|
|
679
|
+
__param(4, Inject(LockService)),
|
|
680
|
+
__param(5, Inject(KERNEL_LOGGER)),
|
|
681
|
+
__param(6, Optional()),
|
|
682
|
+
__param(6, Inject(USAGE_REPORT_RETRY))
|
|
683
|
+
], UsageReporter);
|
|
684
|
+
export { UsageReporter };
|
|
685
|
+
/**
|
|
686
|
+
* The usage sweeper (R13), every minute, once across replicas: {@link UsageReporter.sweep}.
|
|
687
|
+
* Replaces the maintenance scheduler `usage-report-sweep-every` (retired at worker start).
|
|
688
|
+
*/
|
|
689
|
+
let UsageSweepJob = class UsageSweepJob {
|
|
690
|
+
reporter;
|
|
691
|
+
lockService;
|
|
692
|
+
log;
|
|
693
|
+
constructor(reporter, lockService, log) {
|
|
694
|
+
this.reporter = reporter;
|
|
695
|
+
this.lockService = lockService;
|
|
696
|
+
this.log = log;
|
|
697
|
+
}
|
|
698
|
+
async run() {
|
|
699
|
+
await this.reporter.sweep();
|
|
700
|
+
}
|
|
701
|
+
};
|
|
702
|
+
__decorate([
|
|
703
|
+
LockedCron("* * * * *", { name: USAGE_SWEEP_JOB })
|
|
704
|
+
], UsageSweepJob.prototype, "run", null);
|
|
705
|
+
UsageSweepJob = __decorate([
|
|
706
|
+
Injectable(),
|
|
707
|
+
__param(0, Inject(UsageReporter)),
|
|
708
|
+
__param(1, Inject(LockService)),
|
|
709
|
+
__param(2, Inject(KERNEL_LOGGER))
|
|
710
|
+
], UsageSweepJob);
|
|
711
|
+
export { UsageSweepJob };
|
|
712
|
+
/**
|
|
713
|
+
* `usage.report` delivery: the producer on every role; the consumer and the sweep ({@link UsageSweepJob})
|
|
714
|
+
* on the worker role (`WorkerModule`).
|
|
715
|
+
*/
|
|
716
|
+
let UsageReportModule = class UsageReportModule {
|
|
717
|
+
};
|
|
718
|
+
UsageReportModule = __decorate([
|
|
719
|
+
Module({
|
|
720
|
+
imports: [ExtensionsModule, UsageReportJobsModule],
|
|
721
|
+
providers: [UsageReporter],
|
|
722
|
+
exports: [UsageReporter, UsageReportJobsModule],
|
|
723
|
+
})
|
|
724
|
+
], UsageReportModule);
|
|
725
|
+
export { UsageReportModule };
|