@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.6
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 +51 -14
- package/dist/admin/admin.controller.js +60 -19
- 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 +54 -23
- package/dist/agents/agents.service.js +180 -76
- 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/models.controller.d.ts +34 -5
- package/dist/agents/models.controller.js +50 -6
- 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/readiness.controller.d.ts +5 -5
- package/dist/agents/readiness.controller.js +6 -6
- 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 +10 -2
- package/dist/config/schema.js +70 -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 +73 -15
- package/dist/conversations/conversations.service.js +115 -35
- 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 +20 -1
- package/dist/ctx/create-ctx.js +38 -7
- package/dist/db/kernel-schema.d.ts +386 -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 +85 -2
- package/dist/errors.js +85 -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 +20 -6
- package/dist/evals/runs.service.d.ts +2 -1
- package/dist/evals/runs.service.js +13 -12
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +4 -3
- 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/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- 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 +11 -11
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +24 -10
- package/dist/extensions/host.js +49 -54
- 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/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +25 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- 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 +24 -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 +19 -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/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +99 -0
- package/dist/models/enablement.js +263 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -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 +37 -12
- package/dist/models/purposes.js +63 -17
- 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 +1405 -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.d.ts +8 -1
- package/dist/runtime/hook-calls.js +40 -7
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +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 +38 -11
- package/dist/runtime/model-call.js +97 -24
- package/dist/runtime/providers.d.ts +146 -32
- package/dist/runtime/providers.js +321 -67
- 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 +12 -6
- package/dist/runtime/run-worker.js +58 -35
- 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 +46 -32
- 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-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +33 -38
- package/dist/runtime/usage-report.js +169 -96
- 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 +193 -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/src/migrations/0089_model_kinds_usage.sql +38 -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
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { connectorToolKey } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { sql } from "kysely";
|
|
13
|
+
import { ApiError } from "../errors.js";
|
|
14
|
+
import { audit } from "../identity/audit.js";
|
|
15
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
16
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
17
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
18
|
+
import { roleAtLeast } from "../orgs/roles.js";
|
|
19
|
+
import { AgentLookup, isAgentVisibleTo } from "./agent-lookup.js";
|
|
20
|
+
import { AgentsService } from "./agents.service.js";
|
|
21
|
+
import { normalizeStoredDefinition, } from "./definition.js";
|
|
22
|
+
import { PendingConnectorRequests } from "./pending-connector-requests.js";
|
|
23
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
24
|
+
const RANK = { ask: 1, deny: 2 };
|
|
25
|
+
const MISMATCH = {
|
|
26
|
+
template: "The connector was not made from the connector template this entry needs",
|
|
27
|
+
protocol: "The connector's protocol is not the one this entry needs",
|
|
28
|
+
tools: "The connector offers none of the tools this entry needs",
|
|
29
|
+
not_synced: "The connector has not listed its tools yet; authorize the connector first, then bind it",
|
|
30
|
+
};
|
|
31
|
+
const mismatch = (reason) => new ApiError("agent.pending_connector_mismatch", MISMATCH[reason], [{ reason }]);
|
|
32
|
+
const connectorNotFound = () => new ApiError("connector.not_found", "Connector not found");
|
|
33
|
+
/**
|
|
34
|
+
* Resolving an agent's pending connectors (rulings P4-6, P4-7): binding a connector of the org to a
|
|
35
|
+
* pending entry, and the agent's connector setup request (re-opening it, reading the latest).
|
|
36
|
+
* Writes run under the org row lock and the agent row lock ({@link AgentsService.lockForWrite}: the
|
|
37
|
+
* owner or an org admin+).
|
|
38
|
+
*/
|
|
39
|
+
let PendingConnectorsService = class PendingConnectorsService {
|
|
40
|
+
kdb;
|
|
41
|
+
agents;
|
|
42
|
+
lookup;
|
|
43
|
+
requests;
|
|
44
|
+
txHost;
|
|
45
|
+
constructor(kdb, agents, lookup, requests, txHost) {
|
|
46
|
+
this.kdb = kdb;
|
|
47
|
+
this.agents = agents;
|
|
48
|
+
this.lookup = lookup;
|
|
49
|
+
this.requests = requests;
|
|
50
|
+
this.txHost = txHost;
|
|
51
|
+
}
|
|
52
|
+
/** The current version's definition of a locked agent. */
|
|
53
|
+
async currentDefinition(agentId, version) {
|
|
54
|
+
const row = await this.kdb.db
|
|
55
|
+
.selectFrom("agent_versions")
|
|
56
|
+
.select("definition")
|
|
57
|
+
.where("agent_id", "=", agentId)
|
|
58
|
+
.where("version", "=", version)
|
|
59
|
+
.executeTakeFirstOrThrow();
|
|
60
|
+
return normalizeStoredDefinition(row.definition);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Binds connector `connectorId` to the agent's pending entry `key` (ruling P4-6; P4-T6-1,
|
|
64
|
+
* P4-T6-2): a new agent version with a connector ref to it (merged into an existing ref of that
|
|
65
|
+
* connector) for the entry's tools the connector offers (all of them when the entry names none),
|
|
66
|
+
* the entry's policies on those tools (the tighter one wins), and without the entry; then the
|
|
67
|
+
* setup request narrows or closes (`approved`). Refused: no entry `key` -> 404
|
|
68
|
+
* `agent.pending_connector_not_found`; a connector that is missing, deleted or of another org ->
|
|
69
|
+
* 404 `connector.not_found`; another connector template (a `template` entry), another protocol
|
|
70
|
+
* (a `needs` entry), no tool snapshot yet (`not_synced`: an authorization-code connector nobody
|
|
71
|
+
* authorized) or none of the entry's tools -> 400 `agent.pending_connector_mismatch`.
|
|
72
|
+
* Audits `agent.pending_connector_bound`.
|
|
73
|
+
*/
|
|
74
|
+
async bind(orgId, agentId, key, connectorId, actor, actorTokenId) {
|
|
75
|
+
const t = this.kdb.db;
|
|
76
|
+
const before = await this.agents.lockForWrite(orgId, agentId, actor);
|
|
77
|
+
const def = await this.currentDefinition(agentId, before.current_version);
|
|
78
|
+
const pending = def.pendingConnectors ?? [];
|
|
79
|
+
const entry = pending.find((c) => c.key === key);
|
|
80
|
+
if (!entry) {
|
|
81
|
+
throw new ApiError("agent.pending_connector_not_found", "The agent has no pending connector with this key");
|
|
82
|
+
}
|
|
83
|
+
if (!UUID_RE.test(connectorId))
|
|
84
|
+
throw connectorNotFound();
|
|
85
|
+
const c = await t
|
|
86
|
+
.selectFrom("connectors")
|
|
87
|
+
.select(["id", "slug", "connector", "platform_template_id", "tools_synced_at"])
|
|
88
|
+
.where("id", "=", connectorId)
|
|
89
|
+
.where("org_id", "=", orgId)
|
|
90
|
+
.where("deleted_at", "is", null)
|
|
91
|
+
.executeTakeFirst();
|
|
92
|
+
if (!c)
|
|
93
|
+
throw connectorNotFound();
|
|
94
|
+
if ("template" in entry.source) {
|
|
95
|
+
if (c.platform_template_id !== entry.source.template)
|
|
96
|
+
throw mismatch("template");
|
|
97
|
+
}
|
|
98
|
+
else if (c.connector !== entry.source.needs.protocol) {
|
|
99
|
+
throw mismatch("protocol");
|
|
100
|
+
}
|
|
101
|
+
// an authorization-code connector before its first snapshot has no tools to pick from: never
|
|
102
|
+
// bind "all" blind and drop the entry's policies; the entry stays pending (fix round 1)
|
|
103
|
+
if (c.tools_synced_at === null)
|
|
104
|
+
throw mismatch("not_synced");
|
|
105
|
+
const rows = await t
|
|
106
|
+
.selectFrom("connector_tools")
|
|
107
|
+
.select(["name", "status"])
|
|
108
|
+
.where("connector_id", "=", c.id)
|
|
109
|
+
.orderBy("name")
|
|
110
|
+
.execute();
|
|
111
|
+
const offered = rows.map((r) => r.name);
|
|
112
|
+
const dropped = [];
|
|
113
|
+
// an entry naming no tools takes them all (P4-T6-2)
|
|
114
|
+
let names = "all";
|
|
115
|
+
if (entry.tools !== undefined && entry.tools.length > 0) {
|
|
116
|
+
const present = entry.tools.filter((n) => offered.includes(n));
|
|
117
|
+
if (present.length === 0)
|
|
118
|
+
throw mismatch("tools");
|
|
119
|
+
for (const n of entry.tools)
|
|
120
|
+
if (!present.includes(n))
|
|
121
|
+
dropped.push(`tools.${n}`);
|
|
122
|
+
// naming every enabled tool of this connector is "all": 另存为模板 writes an agent's
|
|
123
|
+
// 全部工具 as the enabled names (P4-11), and binding gives it back as 全部工具 (P4-T6-12)
|
|
124
|
+
const enabled = rows.filter((r) => r.status === "enabled").map((r) => r.name);
|
|
125
|
+
const coversAll = enabled.length > 0 && enabled.every((n) => present.includes(n));
|
|
126
|
+
names = coversAll ? "all" : present;
|
|
127
|
+
}
|
|
128
|
+
const kept = names === "all" ? offered : names;
|
|
129
|
+
const toolPolicies = { ...def.toolPolicies };
|
|
130
|
+
for (const [n, p] of Object.entries(entry.policies ?? {})) {
|
|
131
|
+
if (!kept.includes(n)) {
|
|
132
|
+
dropped.push(`policies.${n}`);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const k = connectorToolKey(c.slug, n);
|
|
136
|
+
const prev = toolPolicies[k];
|
|
137
|
+
if (prev === undefined || RANK[p] > RANK[prev])
|
|
138
|
+
toolPolicies[k] = p;
|
|
139
|
+
}
|
|
140
|
+
let merged = false;
|
|
141
|
+
const tools = def.tools.map((r) => {
|
|
142
|
+
if (r.kind !== "connector" || r.connectorId !== c.id || merged)
|
|
143
|
+
return r;
|
|
144
|
+
merged = true;
|
|
145
|
+
if (r.tools === "all")
|
|
146
|
+
return r;
|
|
147
|
+
return {
|
|
148
|
+
...r,
|
|
149
|
+
tools: names === "all" ? "all" : [...new Set([...r.tools, ...names])],
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
if (!merged)
|
|
153
|
+
tools.push({ kind: "connector", connectorId: c.id, tools: names });
|
|
154
|
+
const left = pending.filter((x) => x.key !== key);
|
|
155
|
+
const { pendingConnectors: _old, ...rest } = def;
|
|
156
|
+
const next = {
|
|
157
|
+
...rest,
|
|
158
|
+
tools,
|
|
159
|
+
toolPolicies,
|
|
160
|
+
...(left.length > 0 && { pendingConnectors: left }),
|
|
161
|
+
};
|
|
162
|
+
const toVersion = before.current_version + 1;
|
|
163
|
+
await t
|
|
164
|
+
.insertInto("agent_versions")
|
|
165
|
+
.values({
|
|
166
|
+
agent_id: agentId,
|
|
167
|
+
version: toVersion,
|
|
168
|
+
definition: JSON.stringify(next),
|
|
169
|
+
created_by: actor,
|
|
170
|
+
})
|
|
171
|
+
.execute();
|
|
172
|
+
await t
|
|
173
|
+
.updateTable("agents")
|
|
174
|
+
.set({ current_version: toVersion, updated_at: sql `now()` })
|
|
175
|
+
.where("id", "=", agentId)
|
|
176
|
+
.execute();
|
|
177
|
+
await audit(t, {
|
|
178
|
+
actorAccountId: actor,
|
|
179
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
180
|
+
orgId,
|
|
181
|
+
action: "agent.pending_connector_bound",
|
|
182
|
+
target: agentId,
|
|
183
|
+
detail: { key, connectorId: c.id, fromVersion: before.current_version, toVersion },
|
|
184
|
+
});
|
|
185
|
+
await this.requests.settleIn({
|
|
186
|
+
orgId,
|
|
187
|
+
agentId,
|
|
188
|
+
keys: left.map((x) => x.key),
|
|
189
|
+
close: "approved",
|
|
190
|
+
actor,
|
|
191
|
+
actorTokenId,
|
|
192
|
+
});
|
|
193
|
+
return { agent: await this.lookup.view(agentId), dropped };
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* (Re-)opens the agent's connector setup request (ruling P4-T6-7; the owner or an org admin+):
|
|
197
|
+
* the pending one when it has one (`created` false), else a new one for the current pending
|
|
198
|
+
* keys, requested by the agent's owner (P4-T6-4). No pending connectors -> 409
|
|
199
|
+
* `agent.no_pending_connectors`.
|
|
200
|
+
*/
|
|
201
|
+
async reopen(orgId, agentId, actor, actorTokenId) {
|
|
202
|
+
const before = await this.agents.lockForWrite(orgId, agentId, actor);
|
|
203
|
+
const def = await this.currentDefinition(agentId, before.current_version);
|
|
204
|
+
const keys = (def.pendingConnectors ?? []).map((c) => c.key);
|
|
205
|
+
if (keys.length === 0) {
|
|
206
|
+
throw new ApiError("agent.no_pending_connectors", "The agent has no connectors waiting to be configured");
|
|
207
|
+
}
|
|
208
|
+
const owner = await this.kdb.db
|
|
209
|
+
.selectFrom("agents")
|
|
210
|
+
.select("owner_account_id")
|
|
211
|
+
.where("id", "=", agentId)
|
|
212
|
+
.executeTakeFirstOrThrow();
|
|
213
|
+
const r = await this.requests.open({
|
|
214
|
+
orgId,
|
|
215
|
+
agentId,
|
|
216
|
+
requestedBy: owner.owner_account_id,
|
|
217
|
+
actor,
|
|
218
|
+
actorTokenId,
|
|
219
|
+
});
|
|
220
|
+
// the agent row is locked above, so the keys read there are still pending
|
|
221
|
+
if (r === null)
|
|
222
|
+
throw new Error(`agent ${agentId} lost its pending connectors under its lock`);
|
|
223
|
+
return r;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* The id of the agent's latest connector setup request (any status), or null. Authorized as the
|
|
227
|
+
* writes are (fix round 1): the agent's owner or an org admin+, whether or not the agent is
|
|
228
|
+
* visible to them; a member who sees the agent otherwise -> 403 `forbidden`; anyone else, or a
|
|
229
|
+
* deleted agent -> 404 `agent.not_found`.
|
|
230
|
+
*/
|
|
231
|
+
async latestRequest(orgId, agentId, viewer) {
|
|
232
|
+
const t = this.kdb.db;
|
|
233
|
+
const [agent, member] = await Promise.all([
|
|
234
|
+
t
|
|
235
|
+
.selectFrom("agents")
|
|
236
|
+
.select("owner_account_id")
|
|
237
|
+
.where("id", "=", agentId)
|
|
238
|
+
.where("org_id", "=", orgId)
|
|
239
|
+
.where("deleted_at", "is", null)
|
|
240
|
+
.executeTakeFirst(),
|
|
241
|
+
t
|
|
242
|
+
.selectFrom("memberships")
|
|
243
|
+
.select("role")
|
|
244
|
+
.where("org_id", "=", orgId)
|
|
245
|
+
.where("account_id", "=", viewer)
|
|
246
|
+
.executeTakeFirst(),
|
|
247
|
+
]);
|
|
248
|
+
if (!agent || !member)
|
|
249
|
+
throw new ApiError("agent.not_found", "Agent not found");
|
|
250
|
+
if (agent.owner_account_id !== viewer && !roleAtLeast(member.role, "admin")) {
|
|
251
|
+
if (await isAgentVisibleTo(t, agentId, viewer)) {
|
|
252
|
+
throw new ApiError("forbidden", "Only the agent owner or an organization admin can see its connector setup request");
|
|
253
|
+
}
|
|
254
|
+
throw new ApiError("agent.not_found", "Agent not found");
|
|
255
|
+
}
|
|
256
|
+
const row = await this.kdb.db
|
|
257
|
+
.selectFrom("catalog_requests")
|
|
258
|
+
.select("id")
|
|
259
|
+
.where("org_id", "=", orgId)
|
|
260
|
+
.where("agent_id", "=", agentId)
|
|
261
|
+
.where("kind", "=", "connector_setup")
|
|
262
|
+
.orderBy("created_at", "desc")
|
|
263
|
+
.orderBy("id", "desc")
|
|
264
|
+
.executeTakeFirst();
|
|
265
|
+
return row?.id ?? null;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
__decorate([
|
|
269
|
+
Transactional()
|
|
270
|
+
], PendingConnectorsService.prototype, "bind", null);
|
|
271
|
+
__decorate([
|
|
272
|
+
Transactional()
|
|
273
|
+
], PendingConnectorsService.prototype, "reopen", null);
|
|
274
|
+
PendingConnectorsService = __decorate([
|
|
275
|
+
Injectable(),
|
|
276
|
+
__param(0, Inject(KernelDb)),
|
|
277
|
+
__param(1, Inject(AgentsService)),
|
|
278
|
+
__param(2, Inject(AgentLookup)),
|
|
279
|
+
__param(3, Inject(PendingConnectorRequests)),
|
|
280
|
+
__param(4, Inject(TransactionHost))
|
|
281
|
+
], PendingConnectorsService);
|
|
282
|
+
export { PendingConnectorsService };
|
|
@@ -9,11 +9,11 @@ import { AgentsService } from "./agents.service.js";
|
|
|
9
9
|
* a vendor call; `agents` is the number of agents the caller can see (the agent list's
|
|
10
10
|
* visibility). Humans and service tokens (`org.read`).
|
|
11
11
|
*
|
|
12
|
-
* `modelProvider`
|
|
13
|
-
* (
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
12
|
+
* `modelProvider` counts the deployment's providers whose effective config is valid in this org
|
|
13
|
+
* (spec B §5.5: a provider the platform installed without a key needs each org's own). It is read
|
|
14
|
+
* from this replica's provider registry, which follows the per-replica extension reconcile: right
|
|
15
|
+
* after a provider is enabled, a replica that has not reconciled yet may still answer `none` for
|
|
16
|
+
* a moment.
|
|
17
17
|
*/
|
|
18
18
|
export declare class ReadinessController {
|
|
19
19
|
private readonly registry;
|
|
@@ -21,11 +21,11 @@ const viewerOf = (p) => (p.kind === "user" ? p.account.id : null);
|
|
|
21
21
|
* a vendor call; `agents` is the number of agents the caller can see (the agent list's
|
|
22
22
|
* visibility). Humans and service tokens (`org.read`).
|
|
23
23
|
*
|
|
24
|
-
* `modelProvider`
|
|
25
|
-
* (
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
24
|
+
* `modelProvider` counts the deployment's providers whose effective config is valid in this org
|
|
25
|
+
* (spec B §5.5: a provider the platform installed without a key needs each org's own). It is read
|
|
26
|
+
* from this replica's provider registry, which follows the per-replica extension reconcile: right
|
|
27
|
+
* after a provider is enabled, a replica that has not reconciled yet may still answer `none` for
|
|
28
|
+
* a moment.
|
|
29
29
|
*/
|
|
30
30
|
let ReadinessController = class ReadinessController {
|
|
31
31
|
registry;
|
|
@@ -37,7 +37,7 @@ let ReadinessController = class ReadinessController {
|
|
|
37
37
|
async get(principal, org) {
|
|
38
38
|
const visible = await this.agents.listVisible(org.orgId, viewerOf(principal));
|
|
39
39
|
return {
|
|
40
|
-
modelProvider: this.registry.hasProvider() ? "ready" : "none",
|
|
40
|
+
modelProvider: (await this.registry.hasProvider(org.orgId)) ? "ready" : "none",
|
|
41
41
|
agents: visible.length,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
@@ -1,15 +1,96 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { OwnedItems, type OwnedSkillDeletePreview } from "../catalog/owned-items.js";
|
|
3
|
+
import { type Principal } from "../identity/principal.js";
|
|
1
4
|
import { type OrgContext } from "../orgs/org.guard.js";
|
|
5
|
+
import { type AgentTemplateDetail, OrgAgentTemplates, type SaveAsOmission } from "./org-templates.js";
|
|
2
6
|
import { AgentTemplatesService, type AgentTemplateView } from "./templates.js";
|
|
7
|
+
declare const IdParams: z.ZodObject<{
|
|
8
|
+
id: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
declare const AgentIdParams: z.ZodObject<{
|
|
11
|
+
agentId: z.ZodString;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
declare const ShareableBody: z.ZodObject<{
|
|
14
|
+
shareable: z.ZodBoolean;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
declare const SaveAsBody: z.ZodObject<{
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
description: z.ZodString;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
declare const UpdateBody: z.ZodObject<{
|
|
21
|
+
definition: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
22
|
+
expectedVersion: z.ZodNumber;
|
|
23
|
+
}, z.core.$strict>;
|
|
3
24
|
/**
|
|
4
|
-
* The org's agent templates
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
25
|
+
* The org's agent templates (`/api/v1/orgs/:orgId/agent-templates`, phase C spec §17; plugin scope
|
|
26
|
+
* phase 4, rulings P4-9 to P4-13). Reads with `agents.create` (members, people only): the list
|
|
27
|
+
* the agent editor and the 模板 tab show, and one template's detail with its definition. The org's
|
|
28
|
+
* own templates (saved from an agent, `POST orgs/:orgId/agents/:agentId/save-as-template`) are
|
|
29
|
+
* edited, deleted and made 可共享 by the owner org's admins (`agents.manage`, the action that
|
|
30
|
+
* manages agent templates).
|
|
8
31
|
*/
|
|
9
32
|
export declare class AgentTemplatesController {
|
|
10
33
|
private readonly templates;
|
|
11
|
-
|
|
34
|
+
private readonly orgTemplates;
|
|
35
|
+
private readonly owned;
|
|
36
|
+
constructor(templates: AgentTemplatesService, orgTemplates: OrgAgentTemplates, owned: OwnedItems);
|
|
12
37
|
list(org: OrgContext): Promise<{
|
|
13
38
|
templates: AgentTemplateView[];
|
|
14
39
|
}>;
|
|
40
|
+
/**
|
|
41
|
+
* One template usable in the org (an org template, a linked copy, a platform template on in
|
|
42
|
+
* the org) with its definition, owner and the org's flags (`owned`, `shareable`, `promoted`).
|
|
43
|
+
* Not usable here -> 404 `component.not_found`.
|
|
44
|
+
*/
|
|
45
|
+
get(principal: Principal, org: OrgContext, params: z.infer<typeof IdParams>): Promise<{
|
|
46
|
+
template: AgentTemplateDetail;
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* A new version of the org's own template (ruling P4-12): `{ definition, expectedVersion }` ->
|
|
50
|
+
* 200 `{ template }`; a stale version -> 409 `agent_template.version_conflict`; a template the
|
|
51
|
+
* org does not own -> 409 `catalog.not_owned`.
|
|
52
|
+
*/
|
|
53
|
+
update(principal: Principal, org: OrgContext, params: z.infer<typeof IdParams>, body: z.infer<typeof UpdateBody>): Promise<{
|
|
54
|
+
template: AgentTemplateDetail;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* What deleting the org's own template does (nothing written): `outcome` `transferred` when it
|
|
58
|
+
* was shared and another org uses it (`orgs`), else `removed`; `agents` the org's agents whose
|
|
59
|
+
* roster loses it.
|
|
60
|
+
*/
|
|
61
|
+
deletePreview(principal: Principal, org: OrgContext, params: z.infer<typeof IdParams>): Promise<OwnedSkillDeletePreview>;
|
|
62
|
+
/**
|
|
63
|
+
* Deletes the org's own template (the P3 owner rules, ruling P4-12): one it shared that another
|
|
64
|
+
* org uses becomes the platform's (platform notice `ownership_transferred`). 200 `{ outcome }`.
|
|
65
|
+
*/
|
|
66
|
+
remove(principal: Principal, org: OrgContext, params: z.infer<typeof IdParams>): Promise<{
|
|
67
|
+
outcome: "transferred" | "removed";
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* Sets 可共享 on the org's own agent template (`{ shareable }` -> 200 `{ id, shareable }`; an org
|
|
71
|
+
* template, ruling P4-13): a plugin's template or a copy of another owner's platform template
|
|
72
|
+
* -> 409 `catalog.not_owned`; one the org promoted writes its platform row too (ruling P3-2).
|
|
73
|
+
*/
|
|
74
|
+
setShareable(principal: Principal, org: OrgContext, params: z.infer<typeof IdParams>, body: z.infer<typeof ShareableBody>): Promise<{
|
|
75
|
+
id: string;
|
|
76
|
+
shareable: boolean;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 另存为模板 (ruling P4-9; `agents.manage`, org admins): `POST
|
|
81
|
+
* /api/v1/orgs/:orgId/agents/:agentId/save-as-template { name, description }` -> 201
|
|
82
|
+
* `{ template, omitted }`. `template` is the new org template's detail (version 1, the bare
|
|
83
|
+
* `name`); `omitted` lists what the template leaves out (`SaveAsOmission`: allowlisted org agents
|
|
84
|
+
* in the roster, the agent's own skills, connectors and sub-agents no longer usable, entries past
|
|
85
|
+
* a limit). A name the org can already use as a type -> 409 `agent_template.name_taken` (details
|
|
86
|
+
* `[{ owner, templateId }]`). Its own controller: the agents controller is the agent CRUD.
|
|
87
|
+
*/
|
|
88
|
+
export declare class AgentSaveAsTemplateController {
|
|
89
|
+
private readonly orgTemplates;
|
|
90
|
+
constructor(orgTemplates: OrgAgentTemplates);
|
|
91
|
+
saveAs(principal: Principal, org: OrgContext, params: z.infer<typeof AgentIdParams>, body: z.infer<typeof SaveAsBody>): Promise<{
|
|
92
|
+
template: AgentTemplateDetail;
|
|
93
|
+
omitted: SaveAsOmission[];
|
|
94
|
+
}>;
|
|
15
95
|
}
|
|
96
|
+
export {};
|
|
@@ -7,31 +7,195 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { AGENT_TEMPLATE_NAME_RE } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Controller, Delete, Get, Inject, Post, Put } from "@nestjs/common";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { OwnedItems } from "../catalog/owned-items.js";
|
|
14
|
+
import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
|
|
15
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
16
|
+
import { ZBody, ZParam } from "../infra/validation/zod-params.js";
|
|
11
17
|
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
18
|
+
import { OrgAgentTemplates, } from "./org-templates.js";
|
|
12
19
|
import { AgentTemplatesService } from "./templates.js";
|
|
20
|
+
const IdParams = z.object({ id: z.string().min(1).max(100) });
|
|
21
|
+
const AgentIdParams = z.object({ agentId: z.string().min(1).max(100) });
|
|
22
|
+
const ShareableBody = z.object({ shareable: z.boolean() }).strict();
|
|
23
|
+
const SaveAsBody = z
|
|
24
|
+
.object({
|
|
25
|
+
/** The bare template name (the template name rule); unique in the org's usable set. */
|
|
26
|
+
name: z.string().regex(AGENT_TEMPLATE_NAME_RE),
|
|
27
|
+
/** When to use it (trimmed, as a template file's). */
|
|
28
|
+
description: z.string().trim().min(1).max(4096),
|
|
29
|
+
})
|
|
30
|
+
.strict();
|
|
31
|
+
const UpdateBody = z
|
|
32
|
+
.object({
|
|
33
|
+
/** The whole definition (the `AgentTemplate` shape), validated like a template file. */
|
|
34
|
+
definition: z.record(z.string(), z.unknown()),
|
|
35
|
+
/** The `version` the editor read; another one -> 409 `agent_template.version_conflict`. */
|
|
36
|
+
expectedVersion: z.number().int().min(1),
|
|
37
|
+
})
|
|
38
|
+
.strict();
|
|
39
|
+
class AgentTemplateIdParams extends createZodDto(IdParams, "AgentTemplateIdParams") {
|
|
40
|
+
}
|
|
41
|
+
class SaveAsAgentIdParams extends createZodDto(AgentIdParams, "SaveAsAgentIdParams") {
|
|
42
|
+
}
|
|
43
|
+
class AgentTemplateShareableBody extends createZodDto(ShareableBody, "AgentTemplateShareableBody") {
|
|
44
|
+
}
|
|
45
|
+
class SaveAsTemplateBody extends createZodDto(SaveAsBody, "SaveAsTemplateBody") {
|
|
46
|
+
}
|
|
47
|
+
class AgentTemplateUpdateBody extends createZodDto(UpdateBody, "AgentTemplateUpdateBody") {
|
|
48
|
+
}
|
|
49
|
+
const actorOpts = (p) => {
|
|
50
|
+
const tokenId = patTokenId(p);
|
|
51
|
+
return tokenId !== undefined ? { actorTokenId: tokenId } : {};
|
|
52
|
+
};
|
|
13
53
|
/**
|
|
14
|
-
* The org's agent templates
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
54
|
+
* The org's agent templates (`/api/v1/orgs/:orgId/agent-templates`, phase C spec §17; plugin scope
|
|
55
|
+
* phase 4, rulings P4-9 to P4-13). Reads with `agents.create` (members, people only): the list
|
|
56
|
+
* the agent editor and the 模板 tab show, and one template's detail with its definition. The org's
|
|
57
|
+
* own templates (saved from an agent, `POST orgs/:orgId/agents/:agentId/save-as-template`) are
|
|
58
|
+
* edited, deleted and made 可共享 by the owner org's admins (`agents.manage`, the action that
|
|
59
|
+
* manages agent templates).
|
|
18
60
|
*/
|
|
19
61
|
let AgentTemplatesController = class AgentTemplatesController {
|
|
20
62
|
templates;
|
|
21
|
-
|
|
63
|
+
orgTemplates;
|
|
64
|
+
owned;
|
|
65
|
+
constructor(templates, orgTemplates, owned) {
|
|
22
66
|
this.templates = templates;
|
|
67
|
+
this.orgTemplates = orgTemplates;
|
|
68
|
+
this.owned = owned;
|
|
23
69
|
}
|
|
24
70
|
async list(org) {
|
|
25
71
|
return { templates: await this.templates.listForOrg(org.orgId) };
|
|
26
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* One template usable in the org (an org template, a linked copy, a platform template on in
|
|
75
|
+
* the org) with its definition, owner and the org's flags (`owned`, `shareable`, `promoted`).
|
|
76
|
+
* Not usable here -> 404 `component.not_found`.
|
|
77
|
+
*/
|
|
78
|
+
async get(principal, org, params) {
|
|
79
|
+
requireUser(principal);
|
|
80
|
+
return { template: await this.orgTemplates.detail(org.orgId, params.id) };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A new version of the org's own template (ruling P4-12): `{ definition, expectedVersion }` ->
|
|
84
|
+
* 200 `{ template }`; a stale version -> 409 `agent_template.version_conflict`; a template the
|
|
85
|
+
* org does not own -> 409 `catalog.not_owned`.
|
|
86
|
+
*/
|
|
87
|
+
async update(principal, org, params, body) {
|
|
88
|
+
const p = requireUser(principal);
|
|
89
|
+
const template = await this.orgTemplates.update(org.orgId, p.account.id, params.id, body, patTokenId(p));
|
|
90
|
+
return { template };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* What deleting the org's own template does (nothing written): `outcome` `transferred` when it
|
|
94
|
+
* was shared and another org uses it (`orgs`), else `removed`; `agents` the org's agents whose
|
|
95
|
+
* roster loses it.
|
|
96
|
+
*/
|
|
97
|
+
async deletePreview(principal, org, params) {
|
|
98
|
+
requireUser(principal);
|
|
99
|
+
return this.owned.previewAgentTemplateDelete(org.orgId, params.id);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Deletes the org's own template (the P3 owner rules, ruling P4-12): one it shared that another
|
|
103
|
+
* org uses becomes the platform's (platform notice `ownership_transferred`). 200 `{ outcome }`.
|
|
104
|
+
*/
|
|
105
|
+
async remove(principal, org, params) {
|
|
106
|
+
const p = requireUser(principal);
|
|
107
|
+
const outcome = await this.owned.deleteAgentTemplate(org.orgId, p.account.id, params.id, actorOpts(p));
|
|
108
|
+
return { outcome };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Sets 可共享 on the org's own agent template (`{ shareable }` -> 200 `{ id, shareable }`; an org
|
|
112
|
+
* template, ruling P4-13): a plugin's template or a copy of another owner's platform template
|
|
113
|
+
* -> 409 `catalog.not_owned`; one the org promoted writes its platform row too (ruling P3-2).
|
|
114
|
+
*/
|
|
115
|
+
async setShareable(principal, org, params, body) {
|
|
116
|
+
const p = requireUser(principal);
|
|
117
|
+
await this.owned.setShareable(org.orgId, p.account.id, { kind: "agent_template", id: params.id }, body.shareable, actorOpts(p));
|
|
118
|
+
return { id: params.id, shareable: body.shareable };
|
|
119
|
+
}
|
|
27
120
|
};
|
|
28
121
|
__decorate([
|
|
29
122
|
Get(),
|
|
30
123
|
OrgAction("agents.create"),
|
|
31
124
|
__param(0, CurrentOrg())
|
|
32
125
|
], AgentTemplatesController.prototype, "list", null);
|
|
126
|
+
__decorate([
|
|
127
|
+
Get(":id"),
|
|
128
|
+
OrgAction("agents.create"),
|
|
129
|
+
__param(0, CurrentPrincipal()),
|
|
130
|
+
__param(1, CurrentOrg()),
|
|
131
|
+
__param(2, ZParam(AgentTemplateIdParams))
|
|
132
|
+
], AgentTemplatesController.prototype, "get", null);
|
|
133
|
+
__decorate([
|
|
134
|
+
Put(":id"),
|
|
135
|
+
OrgAction("agents.manage"),
|
|
136
|
+
__param(0, CurrentPrincipal()),
|
|
137
|
+
__param(1, CurrentOrg()),
|
|
138
|
+
__param(2, ZParam(AgentTemplateIdParams)),
|
|
139
|
+
__param(3, ZBody(AgentTemplateUpdateBody))
|
|
140
|
+
], AgentTemplatesController.prototype, "update", null);
|
|
141
|
+
__decorate([
|
|
142
|
+
Get(":id/delete-preview"),
|
|
143
|
+
OrgAction("agents.manage"),
|
|
144
|
+
__param(0, CurrentPrincipal()),
|
|
145
|
+
__param(1, CurrentOrg()),
|
|
146
|
+
__param(2, ZParam(AgentTemplateIdParams))
|
|
147
|
+
], AgentTemplatesController.prototype, "deletePreview", null);
|
|
148
|
+
__decorate([
|
|
149
|
+
Delete(":id"),
|
|
150
|
+
OrgAction("agents.manage"),
|
|
151
|
+
__param(0, CurrentPrincipal()),
|
|
152
|
+
__param(1, CurrentOrg()),
|
|
153
|
+
__param(2, ZParam(AgentTemplateIdParams))
|
|
154
|
+
], AgentTemplatesController.prototype, "remove", null);
|
|
155
|
+
__decorate([
|
|
156
|
+
Put(":id/shareable"),
|
|
157
|
+
OrgAction("agents.manage"),
|
|
158
|
+
__param(0, CurrentPrincipal()),
|
|
159
|
+
__param(1, CurrentOrg()),
|
|
160
|
+
__param(2, ZParam(AgentTemplateIdParams)),
|
|
161
|
+
__param(3, ZBody(AgentTemplateShareableBody))
|
|
162
|
+
], AgentTemplatesController.prototype, "setShareable", null);
|
|
33
163
|
AgentTemplatesController = __decorate([
|
|
34
164
|
Controller("api/v1/orgs/:orgId/agent-templates"),
|
|
35
|
-
__param(0, Inject(AgentTemplatesService))
|
|
165
|
+
__param(0, Inject(AgentTemplatesService)),
|
|
166
|
+
__param(1, Inject(OrgAgentTemplates)),
|
|
167
|
+
__param(2, Inject(OwnedItems))
|
|
36
168
|
], AgentTemplatesController);
|
|
37
169
|
export { AgentTemplatesController };
|
|
170
|
+
/**
|
|
171
|
+
* 另存为模板 (ruling P4-9; `agents.manage`, org admins): `POST
|
|
172
|
+
* /api/v1/orgs/:orgId/agents/:agentId/save-as-template { name, description }` -> 201
|
|
173
|
+
* `{ template, omitted }`. `template` is the new org template's detail (version 1, the bare
|
|
174
|
+
* `name`); `omitted` lists what the template leaves out (`SaveAsOmission`: allowlisted org agents
|
|
175
|
+
* in the roster, the agent's own skills, connectors and sub-agents no longer usable, entries past
|
|
176
|
+
* a limit). A name the org can already use as a type -> 409 `agent_template.name_taken` (details
|
|
177
|
+
* `[{ owner, templateId }]`). Its own controller: the agents controller is the agent CRUD.
|
|
178
|
+
*/
|
|
179
|
+
let AgentSaveAsTemplateController = class AgentSaveAsTemplateController {
|
|
180
|
+
orgTemplates;
|
|
181
|
+
constructor(orgTemplates) {
|
|
182
|
+
this.orgTemplates = orgTemplates;
|
|
183
|
+
}
|
|
184
|
+
async saveAs(principal, org, params, body) {
|
|
185
|
+
const p = requireUser(principal);
|
|
186
|
+
return this.orgTemplates.saveAs(org.orgId, p.account.id, params.agentId, body, patTokenId(p));
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
__decorate([
|
|
190
|
+
Post(":agentId/save-as-template"),
|
|
191
|
+
OrgAction("agents.manage"),
|
|
192
|
+
__param(0, CurrentPrincipal()),
|
|
193
|
+
__param(1, CurrentOrg()),
|
|
194
|
+
__param(2, ZParam(SaveAsAgentIdParams)),
|
|
195
|
+
__param(3, ZBody(SaveAsTemplateBody))
|
|
196
|
+
], AgentSaveAsTemplateController.prototype, "saveAs", null);
|
|
197
|
+
AgentSaveAsTemplateController = __decorate([
|
|
198
|
+
Controller("api/v1/orgs/:orgId/agents"),
|
|
199
|
+
__param(0, Inject(OrgAgentTemplates))
|
|
200
|
+
], AgentSaveAsTemplateController);
|
|
201
|
+
export { AgentSaveAsTemplateController };
|