@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5
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 +61 -5
- package/dist/admin/admin.controller.d.ts +47 -16
- package/dist/admin/admin.controller.js +44 -19
- package/dist/admin/extensions.controller.d.ts +24 -3
- package/dist/admin/extensions.controller.js +48 -8
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +19 -0
- package/dist/agents/agent-lookup.js +21 -0
- package/dist/agents/agent-profile.service.d.ts +29 -0
- package/dist/agents/agent-profile.service.js +117 -0
- package/dist/agents/agents.controller.d.ts +168 -3
- package/dist/agents/agents.controller.js +201 -12
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +36 -6
- package/dist/agents/agents.service.d.ts +64 -27
- package/dist/agents/agents.service.js +199 -74
- package/dist/agents/definition.d.ts +53 -0
- package/dist/agents/definition.js +55 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -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 +9 -3
- package/dist/agents/models.controller.js +19 -4
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -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 +96 -0
- package/dist/agents/profile.js +51 -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 +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +476 -53
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +87 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +94 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +36 -0
- package/dist/background/launch.js +70 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +190 -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 +79 -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 +243 -0
- package/dist/background/store.d.ts +162 -0
- package/dist/background/store.js +357 -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 +211 -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 +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- 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 +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/claude/agents.js +2 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- 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 +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -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 +221 -0
- package/dist/catalog/platform-components.js +761 -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 +178 -34
- package/dist/catalog/plugin-import.js +623 -83
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1148 -1137
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.js +1 -0
- package/dist/channels/cards.js +21 -3
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/connections.service.d.ts +16 -1
- package/dist/channels/connections.service.js +38 -4
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +24 -2
- package/dist/config/schema.js +145 -19
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -23
- package/dist/conversations/conversations.controller.js +141 -50
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.service.d.ts +108 -9
- package/dist/conversations/conversations.service.js +237 -30
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +21 -6
- package/dist/conversations/event-log.js +70 -1
- package/dist/conversations/events.d.ts +140 -0
- package/dist/conversations/events.js +142 -13
- package/dist/conversations/queue.d.ts +3 -1
- package/dist/conversations/queue.js +13 -2
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +8 -1
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +36 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +420 -20
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -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 +90 -2
- package/dist/errors.js +90 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +7 -2
- package/dist/evals/run-replay.js +42 -7
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +13 -7
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +67 -42
- package/dist/extensions/admin-view.d.ts +39 -10
- package/dist/extensions/admin-view.js +111 -20
- package/dist/extensions/blobs.js +1 -0
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +6 -0
- package/dist/extensions/deployment-config.d.ts +78 -8
- package/dist/extensions/deployment-config.js +172 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +14 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +45 -2
- package/dist/extensions/host.js +112 -16
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +81 -6
- package/dist/extensions/org-config.js +195 -44
- 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 +19 -4
- package/dist/extensions/permission-view.js +4 -4
- 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 +34 -0
- package/dist/extensions/point-defaults.controller.js +71 -0
- package/dist/extensions/point-defaults.d.ts +71 -0
- package/dist/extensions/point-defaults.js +234 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +31 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/cookies.d.ts +20 -5
- package/dist/identity/cookies.js +44 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.d.ts +5 -1
- package/dist/identity/me.controller.js +12 -3
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +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 +2 -2
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +27 -1
- package/dist/infra/database/database.module.js +1 -0
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +19 -2
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +43 -9
- package/dist/models/purposes.js +48 -18
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +20 -3
- package/dist/orgs/settings.service.js +19 -4
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -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 +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1387 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -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 +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -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 +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +15 -1
- package/dist/runtime/context/build.d.ts +11 -7
- package/dist/runtime/context/build.js +46 -19
- package/dist/runtime/context/claude-tools.d.ts +3 -1
- package/dist/runtime/context/claude-tools.js +8 -6
- package/dist/runtime/context/compaction.js +13 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +34 -5
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +46 -8
- package/dist/runtime/model-call.js +72 -21
- package/dist/runtime/providers.d.ts +6 -0
- package/dist/runtime/providers.js +8 -0
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +59 -2
- package/dist/runtime/run-queue.js +311 -38
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +69 -33
- package/dist/runtime/runtime.module.js +11 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +44 -28
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- 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 +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- package/dist/runtime/usage-report.d.ts +2 -1
- package/dist/runtime/usage-report.js +19 -13
- package/dist/runtime/waits.d.ts +145 -36
- package/dist/runtime/waits.js +423 -109
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +282 -129
- package/dist/sandbox/sandbox.service.js +736 -381
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +25 -4
- package/dist/tools/builtin-names.d.ts +41 -7
- package/dist/tools/builtin-names.js +59 -7
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +19 -1
- package/dist/tools/builtins/builtin-tools.js +59 -2
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
- package/dist/tools/builtins/sandbox/bash.js +241 -4
- package/dist/tools/builtins/sandbox/common.d.ts +69 -27
- package/dist/tools/builtins/sandbox/common.js +87 -48
- package/dist/tools/builtins/sandbox/deliver.js +1 -1
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +3 -1
- package/dist/tools/builtins/sandbox/index.js +7 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
- package/dist/tools/builtins/sandbox/task-output.js +329 -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.js +2 -2
- 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 +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- 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/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- 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 +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +202 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +120 -8
- package/dist/tools/registry.js +112 -19
- package/dist/tools/tools.module.js +24 -2
- package/dist/tools/validate.js +1 -1
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- 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/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -62
|
@@ -0,0 +1,37 @@
|
|
|
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 { Controller, Get, Header, Inject } from "@nestjs/common";
|
|
11
|
+
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
12
|
+
import { OrgExtensionTools } from "./info.js";
|
|
13
|
+
/**
|
|
14
|
+
* `GET /api/v1/orgs/:orgId/tools/extensions` (`agents.use`) → `{ extensions }`: the tools of the
|
|
15
|
+
* extensions enabled in the org, grouped by extension, for the agent form's Tools section (it adds
|
|
16
|
+
* or removes `{kind:"plugin",plugin,name}` references). Display only; nothing here is model-visible.
|
|
17
|
+
*/
|
|
18
|
+
let ExtensionToolsController = class ExtensionToolsController {
|
|
19
|
+
tools;
|
|
20
|
+
constructor(tools) {
|
|
21
|
+
this.tools = tools;
|
|
22
|
+
}
|
|
23
|
+
async extensions(org) {
|
|
24
|
+
return { extensions: await this.tools.list(org.orgId) };
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
__decorate([
|
|
28
|
+
Get("extensions"),
|
|
29
|
+
Header("cache-control", "private, no-store"),
|
|
30
|
+
OrgAction("agents.use"),
|
|
31
|
+
__param(0, CurrentOrg())
|
|
32
|
+
], ExtensionToolsController.prototype, "extensions", null);
|
|
33
|
+
ExtensionToolsController = __decorate([
|
|
34
|
+
Controller("api/v1/orgs/:orgId/tools"),
|
|
35
|
+
__param(0, Inject(OrgExtensionTools))
|
|
36
|
+
], ExtensionToolsController);
|
|
37
|
+
export { ExtensionToolsController };
|
package/dist/tools/info.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { type LocalizedName } from "@capybara-hq/plugin-sdk";
|
|
1
|
+
import { type LocalizedName, type ToolAnnotations } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import { ConversationAccess } from "../conversations/access.js";
|
|
3
3
|
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
4
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { OrgToolSwitches } from "./org-tool-switches.js";
|
|
5
6
|
import { ToolRegistry } from "./registry.js";
|
|
6
7
|
/**
|
|
7
8
|
* Tool presentation metadata for the conversation page (UI refresh B, design spec §6.16.9): the
|
|
@@ -84,3 +85,43 @@ export declare class ConversationToolInfo {
|
|
|
84
85
|
access: Pick<ConversationAccess, "isAccessible">);
|
|
85
86
|
get(orgId: string, conversationId: string, viewerAccountId: string, keys: readonly string[]): Promise<ToolInfo[]>;
|
|
86
87
|
}
|
|
88
|
+
/** One tool of {@link OrgExtensionTools}. Display only, for the agent form. */
|
|
89
|
+
export interface ExtensionToolOffer {
|
|
90
|
+
/** The tool's registered name (the `name` of a `{kind:"plugin"}` reference). */
|
|
91
|
+
name: string;
|
|
92
|
+
/** The model-visible key, `plugin__<plugin>__<name>` (the `toolPolicies` key). */
|
|
93
|
+
key: string;
|
|
94
|
+
/** The declared display title (`ToolSpec.title`), or null. */
|
|
95
|
+
title: string | null;
|
|
96
|
+
/** The first non-empty line of the tool's description (English, model-facing text). */
|
|
97
|
+
description: string;
|
|
98
|
+
annotations: ToolAnnotations;
|
|
99
|
+
/** The tool's default policy: its `defaultPolicy`, else derived from the annotations. */
|
|
100
|
+
defaultPolicy: "allow" | "ask";
|
|
101
|
+
/**
|
|
102
|
+
* The org turned this tool off (layering spec A §7): still listed, so the form shows it as
|
|
103
|
+
* unavailable in the agents that selected it.
|
|
104
|
+
*/
|
|
105
|
+
switchedOff: boolean;
|
|
106
|
+
}
|
|
107
|
+
/** One extension of {@link OrgExtensionTools} with its tools, in registration order. */
|
|
108
|
+
export interface ExtensionToolsOffer {
|
|
109
|
+
plugin: string;
|
|
110
|
+
/** The plugin's catalog display name, else its name. */
|
|
111
|
+
displayName: LocalizedName;
|
|
112
|
+
tools: ExtensionToolOffer[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* `GET /orgs/:orgId/tools/extensions`: the tools an agent of this org can reference by
|
|
116
|
+
* `{kind:"plugin"}` and get at run time, grouped by extension: the extensions loaded on this
|
|
117
|
+
* replica and enabled in the org (`enabled.ts`, through the host), each with the tools it
|
|
118
|
+
* registered whose key is valid (`ToolRegistry.forAgent` reports the others unavailable); a tool
|
|
119
|
+
* the org turned off is listed with `switchedOff`.
|
|
120
|
+
*/
|
|
121
|
+
export declare class OrgExtensionTools {
|
|
122
|
+
private readonly db;
|
|
123
|
+
private readonly registry;
|
|
124
|
+
private readonly switches;
|
|
125
|
+
constructor(db: KernelDb, registry: Pick<ToolRegistry, "extensionToolSpecs" | "enabledExtensions">, switches: Pick<OrgToolSwitches, "offKeys">);
|
|
126
|
+
list(orgId: string): Promise<ExtensionToolsOffer[]>;
|
|
127
|
+
}
|
package/dist/tools/info.js
CHANGED
|
@@ -16,7 +16,9 @@ import { UUID_RE } from "../ui/registry.js";
|
|
|
16
16
|
import { BUILTIN_TOOL_KINDS, SANDBOX_TOOL_NAMES } from "./builtin-names.js";
|
|
17
17
|
import { pluginDisplayNames } from "./display-names.js";
|
|
18
18
|
import { isLegacyBuiltinKey, LEGACY_BUILTINS } from "./legacy-keys.js";
|
|
19
|
-
import {
|
|
19
|
+
import { toolKeyIssue } from "./naming.js";
|
|
20
|
+
import { OrgToolSwitches } from "./org-tool-switches.js";
|
|
21
|
+
import { policyFromAnnotations, ToolRegistry } from "./registry.js";
|
|
20
22
|
export { BUILTIN_TOOL_KINDS } from "./builtin-names.js";
|
|
21
23
|
/** At most this many keys per request, each at most {@link TOOL_INFO_KEY_MAX} characters. */
|
|
22
24
|
export const TOOL_INFO_MAX_KEYS = 100;
|
|
@@ -160,3 +162,64 @@ ConversationToolInfo = __decorate([
|
|
|
160
162
|
__param(2, Inject(ConversationAccess))
|
|
161
163
|
], ConversationToolInfo);
|
|
162
164
|
export { ConversationToolInfo };
|
|
165
|
+
/**
|
|
166
|
+
* `GET /orgs/:orgId/tools/extensions`: the tools an agent of this org can reference by
|
|
167
|
+
* `{kind:"plugin"}` and get at run time, grouped by extension: the extensions loaded on this
|
|
168
|
+
* replica and enabled in the org (`enabled.ts`, through the host), each with the tools it
|
|
169
|
+
* registered whose key is valid (`ToolRegistry.forAgent` reports the others unavailable); a tool
|
|
170
|
+
* the org turned off is listed with `switchedOff`.
|
|
171
|
+
*/
|
|
172
|
+
let OrgExtensionTools = class OrgExtensionTools {
|
|
173
|
+
db;
|
|
174
|
+
registry;
|
|
175
|
+
switches;
|
|
176
|
+
constructor(db, registry, switches) {
|
|
177
|
+
this.db = db;
|
|
178
|
+
this.registry = registry;
|
|
179
|
+
this.switches = switches;
|
|
180
|
+
}
|
|
181
|
+
async list(orgId) {
|
|
182
|
+
const [enabled, off] = await Promise.all([
|
|
183
|
+
this.registry.enabledExtensions(orgId),
|
|
184
|
+
this.switches.offKeys(orgId),
|
|
185
|
+
]);
|
|
186
|
+
const groups = new Map();
|
|
187
|
+
for (const t of this.registry.extensionToolSpecs()) {
|
|
188
|
+
if (!enabled.has(t.plugin))
|
|
189
|
+
continue;
|
|
190
|
+
const key = extensionToolKey(t.plugin, t.spec.name);
|
|
191
|
+
if (toolKeyIssue(key) !== null)
|
|
192
|
+
continue;
|
|
193
|
+
const tools = groups.get(t.plugin) ?? [];
|
|
194
|
+
if (tools.some((x) => x.name === t.spec.name))
|
|
195
|
+
continue;
|
|
196
|
+
tools.push({
|
|
197
|
+
name: t.spec.name,
|
|
198
|
+
key,
|
|
199
|
+
title: display(t.spec).title,
|
|
200
|
+
description: firstLine(t.spec.description),
|
|
201
|
+
annotations: { ...(t.spec.annotations ?? {}) },
|
|
202
|
+
defaultPolicy: t.spec.defaultPolicy ?? policyFromAnnotations(t.spec.annotations),
|
|
203
|
+
switchedOff: off.has(key),
|
|
204
|
+
});
|
|
205
|
+
groups.set(t.plugin, tools);
|
|
206
|
+
}
|
|
207
|
+
const names = await pluginDisplayNames(this.db.db, [...groups.keys()]);
|
|
208
|
+
return [...groups].map(([plugin, tools]) => ({
|
|
209
|
+
plugin,
|
|
210
|
+
displayName: names.get(plugin) ?? { zh: plugin, en: plugin },
|
|
211
|
+
tools,
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
OrgExtensionTools = __decorate([
|
|
216
|
+
Injectable(),
|
|
217
|
+
__param(0, Inject(KernelDb)),
|
|
218
|
+
__param(1, Inject(ToolRegistry)),
|
|
219
|
+
__param(2, Inject(OrgToolSwitches))
|
|
220
|
+
], OrgExtensionTools);
|
|
221
|
+
export { OrgExtensionTools };
|
|
222
|
+
const firstLine = (s) => (typeof s === "string" ? s : "")
|
|
223
|
+
.split("\n")
|
|
224
|
+
.map((l) => l.trim())
|
|
225
|
+
.find((l) => l !== "") ?? "";
|
|
@@ -6,7 +6,7 @@ export declare const OAUTH_STATE_TTL_SECONDS = 600;
|
|
|
6
6
|
/** 浏览器绑定 Cookie:回调必须来自发起连接的同一个浏览器。 */
|
|
7
7
|
export declare const OAUTH_BINDING_COOKIE = "cap_oauth";
|
|
8
8
|
/** 回调失败、或连接时没给回跳页面时回到的网页(next-intl 会补语言前缀)。 */
|
|
9
|
-
export declare const DEFAULT_RETURN_PATH = "/
|
|
9
|
+
export declare const DEFAULT_RETURN_PATH = "/account/connections";
|
|
10
10
|
/** OAuth 连接器需要 `http.publicUrl`(回调地址);未配置 → 这条校验错误。 */
|
|
11
11
|
export declare const publicUrlRequired: () => ApiError;
|
|
12
12
|
export declare function callbackUrl(publicUrl: string): string;
|
|
@@ -8,7 +8,7 @@ export const OAUTH_STATE_TTL_SECONDS = 600;
|
|
|
8
8
|
/** 浏览器绑定 Cookie:回调必须来自发起连接的同一个浏览器。 */
|
|
9
9
|
export const OAUTH_BINDING_COOKIE = "cap_oauth";
|
|
10
10
|
/** 回调失败、或连接时没给回跳页面时回到的网页(next-intl 会补语言前缀)。 */
|
|
11
|
-
export const DEFAULT_RETURN_PATH = "/
|
|
11
|
+
export const DEFAULT_RETURN_PATH = "/account/connections";
|
|
12
12
|
/** OAuth 连接器需要 `http.publicUrl`(回调地址);未配置 → 这条校验错误。 */
|
|
13
13
|
export const publicUrlRequired = () => new ApiError("validation_failed", "Request validation failed", [
|
|
14
14
|
{
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
2
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
3
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
4
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
5
|
+
/** One tool of an extension with its switch in the org. */
|
|
6
|
+
export interface OrgToolSwitch {
|
|
7
|
+
tool: string;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** An org agent whose current version selects the tool being switched off. */
|
|
11
|
+
export interface AffectedAgent {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The result of {@link OrgToolSwitches.set}: the PCM §5 rule 8 preview of a switch-off (the org's
|
|
17
|
+
* agents that selected the tool and the hash to confirm it with), or the switch applied.
|
|
18
|
+
*/
|
|
19
|
+
export type OrgToolSwitchResult = {
|
|
20
|
+
applied: false;
|
|
21
|
+
affectedAgents: AffectedAgent[];
|
|
22
|
+
confirm: string;
|
|
23
|
+
} | {
|
|
24
|
+
applied: true;
|
|
25
|
+
};
|
|
26
|
+
/** Model-visible (English): why a turned-off extension tool is not offered. */
|
|
27
|
+
export declare const toolTurnedOffReason: (key: string) => string;
|
|
28
|
+
/**
|
|
29
|
+
* Per-org switches of single extension tools (layering spec A §7, table `org_tool_switches`): an
|
|
30
|
+
* org admin turns off one tool an extension registers (`ctx.tools.register`); it is then not
|
|
31
|
+
* offered to any agent of the org (`ToolRegistry.forAgent`) and refused if called
|
|
32
|
+
* (`ToolPipeline`). No row means on. A row of a tool the extension stops registering is kept and
|
|
33
|
+
* applies again if the tool comes back. Builtin and connector tools are out of scope. Read from PG
|
|
34
|
+
* on every use, no in-process state.
|
|
35
|
+
*/
|
|
36
|
+
export declare class OrgToolSwitches {
|
|
37
|
+
private readonly kdb;
|
|
38
|
+
readonly txHost: TransactionHost;
|
|
39
|
+
private readonly host;
|
|
40
|
+
/** The org row lock: re-checks `org.extensions.manage` under the lock. */
|
|
41
|
+
private readonly orgLock;
|
|
42
|
+
constructor(kdb: KernelDb, txHost: TransactionHost, host: Pick<ExtensionHost, "tools">,
|
|
43
|
+
/** The org row lock: re-checks `org.extensions.manage` under the lock. */
|
|
44
|
+
orgLock: Pick<OrgLock, "lockAndAuthorize">);
|
|
45
|
+
private get db();
|
|
46
|
+
/** The tool names `plugin` registers on this replica, in registration order. */
|
|
47
|
+
private registered;
|
|
48
|
+
/**
|
|
49
|
+
* The tools of an extension the org sees: running here and visible under plugin scope, else 404
|
|
50
|
+
* `extension.not_found` (an invisible one is answered like an unknown one).
|
|
51
|
+
*/
|
|
52
|
+
private toolsFor;
|
|
53
|
+
/** The stored switches of the org (all extensions, or one), `false` ones only matter. */
|
|
54
|
+
private offRows;
|
|
55
|
+
/** Every tool the extension registers on this replica with its switch (default on). */
|
|
56
|
+
list(orgId: string, plugin: string): Promise<OrgToolSwitch[]>;
|
|
57
|
+
/** The model-visible keys (`plugin__<extension>__<tool>`) of the tools turned off in the org. */
|
|
58
|
+
offKeys(orgId: string): Promise<Set<string>>;
|
|
59
|
+
/** Whether the org turned off this tool. */
|
|
60
|
+
isToolOff(orgId: string, plugin: string, tool: string): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* Switches one tool in the org. On applies at once. Off, while the tool is on: without
|
|
63
|
+
* `confirm` the preview (the org's agents whose current version selects the tool) and its hash,
|
|
64
|
+
* with the current hash the switch is written (a changed preview -> 409 `plugin.switch_stale`).
|
|
65
|
+
* A tool the extension does not register -> 404 `extension.tool_not_found`. A change writes the
|
|
66
|
+
* audit row `extension.tool_switched`.
|
|
67
|
+
*/
|
|
68
|
+
set(orgId: string, plugin: string, tool: string, enabled: boolean, actor: {
|
|
69
|
+
accountId: string;
|
|
70
|
+
tokenId?: string | undefined;
|
|
71
|
+
}, confirm?: string): Promise<OrgToolSwitchResult>;
|
|
72
|
+
/** The org's live agents whose current version selects `{kind:"plugin", plugin, name: tool}`. */
|
|
73
|
+
private agentsSelecting;
|
|
74
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
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 { createHash } from "node:crypto";
|
|
11
|
+
import { extensionToolKey } from "@capybara-hq/plugin-sdk";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
13
|
+
import { sql } from "kysely";
|
|
14
|
+
import { ApiError } from "../errors.js";
|
|
15
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
16
|
+
import { extensionVisibleTo } from "../extensions/org-config.js";
|
|
17
|
+
import { audit } from "../identity/audit.js";
|
|
18
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
19
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
20
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
21
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
22
|
+
/** Model-visible (English): why a turned-off extension tool is not offered. */
|
|
23
|
+
export const toolTurnedOffReason = (key) => `Tool ${key} is turned off in this organization`;
|
|
24
|
+
/** The confirm hash of a switch-off preview. */
|
|
25
|
+
function switchOffHash(orgId, plugin, tool, agents) {
|
|
26
|
+
return createHash("sha256")
|
|
27
|
+
.update(JSON.stringify({ orgId, plugin, tool, agents: agents.map((a) => a.id) }))
|
|
28
|
+
.digest("hex");
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Per-org switches of single extension tools (layering spec A §7, table `org_tool_switches`): an
|
|
32
|
+
* org admin turns off one tool an extension registers (`ctx.tools.register`); it is then not
|
|
33
|
+
* offered to any agent of the org (`ToolRegistry.forAgent`) and refused if called
|
|
34
|
+
* (`ToolPipeline`). No row means on. A row of a tool the extension stops registering is kept and
|
|
35
|
+
* applies again if the tool comes back. Builtin and connector tools are out of scope. Read from PG
|
|
36
|
+
* on every use, no in-process state.
|
|
37
|
+
*/
|
|
38
|
+
let OrgToolSwitches = class OrgToolSwitches {
|
|
39
|
+
kdb;
|
|
40
|
+
txHost;
|
|
41
|
+
host;
|
|
42
|
+
orgLock;
|
|
43
|
+
constructor(kdb, txHost, host,
|
|
44
|
+
/** The org row lock: re-checks `org.extensions.manage` under the lock. */
|
|
45
|
+
orgLock) {
|
|
46
|
+
this.kdb = kdb;
|
|
47
|
+
this.txHost = txHost;
|
|
48
|
+
this.host = host;
|
|
49
|
+
this.orgLock = orgLock;
|
|
50
|
+
}
|
|
51
|
+
get db() {
|
|
52
|
+
return this.kdb.db;
|
|
53
|
+
}
|
|
54
|
+
/** The tool names `plugin` registers on this replica, in registration order. */
|
|
55
|
+
registered(plugin) {
|
|
56
|
+
return [
|
|
57
|
+
...new Set(this.host
|
|
58
|
+
.tools()
|
|
59
|
+
.filter((t) => t.plugin === plugin)
|
|
60
|
+
.map((t) => t.spec.name)),
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The tools of an extension the org sees: running here and visible under plugin scope, else 404
|
|
65
|
+
* `extension.not_found` (an invisible one is answered like an unknown one).
|
|
66
|
+
*/
|
|
67
|
+
async toolsFor(orgId, plugin) {
|
|
68
|
+
const tools = this.registered(plugin);
|
|
69
|
+
if (tools.length === 0 || !(await extensionVisibleTo(this.db, orgId, plugin))) {
|
|
70
|
+
throw new ApiError("extension.not_found", `Extension ${plugin} is not installed`);
|
|
71
|
+
}
|
|
72
|
+
return tools;
|
|
73
|
+
}
|
|
74
|
+
/** The stored switches of the org (all extensions, or one), `false` ones only matter. */
|
|
75
|
+
async offRows(orgId, plugin) {
|
|
76
|
+
let q = this.db
|
|
77
|
+
.selectFrom("org_tool_switches")
|
|
78
|
+
.select(["plugin", "tool"])
|
|
79
|
+
.where("org_id", "=", orgId)
|
|
80
|
+
.where("enabled", "=", false);
|
|
81
|
+
if (plugin !== undefined)
|
|
82
|
+
q = q.where("plugin", "=", plugin);
|
|
83
|
+
return q.execute();
|
|
84
|
+
}
|
|
85
|
+
/** Every tool the extension registers on this replica with its switch (default on). */
|
|
86
|
+
async list(orgId, plugin) {
|
|
87
|
+
const tools = await this.toolsFor(orgId, plugin);
|
|
88
|
+
const off = new Set((await this.offRows(orgId, plugin)).map((r) => r.tool));
|
|
89
|
+
return tools.map((tool) => ({ tool, enabled: !off.has(tool) }));
|
|
90
|
+
}
|
|
91
|
+
/** The model-visible keys (`plugin__<extension>__<tool>`) of the tools turned off in the org. */
|
|
92
|
+
async offKeys(orgId) {
|
|
93
|
+
return new Set((await this.offRows(orgId)).map((r) => extensionToolKey(r.plugin, r.tool)));
|
|
94
|
+
}
|
|
95
|
+
/** Whether the org turned off this tool. */
|
|
96
|
+
async isToolOff(orgId, plugin, tool) {
|
|
97
|
+
const row = await this.db
|
|
98
|
+
.selectFrom("org_tool_switches")
|
|
99
|
+
.select("enabled")
|
|
100
|
+
.where("org_id", "=", orgId)
|
|
101
|
+
.where("plugin", "=", plugin)
|
|
102
|
+
.where("tool", "=", tool)
|
|
103
|
+
.executeTakeFirst();
|
|
104
|
+
return row?.enabled === false;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Switches one tool in the org. On applies at once. Off, while the tool is on: without
|
|
108
|
+
* `confirm` the preview (the org's agents whose current version selects the tool) and its hash,
|
|
109
|
+
* with the current hash the switch is written (a changed preview -> 409 `plugin.switch_stale`).
|
|
110
|
+
* A tool the extension does not register -> 404 `extension.tool_not_found`. A change writes the
|
|
111
|
+
* audit row `extension.tool_switched`.
|
|
112
|
+
*/
|
|
113
|
+
async set(orgId, plugin, tool, enabled, actor, confirm) {
|
|
114
|
+
await this.orgLock.lockAndAuthorize(orgId, actor.accountId, "org.extensions.manage");
|
|
115
|
+
const tools = await this.toolsFor(orgId, plugin);
|
|
116
|
+
if (!tools.includes(tool)) {
|
|
117
|
+
throw new ApiError("extension.tool_not_found", `Extension ${plugin} does not register a tool named ${tool}`);
|
|
118
|
+
}
|
|
119
|
+
const from = !(await this.isToolOff(orgId, plugin, tool));
|
|
120
|
+
if (from === enabled)
|
|
121
|
+
return { applied: true };
|
|
122
|
+
if (!enabled) {
|
|
123
|
+
const affectedAgents = await this.agentsSelecting(orgId, plugin, tool);
|
|
124
|
+
const hash = switchOffHash(orgId, plugin, tool, affectedAgents);
|
|
125
|
+
if (confirm === undefined)
|
|
126
|
+
return { applied: false, affectedAgents, confirm: hash };
|
|
127
|
+
if (confirm !== hash) {
|
|
128
|
+
throw new ApiError("plugin.switch_stale", "What switching this tool off affects has changed; review it and confirm again");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
await this.db
|
|
132
|
+
.insertInto("org_tool_switches")
|
|
133
|
+
.values({ org_id: orgId, plugin, tool, enabled, updated_by: actor.accountId })
|
|
134
|
+
.onConflict((oc) => oc.columns(["org_id", "plugin", "tool"]).doUpdateSet({
|
|
135
|
+
enabled,
|
|
136
|
+
updated_by: actor.accountId,
|
|
137
|
+
updated_at: sql `now()`,
|
|
138
|
+
}))
|
|
139
|
+
.execute();
|
|
140
|
+
await audit(this.db, {
|
|
141
|
+
actorAccountId: actor.accountId,
|
|
142
|
+
...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
|
|
143
|
+
orgId,
|
|
144
|
+
action: "extension.tool_switched",
|
|
145
|
+
target: extensionToolKey(plugin, tool),
|
|
146
|
+
detail: { plugin, tool, from, to: enabled },
|
|
147
|
+
});
|
|
148
|
+
return { applied: true };
|
|
149
|
+
}
|
|
150
|
+
/** The org's live agents whose current version selects `{kind:"plugin", plugin, name: tool}`. */
|
|
151
|
+
async agentsSelecting(orgId, plugin, tool) {
|
|
152
|
+
const rows = await this.db
|
|
153
|
+
.selectFrom("agents as a")
|
|
154
|
+
.innerJoin("agent_versions as v", (j) => j.onRef("v.agent_id", "=", "a.id").onRef("v.version", "=", "a.current_version"))
|
|
155
|
+
.select(["a.id", "v.definition"])
|
|
156
|
+
.where("a.org_id", "=", orgId)
|
|
157
|
+
.where("a.deleted_at", "is", null)
|
|
158
|
+
.orderBy("a.id")
|
|
159
|
+
.execute();
|
|
160
|
+
const out = [];
|
|
161
|
+
for (const r of rows) {
|
|
162
|
+
const def = r.definition;
|
|
163
|
+
const refs = Array.isArray(def?.tools) ? def.tools : [];
|
|
164
|
+
const selects = refs.some((x) => {
|
|
165
|
+
const ref = x;
|
|
166
|
+
return ref?.kind === "plugin" && ref.plugin === plugin && ref.name === tool;
|
|
167
|
+
});
|
|
168
|
+
if (selects)
|
|
169
|
+
out.push({ id: r.id, name: typeof def?.name === "string" ? def.name : r.id });
|
|
170
|
+
}
|
|
171
|
+
return out;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
__decorate([
|
|
175
|
+
Transactional()
|
|
176
|
+
], OrgToolSwitches.prototype, "set", null);
|
|
177
|
+
OrgToolSwitches = __decorate([
|
|
178
|
+
Injectable(),
|
|
179
|
+
__param(0, Inject(KernelDb)),
|
|
180
|
+
__param(1, Inject(TransactionHost)),
|
|
181
|
+
__param(2, Inject(ExtensionHost)),
|
|
182
|
+
__param(3, Inject(OrgLock))
|
|
183
|
+
], OrgToolSwitches);
|
|
184
|
+
export { OrgToolSwitches };
|
package/dist/tools/pipeline.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type FormAnswer, type InputForm, type Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import {
|
|
2
|
+
import type { AgentDefinition } from "../agents/definition.js";
|
|
3
3
|
import { EventLog } from "../conversations/event-log.js";
|
|
4
4
|
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
5
|
+
import { EffectiveConfigs } from "../extensions/effective-config.js";
|
|
5
6
|
import { ExtensionHost } from "../extensions/host.js";
|
|
6
7
|
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
7
8
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
@@ -9,16 +10,17 @@ import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
|
9
10
|
import type { OrgRole } from "../orgs/roles.js";
|
|
10
11
|
import { type ConversationKindForHooks, type HookRunner } from "../runtime/hook-calls.js";
|
|
11
12
|
import { type SubagentParent, type WaitingFor } from "../runtime/loop.js";
|
|
12
|
-
import type { DispatchOutcome } from "../runtime/subagents/dispatch.js";
|
|
13
|
+
import type { DispatchArgs, DispatchOutcome } from "../runtime/subagents/dispatch.js";
|
|
14
|
+
import { SubagentMessages } from "../runtime/subagents/messages.js";
|
|
13
15
|
import { SubagentsService } from "../runtime/subagents/subagents.service.js";
|
|
14
16
|
import { ApprovalsService } from "./approvals.service.js";
|
|
15
17
|
import { Breaker } from "./breaker.js";
|
|
16
|
-
import { type AgentToolInputT } from "./builtins/agent.js";
|
|
17
18
|
import { Credentials } from "./credentials.js";
|
|
18
19
|
import { ToolDrift } from "./drift.js";
|
|
20
|
+
import { OrgToolSwitches } from "./org-tool-switches.js";
|
|
19
21
|
import { ToolOutputs } from "./outputs.js";
|
|
20
22
|
import { QuestionsService } from "./questions.service.js";
|
|
21
|
-
import { type ResolvedTool, ToolRegistry } from "./registry.js";
|
|
23
|
+
import { type CallPolicy, type ResolvedTool, ToolRegistry } from "./registry.js";
|
|
22
24
|
/** 审批被拒绝。 */
|
|
23
25
|
export declare const APPROVAL_DENIED_TEXT = "The user denied this tool call.";
|
|
24
26
|
/**
|
|
@@ -85,16 +87,26 @@ export interface PolicyContext {
|
|
|
85
87
|
conversationId: string;
|
|
86
88
|
runId: string;
|
|
87
89
|
/**
|
|
88
|
-
* A sub-agent's call: its parent conversation,
|
|
89
|
-
*
|
|
90
|
+
* A sub-agent's call: its parent conversation, whose agent's current policies apply on top
|
|
91
|
+
* (sub-agents spec §5.5).
|
|
90
92
|
*/
|
|
91
93
|
parentConversationId?: string;
|
|
94
|
+
/**
|
|
95
|
+
* A sub-agent's call: the root conversation of its tree, where "approve for this conversation"
|
|
96
|
+
* grants are stored and looked up (agent map spec §7), so every agent of the tree uses them.
|
|
97
|
+
*/
|
|
98
|
+
rootConversationId?: string;
|
|
92
99
|
/**
|
|
93
100
|
* False when the sub-agent runs its parent conversation's agent (a template or general-purpose
|
|
94
101
|
* child): the parent agent's policies were already read as its own, so no second read. Unset:
|
|
95
102
|
* read and compare.
|
|
96
103
|
*/
|
|
97
104
|
parentAgentDiffers?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* The call's per-call policy ({@link ResolvedTool.callPolicy} of the validated input), or
|
|
107
|
+
* null / unset: policies, grants and approvals use the tool key.
|
|
108
|
+
*/
|
|
109
|
+
callPolicy?: CallPolicy | null;
|
|
98
110
|
}
|
|
99
111
|
/** 管线第 3 阶段:策略判定。 */
|
|
100
112
|
export type DecidePolicy = (tool: ResolvedTool, agentDef: AgentDefinition, ctx: PolicyContext) => Promise<PolicyDecision>;
|
|
@@ -131,6 +143,13 @@ interface PipelineDeps {
|
|
|
131
143
|
* `RecordedToolPipeline`, which never runs hooks. Also needs `conversationKind: "chat"` (P-18).
|
|
132
144
|
*/
|
|
133
145
|
readonly pluginHooks: HookRunner | undefined;
|
|
146
|
+
/**
|
|
147
|
+
* The effective deployment config of an extension for an org (layering spec A §6): a plugin
|
|
148
|
+
* tool's handler gets it as `ToolCallContext.config`, and is not called when it is not valid.
|
|
149
|
+
*/
|
|
150
|
+
readonly effective: Pick<EffectiveConfigs, "get">;
|
|
151
|
+
/** The org's switches of single extension tools: a turned-off one is not called (spec A §7). */
|
|
152
|
+
readonly switches: Pick<OrgToolSwitches, "isToolOff">;
|
|
134
153
|
/**
|
|
135
154
|
* Ids of an extension's `inline` ui contributions (read live, no alias): a plugin tool's
|
|
136
155
|
* `ToolResult.card` must name one of them, otherwise it is dropped with a warning.
|
|
@@ -146,12 +165,13 @@ interface PipelineDeps {
|
|
|
146
165
|
* it, `Agent` calls reach the builtin's guard, which refuses them.
|
|
147
166
|
*/
|
|
148
167
|
readonly subagents: {
|
|
149
|
-
dispatch(a:
|
|
150
|
-
ctx: ToolStepContext;
|
|
151
|
-
callId: string;
|
|
152
|
-
input: AgentToolInputT;
|
|
153
|
-
}): Promise<DispatchOutcome>;
|
|
168
|
+
dispatch(a: DispatchArgs): Promise<DispatchOutcome>;
|
|
154
169
|
} | undefined;
|
|
170
|
+
/**
|
|
171
|
+
* `SendMessage` and `SubagentHandback` (agent map spec §4.2, §4.3; `SubagentMessages`). Without
|
|
172
|
+
* it, their calls reach the builtins' guards, which refuse them.
|
|
173
|
+
*/
|
|
174
|
+
readonly messages: Pick<SubagentMessages, "toChild" | "toParent"> | undefined;
|
|
155
175
|
}
|
|
156
176
|
/** The sub-agent dispatch the pipeline calls (`SubagentsService.dispatch`). */
|
|
157
177
|
export type SubagentDispatch = NonNullable<PipelineDeps["subagents"]>["dispatch"];
|
|
@@ -174,8 +194,8 @@ export interface ToolStepContext {
|
|
|
174
194
|
/** Hooks fire only for `chat` conversations. */
|
|
175
195
|
conversationKind?: ConversationKindForHooks;
|
|
176
196
|
/**
|
|
177
|
-
* Set when the run is a sub-agent's: its builtin tools use the
|
|
178
|
-
* (spec §10.1) and it
|
|
197
|
+
* Set when the run is a sub-agent's: its builtin tools use the root conversation's sandbox
|
|
198
|
+
* (spec §10.1, agent map spec §6), and it dispatches sub-agents only below `subagents.maxDepth`.
|
|
179
199
|
*/
|
|
180
200
|
parent?: SubagentParent;
|
|
181
201
|
}
|
|
@@ -230,9 +250,11 @@ export declare class ToolPipeline {
|
|
|
230
250
|
private readonly deps;
|
|
231
251
|
constructor(kdb: KernelDb, eventLog: EventLog,
|
|
232
252
|
/** The `Agent` tool's sub-agent dispatch; absent (tests): `Agent` calls are refused. */
|
|
233
|
-
subagents: Pick<SubagentsService, "dispatch"> | undefined,
|
|
253
|
+
subagents: Pick<SubagentsService, "dispatch"> | undefined,
|
|
254
|
+
/** The message tools between agents; absent (tests): their calls are refused. */
|
|
255
|
+
messages: Pick<SubagentMessages, "toChild" | "toParent"> | undefined, registry: Pick<ToolRegistry, "forAgent" | "findConnector" | "handler">, credentials: Pick<Credentials, "injection" | "onUnauthorized">, breaker: Pick<Breaker, "check" | "failure" | "success">, outputs: Pick<ToolOutputs, "save" | "load">, approvals: Pick<ApprovalsService, "request" | "forCall">, questions: Pick<QuestionsService, "ask" | "forCall">, config: Pick<KernelConfigService, "get">, log: Logger,
|
|
234
256
|
/** Plugin hooks and inline ui contributions; absent (tests): no hooks, cards dropped. */
|
|
235
|
-
host: Pick<ExtensionHost, "hooks" | "current"> | undefined, drift: Pick<ToolDrift, "onToolsChanged"> | undefined, txHost: TransactionHost, hooks?: ToolPipelineHooks);
|
|
257
|
+
host: Pick<ExtensionHost, "hooks" | "current"> | undefined, drift: Pick<ToolDrift, "onToolsChanged"> | undefined, effective: Pick<EffectiveConfigs, "get">, switches: Pick<OrgToolSwitches, "isToolOff">, txHost: TransactionHost, hooks?: ToolPipelineHooks);
|
|
236
258
|
/**
|
|
237
259
|
* tools 节点:按顺序处理本步 assistant 消息里的全部 `tool_call`,每个调用都以一条 `tool_result` 结束
|
|
238
260
|
* (之后才回到 prepare 构建下一次请求,保持「已记录调用、未记录结果之间不构建请求」的不变式)。
|
|
@@ -242,32 +264,14 @@ export declare class ToolPipeline {
|
|
|
242
264
|
*/
|
|
243
265
|
runStep(ctx: ToolStepContext): Promise<ToolStepOutcome>;
|
|
244
266
|
/**
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
* dispatch time is not recorded, so nothing is guessed) and fires `tool.postExecute` with the
|
|
252
|
-
* result, from the replica that writes it (spec §11).
|
|
253
|
-
*/
|
|
254
|
-
private finishAgentCall;
|
|
255
|
-
/** {@link stopOpenAgentCalls} in a transaction of its own (a stop seen by the tools node). */
|
|
256
|
-
private stopOpenAgentCallsNow;
|
|
257
|
-
/**
|
|
258
|
-
* Writes, in the caller's transaction (`mandatory`), the `tool_result` of every open `Agent` call
|
|
259
|
-
* of a run that is being stopped
|
|
260
|
-
* (sub-agents spec §12: a person stopped it while it waited on sub-agents, or its deadline or a
|
|
261
|
-
* stop hit its tools node after a dispatch). A call whose child already ended gets the child's
|
|
262
|
-
* result (and the missing `subagent_finished`); one whose child is still active gets
|
|
263
|
-
* {@link AGENT_STOPPED_WITH_RUN_TEXT}. The caller stops those children after its commit.
|
|
264
|
-
*
|
|
265
|
-
* Like every `Agent` result (see {@link finishAgentCall}), each is audited `tool.called` in it
|
|
266
|
-
* (duration: the child's, or the time since the dispatch) and fires `tool.postExecute`, through
|
|
267
|
-
* `fire()`, which the caller runs after its commit. Returns the steps and calls written (the
|
|
268
|
-
* caller must not write a "not executed" result for them) and the highest seq written.
|
|
267
|
+
* Writes, in the caller's transaction (`mandatory`), what a run that is being stopped (a person,
|
|
268
|
+
* its deadline, a failure, the wait sweep) still owes its log: the report of its fork invocation
|
|
269
|
+
* (phase D, `pairStoppedForks`; a still active fork child is stopped by the caller after its
|
|
270
|
+
* commit). An `Agent` call has its result from its dispatch (agent map spec §4.1), so there is
|
|
271
|
+
* nothing to write for it. Returns the fork's call id (the caller must not write a "not executed"
|
|
272
|
+
* result for it), the highest seq written, and `fire`, a no-op kept for the callers' hook phase.
|
|
269
273
|
*/
|
|
270
|
-
stopOpenAgentCalls(runId: string
|
|
274
|
+
stopOpenAgentCalls(runId: string): Promise<{
|
|
271
275
|
steps: number[];
|
|
272
276
|
callIds: Set<string>;
|
|
273
277
|
toSeq: number | null;
|
|
@@ -280,6 +284,8 @@ export declare class ToolPipeline {
|
|
|
280
284
|
*/
|
|
281
285
|
private processCall;
|
|
282
286
|
private runCall;
|
|
287
|
+
/** Appends a sub-agent's connect card to its root conversation ({@link rootSurfaceOf}). */
|
|
288
|
+
private surfaceConnectInRoot;
|
|
283
289
|
/**
|
|
284
290
|
* Every tool key the request that issued this step's calls offered (`request.tools` plus the
|
|
285
291
|
* `catalog` keys), in any mode; null when its model_call is not found. Used to tell a call to an
|