@capybara-hq/kernel 0.1.0-rc.4 → 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 +39 -13
- package/dist/admin/admin.controller.js +33 -17
- package/dist/admin/extensions.controller.d.ts +16 -2
- package/dist/admin/extensions.controller.js +26 -6
- 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 +16 -0
- package/dist/agents/agent-lookup.js +11 -0
- package/dist/agents/agents.controller.d.ts +76 -1
- package/dist/agents/agents.controller.js +90 -11
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +32 -6
- package/dist/agents/agents.service.d.ts +51 -22
- package/dist/agents/agents.service.js +172 -70
- package/dist/agents/definition.d.ts +49 -0
- package/dist/agents/definition.js +45 -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/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/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 +475 -52
- package/dist/background/background.module.js +8 -1
- package/dist/background/finish.d.ts +3 -2
- package/dist/background/launch-lock.d.ts +4 -3
- package/dist/background/launch-lock.js +4 -3
- package/dist/background/poll.job.d.ts +9 -6
- package/dist/background/poll.job.js +30 -22
- package/dist/background/session.d.ts +13 -2
- package/dist/background/session.js +13 -0
- package/dist/background/stop.d.ts +12 -6
- package/dist/background/stop.js +57 -39
- package/dist/background/store.d.ts +18 -6
- package/dist/background/store.js +12 -6
- package/dist/background/tasks.service.d.ts +15 -5
- package/dist/background/tasks.service.js +42 -17
- package/dist/background/wake-rules.d.ts +27 -18
- package/dist/background/wake-rules.js +52 -22
- package/dist/background/wake.d.ts +13 -11
- package/dist/background/wake.js +20 -14
- 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/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 +622 -82
- 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 +1147 -1136
- 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 +20 -2
- package/dist/channels/channels.module.js +2 -0
- 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/config/docs.js +3 -1
- package/dist/config/schema.d.ts +6 -2
- package/dist/config/schema.js +46 -22
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +27 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/conversations.controller.d.ts +43 -18
- package/dist/conversations/conversations.controller.js +79 -38
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +7 -7
- package/dist/conversations/conversations.service.d.ts +69 -12
- package/dist/conversations/conversations.service.js +106 -27
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +20 -5
- package/dist/conversations/event-log.js +60 -0
- package/dist/conversations/events.d.ts +84 -2
- package/dist/conversations/events.js +91 -17
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +5 -0
- package/dist/conversations/titles.d.ts +5 -3
- package/dist/conversations/titles.js +21 -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 +362 -18
- 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 +82 -2
- package/dist/errors.js +82 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +4 -2
- package/dist/evals/run-replay.js +16 -4
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.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 +65 -42
- package/dist/extensions/admin-view.d.ts +37 -10
- package/dist/extensions/admin-view.js +103 -20
- 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/deployment-config.d.ts +28 -5
- package/dist/extensions/deployment-config.js +48 -7
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +8 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +19 -1
- package/dist/extensions/host.js +30 -7
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +75 -6
- package/dist/extensions/org-config.js +184 -32
- 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/permission-view.d.ts +16 -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.d.ts +12 -5
- package/dist/extensions/point-defaults.js +37 -9
- 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 +23 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- 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.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.js +1 -1
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- 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 +1 -1
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +21 -1
- 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 +11 -2
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- 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/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 +20 -9
- package/dist/models/purposes.js +17 -8
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +9 -7
- package/dist/orgs/offboarding.js +28 -17
- 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 +15 -3
- package/dist/orgs/settings.service.js +6 -2
- 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 +9 -1
- package/dist/runtime/context/build.d.ts +6 -4
- package/dist/runtime/context/build.js +26 -7
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +5 -4
- package/dist/runtime/context/compaction.js +9 -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 +35 -17
- package/dist/runtime/loop.d.ts +32 -4
- package/dist/runtime/maintenance.d.ts +7 -4
- package/dist/runtime/maintenance.js +23 -8
- package/dist/runtime/model-call.d.ts +30 -8
- package/dist/runtime/model-call.js +69 -19
- 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 +37 -3
- package/dist/runtime/run-queue.js +188 -11
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +54 -31
- package/dist/runtime/runtime.module.js +3 -0
- package/dist/runtime/step-log.d.ts +9 -4
- package/dist/runtime/step-log.js +8 -5
- 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 +43 -29
- 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.js +17 -12
- package/dist/runtime/waits.d.ts +140 -37
- package/dist/runtime/waits.js +394 -106
- 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 +4 -3
- package/dist/sandbox/sandbox.service.d.ts +229 -134
- package/dist/sandbox/sandbox.service.js +630 -409
- 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 +23 -4
- package/dist/tools/builtin-names.d.ts +21 -5
- package/dist/tools/builtin-names.js +30 -5
- 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 +6 -2
- package/dist/tools/builtins/builtin-tools.js +37 -12
- 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.js +13 -3
- package/dist/tools/builtins/sandbox/common.d.ts +43 -24
- package/dist/tools/builtins/sandbox/common.js +80 -45
- 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 +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
- package/dist/tools/builtins/sandbox/task-output.js +30 -5
- package/dist/tools/builtins/sandbox/task-stop.js +2 -1
- 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/extract.js +5 -1
- package/dist/tools/builtins/web/fetch.js +1 -0
- package/dist/tools/builtins/web/search.js +1 -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/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 +187 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +98 -5
- package/dist/tools/registry.js +87 -9
- package/dist/tools/tools.module.js +12 -2
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- 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 -32
- package/dist/extensions/org-config.controller.js +0 -70
|
@@ -16,12 +16,10 @@ import { audit } from "../identity/audit.js";
|
|
|
16
16
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
17
17
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
18
18
|
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
19
|
-
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
20
19
|
import { rejectAnonymousGuest } from "../orgs/members.service.js";
|
|
21
20
|
import { OrgLock } from "../orgs/org-lock.js";
|
|
22
|
-
import { roleAtLeast } from "../orgs/roles.js";
|
|
21
|
+
import { can, roleAtLeast } from "../orgs/roles.js";
|
|
23
22
|
import { ProviderRegistry } from "../runtime/providers.js";
|
|
24
|
-
import { SandboxJobs } from "../sandbox/jobs.js";
|
|
25
23
|
import { SkillChangesService } from "../skills/changes.service.js";
|
|
26
24
|
import { assertOrgSkills, assertPinnedSkills } from "../skills/skills.service.js";
|
|
27
25
|
import { legacyKeySaveText } from "../tools/legacy-keys.js";
|
|
@@ -29,11 +27,11 @@ import { ToolRegistry } from "../tools/registry.js";
|
|
|
29
27
|
import { AgentLookup, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
|
|
30
28
|
import { normalizeStoredDefinition, paramIssues, SUBAGENT_NAME_RE, SUBAGENT_ROSTER_MAX, } from "./definition.js";
|
|
31
29
|
import { deriveInstructions } from "./instruction-files.js";
|
|
30
|
+
import { PendingConnectorRequests } from "./pending-connector-requests.js";
|
|
32
31
|
import { randomPreset } from "./profile.js";
|
|
32
|
+
import { loadTemplates, templateTypeOf } from "./templates.js";
|
|
33
33
|
export { AGENT_VISIBILITIES, isAgentVisibleTo, visibleTo, } from "./agent-lookup.js";
|
|
34
34
|
export { paramIssues, SUBAGENT_ROSTER_MAX } from "./definition.js";
|
|
35
|
-
/** 删除 agent 时每个销毁任务带的对话数。 */
|
|
36
|
-
const SANDBOX_DESTROY_BATCH = 500;
|
|
37
35
|
/** A new agent has no id to bind an upload to yet: a client can only choose a preset on create. */
|
|
38
36
|
export function assertProfileWritable(profile) {
|
|
39
37
|
if (profile?.avatar?.kind === "upload") {
|
|
@@ -41,6 +39,16 @@ export function assertProfileWritable(profile) {
|
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
const notFound = () => new ApiError("agent.not_found", "Agent not found");
|
|
42
|
+
/** A per-operation policy key of the `Platform` tool (Platform tool spec §6.2). */
|
|
43
|
+
const PLATFORM_POLICY_KEY = /^Platform:[a-z][a-z-]*\.[a-z][a-z-]*$/;
|
|
44
|
+
/**
|
|
45
|
+
* May `toolPolicies` hold this key: one of the agent's tool keys, or `Platform:<operation>` when
|
|
46
|
+
* `Platform` is among them (an unknown operation id is kept: a removed operation's policy is
|
|
47
|
+
* harmless).
|
|
48
|
+
*/
|
|
49
|
+
function isToolPolicyKey(key, toolKeys) {
|
|
50
|
+
return toolKeys.has(key) || (toolKeys.has("Platform") && PLATFORM_POLICY_KEY.test(key));
|
|
51
|
+
}
|
|
44
52
|
/** 键排序后的 JSON:jsonb 不保留键顺序,比较定义是否变化时用。 */
|
|
45
53
|
function canonical(v) {
|
|
46
54
|
if (Array.isArray(v))
|
|
@@ -53,12 +61,39 @@ function canonical(v) {
|
|
|
53
61
|
}
|
|
54
62
|
return JSON.stringify(v);
|
|
55
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* The pending connectors of a saved definition (ruling P4-6): absent from the request = the current
|
|
66
|
+
* version's (an editor that does not know them never drops them); given = a subset of the current
|
|
67
|
+
* ones, unchanged (only creating from a template adds them, only binding resolves them); `[]`
|
|
68
|
+
* removes them all. Another entry → 400 `validation_failed` at `pendingConnectors.<i>`.
|
|
69
|
+
*/
|
|
70
|
+
export function keepPendingConnectors(definition, given, current) {
|
|
71
|
+
const { pendingConnectors: _given, ...rest } = definition;
|
|
72
|
+
const next = given ?? current ?? [];
|
|
73
|
+
if (given !== undefined) {
|
|
74
|
+
const known = new Map((current ?? []).map((c) => [c.key, canonical(c)]));
|
|
75
|
+
const details = given.flatMap((c, i) => known.get(c.key) === canonical(c)
|
|
76
|
+
? []
|
|
77
|
+
: [
|
|
78
|
+
{
|
|
79
|
+
path: `pendingConnectors.${i}`,
|
|
80
|
+
message: "pending connectors come only from a template; keep or remove them",
|
|
81
|
+
},
|
|
82
|
+
]);
|
|
83
|
+
if (details.length > 0) {
|
|
84
|
+
throw new ApiError("validation_failed", "Invalid pending connectors", details);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return next.length > 0 ? { ...rest, pendingConnectors: [...next] } : rest;
|
|
88
|
+
}
|
|
56
89
|
/**
|
|
57
90
|
* Checks `subagents` of an agent definition in the caller's transaction (spec §5.2); throws 400
|
|
58
91
|
* `agent.subagents_invalid` with one detail per problem (`{ reason, path, value? }`):
|
|
59
|
-
* - `not_found`: a template id that is not a
|
|
92
|
+
* - `not_found`: a template id that is not a usable agent template of the org (its own, a linked
|
|
93
|
+
* copy, or a platform template on in the org);
|
|
60
94
|
* - `invalid_name`: an inline name or `agents[].as` outside {@link SUBAGENT_NAME_RE}, or
|
|
61
|
-
* `general-purpose`; `duplicate`: a roster type listed twice (a template id twice included
|
|
95
|
+
* `general-purpose`; `duplicate`: a roster type listed twice (a template id twice included, a
|
|
96
|
+
* bare template type equal to an inline name, a template typed `general-purpose`);
|
|
62
97
|
* - `tool_not_selected`: an inline template's `tools`, `disallowedTools` or `toolPolicies` key that
|
|
63
98
|
* is not a tool key of this agent (`toolKeys`, from `ToolRegistry.checkRefs`);
|
|
64
99
|
* - `skill_not_selected`: an inline skill id that is neither in `skills.orgSkills` nor a live
|
|
@@ -100,24 +135,44 @@ export async function assertSubagents(t, a) {
|
|
|
100
135
|
const templates = sub.templates ?? [];
|
|
101
136
|
const keptTemplates = new Set(a.kept?.templates ?? []);
|
|
102
137
|
const ids = [...new Set(templates)];
|
|
103
|
-
//
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
138
|
+
// usable templates (the org's, linked copies, platform templates on in the org) by id
|
|
139
|
+
const usable = await loadTemplates(t, a.orgId, ids);
|
|
140
|
+
// kept ids that are no longer usable: their type from the stored row, deleted or off included
|
|
141
|
+
const gone = ids.filter((id) => !usable.has(id) && keptTemplates.has(id));
|
|
142
|
+
const goneTypes = new Map();
|
|
143
|
+
if (gone.length > 0) {
|
|
144
|
+
const [orgRows, platformRows] = await Promise.all([
|
|
145
|
+
t
|
|
146
|
+
.selectFrom("agent_templates")
|
|
147
|
+
.select(["id", "name", "plugin_name"])
|
|
148
|
+
.where("org_id", "=", a.orgId)
|
|
149
|
+
.where("id", "in", gone)
|
|
150
|
+
.execute(),
|
|
151
|
+
t
|
|
152
|
+
.selectFrom("platform_agent_templates")
|
|
153
|
+
.select(["id", "name", "plugin_name"])
|
|
154
|
+
.where("id", "in", gone)
|
|
155
|
+
.execute(),
|
|
156
|
+
]);
|
|
157
|
+
for (const r of [...platformRows, ...orgRows]) {
|
|
158
|
+
goneTypes.set(r.id, templateTypeOf(r.plugin_name, r.name));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
112
161
|
templates.forEach((id, i) => {
|
|
113
162
|
const path = `subagents.templates.${i}`;
|
|
114
|
-
const row =
|
|
115
|
-
if (!keptTemplates.has(id) &&
|
|
163
|
+
const row = usable.get(id);
|
|
164
|
+
if (!keptTemplates.has(id) && row === undefined) {
|
|
116
165
|
add("not_found", path, id);
|
|
117
166
|
return;
|
|
118
167
|
}
|
|
119
|
-
// claimed by its roster type (`<plugin>:<name>`,
|
|
120
|
-
|
|
168
|
+
// claimed by its roster type (`<plugin>:<name>`, or a bare `<name>` without a plugin;
|
|
169
|
+
// roster.ts templateType), so nothing shadows it; `general-purpose` is reserved
|
|
170
|
+
const type = row === undefined
|
|
171
|
+
? (goneTypes.get(id) ?? `template:${id}`)
|
|
172
|
+
: templateTypeOf(row.plugin, row.name);
|
|
173
|
+
if (type === "general-purpose" && sub.general === false)
|
|
174
|
+
add("duplicate", path, type);
|
|
175
|
+
claim(type, path);
|
|
121
176
|
});
|
|
122
177
|
const inline = sub.inline ?? [];
|
|
123
178
|
const selected = new Set(a.definition.skills?.orgSkills ?? []);
|
|
@@ -148,8 +203,10 @@ export async function assertSubagents(t, a) {
|
|
|
148
203
|
for (const [j, key] of (x.disallowedTools ?? []).entries()) {
|
|
149
204
|
tool(key, `${base}.disallowedTools.${j}`);
|
|
150
205
|
}
|
|
151
|
-
for (const key of Object.keys(x.toolPolicies ?? {}))
|
|
152
|
-
|
|
206
|
+
for (const key of Object.keys(x.toolPolicies ?? {})) {
|
|
207
|
+
if (!isToolPolicyKey(key, a.toolKeys))
|
|
208
|
+
tool(key, `${base}.toolPolicies.${key}`);
|
|
209
|
+
}
|
|
153
210
|
(x.skills ?? []).forEach((id, j) => {
|
|
154
211
|
if (!selected.has(id) && !own.has(id))
|
|
155
212
|
add("skill_not_selected", `${base}.skills.${j}`, id);
|
|
@@ -200,34 +257,29 @@ let AgentsService = class AgentsService {
|
|
|
200
257
|
skillChanges;
|
|
201
258
|
orgLock;
|
|
202
259
|
providers;
|
|
203
|
-
sandboxJobs;
|
|
204
|
-
log;
|
|
205
260
|
txHost;
|
|
206
261
|
evalBudget;
|
|
262
|
+
setupRequests;
|
|
207
263
|
constructor(db, lookup, tools,
|
|
208
264
|
/** 删除 agent 时取消它待处理的技能改动(T15)。 */
|
|
209
265
|
skillChanges,
|
|
210
266
|
/** The org row lock (orgs/org-lock.ts): joins the caller's transaction. */
|
|
211
267
|
orgLock,
|
|
212
268
|
/** Resolves the agent's models (and their parameter declarations) when it is saved. */
|
|
213
|
-
providers,
|
|
214
|
-
/**
|
|
215
|
-
* The sandbox destruction after a delete (内核投递一次性维护任务 `sandbox-destroy-for`,worker
|
|
216
|
-
* 在锁内逐个销毁,幂等).
|
|
217
|
-
*/
|
|
218
|
-
sandboxJobs, log, txHost,
|
|
269
|
+
providers, txHost,
|
|
219
270
|
/** Cancels the deleted agent's running eval runs (in the delete's transaction). */
|
|
220
|
-
evalBudget
|
|
271
|
+
evalBudget,
|
|
272
|
+
/** Settles the agent's connector setup request when its pending connectors change (P4-7). */
|
|
273
|
+
setupRequests) {
|
|
221
274
|
this.db = db;
|
|
222
275
|
this.lookup = lookup;
|
|
223
276
|
this.tools = tools;
|
|
224
277
|
this.skillChanges = skillChanges;
|
|
225
278
|
this.orgLock = orgLock;
|
|
226
279
|
this.providers = providers;
|
|
227
|
-
this.sandboxJobs = sandboxJobs;
|
|
228
|
-
this.log = log;
|
|
229
280
|
this.txHost = txHost;
|
|
230
281
|
this.evalBudget = evalBudget;
|
|
282
|
+
this.setupRequests = setupRequests;
|
|
231
283
|
}
|
|
232
284
|
/**
|
|
233
285
|
* 校验工具引用与工具策略:引用的内置 / 插件 / 连接器工具必须存在(见 `ToolRegistry.checkRefs`);
|
|
@@ -238,7 +290,7 @@ let AgentsService = class AgentsService {
|
|
|
238
290
|
const { keys, issues } = await this.tools.checkRefs(orgId, def.tools);
|
|
239
291
|
const details = [...issues];
|
|
240
292
|
for (const key of Object.keys(def.toolPolicies)) {
|
|
241
|
-
if (!
|
|
293
|
+
if (!isToolPolicyKey(key, keys)) {
|
|
242
294
|
// an rc key (tool naming spec §8.3): saving writes current keys only, so name them
|
|
243
295
|
const renamed = legacyKeySaveText(key, keys);
|
|
244
296
|
details.push({
|
|
@@ -300,7 +352,21 @@ let AgentsService = class AgentsService {
|
|
|
300
352
|
* 新建 agent(版本 1):在组织行锁内授权 `agents.create`;主模型与兜底都必须可解析
|
|
301
353
|
* (`agent.model_unavailable`);兜底与主模型同一供应商只提示 `fallback_same_provider`。
|
|
302
354
|
*/
|
|
303
|
-
async create(orgId, actorAccountId, request, actorTokenId) {
|
|
355
|
+
async create(orgId, actorAccountId, request, actorTokenId, auditDetail) {
|
|
356
|
+
const { agent, warnings } = await this.createChecked(orgId, actorAccountId, request, null, actorTokenId, auditDetail);
|
|
357
|
+
return { agent, warnings };
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Creates an agent from a planned template definition (rulings P4-3, P4-8): {@link create}'s
|
|
361
|
+
* checks, plus, under the org row lock, 403 `agent.visibility_forbidden` when the visibility is
|
|
362
|
+
* not `private` and the creator lacks `agents.manage`; the provenance columns are written once.
|
|
363
|
+
* Returns the creator's role read under the lock (the caller decides on the pending connector
|
|
364
|
+
* request after the commit).
|
|
365
|
+
*/
|
|
366
|
+
createFromTemplate(orgId, actorAccountId, request, template, actorTokenId, auditDetail) {
|
|
367
|
+
return this.createChecked(orgId, actorAccountId, request, template, actorTokenId, auditDetail);
|
|
368
|
+
}
|
|
369
|
+
async createChecked(orgId, actorAccountId, request, template, actorTokenId, auditDetail) {
|
|
304
370
|
const input = { ...request, definition: deriveInstructions(request.definition, null) };
|
|
305
371
|
// 先解析模型(可能访问供应商),不在持有组织行锁时做
|
|
306
372
|
const warnings = await this.checkModels(input.definition);
|
|
@@ -309,12 +375,16 @@ let AgentsService = class AgentsService {
|
|
|
309
375
|
throw new ApiError("validation_failed", "memberIds requires visibility 'members'");
|
|
310
376
|
}
|
|
311
377
|
assertProfileWritable(input.profile);
|
|
312
|
-
const agent = await this.createIn(orgId, actorAccountId, input, toolKeys, actorTokenId);
|
|
313
|
-
return { agent, warnings };
|
|
378
|
+
const { agent, role } = await this.createIn(orgId, actorAccountId, input, toolKeys, template, actorTokenId, auditDetail);
|
|
379
|
+
return { agent, warnings, role };
|
|
314
380
|
}
|
|
315
|
-
async createIn(orgId, actorAccountId, input, toolKeys, actorTokenId) {
|
|
381
|
+
async createIn(orgId, actorAccountId, input, toolKeys, template, actorTokenId, auditDetail) {
|
|
316
382
|
const t = this.db.db;
|
|
317
|
-
await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
|
|
383
|
+
const { role } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "agents.create");
|
|
384
|
+
// ruling P4-3: a member creates a template agent for themself; sharing it is an admin's call
|
|
385
|
+
if (template !== null && input.visibility !== "private" && !can(role, "agents.manage")) {
|
|
386
|
+
throw new ApiError("agent.visibility_forbidden", "Only an organization admin can create an agent from a template for others; create it private");
|
|
387
|
+
}
|
|
318
388
|
await assertOrgSkills(t, orgId, input.definition.skills?.orgSkills ?? []);
|
|
319
389
|
await assertPinnedSkills(t, orgId, null, input.definition.skills);
|
|
320
390
|
await assertSubagents(t, {
|
|
@@ -339,6 +409,11 @@ let AgentsService = class AgentsService {
|
|
|
339
409
|
profile_avatar: JSON.stringify(input.profile?.avatar ?? { kind: "preset", id: randomPreset() }),
|
|
340
410
|
profile_description: input.profile?.description ?? "",
|
|
341
411
|
profile_quick_actions: JSON.stringify(input.profile?.quickActions ?? []),
|
|
412
|
+
...(template !== null && {
|
|
413
|
+
created_from_template_id: template.id,
|
|
414
|
+
created_from_template_version: template.version,
|
|
415
|
+
created_from_template_name: template.name,
|
|
416
|
+
}),
|
|
342
417
|
})
|
|
343
418
|
.execute();
|
|
344
419
|
await t
|
|
@@ -357,9 +432,14 @@ let AgentsService = class AgentsService {
|
|
|
357
432
|
orgId,
|
|
358
433
|
action: "agent.created",
|
|
359
434
|
target: id,
|
|
360
|
-
detail: {
|
|
435
|
+
detail: {
|
|
436
|
+
version: 1,
|
|
437
|
+
visibility: input.visibility,
|
|
438
|
+
...(template !== null && { template: { id: template.id, version: template.version } }),
|
|
439
|
+
...auditDetail,
|
|
440
|
+
},
|
|
361
441
|
});
|
|
362
|
-
return this.lookup.view(id);
|
|
442
|
+
return { agent: await this.lookup.view(id), role };
|
|
363
443
|
}
|
|
364
444
|
/**
|
|
365
445
|
* 锁组织行并复核发起人,再锁 agent 行:发起人须仍具备 `agents.create`(member 以上),且是负责人或组织管理员以上;
|
|
@@ -396,14 +476,14 @@ let AgentsService = class AgentsService {
|
|
|
396
476
|
* 修改 agent:`definition` 变化时写新版本(`current_version + 1`),只改 visibility / memberIds 不产生新版本。
|
|
397
477
|
* 只有负责人或组织管理员以上可改,在组织行锁内复核。
|
|
398
478
|
*/
|
|
399
|
-
async update(orgId, agentId, actorAccountId, request, actorTokenId) {
|
|
479
|
+
async update(orgId, agentId, actorAccountId, request, actorTokenId, auditDetail) {
|
|
400
480
|
const patch = request;
|
|
401
481
|
const warnings = patch.definition ? await this.checkModels(patch.definition) : [];
|
|
402
482
|
const toolKeys = patch.definition ? await this.checkTools(orgId, patch.definition) : null;
|
|
403
|
-
const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId);
|
|
483
|
+
const agent = await this.updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId, auditDetail);
|
|
404
484
|
return { agent, warnings };
|
|
405
485
|
}
|
|
406
|
-
async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId) {
|
|
486
|
+
async updateIn(orgId, agentId, actorAccountId, patch, toolKeys, actorTokenId, auditDetail) {
|
|
407
487
|
const t = this.db.db;
|
|
408
488
|
const before = await this.lockForWrite(orgId, agentId, actorAccountId);
|
|
409
489
|
if (patch.expectedVersion !== undefined && patch.expectedVersion !== before.current_version) {
|
|
@@ -422,7 +502,8 @@ let AgentsService = class AgentsService {
|
|
|
422
502
|
.where("version", "=", before.current_version)
|
|
423
503
|
.executeTakeFirstOrThrow();
|
|
424
504
|
// the prompt: instructionFiles give instructions; a save given neither keeps the current one
|
|
425
|
-
const
|
|
505
|
+
const currentDefinition = normalizeStoredDefinition(current.definition);
|
|
506
|
+
const definition = keepPendingConnectors(deriveInstructions(patch.definition, currentDefinition), patch.definition.pendingConnectors, currentDefinition.pendingConnectors);
|
|
426
507
|
// 当前版本已有的技能引用保存时合法,不再核对(被删的技能不挡住其他改动);新加的照常核对
|
|
427
508
|
const kept = new Set(current.definition.skills?.orgSkills ?? []);
|
|
428
509
|
await assertOrgSkills(t, orgId, definition.skills?.orgSkills ?? [], kept);
|
|
@@ -436,6 +517,19 @@ let AgentsService = class AgentsService {
|
|
|
436
517
|
kept: current.definition.subagents,
|
|
437
518
|
});
|
|
438
519
|
if (canonical(current.definition) !== canonical(definition)) {
|
|
520
|
+
// removing pending connectors in the editor narrows or cancels the setup request (P4-T6-3)
|
|
521
|
+
const keys = (definition.pendingConnectors ?? []).map((c) => c.key);
|
|
522
|
+
if (canonical((currentDefinition.pendingConnectors ?? []).map((c) => c.key)) !==
|
|
523
|
+
canonical(keys)) {
|
|
524
|
+
await this.setupRequests.settleIn({
|
|
525
|
+
orgId,
|
|
526
|
+
agentId,
|
|
527
|
+
keys,
|
|
528
|
+
close: "cancelled",
|
|
529
|
+
actor: actorAccountId,
|
|
530
|
+
actorTokenId,
|
|
531
|
+
});
|
|
532
|
+
}
|
|
439
533
|
toVersion = before.current_version + 1;
|
|
440
534
|
await t
|
|
441
535
|
.insertInto("agent_versions")
|
|
@@ -471,6 +565,7 @@ let AgentsService = class AgentsService {
|
|
|
471
565
|
...(visibility !== before.visibility && {
|
|
472
566
|
visibility: { from: before.visibility, to: visibility },
|
|
473
567
|
}),
|
|
568
|
+
...auditDetail,
|
|
474
569
|
},
|
|
475
570
|
});
|
|
476
571
|
return this.lookup.view(agentId);
|
|
@@ -479,7 +574,6 @@ let AgentsService = class AgentsService {
|
|
|
479
574
|
async softDelete(orgId, agentId, actorAccountId, actorTokenId) {
|
|
480
575
|
const cancelled = await this.softDeleteIn(orgId, agentId, actorAccountId, actorTokenId);
|
|
481
576
|
await this.skillChanges.finishCancel(orgId, cancelled);
|
|
482
|
-
await this.destroySandboxes(orgId, agentId);
|
|
483
577
|
}
|
|
484
578
|
async softDeleteIn(orgId, agentId, actorAccountId, actorTokenId) {
|
|
485
579
|
const t = this.db.db;
|
|
@@ -503,31 +597,20 @@ let AgentsService = class AgentsService {
|
|
|
503
597
|
action: "agent.deleted",
|
|
504
598
|
target: agentId,
|
|
505
599
|
});
|
|
600
|
+
// the agent row stays (soft delete), so its setup request is closed here (P4-T6-3)
|
|
601
|
+
await this.setupRequests.settleIn({
|
|
602
|
+
orgId,
|
|
603
|
+
agentId,
|
|
604
|
+
keys: [],
|
|
605
|
+
close: "cancelled",
|
|
606
|
+
actor: actorAccountId,
|
|
607
|
+
actorTokenId,
|
|
608
|
+
});
|
|
506
609
|
// 评测集的 agent 删除后其评测运行不再花钱:显式取消(审计带原因)
|
|
507
610
|
await this.evalBudget.cancelRuns({ orgId, agentId }, { accountId: actorAccountId, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "agent_deleted");
|
|
508
611
|
// joins this transaction (mandatory: it relies on the agent row lock taken above)
|
|
509
612
|
return this.skillChanges.cancelPendingForAgent(orgId, agentId, actorAccountId, "agent_deleted", actorTokenId);
|
|
510
613
|
}
|
|
511
|
-
/** 提交后尽力而为:投递销毁这个 agent 各对话还没销毁的沙箱(失败只记日志,留给不活跃销毁扫描)。 */
|
|
512
|
-
async destroySandboxes(orgId, agentId) {
|
|
513
|
-
try {
|
|
514
|
-
const rows = await this.db
|
|
515
|
-
.selectFrom("sandboxes as s")
|
|
516
|
-
.innerJoin("conversations as c", "c.id", "s.conversation_id")
|
|
517
|
-
.select("s.conversation_id")
|
|
518
|
-
.where("c.org_id", "=", orgId)
|
|
519
|
-
.where("c.agent_id", "=", agentId)
|
|
520
|
-
.where("s.status", "<>", "destroyed")
|
|
521
|
-
.execute();
|
|
522
|
-
const ids = rows.map((r) => r.conversation_id);
|
|
523
|
-
for (let i = 0; i < ids.length; i += SANDBOX_DESTROY_BATCH) {
|
|
524
|
-
await this.sandboxJobs.destroy(ids.slice(i, i + SANDBOX_DESTROY_BATCH));
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
catch (err) {
|
|
528
|
-
this.log.warn("cannot schedule sandbox destruction for a deleted agent", { agentId, err });
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
614
|
/**
|
|
532
615
|
* 重新指派负责人(`agents.manage`,admin):在组织行锁内授权;agent 不存在 / 已删除 → `agent.not_found`;
|
|
533
616
|
* 新负责人不是该组织成员 → `member.not_found`;是匿名访客 → `member.anonymous_guest`。
|
|
@@ -560,6 +643,8 @@ let AgentsService = class AgentsService {
|
|
|
560
643
|
.set({ owner_account_id: newOwnerId, needs_reassignment: false, updated_at: sql `now()` })
|
|
561
644
|
.where("id", "=", agentId)
|
|
562
645
|
.execute();
|
|
646
|
+
// the new owner hears about the agent's connector setup request (P4-T6-4)
|
|
647
|
+
await this.setupRequests.retargetIn([agentId], newOwnerId);
|
|
563
648
|
await audit(t, {
|
|
564
649
|
actorAccountId,
|
|
565
650
|
...(actorTokenId !== undefined && { actorTokenId }),
|
|
@@ -574,6 +659,24 @@ let AgentsService = class AgentsService {
|
|
|
574
659
|
});
|
|
575
660
|
return this.lookup.view(agentId);
|
|
576
661
|
}
|
|
662
|
+
/**
|
|
663
|
+
* `views` with `createdFrom.available` set (ruling P4-8): whether each recorded template is
|
|
664
|
+
* still usable in the org. One template read for all of them; only the agents API calls it.
|
|
665
|
+
*/
|
|
666
|
+
async withTemplateLinks(orgId, views) {
|
|
667
|
+
const ids = [
|
|
668
|
+
...new Set(views.flatMap((v) => (v.createdFrom === null ? [] : [v.createdFrom.templateId]))),
|
|
669
|
+
];
|
|
670
|
+
if (ids.length === 0)
|
|
671
|
+
return views;
|
|
672
|
+
const usable = await loadTemplates(this.db.db, orgId, ids);
|
|
673
|
+
return views.map((v) => v.createdFrom === null
|
|
674
|
+
? v
|
|
675
|
+
: {
|
|
676
|
+
...v,
|
|
677
|
+
createdFrom: { ...v.createdFrom, available: usable.has(v.createdFrom.templateId) },
|
|
678
|
+
});
|
|
679
|
+
}
|
|
577
680
|
/** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
|
|
578
681
|
get(orgId, agentId, viewerAccountId) {
|
|
579
682
|
return this.lookup.get(orgId, agentId, viewerAccountId);
|
|
@@ -637,9 +740,8 @@ AgentsService = __decorate([
|
|
|
637
740
|
__param(3, Inject(SkillChangesService)),
|
|
638
741
|
__param(4, Inject(OrgLock)),
|
|
639
742
|
__param(5, Inject(ProviderRegistry)),
|
|
640
|
-
__param(6, Inject(
|
|
641
|
-
__param(7, Inject(
|
|
642
|
-
__param(8, Inject(
|
|
643
|
-
__param(9, Inject(EvalBudget))
|
|
743
|
+
__param(6, Inject(TransactionHost)),
|
|
744
|
+
__param(7, Inject(EvalBudget)),
|
|
745
|
+
__param(8, Inject(PendingConnectorRequests))
|
|
644
746
|
], AgentsService);
|
|
645
747
|
export { AgentsService };
|
|
@@ -112,6 +112,33 @@ export declare const SubagentsSchema: z.ZodObject<{
|
|
|
112
112
|
dispatchable: z.ZodOptional<z.ZodBoolean>;
|
|
113
113
|
}, z.core.$strict>;
|
|
114
114
|
export type Subagents = z.infer<typeof SubagentsSchema>;
|
|
115
|
+
/** The key rule of a pending connector (`[a-z0-9-]`, URL-safe: it names the bind route). */
|
|
116
|
+
export declare const PENDING_CONNECTOR_KEY_RE: RegExp;
|
|
117
|
+
/** Pending connectors an agent may carry (the template's `connectors` limit). */
|
|
118
|
+
export declare const PENDING_CONNECTORS_MAX = 16;
|
|
119
|
+
export declare const PendingConnectorSchema: z.ZodObject<{
|
|
120
|
+
key: z.ZodString;
|
|
121
|
+
label: z.ZodString;
|
|
122
|
+
source: z.ZodUnion<readonly [z.ZodObject<{
|
|
123
|
+
template: z.ZodString;
|
|
124
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
125
|
+
needs: z.ZodObject<{
|
|
126
|
+
protocol: z.ZodEnum<{
|
|
127
|
+
mcp: "mcp";
|
|
128
|
+
openapi: "openapi";
|
|
129
|
+
}>;
|
|
130
|
+
endpoint: z.ZodString;
|
|
131
|
+
tools: z.ZodArray<z.ZodString>;
|
|
132
|
+
label: z.ZodString;
|
|
133
|
+
}, z.core.$strict>;
|
|
134
|
+
}, z.core.$strict>]>;
|
|
135
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
136
|
+
policies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
137
|
+
ask: "ask";
|
|
138
|
+
deny: "deny";
|
|
139
|
+
}>>>;
|
|
140
|
+
}, z.core.$strict>;
|
|
141
|
+
export type PendingConnector = z.infer<typeof PendingConnectorSchema>;
|
|
115
142
|
/** Agent 定义:每次变化写一个新版本(`capybara.agent_versions`)。 */
|
|
116
143
|
export declare const AgentDefinitionSchema: z.ZodObject<{
|
|
117
144
|
name: z.ZodString;
|
|
@@ -191,6 +218,28 @@ export declare const AgentDefinitionSchema: z.ZodObject<{
|
|
|
191
218
|
}, z.core.$strict>>>;
|
|
192
219
|
dispatchable: z.ZodOptional<z.ZodBoolean>;
|
|
193
220
|
}, z.core.$strict>>;
|
|
221
|
+
pendingConnectors: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
222
|
+
key: z.ZodString;
|
|
223
|
+
label: z.ZodString;
|
|
224
|
+
source: z.ZodUnion<readonly [z.ZodObject<{
|
|
225
|
+
template: z.ZodString;
|
|
226
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
227
|
+
needs: z.ZodObject<{
|
|
228
|
+
protocol: z.ZodEnum<{
|
|
229
|
+
mcp: "mcp";
|
|
230
|
+
openapi: "openapi";
|
|
231
|
+
}>;
|
|
232
|
+
endpoint: z.ZodString;
|
|
233
|
+
tools: z.ZodArray<z.ZodString>;
|
|
234
|
+
label: z.ZodString;
|
|
235
|
+
}, z.core.$strict>;
|
|
236
|
+
}, z.core.$strict>]>;
|
|
237
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
238
|
+
policies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
239
|
+
ask: "ask";
|
|
240
|
+
deny: "deny";
|
|
241
|
+
}>>>;
|
|
242
|
+
}, z.core.$strict>>>;
|
|
194
243
|
}, z.core.$strip>;
|
|
195
244
|
export type AgentDefinition = z.infer<typeof AgentDefinitionSchema>;
|
|
196
245
|
/** The connectors and extensions a definition's own tool refs name (to read an ambiguous rc key). */
|
|
@@ -91,6 +91,46 @@ export const SubagentsSchema = z
|
|
|
91
91
|
dispatchable: z.boolean().optional(),
|
|
92
92
|
})
|
|
93
93
|
.strict();
|
|
94
|
+
/** The key rule of a pending connector (`[a-z0-9-]`, URL-safe: it names the bind route). */
|
|
95
|
+
export const PENDING_CONNECTOR_KEY_RE = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
96
|
+
/** Pending connectors an agent may carry (the template's `connectors` limit). */
|
|
97
|
+
export const PENDING_CONNECTORS_MAX = 16;
|
|
98
|
+
/**
|
|
99
|
+
* A connector the template the agent was created from needs and the org has not bound yet
|
|
100
|
+
* (ruling P4-6): `source.template` is the platform connector template's id, `source.needs` a
|
|
101
|
+
* hand-configured connector described by protocol, endpoint and tools (P4-11). `tools` are the
|
|
102
|
+
* tool names to enable once bound (absent = all of a template's tools), `policies` the template's
|
|
103
|
+
* tightened policies by tool name, applied by the bind. Never model-visible: tools are built from
|
|
104
|
+
* `tools` only, and a pending connector has none. Text limits are twice the template's (which
|
|
105
|
+
* counts code points) so any parsed template fits (this schema counts UTF-16 units).
|
|
106
|
+
*/
|
|
107
|
+
const PendingToolName = z.string().min(1).max(256);
|
|
108
|
+
export const PendingConnectorSchema = z
|
|
109
|
+
.object({
|
|
110
|
+
key: z.string().regex(PENDING_CONNECTOR_KEY_RE),
|
|
111
|
+
label: z.string().min(1).max(160),
|
|
112
|
+
source: z.union([
|
|
113
|
+
z.object({ template: z.string().min(1).max(100) }).strict(),
|
|
114
|
+
z
|
|
115
|
+
.object({
|
|
116
|
+
needs: z
|
|
117
|
+
.object({
|
|
118
|
+
protocol: z.enum(["mcp", "openapi"]),
|
|
119
|
+
endpoint: z.string().min(1).max(4096),
|
|
120
|
+
tools: z.array(PendingToolName).max(200),
|
|
121
|
+
label: z.string().min(1).max(160),
|
|
122
|
+
})
|
|
123
|
+
.strict(),
|
|
124
|
+
})
|
|
125
|
+
.strict(),
|
|
126
|
+
]),
|
|
127
|
+
tools: z.array(PendingToolName).max(200).optional(),
|
|
128
|
+
policies: z
|
|
129
|
+
.record(PendingToolName, z.enum(["ask", "deny"]))
|
|
130
|
+
.refine((p) => Object.keys(p).length <= 200, "at most 200 policies")
|
|
131
|
+
.optional(),
|
|
132
|
+
})
|
|
133
|
+
.strict();
|
|
94
134
|
/** Agent 定义:每次变化写一个新版本(`capybara.agent_versions`)。 */
|
|
95
135
|
export const AgentDefinitionSchema = z.object({
|
|
96
136
|
name: z.string().min(1).max(80),
|
|
@@ -142,6 +182,11 @@ export const AgentDefinitionSchema = z.object({
|
|
|
142
182
|
.optional(),
|
|
143
183
|
/** Sub-agents (phase C); offered only when the builtin `Agent` tool is in `tools`. */
|
|
144
184
|
subagents: SubagentsSchema.optional(),
|
|
185
|
+
/**
|
|
186
|
+
* Connectors still to configure (ruling P4-6), written only by creating from a template. No
|
|
187
|
+
* default: definitions without it are unchanged. Model-invisible.
|
|
188
|
+
*/
|
|
189
|
+
pendingConnectors: z.array(PendingConnectorSchema).max(PENDING_CONNECTORS_MAX).optional(),
|
|
145
190
|
});
|
|
146
191
|
const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
147
192
|
/**
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { type ModelParameter } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
|
+
import { type ModelParams, type ModelRef } from "./definition.js";
|
|
4
|
+
import { type AgentDefinitionInput } from "./instruction-files.js";
|
|
5
|
+
import { type QuickAction } from "./profile.js";
|
|
6
|
+
import { type TemplateRow } from "./templates.js";
|
|
7
|
+
/** What the preview lists (P4-5): 带入 / 待配置 / 不可用. */
|
|
8
|
+
export type PlanItemState = "carried" | "pending" | "unavailable";
|
|
9
|
+
export type PlanItemKind = "instruction_file" | "description" | "quick_action" | "tool" | "skill" | "connector" | "subagent";
|
|
10
|
+
/**
|
|
11
|
+
* One line of the preview. `reason` (a code) says why an item is pending or unavailable, and
|
|
12
|
+
* qualifies some carried ones:
|
|
13
|
+
* - instruction_file: unavailable `invalid_name`, `duplicate`, `too_many`, `too_long` (the joined
|
|
14
|
+
* files exceed the agent's limit);
|
|
15
|
+
* - tool: `default` (the template names no tools: the defaults of a new agent), `subagents`
|
|
16
|
+
* (`Agent` added because the template describes sub-agents); unavailable `plugin_unavailable`
|
|
17
|
+
* (its plugin is not enabled in the org or not loaded), `unknown_tool`, `connector_key` (a
|
|
18
|
+
* connector tool key: connectors carry over only through `connectors` entries);
|
|
19
|
+
* - skill: `pinned`, `not_pinned_manual_only`, `not_pinned_too_large`, `subagent` (named only by an
|
|
20
|
+
* inline sub-agent); unavailable `not_found`;
|
|
21
|
+
* - connector: `several` (the first of several connectors made from the template was bound);
|
|
22
|
+
* pending `no_connector`, `tools_missing` (the connector made from the template lacks every
|
|
23
|
+
* named tool), `needs`; unavailable `template_not_found` (also for a template the org may not
|
|
24
|
+
* see, named by the entry's reference only), `disallowed` (`disallowedTools` left none of its
|
|
25
|
+
* tools), `invalid_endpoint` (a `needs` endpoint that is no http(s) URL);
|
|
26
|
+
* - subagent: unavailable `type_not_found`, `type_taken`, `too_many`.
|
|
27
|
+
*/
|
|
28
|
+
export interface PlanItem {
|
|
29
|
+
kind: PlanItemKind;
|
|
30
|
+
name: string;
|
|
31
|
+
state: PlanItemState;
|
|
32
|
+
reason?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Where the chosen model comes from (P4-4). */
|
|
35
|
+
export type ModelSource = "modelRef" | "tier" | "default" | "chosen";
|
|
36
|
+
export interface PlannedModel {
|
|
37
|
+
ref: ModelRef;
|
|
38
|
+
params: ModelParams;
|
|
39
|
+
source: ModelSource;
|
|
40
|
+
}
|
|
41
|
+
/** The template's agent definition, without its model (chosen separately, P4-4). */
|
|
42
|
+
export type PlannedDefinition = Omit<AgentDefinitionInput, "model" | "modelParams">;
|
|
43
|
+
export interface TemplatePlan {
|
|
44
|
+
definition: PlannedDefinition;
|
|
45
|
+
/** The profile's description and quick actions. */
|
|
46
|
+
profile: {
|
|
47
|
+
description: string;
|
|
48
|
+
quickActions: QuickAction[];
|
|
49
|
+
};
|
|
50
|
+
/** The model the new agent gets (`opts.model` when given); null when the org has none. */
|
|
51
|
+
model: PlannedModel | null;
|
|
52
|
+
/** The automatic choice (P4-4), whatever `opts.model` is; what the dialog preselects. */
|
|
53
|
+
auto: PlannedModel | null;
|
|
54
|
+
items: PlanItem[];
|
|
55
|
+
/**
|
|
56
|
+
* What has no place in the agent or was cut to its limits: `maxSteps`, `effort` when the model
|
|
57
|
+
* does not declare it, `description` / `instructions` / `quickActions.<i>.title|body` /
|
|
58
|
+
* `instructionFiles.<i>.content` / `subagents.inline.<name>.description|instructions` when cut to
|
|
59
|
+
* the kernel's limits (UTF-16 units), `subagents.inline.<name>.tools.<key>` for a key the agent
|
|
60
|
+
* does not have, `connectors.<key>.tools.<name>` / `connectors.<key>.policies.<name>` for a tool
|
|
61
|
+
* the bound connector does not offer.
|
|
62
|
+
*/
|
|
63
|
+
dropped: string[];
|
|
64
|
+
/** sha256 of the template id and version and everything resolved except the model. */
|
|
65
|
+
baseHash: string;
|
|
66
|
+
/** The first 16 hex digits of sha256 of the automatic model choice (ref and params). */
|
|
67
|
+
modelHash: string;
|
|
68
|
+
/** The preview hash: `<baseHash>.<modelHash>`. */
|
|
69
|
+
hash: string;
|
|
70
|
+
}
|
|
71
|
+
export interface PlanOptions {
|
|
72
|
+
/** Extension tools loaded on this replica (`ExtensionHost.tools()`). */
|
|
73
|
+
pluginTools: readonly {
|
|
74
|
+
plugin: string;
|
|
75
|
+
name: string;
|
|
76
|
+
}[];
|
|
77
|
+
/** Extensions enabled in the org. */
|
|
78
|
+
enabledPlugins: ReadonlySet<string>;
|
|
79
|
+
/** The model's parameter declarations, or null when the deployment cannot use it. */
|
|
80
|
+
resolveModel(ref: ModelRef): Promise<ModelParameter[] | null>;
|
|
81
|
+
/** The org's target of a model purpose, or null when unmapped. */
|
|
82
|
+
purpose(purpose: string): Promise<{
|
|
83
|
+
model: ModelRef;
|
|
84
|
+
params: ModelParams;
|
|
85
|
+
} | null>;
|
|
86
|
+
/**
|
|
87
|
+
* The org's default chat model. There is no such setting today: the first model of the first
|
|
88
|
+
* provider listed, as the agent form preselects (ruling P4-T3-2).
|
|
89
|
+
*/
|
|
90
|
+
defaultModel(): Promise<ModelRef | null>;
|
|
91
|
+
/** The model the person chose (the automatic choice keeps its params when it is the same). */
|
|
92
|
+
model?: ModelRef;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* `s` cut to `max` UTF-16 units (what the kernel's zod schemas count), never splitting a
|
|
96
|
+
* surrogate pair.
|
|
97
|
+
*/
|
|
98
|
+
export declare function cutUtf16(s: string, max: number): string;
|
|
99
|
+
/** The pending connector key of the template's `connectors[i]` (stable per entry). */
|
|
100
|
+
export declare const pendingKeyOf: (i: number) => string;
|
|
101
|
+
/**
|
|
102
|
+
* Resolves what `row`'s template carries into a new agent of `orgId` (P4-4, P4-5, P4-6). Never
|
|
103
|
+
* throws for the org's state: what does not resolve is listed and left out, and text is cut to
|
|
104
|
+
* the kernel's limits; the result is checked against the agent and profile schemas.
|
|
105
|
+
*/
|
|
106
|
+
export declare function planFromTemplate(db: KernelSchemaDb, orgId: string, row: TemplateRow, opts: PlanOptions): Promise<TemplatePlan>;
|