@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +85 -5
- package/dist/admin/admin.controller.d.ts +52 -71
- package/dist/admin/admin.controller.js +117 -63
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/admin.schemas.d.ts +57 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +47 -16
- package/dist/admin/extensions.controller.js +94 -23
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +9 -9
- package/dist/admin/setup.controller.js +28 -26
- package/dist/admin/setup.service.d.ts +20 -28
- package/dist/admin/setup.service.js +65 -65
- package/dist/agents/agent-lookup.d.ts +72 -0
- package/dist/agents/agent-lookup.js +208 -0
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +54 -169
- package/dist/agents/agents.controller.js +172 -37
- package/dist/agents/agents.module.d.ts +10 -0
- package/dist/agents/agents.module.js +71 -0
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +104 -76
- package/dist/agents/agents.service.js +509 -383
- package/dist/agents/definition.d.ts +133 -21
- package/dist/agents/definition.js +361 -41
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +868 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +114 -0
- package/dist/agents/profile.js +55 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +78 -6
- package/dist/agents/templates.controller.js +154 -8
- package/dist/agents/templates.d.ts +132 -30
- package/dist/agents/templates.js +500 -46
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +80 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +216 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +102 -52
- package/dist/catalog/admin-catalog.controller.js +222 -67
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +232 -0
- package/dist/catalog/catalog-content.js +367 -0
- package/dist/catalog/catalog-files.d.ts +41 -0
- package/dist/catalog/catalog-files.js +86 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +290 -0
- package/dist/catalog/catalog-items.js +676 -0
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1124 -0
- package/dist/catalog/catalog.module.d.ts +12 -0
- package/dist/catalog/catalog.module.js +81 -0
- package/dist/catalog/catalog.service.d.ts +141 -206
- package/dist/catalog/catalog.service.js +237 -528
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/cli.d.ts +14 -3
- package/dist/catalog/cli.js +39 -32
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +90 -0
- package/dist/catalog/component-scope.controller.js +234 -0
- package/dist/catalog/component-scope.schemas.d.ts +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +327 -0
- package/dist/catalog/component-scope.service.js +990 -0
- package/dist/catalog/component-state.d.ts +188 -0
- package/dist/catalog/component-state.js +455 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- package/dist/catalog/job-ids.d.ts +45 -0
- package/dist/catalog/job-ids.js +40 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +53 -44
- package/dist/catalog/marketplaces.controller.js +146 -51
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +136 -26
- package/dist/catalog/marketplaces.service.js +663 -281
- package/dist/catalog/org-catalog.controller.d.ts +115 -63
- package/dist/catalog/org-catalog.controller.js +207 -100
- package/dist/catalog/org-catalog.schemas.d.ts +88 -0
- package/dist/catalog/org-catalog.schemas.js +93 -0
- package/dist/catalog/org-catalog.service.d.ts +89 -216
- package/dist/catalog/org-catalog.service.js +431 -472
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +113 -0
- package/dist/catalog/org-extension.controller.js +271 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +801 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +223 -0
- package/dist/catalog/platform-components.js +763 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +270 -68
- package/dist/catalog/plugin-import.js +1004 -277
- package/dist/catalog/plugin-install.d.ts +251 -65
- package/dist/catalog/plugin-install.js +1128 -344
- package/dist/catalog/plugin-package.js +14 -1
- package/dist/catalog/plugin-upgrade.d.ts +301 -188
- package/dist/catalog/plugin-upgrade.js +1256 -1068
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +205 -117
- package/dist/catalog/requests.service.js +612 -369
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +11 -4
- package/dist/channels/cards.d.ts +33 -11
- package/dist/channels/cards.js +96 -24
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +130 -0
- package/dist/channels/channels.schemas.d.ts +37 -0
- package/dist/channels/channels.schemas.js +38 -0
- package/dist/channels/connections.controller.d.ts +44 -37
- package/dist/channels/connections.controller.js +83 -38
- package/dist/channels/connections.service.d.ts +101 -30
- package/dist/channels/connections.service.js +380 -147
- package/dist/channels/inbound.d.ts +44 -38
- package/dist/channels/inbound.js +190 -44
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +71 -80
- package/dist/channels/outbound.js +219 -202
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +34 -8
- package/dist/channels/threads.js +79 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/docs.js +5 -1
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +36 -2
- package/dist/config/schema.js +226 -25
- package/dist/conversations/access.d.ts +31 -0
- package/dist/conversations/access.js +110 -0
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +60 -22
- package/dist/conversations/attachments.service.js +249 -51
- package/dist/conversations/conversations.controller.d.ts +86 -50
- package/dist/conversations/conversations.controller.js +184 -103
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +72 -0
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +166 -49
- package/dist/conversations/conversations.service.js +383 -179
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +64 -27
- package/dist/conversations/event-log.js +167 -31
- package/dist/conversations/events.d.ts +252 -9
- package/dist/conversations/events.js +243 -32
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +53 -58
- package/dist/conversations/queue.js +37 -293
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +350 -0
- package/dist/conversations/titles.d.ts +83 -27
- package/dist/conversations/titles.js +195 -71
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +26 -1
- package/dist/ctx/create-ctx.js +45 -16
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +550 -25
- package/dist/db/pool.d.ts +10 -0
- package/dist/db/pool.js +4 -0
- package/dist/devices/device-auth.controller.d.ts +42 -0
- package/dist/devices/device-auth.controller.js +116 -0
- package/dist/devices/device-auth.d.ts +119 -0
- package/dist/devices/device-auth.js +403 -0
- package/dist/devices/device-auth.module.d.ts +7 -0
- package/dist/devices/device-auth.module.js +25 -0
- package/dist/devices/device-gateway.d.ts +128 -0
- package/dist/devices/device-gateway.js +530 -0
- package/dist/devices/device-provider.d.ts +89 -0
- package/dist/devices/device-provider.js +151 -0
- package/dist/devices/device-routes.d.ts +36 -0
- package/dist/devices/device-routes.js +90 -0
- package/dist/devices/devices.module.d.ts +16 -0
- package/dist/devices/devices.module.js +44 -0
- package/dist/devices/dto.d.ts +66 -0
- package/dist/devices/dto.js +44 -0
- package/dist/devices/keys.d.ts +25 -0
- package/dist/devices/keys.js +25 -0
- package/dist/devices/machines.d.ts +118 -0
- package/dist/devices/machines.js +366 -0
- package/dist/devices/relay.d.ts +100 -0
- package/dist/devices/relay.js +373 -0
- package/dist/devices/targets.d.ts +28 -0
- package/dist/devices/targets.js +73 -0
- package/dist/environments/access.d.ts +66 -0
- package/dist/environments/access.js +113 -0
- package/dist/environments/conversation-environments.d.ts +75 -0
- package/dist/environments/conversation-environments.js +231 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +36 -0
- package/dist/environments/environments.controller.js +124 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +31 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +251 -0
- package/dist/environments/environments.service.js +791 -0
- package/dist/environments/label.d.ts +11 -0
- package/dist/environments/label.js +25 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +135 -2
- package/dist/errors.js +135 -2
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +75 -10
- package/dist/evals/run-replay.js +218 -94
- package/dist/evals/runs.controller.d.ts +3 -58
- package/dist/evals/runs.controller.js +18 -50
- package/dist/evals/runs.service.d.ts +31 -52
- package/dist/evals/runs.service.js +281 -255
- package/dist/evals/sets.controller.d.ts +3 -29
- package/dist/evals/sets.controller.js +18 -39
- package/dist/evals/sets.service.d.ts +29 -13
- package/dist/evals/sets.service.js +262 -202
- package/dist/evals/snapshot.d.ts +5 -4
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +6 -8
- package/dist/evals/step-replay.js +17 -10
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +13 -7
- package/dist/evals/trajectory.service.js +56 -21
- package/dist/evals/worker.d.ts +48 -31
- package/dist/evals/worker.js +229 -124
- package/dist/extensions/admin-ops.d.ts +133 -41
- package/dist/extensions/admin-ops.js +378 -172
- package/dist/extensions/admin-view.d.ts +82 -32
- package/dist/extensions/admin-view.js +284 -71
- package/dist/extensions/approvals.d.ts +24 -10
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +112 -45
- package/dist/extensions/bootstrap.d.ts +99 -36
- package/dist/extensions/bootstrap.js +290 -134
- package/dist/extensions/cli.d.ts +32 -10
- package/dist/extensions/cli.js +52 -98
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +19 -0
- package/dist/extensions/config-issues.js +48 -0
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +55 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +146 -70
- package/dist/extensions/deployment-config.js +439 -246
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +96 -0
- package/dist/extensions/hooks.d.ts +40 -6
- package/dist/extensions/hooks.js +83 -17
- package/dist/extensions/host.d.ts +161 -80
- package/dist/extensions/host.js +505 -213
- package/dist/extensions/installs.d.ts +73 -19
- package/dist/extensions/installs.js +174 -37
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +45 -0
- package/dist/extensions/locks.js +112 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.d.ts +141 -49
- package/dist/extensions/org-config.js +471 -243
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +59 -6
- package/dist/extensions/permission-view.js +7 -5
- package/dist/extensions/plugin-guides.d.ts +129 -0
- package/dist/extensions/plugin-guides.js +283 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +91 -4
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +19 -10
- package/dist/extensions/sources.js +34 -13
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +19 -12
- package/dist/files/previewers.d.ts +21 -19
- package/dist/files/previewers.js +114 -38
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +86 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +46 -65
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +7 -3
- package/dist/http/gateway-routes.js +16 -0
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +130 -38
- package/dist/identity/accounts.js +373 -186
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +9 -5
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +40 -30
- package/dist/identity/auth.guard.d.ts +16 -8
- package/dist/identity/auth.guard.js +41 -13
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +59 -0
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +32 -15
- package/dist/identity/me.controller.js +78 -33
- package/dist/identity/me.schemas.d.ts +14 -0
- package/dist/identity/me.schemas.js +17 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +24 -10
- package/dist/identity/sessions.js +119 -42
- package/dist/identity/settings.d.ts +42 -23
- package/dist/identity/settings.js +137 -72
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/identity/super-admin.d.ts +20 -0
- package/dist/identity/super-admin.js +81 -0
- package/dist/inbox/inbox.module.d.ts +6 -0
- package/dist/inbox/inbox.module.js +26 -0
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +68 -11
- package/dist/inbox/inbox.service.js +104 -13
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +22 -13
- package/dist/index.js +16 -7
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +173 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +157 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +91 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +121 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +90 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +18 -0
- package/dist/infra/logging/logging.module.js +52 -0
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +13 -0
- package/dist/infra/queue/redis-connection.js +25 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +91 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +36 -0
- package/dist/infra/throttler/named-throttlers.js +157 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +20 -0
- package/dist/infra/tokens.js +20 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +145 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +465 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +7 -0
- package/dist/models/models.module.js +36 -0
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +13 -5
- package/dist/models/prices.js +69 -39
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +16 -11
- package/dist/models/purposes.d.ts +103 -23
- package/dist/models/purposes.js +208 -77
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +74 -35
- package/dist/orgs/directory-sync.js +243 -132
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +61 -60
- package/dist/orgs/offboarding.js +206 -95
- package/dist/orgs/org-lock.d.ts +33 -19
- package/dist/orgs/org-lock.js +94 -35
- package/dist/orgs/org.guard.d.ts +11 -1
- package/dist/orgs/org.guard.js +45 -34
- package/dist/orgs/orgs.controller.d.ts +13 -16
- package/dist/orgs/orgs.controller.js +29 -20
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +71 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +47 -21
- package/dist/orgs/orgs.service.js +166 -91
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +2 -2
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +45 -14
- package/dist/orgs/settings.service.js +110 -51
- package/dist/overrides.d.ts +63 -0
- package/dist/overrides.js +34 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +667 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +90 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin.ops.d.ts +36 -0
- package/dist/platform/ops/admin.ops.js +389 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +717 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +599 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +853 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +188 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +378 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +28 -0
- package/dist/platform/ops/platform.ops.js +204 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +216 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +39 -0
- package/dist/platform/platform-ops.module.js +122 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +63 -0
- package/dist/roles/gateway-role.d.ts +54 -0
- package/dist/roles/gateway-role.js +118 -0
- package/dist/roles/gateway.module.d.ts +9 -0
- package/dist/roles/gateway.module.js +31 -0
- package/dist/roles/worker-role.d.ts +65 -0
- package/dist/roles/worker-role.js +151 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +106 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/context/build.d.ts +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/environment-paths.d.ts +40 -0
- package/dist/runtime/context/environment-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +11 -4
- package/dist/runtime/hook-calls.js +41 -13
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +37 -18
- package/dist/runtime/loop.d.ts +42 -6
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +50 -74
- package/dist/runtime/maintenance.js +166 -137
- package/dist/runtime/model-call.d.ts +61 -15
- package/dist/runtime/model-call.js +128 -84
- package/dist/runtime/providers.d.ts +158 -27
- package/dist/runtime/providers.js +373 -63
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -0
- package/dist/runtime/run-control.d.ts +43 -0
- package/dist/runtime/run-control.js +89 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-finish.d.ts +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +46 -0
- package/dist/runtime/run-jobs.js +91 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +90 -58
- package/dist/runtime/run-queue.js +566 -297
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +134 -77
- package/dist/runtime/run-worker.js +412 -237
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +122 -0
- package/dist/runtime/step-log.d.ts +51 -0
- package/dist/runtime/step-log.js +111 -0
- package/dist/runtime/stream.controller.d.ts +28 -9
- package/dist/runtime/stream.controller.js +72 -13
- package/dist/runtime/stream.d.ts +27 -6
- package/dist/runtime/stream.js +102 -7
- package/dist/runtime/subagents/child.d.ts +58 -51
- package/dist/runtime/subagents/child.js +105 -86
- package/dist/runtime/subagents/definition.d.ts +32 -28
- package/dist/runtime/subagents/definition.js +89 -143
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +197 -27
- package/dist/runtime/subagents/dispatch.js +336 -270
- package/dist/runtime/subagents/limits.d.ts +32 -8
- package/dist/runtime/subagents/limits.js +44 -8
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +10 -8
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +27 -10
- package/dist/runtime/subagents/roster.js +49 -13
- package/dist/runtime/subagents/skill-fork.d.ts +10 -10
- package/dist/runtime/subagents/skill-fork.js +23 -8
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +43 -0
- package/dist/runtime/subagents/subagents.service.js +106 -0
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +121 -83
- package/dist/runtime/usage-report.js +355 -181
- package/dist/runtime/waits.d.ts +258 -81
- package/dist/runtime/waits.js +800 -263
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +68 -0
- package/dist/sandbox/jobs.js +150 -0
- package/dist/sandbox/leases.d.ts +73 -82
- package/dist/sandbox/leases.js +162 -346
- package/dist/sandbox/providers.d.ts +46 -0
- package/dist/sandbox/providers.js +83 -0
- package/dist/sandbox/sandbox.module.d.ts +9 -0
- package/dist/sandbox/sandbox.module.js +36 -0
- package/dist/sandbox/sandbox.service.d.ts +359 -151
- package/dist/sandbox/sandbox.service.js +950 -435
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/skills/catalog.d.ts +40 -26
- package/dist/skills/catalog.js +120 -99
- package/dist/skills/changes.controller.d.ts +11 -4
- package/dist/skills/changes.controller.js +34 -9
- package/dist/skills/changes.service.d.ts +31 -21
- package/dist/skills/changes.service.js +426 -368
- package/dist/skills/invocable.controller.d.ts +2 -2
- package/dist/skills/invocable.controller.js +10 -7
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +19 -18
- package/dist/skills/invoke.js +68 -24
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +33 -7
- package/dist/skills/skills.controller.js +79 -12
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +39 -0
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +151 -44
- package/dist/skills/skills.service.js +636 -204
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +14 -11
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +53 -27
- package/dist/tools/approvals.service.js +365 -260
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +109 -0
- package/dist/tools/builtin-names.js +173 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +41 -0
- package/dist/tools/builtins/builtin-tools.js +151 -0
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -0
- package/dist/tools/builtins/read-tool-output.d.ts +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +293 -41
- package/dist/tools/builtins/sandbox/common.d.ts +137 -37
- package/dist/tools/builtins/sandbox/common.js +222 -62
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +21 -18
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +65 -51
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +19 -14
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +155 -36
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +30 -20
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +52 -45
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +32 -21
- package/dist/tools/builtins/skill-load.js +125 -74
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +12 -12
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +16 -3
- package/dist/tools/connectors.controller.js +34 -14
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +80 -18
- package/dist/tools/connectors.service.js +529 -358
- package/dist/tools/credentials.d.ts +20 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +73 -13
- package/dist/tools/info.js +151 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +45 -10
- package/dist/tools/oauth/tokens.js +70 -24
- package/dist/tools/org-tool-switches.d.ts +88 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +108 -80
- package/dist/tools/pipeline.js +396 -409
- package/dist/tools/policy.d.ts +4 -17
- package/dist/tools/policy.js +49 -35
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +215 -84
- package/dist/tools/registry.js +382 -264
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +113 -0
- package/dist/tools/validate.js +1 -1
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +10 -57
- package/dist/ui/views.js +58 -46
- package/package.json +13 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -59
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -21
- package/dist/conversations/sandbox-status.js +0 -24
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -59
- package/dist/http/gateway.module.js +0 -13
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/enterprise-admin.d.ts +0 -14
- package/dist/identity/enterprise-admin.js +0 -27
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
package/dist/tools/pipeline.js
CHANGED
|
@@ -1,25 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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 { parseToolKey, ToolError, validateInputForm, validateToolDisplay, } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
12
|
+
import { EventLog } from "../conversations/event-log.js";
|
|
3
13
|
import { ToolViewSchema } from "../conversations/events.js";
|
|
14
|
+
import { ApiError } from "../errors.js";
|
|
15
|
+
import { EffectiveConfigs, NEEDS_CONFIG_REASON } from "../extensions/effective-config.js";
|
|
4
16
|
import { clipText } from "../extensions/hooks.js";
|
|
17
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
5
18
|
import { ExtensionUnloadedError, PLUGIN_UNLOADED_TOOL_ERROR } from "../extensions/inflight.js";
|
|
6
19
|
import { audit } from "../identity/audit.js";
|
|
20
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
21
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
22
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
23
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
24
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
7
25
|
import { UNKNOWN_RESULT_TEXT } from "../runtime/context/pairing.js";
|
|
8
26
|
import { fireObserve, hookDeniedAudit, hookDeniedEvent, hookScope, } from "../runtime/hook-calls.js";
|
|
9
|
-
import {
|
|
27
|
+
import { subagentWaitingIdemKey } from "../runtime/loop.js";
|
|
10
28
|
import { assistantIdemKey, MAX_MODEL_ATTEMPTS, modelCallIdemKey } from "../runtime/model-call.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
29
|
+
import { rootSurfaceOf } from "../runtime/subagents/child.js";
|
|
30
|
+
import { SubagentMessages } from "../runtime/subagents/messages.js";
|
|
31
|
+
import { pairStoppedForks } from "../runtime/subagents/skill-fork.js";
|
|
32
|
+
import { SubagentsService } from "../runtime/subagents/subagents.service.js";
|
|
14
33
|
import { skillLoadOfferedIn } from "../skills/catalog.js";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
34
|
+
import { ApprovalsService } from "./approvals.service.js";
|
|
35
|
+
import { Breaker, breakerOpenMessage } from "./breaker.js";
|
|
36
|
+
import { SEND_MESSAGE, SUBAGENT_HANDBACK, TOOL_SEARCH } from "./builtin-names.js";
|
|
37
|
+
import { AGENT_TOOL, AgentToolInput } from "./builtins/agent.js";
|
|
38
|
+
import { HandbackInput } from "./builtins/handback.js";
|
|
39
|
+
import { SendMessageInput } from "./builtins/send-message.js";
|
|
17
40
|
import { isAlwaysLoaded, notLoadedText } from "./builtins/tool-search.js";
|
|
18
|
-
import {
|
|
41
|
+
import { canonicalJson } from "./canonical-json.js";
|
|
42
|
+
import { CredentialMissing, Credentials } from "./credentials.js";
|
|
43
|
+
import { ToolDrift } from "./drift.js";
|
|
19
44
|
import { ElicitationSession } from "./elicitation.js";
|
|
20
|
-
import {
|
|
45
|
+
import { legacyHint, legacyToolInput, legacyToolKey } from "./legacy-keys.js";
|
|
46
|
+
import { OrgToolSwitches, toolTurnedOffReason } from "./org-tool-switches.js";
|
|
47
|
+
import { renderResult, resolveOutputRefs, spillIfLarge, ToolOutputs } from "./outputs.js";
|
|
21
48
|
import { createDecidePolicy } from "./policy.js";
|
|
49
|
+
import { QuestionsService } from "./questions.service.js";
|
|
22
50
|
import { redactDeep, redactorFor } from "./redact.js";
|
|
51
|
+
import { ToolRegistry, } from "./registry.js";
|
|
23
52
|
import { runResourceTool } from "./resources.js";
|
|
24
53
|
import { validateInput } from "./validate.js";
|
|
25
54
|
// ---- 模型可见文案(英文) ----
|
|
@@ -45,10 +74,27 @@ export const RUN_STOPPED_TEXT = "The run was stopped before this tool call was e
|
|
|
45
74
|
export const RUN_STOPPED_DURING_TEXT = "The run was stopped while this tool call was running; its outcome is unknown. Verify before retrying.";
|
|
46
75
|
const timeoutText = (key, ms) => `Tool ${key} timed out after ${ms / 1000}s. The operation may or may not have completed; verify before retrying.`;
|
|
47
76
|
const failedText = (key, errName) => `Tool ${key} failed (${errName}). The operation may not have completed; check before retrying or try another approach.`;
|
|
48
|
-
|
|
49
|
-
|
|
77
|
+
/** The connector slugs and extension names among the run's tools (to read old `<x>__<tool>` keys). */
|
|
78
|
+
const legacyScopeOf = (tools) => {
|
|
79
|
+
const connectorSlugs = new Set();
|
|
80
|
+
const extensionNames = new Set();
|
|
81
|
+
for (const t of tools) {
|
|
82
|
+
const p = parseToolKey(t.key);
|
|
83
|
+
if (p?.kind === "connector")
|
|
84
|
+
connectorSlugs.add(p.slug);
|
|
85
|
+
else if (p?.kind === "extension")
|
|
86
|
+
extensionNames.add(p.plugin);
|
|
87
|
+
}
|
|
88
|
+
return { connectorSlugs, extensionNames };
|
|
89
|
+
};
|
|
90
|
+
const unknownToolText = (name, keys, toolSearch, hint = null) => `Unknown tool "${name}". Available tools: ${keys.length === 0 ? "(none)" : keys.join(", ")}.` +
|
|
91
|
+
(toolSearch ? " Use ToolSearch to load other tools." : "") +
|
|
92
|
+
(hint === null ? "" : ` ${hint}`);
|
|
50
93
|
const unavailableText = (name, reason) => `Tool "${name}" is unavailable: ${reason}.`;
|
|
51
|
-
|
|
94
|
+
/** With a per-call policy key (`Platform:<operation>`), the text names it. */
|
|
95
|
+
const deniedText = (key, policyKey) => policyKey === undefined || policyKey === key
|
|
96
|
+
? `Tool ${key} is denied by policy.`
|
|
97
|
+
: `Tool ${key} is denied by policy for ${policyKey}.`;
|
|
52
98
|
/** Longest hook reason quoted in {@link hookDeniedText}. */
|
|
53
99
|
const HOOK_REASON_MAX = 500;
|
|
54
100
|
/**
|
|
@@ -60,22 +106,8 @@ const invalidFormText = (key, problems) => `Tool ${key} returned an invalid inpu
|
|
|
60
106
|
const stateTooLargeText = (key) => `Tool ${key} returned input state larger than ${MAX_INPUT_STATE_BYTES / 1024} KB.`;
|
|
61
107
|
const personalMissingText = (connectorName) => `The user has not connected ${connectorName}. A connect card was shown; ask the user to connect, then retry.`;
|
|
62
108
|
const orgMissingText = (connectorName) => `${connectorName} has no organization credential configured; ask an organization admin to set it up.`;
|
|
63
|
-
/**
|
|
64
|
-
const
|
|
65
|
-
/**
|
|
66
|
-
* The wait of a step whose sub-agents still run (spec §7.2): id `sa-<runId>-<step>`, expiring after
|
|
67
|
-
* the approval timeout plus one run's duration plus 10 minutes (a child may itself wait for an
|
|
68
|
-
* approval); the timeout is a safety net.
|
|
69
|
-
*/
|
|
70
|
-
export function subagentsWait(runId, step, config, now = Date.now()) {
|
|
71
|
-
const ms = config.tools.approvalTimeoutHours * 3_600_000 + config.runtime.maxRunSeconds * 1000 + 600_000;
|
|
72
|
-
return {
|
|
73
|
-
kind: "subagents",
|
|
74
|
-
id: subagentsWaitId(runId, step),
|
|
75
|
-
expiresAt: new Date(now + ms).toISOString(),
|
|
76
|
-
step,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
109
|
+
/** Optional provider: the pipeline's {@link ToolPipelineHooks} (tests). */
|
|
110
|
+
export const TOOL_PIPELINE_HOOKS = Symbol("TOOL_PIPELINE_HOOKS");
|
|
79
111
|
const approvalAuthorization = (a) => ({
|
|
80
112
|
approvalId: a.id,
|
|
81
113
|
approvedByAccountId: a.decidedBy,
|
|
@@ -143,12 +175,52 @@ const inputWait = (q) => ({
|
|
|
143
175
|
*
|
|
144
176
|
* 有副作用不盲目重跑(spec 4.3):执行前写 `tool_call_started`;续跑时「有开始无结果」的调用记为结果未知,不再执行。
|
|
145
177
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
178
|
+
let ToolPipeline = class ToolPipeline {
|
|
179
|
+
config;
|
|
180
|
+
txHost;
|
|
148
181
|
decide;
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
182
|
+
deps;
|
|
183
|
+
constructor(kdb, eventLog,
|
|
184
|
+
/** The `Agent` tool's sub-agent dispatch; absent (tests): `Agent` calls are refused. */
|
|
185
|
+
subagents,
|
|
186
|
+
/** The message tools between agents; absent (tests): their calls are refused. */
|
|
187
|
+
messages, registry, credentials, breaker, outputs, approvals, questions, config, log,
|
|
188
|
+
/** Plugin hooks and inline ui contributions; absent (tests): no hooks, cards dropped. */
|
|
189
|
+
host, drift, effective, switches, txHost, hooks) {
|
|
190
|
+
this.config = config;
|
|
191
|
+
this.txHost = txHost;
|
|
192
|
+
this.deps = {
|
|
193
|
+
get db() {
|
|
194
|
+
return kdb.db;
|
|
195
|
+
},
|
|
196
|
+
eventLog,
|
|
197
|
+
registry,
|
|
198
|
+
credentials,
|
|
199
|
+
breaker,
|
|
200
|
+
outputs,
|
|
201
|
+
approvals,
|
|
202
|
+
questions,
|
|
203
|
+
log,
|
|
204
|
+
hooks,
|
|
205
|
+
get pluginHooks() {
|
|
206
|
+
return host?.hooks;
|
|
207
|
+
},
|
|
208
|
+
effective,
|
|
209
|
+
switches,
|
|
210
|
+
inlineViews: (plugin) => new Set((host?.current(plugin)?.manifest.ui ?? [])
|
|
211
|
+
.filter((c) => c.place === "inline" && c.aliasOf === undefined)
|
|
212
|
+
.map((c) => c.id)),
|
|
213
|
+
onToolsChanged: (orgId, connectorId) => {
|
|
214
|
+
void drift?.onToolsChanged(orgId, connectorId);
|
|
215
|
+
},
|
|
216
|
+
get subagents() {
|
|
217
|
+
return subagents ? { dispatch: (a) => subagents.dispatch(a) } : undefined;
|
|
218
|
+
},
|
|
219
|
+
messages,
|
|
220
|
+
};
|
|
221
|
+
const decide = hooks?.decidePolicy;
|
|
222
|
+
// the default policy reads live, on the context's handle
|
|
223
|
+
this.decide = decide ?? ((tool, def, c) => createDecidePolicy(kdb.db)(tool, def, c));
|
|
152
224
|
}
|
|
153
225
|
/**
|
|
154
226
|
* tools 节点:按顺序处理本步 assistant 消息里的全部 `tool_call`,每个调用都以一条 `tool_result` 结束
|
|
@@ -168,318 +240,43 @@ export class ToolPipeline {
|
|
|
168
240
|
// 每步实时解析(连接器 / 插件状态可能在模型调用之后变化)
|
|
169
241
|
if (!resolved) {
|
|
170
242
|
// the request builder's rule: a skills catalog snapshot (even an empty one) or a person's
|
|
171
|
-
// skill invocation in the log →
|
|
243
|
+
// skill invocation in the log → Skill is offered (see skillLoadOffered)
|
|
172
244
|
const skillLoad = await skillLoadOfferedIn(this.deps.db, this.deps.eventLog, ctx.conversationId);
|
|
173
245
|
resolved = await this.deps.registry.forAgent(ctx.orgId, {
|
|
174
|
-
|
|
246
|
+
disabledTools: ctx.agent.disabledTools,
|
|
247
|
+
subagentTools: ctx.agent.subagentTools,
|
|
175
248
|
skillLoad,
|
|
176
249
|
subagents: ctx.agent.subagents,
|
|
250
|
+
child: ctx.parent !== undefined,
|
|
251
|
+
forkChild: ctx.parent?.forSkill === true,
|
|
252
|
+
sandboxConversationId: ctx.parent?.rootConversationId ?? ctx.conversationId,
|
|
253
|
+
replay: ctx.conversationKind === "eval",
|
|
177
254
|
});
|
|
178
255
|
}
|
|
179
256
|
return resolved;
|
|
180
257
|
};
|
|
181
|
-
// `
|
|
182
|
-
//
|
|
183
|
-
let open = 0;
|
|
258
|
+
// an `Agent` call's dispatch writes its result (the sub-agent runs in the background, agent
|
|
259
|
+
// map spec §4.1), so no call keeps the step waiting on a sub-agent
|
|
184
260
|
for (const call of calls) {
|
|
185
261
|
if (await eventLog.findByIdem(ctx.conversationId, idem.result(ctx.runId, call.id)))
|
|
186
262
|
continue;
|
|
187
|
-
if (call.name === AGENT_TOOL) {
|
|
188
|
-
const row = await dispatchOfCall(this.deps.db, ctx.runId, call.id);
|
|
189
|
-
if (row) {
|
|
190
|
-
if (!(await this.finishAgentCall(ctx, row, call, resolve)))
|
|
191
|
-
open++;
|
|
192
|
-
continue;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
263
|
const waitingFor = await this.processCall(ctx, call, resolve);
|
|
196
|
-
if (waitingFor
|
|
197
|
-
open++;
|
|
198
|
-
else if (waitingFor)
|
|
264
|
+
if (waitingFor)
|
|
199
265
|
return { kind: "suspended", waitingFor };
|
|
200
266
|
}
|
|
201
|
-
if (open > 0) {
|
|
202
|
-
// the run is being stopped (a person, its deadline): it does not wait for its sub-agents;
|
|
203
|
-
// their calls get their results now, and the children are stopped after the run's terminal
|
|
204
|
-
// commit (spec §12)
|
|
205
|
-
if (ctx.signal.aborted) {
|
|
206
|
-
const stopped = await this.deps.db
|
|
207
|
-
.transaction()
|
|
208
|
-
.execute((t) => this.stopOpenAgentCalls(t, ctx.runId, ctx.agent));
|
|
209
|
-
if (stopped.toSeq !== null) {
|
|
210
|
-
await eventLog.notify(ctx.conversationId, stopped.toSeq);
|
|
211
|
-
}
|
|
212
|
-
stopped.fire();
|
|
213
|
-
return { kind: "done" };
|
|
214
|
-
}
|
|
215
|
-
return {
|
|
216
|
-
kind: "suspended",
|
|
217
|
-
waitingFor: subagentsWait(ctx.runId, ctx.step, this.deps.config()),
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
267
|
return { kind: "done" };
|
|
221
268
|
}
|
|
222
269
|
/**
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
* dispatch time is not recorded, so nothing is guessed) and fires `tool.postExecute` with the
|
|
230
|
-
* result, from the replica that writes it (spec §11).
|
|
231
|
-
*/
|
|
232
|
-
async finishAgentCall(ctx, row, call, resolve) {
|
|
233
|
-
const modelGiven = typeof call.input === "object" &&
|
|
234
|
-
call.input !== null &&
|
|
235
|
-
call.input.model !== undefined;
|
|
236
|
-
const r = await childResult(this.deps.eventLog, row, { modelGiven });
|
|
237
|
-
if (!r)
|
|
238
|
-
return false;
|
|
239
|
-
// No spec-hash check as in processCall: an `agent` call writes no tool_call_started holding
|
|
240
|
-
// the executed definition's hash, and its description changes with the roster and limits
|
|
241
|
-
// while the child runs. The call's approval (forCall: its latest) is by construction the one
|
|
242
|
-
// that let this dispatch start, since a dispatch happens only after an approved decision.
|
|
243
|
-
const approval = await this.deps.approvals.forCall(ctx.runId, call.id);
|
|
244
|
-
await this.writeResult(ctx, row.parentCallId, AGENT_TOOL, { content: r.content, isError: r.isError }, [finishedEvent(row, r.finished)], {
|
|
245
|
-
durationMs: r.finished.durationMs,
|
|
246
|
-
connectorId: null,
|
|
247
|
-
...(approval?.status === "approved" && {
|
|
248
|
-
authorization: approvalAuthorization(approval),
|
|
249
|
-
}),
|
|
250
|
-
});
|
|
251
|
-
const hooks = this.deps.pluginHooks;
|
|
252
|
-
const scope = hookScope(hooks, ctx);
|
|
253
|
-
if (hooks && scope && hooks.has("tool.postExecute")) {
|
|
254
|
-
const tool = (await resolve()).tools.find((t) => t.key === AGENT_TOOL);
|
|
255
|
-
if (tool) {
|
|
256
|
-
fireObserve(hooks, "tool.postExecute", {
|
|
257
|
-
...scope,
|
|
258
|
-
step: ctx.step,
|
|
259
|
-
callId: call.id,
|
|
260
|
-
toolKey: AGENT_TOOL,
|
|
261
|
-
specHash: tool.specHash,
|
|
262
|
-
input: call.input,
|
|
263
|
-
isError: r.isError,
|
|
264
|
-
content: r.content,
|
|
265
|
-
durationMs: r.finished.durationMs,
|
|
266
|
-
}, ctx.signal, this.deps.log);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
return true;
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Writes, in `t`, the `tool_result` of every open `agent` call of a run that is being stopped
|
|
273
|
-
* (sub-agents spec §12: a person stopped it while it waited on sub-agents, or its deadline or a
|
|
274
|
-
* stop hit its tools node after a dispatch). A call whose child already ended gets the child's
|
|
275
|
-
* result (and the missing `subagent_finished`); one whose child is still active gets
|
|
276
|
-
* {@link AGENT_STOPPED_WITH_RUN_TEXT}. The caller stops those children after its commit.
|
|
277
|
-
*
|
|
278
|
-
* Like every `agent` result (see {@link finishAgentCall}), each is audited `tool.called` in `t`
|
|
279
|
-
* (duration: the child's, or the time since the dispatch) and fires `tool.postExecute`, through
|
|
280
|
-
* `fire()`, which the caller runs after its commit. Returns the steps and calls written (the
|
|
281
|
-
* caller must not write a "not executed" result for them) and the highest seq written.
|
|
270
|
+
* Writes, in the caller's transaction (`mandatory`), what a run that is being stopped (a person,
|
|
271
|
+
* its deadline, a failure, the wait sweep) still owes its log: the report of its fork invocation
|
|
272
|
+
* (phase D, `pairStoppedForks`; a still active fork child is stopped by the caller after its
|
|
273
|
+
* commit). An `Agent` call has its result from its dispatch (agent map spec §4.1), so there is
|
|
274
|
+
* nothing to write for it. Returns the fork's call id (the caller must not write a "not executed"
|
|
275
|
+
* result for it), the highest seq written, and `fire`, a no-op kept for the callers' hook phase.
|
|
282
276
|
*/
|
|
283
|
-
async stopOpenAgentCalls(
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
const none = {
|
|
287
|
-
steps: [],
|
|
288
|
-
callIds: new Set(forks.callIds),
|
|
289
|
-
toSeq: forks.toSeq,
|
|
290
|
-
fire: () => { },
|
|
291
|
-
};
|
|
292
|
-
const all = await t
|
|
293
|
-
.selectFrom("subagent_dispatches")
|
|
294
|
-
.select([
|
|
295
|
-
"parent_run_id",
|
|
296
|
-
"parent_call_id",
|
|
297
|
-
"parent_conversation_id",
|
|
298
|
-
"child_conversation_id",
|
|
299
|
-
"child_run_id",
|
|
300
|
-
"step",
|
|
301
|
-
"created_at",
|
|
302
|
-
])
|
|
303
|
-
.where("parent_run_id", "=", runId)
|
|
304
|
-
.orderBy("step")
|
|
305
|
-
.orderBy("created_at")
|
|
306
|
-
.execute();
|
|
307
|
-
const dispatches = all.filter((d) => forkSeqOfCall(d.parent_call_id, d.step) === null);
|
|
308
|
-
if (dispatches.length === 0)
|
|
309
|
-
return none;
|
|
310
|
-
const run = await t
|
|
311
|
-
.selectFrom("runs as r")
|
|
312
|
-
.innerJoin("conversations as c", "c.id", "r.conversation_id")
|
|
313
|
-
.select([
|
|
314
|
-
"r.conversation_id",
|
|
315
|
-
"r.trigger_account_id",
|
|
316
|
-
"r.agent_version",
|
|
317
|
-
"c.org_id",
|
|
318
|
-
"c.agent_id",
|
|
319
|
-
"c.kind",
|
|
320
|
-
])
|
|
321
|
-
.where("r.id", "=", runId)
|
|
322
|
-
.executeTakeFirst();
|
|
323
|
-
if (!run)
|
|
324
|
-
return none;
|
|
325
|
-
const conversationId = run.conversation_id;
|
|
326
|
-
const inputs = new Map();
|
|
327
|
-
const events = [];
|
|
328
|
-
const calls = [];
|
|
329
|
-
for (const d of dispatches) {
|
|
330
|
-
const written = await t
|
|
331
|
-
.selectFrom("conversation_events")
|
|
332
|
-
.select("seq")
|
|
333
|
-
.where("conversation_id", "=", conversationId)
|
|
334
|
-
.where("idem_key", "=", idem.result(runId, d.parent_call_id))
|
|
335
|
-
.executeTakeFirst();
|
|
336
|
-
if (written)
|
|
337
|
-
continue;
|
|
338
|
-
if (!inputs.has(`step:${d.step}`)) {
|
|
339
|
-
inputs.set(`step:${d.step}`, true);
|
|
340
|
-
const msg = await t
|
|
341
|
-
.selectFrom("conversation_events")
|
|
342
|
-
.select("payload")
|
|
343
|
-
.where("conversation_id", "=", conversationId)
|
|
344
|
-
.where("idem_key", "=", assistantIdemKey(runId, d.step))
|
|
345
|
-
.executeTakeFirst();
|
|
346
|
-
const content = msg?.payload?.content ?? [];
|
|
347
|
-
for (const b of content) {
|
|
348
|
-
if (b.type === "tool_call" && b.id !== undefined)
|
|
349
|
-
inputs.set(b.id, b.input);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
const input = inputs.get(d.parent_call_id);
|
|
353
|
-
const row = {
|
|
354
|
-
parentRunId: d.parent_run_id,
|
|
355
|
-
parentCallId: d.parent_call_id,
|
|
356
|
-
parentConversationId: d.parent_conversation_id,
|
|
357
|
-
childConversationId: d.child_conversation_id,
|
|
358
|
-
childRunId: d.child_run_id,
|
|
359
|
-
};
|
|
360
|
-
const child = await t
|
|
361
|
-
.selectFrom("runs")
|
|
362
|
-
.select("status")
|
|
363
|
-
.where("id", "=", d.child_run_id)
|
|
364
|
-
.executeTakeFirst();
|
|
365
|
-
// a child that already ended keeps its own result (its log is committed)
|
|
366
|
-
const ended = child !== undefined && TERMINAL_STATUSES.has(child.status)
|
|
367
|
-
? await childResult(this.deps.eventLog, row, {
|
|
368
|
-
modelGiven: typeof input === "object" &&
|
|
369
|
-
input !== null &&
|
|
370
|
-
input.model !== undefined,
|
|
371
|
-
})
|
|
372
|
-
: null;
|
|
373
|
-
if (ended)
|
|
374
|
-
events.push(finishedEvent(row, ended.finished));
|
|
375
|
-
const r = ended
|
|
376
|
-
? { content: ended.content, isError: ended.isError, durationMs: ended.finished.durationMs }
|
|
377
|
-
: {
|
|
378
|
-
content: AGENT_STOPPED_WITH_RUN_TEXT,
|
|
379
|
-
isError: true,
|
|
380
|
-
durationMs: Math.max(0, Date.now() - new Date(d.created_at).getTime()),
|
|
381
|
-
};
|
|
382
|
-
events.push({
|
|
383
|
-
type: "tool_result",
|
|
384
|
-
runId,
|
|
385
|
-
idemKey: idem.result(runId, d.parent_call_id),
|
|
386
|
-
payload: {
|
|
387
|
-
step: d.step,
|
|
388
|
-
callId: d.parent_call_id,
|
|
389
|
-
toolKey: AGENT_TOOL,
|
|
390
|
-
content: r.content,
|
|
391
|
-
isError: r.isError,
|
|
392
|
-
},
|
|
393
|
-
});
|
|
394
|
-
calls.push({ step: d.step, callId: d.parent_call_id, input, r });
|
|
395
|
-
}
|
|
396
|
-
if (calls.length === 0)
|
|
397
|
-
return none;
|
|
398
|
-
const written = await this.deps.eventLog.append(conversationId, events, t);
|
|
399
|
-
for (const c of calls) {
|
|
400
|
-
const approval = await t
|
|
401
|
-
.selectFrom("approvals")
|
|
402
|
-
.select(["id", "status", "decided_by", "scope"])
|
|
403
|
-
.where("run_id", "=", runId)
|
|
404
|
-
.where("call_id", "=", c.callId)
|
|
405
|
-
.orderBy("attempt", "desc")
|
|
406
|
-
.limit(1)
|
|
407
|
-
.executeTakeFirst();
|
|
408
|
-
await audit(t, {
|
|
409
|
-
actorAccountId: run.trigger_account_id,
|
|
410
|
-
orgId: run.org_id,
|
|
411
|
-
action: "tool.called",
|
|
412
|
-
target: conversationId,
|
|
413
|
-
detail: {
|
|
414
|
-
toolKey: AGENT_TOOL,
|
|
415
|
-
isError: c.r.isError,
|
|
416
|
-
durationMs: c.r.durationMs,
|
|
417
|
-
agentId: run.agent_id,
|
|
418
|
-
agentVersion: run.agent_version,
|
|
419
|
-
conversationId,
|
|
420
|
-
runId,
|
|
421
|
-
callId: c.callId,
|
|
422
|
-
...(approval?.status === "approved" && {
|
|
423
|
-
approvalId: approval.id,
|
|
424
|
-
approvedByAccountId: approval.decided_by,
|
|
425
|
-
scope: approval.scope,
|
|
426
|
-
}),
|
|
427
|
-
},
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
const fire = () => {
|
|
431
|
-
const hooks = this.deps.pluginHooks;
|
|
432
|
-
const scope = hookScope(hooks, {
|
|
433
|
-
conversationKind: run.kind,
|
|
434
|
-
orgId: run.org_id,
|
|
435
|
-
accountId: run.trigger_account_id,
|
|
436
|
-
agentId: run.agent_id,
|
|
437
|
-
agentVersion: run.agent_version,
|
|
438
|
-
conversationId,
|
|
439
|
-
runId,
|
|
440
|
-
});
|
|
441
|
-
if (!hooks || !scope || !hooks.has("tool.postExecute"))
|
|
442
|
-
return;
|
|
443
|
-
void (async () => {
|
|
444
|
-
const def = agent ??
|
|
445
|
-
normalizeStoredDefinition((await this.deps.db
|
|
446
|
-
.selectFrom("agent_versions")
|
|
447
|
-
.select("definition")
|
|
448
|
-
.where("agent_id", "=", run.agent_id)
|
|
449
|
-
.where("version", "=", run.agent_version)
|
|
450
|
-
.executeTakeFirstOrThrow()).definition);
|
|
451
|
-
const skillLoad = await skillLoadOfferedIn(this.deps.db, this.deps.eventLog, conversationId);
|
|
452
|
-
const resolved = await this.deps.registry.forAgent(run.org_id, {
|
|
453
|
-
tools: def.tools ?? [],
|
|
454
|
-
skillLoad,
|
|
455
|
-
subagents: def.subagents,
|
|
456
|
-
});
|
|
457
|
-
const tool = resolved.tools.find((x) => x.key === AGENT_TOOL);
|
|
458
|
-
if (!tool)
|
|
459
|
-
return;
|
|
460
|
-
// the run is over: nothing aborts these observe hooks but their own timeouts
|
|
461
|
-
const signal = new AbortController().signal;
|
|
462
|
-
for (const c of calls) {
|
|
463
|
-
fireObserve(hooks, "tool.postExecute", {
|
|
464
|
-
...scope,
|
|
465
|
-
step: c.step,
|
|
466
|
-
callId: c.callId,
|
|
467
|
-
toolKey: AGENT_TOOL,
|
|
468
|
-
specHash: tool.specHash,
|
|
469
|
-
input: c.input,
|
|
470
|
-
isError: c.r.isError,
|
|
471
|
-
content: c.r.content,
|
|
472
|
-
durationMs: c.r.durationMs,
|
|
473
|
-
}, signal, this.deps.log);
|
|
474
|
-
}
|
|
475
|
-
})().catch((err) => this.deps.log.warn("cannot fire tool.postExecute for stopped agent calls", { runId, err }));
|
|
476
|
-
};
|
|
477
|
-
return {
|
|
478
|
-
steps: [...new Set(calls.map((c) => c.step))],
|
|
479
|
-
callIds: new Set([...forks.callIds, ...calls.map((c) => c.callId)]),
|
|
480
|
-
toSeq: Math.max(forks.toSeq ?? 0, ...written.map((e) => e.seq)),
|
|
481
|
-
fire,
|
|
482
|
-
};
|
|
277
|
+
async stopOpenAgentCalls(runId) {
|
|
278
|
+
const forks = await pairStoppedForks(this.deps.db, this.deps.eventLog, runId);
|
|
279
|
+
return { steps: [], callIds: new Set(forks.callIds), toSeq: forks.toSeq, fire: () => { } };
|
|
483
280
|
}
|
|
484
281
|
/**
|
|
485
282
|
* 处理一个尚无结果的调用。先看输入请求的轮次:最近一轮仍 pending → 继续等;否则本次是第
|
|
@@ -529,36 +326,49 @@ export class ToolPipeline {
|
|
|
529
326
|
await this.writeResult(ctx, call.id, key, { content, isError: true });
|
|
530
327
|
return undefined;
|
|
531
328
|
};
|
|
532
|
-
|
|
329
|
+
let tool = resolved.tools.find((t) => t.key === call.name);
|
|
330
|
+
// A call logged before the tool keys were renamed (spec 8.1): the request that issued it offered
|
|
331
|
+
// the old key. It runs as the current tool with translated input; the result keeps the logged key.
|
|
332
|
+
let legacy = false;
|
|
333
|
+
if (!tool) {
|
|
334
|
+
const next = legacyToolKey(call.name, legacyScopeOf(resolved.tools));
|
|
335
|
+
const current = next === null ? undefined : resolved.tools.find((t) => t.key === next);
|
|
336
|
+
if (current && (await this.requestToolKeys(ctx))?.has(call.name) === true) {
|
|
337
|
+
tool = current;
|
|
338
|
+
legacy = true;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
533
341
|
if (!tool) {
|
|
534
342
|
const why = resolved.unavailable.find((u) => u.ref === call.name) ??
|
|
535
343
|
resolved.hidden?.find((u) => u.ref === call.name);
|
|
536
344
|
if (why)
|
|
537
345
|
return fail(unavailableText(call.name, why.reason));
|
|
538
346
|
let keys = resolved.tools.map((t) => t.key);
|
|
539
|
-
//
|
|
347
|
+
// ToolSearch 模式:目录可能很大,只列内置工具与发出本次调用的请求里带了定义的工具
|
|
540
348
|
if (resolved.toolSearch === true) {
|
|
541
349
|
const sent = await this.sentTools(ctx);
|
|
542
350
|
if (sent !== null)
|
|
543
351
|
keys = keys.filter((k) => isAlwaysLoaded(k) || sent.has(k));
|
|
544
352
|
}
|
|
545
353
|
keys.sort();
|
|
546
|
-
return fail(unknownToolText(call.name, keys, keys.includes(
|
|
354
|
+
return fail(unknownToolText(call.name, keys, keys.includes(TOOL_SEARCH), legacyHint(call.name)));
|
|
547
355
|
}
|
|
548
|
-
|
|
549
|
-
//
|
|
550
|
-
|
|
356
|
+
const outKey = legacy ? call.name : tool.key;
|
|
357
|
+
// ToolSearch 模式下,模型只能调用请求里带了完整定义的工具:目录里有、但发出本次调用的请求没加载 →
|
|
358
|
+
// 明确错误,不自动加载(spec 5.5 / 6.3)。同一步里先 ToolSearch 再调用刚加载的工具同样报错。
|
|
359
|
+
if (!legacy && resolved.toolSearch === true && !isAlwaysLoaded(tool.key)) {
|
|
551
360
|
const sent = await this.sentTools(ctx);
|
|
552
361
|
if (sent !== null && !sent.has(tool.key))
|
|
553
|
-
return fail(notLoadedText(tool.key),
|
|
362
|
+
return fail(notLoadedText(tool.key), outKey);
|
|
554
363
|
}
|
|
364
|
+
const rawInput = legacy ? legacyToolInput(call.name, call.input) : call.input;
|
|
555
365
|
let input;
|
|
556
366
|
try {
|
|
557
|
-
input = await resolveOutputRefs(
|
|
367
|
+
input = await resolveOutputRefs(rawInput, (id) => this.deps.outputs.load({ orgId: ctx.orgId, conversationId: ctx.conversationId }, id));
|
|
558
368
|
}
|
|
559
369
|
catch (e) {
|
|
560
370
|
if (e instanceof ToolError)
|
|
561
|
-
return fail(e.message,
|
|
371
|
+
return fail(e.message, outKey);
|
|
562
372
|
throw e;
|
|
563
373
|
}
|
|
564
374
|
// 连接器工具的 schema 来自连接器(不受信任):去掉有风险的关键字并限制大小 / 层数
|
|
@@ -567,7 +377,23 @@ export class ToolPipeline {
|
|
|
567
377
|
log: this.deps.log,
|
|
568
378
|
});
|
|
569
379
|
if (invalid !== null)
|
|
570
|
-
return fail(invalid,
|
|
380
|
+
return fail(invalid, outKey);
|
|
381
|
+
// the per-call policy key (Platform tool spec §6.2): key and summary come from the resolved
|
|
382
|
+
// input, while the approval binding below compares the raw call.input
|
|
383
|
+
const callPolicy = (await tool.callPolicy?.(input, {
|
|
384
|
+
orgId: ctx.orgId,
|
|
385
|
+
accountId: ctx.accountId,
|
|
386
|
+
agentId: ctx.agentId,
|
|
387
|
+
conversationId: ctx.conversationId,
|
|
388
|
+
runId: ctx.runId,
|
|
389
|
+
rawInput,
|
|
390
|
+
signal: ctx.signal,
|
|
391
|
+
})) ?? null;
|
|
392
|
+
// a deny with a reason (e.g. an unavailable operation): the reason is the tool error
|
|
393
|
+
if (callPolicy?.policy === "deny" && callPolicy.denyReason !== undefined) {
|
|
394
|
+
return fail(callPolicy.denyReason, outKey);
|
|
395
|
+
}
|
|
396
|
+
const policyKey = callPolicy?.key ?? tool.key;
|
|
571
397
|
const decision = await this.decide(tool, ctx.agent, {
|
|
572
398
|
orgId: ctx.orgId,
|
|
573
399
|
accountId: ctx.accountId,
|
|
@@ -576,19 +402,29 @@ export class ToolPipeline {
|
|
|
576
402
|
runId: ctx.runId,
|
|
577
403
|
...(ctx.parent !== undefined && {
|
|
578
404
|
parentConversationId: ctx.parent.conversationId,
|
|
405
|
+
rootConversationId: ctx.parent.rootConversationId,
|
|
579
406
|
...(ctx.parent.otherAgent !== undefined && { parentAgentDiffers: ctx.parent.otherAgent }),
|
|
580
407
|
}),
|
|
408
|
+
callPolicy,
|
|
581
409
|
});
|
|
582
410
|
if (decision === "deny")
|
|
583
|
-
return fail(deniedText(tool.key
|
|
411
|
+
return fail(deniedText(tool.key, callPolicy?.key), outKey);
|
|
584
412
|
if (typeof decision === "object" && "unavailable" in decision) {
|
|
585
|
-
return fail(unavailableText(tool.key, decision.unavailable),
|
|
413
|
+
return fail(unavailableText(tool.key, decision.unavailable), outKey);
|
|
586
414
|
}
|
|
587
415
|
// 该调用已有审批(续跑)→ 按审批结果;没有且策略为 ask → 建审批并等待
|
|
588
416
|
// (不写 tool_call_started:此时尚未开始执行)。
|
|
589
417
|
let approval = await this.deps.approvals.forCall(ctx.runId, call.id);
|
|
590
418
|
// 批准的是旧定义(等待期间工具定义变了):原批准不适用于当前定义,策略仍需审批时按新定义重新审批。
|
|
591
|
-
|
|
419
|
+
// An in-flight rc call (spec §9) is the exception: its approval was asked under the rc definition
|
|
420
|
+
// of the same call, and the rename changed every builtin's definition; the person approved this
|
|
421
|
+
// very call, so the approval stands.
|
|
422
|
+
// An approval binds the exact input it showed (Platform tool spec §6.3): an approved record
|
|
423
|
+
// whose stored input differs from the call's is not used.
|
|
424
|
+
const approvedHere = approval?.status === "approved" &&
|
|
425
|
+
(legacy || approval.specHash === tool.specHash) &&
|
|
426
|
+
canonicalJson(approval.input) === canonicalJson(call.input ?? {});
|
|
427
|
+
const stale = approval?.status === "approved" && !approvedHere;
|
|
592
428
|
if ((!approval || stale) && typeof decision === "object" && "ask" in decision) {
|
|
593
429
|
approval = await this.deps.approvals.request({
|
|
594
430
|
attempt: (approval?.attempt ?? 0) + 1,
|
|
@@ -597,21 +433,23 @@ export class ToolPipeline {
|
|
|
597
433
|
runId: ctx.runId,
|
|
598
434
|
step: ctx.step,
|
|
599
435
|
callId: call.id,
|
|
600
|
-
toolKey:
|
|
436
|
+
toolKey: policyKey,
|
|
601
437
|
specHash: decision.ask.specHash,
|
|
602
438
|
connectorId: decision.ask.connectorId,
|
|
603
439
|
input: call.input,
|
|
604
440
|
requestedFor: decision.ask.requestedFor,
|
|
605
441
|
approverRole: decision.ask.approverRole,
|
|
606
442
|
policy: decision.ask.policy,
|
|
443
|
+
...(callPolicy?.summary !== undefined && { summary: callPolicy.summary }),
|
|
444
|
+
...(callPolicy !== null && !callPolicy.remember && { scopes: ["once"] }),
|
|
607
445
|
});
|
|
608
446
|
}
|
|
609
447
|
if (approval && approval.status !== "approved") {
|
|
610
448
|
const refused = this.refusalText(approval);
|
|
611
|
-
return refused === null ? approvalWait(approval) : fail(refused,
|
|
449
|
+
return refused === null ? approvalWait(approval) : fail(refused, outKey);
|
|
612
450
|
}
|
|
613
451
|
// 走到这里即放行:在(与当前定义一致的)审批下执行,否则是授权或策略放行
|
|
614
|
-
const authorization = approval?.status === "approved" &&
|
|
452
|
+
const authorization = approval?.status === "approved" && approvedHere
|
|
615
453
|
? approvalAuthorization(approval)
|
|
616
454
|
: typeof decision === "object" && "grant" in decision
|
|
617
455
|
? { grant: decision.grant }
|
|
@@ -626,7 +464,7 @@ export class ToolPipeline {
|
|
|
626
464
|
// written with the call's tool_result, so a call with a logged denial never runs again anyway.
|
|
627
465
|
const prior = await this.deps.eventLog.findByIdem(ctx.conversationId, idem.hookDenied(ctx.runId, call.id));
|
|
628
466
|
if (prior?.type === "hook_denied") {
|
|
629
|
-
return fail(hookDeniedText(prior.payload.plugin, prior.payload.reason),
|
|
467
|
+
return fail(hookDeniedText(prior.payload.plugin, prior.payload.reason), outKey);
|
|
630
468
|
}
|
|
631
469
|
}
|
|
632
470
|
// payload only built when a tool hook is registered (zero overhead otherwise)
|
|
@@ -648,7 +486,7 @@ export class ToolPipeline {
|
|
|
648
486
|
catch (e) {
|
|
649
487
|
// run() rejects only when the run's signal aborted: an abort, never a deny
|
|
650
488
|
if (ctx.signal.aborted)
|
|
651
|
-
return fail(RUN_STOPPED_TEXT,
|
|
489
|
+
return fail(RUN_STOPPED_TEXT, outKey);
|
|
652
490
|
throw e;
|
|
653
491
|
}
|
|
654
492
|
if (!verdict.allowed) {
|
|
@@ -666,20 +504,76 @@ export class ToolPipeline {
|
|
|
666
504
|
step: ctx.step,
|
|
667
505
|
callId: call.id,
|
|
668
506
|
});
|
|
669
|
-
await this.writeResult(ctx, call.id,
|
|
507
|
+
await this.writeResult(ctx, call.id, outKey, { content: hookDeniedText(verdict.plugin, verdict.reason), isError: true }, [event], undefined, [hookDeniedAudit(site, event.payload, verdict)]);
|
|
670
508
|
return undefined;
|
|
671
509
|
}
|
|
672
510
|
}
|
|
673
|
-
// `
|
|
674
|
-
//
|
|
511
|
+
// `Agent` (sub-agents spec §7.1, agent map spec §4.1): no tool_call_started; one transaction
|
|
512
|
+
// makes the dispatch durable (its marker is the subagent_dispatches row) and writes the call's
|
|
513
|
+
// immediate result, while the sub-agent runs in the background
|
|
675
514
|
const dispatcher = this.deps.subagents;
|
|
676
515
|
if (tool.source.kind === "builtin" && tool.key === AGENT_TOOL && dispatcher) {
|
|
677
516
|
const parsed = AgentToolInput.safeParse(input);
|
|
678
517
|
if (!parsed.success) {
|
|
679
|
-
return fail("Invalid agent call: pass description and prompt, and optionally subagent_type
|
|
518
|
+
return fail("Invalid agent call: pass description and prompt, and optionally subagent_type and model.", outKey);
|
|
519
|
+
}
|
|
520
|
+
const r = await dispatcher.dispatch({
|
|
521
|
+
ctx,
|
|
522
|
+
callId: call.id,
|
|
523
|
+
input: parsed.data,
|
|
524
|
+
call: { toolKey: outKey, authorization, startedAt: Date.now() },
|
|
525
|
+
});
|
|
526
|
+
if (r.kind === "refused")
|
|
527
|
+
return fail(r.content, outKey);
|
|
528
|
+
if (hooks && hookBase) {
|
|
529
|
+
fireObserve(hooks, "tool.postExecute", {
|
|
530
|
+
...hookBase,
|
|
531
|
+
isError: false,
|
|
532
|
+
content: r.content,
|
|
533
|
+
durationMs: 0,
|
|
534
|
+
}, ctx.signal, this.deps.log);
|
|
535
|
+
}
|
|
536
|
+
return undefined;
|
|
537
|
+
}
|
|
538
|
+
// `SendMessage` and `SubagentHandback` (agent map spec §4.2, §4.3): no tool_call_started; each
|
|
539
|
+
// write is idempotent by the call (the message in the sub-agent's log, the delivery in the
|
|
540
|
+
// parent's), so a call retried after a crash sends nothing twice. A send that starts an idle
|
|
541
|
+
// sub-agent writes its result with the dispatch, like `Agent`
|
|
542
|
+
const messenger = this.deps.messages;
|
|
543
|
+
if (tool.source.kind === "builtin" &&
|
|
544
|
+
(tool.key === SEND_MESSAGE || tool.key === SUBAGENT_HANDBACK) &&
|
|
545
|
+
messenger) {
|
|
546
|
+
const t0 = Date.now();
|
|
547
|
+
let r;
|
|
548
|
+
if (tool.key === SEND_MESSAGE) {
|
|
549
|
+
const parsed = SendMessageInput.safeParse(input);
|
|
550
|
+
if (!parsed.success) {
|
|
551
|
+
return fail("Invalid SendMessage call: pass to and message.", outKey);
|
|
552
|
+
}
|
|
553
|
+
r = await messenger.toChild(ctx, call.id, parsed.data.to, parsed.data.message, {
|
|
554
|
+
authorization,
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
const parsed = HandbackInput.safeParse(input);
|
|
559
|
+
if (!parsed.success)
|
|
560
|
+
return fail("Invalid SubagentHandback call: pass message.", outKey);
|
|
561
|
+
r = await messenger.toParent(ctx, "report", parsed.data.message, call.id);
|
|
562
|
+
}
|
|
563
|
+
if (r.isError)
|
|
564
|
+
return fail(r.content, outKey);
|
|
565
|
+
const durationMs = Date.now() - t0;
|
|
566
|
+
if (r.logged !== true) {
|
|
567
|
+
await this.writeResult(ctx, call.id, outKey, { content: r.content, isError: false }, [], {
|
|
568
|
+
durationMs,
|
|
569
|
+
connectorId: null,
|
|
570
|
+
authorization,
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
if (hooks && hookBase) {
|
|
574
|
+
fireObserve(hooks, "tool.postExecute", { ...hookBase, isError: false, content: r.content, durationMs }, ctx.signal, this.deps.log);
|
|
680
575
|
}
|
|
681
|
-
|
|
682
|
-
return r.kind === "refused" ? fail(r.content, tool.key) : OPEN;
|
|
576
|
+
return undefined;
|
|
683
577
|
}
|
|
684
578
|
await this.deps.eventLog.append(ctx.conversationId, [
|
|
685
579
|
{
|
|
@@ -702,7 +596,7 @@ export class ToolPipeline {
|
|
|
702
596
|
const rendered = outcome.kind === "result"
|
|
703
597
|
? renderResult(outcome.result)
|
|
704
598
|
: { text: outcome.message, contentTypes: [], isError: true };
|
|
705
|
-
// 内置工具(
|
|
599
|
+
// 内置工具(ToolSearch)报告的已加载工具:只认本步可用、非内置的 key,写进 tool_result(日志即事实源)
|
|
706
600
|
const loadedTools = outcome.kind === "result" && tool.source.kind === "builtin"
|
|
707
601
|
? loadedFrom(outcome.result, resolved.tools)
|
|
708
602
|
: [];
|
|
@@ -719,7 +613,7 @@ export class ToolPipeline {
|
|
|
719
613
|
const card = outcome.kind === "result" && tool.source.kind === "plugin"
|
|
720
614
|
? this.cardOf(outcome.result, tool.source.plugin, tool.key)
|
|
721
615
|
: undefined;
|
|
722
|
-
const cfg = this.
|
|
616
|
+
const cfg = this.config.get().tools;
|
|
723
617
|
const spilled = await spillIfLarge(rendered.text, {
|
|
724
618
|
// 内置工具可给更低的转存阈值(沙箱 bash 30000 字符)
|
|
725
619
|
spillChars: Math.min(cfg.outputSpillChars, tool.spillChars ?? Number.POSITIVE_INFINITY),
|
|
@@ -746,7 +640,7 @@ export class ToolPipeline {
|
|
|
746
640
|
},
|
|
747
641
|
]
|
|
748
642
|
: [];
|
|
749
|
-
await this.writeResult(ctx, call.id,
|
|
643
|
+
await this.writeResult(ctx, call.id, outKey, {
|
|
750
644
|
content: spilled.content,
|
|
751
645
|
isError: rendered.isError,
|
|
752
646
|
...(spilled.outputId !== undefined && { outputId: spilled.outputId }),
|
|
@@ -760,24 +654,11 @@ export class ToolPipeline {
|
|
|
760
654
|
connectorId: tool.source.kind === "connector" ? tool.source.connectorId : null,
|
|
761
655
|
authorization,
|
|
762
656
|
});
|
|
763
|
-
// a sub-agent that needs a personal connection: mirrored in the
|
|
764
|
-
// not a wait, the child got the connect
|
|
657
|
+
// a sub-agent that needs a personal connection: mirrored in the root conversation of its tree
|
|
658
|
+
// for display (sub-agents spec §9, agent map spec §7; not a wait, the child got the connect
|
|
659
|
+
// text as its result)
|
|
765
660
|
if (outcome.kind === "connection_required" && ctx.parent !== undefined) {
|
|
766
|
-
await this.deps.
|
|
767
|
-
.append(ctx.parent.conversationId, [
|
|
768
|
-
{
|
|
769
|
-
type: "subagent_waiting",
|
|
770
|
-
runId: ctx.parent.runId,
|
|
771
|
-
idemKey: subagentWaitingIdemKey(ctx.runId, `connect-${call.id}`),
|
|
772
|
-
payload: {
|
|
773
|
-
subagentId: ctx.conversationId,
|
|
774
|
-
childRunId: ctx.runId,
|
|
775
|
-
kind: "connect",
|
|
776
|
-
toolKey: tool.key,
|
|
777
|
-
},
|
|
778
|
-
},
|
|
779
|
-
])
|
|
780
|
-
.catch((err) => this.deps.log.warn("cannot surface a sub-agent's connect card in its parent", {
|
|
661
|
+
await this.surfaceConnectInRoot(ctx, ctx.parent, call.id, tool.key).catch((err) => this.deps.log.warn("cannot surface a sub-agent's connect card in its root conversation", {
|
|
781
662
|
runId: ctx.runId,
|
|
782
663
|
err,
|
|
783
664
|
}));
|
|
@@ -787,9 +668,44 @@ export class ToolPipeline {
|
|
|
787
668
|
}
|
|
788
669
|
return undefined;
|
|
789
670
|
}
|
|
671
|
+
/** Appends a sub-agent's connect card to its root conversation ({@link rootSurfaceOf}). */
|
|
672
|
+
async surfaceConnectInRoot(ctx, parent, callId, toolKey) {
|
|
673
|
+
const target = await rootSurfaceOf(this.deps.db, ctx.conversationId, ctx.runId, parent);
|
|
674
|
+
if (!target)
|
|
675
|
+
return;
|
|
676
|
+
await this.deps.eventLog.append(target.conversationId, [
|
|
677
|
+
{
|
|
678
|
+
type: "subagent_waiting",
|
|
679
|
+
runId: target.runId,
|
|
680
|
+
idemKey: subagentWaitingIdemKey(ctx.runId, `connect-${callId}`),
|
|
681
|
+
payload: {
|
|
682
|
+
subagentId: ctx.conversationId,
|
|
683
|
+
childRunId: ctx.runId,
|
|
684
|
+
path: target.path,
|
|
685
|
+
kind: "connect",
|
|
686
|
+
toolKey,
|
|
687
|
+
},
|
|
688
|
+
},
|
|
689
|
+
]);
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Every tool key the request that issued this step's calls offered (`request.tools` plus the
|
|
693
|
+
* `catalog` keys), in any mode; null when its model_call is not found. Used to tell a call to an
|
|
694
|
+
* old key that was offered (in flight across the rename) from one that never was.
|
|
695
|
+
*/
|
|
696
|
+
async requestToolKeys(ctx) {
|
|
697
|
+
for (let attempt = MAX_MODEL_ATTEMPTS; attempt >= 1; attempt--) {
|
|
698
|
+
const e = await this.deps.eventLog.findByIdem(ctx.conversationId, modelCallIdemKey(ctx.runId, ctx.step, attempt));
|
|
699
|
+
if (e?.type !== "model_call")
|
|
700
|
+
continue;
|
|
701
|
+
const { tools, catalog } = e.payload.request;
|
|
702
|
+
return new Set([...(tools ?? []), ...(catalog ?? [])].map((t) => t.key));
|
|
703
|
+
}
|
|
704
|
+
return null;
|
|
705
|
+
}
|
|
790
706
|
/**
|
|
791
707
|
* 发出本步调用的请求里带了完整定义的工具 key:本步最后一次尝试的 `model_call.request.tools`
|
|
792
|
-
* (`assistant_message` 来自最后一次尝试)。该请求不在
|
|
708
|
+
* (`assistant_message` 来自最后一次尝试)。该请求不在 ToolSearch 模式(没有 `catalog`,工具全部发送)
|
|
793
709
|
* 或找不到 model_call 时返回 null(不做加载检查)。已加载集合由此从日志得出,不放进程内存。
|
|
794
710
|
*/
|
|
795
711
|
async sentTools(ctx) {
|
|
@@ -863,7 +779,7 @@ export class ToolPipeline {
|
|
|
863
779
|
const handler = this.deps.registry.handler(tool.source);
|
|
864
780
|
if (!handler)
|
|
865
781
|
return { kind: "error", message: `Tool ${tool.key} is no longer available.` };
|
|
866
|
-
// 插件处理函数只拿到 SDK 的 ToolCallContext;内置工具另外拿到本步解析出的工具(
|
|
782
|
+
// 插件处理函数只拿到 SDK 的 ToolCallContext;内置工具另外拿到本步解析出的工具(ToolSearch 用)
|
|
867
783
|
const base = {
|
|
868
784
|
orgId: ctx.orgId,
|
|
869
785
|
accountId: ctx.accountId,
|
|
@@ -875,14 +791,48 @@ export class ToolPipeline {
|
|
|
875
791
|
...(tool.source.kind === "builtin" && { runId: ctx.runId }),
|
|
876
792
|
...(tool.source.kind === "builtin" &&
|
|
877
793
|
ctx.deadline !== undefined && { runDeadline: ctx.deadline }),
|
|
878
|
-
// a sub-agent works in its
|
|
794
|
+
// a sub-agent works in its root conversation's sandbox (spec §10.1, at every depth)
|
|
795
|
+
...(tool.source.kind === "builtin" &&
|
|
796
|
+
ctx.parent !== undefined && { sandboxConversationId: ctx.parent.rootConversationId }),
|
|
879
797
|
...(tool.source.kind === "builtin" &&
|
|
880
|
-
ctx.parent !== undefined && {
|
|
798
|
+
ctx.parent !== undefined && { parentRunId: ctx.parent.runId }),
|
|
799
|
+
...(tool.source.kind === "builtin" &&
|
|
800
|
+
ctx.parent?.budgetRunId !== undefined && { budgetRunId: ctx.parent.budgetRunId }),
|
|
801
|
+
// the hook scope of a builtin's own model call (the WebFetch extraction)
|
|
802
|
+
...(tool.source.kind === "builtin" && {
|
|
803
|
+
step: ctx.step,
|
|
804
|
+
agentVersion: ctx.agentVersion,
|
|
805
|
+
...(ctx.conversationKind !== undefined && { conversationKind: ctx.conversationKind }),
|
|
806
|
+
...(ctx.parent !== undefined && {
|
|
807
|
+
parent: {
|
|
808
|
+
conversationId: ctx.parent.conversationId,
|
|
809
|
+
runId: ctx.parent.runId,
|
|
810
|
+
callId: ctx.parent.callId,
|
|
811
|
+
},
|
|
812
|
+
}),
|
|
813
|
+
}),
|
|
881
814
|
};
|
|
882
815
|
// 内置工具可按输入给自己的时限(沙箱 bash 按命令超时加余量);缺省 tools.timeoutMs
|
|
883
|
-
const timeoutMs = tool.timeoutMs?.(input) ?? this.
|
|
816
|
+
const timeoutMs = tool.timeoutMs?.(input) ?? this.config.get().tools.timeoutMs;
|
|
884
817
|
try {
|
|
885
|
-
|
|
818
|
+
// a plugin tool runs with the extension's effective config for the org, never without it
|
|
819
|
+
// (layering spec A §6): one read per call, cached by EffectiveConfigs
|
|
820
|
+
let config = {};
|
|
821
|
+
if (tool.source.kind === "plugin") {
|
|
822
|
+
// turned off in the org since the step resolved its tools (spec A §7)
|
|
823
|
+
if (await this.deps.switches.isToolOff(ctx.orgId, tool.source.plugin, tool.source.name)) {
|
|
824
|
+
return { kind: "error", message: `${toolTurnedOffReason(tool.key)}.` };
|
|
825
|
+
}
|
|
826
|
+
const effective = await this.deps.effective.get(ctx.orgId, tool.source.plugin);
|
|
827
|
+
if (!effective.ok) {
|
|
828
|
+
// unloaded or disabled since the step resolved its tools: the documented unloaded error
|
|
829
|
+
if (effective.notRunning)
|
|
830
|
+
return { kind: "error", message: PLUGIN_UNLOADED_TOOL_ERROR };
|
|
831
|
+
return { kind: "error", message: unavailableText(tool.key, NEEDS_CONFIG_REASON) };
|
|
832
|
+
}
|
|
833
|
+
config = { config: effective.config };
|
|
834
|
+
}
|
|
835
|
+
const r = await this.bounded(ctx.signal, (signal) => handler(input, { ...base, ...config, signal }), undefined, timeoutMs);
|
|
886
836
|
if (r === "timeout") {
|
|
887
837
|
return { kind: "error", message: timeoutText(tool.key, timeoutMs) };
|
|
888
838
|
}
|
|
@@ -898,7 +848,7 @@ export class ToolPipeline {
|
|
|
898
848
|
}
|
|
899
849
|
}
|
|
900
850
|
async executeConnector(tool, source, input, ctx, resume) {
|
|
901
|
-
const { db, registry, breaker, credentials
|
|
851
|
+
const { db, registry, breaker, credentials } = this.deps;
|
|
902
852
|
const { orgId } = ctx;
|
|
903
853
|
const connectorId = source.connectorId;
|
|
904
854
|
const app = await db
|
|
@@ -1011,7 +961,7 @@ export class ToolPipeline {
|
|
|
1011
961
|
onElicit: elicit.handle,
|
|
1012
962
|
onToolsChanged: () => {
|
|
1013
963
|
try {
|
|
1014
|
-
this.deps.onToolsChanged
|
|
964
|
+
this.deps.onToolsChanged(orgId, connectorId);
|
|
1015
965
|
}
|
|
1016
966
|
catch (err) {
|
|
1017
967
|
this.deps.log.warn("tools changed notification failed", {
|
|
@@ -1037,7 +987,7 @@ export class ToolPipeline {
|
|
|
1037
987
|
return ask;
|
|
1038
988
|
if (r === "timeout") {
|
|
1039
989
|
await breaker.failure(orgId, connectorId);
|
|
1040
|
-
return { kind: "error", message: timeoutText(tool.key, config().tools.timeoutMs) };
|
|
990
|
+
return { kind: "error", message: timeoutText(tool.key, this.config.get().tools.timeoutMs) };
|
|
1041
991
|
}
|
|
1042
992
|
// 工具自己报告的错误(isError)说明服务可用,也算成功。
|
|
1043
993
|
await breaker.success(orgId, connectorId);
|
|
@@ -1067,6 +1017,11 @@ export class ToolPipeline {
|
|
|
1067
1017
|
thrown(key, e) {
|
|
1068
1018
|
if (e instanceof ToolError)
|
|
1069
1019
|
return { kind: "error", message: e.message };
|
|
1020
|
+
// an extension tool's ctx.models.embed denied by a policy hook (spec B §5.4): the model sees the
|
|
1021
|
+
// deny text (sanitized reason), as for a denied tool call, not a generic failure
|
|
1022
|
+
if (e instanceof ApiError && e.code === "model.hook_denied") {
|
|
1023
|
+
return { kind: "error", message: e.message };
|
|
1024
|
+
}
|
|
1070
1025
|
// 提供工具的插件实例在调用进行中被撤销(停用 / 升级),排空时限到后中止(C17)
|
|
1071
1026
|
if (e instanceof ExtensionUnloadedError) {
|
|
1072
1027
|
this.deps.log.warn("tool call aborted: plugin unloaded", { toolKey: key, plugin: e.plugin });
|
|
@@ -1084,7 +1039,7 @@ export class ToolPipeline {
|
|
|
1084
1039
|
/** 额外参与竞速的信号(不传给 work):中止时以 `Stopped` 抛出,由调用方判断原因。 */
|
|
1085
1040
|
interrupt,
|
|
1086
1041
|
/** 时限(毫秒),缺省 `tools.timeoutMs`。 */
|
|
1087
|
-
timeoutMs = this.
|
|
1042
|
+
timeoutMs = this.config.get().tools.timeoutMs) {
|
|
1088
1043
|
if (runSignal.aborted)
|
|
1089
1044
|
return "aborted";
|
|
1090
1045
|
const timeout = new AbortController();
|
|
@@ -1157,7 +1112,7 @@ export class ToolPipeline {
|
|
|
1157
1112
|
if (c === undefined)
|
|
1158
1113
|
return undefined;
|
|
1159
1114
|
const x = (typeof c === "object" && c !== null ? c : {});
|
|
1160
|
-
const views = this.deps.inlineViews
|
|
1115
|
+
const views = this.deps.inlineViews(plugin);
|
|
1161
1116
|
const keyOk = x.key === undefined || (typeof x.key === "string" && x.key !== "" && x.key.length <= 200);
|
|
1162
1117
|
if (typeof x.view !== "string" || !views?.has(x.view) || !keyOk) {
|
|
1163
1118
|
this.deps.log.warn("tool returned an inline card that is not an inline view of its extension; dropped", {
|
|
@@ -1205,32 +1160,64 @@ export class ToolPipeline {
|
|
|
1205
1160
|
await this.deps.eventLog.append(ctx.conversationId, events);
|
|
1206
1161
|
return;
|
|
1207
1162
|
}
|
|
1208
|
-
const written = await this.
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
target: ctx.conversationId,
|
|
1219
|
-
detail: {
|
|
1220
|
-
toolKey,
|
|
1221
|
-
isError: r.isError,
|
|
1222
|
-
durationMs: callAudit.durationMs,
|
|
1223
|
-
agentId: ctx.agentId,
|
|
1224
|
-
agentVersion: ctx.agentVersion,
|
|
1225
|
-
conversationId: ctx.conversationId,
|
|
1226
|
-
runId: ctx.runId,
|
|
1227
|
-
callId,
|
|
1228
|
-
...(callAudit.connectorId !== null && { connectorId: callAudit.connectorId }),
|
|
1229
|
-
...callAudit.authorization,
|
|
1230
|
-
},
|
|
1231
|
-
});
|
|
1163
|
+
const written = await this.writeResultIn(ctx, callId, toolKey, r, events, callAudit, audits);
|
|
1164
|
+
await this.deps.eventLog.notify(ctx.conversationId, Math.max(...written.map((e) => e.seq)));
|
|
1165
|
+
}
|
|
1166
|
+
/** The result's events and audit rows in one transaction (see {@link writeResult}). */
|
|
1167
|
+
async writeResultIn(ctx, callId, toolKey, r, events, callAudit, audits) {
|
|
1168
|
+
const t = this.deps.db;
|
|
1169
|
+
const out = await this.deps.eventLog.appendIn(ctx.conversationId, events);
|
|
1170
|
+
for (const a of audits)
|
|
1171
|
+
await audit(t, a);
|
|
1172
|
+
if (callAudit === undefined)
|
|
1232
1173
|
return out;
|
|
1174
|
+
await audit(t, {
|
|
1175
|
+
actorAccountId: ctx.accountId,
|
|
1176
|
+
orgId: ctx.orgId,
|
|
1177
|
+
action: "tool.called",
|
|
1178
|
+
target: ctx.conversationId,
|
|
1179
|
+
detail: {
|
|
1180
|
+
toolKey,
|
|
1181
|
+
isError: r.isError,
|
|
1182
|
+
durationMs: callAudit.durationMs,
|
|
1183
|
+
agentId: ctx.agentId,
|
|
1184
|
+
agentVersion: ctx.agentVersion,
|
|
1185
|
+
conversationId: ctx.conversationId,
|
|
1186
|
+
runId: ctx.runId,
|
|
1187
|
+
callId,
|
|
1188
|
+
...(callAudit.connectorId !== null && { connectorId: callAudit.connectorId }),
|
|
1189
|
+
...callAudit.authorization,
|
|
1190
|
+
},
|
|
1233
1191
|
});
|
|
1234
|
-
|
|
1192
|
+
return out;
|
|
1235
1193
|
}
|
|
1236
|
-
}
|
|
1194
|
+
};
|
|
1195
|
+
__decorate([
|
|
1196
|
+
Transactional({ propagation: "mandatory" })
|
|
1197
|
+
], ToolPipeline.prototype, "stopOpenAgentCalls", null);
|
|
1198
|
+
__decorate([
|
|
1199
|
+
Transactional()
|
|
1200
|
+
], ToolPipeline.prototype, "writeResultIn", null);
|
|
1201
|
+
ToolPipeline = __decorate([
|
|
1202
|
+
Injectable(),
|
|
1203
|
+
__param(0, Inject(KernelDb)),
|
|
1204
|
+
__param(1, Inject(EventLog)),
|
|
1205
|
+
__param(2, Inject(SubagentsService)),
|
|
1206
|
+
__param(3, Inject(SubagentMessages)),
|
|
1207
|
+
__param(4, Inject(ToolRegistry)),
|
|
1208
|
+
__param(5, Inject(Credentials)),
|
|
1209
|
+
__param(6, Inject(Breaker)),
|
|
1210
|
+
__param(7, Inject(ToolOutputs)),
|
|
1211
|
+
__param(8, Inject(ApprovalsService)),
|
|
1212
|
+
__param(9, Inject(QuestionsService)),
|
|
1213
|
+
__param(10, Inject(KernelConfigService)),
|
|
1214
|
+
__param(11, Inject(KERNEL_LOGGER)),
|
|
1215
|
+
__param(12, Inject(ExtensionHost)),
|
|
1216
|
+
__param(13, Inject(ToolDrift)),
|
|
1217
|
+
__param(14, Inject(EffectiveConfigs)),
|
|
1218
|
+
__param(15, Inject(OrgToolSwitches)),
|
|
1219
|
+
__param(16, Inject(TransactionHost)),
|
|
1220
|
+
__param(17, Optional()),
|
|
1221
|
+
__param(17, Inject(TOOL_PIPELINE_HOOKS))
|
|
1222
|
+
], ToolPipeline);
|
|
1223
|
+
export { ToolPipeline };
|