@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
|
@@ -5,26 +5,29 @@ import { type CatalogSkill } from "../../runtime/context/skills.js";
|
|
|
5
5
|
import type { BuiltinCallContext, BuiltinTool } from "../registry.js";
|
|
6
6
|
import { type SandboxToolDeps } from "./sandbox/common.js";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* SKILL.md
|
|
10
|
-
*
|
|
8
|
+
* Builtin tool `Skill` (M5 T14, ruling M17): resolves the name against the latest skills catalog
|
|
9
|
+
* snapshot in the log to an id and version, and returns that version's SKILL.md body and file list
|
|
10
|
+
* (the result names the version). A skill with other files is copied whole into the conversation's
|
|
11
|
+
* environment at `/skills/<name>@<digest>/` (the provider writes as root, commands read only; the
|
|
12
|
+
* digest is {@link skillDigest} of the version's file manifest, so versions of one skill coexist in
|
|
13
|
+
* the shared file system). Without a sandbox provider only the body is given, with a note that
|
|
14
|
+
* scripts are unavailable.
|
|
11
15
|
*
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* - agent
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* 旧版本独有的文件留在原处、记进标记的 `stale`,每次加载都在结果里列出「不属于当前版本、忽略它们」。
|
|
16
|
+
* - Every file read from storage is checked against the manifest's sha256; a mismatch is refused.
|
|
17
|
+
* - The copy is recorded in a kernel-controlled marker, one per skill version
|
|
18
|
+
* ({@link skillMarkerPath}: `/skills/.capybara/<name>@<digest>.json`, commands cannot change it):
|
|
19
|
+
* `{ digest, files }`. A present marker with the same digest skips the copy.
|
|
20
|
+
* - An agent without any sandbox tool creates no sandbox and copies nothing (the model could not
|
|
21
|
+
* run the scripts), and is told so.
|
|
22
|
+
* - Executable bit: files the provider writes are never executable (0644). The result tells the model
|
|
23
|
+
* to run scripts with an interpreter (`sh` / `python3` / `node`).
|
|
21
24
|
*/
|
|
22
25
|
/**
|
|
23
26
|
* 已复制进沙箱的技能的标记目录(内核控制:`/skills` 只有提供方以 root 能写;技能名不以 `.` 开头,不会撞名)。
|
|
24
27
|
*/
|
|
25
28
|
export declare const SKILLS_MARKER_DIR = "/skills/.capybara";
|
|
26
|
-
/**
|
|
27
|
-
export declare const skillMarkerPath: (name: string) => string;
|
|
29
|
+
/** The marker file of one skill version. */
|
|
30
|
+
export declare const skillMarkerPath: (name: string, digest: string) => string;
|
|
28
31
|
/** 依赖:沙箱工具的依赖,加上读技能行用的库与读快照用的日志。 */
|
|
29
32
|
export interface SkillLoadDeps extends SandboxToolDeps {
|
|
30
33
|
db: KernelSchemaDb;
|
|
@@ -44,6 +47,11 @@ export declare function readSkillFile(store: ObjectStore, key: string, file: Ski
|
|
|
44
47
|
* 批准时草稿前缀原样成为版本前缀,版本号变了也能找到),再找本对话发起、仍待批准、前缀相同的技能改动(试用草稿:
|
|
45
48
|
* 没有 `skill_versions` 行,新技能连 `skills` 行都没有)。绝不按版本号解析——被拒绝的草稿与之后别人批准的同号版本
|
|
46
49
|
* 内容不同。都没有 → undefined(已移除)。
|
|
50
|
+
*
|
|
51
|
+
* Phase 2 (ruling D2): a `platform:<prefix>` source is a platform skill version: found by its
|
|
52
|
+
* prefix for the platform skill with the entry's id, or the platform skill an org copy with that id
|
|
53
|
+
* links to (ruling B2), while neither is deleted. The returned `object_prefix` keeps the
|
|
54
|
+
* `platform:` form; `skillFileStore` picks the store for it.
|
|
47
55
|
*/
|
|
48
56
|
export declare function findSkillVersion(db: KernelSchemaDb, ctx: Pick<BuiltinCallContext, "orgId" | "conversationId">, entry: Pick<CatalogSkill, "id" | "source">): Promise<{
|
|
49
57
|
manifest: SkillManifest;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { parseSkillMd, renderSkillBody, SKILL_ENTRY_FILE, SKILL_INVOCATION_LIMITS, SKILLS_SANDBOX_ROOT, skillSandboxPath, ToolError, } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { parseSkillMd, renderSkillBody, SKILL_ENTRY_FILE, SKILL_INVOCATION_LIMITS, SKILLS_SANDBOX_ROOT, skillDigest, skillSandboxDir, skillSandboxPath, ToolError, } from "@capybara-hq/plugin-sdk";
|
|
3
3
|
import { sql } from "kysely";
|
|
4
4
|
import { normalizeStoredDefinition } from "../../agents/definition.js";
|
|
5
5
|
import { ApiError } from "../../errors.js";
|
|
@@ -7,29 +7,33 @@ import { latestInvocation } from "../../runtime/context/skills.js";
|
|
|
7
7
|
import { dispatchOfChildRun } from "../../runtime/subagents/child.js";
|
|
8
8
|
import { resolveSkillForkType } from "../../runtime/subagents/roster.js";
|
|
9
9
|
import { invocationOf, resolveSkills } from "../../skills/catalog.js";
|
|
10
|
+
import { PLATFORM_SOURCE, skillFileStore } from "../../skills/usable.js";
|
|
10
11
|
import { AGENT_TOOL, SANDBOX_TOOL_NAMES } from "../builtin-names.js";
|
|
11
12
|
import { clip, display, inSandbox, sandboxBaseTimeoutMs, withNotices, withPathLease, } from "./sandbox/common.js";
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
* SKILL.md
|
|
15
|
-
*
|
|
14
|
+
* Builtin tool `Skill` (M5 T14, ruling M17): resolves the name against the latest skills catalog
|
|
15
|
+
* snapshot in the log to an id and version, and returns that version's SKILL.md body and file list
|
|
16
|
+
* (the result names the version). A skill with other files is copied whole into the conversation's
|
|
17
|
+
* environment at `/skills/<name>@<digest>/` (the provider writes as root, commands read only; the
|
|
18
|
+
* digest is {@link skillDigest} of the version's file manifest, so versions of one skill coexist in
|
|
19
|
+
* the shared file system). Without a sandbox provider only the body is given, with a note that
|
|
20
|
+
* scripts are unavailable.
|
|
16
21
|
*
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* - agent
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* 旧版本独有的文件留在原处、记进标记的 `stale`,每次加载都在结果里列出「不属于当前版本、忽略它们」。
|
|
22
|
+
* - Every file read from storage is checked against the manifest's sha256; a mismatch is refused.
|
|
23
|
+
* - The copy is recorded in a kernel-controlled marker, one per skill version
|
|
24
|
+
* ({@link skillMarkerPath}: `/skills/.capybara/<name>@<digest>.json`, commands cannot change it):
|
|
25
|
+
* `{ digest, files }`. A present marker with the same digest skips the copy.
|
|
26
|
+
* - An agent without any sandbox tool creates no sandbox and copies nothing (the model could not
|
|
27
|
+
* run the scripts), and is told so.
|
|
28
|
+
* - Executable bit: files the provider writes are never executable (0644). The result tells the model
|
|
29
|
+
* to run scripts with an interpreter (`sh` / `python3` / `node`).
|
|
26
30
|
*/
|
|
27
31
|
/**
|
|
28
32
|
* 已复制进沙箱的技能的标记目录(内核控制:`/skills` 只有提供方以 root 能写;技能名不以 `.` 开头,不会撞名)。
|
|
29
33
|
*/
|
|
30
34
|
export const SKILLS_MARKER_DIR = `${SKILLS_SANDBOX_ROOT}/.capybara`;
|
|
31
|
-
/**
|
|
32
|
-
export const skillMarkerPath = (name) => `${SKILLS_MARKER_DIR}/${name}.json`;
|
|
35
|
+
/** The marker file of one skill version. */
|
|
36
|
+
export const skillMarkerPath = (name, digest) => `${SKILLS_MARKER_DIR}/${name}@${digest}.json`;
|
|
33
37
|
const MARKER_MAX_BYTES = 256 * 1024;
|
|
34
38
|
/** 结果里最多列出的文件数(其余只给数量)。 */
|
|
35
39
|
const MAX_LISTED_FILES = 200;
|
|
@@ -42,9 +46,8 @@ const SPEC = {
|
|
|
42
46
|
description: "Load a skill from the skills list: returns the skill's instructions " +
|
|
43
47
|
"(its SKILL.md) and the list of its files. Call it before starting a task that matches a " +
|
|
44
48
|
"skill's description, then follow the returned instructions. If the skill has scripts or other " +
|
|
45
|
-
"files, they are copied read-only to /skills/<name>/ in this
|
|
46
|
-
"there with an interpreter (sh, python3, node). Call it again when the skills list changes
|
|
47
|
-
"the sandbox was recreated. Pass args when the task gives the skill arguments (they replace " +
|
|
49
|
+
"files, they are copied read-only to /skills/<name>@<version-id>/ in this environment; run scripts " +
|
|
50
|
+
"there with an interpreter (sh, python3, node). Call it again when the skills list changes. Pass args when the task gives the skill arguments (they replace " +
|
|
48
51
|
"$ARGUMENTS and $1, $2… in the instructions). Do not use it for skills that are not in the list.",
|
|
49
52
|
inputSchema: {
|
|
50
53
|
type: "object",
|
|
@@ -79,22 +82,20 @@ const removedText = (name) => `Skill "${name}" was removed after the skills list
|
|
|
79
82
|
const forkAvailableText = (type) => `This skill is written to run in a sub-agent: call Agent with subagent_type "${type}" and a prompt containing these instructions and the details of the task, then use its report; do not follow the instructions yourself.`;
|
|
80
83
|
const FORK_UNAVAILABLE_TEXT = "This skill is written to run in a sub-agent, which is not available here; follow the instructions yourself.";
|
|
81
84
|
const integrityText = (name) => `Skill "${name}" failed an integrity check (its stored files do not match the uploaded package); ask an administrator to upload the skill again.`;
|
|
82
|
-
|
|
83
|
-
/** 解析一个技能的标记文件;坏的按没有处理(重新复制)。 */
|
|
85
|
+
/** Parses a version's marker; a broken one counts as missing (the version is copied again). */
|
|
84
86
|
function parseMarker(data) {
|
|
85
87
|
try {
|
|
86
88
|
const r = JSON.parse(new TextDecoder().decode(data));
|
|
87
89
|
if (r === null || typeof r !== "object" || Array.isArray(r))
|
|
88
90
|
return undefined;
|
|
89
91
|
const e = r;
|
|
90
|
-
if (typeof e.
|
|
92
|
+
if (typeof e.digest !== "string")
|
|
91
93
|
return undefined;
|
|
92
94
|
return {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
stale: strings(e.stale),
|
|
95
|
+
digest: e.digest,
|
|
96
|
+
files: Array.isArray(e.files)
|
|
97
|
+
? e.files.filter((x) => typeof x === "string")
|
|
98
|
+
: [],
|
|
98
99
|
};
|
|
99
100
|
}
|
|
100
101
|
catch {
|
|
@@ -156,34 +157,25 @@ async function readVerified(store, key, file, skill, signal) {
|
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
159
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
160
|
+
* Copies the skill version whole to `/skills/<name>@<digest>/` (skipped when its marker matches).
|
|
161
|
+
* Every file is checked against the manifest before it is written; the marker is written last, so
|
|
162
|
+
* a failure midway means the next call starts over.
|
|
161
163
|
*/
|
|
162
164
|
async function copySkill(s, v) {
|
|
163
|
-
const { name
|
|
164
|
-
const markerPath = skillMarkerPath(name);
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
cur = parseMarker(m.data);
|
|
170
|
-
}
|
|
171
|
-
if (cur && cur.id === id && cur.version === version && cur.prefix === v.prefix) {
|
|
172
|
-
return { stale: cur.stale };
|
|
173
|
-
}
|
|
165
|
+
const { name } = v.entry;
|
|
166
|
+
const markerPath = skillMarkerPath(name, v.digest);
|
|
167
|
+
const m = await s.p.readFile(s.h, markerPath, { maxBytes: MARKER_MAX_BYTES, signal: s.signal });
|
|
168
|
+
const cur = m && !m.truncated ? parseMarker(m.data) : undefined;
|
|
169
|
+
if (cur?.digest === v.digest)
|
|
170
|
+
return;
|
|
174
171
|
for (const f of v.manifest.files) {
|
|
175
172
|
const data = f.path === SKILL_ENTRY_FILE
|
|
176
173
|
? v.entryBytes
|
|
177
|
-
: await readVerified(v.store, `${v.
|
|
178
|
-
await s.p.writeFile(s.h, skillSandboxPath(name, f.path), data, s.signal);
|
|
174
|
+
: await readVerified(v.store, `${v.keyPrefix}${f.path}`, f, name, s.signal);
|
|
175
|
+
await s.p.writeFile(s.h, skillSandboxPath(name, v.digest, f.path), data, s.signal);
|
|
179
176
|
}
|
|
180
|
-
const
|
|
181
|
-
const now = new Set(files);
|
|
182
|
-
const stale = cur ? [...new Set([...cur.stale, ...cur.files])].filter((p) => !now.has(p)) : [];
|
|
183
|
-
stale.sort();
|
|
184
|
-
const entry = { id, version, prefix: v.prefix, files, stale };
|
|
177
|
+
const entry = { digest: v.digest, files: v.manifest.files.map((f) => f.path) };
|
|
185
178
|
await s.p.writeFile(s.h, markerPath, new TextEncoder().encode(JSON.stringify(entry)), s.signal);
|
|
186
|
-
return { stale };
|
|
187
179
|
}
|
|
188
180
|
/** 本步可用的工具里是否有沙箱工具(没有时模型用不了复制进去的文件)。 */
|
|
189
181
|
const hasSandboxTools = (ctx) => (ctx.tools ?? []).some((t) => t.source.kind === "builtin" &&
|
|
@@ -200,8 +192,15 @@ function fileList(files) {
|
|
|
200
192
|
* 批准时草稿前缀原样成为版本前缀,版本号变了也能找到),再找本对话发起、仍待批准、前缀相同的技能改动(试用草稿:
|
|
201
193
|
* 没有 `skill_versions` 行,新技能连 `skills` 行都没有)。绝不按版本号解析——被拒绝的草稿与之后别人批准的同号版本
|
|
202
194
|
* 内容不同。都没有 → undefined(已移除)。
|
|
195
|
+
*
|
|
196
|
+
* Phase 2 (ruling D2): a `platform:<prefix>` source is a platform skill version: found by its
|
|
197
|
+
* prefix for the platform skill with the entry's id, or the platform skill an org copy with that id
|
|
198
|
+
* links to (ruling B2), while neither is deleted. The returned `object_prefix` keeps the
|
|
199
|
+
* `platform:` form; `skillFileStore` picks the store for it.
|
|
203
200
|
*/
|
|
204
201
|
export async function findSkillVersion(db, ctx, entry) {
|
|
202
|
+
if (entry.source.startsWith(PLATFORM_SOURCE))
|
|
203
|
+
return findPlatformVersion(db, ctx.orgId, entry);
|
|
205
204
|
const row = await db
|
|
206
205
|
.selectFrom("skills")
|
|
207
206
|
.innerJoin("skill_versions", "skill_versions.skill_id", "skills.id")
|
|
@@ -225,6 +224,29 @@ export async function findSkillVersion(db, ctx, entry) {
|
|
|
225
224
|
return undefined;
|
|
226
225
|
return { manifest: draft.proposed_version.manifest, object_prefix: draft.object_prefix };
|
|
227
226
|
}
|
|
227
|
+
/** {@link findSkillVersion} for a `platform:<prefix>` source. */
|
|
228
|
+
async function findPlatformVersion(db, orgId, entry) {
|
|
229
|
+
const row = await db
|
|
230
|
+
.selectFrom("platform_skill_versions as v")
|
|
231
|
+
.innerJoin("platform_skills as p", "p.id", "v.skill_id")
|
|
232
|
+
.select(["v.manifest"])
|
|
233
|
+
.where("v.object_prefix", "=", entry.source.slice(PLATFORM_SOURCE.length))
|
|
234
|
+
.where("p.deleted_at", "is", null)
|
|
235
|
+
// a platform skill disabled on the deployment is not loaded, even from an older snapshot
|
|
236
|
+
.where("p.disabled", "=", false)
|
|
237
|
+
.where((eb) => eb.or([
|
|
238
|
+
eb("p.id", "=", entry.id),
|
|
239
|
+
eb("p.id", "in", eb
|
|
240
|
+
.selectFrom("skills")
|
|
241
|
+
.select("platform_skill_id")
|
|
242
|
+
.where("id", "=", entry.id)
|
|
243
|
+
.where("org_id", "=", orgId)
|
|
244
|
+
.where("deleted_at", "is", null)
|
|
245
|
+
.where("platform_skill_id", "is not", null)),
|
|
246
|
+
]))
|
|
247
|
+
.executeTakeFirst();
|
|
248
|
+
return row && { manifest: row.manifest, object_prefix: entry.source };
|
|
249
|
+
}
|
|
228
250
|
/** A Claude Code style qualified name `<plugin>:<skill>` (phase B, spec §9.3). */
|
|
229
251
|
const QUALIFIED_NAME_RE = /^([a-z0-9][a-z0-9-]{0,63}):(.+)$/;
|
|
230
252
|
/**
|
|
@@ -385,13 +407,23 @@ export function skillLoadTool(deps) {
|
|
|
385
407
|
if (!row)
|
|
386
408
|
throw new ToolError(removedText(name));
|
|
387
409
|
const manifest = row.manifest;
|
|
388
|
-
|
|
410
|
+
// the marker records the source (`platform:` included); keys use the store's own prefix
|
|
389
411
|
const prefix = row.object_prefix;
|
|
412
|
+
const { store, prefix: keyPrefix } = skillFileStore(deps.storage, ctx.orgId, prefix);
|
|
390
413
|
const md = manifest.files.find((f) => f.path === SKILL_ENTRY_FILE);
|
|
391
414
|
if (!md)
|
|
392
415
|
throw new ToolError(integrityText(name));
|
|
393
|
-
const mdBytes = await readVerified(store, `${
|
|
394
|
-
const
|
|
416
|
+
const mdBytes = await readVerified(store, `${keyPrefix}${md.path}`, md, name, ctx.signal);
|
|
417
|
+
const digest = skillDigest(manifest.files);
|
|
418
|
+
const v = {
|
|
419
|
+
entry,
|
|
420
|
+
manifest,
|
|
421
|
+
digest,
|
|
422
|
+
prefix,
|
|
423
|
+
keyPrefix,
|
|
424
|
+
store,
|
|
425
|
+
entryBytes: mdBytes,
|
|
426
|
+
};
|
|
395
427
|
let parsed;
|
|
396
428
|
try {
|
|
397
429
|
parsed = parseSkillMd(new TextDecoder("utf-8", { fatal: true }).decode(mdBytes), {
|
|
@@ -403,7 +435,7 @@ export function skillLoadTool(deps) {
|
|
|
403
435
|
}
|
|
404
436
|
if ("errors" in parsed)
|
|
405
437
|
throw new ToolError(integrityText(name));
|
|
406
|
-
const dir = `${
|
|
438
|
+
const dir = `${skillSandboxDir(name, digest)}/`;
|
|
407
439
|
const others = manifest.files.filter((f) => f.path !== SKILL_ENTRY_FILE);
|
|
408
440
|
let notices = [];
|
|
409
441
|
let filesText;
|
|
@@ -425,22 +457,19 @@ export function skillLoadTool(deps) {
|
|
|
425
457
|
}
|
|
426
458
|
else {
|
|
427
459
|
// the skill's marker is read, compared and written: one holder at a time per skill
|
|
428
|
-
const r = await inSandbox(deps, ctx, (s) => withPathLease(deps,
|
|
460
|
+
const r = await inSandbox(deps, ctx, (s) => withPathLease(deps, s, skillMarkerPath(name, digest), s.signal, (signal) => copySkill({ ...s, signal }, v)));
|
|
429
461
|
notices = r.notices;
|
|
430
|
-
const stale = r.value.stale.length > 0
|
|
431
|
-
? `\nFiles left over from an earlier version (not part of this version; ignore them): ${r.value.stale.join(", ")}`
|
|
432
|
-
: "";
|
|
433
462
|
filesText =
|
|
434
463
|
`Skill files (copied to ${dir} in the sandbox, read-only):\n${fileList(manifest.files)}\n` +
|
|
435
464
|
`Run scripts with an interpreter, e.g. \`sh ${dir}<script>.sh\`, \`python3 ${dir}<script>.py\` ` +
|
|
436
465
|
"or `node`; the files are not executable, so `./script` does not work. Write outputs under " +
|
|
437
|
-
`/workspace, not ${SKILLS_SANDBOX_ROOT}
|
|
466
|
+
`/workspace, not ${SKILLS_SANDBOX_ROOT}.`;
|
|
438
467
|
}
|
|
439
468
|
const invocation = invocationOf(manifest);
|
|
440
469
|
const fork = invocation.fork;
|
|
441
470
|
let instructions;
|
|
442
471
|
try {
|
|
443
|
-
instructions = renderSkillBody(parsed.body.trim(), invocation, args ?? "", name);
|
|
472
|
+
instructions = renderSkillBody(parsed.body.trim(), invocation, args ?? "", name, digest);
|
|
444
473
|
}
|
|
445
474
|
catch (e) {
|
|
446
475
|
if (!(e instanceof RangeError))
|
|
@@ -29,7 +29,7 @@ const SPEC = {
|
|
|
29
29
|
"user-invocable, context, agent, argument-hint and arguments, which are kept; with " +
|
|
30
30
|
"disable-model-invocation: true only a person can invoke the skill and you cannot load it). " +
|
|
31
31
|
"Every other entry in `files` is stored at " +
|
|
32
|
-
"/skills/<name>/<path
|
|
32
|
+
"/skills/<name>@<version-id>/<path> once loaded. Files of the previous version that you leave out are not part of the new " +
|
|
33
33
|
"version. Text files only, at most 1 MB per skill in total. Use an existing skill's name to update " +
|
|
34
34
|
"it; an organization skill with the same name is shadowed by this agent's own skill. On a private " +
|
|
35
35
|
"agent the new version takes effect immediately. On a shared agent the change is sent to the " +
|
|
@@ -209,7 +209,11 @@ async function logUsage(deps, ctx, runId, step, u) {
|
|
|
209
209
|
callId: ctx.callId,
|
|
210
210
|
},
|
|
211
211
|
};
|
|
212
|
-
const written = await appendCounted(deps, {
|
|
212
|
+
const written = await appendCounted(deps, {
|
|
213
|
+
conversationId: ctx.conversationId,
|
|
214
|
+
parentRunId: ctx.parentRunId,
|
|
215
|
+
budgetRunId: ctx.budgetRunId,
|
|
216
|
+
}, [event]);
|
|
213
217
|
const usage = written.find((e) => e.type === "usage");
|
|
214
218
|
if (usage)
|
|
215
219
|
void deps.usageReport?.enqueue(ctx.conversationId, usage.seq);
|
|
@@ -185,6 +185,7 @@ export function webSearchTool(deps) {
|
|
|
185
185
|
...(blocked !== undefined && blocked.length > 0 && { blockedDomains: blocked }),
|
|
186
186
|
maxResults: max,
|
|
187
187
|
orgConfig: resolved.orgConfig,
|
|
188
|
+
config: resolved.config,
|
|
188
189
|
signal: ctx.signal,
|
|
189
190
|
});
|
|
190
191
|
results = Array.isArray(out?.results) ? out.results : [];
|
|
@@ -174,6 +174,16 @@ export declare class ConnectorsController {
|
|
|
174
174
|
list(org: OrgContext): Promise<{
|
|
175
175
|
connectors: ConnectorSummary[];
|
|
176
176
|
}>;
|
|
177
|
+
/**
|
|
178
|
+
* The connector kinds the org can create connectors of, each with the plugin providing it (the
|
|
179
|
+
* install wizard offers only these; an empty list means no connector extension is enabled).
|
|
180
|
+
*/
|
|
181
|
+
kinds(org: OrgContext): Promise<{
|
|
182
|
+
kinds: {
|
|
183
|
+
kind: string;
|
|
184
|
+
plugin: string;
|
|
185
|
+
}[];
|
|
186
|
+
}>;
|
|
177
187
|
create(principal: Principal, org: OrgContext, body: z.infer<typeof CreateBody>): Promise<{
|
|
178
188
|
connector: ConnectorDetail;
|
|
179
189
|
issues: ToolIssue[];
|
|
@@ -99,6 +99,13 @@ let ConnectorsController = class ConnectorsController {
|
|
|
99
99
|
async list(org) {
|
|
100
100
|
return { connectors: (await this.connectors.list(org.orgId)).map((a) => forViewer(org, a)) };
|
|
101
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* The connector kinds the org can create connectors of, each with the plugin providing it (the
|
|
104
|
+
* install wizard offers only these; an empty list means no connector extension is enabled).
|
|
105
|
+
*/
|
|
106
|
+
async kinds(org) {
|
|
107
|
+
return { kinds: await this.connectors.kinds(org.orgId) };
|
|
108
|
+
}
|
|
102
109
|
async create(principal, org, body) {
|
|
103
110
|
const p = requireUser(principal);
|
|
104
111
|
return this.connectors.create(org.orgId, p.account.id, body, patTokenId(p));
|
|
@@ -156,6 +163,11 @@ __decorate([
|
|
|
156
163
|
OrgAction("connectors.use"),
|
|
157
164
|
__param(0, CurrentOrg())
|
|
158
165
|
], ConnectorsController.prototype, "list", null);
|
|
166
|
+
__decorate([
|
|
167
|
+
Get("kinds"),
|
|
168
|
+
OrgAction("connectors.manage"),
|
|
169
|
+
__param(0, CurrentOrg())
|
|
170
|
+
], ConnectorsController.prototype, "kinds", null);
|
|
159
171
|
__decorate([
|
|
160
172
|
Post(),
|
|
161
173
|
OrgAction("connectors.manage"),
|
|
@@ -15,6 +15,8 @@ type ToolSource = "connector" | "resources";
|
|
|
15
15
|
export interface ConnectorToolView {
|
|
16
16
|
name: string;
|
|
17
17
|
key: string;
|
|
18
|
+
/** The reviewed definition's display-only title (`ToolSpec.title`), or null. */
|
|
19
|
+
title: string | null;
|
|
18
20
|
description: string;
|
|
19
21
|
inputSchema: Record<string, unknown>;
|
|
20
22
|
annotations: ToolAnnotations | null;
|
|
@@ -59,6 +61,11 @@ export interface ConnectorSummary {
|
|
|
59
61
|
endpoint: unknown;
|
|
60
62
|
auth: ConnectorAuth;
|
|
61
63
|
status: "active" | "disabled";
|
|
64
|
+
/**
|
|
65
|
+
* The platform connector template it was made from (`connectors.platform_template_id`), null for
|
|
66
|
+
* a custom one: the web offers it for a pending connector of that template (ruling P4-7).
|
|
67
|
+
*/
|
|
68
|
+
platformTemplateId: string | null;
|
|
62
69
|
createdBy: string;
|
|
63
70
|
createdAt: Date;
|
|
64
71
|
updatedAt: Date;
|
|
@@ -79,7 +86,7 @@ export interface CreateConnectorInput {
|
|
|
79
86
|
auth: ConnectorAuth;
|
|
80
87
|
credential?: unknown;
|
|
81
88
|
/**
|
|
82
|
-
* Install from
|
|
89
|
+
* Install from a platform catalog connector template (T26, filled in by the catalog service,
|
|
83
90
|
* not accepted over HTTP): the connector records its source item and version, the item policy is
|
|
84
91
|
* re-checked in the transaction (a template inside an app passes the app item); once the tool
|
|
85
92
|
* snapshot exists, `defaultToolPolicies` set the default policies (`policy_source 'template'`).
|
|
@@ -87,6 +94,17 @@ export interface CreateConnectorInput {
|
|
|
87
94
|
* (`catalog.custom_disabled`).
|
|
88
95
|
*/
|
|
89
96
|
template?: ConnectorTemplateRef | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* The name and slug are chosen under the org lock (one more connector from a template, ruling
|
|
99
|
+
* P4-T6-10; not accepted over HTTP; `slug` must be absent): the first free of `name` (else
|
|
100
|
+
* `display`) with its derived slug, then `<display> 2` with `_2`, `3` with `_3`, … (a given
|
|
101
|
+
* `name` is kept, only its slug suffixed), among the org's live connectors and the installed
|
|
102
|
+
* plugins' names. Chosen after the outbound calls, so a race never repeats them.
|
|
103
|
+
*/
|
|
104
|
+
slugDefault?: {
|
|
105
|
+
display: string;
|
|
106
|
+
name?: string | undefined;
|
|
107
|
+
} | undefined;
|
|
90
108
|
}
|
|
91
109
|
/** 连接器来自哪个目录条目的哪个模板。 */
|
|
92
110
|
export interface ConnectorTemplateRef {
|
|
@@ -97,10 +115,16 @@ export interface ConnectorTemplateRef {
|
|
|
97
115
|
defaultToolPolicies?: Record<string, ToolPolicy> | undefined;
|
|
98
116
|
/** The item whose policy approves this install (a dependency's template: the installed plugin). */
|
|
99
117
|
approvedBy?: string | undefined;
|
|
118
|
+
/**
|
|
119
|
+
* One more connector from a platform connector template (ruling P4-T6-8): the template must be
|
|
120
|
+
* on in the org, re-checked under the org lock (`component.off` / `component.not_found`).
|
|
121
|
+
*/
|
|
122
|
+
mustBeOn?: boolean | undefined;
|
|
100
123
|
}
|
|
101
124
|
/**
|
|
102
|
-
* A connector updated to another version of its catalog template (
|
|
103
|
-
*
|
|
125
|
+
* A connector updated to another version of its catalog template (the platform plugin update fans
|
|
126
|
+
* a changed template out to every connector with its `platform_template_id`, ruling E2): only
|
|
127
|
+
* template-owned fields change (endpoint preset, auth preset, default tool
|
|
104
128
|
* policies still at the template default); the name, slug, status, tools and credentials stay,
|
|
105
129
|
* unless `resetCredentials`.
|
|
106
130
|
*/
|
|
@@ -199,6 +223,11 @@ export declare class ConnectorsService {
|
|
|
199
223
|
*/
|
|
200
224
|
private parseEndpoint;
|
|
201
225
|
private slugTaken;
|
|
226
|
+
/**
|
|
227
|
+
* The first free default name and slug ({@link CreateConnectorInput.slugDefault}), read in the
|
|
228
|
+
* caller's transaction under the org lock.
|
|
229
|
+
*/
|
|
230
|
+
private freeName;
|
|
202
231
|
private resolveSlug;
|
|
203
232
|
/**
|
|
204
233
|
* OAuth 连接器安装前的准备(A16):授权码流按 `discovery` 取端点(MCP 发现或手填)、按 `client` 动态注册或用请求里
|
|
@@ -231,7 +260,7 @@ export declare class ConnectorsService {
|
|
|
231
260
|
/** The org-locked, re-checked insert of {@link create} (the outbound checks ran before). */
|
|
232
261
|
private createIn;
|
|
233
262
|
/**
|
|
234
|
-
* Checks a template update before anything is written (
|
|
263
|
+
* Checks a template update before anything is written (the platform plugin update): the endpoint
|
|
235
264
|
* against the connector's schema, and with `resetCredentials` the new credential's shape, or for
|
|
236
265
|
* OAuth the client setup (discovery, dynamic registration or the client credentials token; an
|
|
237
266
|
* outbound failure -> 502 `connector.connect_failed`). Writes nothing.
|
|
@@ -247,6 +276,16 @@ export declare class ConnectorsService {
|
|
|
247
276
|
* Audits `connector.template_applied`. Deleted / missing -> `connector.not_found`.
|
|
248
277
|
*/
|
|
249
278
|
applyTemplateIn(orgId: string, connectorId: string, actorAccountId: string, p: PreparedTemplateUpdate, actorTokenId?: string): Promise<void>;
|
|
279
|
+
/** Refuses a loaded kind whose extension is not enabled in the org (the same notion as {@link kinds}). */
|
|
280
|
+
private assertKindAvailable;
|
|
281
|
+
/**
|
|
282
|
+
* The connector kinds the org can create connectors of (the install wizard's protocol step): a
|
|
283
|
+
* kind is listed when its `connector@1` extension is loaded and enabled in the org.
|
|
284
|
+
*/
|
|
285
|
+
kinds(orgId: string): Promise<{
|
|
286
|
+
kind: string;
|
|
287
|
+
plugin: string;
|
|
288
|
+
}[]>;
|
|
250
289
|
/**
|
|
251
290
|
* Previews a connector (Ruling A20, for the install wizard): after checking the connector, the
|
|
252
291
|
* endpoint (credential pattern check included) and the credential shape, reads the endpoint
|
|
@@ -275,7 +314,9 @@ export declare class ConnectorsService {
|
|
|
275
314
|
* 在调用方事务里软删除连接器(调用方已锁组织行并按需复核角色;应用安装的回滚与卸载用):删全部凭据与授权,
|
|
276
315
|
* 审计 `connector.deleted`(`reason` 并进 detail)。已删除 / 不存在 → `connector.not_found`。
|
|
277
316
|
*/
|
|
278
|
-
removeIn(orgId: string, connectorId: string,
|
|
317
|
+
removeIn(orgId: string, connectorId: string,
|
|
318
|
+
/** null: the kernel itself (the plugin scope sync uninstalling a plugin). */
|
|
319
|
+
actorAccountId: string | null, actorTokenId?: string, reason?: string): Promise<void>;
|
|
279
320
|
/**
|
|
280
321
|
* 重新 listTools 并按漂移检测的规则比对写入(见 drift.ts):新增 / 定义变化的工具待复核(旧定义保留供对比),
|
|
281
322
|
* 消失的工具停用;连接器从未拍过快照时首个快照直接启用。
|