@capybara-hq/kernel 0.1.0-rc.2 → 0.1.0-rc.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +85 -5
- package/dist/admin/admin-agents.controller.d.ts +28 -0
- package/dist/admin/admin-agents.controller.js +79 -0
- package/dist/admin/admin-connectors.controller.d.ts +29 -0
- package/dist/admin/admin-connectors.controller.js +79 -0
- package/dist/admin/admin-items.schemas.d.ts +42 -0
- package/dist/admin/admin-items.schemas.js +48 -0
- package/dist/admin/admin.controller.d.ts +52 -80
- package/dist/admin/admin.controller.js +112 -81
- package/dist/admin/admin.module.d.ts +4 -1
- package/dist/admin/admin.module.js +50 -4
- package/dist/admin/admin.schemas.d.ts +69 -0
- package/dist/admin/admin.schemas.js +53 -0
- package/dist/admin/audit.controller.d.ts +14 -0
- package/dist/admin/audit.controller.js +42 -0
- package/dist/admin/audit.schemas.d.ts +8 -0
- package/dist/admin/audit.schemas.js +17 -0
- package/dist/admin/extensions.controller.d.ts +34 -3
- package/dist/admin/extensions.controller.js +66 -8
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/health.service.d.ts +104 -0
- package/dist/admin/health.service.js +246 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/overview.controller.d.ts +31 -0
- package/dist/admin/overview.controller.js +78 -0
- package/dist/admin/overview.schemas.d.ts +8 -0
- package/dist/admin/overview.schemas.js +13 -0
- package/dist/admin/overview.service.d.ts +112 -0
- package/dist/admin/overview.service.js +223 -0
- package/dist/admin/platform-audit.service.d.ts +41 -0
- package/dist/admin/platform-audit.service.js +70 -0
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/admin/usage.service.d.ts +149 -0
- package/dist/admin/usage.service.js +321 -0
- package/dist/agents/admin-agents.d.ts +92 -0
- package/dist/agents/admin-agents.js +170 -0
- package/dist/agents/agent-lookup.d.ts +24 -0
- package/dist/agents/agent-lookup.js +46 -2
- 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 +53 -168
- package/dist/agents/agents.controller.js +163 -34
- package/dist/agents/agents.module.d.ts +6 -2
- package/dist/agents/agents.module.js +41 -7
- package/dist/agents/agents.schemas.d.ts +392 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +121 -36
- package/dist/agents/agents.service.js +411 -121
- package/dist/agents/definition.d.ts +142 -21
- package/dist/agents/definition.js +389 -43
- 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 +876 -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 +77 -5
- package/dist/agents/templates.controller.js +153 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +482 -44
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -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 +109 -0
- package/dist/background/tasks.service.js +271 -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 +136 -52
- package/dist/catalog/admin-catalog.controller.js +275 -65
- package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
- package/dist/catalog/admin-catalog.schemas.js +99 -0
- package/dist/catalog/appearance.schemas.d.ts +10 -0
- package/dist/catalog/appearance.schemas.js +20 -0
- package/dist/catalog/appearance.service.d.ts +105 -0
- package/dist/catalog/appearance.service.js +306 -0
- package/dist/catalog/catalog-content.d.ts +122 -35
- package/dist/catalog/catalog-content.js +122 -14
- package/dist/catalog/catalog-files.d.ts +42 -0
- package/dist/catalog/catalog-files.js +89 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +63 -0
- package/dist/catalog/catalog-items.d.ts +122 -7
- package/dist/catalog/catalog-items.js +301 -13
- package/dist/catalog/catalog-scope.service.d.ts +293 -0
- package/dist/catalog/catalog-scope.service.js +1236 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +47 -31
- package/dist/catalog/catalog.service.d.ts +122 -31
- package/dist/catalog/catalog.service.js +177 -105
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/claude/translate.js +3 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +29 -1
- 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 +102 -0
- package/dist/catalog/component-scope.controller.js +257 -0
- package/dist/catalog/component-scope.schemas.d.ts +118 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +394 -0
- package/dist/catalog/component-scope.service.js +1133 -0
- package/dist/catalog/component-state.d.ts +207 -0
- package/dist/catalog/component-state.js +484 -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 +30 -0
- package/dist/catalog/job-ids.js +25 -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 +50 -41
- package/dist/catalog/marketplaces.controller.js +130 -46
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +110 -17
- package/dist/catalog/marketplaces.service.js +337 -29
- package/dist/catalog/org-catalog.controller.d.ts +114 -62
- package/dist/catalog/org-catalog.controller.js +191 -98
- package/dist/catalog/org-catalog.schemas.d.ts +104 -0
- package/dist/catalog/org-catalog.schemas.js +107 -0
- package/dist/catalog/org-catalog.service.d.ts +72 -33
- package/dist/catalog/org-catalog.service.js +367 -158
- 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 +133 -0
- package/dist/catalog/org-extension.controller.js +313 -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 +808 -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 +243 -0
- package/dist/catalog/platform-components.js +872 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +583 -0
- package/dist/catalog/plugin-import.d.ts +254 -47
- package/dist/catalog/plugin-import.js +810 -112
- package/dist/catalog/plugin-install.d.ts +205 -42
- package/dist/catalog/plugin-install.js +828 -126
- package/dist/catalog/plugin-package.d.ts +43 -4
- package/dist/catalog/plugin-package.js +194 -7
- package/dist/catalog/plugin-upgrade.d.ts +308 -225
- package/dist/catalog/plugin-upgrade.js +1325 -1131
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +194 -118
- package/dist/catalog/requests.service.js +530 -343
- 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 +119 -0
- package/dist/channels/actions.js +10 -3
- package/dist/channels/cards.d.ts +36 -10
- package/dist/channels/cards.js +100 -25
- package/dist/channels/channels.module.js +13 -2
- package/dist/channels/channels.schemas.d.ts +41 -0
- package/dist/channels/channels.schemas.js +40 -0
- package/dist/channels/connections.controller.d.ts +46 -37
- package/dist/channels/connections.controller.js +76 -34
- package/dist/channels/connections.service.d.ts +102 -10
- package/dist/channels/connections.service.js +271 -24
- package/dist/channels/inbound.d.ts +11 -1
- package/dist/channels/inbound.js +87 -7
- package/dist/channels/outbound.d.ts +14 -1
- package/dist/channels/outbound.js +64 -15
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +2 -0
- package/dist/channels/supervisor.js +4 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/channels/webhook.d.ts +21 -1
- package/dist/channels/webhook.js +39 -4
- package/dist/client/client-access.service.d.ts +102 -0
- package/dist/client/client-access.service.js +303 -0
- package/dist/client/client-builds.service.d.ts +109 -0
- package/dist/client/client-builds.service.js +229 -0
- package/dist/client/client-delivery.controller.d.ts +25 -0
- package/dist/client/client-delivery.controller.js +66 -0
- package/dist/client/client-files.d.ts +48 -0
- package/dist/client/client-files.js +136 -0
- package/dist/client/client-reports.cron.d.ts +13 -0
- package/dist/client/client-reports.cron.js +42 -0
- package/dist/client/client-reports.service.d.ts +30 -0
- package/dist/client/client-reports.service.js +102 -0
- package/dist/client/client-sign-in.service.d.ts +21 -0
- package/dist/client/client-sign-in.service.js +49 -0
- package/dist/client/client.controller.d.ts +49 -0
- package/dist/client/client.controller.js +129 -0
- package/dist/client/client.module.d.ts +8 -0
- package/dist/client/client.module.js +28 -0
- package/dist/client/client.schemas.d.ts +61 -0
- package/dist/client/client.schemas.js +27 -0
- package/dist/config/docs.js +5 -1
- package/dist/config/schema.d.ts +35 -2
- package/dist/config/schema.js +216 -21
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +1 -1
- package/dist/conversations/artifacts.js +1 -1
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -44
- package/dist/conversations/conversations.controller.js +133 -82
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +161 -13
- package/dist/conversations/conversations.service.js +329 -57
- package/dist/conversations/device-status.d.ts +24 -0
- package/dist/conversations/device-status.js +71 -0
- package/dist/conversations/event-log.d.ts +45 -9
- package/dist/conversations/event-log.js +113 -6
- package/dist/conversations/events.d.ts +255 -9
- package/dist/conversations/events.js +250 -34
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/queue.d.ts +5 -2
- package/dist/conversations/queue.js +24 -4
- package/dist/conversations/queue.service.d.ts +2 -2
- package/dist/conversations/queue.service.js +21 -3
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +40 -16
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +48 -5
- package/dist/ctx/create-ctx.js +174 -34
- package/dist/db/kernel-schema.d.ts +668 -27
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/devices/access.d.ts +66 -0
- package/dist/devices/access.js +113 -0
- package/dist/devices/conversation-devices.d.ts +75 -0
- package/dist/devices/conversation-devices.js +230 -0
- package/dist/devices/devices.controller.d.ts +36 -0
- package/dist/devices/devices.controller.js +124 -0
- package/dist/devices/devices.module.d.ts +8 -0
- package/dist/devices/devices.module.js +34 -0
- package/dist/devices/devices.schemas.d.ts +3 -0
- package/dist/devices/devices.schemas.js +14 -0
- package/dist/devices/devices.service.d.ts +251 -0
- package/dist/devices/devices.service.js +791 -0
- package/dist/devices/dto.d.ts +25 -0
- package/dist/devices/dto.js +12 -0
- package/dist/devices/label.d.ts +11 -0
- package/dist/devices/label.js +25 -0
- package/dist/devices/legacy-cleanup.job.d.ts +34 -0
- package/dist/devices/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +215 -3
- package/dist/errors.js +215 -3
- package/dist/evals/evals.module.js +11 -2
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -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 +20 -3
- package/dist/evals/run-replay.js +78 -14
- package/dist/evals/runs.controller.d.ts +2 -57
- package/dist/evals/runs.controller.js +1 -42
- package/dist/evals/runs.service.d.ts +8 -7
- package/dist/evals/runs.service.js +45 -30
- package/dist/evals/sets.controller.d.ts +2 -28
- package/dist/evals/sets.controller.js +1 -31
- package/dist/evals/sets.service.d.ts +7 -7
- package/dist/evals/sets.service.js +23 -17
- package/dist/evals/snapshot.d.ts +3 -2
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +16 -9
- package/dist/evals/trajectory.d.ts +5 -3
- package/dist/evals/trajectory.js +4 -1
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +81 -14
- package/dist/extensions/admin-ops.js +181 -47
- package/dist/extensions/admin-view.d.ts +57 -10
- package/dist/extensions/admin-view.js +249 -27
- package/dist/extensions/approvals.d.ts +12 -2
- package/dist/extensions/blobs.d.ts +14 -1
- package/dist/extensions/blobs.js +49 -5
- package/dist/extensions/bootstrap.d.ts +41 -5
- package/dist/extensions/bootstrap.js +121 -19
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- 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 +6 -0
- package/dist/extensions/deployment-config.d.ts +94 -9
- package/dist/extensions/deployment-config.js +255 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +133 -0
- package/dist/extensions/effective-config.js +379 -0
- package/dist/extensions/extensions.module.js +31 -12
- package/dist/extensions/guide-places.d.ts +68 -0
- package/dist/extensions/guide-places.js +152 -0
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +105 -12
- package/dist/extensions/host.js +372 -87
- package/dist/extensions/installs.d.ts +30 -9
- package/dist/extensions/installs.js +57 -16
- package/dist/extensions/instance.d.ts +17 -2
- package/dist/extensions/instance.js +21 -0
- package/dist/extensions/ledger.d.ts +1 -1
- package/dist/extensions/locks.d.ts +12 -0
- package/dist/extensions/locks.js +26 -0
- package/dist/extensions/org-config.d.ts +97 -7
- package/dist/extensions/org-config.js +215 -45
- 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 +18 -4
- package/dist/extensions/package.js +56 -3
- package/dist/extensions/permission-set.d.ts +35 -5
- package/dist/extensions/permission-set.js +36 -5
- package/dist/extensions/permission-view.d.ts +106 -13
- package/dist/extensions/permission-view.js +33 -15
- package/dist/extensions/plugin-guides.d.ts +282 -0
- package/dist/extensions/plugin-guides.js +554 -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 +1 -1
- package/dist/extensions/registry.js +2 -0
- 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 +13 -2
- package/dist/extensions/sources.js +2 -0
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +46 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/previewers.controller.js +2 -3
- package/dist/files/previewers.d.ts +10 -3
- package/dist/files/previewers.js +40 -11
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/api.module.js +76 -4
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/gateway-routes.d.ts +7 -3
- package/dist/http/gateway-routes.js +6 -3
- 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 +77 -31
- package/dist/identity/accounts.js +133 -52
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +35 -9
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +7 -4
- 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 +17 -1
- package/dist/identity/me.controller.js +45 -4
- package/dist/identity/me.schemas.d.ts +24 -0
- package/dist/identity/me.schemas.js +25 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +99 -12
- package/dist/identity/settings.js +234 -25
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/identity/write-actor.d.ts +11 -0
- package/dist/identity/write-actor.js +7 -0
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +64 -4
- package/dist/inbox/inbox.service.js +74 -4
- 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 +157 -0
- package/dist/inbox/platform-inbox.service.js +281 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +7 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +32 -1
- package/dist/infra/database/database.module.js +1 -0
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +31 -3
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/lock/lock.service.d.ts +8 -0
- package/dist/infra/lock/lock.service.js +27 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/presence/presence.module.d.ts +6 -0
- package/dist/infra/presence/presence.module.js +22 -0
- package/dist/infra/presence/replica-presence.d.ts +87 -0
- package/dist/infra/presence/replica-presence.js +189 -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/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/throttler/named-throttlers.d.ts +12 -0
- package/dist/infra/throttler/named-throttlers.js +67 -0
- package/dist/infra/throttler/throttler.guard.js +1 -1
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +15 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +4 -2
- package/dist/lifecycle/kernel-lifecycle.js +35 -7
- package/dist/local-devices/device-auth.controller.d.ts +42 -0
- package/dist/local-devices/device-auth.controller.js +116 -0
- package/dist/local-devices/device-auth.d.ts +119 -0
- package/dist/local-devices/device-auth.js +401 -0
- package/dist/local-devices/device-auth.module.d.ts +7 -0
- package/dist/local-devices/device-auth.module.js +25 -0
- package/dist/local-devices/device-routes.d.ts +36 -0
- package/dist/local-devices/device-routes.js +90 -0
- package/dist/local-devices/dto.d.ts +66 -0
- package/dist/local-devices/dto.js +44 -0
- package/dist/local-devices/keys.d.ts +25 -0
- package/dist/local-devices/keys.js +25 -0
- package/dist/local-devices/local-device-gateway.d.ts +134 -0
- package/dist/local-devices/local-device-gateway.js +542 -0
- package/dist/local-devices/local-device-provider.d.ts +89 -0
- package/dist/local-devices/local-device-provider.js +151 -0
- package/dist/local-devices/local-devices.module.d.ts +16 -0
- package/dist/local-devices/local-devices.module.js +44 -0
- package/dist/local-devices/machines.d.ts +118 -0
- package/dist/local-devices/machines.js +366 -0
- package/dist/local-devices/relay.d.ts +100 -0
- package/dist/local-devices/relay.js +373 -0
- package/dist/local-devices/targets.d.ts +28 -0
- package/dist/local-devices/targets.js +73 -0
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -4
- 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 +8 -6
- package/dist/models/prices.js +11 -9
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +72 -14
- package/dist/models/purposes.js +115 -34
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.controller.d.ts +2 -5
- package/dist/orgs/orgs.controller.js +3 -6
- package/dist/orgs/orgs.module.js +3 -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 +23 -8
- package/dist/orgs/orgs.service.js +38 -16
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +66 -6
- package/dist/orgs/settings.service.js +89 -10
- package/dist/overrides.d.ts +16 -1
- package/dist/overrides.js +10 -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 +774 -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 +102 -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-items.ops.d.ts +37 -0
- package/dist/platform/ops/admin-items.ops.js +278 -0
- package/dist/platform/ops/admin.ops.d.ts +38 -0
- package/dist/platform/ops/admin.ops.js +497 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
- package/dist/platform/ops/agent-skills.ops.js +509 -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 +730 -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 +92 -0
- package/dist/platform/ops/catalog-admin.ops.js +682 -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 +854 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +190 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/devices.ops.d.ts +26 -0
- package/dist/platform/ops/devices.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 +381 -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 +35 -0
- package/dist/platform/ops/org-plugins.ops.js +388 -0
- package/dist/platform/ops/org-settings.ops.d.ts +18 -0
- package/dist/platform/ops/org-settings.ops.js +127 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +298 -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 +30 -0
- package/dist/platform/ops/platform.ops.js +231 -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/setup.ops.d.ts +24 -0
- package/dist/platform/ops/setup.ops.js +212 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +160 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/themes.ops.d.ts +14 -0
- package/dist/platform/ops/themes.ops.js +47 -0
- package/dist/platform/ops/ui.ops.d.ts +8 -0
- package/dist/platform/ops/ui.ops.js +41 -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 +43 -0
- package/dist/platform/platform-ops.module.js +142 -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 +85 -0
- package/dist/roles/gateway-role.d.ts +18 -3
- package/dist/roles/gateway-role.js +33 -5
- package/dist/roles/gateway.module.d.ts +2 -1
- package/dist/roles/gateway.module.js +6 -3
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +21 -1
- 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/device-paths.d.ts +40 -0
- package/dist/runtime/context/device-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/hook-calls.d.ts +8 -1
- package/dist/runtime/hook-calls.js +40 -7
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +35 -6
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +54 -11
- package/dist/runtime/model-call.js +105 -28
- package/dist/runtime/providers.d.ts +149 -29
- package/dist/runtime/providers.js +332 -63
- 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 +11 -1
- package/dist/runtime/run-control.js +12 -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 +1 -1
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +7 -9
- package/dist/runtime/run-queue.d.ts +62 -5
- package/dist/runtime/run-queue.js +313 -40
- package/dist/runtime/run-worker.d.ts +19 -8
- package/dist/runtime/run-worker.js +105 -44
- package/dist/runtime/runtime.module.js +13 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +31 -26
- package/dist/runtime/subagents/definition.js +89 -142
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +116 -27
- package/dist/runtime/subagents/dispatch.js +213 -142
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.js +2 -1
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- 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 +25 -8
- package/dist/runtime/subagents/roster.js +48 -12
- package/dist/runtime/subagents/skill-fork.d.ts +4 -3
- package/dist/runtime/subagents/skill-fork.js +9 -5
- 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 +9 -6
- package/dist/runtime/subagents/subagents.service.js +13 -8
- 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 +35 -39
- package/dist/runtime/usage-report.js +171 -97
- package/dist/runtime/waits.d.ts +148 -39
- package/dist/runtime/waits.js +426 -112
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +34 -7
- package/dist/sandbox/providers.js +54 -9
- package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
- package/dist/sandbox/sandbox-file-reader.js +98 -0
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +345 -132
- package/dist/sandbox/sandbox.service.js +883 -399
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/setup/kernel-checks.d.ts +91 -0
- package/dist/setup/kernel-checks.js +295 -0
- package/dist/setup/oauth-token-probe.d.ts +47 -0
- package/dist/setup/oauth-token-probe.js +108 -0
- package/dist/setup/redact-check.d.ts +18 -0
- package/dist/setup/redact-check.js +46 -0
- package/dist/setup/setup-check-registry.d.ts +86 -0
- package/dist/setup/setup-check-registry.js +75 -0
- package/dist/setup/setup-checks.controller.d.ts +28 -0
- package/dist/setup/setup-checks.controller.js +78 -0
- package/dist/setup/setup-checks.schemas.d.ts +38 -0
- package/dist/setup/setup-checks.schemas.js +43 -0
- package/dist/setup/setup-checks.service.d.ts +144 -0
- package/dist/setup/setup-checks.service.js +683 -0
- package/dist/setup/setup-guides.controller.d.ts +18 -0
- package/dist/setup/setup-guides.controller.js +48 -0
- package/dist/setup/setup-guides.schemas.d.ts +10 -0
- package/dist/setup/setup-guides.schemas.js +6 -0
- package/dist/setup/setup-guides.service.d.ts +126 -0
- package/dist/setup/setup-guides.service.js +315 -0
- package/dist/setup/setup.module.d.ts +8 -0
- package/dist/setup/setup.module.js +31 -0
- package/dist/skills/agent-skills.controller.d.ts +48 -0
- package/dist/skills/agent-skills.controller.js +131 -0
- package/dist/skills/agent-skills.service.d.ts +262 -0
- package/dist/skills/agent-skills.service.js +996 -0
- package/dist/skills/catalog.d.ts +14 -11
- package/dist/skills/catalog.js +32 -50
- package/dist/skills/changes.controller.d.ts +12 -22
- package/dist/skills/changes.controller.js +27 -56
- package/dist/skills/changes.service.d.ts +69 -115
- package/dist/skills/changes.service.js +249 -598
- package/dist/skills/conversation-catalog.d.ts +53 -0
- package/dist/skills/conversation-catalog.js +149 -0
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +2 -2
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +3 -3
- package/dist/skills/invoke.js +21 -8
- package/dist/skills/package.d.ts +15 -1
- package/dist/skills/package.js +14 -1
- package/dist/skills/skills.controller.d.ts +32 -6
- package/dist/skills/skills.controller.js +64 -11
- package/dist/skills/skills.module.js +25 -3
- package/dist/skills/skills.schemas.d.ts +44 -0
- package/dist/skills/skills.schemas.js +68 -0
- package/dist/skills/skills.service.d.ts +123 -26
- package/dist/skills/skills.service.js +493 -76
- package/dist/skills/usable.d.ts +82 -0
- package/dist/skills/usable.js +388 -0
- package/dist/themes/render-css.d.ts +13 -0
- package/dist/themes/render-css.js +135 -0
- package/dist/themes/theme-delivery.service.d.ts +36 -0
- package/dist/themes/theme-delivery.service.js +116 -0
- package/dist/themes/theme-state.d.ts +116 -0
- package/dist/themes/theme-state.js +221 -0
- package/dist/themes/theme-usage.d.ts +61 -0
- package/dist/themes/theme-usage.js +98 -0
- package/dist/themes/themes-public.controller.d.ts +33 -0
- package/dist/themes/themes-public.controller.js +98 -0
- package/dist/themes/themes.controller.d.ts +13 -0
- package/dist/themes/themes.controller.js +38 -0
- package/dist/themes/themes.module.d.ts +3 -0
- package/dist/themes/themes.module.js +21 -0
- package/dist/themes/themes.schemas.d.ts +3 -0
- package/dist/themes/themes.schemas.js +2 -0
- package/dist/themes/themes.service.d.ts +50 -0
- package/dist/themes/themes.service.js +99 -0
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/admin-connectors.d.ts +69 -0
- package/dist/tools/admin-connectors.js +135 -0
- package/dist/tools/approvals.controller.js +2 -3
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +26 -2
- package/dist/tools/approvals.service.js +44 -5
- package/dist/tools/builtin-names.d.ts +104 -0
- package/dist/tools/builtin-names.js +164 -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 +1 -1
- package/dist/tools/builtins/ask-user.js +5 -4
- package/dist/tools/builtins/builtin-tools.d.ts +23 -4
- package/dist/tools/builtins/builtin-tools.js +78 -12
- 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 +1 -1
- package/dist/tools/builtins/read-tool-output.js +2 -2
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +291 -39
- package/dist/tools/builtins/sandbox/common.d.ts +135 -36
- package/dist/tools/builtins/sandbox/common.js +222 -62
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +19 -16
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +64 -50
- 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 +17 -12
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +153 -34
- 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 +29 -19
- 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 +51 -44
- 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 +29 -18
- package/dist/tools/builtins/skill-load.js +125 -73
- 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/connector-account-policies.d.ts +51 -0
- package/dist/tools/connector-account-policies.js +165 -0
- package/dist/tools/connectors.controller.d.ts +74 -9
- package/dist/tools/connectors.controller.js +133 -16
- package/dist/tools/connectors.schemas.d.ts +27 -0
- package/dist/tools/connectors.schemas.js +34 -0
- package/dist/tools/connectors.service.d.ts +101 -8
- package/dist/tools/connectors.service.js +266 -28
- package/dist/tools/credentials.d.ts +23 -0
- package/dist/tools/credentials.js +90 -1
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.js +5 -5
- 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 +61 -4
- package/dist/tools/info.js +119 -33
- 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 +114 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/oauth/flow.js +1 -1
- package/dist/tools/oauth/tokens.d.ts +54 -7
- package/dist/tools/oauth/tokens.js +87 -17
- package/dist/tools/org-tool-switches.d.ts +89 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.js +1 -1
- package/dist/tools/pipeline.d.ts +67 -47
- package/dist/tools/pipeline.js +319 -380
- package/dist/tools/policy.d.ts +30 -23
- package/dist/tools/policy.js +142 -64
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +1 -1
- package/dist/tools/questions.service.d.ts +23 -2
- package/dist/tools/questions.service.js +104 -2
- package/dist/tools/registry.d.ts +189 -68
- package/dist/tools/registry.js +318 -236
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/tools.module.js +31 -3
- package/dist/tools/validate.js +1 -1
- package/dist/ui/admin-ui.controller.d.ts +56 -0
- package/dist/ui/admin-ui.controller.js +192 -0
- package/dist/ui/arrangement.d.ts +65 -0
- package/dist/ui/arrangement.js +171 -0
- package/dist/ui/embed-token.d.ts +2 -2
- package/dist/ui/embed-token.js +30 -5
- package/dist/ui/registry.d.ts +42 -17
- package/dist/ui/registry.js +46 -14
- package/dist/ui/slots.controller.d.ts +11 -0
- package/dist/ui/slots.controller.js +25 -0
- package/dist/ui/ui-stream.d.ts +20 -3
- package/dist/ui/ui-stream.js +25 -7
- package/dist/ui/ui.schemas.d.ts +70 -0
- package/dist/ui/ui.schemas.js +65 -0
- package/dist/ui/views.controller.d.ts +35 -49
- package/dist/ui/views.controller.js +48 -70
- package/dist/ui/views.d.ts +112 -18
- package/dist/ui/views.js +254 -47
- package/package.json +6 -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/src/migrations/0102_themes.sql +64 -0
- package/src/migrations/0103_ui_theme_setting.sql +7 -0
- package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
- package/src/migrations/0105_devices_rename.sql +136 -0
- package/src/migrations/0106_setup_guides_v2.sql +10 -0
- package/src/migrations/0107_extension_client_builds.sql +50 -0
- package/src/migrations/0108_question_skipped.sql +6 -0
- package/src/migrations/0109_audit_platform_idx.sql +5 -0
- package/src/migrations/0110_usage_time_idx.sql +8 -0
- package/src/migrations/0111_agent_skill_sharing.sql +22 -0
- package/src/migrations/0112_skill_share_requests.sql +4 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -62
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- package/dist/tools/builtins/skill-write.d.ts +0 -59
- package/dist/tools/builtins/skill-write.js +0 -244
package/dist/channels/inbound.js
CHANGED
|
@@ -10,6 +10,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
10
10
|
import { randomUUID } from "node:crypto";
|
|
11
11
|
import { Inject, Injectable } from "@nestjs/common";
|
|
12
12
|
import { ConversationsService } from "../conversations/conversations.service.js";
|
|
13
|
+
import { imSenderContext, recipientLocale, } from "../conversations/message-context.js";
|
|
14
|
+
import { DevicesService } from "../devices/devices.service.js";
|
|
15
|
+
import { DEFAULT_DEVICE_ALIASES, deviceLabel } from "../devices/label.js";
|
|
13
16
|
import { ApiError } from "../errors.js";
|
|
14
17
|
import { IdentityBinding } from "../identity/binding.js";
|
|
15
18
|
import { ExternalIdentities } from "../identity/external.js";
|
|
@@ -17,7 +20,6 @@ import { KernelDb } from "../infra/database/kernel-db.js";
|
|
|
17
20
|
import { LockService } from "../infra/lock/lock.service.js";
|
|
18
21
|
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
19
22
|
import { DirectorySync } from "../orgs/directory-sync.js";
|
|
20
|
-
import { readOrgSettings } from "../orgs/settings.service.js";
|
|
21
23
|
import { parseSlashCommand } from "../skills/invoke.js";
|
|
22
24
|
import { ApprovalsService } from "../tools/approvals.service.js";
|
|
23
25
|
import { QuestionsService } from "../tools/questions.service.js";
|
|
@@ -73,6 +75,7 @@ let ChannelInbound = class ChannelInbound {
|
|
|
73
75
|
directorySync;
|
|
74
76
|
jobs;
|
|
75
77
|
guests;
|
|
78
|
+
devices;
|
|
76
79
|
log;
|
|
77
80
|
actions;
|
|
78
81
|
constructor(kdb, redis,
|
|
@@ -83,7 +86,7 @@ let ChannelInbound = class ChannelInbound {
|
|
|
83
86
|
/** The channel queue: inbound jobs (`onEvent` only dedupes and enqueues) and deliveries. */
|
|
84
87
|
jobs,
|
|
85
88
|
/** 卡片操作:审批决定与提问回答(授权由这两个服务按点击者映射到的账号判定)。 */
|
|
86
|
-
approvals, questions, guests, log) {
|
|
89
|
+
approvals, questions, guests, devices, log) {
|
|
87
90
|
this.kdb = kdb;
|
|
88
91
|
this.redis = redis;
|
|
89
92
|
this.locks = locks;
|
|
@@ -94,6 +97,7 @@ let ChannelInbound = class ChannelInbound {
|
|
|
94
97
|
this.directorySync = directorySync;
|
|
95
98
|
this.jobs = jobs;
|
|
96
99
|
this.guests = guests;
|
|
100
|
+
this.devices = devices;
|
|
97
101
|
this.log = log;
|
|
98
102
|
this.actions = new ChannelCardActions({
|
|
99
103
|
get db() {
|
|
@@ -182,16 +186,25 @@ let ChannelInbound = class ChannelInbound {
|
|
|
182
186
|
const threadKey = threadKeyOf(e.target, e.sender.externalId, e.messageId);
|
|
183
187
|
// 群里回在话题里(新话题以这条消息为根)
|
|
184
188
|
const replyTarget = isGroup ? { ...e.target, threadId: threadKey } : e.target;
|
|
185
|
-
|
|
189
|
+
// the sender's zone and language as the platform gives them (run context spec §3.4)
|
|
190
|
+
const im = imSenderContext(e.sender);
|
|
191
|
+
// kernel text speaks the person's language (maintainer decision 2026-11-08): before the
|
|
192
|
+
// speaker is known, the platform's language, else the org's
|
|
193
|
+
let locale = await recipientLocale(db, { orgId: row.orgId, im: im.locale });
|
|
186
194
|
// 回复带幂等键:任务重试时平台不会重复显示(一条消息至多一句回复)
|
|
187
195
|
const replyKey = idempotencyKey(`${connectionId}-${e.messageId}-reply`);
|
|
188
|
-
const
|
|
189
|
-
await connections.send(connectionId, replyTarget, { text
|
|
196
|
+
const replyText = async (text, cards) => {
|
|
197
|
+
await connections.send(connectionId, replyTarget, { text, ...(cards !== undefined && { cards }) }, replyKey, locale);
|
|
190
198
|
};
|
|
199
|
+
const reply = (key, cards) => replyText(phrase(key, locale), cards);
|
|
191
200
|
const speaker = await this.resolveSpeaker(connectionId, row, e.sender, isGroup, locale, reply);
|
|
192
201
|
if (speaker === undefined)
|
|
193
202
|
return;
|
|
194
203
|
const { accountId, threadAccount } = speaker;
|
|
204
|
+
// a bound person without a platform language: their latest web message's, else the org's
|
|
205
|
+
if (im.locale === undefined && threadAccount !== null) {
|
|
206
|
+
locale = await recipientLocale(db, { orgId: row.orgId, accountId: threadAccount });
|
|
207
|
+
}
|
|
195
208
|
const k = {
|
|
196
209
|
connectionId,
|
|
197
210
|
chatId: e.target.chatId,
|
|
@@ -203,11 +216,19 @@ let ChannelInbound = class ChannelInbound {
|
|
|
203
216
|
await reply("newConversation");
|
|
204
217
|
return;
|
|
205
218
|
}
|
|
219
|
+
const deviceCommand = !isGroup && threadAccount !== null ? parseDeviceCommand(e.text) : null;
|
|
220
|
+
if (deviceCommand !== null) {
|
|
221
|
+
await this.deviceCommand(row.orgId, accountId, deviceCommand.name, locale, replyText);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
206
224
|
let conversationId = await findThread(db, k);
|
|
207
225
|
if (conversationId === undefined) {
|
|
208
226
|
let created;
|
|
209
227
|
try {
|
|
210
|
-
|
|
228
|
+
// bound to the person's IM default device, else their default (environments spec
|
|
229
|
+
// §4.2 item 8); an anonymous sender's stays unbound (no sandbox)
|
|
230
|
+
created = (await this.conversations.create(row.orgId, accountId, row.agentId, { im: true }))
|
|
231
|
+
.id;
|
|
211
232
|
}
|
|
212
233
|
catch (err) {
|
|
213
234
|
if (err instanceof ApiError && err.code === "agent.not_found") {
|
|
@@ -231,6 +252,11 @@ let ChannelInbound = class ChannelInbound {
|
|
|
231
252
|
const posted = await this.post(row.orgId, conversationId, accountId, {
|
|
232
253
|
text: e.text,
|
|
233
254
|
clientMessageId: `${connectionId}:${e.messageId}`,
|
|
255
|
+
// run context spec §7: an anonymous guest is named by their IM profile name; a bound
|
|
256
|
+
// person by their account's name (the kernel reads it)
|
|
257
|
+
...(threadAccount === null &&
|
|
258
|
+
e.sender.displayName !== undefined && { senderName: e.sender.displayName }),
|
|
259
|
+
im,
|
|
234
260
|
});
|
|
235
261
|
seq = posted.event.seq;
|
|
236
262
|
// best-effort (batch 5 review m4): a failed note must not fail the job before the thread
|
|
@@ -267,6 +293,51 @@ let ChannelInbound = class ChannelInbound {
|
|
|
267
293
|
.execute();
|
|
268
294
|
await this.jobs.enqueue(conversationId);
|
|
269
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* Direct-message `/device` (environments spec §4.2 item 8): lists the person's usable devices,
|
|
298
|
+
* or with a name sets the IM default their next new conversation is bound to. The name matches
|
|
299
|
+
* case-insensitively against each label (`deviceLabel`: a former default demoted by a
|
|
300
|
+
* provider switch answers to e.g. "Personal (Docker sandbox)"); the default device also
|
|
301
|
+
* answers to 个人设备 / Personal.
|
|
302
|
+
*/
|
|
303
|
+
async deviceCommand(orgId, accountId, name, locale, replyText) {
|
|
304
|
+
const { items, defaultId } = await this.devices.list(orgId, accountId);
|
|
305
|
+
const usable = items.filter((v) => v.available);
|
|
306
|
+
const labelOf = (v) => deviceLabel(v, locale);
|
|
307
|
+
const current = (await this.devices.imDefault(orgId, accountId)) ?? defaultId;
|
|
308
|
+
const list = usable
|
|
309
|
+
.map((v) => `- ${labelOf(v)}${v.id === current ? phrase("deviceCurrent", locale) : ""}`)
|
|
310
|
+
.join("\n");
|
|
311
|
+
const fill = (key, vars) => phrase(key, locale).replace(/\{(\w+)\}/g, (m, k) => vars[k] ?? m);
|
|
312
|
+
if (usable.length === 0)
|
|
313
|
+
return replyText(phrase("deviceNone", locale));
|
|
314
|
+
if (name === null)
|
|
315
|
+
return replyText(fill("deviceList", { list }));
|
|
316
|
+
const wanted = name.toLowerCase();
|
|
317
|
+
const is = (v) => labelOf(v).toLowerCase() === wanted;
|
|
318
|
+
// a name the person gave wins over a generated label, and both over the default's aliases
|
|
319
|
+
const hit = usable.find((v) => v.name !== null && is(v)) ??
|
|
320
|
+
usable.find(is) ??
|
|
321
|
+
usable.find((v) => v.isDefault && DEFAULT_DEVICE_ALIASES.includes(wanted));
|
|
322
|
+
if (hit === undefined) {
|
|
323
|
+
const unavailable = items.find((v) => !v.available && is(v));
|
|
324
|
+
if (unavailable !== undefined) {
|
|
325
|
+
return replyText(fill("deviceUnavailable", { name: labelOf(unavailable), list }));
|
|
326
|
+
}
|
|
327
|
+
return replyText(fill("deviceUnknown", { name, list }));
|
|
328
|
+
}
|
|
329
|
+
try {
|
|
330
|
+
await this.devices.setImDefault(orgId, accountId, hit.id);
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
// deleted or made unusable since the list was read
|
|
334
|
+
if (err instanceof ApiError && err.code.startsWith("device.")) {
|
|
335
|
+
return replyText(fill("deviceUnknown", { name, list }));
|
|
336
|
+
}
|
|
337
|
+
throw err;
|
|
338
|
+
}
|
|
339
|
+
return replyText(fill("deviceSwitched", { name: labelOf(hit) }));
|
|
340
|
+
}
|
|
270
341
|
/**
|
|
271
342
|
* Posts the person's message: `/name args` as a skill invocation when the kernel accepts it, else
|
|
272
343
|
* as typed (phase D spec §9). A retry of the job finds the first write by `clientMessageId`
|
|
@@ -393,6 +464,15 @@ ChannelInbound = __decorate([
|
|
|
393
464
|
__param(9, Inject(ApprovalsService)),
|
|
394
465
|
__param(10, Inject(QuestionsService)),
|
|
395
466
|
__param(11, Inject(AnonymousGuests)),
|
|
396
|
-
__param(12, Inject(
|
|
467
|
+
__param(12, Inject(DevicesService)),
|
|
468
|
+
__param(13, Inject(KERNEL_LOGGER))
|
|
397
469
|
], ChannelInbound);
|
|
398
470
|
export { ChannelInbound };
|
|
471
|
+
/** `/device` or `/device <name>` (the exact command word, case-insensitive); anything else is null. */
|
|
472
|
+
function parseDeviceCommand(text) {
|
|
473
|
+
const m = /^\/device(?:\s+([\s\S]*))?$/i.exec(text.trim());
|
|
474
|
+
if (m === null)
|
|
475
|
+
return null;
|
|
476
|
+
const name = m[1]?.trim();
|
|
477
|
+
return { name: name ? name : null };
|
|
478
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ChannelTarget, type Logger } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import { type Job, type Worker } from "bullmq";
|
|
3
3
|
import { EventLog } from "../conversations/event-log.js";
|
|
4
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
5
|
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
5
6
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
6
7
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
@@ -8,6 +9,7 @@ import { ConversationLock } from "../runtime/conversation-lock.js";
|
|
|
8
9
|
import type { StreamBus } from "../runtime/stream.js";
|
|
9
10
|
import { ApprovalsService } from "../tools/approvals.service.js";
|
|
10
11
|
import { QuestionsService } from "../tools/questions.service.js";
|
|
12
|
+
import { ToolRegistry } from "../tools/registry.js";
|
|
11
13
|
import { ChannelConnections } from "./connections.service.js";
|
|
12
14
|
import { ChannelInbound } from "./inbound.js";
|
|
13
15
|
import { type ChannelJobData, ChannelJobs } from "./jobs.js";
|
|
@@ -31,6 +33,17 @@ export declare const DELIVER_LOCK_PREFIX = "capk:channel-deliver:";
|
|
|
31
33
|
export declare const DRAFT_INTERVAL_MS = 1000;
|
|
32
34
|
/** 同一事件不可重试地失败这么多次后跳过它(Ruling A14)。 */
|
|
33
35
|
export declare const POISON_FAILURES = 3;
|
|
36
|
+
/**
|
|
37
|
+
* The language of the kernel text a conversation's IM thread gets (cards, notices; maintainer
|
|
38
|
+
* decision 2026-11-08: in IM, language is per person). The person who triggered the run speaks:
|
|
39
|
+
* the `locale` recorded on the conversation's latest `user_message` at or before `uptoSeq`, which
|
|
40
|
+
* already follows the order IM language, latest web message language, org language
|
|
41
|
+
* (`readMessageContext`). In a group thread that is whoever wrote last, i.e. the requester of the
|
|
42
|
+
* approvals and questions that follow. A message from an older log without one: its author's
|
|
43
|
+
* language by {@link recipientLocale}; no user message at all: the conversation owner's.
|
|
44
|
+
* Read from PG, so any replica derives the same value.
|
|
45
|
+
*/
|
|
46
|
+
export declare function conversationLocale(db: KernelSchemaDb, orgId: string, conversationId: string, uptoSeq: number): Promise<ChannelLocale>;
|
|
34
47
|
/** BullMQ 退避:平台给了等待时长就用它,否则指数退避。 */
|
|
35
48
|
export declare function deliverBackoff(attemptsMade: number, err?: Error): number;
|
|
36
49
|
/** One `last_seq` advance of a delivery (see {@link ChannelOutbound.advanceIn}). */
|
|
@@ -79,7 +92,7 @@ export declare class ChannelOutbound {
|
|
|
79
92
|
private readonly d;
|
|
80
93
|
constructor(kdb: KernelDb, bus: StreamBus, eventLog: Pick<EventLog, "readAfter">,
|
|
81
94
|
/** The conversation lock provider; delivery takes it under its own key prefix. */
|
|
82
|
-
lock: Pick<ConversationLock, "scoped">, connections: Pick<ChannelConnections, "outbound">, approvals: Pick<ApprovalsService, "describe">, questions: Pick<QuestionsService, "forCall">,
|
|
95
|
+
lock: Pick<ConversationLock, "scoped">, connections: Pick<ChannelConnections, "outbound">, approvals: Pick<ApprovalsService, "describe">, questions: Pick<QuestionsService, "forCall">, registry: Pick<ToolRegistry, "builtinSpecs" | "extensionToolSpecs">,
|
|
83
96
|
/** 入站任务的处理(worker 上执行 `ChannelInbound.handle`);失败抛错由 BullMQ 重试。 */
|
|
84
97
|
inbound: Pick<ChannelInbound, "handle">, jobs: Pick<ChannelJobs, "enqueue">, config: Pick<KernelConfigService, "get">, log: Pick<Logger, "error" | "warn" | "info">, txHost: TransactionHost);
|
|
85
98
|
/**
|
|
@@ -13,16 +13,17 @@ import { Inject, Injectable } from "@nestjs/common";
|
|
|
13
13
|
import { DelayedError, UnrecoverableError } from "bullmq";
|
|
14
14
|
import { sql } from "kysely";
|
|
15
15
|
import { conversationTopic, EventLog, } from "../conversations/event-log.js";
|
|
16
|
+
import { recipientLocale } from "../conversations/message-context.js";
|
|
16
17
|
import { ApiError } from "../errors.js";
|
|
17
18
|
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
18
19
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
19
20
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
20
21
|
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
21
22
|
import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
|
|
22
|
-
import { readOrgSettings } from "../orgs/settings.service.js";
|
|
23
23
|
import { ConversationLock, } from "../runtime/conversation-lock.js";
|
|
24
24
|
import { ApprovalsService } from "../tools/approvals.service.js";
|
|
25
25
|
import { QuestionsService } from "../tools/questions.service.js";
|
|
26
|
+
import { ToolRegistry } from "../tools/registry.js";
|
|
26
27
|
import { approvalCard, cardMessage, connectUrl, conversationUrl, questionCard, webBase, } from "./cards.js";
|
|
27
28
|
import { ChannelConnections } from "./connections.service.js";
|
|
28
29
|
import { ChannelInbound } from "./inbound.js";
|
|
@@ -96,6 +97,42 @@ function isBusMessage(m) {
|
|
|
96
97
|
return typeof m.toSeq === "number";
|
|
97
98
|
return k === "delta" && typeof m.runId === "string";
|
|
98
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* The language of the kernel text a conversation's IM thread gets (cards, notices; maintainer
|
|
102
|
+
* decision 2026-11-08: in IM, language is per person). The person who triggered the run speaks:
|
|
103
|
+
* the `locale` recorded on the conversation's latest `user_message` at or before `uptoSeq`, which
|
|
104
|
+
* already follows the order IM language, latest web message language, org language
|
|
105
|
+
* (`readMessageContext`). In a group thread that is whoever wrote last, i.e. the requester of the
|
|
106
|
+
* approvals and questions that follow. A message from an older log without one: its author's
|
|
107
|
+
* language by {@link recipientLocale}; no user message at all: the conversation owner's.
|
|
108
|
+
* Read from PG, so any replica derives the same value.
|
|
109
|
+
*/
|
|
110
|
+
export async function conversationLocale(db, orgId, conversationId, uptoSeq) {
|
|
111
|
+
const m = await db
|
|
112
|
+
.selectFrom("conversation_events")
|
|
113
|
+
.select([
|
|
114
|
+
sql `payload->>'locale'`.as("locale"),
|
|
115
|
+
sql `payload->>'authorAccountId'`.as("author"),
|
|
116
|
+
])
|
|
117
|
+
.where("conversation_id", "=", conversationId)
|
|
118
|
+
.where("type", "=", "user_message")
|
|
119
|
+
.where("seq", "<=", String(uptoSeq))
|
|
120
|
+
.orderBy("seq", "desc")
|
|
121
|
+
.limit(1)
|
|
122
|
+
.executeTakeFirst();
|
|
123
|
+
if (m?.locale === "zh" || m?.locale === "en")
|
|
124
|
+
return m.locale;
|
|
125
|
+
let accountId = m?.author ?? null;
|
|
126
|
+
if (accountId === null) {
|
|
127
|
+
const c = await db
|
|
128
|
+
.selectFrom("conversations")
|
|
129
|
+
.select("account_id")
|
|
130
|
+
.where("id", "=", conversationId)
|
|
131
|
+
.executeTakeFirst();
|
|
132
|
+
accountId = c?.account_id ?? null;
|
|
133
|
+
}
|
|
134
|
+
return recipientLocale(db, { orgId, accountId });
|
|
135
|
+
}
|
|
99
136
|
/** BullMQ 退避:平台给了等待时长就用它,否则指数退避。 */
|
|
100
137
|
export function deliverBackoff(attemptsMade, err) {
|
|
101
138
|
if (err instanceof RetryableDeliveryError && err.retryAfterMs !== undefined) {
|
|
@@ -133,7 +170,7 @@ let ChannelOutbound = class ChannelOutbound {
|
|
|
133
170
|
d;
|
|
134
171
|
constructor(kdb, bus, eventLog,
|
|
135
172
|
/** The conversation lock provider; delivery takes it under its own key prefix. */
|
|
136
|
-
lock, connections, approvals, questions,
|
|
173
|
+
lock, connections, approvals, questions, registry,
|
|
137
174
|
/** 入站任务的处理(worker 上执行 `ChannelInbound.handle`);失败抛错由 BullMQ 重试。 */
|
|
138
175
|
inbound, jobs, config, log, txHost) {
|
|
139
176
|
this.kdb = kdb;
|
|
@@ -151,6 +188,7 @@ let ChannelOutbound = class ChannelOutbound {
|
|
|
151
188
|
eventLog,
|
|
152
189
|
connections,
|
|
153
190
|
approvals,
|
|
191
|
+
registry,
|
|
154
192
|
questions,
|
|
155
193
|
config,
|
|
156
194
|
log,
|
|
@@ -383,11 +421,12 @@ ChannelOutbound = __decorate([
|
|
|
383
421
|
__param(4, Inject(ChannelConnections)),
|
|
384
422
|
__param(5, Inject(ApprovalsService)),
|
|
385
423
|
__param(6, Inject(QuestionsService)),
|
|
386
|
-
__param(7, Inject(
|
|
387
|
-
__param(8, Inject(
|
|
388
|
-
__param(9, Inject(
|
|
389
|
-
__param(10, Inject(
|
|
390
|
-
__param(11, Inject(
|
|
424
|
+
__param(7, Inject(ToolRegistry)),
|
|
425
|
+
__param(8, Inject(ChannelInbound)),
|
|
426
|
+
__param(9, Inject(ChannelJobs)),
|
|
427
|
+
__param(10, Inject(KernelConfigService)),
|
|
428
|
+
__param(11, Inject(KERNEL_LOGGER)),
|
|
429
|
+
__param(12, Inject(TransactionHost))
|
|
391
430
|
], ChannelOutbound);
|
|
392
431
|
export { ChannelOutbound };
|
|
393
432
|
/** 一次投递任务(本进程持有):订阅、补读、草稿节流。 */
|
|
@@ -478,7 +517,7 @@ class Delivery {
|
|
|
478
517
|
this.seen = Number(row.last_seq);
|
|
479
518
|
this.persisted = this.seen;
|
|
480
519
|
this.draftId = row.draft_message_id;
|
|
481
|
-
this.locale =
|
|
520
|
+
this.locale = await conversationLocale(this.d.db, this.s.row.orgId, this.conversationId, this.seen);
|
|
482
521
|
this.base = webBase(this.d.config.get().http.publicUrl);
|
|
483
522
|
return await this.loop();
|
|
484
523
|
}
|
|
@@ -734,10 +773,17 @@ class Delivery {
|
|
|
734
773
|
.execute();
|
|
735
774
|
}
|
|
736
775
|
send(message, idempotencyKey) {
|
|
737
|
-
return this.s.send(this.target, message, idempotencyKey);
|
|
776
|
+
return this.s.send(this.target, message, idempotencyKey, this.locale);
|
|
738
777
|
}
|
|
739
778
|
async handle(e) {
|
|
740
779
|
switch (e.type) {
|
|
780
|
+
case "user_message": {
|
|
781
|
+
// a new message: what follows speaks its author's language (see conversationLocale)
|
|
782
|
+
const l = e.payload.locale;
|
|
783
|
+
if (l === "zh" || l === "en")
|
|
784
|
+
this.locale = l;
|
|
785
|
+
return;
|
|
786
|
+
}
|
|
741
787
|
case "assistant_message":
|
|
742
788
|
return this.finalize(e.runId, e.payload.step, e.payload.content, e.seq);
|
|
743
789
|
case "approval_requested":
|
|
@@ -848,7 +894,10 @@ class Delivery {
|
|
|
848
894
|
await this.send({ text: phrase("handleOnWeb", this.locale) }, this.key(seq));
|
|
849
895
|
return this.advance(seq);
|
|
850
896
|
}
|
|
851
|
-
|
|
897
|
+
// the person can skip the conversation's own question by replying; a sub-agent's question
|
|
898
|
+
// stays answerable on its card only (reply-while-question spec §4.3)
|
|
899
|
+
const textReply = child === undefined ? (this.target.chatType === "dm" ? "plain" : "mention") : undefined;
|
|
900
|
+
const card = questionCard(questionId, form, "pending", this.questionUrl(this.base, child), null, textReply);
|
|
852
901
|
await this.recordCard("question", card.id);
|
|
853
902
|
const { messageId } = await this.send(cardMessage(phrase("questionTitle", this.locale), card), this.key(seq));
|
|
854
903
|
return this.advance(seq, { card: { kind: "question", id: card.id, messageId } });
|
|
@@ -926,7 +975,7 @@ class Delivery {
|
|
|
926
975
|
await this.send({ text: marker }, this.key(seq, `-close-${how}`));
|
|
927
976
|
}
|
|
928
977
|
else {
|
|
929
|
-
await this.s.update(this.target, this.draftId, { text }, this.key(seq, `-close-${how}`));
|
|
978
|
+
await this.s.update(this.target, this.draftId, { text }, this.key(seq, `-close-${how}`), this.locale);
|
|
930
979
|
}
|
|
931
980
|
}
|
|
932
981
|
return true;
|
|
@@ -974,10 +1023,10 @@ class Delivery {
|
|
|
974
1023
|
*/
|
|
975
1024
|
async replaceCard(at, message, idempotencyKey) {
|
|
976
1025
|
if (this.s.features.edit) {
|
|
977
|
-
await this.s.update(at.target, at.messageId, message, idempotencyKey);
|
|
1026
|
+
await this.s.update(at.target, at.messageId, message, idempotencyKey, this.locale);
|
|
978
1027
|
}
|
|
979
1028
|
else {
|
|
980
|
-
await this.s.send(at.target, message, idempotencyKey);
|
|
1029
|
+
await this.s.send(at.target, message, idempotencyKey, this.locale);
|
|
981
1030
|
}
|
|
982
1031
|
}
|
|
983
1032
|
/** `assistant_message`:以完整文本定稿(更新草稿或新发);不发送 thinking。 */
|
|
@@ -1003,7 +1052,7 @@ class Delivery {
|
|
|
1003
1052
|
}
|
|
1004
1053
|
if (useDraft && !this.draftBroken) {
|
|
1005
1054
|
try {
|
|
1006
|
-
await this.s.update(this.target, this.draftId, { text }, this.key(seq));
|
|
1055
|
+
await this.s.update(this.target, this.draftId, { text }, this.key(seq), this.locale);
|
|
1007
1056
|
}
|
|
1008
1057
|
catch (err) {
|
|
1009
1058
|
if (!editRejected(err))
|
|
@@ -1078,7 +1127,7 @@ class Delivery {
|
|
|
1078
1127
|
if (now - this.lastDraftAt < interval)
|
|
1079
1128
|
return;
|
|
1080
1129
|
try {
|
|
1081
|
-
await this.s.update(this.target, this.draftId, { text: cur.text });
|
|
1130
|
+
await this.s.update(this.target, this.draftId, { text: cur.text }, undefined, this.locale);
|
|
1082
1131
|
}
|
|
1083
1132
|
catch (err) {
|
|
1084
1133
|
if (!editRejected(err))
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** The language of kernel IM text: the recipient's, else the org's (`orgs.settings.locale`). */
|
|
2
2
|
export type ChannelLocale = "zh" | "en";
|
|
3
3
|
/**
|
|
4
|
-
* 机器人在 IM 里说的固定话术(全部集中在这里,zh / en
|
|
4
|
+
* 机器人在 IM 里说的固定话术(全部集中在这里,zh / en 同步). Chosen per recipient (run context spec
|
|
5
|
+
* §3.4): the sender's platform language, else their latest web language, else the org's.
|
|
5
6
|
* 模型回复不经过这里,原样转换为 IM 富文本、不翻译。
|
|
6
7
|
*/
|
|
7
8
|
export declare const CHANNEL_PHRASES: {
|
|
@@ -10,6 +11,36 @@ export declare const CHANNEL_PHRASES: {
|
|
|
10
11
|
readonly zh: "已开始新对话";
|
|
11
12
|
readonly en: "Started a new conversation.";
|
|
12
13
|
};
|
|
14
|
+
/** Direct message `/device`: lists the usable devices (`{list}` one per line, the current one marked). */
|
|
15
|
+
readonly deviceList: {
|
|
16
|
+
readonly zh: "你的设备:\n{list}\n发送 /device <名称> 选择下一个新对话使用的设备。";
|
|
17
|
+
readonly en: "Your devices:\n{list}\nSend /device <name> to choose the one your next new conversation uses.";
|
|
18
|
+
};
|
|
19
|
+
/** After a direct message `/device <name>` (`{name}` is the device's name). */
|
|
20
|
+
readonly deviceSwitched: {
|
|
21
|
+
readonly zh: "下一个新对话将使用设备「{name}」,发送 /new 开始。";
|
|
22
|
+
readonly en: "Your next new conversation will use the device “{name}”; send /new to start one.";
|
|
23
|
+
};
|
|
24
|
+
/** `/device <name>` matches no usable device (`{list}` as in deviceList). */
|
|
25
|
+
readonly deviceUnknown: {
|
|
26
|
+
readonly zh: "没有找到名为「{name}」的设备。你的设备:\n{list}";
|
|
27
|
+
readonly en: "No device named “{name}”. Your devices:\n{list}";
|
|
28
|
+
};
|
|
29
|
+
/** `/device <name>` names an existing device that is unavailable now (`{list}` as in deviceList). */
|
|
30
|
+
readonly deviceUnavailable: {
|
|
31
|
+
readonly zh: "设备「{name}」当前不可用(它的文件由未启用的沙箱提供方保存)。你的设备:\n{list}";
|
|
32
|
+
readonly en: "The device “{name}” is unavailable: its files are kept by a sandbox provider that is not active. Your devices:\n{list}";
|
|
33
|
+
};
|
|
34
|
+
/** Direct message `/device` when the person has no usable device (no cloud sandbox in the deployment). */
|
|
35
|
+
readonly deviceNone: {
|
|
36
|
+
readonly zh: "你目前没有可用的设备。";
|
|
37
|
+
readonly en: "You have no usable devices.";
|
|
38
|
+
};
|
|
39
|
+
/** The mark of the current IM default device in the device list. */
|
|
40
|
+
readonly deviceCurrent: {
|
|
41
|
+
readonly zh: "(当前)";
|
|
42
|
+
readonly en: " (current)";
|
|
43
|
+
};
|
|
13
44
|
/** 未绑定的人在私聊里发消息:附绑定卡片。 */
|
|
14
45
|
readonly bindPrompt: {
|
|
15
46
|
readonly zh: "请先绑定你的 Capybara 账号,再与我对话。";
|
package/dist/channels/phrases.js
CHANGED
|
@@ -1,10 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 机器人在 IM 里说的固定话术(全部集中在这里,zh / en
|
|
2
|
+
* 机器人在 IM 里说的固定话术(全部集中在这里,zh / en 同步). Chosen per recipient (run context spec
|
|
3
|
+
* §3.4): the sender's platform language, else their latest web language, else the org's.
|
|
3
4
|
* 模型回复不经过这里,原样转换为 IM 富文本、不翻译。
|
|
4
5
|
*/
|
|
5
6
|
export const CHANNEL_PHRASES = {
|
|
6
7
|
/** 私聊 `/new` 之后。 */
|
|
7
8
|
newConversation: { zh: "已开始新对话", en: "Started a new conversation." },
|
|
9
|
+
/** Direct message `/device`: lists the usable devices (`{list}` one per line, the current one marked). */
|
|
10
|
+
deviceList: {
|
|
11
|
+
zh: "你的设备:\n{list}\n发送 /device <名称> 选择下一个新对话使用的设备。",
|
|
12
|
+
en: "Your devices:\n{list}\nSend /device <name> to choose the one your next new conversation uses.",
|
|
13
|
+
},
|
|
14
|
+
/** After a direct message `/device <name>` (`{name}` is the device's name). */
|
|
15
|
+
deviceSwitched: {
|
|
16
|
+
zh: "下一个新对话将使用设备「{name}」,发送 /new 开始。",
|
|
17
|
+
en: "Your next new conversation will use the device \u201c{name}\u201d; send /new to start one.",
|
|
18
|
+
},
|
|
19
|
+
/** `/device <name>` matches no usable device (`{list}` as in deviceList). */
|
|
20
|
+
deviceUnknown: {
|
|
21
|
+
zh: "没有找到名为「{name}」的设备。你的设备:\n{list}",
|
|
22
|
+
en: "No device named \u201c{name}\u201d. Your devices:\n{list}",
|
|
23
|
+
},
|
|
24
|
+
/** `/device <name>` names an existing device that is unavailable now (`{list}` as in deviceList). */
|
|
25
|
+
deviceUnavailable: {
|
|
26
|
+
zh: "设备「{name}」当前不可用(它的文件由未启用的沙箱提供方保存)。你的设备:\n{list}",
|
|
27
|
+
en: "The device \u201c{name}\u201d is unavailable: its files are kept by a sandbox provider that is not active. Your devices:\n{list}",
|
|
28
|
+
},
|
|
29
|
+
/** Direct message `/device` when the person has no usable device (no cloud sandbox in the deployment). */
|
|
30
|
+
deviceNone: {
|
|
31
|
+
zh: "你目前没有可用的设备。",
|
|
32
|
+
en: "You have no usable devices.",
|
|
33
|
+
},
|
|
34
|
+
/** The mark of the current IM default device in the device list. */
|
|
35
|
+
deviceCurrent: { zh: "(当前)", en: " (current)" },
|
|
8
36
|
/** 未绑定的人在私聊里发消息:附绑定卡片。 */
|
|
9
37
|
bindPrompt: {
|
|
10
38
|
zh: "请先绑定你的 Capybara 账号,再与我对话。",
|
|
@@ -127,6 +127,8 @@ export declare class ChannelSupervisor {
|
|
|
127
127
|
* written yet on the first round).
|
|
128
128
|
*/
|
|
129
129
|
private targets;
|
|
130
|
+
/** How many long connections this process holds now (replica presence reports it). */
|
|
131
|
+
heldCount(): number;
|
|
130
132
|
private heldOf;
|
|
131
133
|
/**
|
|
132
134
|
* Gives back the most recently connected connection of `plugin`, leaving a handoff marker first;
|
|
@@ -305,6 +305,10 @@ let ChannelSupervisor = class ChannelSupervisor {
|
|
|
305
305
|
}
|
|
306
306
|
return out;
|
|
307
307
|
}
|
|
308
|
+
/** How many long connections this process holds now (replica presence reports it). */
|
|
309
|
+
heldCount() {
|
|
310
|
+
return this.held.size;
|
|
311
|
+
}
|
|
308
312
|
heldOf(plugin) {
|
|
309
313
|
let n = 0;
|
|
310
314
|
for (const h of this.held.values())
|
|
@@ -48,3 +48,8 @@ export declare function findThread(db: KernelSchemaDb, k: ThreadKey): Promise<st
|
|
|
48
48
|
export declare function insertThread(db: KernelSchemaDb, k: ThreadKey, conversationId: string): Promise<string>;
|
|
49
49
|
/** 私聊 `/new`:归档当前话题行(下一条消息新建对话)。返回是否归档了一行。 */
|
|
50
50
|
export declare function archiveThread(db: KernelSchemaDb, k: ThreadKey): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Drops a conversation's channel bindings (its thread rows and its delivery target), so a deleted
|
|
53
|
+
* conversation neither receives inbound messages nor posts to the chat any more.
|
|
54
|
+
*/
|
|
55
|
+
export declare function unbindConversation(db: KernelSchemaDb, conversationId: string): Promise<void>;
|
package/dist/channels/threads.js
CHANGED
|
@@ -160,3 +160,11 @@ export async function archiveThread(db, k) {
|
|
|
160
160
|
.executeTakeFirst();
|
|
161
161
|
return r.numUpdatedRows > 0n;
|
|
162
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Drops a conversation's channel bindings (its thread rows and its delivery target), so a deleted
|
|
165
|
+
* conversation neither receives inbound messages nor posts to the chat any more.
|
|
166
|
+
*/
|
|
167
|
+
export async function unbindConversation(db, conversationId) {
|
|
168
|
+
await db.deleteFrom("channel_threads").where("conversation_id", "=", conversationId).execute();
|
|
169
|
+
await db.deleteFrom("channel_deliveries").where("conversation_id", "=", conversationId).execute();
|
|
170
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { ChannelWebhookRequest, ChannelWebhookResponse, Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { Redis } from "ioredis";
|
|
3
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
2
4
|
import { ChannelConnections } from "./connections.service.js";
|
|
3
5
|
import { ChannelInbound } from "./inbound.js";
|
|
4
6
|
/**
|
|
@@ -19,6 +21,10 @@ export interface ChannelWebhookTimings {
|
|
|
19
21
|
export declare const CHANNEL_WEBHOOK_TIMINGS: unique symbol;
|
|
20
22
|
/** Most connections whose runtime is cached in one process. */
|
|
21
23
|
export declare const WEBHOOK_RUNTIME_CACHE_MAX = 1000;
|
|
24
|
+
/** How long a connection's last accepted webhook is remembered (`capybara:webhook-received`). */
|
|
25
|
+
export declare const WEBHOOK_SEEN_TTL_SECONDS: number;
|
|
26
|
+
/** When the gateway last accepted a verified webhook for the connection (ISO time, TTL 7 days). */
|
|
27
|
+
export declare const webhookSeenKey: (connectionId: string) => string;
|
|
22
28
|
/**
|
|
23
29
|
* Headers every webhook response carries; a plugin cannot override them (the body is never meant to
|
|
24
30
|
* be rendered or sniffed by a browser).
|
|
@@ -49,6 +55,10 @@ export declare const WEBHOOK_SECURITY_HEADERS: Readonly<Record<string, string>>;
|
|
|
49
55
|
* for it (`extensionHost.drainSeconds`) before `dispose`; past that the call is aborted → 503
|
|
50
56
|
* `channel.webhook_retry`.
|
|
51
57
|
* Every response carries {@link WEBHOOK_SECURITY_HEADERS}.
|
|
58
|
+
* - An accepted `events` result (every event handed to `onEvent`) sets the marker
|
|
59
|
+
* {@link webhookSeenKey} (the setup check `capybara:webhook-received`), at most once a minute per
|
|
60
|
+
* connection (`LockService.lease`, `SET NX` with a 60 s TTL, on a minute key), in Redis with a TTL, never in PG; a Redis error
|
|
61
|
+
* never fails the request.
|
|
52
62
|
*
|
|
53
63
|
* The decrypted runtime (plugin implementation + config) is cached per connection for a few seconds
|
|
54
64
|
* (bounded, process local), so unauthenticated requests stay cheap before the signature check. It is
|
|
@@ -60,6 +70,9 @@ export declare class ChannelWebhooks {
|
|
|
60
70
|
private readonly connections;
|
|
61
71
|
private readonly inbound;
|
|
62
72
|
private readonly log;
|
|
73
|
+
/** The minute gate of the seen marker (`SET NX` with a TTL). */
|
|
74
|
+
private readonly locks;
|
|
75
|
+
private readonly redis;
|
|
63
76
|
private readonly runtimes;
|
|
64
77
|
/** Bumped by {@link invalidateAll}: a fetch started before the bump is not stored. */
|
|
65
78
|
private generation;
|
|
@@ -67,12 +80,19 @@ export declare class ChannelWebhooks {
|
|
|
67
80
|
private readonly handleTimeoutMs;
|
|
68
81
|
/** How long a connection's runtime is reused; 0 disables the cache. */
|
|
69
82
|
private readonly runtimeCacheMs;
|
|
70
|
-
constructor(connections: Pick<ChannelConnections, "row" | "runtime">, inbound: Pick<ChannelInbound, "onEvent">, log: Pick<Logger, "warn">,
|
|
83
|
+
constructor(connections: Pick<ChannelConnections, "row" | "runtime">, inbound: Pick<ChannelInbound, "onEvent">, log: Pick<Logger, "warn">,
|
|
84
|
+
/** The minute gate of the seen marker (`SET NX` with a TTL). */
|
|
85
|
+
locks: Pick<LockService, "lease">, redis: Pick<Redis, "set">, timings?: Partial<ChannelWebhookTimings>);
|
|
71
86
|
/** Drops the cached runtime of one connection (on `channel.changed`). */
|
|
72
87
|
invalidate(connectionId: string): void;
|
|
73
88
|
/** Drops every cached runtime (a plugin was replaced, revoked or reloaded). */
|
|
74
89
|
invalidateAll(): void;
|
|
75
90
|
handle(connectionId: string, request: ChannelWebhookRequest, signal: AbortSignal): Promise<ChannelWebhookResponse>;
|
|
91
|
+
/**
|
|
92
|
+
* Records that a verified webhook arrived for the connection: the minute gate first (`NX`), then
|
|
93
|
+
* the marker, both with a TTL. Failures are logged and swallowed (the platform got its ack).
|
|
94
|
+
*/
|
|
95
|
+
private markSeen;
|
|
76
96
|
private runtime;
|
|
77
97
|
private respond;
|
|
78
98
|
private respondBefore;
|