@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
package/dist/tools/policy.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export declare function isFixedAsk(tool: ResolvedTool, visibility?: "private" |
|
|
|
34
34
|
* - a sub-agent (template or general-purpose): `agentDef` is its frozen effective definition (the
|
|
35
35
|
* parent's policies with the template's on top) and `ctx.agentId` is the parent's agent, so the
|
|
36
36
|
* parent's current version still tightens it (sub-agents spec §5.3, §9); its "this conversation"
|
|
37
|
-
* grants are the
|
|
37
|
+
* grants are the root conversation's (agent map spec §7); an org agent sub-agent (§5.5): `ctx.agentId` is the
|
|
38
38
|
* dispatched agent (its current version, its "always" grants) and the parent agent's current
|
|
39
39
|
* policies apply on top ({@link parentAgentOverride});
|
|
40
40
|
* - 授权表(`conversation_tool_grants` / `tool_grants`),`spec_hash` 与当前定义不一致视为无效(D8),
|
package/dist/tools/policy.js
CHANGED
|
@@ -36,6 +36,17 @@ export function isFixedAsk(tool, visibility, skillWritePolicy) {
|
|
|
36
36
|
return !(builtinOnly && visibility === "private" && skillWritePolicy !== "ask");
|
|
37
37
|
}
|
|
38
38
|
const asOverride = (v) => v === "ask" || v === "deny" ? v : undefined;
|
|
39
|
+
/**
|
|
40
|
+
* An agent's tightening for a call: its policy on the tool key and, for a per-call key
|
|
41
|
+
* (`Platform:<operation>`), on that key, the stricter of the two (a policy can only tighten).
|
|
42
|
+
*/
|
|
43
|
+
function overrideOf(policies, toolKey, policyKey) {
|
|
44
|
+
const own = asOverride(policies?.[toolKey]);
|
|
45
|
+
if (policyKey === toolKey)
|
|
46
|
+
return own;
|
|
47
|
+
const s = stricter(own ?? "allow", asOverride(policies?.[policyKey]));
|
|
48
|
+
return s === "allow" ? undefined : s;
|
|
49
|
+
}
|
|
39
50
|
/**
|
|
40
51
|
* 执行时的策略判定(spec 3.6 R5:在动作执行那一刻判定)。每次调用都实时读取:
|
|
41
52
|
* - 沙箱工具(bash / write / edit / deliver)的组织设置 `sandboxToolPolicy`(为 ask 时组织默认至少 ask);
|
|
@@ -45,7 +56,7 @@ const asOverride = (v) => v === "ask" || v === "deny" ? v : undefined;
|
|
|
45
56
|
* - a sub-agent (template or general-purpose): `agentDef` is its frozen effective definition (the
|
|
46
57
|
* parent's policies with the template's on top) and `ctx.agentId` is the parent's agent, so the
|
|
47
58
|
* parent's current version still tightens it (sub-agents spec §5.3, §9); its "this conversation"
|
|
48
|
-
* grants are the
|
|
59
|
+
* grants are the root conversation's (agent map spec §7); an org agent sub-agent (§5.5): `ctx.agentId` is the
|
|
49
60
|
* dispatched agent (its current version, its "always" grants) and the parent agent's current
|
|
50
61
|
* policies apply on top ({@link parentAgentOverride});
|
|
51
62
|
* - 授权表(`conversation_tool_grants` / `tool_grants`),`spec_hash` 与当前定义不一致视为无效(D8),
|
|
@@ -57,7 +68,11 @@ const asOverride = (v) => v === "ask" || v === "deny" ? v : undefined;
|
|
|
57
68
|
*/
|
|
58
69
|
export function createDecidePolicy(db) {
|
|
59
70
|
return async (tool, agentDef, ctx) => {
|
|
60
|
-
|
|
71
|
+
// a per-call policy (Platform tool spec §6.2): its key replaces the tool key for policies,
|
|
72
|
+
// grants and approvals, and its policy replaces the tool's default
|
|
73
|
+
const call = ctx.callPolicy ?? null;
|
|
74
|
+
const policyKey = call?.key ?? tool.key;
|
|
75
|
+
let connectorDefault = call?.policy ?? tool.defaultPolicy;
|
|
61
76
|
let connectorId = null;
|
|
62
77
|
let hashCurrent = true;
|
|
63
78
|
if (tool.source.kind === "connector") {
|
|
@@ -101,7 +116,7 @@ export function createDecidePolicy(db) {
|
|
|
101
116
|
}
|
|
102
117
|
}
|
|
103
118
|
// 运行所用版本可能是加 toolPolicies 字段之前保存的:缺省为空
|
|
104
|
-
const runOverride =
|
|
119
|
+
const runOverride = overrideOf(agentDef.toolPolicies, tool.key, policyKey);
|
|
105
120
|
const current = await db
|
|
106
121
|
.selectFrom("agents")
|
|
107
122
|
.innerJoin("agent_versions", (j) => j
|
|
@@ -115,10 +130,10 @@ export function createDecidePolicy(db) {
|
|
|
115
130
|
? undefined
|
|
116
131
|
: await normalizeStoredDefinitionIn(db, ctx.orgId, current.definition);
|
|
117
132
|
const currentPolicies = currentDef?.toolPolicies;
|
|
118
|
-
const currentOverride =
|
|
133
|
+
const currentOverride = overrideOf(currentPolicies, tool.key, policyKey);
|
|
119
134
|
let strictest = stricter(runOverride ?? "allow", currentOverride);
|
|
120
135
|
if (ctx.parentConversationId !== undefined && ctx.parentAgentDiffers !== false) {
|
|
121
|
-
strictest = stricter(strictest, await parentAgentOverride(db, tool.key, ctx));
|
|
136
|
+
strictest = stricter(strictest, await parentAgentOverride(db, tool.key, policyKey, ctx));
|
|
122
137
|
}
|
|
123
138
|
const agentOverride = strictest === "allow" ? undefined : strictest;
|
|
124
139
|
let escalateTo = null;
|
|
@@ -137,7 +152,10 @@ export function createDecidePolicy(db) {
|
|
|
137
152
|
// 可见性实时读(R5):共享 agent 的 SkillWrite 固定 ask,私有 agent 不问(见 R3_SHARED_AGENT_ONLY_TOOL_KEYS)
|
|
138
153
|
// 当前版本的 skills.writePolicy 同样实时读(R5):运行中改为 ask,下一次调用即生效;固定 ask 时授权不放行
|
|
139
154
|
const writePolicy = currentDef?.skills?.writePolicy;
|
|
140
|
-
|
|
155
|
+
// `remember: false` on a call that is not a plain allow (an org / platform operation, or a read
|
|
156
|
+
// an agent tightened to ask): every call asks, grants never apply. A read (`allow`) never asks.
|
|
157
|
+
const fixedAsk = isFixedAsk(tool, current?.visibility, writePolicy) ||
|
|
158
|
+
(call !== null && !call.remember && (call.policy !== "allow" || agentOverride !== undefined));
|
|
141
159
|
const input = {
|
|
142
160
|
connectorDefault,
|
|
143
161
|
...(agentOverride !== undefined && { agentOverride }),
|
|
@@ -148,7 +166,7 @@ export function createDecidePolicy(db) {
|
|
|
148
166
|
if (pre === "deny")
|
|
149
167
|
return "deny";
|
|
150
168
|
if (pre === "ask" && !fixedAsk && escalateTo === null && hashCurrent) {
|
|
151
|
-
input.grant = await findGrant(db, tool, connectorId, ctx);
|
|
169
|
+
input.grant = await findGrant(db, tool, policyKey, connectorId, ctx);
|
|
152
170
|
}
|
|
153
171
|
const result = decide(input);
|
|
154
172
|
if (result === "allow" && escalateTo === null) {
|
|
@@ -156,7 +174,7 @@ export function createDecidePolicy(db) {
|
|
|
156
174
|
return pre === "ask" && input.grant !== null ? { grant: input.grant } : "allow";
|
|
157
175
|
}
|
|
158
176
|
const ask = {
|
|
159
|
-
toolKey:
|
|
177
|
+
toolKey: policyKey,
|
|
160
178
|
specHash: tool.specHash,
|
|
161
179
|
connectorId,
|
|
162
180
|
requestedFor: escalateTo === null ? ctx.accountId : null,
|
|
@@ -185,7 +203,7 @@ export function createDecidePolicy(db) {
|
|
|
185
203
|
* policy for the same key applies on top, so the parent's owner can tighten a running child too.
|
|
186
204
|
* For a template or general-purpose child the parent conversation has the same agent, already read.
|
|
187
205
|
*/
|
|
188
|
-
async function parentAgentOverride(db, toolKey, ctx) {
|
|
206
|
+
async function parentAgentOverride(db, toolKey, policyKey, ctx) {
|
|
189
207
|
const row = await db
|
|
190
208
|
.selectFrom("conversations as c")
|
|
191
209
|
.innerJoin("agents as a", "a.id", "c.agent_id")
|
|
@@ -198,21 +216,23 @@ async function parentAgentOverride(db, toolKey, ctx) {
|
|
|
198
216
|
// stored raw: an rc version's keys read as current keys, so its deny keeps applying (§8.3)
|
|
199
217
|
const policies = (await normalizeStoredDefinitionIn(db, ctx.orgId, row.definition))
|
|
200
218
|
.toolPolicies;
|
|
201
|
-
return
|
|
219
|
+
return overrideOf(policies, toolKey, policyKey);
|
|
202
220
|
}
|
|
203
221
|
/**
|
|
204
|
-
* A grant matching the current definition hash and source connector
|
|
222
|
+
* A grant matching the current definition hash and source connector, keyed by the call's policy key
|
|
223
|
+
* (the tool key, or a per-call key such as `Platform:<operation>`): this conversation's first,
|
|
205
224
|
* then "always". `connectorId` is the tool's source connector (null for plugin and builtin tools,
|
|
206
225
|
* which match only grants without a connector). A sub-agent's "this conversation" grants live on
|
|
207
|
-
*
|
|
226
|
+
* the root conversation of its tree (agent map spec §7), so the root and every sub-agent at any
|
|
227
|
+
* depth are approved once.
|
|
208
228
|
*/
|
|
209
|
-
async function findGrant(db, tool, connectorId, ctx) {
|
|
229
|
+
async function findGrant(db, tool, policyKey, connectorId, ctx) {
|
|
210
230
|
const sameConnector = sql `connector_id IS NOT DISTINCT FROM ${connectorId}`;
|
|
211
231
|
const session = await db
|
|
212
232
|
.selectFrom("conversation_tool_grants")
|
|
213
233
|
.select("spec_hash")
|
|
214
|
-
.where("conversation_id", "=", ctx.
|
|
215
|
-
.where("tool_key", "=",
|
|
234
|
+
.where("conversation_id", "=", ctx.rootConversationId ?? ctx.conversationId)
|
|
235
|
+
.where("tool_key", "=", policyKey)
|
|
216
236
|
.where(sameConnector)
|
|
217
237
|
.executeTakeFirst();
|
|
218
238
|
if (session?.spec_hash === tool.specHash)
|
|
@@ -223,7 +243,7 @@ async function findGrant(db, tool, connectorId, ctx) {
|
|
|
223
243
|
.where("org_id", "=", ctx.orgId)
|
|
224
244
|
.where("account_id", "=", ctx.accountId)
|
|
225
245
|
.where("agent_id", "=", ctx.agentId)
|
|
226
|
-
.where("tool_key", "=",
|
|
246
|
+
.where("tool_key", "=", policyKey)
|
|
227
247
|
.where(sameConnector)
|
|
228
248
|
.executeTakeFirst();
|
|
229
249
|
return always?.spec_hash === tool.specHash ? "always" : null;
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import type { Connector, InputRequired, ToolAnnotations, ToolCallContext, ToolResult, ToolSpec } from "@capybara-hq/plugin-sdk";
|
|
1
|
+
import type { Connector, HookParentScope, InputRequired, ToolAnnotations, ToolCallContext, ToolResult, ToolSpec } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import type { AgentDefinition } from "../agents/definition.js";
|
|
3
3
|
import type { ToolView } from "../conversations/events.js";
|
|
4
|
+
import { EffectiveConfigs } from "../extensions/effective-config.js";
|
|
4
5
|
import { ExtensionHost } from "../extensions/host.js";
|
|
5
6
|
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
6
7
|
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
7
8
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
8
9
|
import type { OrgRole } from "../orgs/roles.js";
|
|
10
|
+
import type { ConversationKindForHooks } from "../runtime/hook-calls.js";
|
|
9
11
|
import { BuiltinTools } from "./builtins/builtin-tools.js";
|
|
12
|
+
import { OrgToolSwitches } from "./org-tool-switches.js";
|
|
10
13
|
export { BUILTIN_TOOL_NAMES } from "./builtin-names.js";
|
|
11
14
|
export { canonicalJson } from "./canonical-json.js";
|
|
12
15
|
/** 保存 agent 时引用校验的问题(`path` 为 `tools.<i>`)。 */
|
|
@@ -28,10 +31,28 @@ export interface BuiltinCallContext extends ToolCallContext {
|
|
|
28
31
|
*/
|
|
29
32
|
runDeadline?: number;
|
|
30
33
|
/**
|
|
31
|
-
* The conversation whose sandbox this call uses (sub-agents spec §10.1): the
|
|
32
|
-
* for a sub-agent's call, the conversation itself otherwise (the
|
|
34
|
+
* The conversation whose sandbox this call uses (sub-agents spec §10.1, agent map spec §6): the
|
|
35
|
+
* root conversation for a sub-agent's call at any depth, the conversation itself otherwise (the
|
|
36
|
+
* default when absent).
|
|
33
37
|
*/
|
|
34
38
|
sandboxConversationId?: string;
|
|
39
|
+
/** The parent run of a sub-agent's run (absent for a top-level run). */
|
|
40
|
+
parentRunId?: string;
|
|
41
|
+
/**
|
|
42
|
+
* A sub-agent's run: the tree's budget window of this run (`SubagentParent.budgetRunId`), which
|
|
43
|
+
* a builtin's own model call (the `WebFetch` extraction) counts its tokens on.
|
|
44
|
+
*/
|
|
45
|
+
budgetRunId?: string;
|
|
46
|
+
/**
|
|
47
|
+
* The rest of the run's hook scope, for a builtin that makes a model call of its own (the
|
|
48
|
+
* `WebFetch` extraction fires `model.request` / `model.response`): the step of the call, the
|
|
49
|
+
* agent version of the run, the conversation kind (hooks fire for `chat` and `subagent` only)
|
|
50
|
+
* and, for a sub-agent, where it was dispatched from.
|
|
51
|
+
*/
|
|
52
|
+
step?: number;
|
|
53
|
+
agentVersion?: number;
|
|
54
|
+
conversationKind?: ConversationKindForHooks;
|
|
55
|
+
parent?: HookParentScope;
|
|
35
56
|
}
|
|
36
57
|
/**
|
|
37
58
|
* 内置工具的结果:`ToolResult` 之外可带 `loadedTools`(`ToolSearch` 加载的工具 key,
|
|
@@ -58,8 +79,58 @@ export interface BuiltinTool {
|
|
|
58
79
|
timeoutMs?: (input: unknown) => number;
|
|
59
80
|
/** 结果转存阈值(字符):与 `tools.outputSpillChars` 取小者。缺省只用配置。 */
|
|
60
81
|
spillChars?: number;
|
|
61
|
-
/**
|
|
62
|
-
|
|
82
|
+
/**
|
|
83
|
+
* The factual reason this tool is unavailable for the org right now (English, actionable; it goes
|
|
84
|
+
* into the "tool unavailable" reminder), or null when it is available. May be async (e.g. a
|
|
85
|
+
* per-org extension-point default).
|
|
86
|
+
*/
|
|
87
|
+
unavailable?: (ctx: {
|
|
88
|
+
orgId: string;
|
|
89
|
+
}) => Promise<string | null> | string | null;
|
|
90
|
+
/**
|
|
91
|
+
* A policy key derived from the validated input (Platform tool spec §6.2), or null to use the
|
|
92
|
+
* tool key. With a key, agent and parent policies, grants and approvals are keyed by it (an
|
|
93
|
+
* agent's policy on the tool key still applies on top); the model-visible key stays the tool key.
|
|
94
|
+
* May be async (the `Platform` tool reads the actor's facts); it never throws for bad input:
|
|
95
|
+
* an input that cannot run is a `deny` with a `denyReason`.
|
|
96
|
+
*/
|
|
97
|
+
callPolicy?: CallPolicyFn;
|
|
98
|
+
}
|
|
99
|
+
/** Where a call happens, for {@link BuiltinTool.callPolicy}: the runtime's context, never input. */
|
|
100
|
+
export interface CallPolicyContext {
|
|
101
|
+
orgId: string;
|
|
102
|
+
/** The run's trigger account. */
|
|
103
|
+
accountId: string;
|
|
104
|
+
agentId: string;
|
|
105
|
+
conversationId: string;
|
|
106
|
+
/** Null outside a run (a builtin called directly). */
|
|
107
|
+
runId: string | null;
|
|
108
|
+
/**
|
|
109
|
+
* The call's input as the model sent it, before `{"$output": id}` references were resolved
|
|
110
|
+
* (the approval card shows this form). Absent outside the pipeline.
|
|
111
|
+
*/
|
|
112
|
+
rawInput?: unknown;
|
|
113
|
+
}
|
|
114
|
+
/** {@link BuiltinTool.callPolicy}. */
|
|
115
|
+
export type CallPolicyFn = (input: unknown, ctx: CallPolicyContext) => CallPolicy | null | Promise<CallPolicy | null>;
|
|
116
|
+
/** What {@link BuiltinTool.callPolicy} returns for one call. */
|
|
117
|
+
export interface CallPolicy {
|
|
118
|
+
/** The policy key, e.g. `Platform:skills.create`. */
|
|
119
|
+
key: string;
|
|
120
|
+
/** The default for this call (it replaces the tool's `defaultPolicy`). */
|
|
121
|
+
policy: ToolPolicy;
|
|
122
|
+
/**
|
|
123
|
+
* False: always confirm, only "once": the approval offers only "once" and remembered grants
|
|
124
|
+
* never apply.
|
|
125
|
+
*/
|
|
126
|
+
remember: boolean;
|
|
127
|
+
/** The bilingual summary shown on the approval (rendered by the kernel, never by the model). */
|
|
128
|
+
summary?: {
|
|
129
|
+
zh: string;
|
|
130
|
+
en: string;
|
|
131
|
+
};
|
|
132
|
+
/** With `policy: "deny"`: the actionable English reason returned as the tool error. */
|
|
133
|
+
denyReason?: string;
|
|
63
134
|
}
|
|
64
135
|
/**
|
|
65
136
|
* agent 定义里对工具的引用(Task 6 在 `AgentDefinitionSchema` 中落地同形的 zod schema)。
|
|
@@ -110,6 +181,8 @@ export interface ResolvedTool {
|
|
|
110
181
|
* (推给持有该角色的人)。M3 的内置与连接器工具都不设。
|
|
111
182
|
*/
|
|
112
183
|
requiredRole?: OrgRole;
|
|
184
|
+
/** A builtin's per-call policy key (see {@link BuiltinTool.callPolicy}). */
|
|
185
|
+
callPolicy?: CallPolicyFn;
|
|
113
186
|
}
|
|
114
187
|
/** 不可用的引用:`ref` 尽量写成模型认识的工具 key(`mcp__docs__search`、`mcp__docs__*`),否则 `app:<id>`。 */
|
|
115
188
|
export interface UnavailableTool {
|
|
@@ -155,9 +228,11 @@ export interface AgentTools {
|
|
|
155
228
|
*
|
|
156
229
|
* Availability:
|
|
157
230
|
* - builtin: in `builtins`;
|
|
158
|
-
* - extension tools: the extension is loaded and registered the tool,
|
|
231
|
+
* - extension tools: the extension is loaded and registered the tool, this org enabled the
|
|
159
232
|
* extension (`extension_org_configs.enabled`, spec 2.2 "installed at deployment level, enabled at
|
|
160
|
-
* org level"; required bootstrap plugins are enabled in every org, `enabled.ts`)
|
|
233
|
+
* org level"; required bootstrap plugins are enabled in every org, `enabled.ts`), and the
|
|
234
|
+
* extension's effective config for the org is valid (layering spec A §6) and the org did not
|
|
235
|
+
* turn the tool off (§7);
|
|
161
236
|
* - connector tools: the connector belongs to this org, is not deleted or disabled, the connector is
|
|
162
237
|
* installed, the tool status is `enabled` and the key is valid.
|
|
163
238
|
* `tools: "all"` takes only enabled tools; disabled / pending-review ones count as deliberately
|
|
@@ -172,6 +247,13 @@ export declare class ToolRegistry {
|
|
|
172
247
|
/** The installed connectors (`connector@1`, from the extension registry). */
|
|
173
248
|
private readonly extensions;
|
|
174
249
|
private readonly builtinTools;
|
|
250
|
+
/**
|
|
251
|
+
* The extensions' effective config per org (layering spec A §6): an extension tool is
|
|
252
|
+
* unavailable in an org whose effective config is not valid.
|
|
253
|
+
*/
|
|
254
|
+
private readonly effective;
|
|
255
|
+
/** The org's switches of single extension tools (layering spec A §7). */
|
|
256
|
+
private readonly switches;
|
|
175
257
|
/**
|
|
176
258
|
* `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `ToolSearch` is never
|
|
177
259
|
* offered and the sub-agent limits are the schema defaults.
|
|
@@ -182,6 +264,13 @@ export declare class ToolRegistry {
|
|
|
182
264
|
host: Pick<ExtensionHost, "tools" | "enabledPlugins">,
|
|
183
265
|
/** The installed connectors (`connector@1`, from the extension registry). */
|
|
184
266
|
extensions: Pick<ExtensionRegistry, "list">, builtinTools: Pick<BuiltinTools, "list">,
|
|
267
|
+
/**
|
|
268
|
+
* The extensions' effective config per org (layering spec A §6): an extension tool is
|
|
269
|
+
* unavailable in an org whose effective config is not valid.
|
|
270
|
+
*/
|
|
271
|
+
effective: Pick<EffectiveConfigs, "get">,
|
|
272
|
+
/** The org's switches of single extension tools (layering spec A §7). */
|
|
273
|
+
switches: Pick<OrgToolSwitches, "offKeys">,
|
|
185
274
|
/**
|
|
186
275
|
* `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `ToolSearch` is never
|
|
187
276
|
* offered and the sub-agent limits are the schema defaults.
|
|
@@ -210,6 +299,17 @@ export declare class ToolRegistry {
|
|
|
210
299
|
}[];
|
|
211
300
|
/** 已安装连接器的 kind 列表(去重,按加载顺序)。 */
|
|
212
301
|
connectorKinds(): string[];
|
|
302
|
+
/**
|
|
303
|
+
* The connector kinds `orgId` can create connectors of: the `connector@1` implementations loaded
|
|
304
|
+
* on this replica whose extension is enabled in the org (the first implementation of a kind, as
|
|
305
|
+
* {@link findConnector} picks it), sorted by kind.
|
|
306
|
+
*/
|
|
307
|
+
connectorKindsFor(orgId: string): Promise<{
|
|
308
|
+
kind: string;
|
|
309
|
+
plugin: string;
|
|
310
|
+
}[]>;
|
|
311
|
+
/** True when `kind` is one of {@link connectorKindsFor}: loaded here and enabled in the org. */
|
|
312
|
+
connectorKindAvailable(orgId: string, kind: string): Promise<boolean>;
|
|
213
313
|
/**
|
|
214
314
|
* 保存 agent 时校验工具引用(只看「存在」,停用 / 待复核 / 插件未启用等运行时状态不拒绝,由 `forAgent` 报不可用):
|
|
215
315
|
* - 内置:名字在 {@link BUILTIN_TOOL_NAMES} 中;
|
|
@@ -234,17 +334,29 @@ export declare class ToolRegistry {
|
|
|
234
334
|
skillLoad?: boolean;
|
|
235
335
|
/** The definition's sub-agent roster source: the `Agent` tool's description lists it. */
|
|
236
336
|
subagents?: AgentDefinition["subagents"];
|
|
337
|
+
/**
|
|
338
|
+
* The run is a sub-agent's (it has a parent): it gets `SendMessage` (to reach its parent)
|
|
339
|
+
* and `SubagentHandback` whatever its definition names (agent map spec §4.2, §4.3).
|
|
340
|
+
*/
|
|
341
|
+
child?: boolean;
|
|
342
|
+
/**
|
|
343
|
+
* The run is a fork invocation's child (phase D): its final reply is the skill's report, so
|
|
344
|
+
* it reaches its parent with neither tool (`SendMessage` only to its own sub-agents).
|
|
345
|
+
*/
|
|
346
|
+
forkChild?: boolean;
|
|
237
347
|
}): Promise<AgentTools>;
|
|
238
348
|
/** 是否启用 `ToolSearch`(见 {@link forAgent});先比阈值,超过才读组织设置。 */
|
|
239
349
|
private searchActive;
|
|
240
350
|
private resolve;
|
|
241
351
|
/**
|
|
242
|
-
* `subagents.
|
|
352
|
+
* `subagents.maxConcurrentPerConversation` with the organization's override, for the `Agent` tool's
|
|
243
353
|
* description (§4.3). A change of the limit changes the tool's spec hash; replays read the
|
|
244
354
|
* definition logged by hash, so no drift reason is involved. Without config (some tests): the
|
|
245
355
|
* schema default.
|
|
246
356
|
*/
|
|
247
357
|
private maxConcurrentSubagents;
|
|
358
|
+
/** The extensions enabled in the org (`extensions/enabled.ts`, through the host). */
|
|
359
|
+
enabledExtensions(orgId: string): Promise<Set<string>>;
|
|
248
360
|
/** Plugins the organization enabled (built-in plugins always count as enabled, C14). */
|
|
249
361
|
private enabledPlugins;
|
|
250
362
|
private loadConnectors;
|
package/dist/tools/registry.js
CHANGED
|
@@ -10,6 +10,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
10
10
|
import { createHash } from "node:crypto";
|
|
11
11
|
import { connectorToolKey, extensionToolKey } from "@capybara-hq/plugin-sdk";
|
|
12
12
|
import { Inject, Injectable } from "@nestjs/common";
|
|
13
|
+
import { EffectiveConfigs, NEEDS_CONFIG_REASON } from "../extensions/effective-config.js";
|
|
13
14
|
import { ExtensionHost } from "../extensions/host.js";
|
|
14
15
|
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
15
16
|
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
@@ -18,12 +19,13 @@ import { readOrgSettings } from "../orgs/settings.service.js";
|
|
|
18
19
|
import { estimateTokens } from "../runtime/context/tokens.js";
|
|
19
20
|
import { SUBAGENT_LIMIT_DEFAULTS, subagentLimits } from "../runtime/subagents/limits.js";
|
|
20
21
|
import { resolveRoster } from "../runtime/subagents/roster.js";
|
|
21
|
-
import { AGENT_TOOL, BUILTIN_TOOL_NAMES, SKILL_LOAD, TOOL_SEARCH } from "./builtin-names.js";
|
|
22
|
+
import { AGENT_TOOL, BASH_COMPANION_TOOLS, BUILTIN, BUILTIN_TOOL_NAMES, SEND_MESSAGE, SKILL_LOAD, SUBAGENT_HANDBACK, SUBAGENT_MESSAGE_TOOLS, TOOL_SEARCH, } from "./builtin-names.js";
|
|
22
23
|
import { agentToolSpec } from "./builtins/agent.js";
|
|
23
24
|
import { BuiltinTools } from "./builtins/builtin-tools.js";
|
|
24
25
|
import { canonicalJson } from "./canonical-json.js";
|
|
25
26
|
import { legacyKeySaveText } from "./legacy-keys.js";
|
|
26
27
|
import { toolKeyIssue } from "./naming.js";
|
|
28
|
+
import { OrgToolSwitches, toolTurnedOffReason } from "./org-tool-switches.js";
|
|
27
29
|
export { BUILTIN_TOOL_NAMES } from "./builtin-names.js";
|
|
28
30
|
export { canonicalJson } from "./canonical-json.js";
|
|
29
31
|
/** The first 16 hex digits of sha256(canonicalJson(v)): a fingerprint independent of key order. */
|
|
@@ -71,6 +73,17 @@ const sourceId = (s) => s.kind === "builtin"
|
|
|
71
73
|
: s.kind === "plugin"
|
|
72
74
|
? `plugin:${s.plugin}:${s.name}`
|
|
73
75
|
: `connector:${s.connectorId}:${s.name}`;
|
|
76
|
+
/** A builtin as a resolved tool (with `spec`, which `Agent` builds per definition). */
|
|
77
|
+
const builtinTool = (b, spec) => ({
|
|
78
|
+
key: b.spec.name,
|
|
79
|
+
source: { kind: "builtin", name: b.spec.name },
|
|
80
|
+
spec,
|
|
81
|
+
specHash: specHash(spec),
|
|
82
|
+
defaultPolicy: b.defaultPolicy,
|
|
83
|
+
...(b.timeoutMs !== undefined && { timeoutMs: b.timeoutMs }),
|
|
84
|
+
...(b.spillChars !== undefined && { spillChars: b.spillChars }),
|
|
85
|
+
...(b.callPolicy !== undefined && { callPolicy: b.callPolicy }),
|
|
86
|
+
});
|
|
74
87
|
/**
|
|
75
88
|
* Tool registry: resolves the references in an agent definition into the tools available for this
|
|
76
89
|
* run. Not cached (reads PG and the host live every time), so changes take effect right away across
|
|
@@ -78,9 +91,11 @@ const sourceId = (s) => s.kind === "builtin"
|
|
|
78
91
|
*
|
|
79
92
|
* Availability:
|
|
80
93
|
* - builtin: in `builtins`;
|
|
81
|
-
* - extension tools: the extension is loaded and registered the tool,
|
|
94
|
+
* - extension tools: the extension is loaded and registered the tool, this org enabled the
|
|
82
95
|
* extension (`extension_org_configs.enabled`, spec 2.2 "installed at deployment level, enabled at
|
|
83
|
-
* org level"; required bootstrap plugins are enabled in every org, `enabled.ts`)
|
|
96
|
+
* org level"; required bootstrap plugins are enabled in every org, `enabled.ts`), and the
|
|
97
|
+
* extension's effective config for the org is valid (layering spec A §6) and the org did not
|
|
98
|
+
* turn the tool off (§7);
|
|
84
99
|
* - connector tools: the connector belongs to this org, is not deleted or disabled, the connector is
|
|
85
100
|
* installed, the tool status is `enabled` and the key is valid.
|
|
86
101
|
* `tools: "all"` takes only enabled tools; disabled / pending-review ones count as deliberately
|
|
@@ -93,12 +108,21 @@ let ToolRegistry = class ToolRegistry {
|
|
|
93
108
|
host;
|
|
94
109
|
extensions;
|
|
95
110
|
builtinTools;
|
|
111
|
+
effective;
|
|
112
|
+
switches;
|
|
96
113
|
config;
|
|
97
114
|
constructor(db,
|
|
98
115
|
/** Extension tools and the organization's enabled extensions. */
|
|
99
116
|
host,
|
|
100
117
|
/** The installed connectors (`connector@1`, from the extension registry). */
|
|
101
118
|
extensions, builtinTools,
|
|
119
|
+
/**
|
|
120
|
+
* The extensions' effective config per org (layering spec A §6): an extension tool is
|
|
121
|
+
* unavailable in an org whose effective config is not valid.
|
|
122
|
+
*/
|
|
123
|
+
effective,
|
|
124
|
+
/** The org's switches of single extension tools (layering spec A §7). */
|
|
125
|
+
switches,
|
|
102
126
|
/**
|
|
103
127
|
* `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `ToolSearch` is never
|
|
104
128
|
* offered and the sub-agent limits are the schema defaults.
|
|
@@ -108,6 +132,8 @@ let ToolRegistry = class ToolRegistry {
|
|
|
108
132
|
this.host = host;
|
|
109
133
|
this.extensions = extensions;
|
|
110
134
|
this.builtinTools = builtinTools;
|
|
135
|
+
this.effective = effective;
|
|
136
|
+
this.switches = switches;
|
|
111
137
|
this.config = config;
|
|
112
138
|
}
|
|
113
139
|
/** The kernel's builtin tools (`ToolSearch` is added by {@link forAgent}, not by definitions). */
|
|
@@ -163,6 +189,29 @@ let ToolRegistry = class ToolRegistry {
|
|
|
163
189
|
connectorKinds() {
|
|
164
190
|
return [...new Set(this.extensions.list("connector").map((e) => e.impl.kind))];
|
|
165
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* The connector kinds `orgId` can create connectors of: the `connector@1` implementations loaded
|
|
194
|
+
* on this replica whose extension is enabled in the org (the first implementation of a kind, as
|
|
195
|
+
* {@link findConnector} picks it), sorted by kind.
|
|
196
|
+
*/
|
|
197
|
+
async connectorKindsFor(orgId) {
|
|
198
|
+
const enabled = await this.enabledPlugins(orgId);
|
|
199
|
+
const out = new Map();
|
|
200
|
+
for (const e of this.extensions.list("connector")) {
|
|
201
|
+
const kind = e.impl?.kind;
|
|
202
|
+
if (typeof kind !== "string" || out.has(kind))
|
|
203
|
+
continue;
|
|
204
|
+
out.set(kind, e.plugin);
|
|
205
|
+
}
|
|
206
|
+
return [...out]
|
|
207
|
+
.filter(([, plugin]) => enabled.has(plugin))
|
|
208
|
+
.map(([kind, plugin]) => ({ kind, plugin }))
|
|
209
|
+
.sort((a, b) => a.kind.localeCompare(b.kind));
|
|
210
|
+
}
|
|
211
|
+
/** True when `kind` is one of {@link connectorKindsFor}: loaded here and enabled in the org. */
|
|
212
|
+
async connectorKindAvailable(orgId, kind) {
|
|
213
|
+
return (await this.connectorKindsFor(orgId)).some((k) => k.kind === kind);
|
|
214
|
+
}
|
|
166
215
|
/**
|
|
167
216
|
* 保存 agent 时校验工具引用(只看「存在」,停用 / 待复核 / 插件未启用等运行时状态不拒绝,由 `forAgent` 报不可用):
|
|
168
217
|
* - 内置:名字在 {@link BUILTIN_TOOL_NAMES} 中;
|
|
@@ -201,6 +250,11 @@ let ToolRegistry = class ToolRegistry {
|
|
|
201
250
|
return;
|
|
202
251
|
}
|
|
203
252
|
claim(path, ref.name, `builtin:${ref.name}`);
|
|
253
|
+
// offered with Bash (see resolve), so their policies validate too
|
|
254
|
+
if (ref.name === BUILTIN.Bash) {
|
|
255
|
+
for (const c of BASH_COMPANION_TOOLS)
|
|
256
|
+
claim(path, c, `builtin:${c}`);
|
|
257
|
+
}
|
|
204
258
|
}
|
|
205
259
|
else if (ref.kind === "plugin") {
|
|
206
260
|
const key = extensionToolKey(ref.plugin, ref.name);
|
|
@@ -245,6 +299,18 @@ let ToolRegistry = class ToolRegistry {
|
|
|
245
299
|
*/
|
|
246
300
|
async forAgent(orgId, def) {
|
|
247
301
|
const { tools, unavailable, hidden } = await this.resolve(orgId, def);
|
|
302
|
+
// `SendMessage` to an agent that has `Agent` (to reach its sub-agents) or a parent;
|
|
303
|
+
// `SubagentHandback` to a sub-agent only; a fork invocation's child reports by its reply
|
|
304
|
+
const toParent = def.child === true && def.forkChild !== true;
|
|
305
|
+
const messageTools = [
|
|
306
|
+
...(toParent || tools.some((t) => t.key === AGENT_TOOL) ? [SEND_MESSAGE] : []),
|
|
307
|
+
...(toParent ? [SUBAGENT_HANDBACK] : []),
|
|
308
|
+
];
|
|
309
|
+
for (const name of messageTools) {
|
|
310
|
+
const b = this.builtins.find((x) => x.spec.name === name);
|
|
311
|
+
if (b)
|
|
312
|
+
tools.push(builtinTool(b, b.spec));
|
|
313
|
+
}
|
|
248
314
|
const sl = def.skillLoad === true && this.builtins.find((x) => x.spec.name === SKILL_LOAD);
|
|
249
315
|
if (sl) {
|
|
250
316
|
tools.push({
|
|
@@ -299,24 +365,36 @@ let ToolRegistry = class ToolRegistry {
|
|
|
299
365
|
});
|
|
300
366
|
}
|
|
301
367
|
};
|
|
302
|
-
const enabledPlugins = def.tools.some((r) => r.kind === "plugin")
|
|
303
|
-
? await this.enabledPlugins(orgId)
|
|
304
|
-
: new Set();
|
|
368
|
+
const [enabledPlugins, offKeys] = def.tools.some((r) => r.kind === "plugin")
|
|
369
|
+
? await Promise.all([this.enabledPlugins(orgId), this.switches.offKeys(orgId)])
|
|
370
|
+
: [new Set(), new Set()];
|
|
305
371
|
const connectorIds = [
|
|
306
372
|
...new Set(def.tools.flatMap((r) => (r.kind === "connector" ? [r.connectorId] : []))),
|
|
307
373
|
];
|
|
308
374
|
const apps = await this.loadConnectors(orgId, connectorIds);
|
|
309
375
|
const pluginTools = this.host.tools();
|
|
376
|
+
// one effective config read per extension and resolution, however many of its tools are named
|
|
377
|
+
const configured = new Map();
|
|
378
|
+
const configuredIn = (plugin) => {
|
|
379
|
+
let ok = configured.get(plugin);
|
|
380
|
+
if (!ok) {
|
|
381
|
+
ok = this.effective.get(orgId, plugin).then((e) => e.ok);
|
|
382
|
+
configured.set(plugin, ok);
|
|
383
|
+
}
|
|
384
|
+
return ok;
|
|
385
|
+
};
|
|
310
386
|
for (const ref of def.tools) {
|
|
311
387
|
if (ref.kind === "builtin") {
|
|
312
388
|
if (ref.name === TOOL_SEARCH || ref.name === SKILL_LOAD)
|
|
313
389
|
continue;
|
|
390
|
+
if (SUBAGENT_MESSAGE_TOOLS.has(ref.name))
|
|
391
|
+
continue;
|
|
314
392
|
const b = this.builtins.find((x) => x.spec.name === ref.name);
|
|
315
393
|
if (!b) {
|
|
316
394
|
unavailable.push({ ref: ref.name, reason: "Built-in tool does not exist" });
|
|
317
395
|
continue;
|
|
318
396
|
}
|
|
319
|
-
const why = b.unavailable?.() ?? null;
|
|
397
|
+
const why = (await b.unavailable?.({ orgId })) ?? null;
|
|
320
398
|
if (why !== null) {
|
|
321
399
|
unavailable.push({ ref: ref.name, reason: why });
|
|
322
400
|
continue;
|
|
@@ -330,15 +408,15 @@ let ToolRegistry = class ToolRegistry {
|
|
|
330
408
|
continue;
|
|
331
409
|
spec = agentToolSpec(roster, await this.maxConcurrentSubagents(orgId));
|
|
332
410
|
}
|
|
333
|
-
add(
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
}
|
|
411
|
+
add(builtinTool(b, spec));
|
|
412
|
+
// `TaskOutput` and `TaskStop` come with an available `Bash` (background Bash spec §2)
|
|
413
|
+
if (b.spec.name === BUILTIN.Bash) {
|
|
414
|
+
for (const name of BASH_COMPANION_TOOLS) {
|
|
415
|
+
const c = this.builtins.find((x) => x.spec.name === name);
|
|
416
|
+
if (c && ((await c.unavailable?.({ orgId })) ?? null) === null)
|
|
417
|
+
add(builtinTool(c, c.spec));
|
|
418
|
+
}
|
|
419
|
+
}
|
|
342
420
|
}
|
|
343
421
|
else if (ref.kind === "plugin") {
|
|
344
422
|
const key = extensionToolKey(ref.plugin, ref.name);
|
|
@@ -354,6 +432,15 @@ let ToolRegistry = class ToolRegistry {
|
|
|
354
432
|
});
|
|
355
433
|
continue;
|
|
356
434
|
}
|
|
435
|
+
// the pipeline refuses such calls too (a resumed step), this keeps them from the model
|
|
436
|
+
if (offKeys.has(key)) {
|
|
437
|
+
unavailable.push({ ref: key, reason: toolTurnedOffReason(key) });
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
if (!(await configuredIn(ref.plugin))) {
|
|
441
|
+
unavailable.push({ ref: key, reason: `Plugin ${ref.plugin} ${NEEDS_CONFIG_REASON}` });
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
357
444
|
const issue = toolKeyIssue(key);
|
|
358
445
|
if (issue) {
|
|
359
446
|
unavailable.push({ ref: key, reason: issue });
|
|
@@ -432,7 +519,7 @@ let ToolRegistry = class ToolRegistry {
|
|
|
432
519
|
return { tools, unavailable, hidden };
|
|
433
520
|
}
|
|
434
521
|
/**
|
|
435
|
-
* `subagents.
|
|
522
|
+
* `subagents.maxConcurrentPerConversation` with the organization's override, for the `Agent` tool's
|
|
436
523
|
* description (§4.3). A change of the limit changes the tool's spec hash; replays read the
|
|
437
524
|
* definition logged by hash, so no drift reason is involved. Without config (some tests): the
|
|
438
525
|
* schema default.
|
|
@@ -440,7 +527,11 @@ let ToolRegistry = class ToolRegistry {
|
|
|
440
527
|
async maxConcurrentSubagents(orgId) {
|
|
441
528
|
const cfg = this.config;
|
|
442
529
|
const config = cfg ?? { get: () => ({ subagents: SUBAGENT_LIMIT_DEFAULTS }) };
|
|
443
|
-
return (await subagentLimits(this.db.db, config, orgId)).
|
|
530
|
+
return (await subagentLimits(this.db.db, config, orgId)).maxConcurrentPerConversation;
|
|
531
|
+
}
|
|
532
|
+
/** The extensions enabled in the org (`extensions/enabled.ts`, through the host). */
|
|
533
|
+
async enabledExtensions(orgId) {
|
|
534
|
+
return this.host.enabledPlugins(orgId);
|
|
444
535
|
}
|
|
445
536
|
/** Plugins the organization enabled (built-in plugins always count as enabled, C14). */
|
|
446
537
|
async enabledPlugins(orgId) {
|
|
@@ -504,6 +595,8 @@ ToolRegistry = __decorate([
|
|
|
504
595
|
__param(1, Inject(ExtensionHost)),
|
|
505
596
|
__param(2, Inject(ExtensionRegistry)),
|
|
506
597
|
__param(3, Inject(BuiltinTools)),
|
|
507
|
-
__param(4, Inject(
|
|
598
|
+
__param(4, Inject(EffectiveConfigs)),
|
|
599
|
+
__param(5, Inject(OrgToolSwitches)),
|
|
600
|
+
__param(6, Inject(KernelConfigService))
|
|
508
601
|
], ToolRegistry);
|
|
509
602
|
export { ToolRegistry };
|