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