@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +92 -8
- package/dist/admin/admin.controller.d.ts +52 -71
- package/dist/admin/admin.controller.js +117 -63
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/admin.schemas.d.ts +57 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +47 -16
- package/dist/admin/extensions.controller.js +94 -23
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +9 -9
- package/dist/admin/setup.controller.js +28 -26
- package/dist/admin/setup.service.d.ts +20 -28
- package/dist/admin/setup.service.js +65 -65
- package/dist/agents/agent-lookup.d.ts +72 -0
- package/dist/agents/agent-lookup.js +208 -0
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +54 -169
- package/dist/agents/agents.controller.js +172 -37
- package/dist/agents/agents.module.d.ts +10 -0
- package/dist/agents/agents.module.js +71 -0
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +104 -76
- package/dist/agents/agents.service.js +509 -383
- package/dist/agents/definition.d.ts +133 -21
- package/dist/agents/definition.js +361 -41
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +868 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +114 -0
- package/dist/agents/profile.js +55 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +78 -6
- package/dist/agents/templates.controller.js +154 -8
- package/dist/agents/templates.d.ts +132 -30
- package/dist/agents/templates.js +500 -46
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +80 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +216 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +102 -52
- package/dist/catalog/admin-catalog.controller.js +222 -67
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +232 -0
- package/dist/catalog/catalog-content.js +367 -0
- package/dist/catalog/catalog-files.d.ts +41 -0
- package/dist/catalog/catalog-files.js +86 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +290 -0
- package/dist/catalog/catalog-items.js +676 -0
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1124 -0
- package/dist/catalog/catalog.module.d.ts +12 -0
- package/dist/catalog/catalog.module.js +81 -0
- package/dist/catalog/catalog.service.d.ts +141 -206
- package/dist/catalog/catalog.service.js +237 -528
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/cli.d.ts +14 -3
- package/dist/catalog/cli.js +39 -32
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +90 -0
- package/dist/catalog/component-scope.controller.js +234 -0
- package/dist/catalog/component-scope.schemas.d.ts +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +327 -0
- package/dist/catalog/component-scope.service.js +990 -0
- package/dist/catalog/component-state.d.ts +188 -0
- package/dist/catalog/component-state.js +455 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- package/dist/catalog/job-ids.d.ts +45 -0
- package/dist/catalog/job-ids.js +40 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +53 -44
- package/dist/catalog/marketplaces.controller.js +146 -51
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +136 -26
- package/dist/catalog/marketplaces.service.js +663 -281
- package/dist/catalog/org-catalog.controller.d.ts +115 -63
- package/dist/catalog/org-catalog.controller.js +207 -100
- package/dist/catalog/org-catalog.schemas.d.ts +88 -0
- package/dist/catalog/org-catalog.schemas.js +93 -0
- package/dist/catalog/org-catalog.service.d.ts +89 -216
- package/dist/catalog/org-catalog.service.js +431 -472
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +113 -0
- package/dist/catalog/org-extension.controller.js +271 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +801 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +223 -0
- package/dist/catalog/platform-components.js +763 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +270 -68
- package/dist/catalog/plugin-import.js +1004 -277
- package/dist/catalog/plugin-install.d.ts +251 -65
- package/dist/catalog/plugin-install.js +1128 -344
- package/dist/catalog/plugin-package.js +14 -1
- package/dist/catalog/plugin-upgrade.d.ts +301 -188
- package/dist/catalog/plugin-upgrade.js +1256 -1068
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +205 -117
- package/dist/catalog/requests.service.js +612 -369
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +11 -4
- package/dist/channels/cards.d.ts +33 -11
- package/dist/channels/cards.js +96 -24
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +130 -0
- package/dist/channels/channels.schemas.d.ts +37 -0
- package/dist/channels/channels.schemas.js +38 -0
- package/dist/channels/connections.controller.d.ts +44 -37
- package/dist/channels/connections.controller.js +83 -38
- package/dist/channels/connections.service.d.ts +101 -30
- package/dist/channels/connections.service.js +380 -147
- package/dist/channels/inbound.d.ts +44 -38
- package/dist/channels/inbound.js +190 -44
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +71 -80
- package/dist/channels/outbound.js +219 -201
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +34 -8
- package/dist/channels/threads.js +79 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/docs.js +5 -1
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +51 -3
- package/dist/config/schema.js +269 -27
- package/dist/conversations/access.d.ts +31 -0
- package/dist/conversations/access.js +110 -0
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +60 -22
- package/dist/conversations/attachments.service.js +249 -51
- package/dist/conversations/conversations.controller.d.ts +86 -50
- package/dist/conversations/conversations.controller.js +184 -103
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +72 -0
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +166 -49
- package/dist/conversations/conversations.service.js +383 -179
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +64 -27
- package/dist/conversations/event-log.js +167 -31
- package/dist/conversations/events.d.ts +252 -9
- package/dist/conversations/events.js +243 -32
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +53 -58
- package/dist/conversations/queue.js +37 -293
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +350 -0
- package/dist/conversations/titles.d.ts +83 -27
- package/dist/conversations/titles.js +195 -70
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +26 -1
- package/dist/ctx/create-ctx.js +45 -16
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +550 -25
- package/dist/db/pool.d.ts +10 -0
- package/dist/db/pool.js +4 -0
- package/dist/devices/device-auth.controller.d.ts +42 -0
- package/dist/devices/device-auth.controller.js +116 -0
- package/dist/devices/device-auth.d.ts +119 -0
- package/dist/devices/device-auth.js +403 -0
- package/dist/devices/device-auth.module.d.ts +7 -0
- package/dist/devices/device-auth.module.js +25 -0
- package/dist/devices/device-gateway.d.ts +128 -0
- package/dist/devices/device-gateway.js +530 -0
- package/dist/devices/device-provider.d.ts +89 -0
- package/dist/devices/device-provider.js +151 -0
- package/dist/devices/device-routes.d.ts +36 -0
- package/dist/devices/device-routes.js +90 -0
- package/dist/devices/devices.module.d.ts +16 -0
- package/dist/devices/devices.module.js +44 -0
- package/dist/devices/dto.d.ts +66 -0
- package/dist/devices/dto.js +44 -0
- package/dist/devices/keys.d.ts +25 -0
- package/dist/devices/keys.js +25 -0
- package/dist/devices/machines.d.ts +118 -0
- package/dist/devices/machines.js +366 -0
- package/dist/devices/relay.d.ts +100 -0
- package/dist/devices/relay.js +373 -0
- package/dist/devices/targets.d.ts +28 -0
- package/dist/devices/targets.js +73 -0
- package/dist/environments/access.d.ts +66 -0
- package/dist/environments/access.js +113 -0
- package/dist/environments/conversation-environments.d.ts +75 -0
- package/dist/environments/conversation-environments.js +231 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +36 -0
- package/dist/environments/environments.controller.js +124 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +31 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +251 -0
- package/dist/environments/environments.service.js +791 -0
- package/dist/environments/label.d.ts +11 -0
- package/dist/environments/label.js +25 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +136 -2
- package/dist/errors.js +136 -2
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +75 -10
- package/dist/evals/run-replay.js +218 -94
- package/dist/evals/runs.controller.d.ts +3 -58
- package/dist/evals/runs.controller.js +18 -50
- package/dist/evals/runs.service.d.ts +31 -52
- package/dist/evals/runs.service.js +281 -255
- package/dist/evals/sets.controller.d.ts +3 -29
- package/dist/evals/sets.controller.js +18 -39
- package/dist/evals/sets.service.d.ts +29 -13
- package/dist/evals/sets.service.js +262 -202
- package/dist/evals/snapshot.d.ts +5 -4
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +6 -8
- package/dist/evals/step-replay.js +17 -10
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +13 -7
- package/dist/evals/trajectory.service.js +56 -21
- package/dist/evals/worker.d.ts +48 -31
- package/dist/evals/worker.js +229 -123
- package/dist/extensions/admin-ops.d.ts +133 -41
- package/dist/extensions/admin-ops.js +378 -172
- package/dist/extensions/admin-view.d.ts +82 -32
- package/dist/extensions/admin-view.js +284 -71
- package/dist/extensions/approvals.d.ts +24 -10
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +112 -45
- package/dist/extensions/bootstrap.d.ts +136 -46
- package/dist/extensions/bootstrap.js +417 -167
- package/dist/extensions/cli.d.ts +32 -10
- package/dist/extensions/cli.js +52 -98
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +19 -0
- package/dist/extensions/config-issues.js +48 -0
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +55 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +146 -70
- package/dist/extensions/deployment-config.js +439 -246
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +96 -0
- package/dist/extensions/hooks.d.ts +40 -6
- package/dist/extensions/hooks.js +83 -17
- package/dist/extensions/host.d.ts +161 -80
- package/dist/extensions/host.js +505 -213
- package/dist/extensions/installs.d.ts +73 -19
- package/dist/extensions/installs.js +174 -37
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +45 -0
- package/dist/extensions/locks.js +112 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.d.ts +141 -49
- package/dist/extensions/org-config.js +471 -243
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +59 -6
- package/dist/extensions/permission-view.js +7 -5
- package/dist/extensions/plugin-guides.d.ts +129 -0
- package/dist/extensions/plugin-guides.js +283 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +91 -4
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +19 -10
- package/dist/extensions/sources.js +34 -13
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +19 -12
- package/dist/files/previewers.d.ts +21 -19
- package/dist/files/previewers.js +114 -38
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +86 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +83 -52
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +7 -3
- package/dist/http/gateway-routes.js +16 -0
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +130 -38
- package/dist/identity/accounts.js +373 -186
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +9 -5
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +40 -30
- package/dist/identity/auth.guard.d.ts +16 -8
- package/dist/identity/auth.guard.js +41 -13
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +59 -0
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +32 -15
- package/dist/identity/me.controller.js +78 -33
- package/dist/identity/me.schemas.d.ts +14 -0
- package/dist/identity/me.schemas.js +17 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +24 -10
- package/dist/identity/sessions.js +119 -42
- package/dist/identity/settings.d.ts +42 -23
- package/dist/identity/settings.js +137 -72
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/identity/super-admin.d.ts +20 -0
- package/dist/identity/super-admin.js +81 -0
- package/dist/inbox/inbox.module.d.ts +6 -0
- package/dist/inbox/inbox.module.js +26 -0
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +68 -11
- package/dist/inbox/inbox.service.js +104 -13
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +25 -14
- package/dist/index.js +20 -9
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +173 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +157 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +91 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +121 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +90 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +18 -0
- package/dist/infra/logging/logging.module.js +52 -0
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +13 -0
- package/dist/infra/queue/redis-connection.js +25 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +91 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +36 -0
- package/dist/infra/throttler/named-throttlers.js +157 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +20 -0
- package/dist/infra/tokens.js +20 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +145 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +465 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +53 -10
- package/dist/log.js +168 -18
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +7 -0
- package/dist/models/models.module.js +36 -0
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +13 -5
- package/dist/models/prices.js +69 -39
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +16 -11
- package/dist/models/purposes.d.ts +103 -23
- package/dist/models/purposes.js +208 -77
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +74 -35
- package/dist/orgs/directory-sync.js +243 -132
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +61 -60
- package/dist/orgs/offboarding.js +206 -95
- package/dist/orgs/org-lock.d.ts +33 -19
- package/dist/orgs/org-lock.js +94 -35
- package/dist/orgs/org.guard.d.ts +11 -1
- package/dist/orgs/org.guard.js +45 -34
- package/dist/orgs/orgs.controller.d.ts +13 -16
- package/dist/orgs/orgs.controller.js +29 -20
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +71 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +47 -21
- package/dist/orgs/orgs.service.js +166 -91
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +2 -2
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +45 -14
- package/dist/orgs/settings.service.js +110 -51
- package/dist/overrides.d.ts +63 -0
- package/dist/overrides.js +34 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +667 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +90 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin.ops.d.ts +36 -0
- package/dist/platform/ops/admin.ops.js +389 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +717 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +599 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +853 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +188 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +378 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +28 -0
- package/dist/platform/ops/platform.ops.js +204 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +216 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +39 -0
- package/dist/platform/platform-ops.module.js +122 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +63 -0
- package/dist/roles/gateway-role.d.ts +54 -0
- package/dist/roles/gateway-role.js +118 -0
- package/dist/roles/gateway.module.d.ts +9 -0
- package/dist/roles/gateway.module.js +31 -0
- package/dist/roles/worker-role.d.ts +65 -0
- package/dist/roles/worker-role.js +151 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +106 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/context/build.d.ts +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/environment-paths.d.ts +40 -0
- package/dist/runtime/context/environment-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +11 -4
- package/dist/runtime/hook-calls.js +41 -13
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +37 -18
- package/dist/runtime/loop.d.ts +42 -6
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +50 -74
- package/dist/runtime/maintenance.js +166 -136
- package/dist/runtime/model-call.d.ts +61 -15
- package/dist/runtime/model-call.js +128 -84
- package/dist/runtime/providers.d.ts +158 -27
- package/dist/runtime/providers.js +373 -63
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -0
- package/dist/runtime/run-control.d.ts +43 -0
- package/dist/runtime/run-control.js +89 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-finish.d.ts +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +46 -0
- package/dist/runtime/run-jobs.js +91 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +90 -58
- package/dist/runtime/run-queue.js +566 -297
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +134 -77
- package/dist/runtime/run-worker.js +412 -236
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +122 -0
- package/dist/runtime/step-log.d.ts +51 -0
- package/dist/runtime/step-log.js +111 -0
- package/dist/runtime/stream.controller.d.ts +28 -9
- package/dist/runtime/stream.controller.js +72 -13
- package/dist/runtime/stream.d.ts +27 -6
- package/dist/runtime/stream.js +102 -7
- package/dist/runtime/subagents/child.d.ts +58 -51
- package/dist/runtime/subagents/child.js +105 -86
- package/dist/runtime/subagents/definition.d.ts +32 -28
- package/dist/runtime/subagents/definition.js +89 -143
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +197 -27
- package/dist/runtime/subagents/dispatch.js +336 -270
- package/dist/runtime/subagents/limits.d.ts +32 -8
- package/dist/runtime/subagents/limits.js +44 -8
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +10 -8
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +27 -10
- package/dist/runtime/subagents/roster.js +49 -13
- package/dist/runtime/subagents/skill-fork.d.ts +10 -10
- package/dist/runtime/subagents/skill-fork.js +23 -8
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +43 -0
- package/dist/runtime/subagents/subagents.service.js +106 -0
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +121 -83
- package/dist/runtime/usage-report.js +355 -180
- package/dist/runtime/waits.d.ts +258 -81
- package/dist/runtime/waits.js +800 -263
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +68 -0
- package/dist/sandbox/jobs.js +150 -0
- package/dist/sandbox/leases.d.ts +73 -82
- package/dist/sandbox/leases.js +162 -346
- package/dist/sandbox/providers.d.ts +46 -0
- package/dist/sandbox/providers.js +83 -0
- package/dist/sandbox/sandbox.module.d.ts +9 -0
- package/dist/sandbox/sandbox.module.js +36 -0
- package/dist/sandbox/sandbox.service.d.ts +359 -151
- package/dist/sandbox/sandbox.service.js +950 -435
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/skills/catalog.d.ts +40 -26
- package/dist/skills/catalog.js +120 -99
- package/dist/skills/changes.controller.d.ts +11 -4
- package/dist/skills/changes.controller.js +34 -9
- package/dist/skills/changes.service.d.ts +31 -21
- package/dist/skills/changes.service.js +426 -368
- package/dist/skills/invocable.controller.d.ts +2 -2
- package/dist/skills/invocable.controller.js +10 -7
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +19 -18
- package/dist/skills/invoke.js +68 -24
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +33 -7
- package/dist/skills/skills.controller.js +79 -12
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +39 -0
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +151 -44
- package/dist/skills/skills.service.js +636 -204
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +14 -11
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +53 -27
- package/dist/tools/approvals.service.js +365 -260
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +109 -0
- package/dist/tools/builtin-names.js +173 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +41 -0
- package/dist/tools/builtins/builtin-tools.js +151 -0
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -0
- package/dist/tools/builtins/read-tool-output.d.ts +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +293 -41
- package/dist/tools/builtins/sandbox/common.d.ts +142 -40
- package/dist/tools/builtins/sandbox/common.js +227 -65
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +21 -18
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +65 -51
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +19 -14
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +155 -36
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +30 -20
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +52 -45
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +32 -21
- package/dist/tools/builtins/skill-load.js +125 -74
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +12 -12
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +16 -3
- package/dist/tools/connectors.controller.js +34 -14
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +80 -18
- package/dist/tools/connectors.service.js +529 -358
- package/dist/tools/credentials.d.ts +20 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +73 -13
- package/dist/tools/info.js +151 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +45 -10
- package/dist/tools/oauth/tokens.js +70 -24
- package/dist/tools/org-tool-switches.d.ts +88 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +108 -80
- package/dist/tools/pipeline.js +396 -409
- package/dist/tools/policy.d.ts +4 -17
- package/dist/tools/policy.js +49 -35
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +215 -84
- package/dist/tools/registry.js +382 -264
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +113 -0
- package/dist/tools/validate.js +1 -1
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +10 -57
- package/dist/ui/views.js +58 -46
- package/package.json +15 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -59
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -21
- package/dist/conversations/sandbox-status.js +0 -24
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -59
- package/dist/http/gateway.module.js +0 -13
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/enterprise-admin.d.ts +0 -14
- package/dist/identity/enterprise-admin.js +0 -27
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type JobsOptions } from "bullmq";
|
|
2
|
+
import type { Redis } from "ioredis";
|
|
3
|
+
/** One job to add: its name, data and options (a deterministic `jobId` makes the add idempotent). */
|
|
4
|
+
export interface OneJob<T> {
|
|
5
|
+
name: string;
|
|
6
|
+
data: T;
|
|
7
|
+
opts: JobsOptions;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Adds one job to a kernel queue from a process that hosts no queue of its own (a CLI command),
|
|
11
|
+
* over the caller's Redis connection (left open), with BullMQ's default key prefix like the
|
|
12
|
+
* kernel's queues. The queue handle is closed again before returning.
|
|
13
|
+
*/
|
|
14
|
+
export declare function addJobOnce<T>(connection: Redis, queue: string, job: OneJob<T>): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Queue } from "bullmq";
|
|
2
|
+
/**
|
|
3
|
+
* Adds one job to a kernel queue from a process that hosts no queue of its own (a CLI command),
|
|
4
|
+
* over the caller's Redis connection (left open), with BullMQ's default key prefix like the
|
|
5
|
+
* kernel's queues. The queue handle is closed again before returning.
|
|
6
|
+
*/
|
|
7
|
+
export async function addJobOnce(connection, queue, job) {
|
|
8
|
+
const q = new Queue(queue, { connection });
|
|
9
|
+
try {
|
|
10
|
+
// biome-ignore lint/suspicious/noExplicitAny: BullMQ's name and data generics do not line up here
|
|
11
|
+
await q.add(job.name, job.data, job.opts);
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
await q.close();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type WorkerHost } from "@nestjs/bullmq";
|
|
2
|
+
import type { ClassProvider, Type } from "@nestjs/common";
|
|
3
|
+
import type { WorkerOptions } from "bullmq";
|
|
4
|
+
/** The BullMQ worker options a configured processor takes (connection and prefix come from the queue). */
|
|
5
|
+
export type ProcessorWorkerOptions = Omit<WorkerOptions, "connection" | "autorun" | "prefix" | "sharedConnection">;
|
|
6
|
+
/**
|
|
7
|
+
* A `@Processor(queue)` provider whose worker options come from the application's startup config
|
|
8
|
+
* (`@Processor` reads them from class metadata when the worker is built, at module init, so they
|
|
9
|
+
* cannot be read from an injected service). Returns `{ provide: base, useClass }` with a subclass
|
|
10
|
+
* of `base` decorated for this application only, so two applications in one process (tests, the
|
|
11
|
+
* dual-replica harness) each get their own options. `base` is an `@Injectable` `WorkerHost` without
|
|
12
|
+
* `@Processor` of its own; inject it by `base`.
|
|
13
|
+
*
|
|
14
|
+
* The worker never starts by itself (`autorun: false`): the role that consumes calls
|
|
15
|
+
* `worker.run()` once the start sequence reached it (the kernel's worker role, after the extension
|
|
16
|
+
* load), and pauses it on stop.
|
|
17
|
+
*/
|
|
18
|
+
export declare function configuredProcessor<T extends WorkerHost>(base: Type<T>, queue: string, options: ProcessorWorkerOptions): ClassProvider<T>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Processor } from "@nestjs/bullmq";
|
|
2
|
+
/**
|
|
3
|
+
* A `@Processor(queue)` provider whose worker options come from the application's startup config
|
|
4
|
+
* (`@Processor` reads them from class metadata when the worker is built, at module init, so they
|
|
5
|
+
* cannot be read from an injected service). Returns `{ provide: base, useClass }` with a subclass
|
|
6
|
+
* of `base` decorated for this application only, so two applications in one process (tests, the
|
|
7
|
+
* dual-replica harness) each get their own options. `base` is an `@Injectable` `WorkerHost` without
|
|
8
|
+
* `@Processor` of its own; inject it by `base`.
|
|
9
|
+
*
|
|
10
|
+
* The worker never starts by itself (`autorun: false`): the role that consumes calls
|
|
11
|
+
* `worker.run()` once the start sequence reached it (the kernel's worker role, after the extension
|
|
12
|
+
* load), and pauses it on stop.
|
|
13
|
+
*/
|
|
14
|
+
export function configuredProcessor(base, queue, options) {
|
|
15
|
+
if (queue.includes(":"))
|
|
16
|
+
throw new Error(`queue name "${queue}" must not contain ":"`);
|
|
17
|
+
// `base` implements `process`; the cast only lets an anonymous subclass extend the abstract type
|
|
18
|
+
const Configured = class extends base {
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(Configured, "name", { value: base.name });
|
|
21
|
+
Processor(queue, { ...options, autorun: false })(Configured);
|
|
22
|
+
return { provide: base, useClass: Configured };
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Job } from "bullmq";
|
|
2
|
+
import type { KernelLogger } from "../../log.js";
|
|
3
|
+
export interface LogJobFailureOptions {
|
|
4
|
+
/** Extra fields added to the record. */
|
|
5
|
+
tags?: Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* Overrides the "final failure" decision. By default a failure is final when
|
|
8
|
+
* `attemptsMade >= opts.attempts`; an `UnrecoverableError` fails the job at once with attempts
|
|
9
|
+
* left, so a caller holding the error instance passes `final: true`.
|
|
10
|
+
*/
|
|
11
|
+
final?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* One log line for a failed BullMQ job, by retry progress: `error` when final, `warn` while
|
|
15
|
+
* retries remain. Business errors (`ApiError`) are skipped: they are already recorded in the
|
|
16
|
+
* job's own status or database rows. Use it from `@OnWorkerEvent("failed")`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function logJobFailure(log: KernelLogger, job: Job, error: Error, options?: LogJobFailureOptions): void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ApiError } from "../../errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* One log line for a failed BullMQ job, by retry progress: `error` when final, `warn` while
|
|
4
|
+
* retries remain. Business errors (`ApiError`) are skipped: they are already recorded in the
|
|
5
|
+
* job's own status or database rows. Use it from `@OnWorkerEvent("failed")`.
|
|
6
|
+
*/
|
|
7
|
+
export function logJobFailure(log, job, error, options) {
|
|
8
|
+
if (error instanceof ApiError)
|
|
9
|
+
return;
|
|
10
|
+
const maxAttempts = job.opts?.attempts ?? 1;
|
|
11
|
+
const final = options?.final ?? job.attemptsMade >= maxAttempts;
|
|
12
|
+
const fields = {
|
|
13
|
+
queue: job.queueName,
|
|
14
|
+
jobId: String(job.id ?? ""),
|
|
15
|
+
attempt: job.attemptsMade,
|
|
16
|
+
maxAttempts,
|
|
17
|
+
final,
|
|
18
|
+
err: error,
|
|
19
|
+
...options?.tags,
|
|
20
|
+
};
|
|
21
|
+
const msg = `queue job failed [${job.queueName}#${job.id}] attempt=${job.attemptsMade}/${maxAttempts}`;
|
|
22
|
+
if (final)
|
|
23
|
+
log.error(msg, fields);
|
|
24
|
+
else
|
|
25
|
+
log.warn(msg, fields);
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type BeforeApplicationShutdown } from "@nestjs/common";
|
|
2
|
+
import { DiscoveryService } from "@nestjs/core";
|
|
3
|
+
import type { KernelLogger } from "../../log.js";
|
|
4
|
+
import { GracefulShutdown } from "../lifecycle/graceful-shutdown.service.js";
|
|
5
|
+
/** The least time a queue or worker gets to close when the stop budget is used up. */
|
|
6
|
+
export declare const MIN_CLOSE_MS = 1000;
|
|
7
|
+
/** What is kept of the stop budget for the infra closes that follow (bus, Redis, the pool). */
|
|
8
|
+
export declare const INFRA_RESERVE_MS = 2000;
|
|
9
|
+
/**
|
|
10
|
+
* Closes every BullMQ queue (`registerQueue`) and `@Processor` worker of the application within
|
|
11
|
+
* what is left of the stop budget (less {@link INFRA_RESERVE_MS}), before `@nestjs/bullmq` closes
|
|
12
|
+
* them again in `onApplicationShutdown` without a limit. A close waits for Redis, which never
|
|
13
|
+
* answers while Redis is down:
|
|
14
|
+
* - a queue is registered with `forceDisconnectOnShutdown` (`QueueModule.registerQueue`), and one
|
|
15
|
+
* that does not close in time is disconnected here;
|
|
16
|
+
* - a worker has no such option, and its close also waits for its main loop, which retries its
|
|
17
|
+
* blocked command until Redis answers again: one that does not close in time is disconnected
|
|
18
|
+
* and abandoned like the infra closes (`closeWithin`), its later close returning at once (the
|
|
19
|
+
* one monkeypatch: otherwise `@nestjs/bullmq`'s own close would hold the application's close).
|
|
20
|
+
*/
|
|
21
|
+
export declare class QueueShutdown implements BeforeApplicationShutdown {
|
|
22
|
+
private readonly discovery;
|
|
23
|
+
private readonly log;
|
|
24
|
+
private readonly shutdown?;
|
|
25
|
+
constructor(discovery: Pick<DiscoveryService, "getProviders">, log: Pick<KernelLogger, "warn">, shutdown?: Pick<GracefulShutdown, "remainingMs"> | undefined);
|
|
26
|
+
beforeApplicationShutdown(): Promise<void>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 { WorkerHost } from "@nestjs/bullmq";
|
|
11
|
+
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
12
|
+
import { DiscoveryService } from "@nestjs/core";
|
|
13
|
+
import { Queue } from "bullmq";
|
|
14
|
+
import { closeWithin } from "../close-within.js";
|
|
15
|
+
import { GracefulShutdown } from "../lifecycle/graceful-shutdown.service.js";
|
|
16
|
+
import { KERNEL_LOGGER } from "../tokens.js";
|
|
17
|
+
/** The least time a queue or worker gets to close when the stop budget is used up. */
|
|
18
|
+
export const MIN_CLOSE_MS = 1_000;
|
|
19
|
+
/** What is kept of the stop budget for the infra closes that follow (bus, Redis, the pool). */
|
|
20
|
+
export const INFRA_RESERVE_MS = 2_000;
|
|
21
|
+
/**
|
|
22
|
+
* Closes every BullMQ queue (`registerQueue`) and `@Processor` worker of the application within
|
|
23
|
+
* what is left of the stop budget (less {@link INFRA_RESERVE_MS}), before `@nestjs/bullmq` closes
|
|
24
|
+
* them again in `onApplicationShutdown` without a limit. A close waits for Redis, which never
|
|
25
|
+
* answers while Redis is down:
|
|
26
|
+
* - a queue is registered with `forceDisconnectOnShutdown` (`QueueModule.registerQueue`), and one
|
|
27
|
+
* that does not close in time is disconnected here;
|
|
28
|
+
* - a worker has no such option, and its close also waits for its main loop, which retries its
|
|
29
|
+
* blocked command until Redis answers again: one that does not close in time is disconnected
|
|
30
|
+
* and abandoned like the infra closes (`closeWithin`), its later close returning at once (the
|
|
31
|
+
* one monkeypatch: otherwise `@nestjs/bullmq`'s own close would hold the application's close).
|
|
32
|
+
*/
|
|
33
|
+
let QueueShutdown = class QueueShutdown {
|
|
34
|
+
discovery;
|
|
35
|
+
log;
|
|
36
|
+
shutdown;
|
|
37
|
+
constructor(discovery, log, shutdown) {
|
|
38
|
+
this.discovery = discovery;
|
|
39
|
+
this.log = log;
|
|
40
|
+
this.shutdown = shutdown;
|
|
41
|
+
}
|
|
42
|
+
async beforeApplicationShutdown() {
|
|
43
|
+
const targets = [];
|
|
44
|
+
for (const wrapper of this.discovery.getProviders()) {
|
|
45
|
+
const instance = wrapper.instance;
|
|
46
|
+
if (instance instanceof Queue) {
|
|
47
|
+
targets.push({ label: `queue ${instance.name}`, target: instance, worker: false });
|
|
48
|
+
}
|
|
49
|
+
else if (instance instanceof WorkerHost) {
|
|
50
|
+
// a processor whose worker was never built (no registration) has nothing to close
|
|
51
|
+
let worker;
|
|
52
|
+
try {
|
|
53
|
+
worker = instance.worker;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
worker = undefined;
|
|
57
|
+
}
|
|
58
|
+
if (worker)
|
|
59
|
+
targets.push({ label: `worker ${worker.name}`, target: worker, worker: true });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const left = this.shutdown?.remainingMs() ?? MIN_CLOSE_MS + INFRA_RESERVE_MS;
|
|
63
|
+
const budget = Math.max(MIN_CLOSE_MS, left - INFRA_RESERVE_MS);
|
|
64
|
+
await Promise.all(targets.map(async ({ label, target, worker }) => {
|
|
65
|
+
if (await closeWithin(label, target.close(), budget, this.log))
|
|
66
|
+
return;
|
|
67
|
+
// not awaited: the disconnect itself waits for the connection
|
|
68
|
+
void target.disconnect().catch(() => { });
|
|
69
|
+
if (worker)
|
|
70
|
+
Object.defineProperty(target, "close", { value: () => Promise.resolve() });
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
QueueShutdown = __decorate([
|
|
75
|
+
Injectable(),
|
|
76
|
+
__param(0, Inject(DiscoveryService)),
|
|
77
|
+
__param(1, Inject(KERNEL_LOGGER)),
|
|
78
|
+
__param(2, Optional()),
|
|
79
|
+
__param(2, Inject(GracefulShutdown))
|
|
80
|
+
], QueueShutdown);
|
|
81
|
+
export { QueueShutdown };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type DynamicModule } from "@nestjs/common";
|
|
2
|
+
import type { DefaultJobOptions } from "bullmq";
|
|
3
|
+
/** Defaults of every job a kernel queue adds (the values `ctx.queue` uses today). */
|
|
4
|
+
export declare const QUEUE_JOB_DEFAULTS: DefaultJobOptions;
|
|
5
|
+
/**
|
|
6
|
+
* Global: the BullMQ root configuration (the kernel's Redis URL, BullMQ's default key prefix, which
|
|
7
|
+
* the hand-made queues also use, and {@link QUEUE_JOB_DEFAULTS}). A feature module that owns a
|
|
8
|
+
* queue imports `QueueModule.registerQueue(...names)` and declares a `@Processor(name)` provider;
|
|
9
|
+
* without the registration the processor has no queue and never consumes. Queue names and job
|
|
10
|
+
* ids must not contain `:`.
|
|
11
|
+
*/
|
|
12
|
+
export declare class QueueModule {
|
|
13
|
+
static forRoot(): DynamicModule;
|
|
14
|
+
/** Registers queues in the importing feature module (names without `:`). */
|
|
15
|
+
static registerQueue(...names: string[]): DynamicModule;
|
|
16
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
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 QueueModule_1;
|
|
8
|
+
import { BullModule } from "@nestjs/bullmq";
|
|
9
|
+
import { Module } from "@nestjs/common";
|
|
10
|
+
import { DiscoveryModule } from "@nestjs/core";
|
|
11
|
+
import { KernelConfigService } from "../config/kernel-config.service.js";
|
|
12
|
+
import { QueueShutdown } from "./queue-shutdown.js";
|
|
13
|
+
import { bullConnectionOptions } from "./redis-connection.js";
|
|
14
|
+
/** Defaults of every job a kernel queue adds (the values `ctx.queue` uses today). */
|
|
15
|
+
export const QUEUE_JOB_DEFAULTS = {
|
|
16
|
+
attempts: 3,
|
|
17
|
+
backoff: { type: "exponential", delay: 1000 },
|
|
18
|
+
removeOnComplete: 1000,
|
|
19
|
+
removeOnFail: 5000,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Global: the BullMQ root configuration (the kernel's Redis URL, BullMQ's default key prefix, which
|
|
23
|
+
* the hand-made queues also use, and {@link QUEUE_JOB_DEFAULTS}). A feature module that owns a
|
|
24
|
+
* queue imports `QueueModule.registerQueue(...names)` and declares a `@Processor(name)` provider;
|
|
25
|
+
* without the registration the processor has no queue and never consumes. Queue names and job
|
|
26
|
+
* ids must not contain `:`.
|
|
27
|
+
*/
|
|
28
|
+
let QueueModule = QueueModule_1 = class QueueModule {
|
|
29
|
+
static forRoot() {
|
|
30
|
+
return {
|
|
31
|
+
module: QueueModule_1,
|
|
32
|
+
global: true,
|
|
33
|
+
imports: [
|
|
34
|
+
DiscoveryModule,
|
|
35
|
+
BullModule.forRootAsync({
|
|
36
|
+
inject: [KernelConfigService],
|
|
37
|
+
useFactory: (config) => ({
|
|
38
|
+
connection: bullConnectionOptions(config.get().redis.url),
|
|
39
|
+
defaultJobOptions: QUEUE_JOB_DEFAULTS,
|
|
40
|
+
}),
|
|
41
|
+
}),
|
|
42
|
+
],
|
|
43
|
+
// every queue and worker closes within the stop budget (before @nestjs/bullmq's own close)
|
|
44
|
+
providers: [QueueShutdown],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Registers queues in the importing feature module (names without `:`). */
|
|
48
|
+
static registerQueue(...names) {
|
|
49
|
+
for (const name of names) {
|
|
50
|
+
if (name.includes(":"))
|
|
51
|
+
throw new Error(`queue name "${name}" must not contain ":"`);
|
|
52
|
+
}
|
|
53
|
+
// forceDisconnectOnShutdown: a queue's connection is dropped after its close at shutdown
|
|
54
|
+
return BullModule.registerQueue(...names.map((name) => ({ name, forceDisconnectOnShutdown: true })));
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
QueueModule = QueueModule_1 = __decorate([
|
|
58
|
+
Module({})
|
|
59
|
+
// biome-ignore lint/complexity/noStaticOnlyClass: a Nest dynamic module
|
|
60
|
+
], QueueModule);
|
|
61
|
+
export { QueueModule };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RedisOptions } from "bullmq";
|
|
2
|
+
/**
|
|
3
|
+
* TCP keepalive of every long-lived kernel Redis connection: probes start after 10 s idle (the OS
|
|
4
|
+
* default is 2 hours), so a connection a dropped network left half-open is found and reconnected
|
|
5
|
+
* before a command waits on it, not at the next write (EPIPE).
|
|
6
|
+
*/
|
|
7
|
+
export declare const REDIS_KEEPALIVE_MS = 10000;
|
|
8
|
+
/**
|
|
9
|
+
* BullMQ connection options from the kernel's Redis URL, the same connection the hand-made
|
|
10
|
+
* `new Redis(url, { maxRetriesPerRequest: null })` workers use: BullMQ requires
|
|
11
|
+
* `maxRetriesPerRequest: null` on the blocking connection.
|
|
12
|
+
*/
|
|
13
|
+
export declare function bullConnectionOptions(url: string): RedisOptions;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TCP keepalive of every long-lived kernel Redis connection: probes start after 10 s idle (the OS
|
|
3
|
+
* default is 2 hours), so a connection a dropped network left half-open is found and reconnected
|
|
4
|
+
* before a command waits on it, not at the next write (EPIPE).
|
|
5
|
+
*/
|
|
6
|
+
export const REDIS_KEEPALIVE_MS = 10_000;
|
|
7
|
+
/**
|
|
8
|
+
* BullMQ connection options from the kernel's Redis URL, the same connection the hand-made
|
|
9
|
+
* `new Redis(url, { maxRetriesPerRequest: null })` workers use: BullMQ requires
|
|
10
|
+
* `maxRetriesPerRequest: null` on the blocking connection.
|
|
11
|
+
*/
|
|
12
|
+
export function bullConnectionOptions(url) {
|
|
13
|
+
const u = new URL(url);
|
|
14
|
+
const db = u.pathname.length > 1 ? Number(u.pathname.slice(1)) : undefined;
|
|
15
|
+
return {
|
|
16
|
+
host: u.hostname,
|
|
17
|
+
port: u.port ? Number(u.port) : 6379,
|
|
18
|
+
...(u.username && { username: decodeURIComponent(u.username) }),
|
|
19
|
+
...(u.password && { password: decodeURIComponent(u.password) }),
|
|
20
|
+
...(db !== undefined && Number.isInteger(db) && { db }),
|
|
21
|
+
...(u.protocol === "rediss:" && { tls: {} }),
|
|
22
|
+
maxRetriesPerRequest: null,
|
|
23
|
+
keepAlive: REDIS_KEEPALIVE_MS,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Queue } from "bullmq";
|
|
2
|
+
/**
|
|
3
|
+
* Removes job schedulers that no job uses any more (fixed-period jobs that became `@LockedCron` /
|
|
4
|
+
* `@LockedInterval` jobs leave their old BullMQ schedulers in Redis on an upgraded deployment).
|
|
5
|
+
* Idempotent; replicas may race.
|
|
6
|
+
*/
|
|
7
|
+
export declare function removeRetiredSchedulers(queue: Pick<Queue, "removeJobScheduler">, ids: readonly string[]): Promise<void>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes job schedulers that no job uses any more (fixed-period jobs that became `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs leave their old BullMQ schedulers in Redis on an upgraded deployment).
|
|
4
|
+
* Idempotent; replicas may race.
|
|
5
|
+
*/
|
|
6
|
+
export async function removeRetiredSchedulers(queue, ids) {
|
|
7
|
+
for (const id of ids)
|
|
8
|
+
await queue.removeJobScheduler(id);
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ContextJob } from "../../log-context.js";
|
|
2
|
+
/**
|
|
3
|
+
* The wrapper every queue processor runs its job in: a fresh async context (no transaction of
|
|
4
|
+
* whoever enqueued the job or started the worker is visible), `queue` / `jobId` / `runId` in the
|
|
5
|
+
* log context, and the tracing span when tracing is on (`withJobContext`).
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* @Processor("cap-kernel-titles")
|
|
9
|
+
* class TitleProcessor extends WorkerHost {
|
|
10
|
+
* process(job: Job) {
|
|
11
|
+
* return runJob("cap-kernel-titles", job, () => this.titles.generate(job.data));
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function runJob<T>(queue: string, job: ContextJob, fn: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { withJobContext } from "../../log-context.js";
|
|
2
|
+
import { runOutsideTransaction } from "../database/transaction-host.js";
|
|
3
|
+
/**
|
|
4
|
+
* The wrapper every queue processor runs its job in: a fresh async context (no transaction of
|
|
5
|
+
* whoever enqueued the job or started the worker is visible), `queue` / `jobId` / `runId` in the
|
|
6
|
+
* log context, and the tracing span when tracing is on (`withJobContext`).
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* @Processor("cap-kernel-titles")
|
|
10
|
+
* class TitleProcessor extends WorkerHost {
|
|
11
|
+
* process(job: Job) {
|
|
12
|
+
* return runJob("cap-kernel-titles", job, () => this.titles.generate(job.data));
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export function runJob(queue, job, fn) {
|
|
18
|
+
return runOutsideTransaction(() => withJobContext(queue, job, fn));
|
|
19
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Redis } from "ioredis";
|
|
2
|
+
import { type BusSubscriber } from "../../ctx/bus.js";
|
|
3
|
+
import type { KernelLogger } from "../../log.js";
|
|
4
|
+
import { GracefulShutdown } from "../lifecycle/graceful-shutdown.service.js";
|
|
5
|
+
/**
|
|
6
|
+
* Closes the bus subscriber, then the main connection, at the end of the shutdown
|
|
7
|
+
* (`GracefulShutdown.closeLast`: together with the pool), within what is left of the total stop
|
|
8
|
+
* budget. A ready main connection is closed with QUIT, so commands still in flight (a lock
|
|
9
|
+
* release, an after-commit publish) complete; it is dropped when QUIT does not finish in time or
|
|
10
|
+
* the connection is not ready.
|
|
11
|
+
*/
|
|
12
|
+
export declare class RedisLifecycle {
|
|
13
|
+
private readonly redis;
|
|
14
|
+
private readonly subscriber;
|
|
15
|
+
private readonly log;
|
|
16
|
+
private readonly shutdown;
|
|
17
|
+
constructor(redis: Redis, subscriber: BusSubscriber & {
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
}, log: KernelLogger, shutdown: GracefulShutdown);
|
|
20
|
+
close(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/** Global: the main Redis connection, the bus subscriber connection and the kernel bus. */
|
|
23
|
+
export declare class RedisModule {
|
|
24
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
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 { Global, Inject, Injectable, Module } from "@nestjs/common";
|
|
11
|
+
import { Redis } from "ioredis";
|
|
12
|
+
import { createBus, createBusSubscriber } from "../../ctx/bus.js";
|
|
13
|
+
import { closeWithin } from "../close-within.js";
|
|
14
|
+
import { KernelConfigService } from "../config/kernel-config.service.js";
|
|
15
|
+
import { GracefulShutdownModule } from "../lifecycle/graceful-shutdown.module.js";
|
|
16
|
+
import { GracefulShutdown } from "../lifecycle/graceful-shutdown.service.js";
|
|
17
|
+
import { REDIS_KEEPALIVE_MS } from "../queue/redis-connection.js";
|
|
18
|
+
import { KERNEL_BUS, KERNEL_LOGGER, REDIS, REDIS_SUBSCRIBER } from "../tokens.js";
|
|
19
|
+
/**
|
|
20
|
+
* Closes the bus subscriber, then the main connection, at the end of the shutdown
|
|
21
|
+
* (`GracefulShutdown.closeLast`: together with the pool), within what is left of the total stop
|
|
22
|
+
* budget. A ready main connection is closed with QUIT, so commands still in flight (a lock
|
|
23
|
+
* release, an after-commit publish) complete; it is dropped when QUIT does not finish in time or
|
|
24
|
+
* the connection is not ready.
|
|
25
|
+
*/
|
|
26
|
+
let RedisLifecycle = class RedisLifecycle {
|
|
27
|
+
redis;
|
|
28
|
+
subscriber;
|
|
29
|
+
log;
|
|
30
|
+
shutdown;
|
|
31
|
+
constructor(redis, subscriber, log, shutdown) {
|
|
32
|
+
this.redis = redis;
|
|
33
|
+
this.subscriber = subscriber;
|
|
34
|
+
this.log = log;
|
|
35
|
+
this.shutdown = shutdown;
|
|
36
|
+
shutdown.closeLast(() => this.close());
|
|
37
|
+
}
|
|
38
|
+
async close() {
|
|
39
|
+
const { shutdown, log } = this;
|
|
40
|
+
await closeWithin("bus", this.subscriber.close(), shutdown.remainingMs(), log);
|
|
41
|
+
if (this.redis.status === "ready" &&
|
|
42
|
+
(await closeWithin("redis", this.redis.quit(), shutdown.remainingMs(), log))) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.redis.disconnect();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
RedisLifecycle = __decorate([
|
|
49
|
+
Injectable(),
|
|
50
|
+
__param(0, Inject(REDIS)),
|
|
51
|
+
__param(1, Inject(REDIS_SUBSCRIBER)),
|
|
52
|
+
__param(2, Inject(KERNEL_LOGGER)),
|
|
53
|
+
__param(3, Inject(GracefulShutdown))
|
|
54
|
+
], RedisLifecycle);
|
|
55
|
+
export { RedisLifecycle };
|
|
56
|
+
/** Global: the main Redis connection, the bus subscriber connection and the kernel bus. */
|
|
57
|
+
let RedisModule = class RedisModule {
|
|
58
|
+
};
|
|
59
|
+
RedisModule = __decorate([
|
|
60
|
+
Global(),
|
|
61
|
+
Module({
|
|
62
|
+
imports: [GracefulShutdownModule],
|
|
63
|
+
providers: [
|
|
64
|
+
{
|
|
65
|
+
provide: REDIS,
|
|
66
|
+
inject: [KernelConfigService, KERNEL_LOGGER],
|
|
67
|
+
useFactory: (config, log) => {
|
|
68
|
+
const redis = new Redis(config.get().redis.url, {
|
|
69
|
+
lazyConnect: true,
|
|
70
|
+
keepAlive: REDIS_KEEPALIVE_MS,
|
|
71
|
+
});
|
|
72
|
+
redis.on("error", (err) => log.error("redis connection error", { err }));
|
|
73
|
+
return redis;
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
provide: REDIS_SUBSCRIBER,
|
|
78
|
+
inject: [KernelConfigService, KERNEL_LOGGER],
|
|
79
|
+
useFactory: (config, log) => createBusSubscriber(() => new Redis(config.get().redis.url, { keepAlive: REDIS_KEEPALIVE_MS }), log),
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
provide: KERNEL_BUS,
|
|
83
|
+
inject: [REDIS, REDIS_SUBSCRIBER, KERNEL_LOGGER],
|
|
84
|
+
useFactory: (redis, sub, log) => createBus(redis, sub, "kernel", log),
|
|
85
|
+
},
|
|
86
|
+
RedisLifecycle,
|
|
87
|
+
],
|
|
88
|
+
exports: [REDIS, REDIS_SUBSCRIBER, KERNEL_BUS],
|
|
89
|
+
})
|
|
90
|
+
], RedisModule);
|
|
91
|
+
export { RedisModule };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface CronTick {
|
|
2
|
+
/** The scheduled fire time (epoch ms) of the tick a call at `now` belongs to. */
|
|
3
|
+
tick: number;
|
|
4
|
+
/** The gap between that tick and the next scheduled one, ms. */
|
|
5
|
+
periodMs: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The scheduled tick a cron callback invoked at `now` belongs to: the latest scheduled time at or
|
|
9
|
+
* before `now` (plus a small early-fire tolerance). It comes from the expression, not from the
|
|
10
|
+
* clock, so replicas whose callbacks run a few ms apart agree on it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function scheduledTick(expression: string, now: number, timeZone?: string): CronTick;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CronTime } from "cron";
|
|
2
|
+
/** Timers may fire a little early; a call this close before a tick still belongs to it. */
|
|
3
|
+
const EARLY_TOLERANCE_MS = 50;
|
|
4
|
+
/**
|
|
5
|
+
* The scheduled tick a cron callback invoked at `now` belongs to: the latest scheduled time at or
|
|
6
|
+
* before `now` (plus a small early-fire tolerance). It comes from the expression, not from the
|
|
7
|
+
* clock, so replicas whose callbacks run a few ms apart agree on it.
|
|
8
|
+
*/
|
|
9
|
+
export function scheduledTick(expression, now, timeZone) {
|
|
10
|
+
const time = new CronTime(expression, timeZone);
|
|
11
|
+
const ref = now + EARLY_TOLERANCE_MS;
|
|
12
|
+
let window = 1000;
|
|
13
|
+
for (;;) {
|
|
14
|
+
let t = time.getNextDateFrom(new Date(ref - window), timeZone).toMillis();
|
|
15
|
+
if (t <= ref) {
|
|
16
|
+
for (;;) {
|
|
17
|
+
const next = time.getNextDateFrom(new Date(t), timeZone).toMillis();
|
|
18
|
+
if (next > ref)
|
|
19
|
+
return { tick: t, periodMs: next - t };
|
|
20
|
+
t = next;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
window *= 2;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type CronOptions } from "@nestjs/schedule";
|
|
2
|
+
export interface LockedCronOptions extends Pick<CronOptions, "timeZone"> {
|
|
3
|
+
/** Unique job name (the scheduler registry key and the log field). */
|
|
4
|
+
name: string;
|
|
5
|
+
/** Redis lock key (default `cron:<name>`); `lock:` is prepended unless present. */
|
|
6
|
+
lockKey?: string;
|
|
7
|
+
/** Lock lifetime without renewal, ms (default 30000); a longer run keeps it by renewal. */
|
|
8
|
+
ttl?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* `@Cron` with exactly-once-per-tick across replicas: every replica's scheduler fires, the one that
|
|
12
|
+
* sets the per-tick marker (`cron:<name>:<scheduled tick ms>`, never released) takes a try-once
|
|
13
|
+
* renewed run lock and runs the job; the others log INFO and skip, as does a tick whose
|
|
14
|
+
* predecessor is still running. An error in the job is logged (never thrown into the scheduler)
|
|
15
|
+
* and the lock is released afterwards. The job starts in a fresh async context (no transaction).
|
|
16
|
+
* The method gets a signal as its only argument: it aborts when the application stops
|
|
17
|
+
* (`ScheduledRuns`, which waits for the run, bounded) or when the run lock is lost. The class must inject `lockService`
|
|
18
|
+
* and `log`:
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* constructor(
|
|
22
|
+
* @Inject(LockService) readonly lockService: LockService,
|
|
23
|
+
* @Inject(KERNEL_LOGGER) readonly log: KernelLogger,
|
|
24
|
+
* ) {}
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function LockedCron(expression: string, options: LockedCronOptions): (target: object, key: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Packages octok-platform's two-layer cron pattern (@Cron plus a try-once Redis lock in the job,
|
|
2
|
+
// e.g. libs/app/src/billing/service/subscription-reconcile.job.ts; owner-approved, 2026-10-28).
|
|
3
|
+
import { Cron } from "@nestjs/schedule";
|
|
4
|
+
import { scheduledTick } from "./cron-tick.js";
|
|
5
|
+
import { assertLockedJobHost, LOCKED_JOB, LOCKED_JOB_BODY, runLockedTick, } from "./locked-tick.js";
|
|
6
|
+
/**
|
|
7
|
+
* `@Cron` with exactly-once-per-tick across replicas: every replica's scheduler fires, the one that
|
|
8
|
+
* sets the per-tick marker (`cron:<name>:<scheduled tick ms>`, never released) takes a try-once
|
|
9
|
+
* renewed run lock and runs the job; the others log INFO and skip, as does a tick whose
|
|
10
|
+
* predecessor is still running. An error in the job is logged (never thrown into the scheduler)
|
|
11
|
+
* and the lock is released afterwards. The job starts in a fresh async context (no transaction).
|
|
12
|
+
* The method gets a signal as its only argument: it aborts when the application stops
|
|
13
|
+
* (`ScheduledRuns`, which waits for the run, bounded) or when the run lock is lost. The class must inject `lockService`
|
|
14
|
+
* and `log`:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* constructor(
|
|
18
|
+
* @Inject(LockService) readonly lockService: LockService,
|
|
19
|
+
* @Inject(KERNEL_LOGGER) readonly log: KernelLogger,
|
|
20
|
+
* ) {}
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function LockedCron(expression, options) {
|
|
24
|
+
return (target, key, descriptor) => {
|
|
25
|
+
const original = descriptor.value;
|
|
26
|
+
const lockKey = options.lockKey ?? `cron:${options.name}`;
|
|
27
|
+
// The scheduler's arguments (the cron library passes its onComplete) are not the job's
|
|
28
|
+
const wrapped = async function () {
|
|
29
|
+
// Not caught on purpose: a class without `lockService` / `log` is a programming error with
|
|
30
|
+
// no logger to report through; the call rejects (Nest's scheduler wrapper logs it, and the
|
|
31
|
+
// schedule tests rely on the rejection). Everything after it is caught below.
|
|
32
|
+
assertLockedJobHost(this, "cron");
|
|
33
|
+
// runLockedTick logs instead of throwing; this catch keeps the scheduler free of rejections
|
|
34
|
+
await runLockedTick(this, {
|
|
35
|
+
kind: "cron",
|
|
36
|
+
name: options.name,
|
|
37
|
+
lockKey,
|
|
38
|
+
ttl: options.ttl ?? 30_000,
|
|
39
|
+
tick: () => scheduledTick(expression, Date.now(), options.timeZone),
|
|
40
|
+
run: (signal) => Promise.resolve(original.call(this, signal)),
|
|
41
|
+
}).catch((err) => this.log?.error("cron job failed", { cron: options.name, err }));
|
|
42
|
+
};
|
|
43
|
+
Reflect.defineMetadata(LOCKED_JOB, true, wrapped);
|
|
44
|
+
Reflect.defineMetadata(LOCKED_JOB_BODY, { name: options.name, body: original }, wrapped);
|
|
45
|
+
descriptor.value = wrapped;
|
|
46
|
+
// The scheduler reads the metadata from the final method, so register after wrapping.
|
|
47
|
+
Cron(expression, {
|
|
48
|
+
name: options.name,
|
|
49
|
+
...(options.timeZone !== undefined && { timeZone: options.timeZone }),
|
|
50
|
+
})(target, key, descriptor);
|
|
51
|
+
return descriptor;
|
|
52
|
+
};
|
|
53
|
+
}
|