@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +61 -5
- package/dist/admin/admin.controller.d.ts +47 -16
- package/dist/admin/admin.controller.js +44 -19
- package/dist/admin/extensions.controller.d.ts +24 -3
- package/dist/admin/extensions.controller.js +48 -8
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +19 -0
- package/dist/agents/agent-lookup.js +21 -0
- package/dist/agents/agent-profile.service.d.ts +29 -0
- package/dist/agents/agent-profile.service.js +117 -0
- package/dist/agents/agents.controller.d.ts +168 -3
- package/dist/agents/agents.controller.js +201 -12
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +36 -6
- package/dist/agents/agents.service.d.ts +64 -27
- package/dist/agents/agents.service.js +199 -74
- package/dist/agents/definition.d.ts +53 -0
- package/dist/agents/definition.js +55 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +9 -3
- package/dist/agents/models.controller.js +19 -4
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +96 -0
- package/dist/agents/profile.js +51 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +476 -53
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +87 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +94 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +36 -0
- package/dist/background/launch.js +70 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +190 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +79 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +243 -0
- package/dist/background/store.d.ts +162 -0
- package/dist/background/store.js +357 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +211 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/claude/agents.js +2 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +221 -0
- package/dist/catalog/platform-components.js +761 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +178 -34
- package/dist/catalog/plugin-import.js +623 -83
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1148 -1137
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.js +1 -0
- package/dist/channels/cards.js +21 -3
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/connections.service.d.ts +16 -1
- package/dist/channels/connections.service.js +38 -4
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +24 -2
- package/dist/config/schema.js +145 -19
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -23
- package/dist/conversations/conversations.controller.js +141 -50
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.service.d.ts +108 -9
- package/dist/conversations/conversations.service.js +237 -30
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +21 -6
- package/dist/conversations/event-log.js +70 -1
- package/dist/conversations/events.d.ts +140 -0
- package/dist/conversations/events.js +142 -13
- package/dist/conversations/queue.d.ts +3 -1
- package/dist/conversations/queue.js +13 -2
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +8 -1
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +36 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +420 -20
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +90 -2
- package/dist/errors.js +90 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +7 -2
- package/dist/evals/run-replay.js +42 -7
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +13 -7
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +67 -42
- package/dist/extensions/admin-view.d.ts +39 -10
- package/dist/extensions/admin-view.js +111 -20
- package/dist/extensions/blobs.js +1 -0
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +6 -0
- package/dist/extensions/deployment-config.d.ts +78 -8
- package/dist/extensions/deployment-config.js +172 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +14 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +45 -2
- package/dist/extensions/host.js +112 -16
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +81 -6
- package/dist/extensions/org-config.js +195 -44
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +19 -4
- package/dist/extensions/permission-view.js +4 -4
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +34 -0
- package/dist/extensions/point-defaults.controller.js +71 -0
- package/dist/extensions/point-defaults.d.ts +71 -0
- package/dist/extensions/point-defaults.js +234 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +31 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/cookies.d.ts +20 -5
- package/dist/identity/cookies.js +44 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.d.ts +5 -1
- package/dist/identity/me.controller.js +12 -3
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +27 -1
- package/dist/infra/database/database.module.js +1 -0
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +19 -2
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +43 -9
- package/dist/models/purposes.js +48 -18
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +20 -3
- package/dist/orgs/settings.service.js +19 -4
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1387 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +15 -1
- package/dist/runtime/context/build.d.ts +11 -7
- package/dist/runtime/context/build.js +46 -19
- package/dist/runtime/context/claude-tools.d.ts +3 -1
- package/dist/runtime/context/claude-tools.js +8 -6
- package/dist/runtime/context/compaction.js +13 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +34 -5
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +46 -8
- package/dist/runtime/model-call.js +72 -21
- package/dist/runtime/providers.d.ts +6 -0
- package/dist/runtime/providers.js +8 -0
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +59 -2
- package/dist/runtime/run-queue.js +311 -38
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +69 -33
- package/dist/runtime/runtime.module.js +11 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +44 -28
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- package/dist/runtime/usage-report.d.ts +2 -1
- package/dist/runtime/usage-report.js +19 -13
- package/dist/runtime/waits.d.ts +145 -36
- package/dist/runtime/waits.js +423 -109
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +282 -129
- package/dist/sandbox/sandbox.service.js +736 -381
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +25 -4
- package/dist/tools/builtin-names.d.ts +41 -7
- package/dist/tools/builtin-names.js +59 -7
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +19 -1
- package/dist/tools/builtins/builtin-tools.js +59 -2
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
- package/dist/tools/builtins/sandbox/bash.js +241 -4
- package/dist/tools/builtins/sandbox/common.d.ts +69 -27
- package/dist/tools/builtins/sandbox/common.js +87 -48
- package/dist/tools/builtins/sandbox/deliver.js +1 -1
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +3 -1
- package/dist/tools/builtins/sandbox/index.js +7 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
- package/dist/tools/builtins/sandbox/task-output.js +329 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.js +2 -2
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +202 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +120 -8
- package/dist/tools/registry.js +112 -19
- package/dist/tools/tools.module.js +24 -2
- package/dist/tools/validate.js +1 -1
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -62
package/dist/orgs/org.guard.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { type CanActivate, type ExecutionContext } from "@nestjs/common";
|
|
2
2
|
import { Reflector } from "@nestjs/core";
|
|
3
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
|
+
import { type Principal } from "../identity/principal.js";
|
|
3
5
|
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
4
6
|
import { type OrgAction as Action, type OrgRole } from "./roles.js";
|
|
5
7
|
/** OrgGuard 放在请求上的组织上下文。 */
|
|
@@ -21,6 +23,14 @@ export declare const ORG_ACTION_KEY = "capybara:org:action";
|
|
|
21
23
|
export declare function OrgAction(action: Action): MethodDecorator & ClassDecorator;
|
|
22
24
|
/** 参数装饰器:取 OrgGuard 放在 `req.org` 上的 `{ orgId, role }`。 */
|
|
23
25
|
export declare const CurrentOrg: () => ParameterDecorator;
|
|
26
|
+
/**
|
|
27
|
+
* The org role check of {@link OrgGuard}, read live from PG: the caller's role in `orgId` (a
|
|
28
|
+
* person's membership, a service token's own org and role) allows `action`, else 404
|
|
29
|
+
* `org.not_found` (missing, soft-deleted, not a member: existence is not disclosed) or 403
|
|
30
|
+
* `forbidden` (HUMAN_ONLY for a service token, role too low). Also run before the body of an org
|
|
31
|
+
* package upload is read (ruling P3-29).
|
|
32
|
+
*/
|
|
33
|
+
export declare function authorizeOrgAction(db: Pick<KernelSchemaDb, "selectFrom">, p: Principal, orgId: string, action: Action): Promise<OrgRole>;
|
|
24
34
|
/**
|
|
25
35
|
* 组织守卫:每个请求实时从 PG 读组织与成员角色(不缓存)。
|
|
26
36
|
* - 组织不存在、已软删除、或调用者不是成员 → 404 `org.not_found`(不泄露组织是否存在)。
|
package/dist/orgs/org.guard.js
CHANGED
|
@@ -24,6 +24,48 @@ export function OrgAction(action) {
|
|
|
24
24
|
/** 参数装饰器:取 OrgGuard 放在 `req.org` 上的 `{ orgId, role }`。 */
|
|
25
25
|
export const CurrentOrg = createParamDecorator((_data, ctx) => ctx.switchToHttp().getRequest().org);
|
|
26
26
|
const notFound = () => new ApiError("org.not_found", "Organization not found");
|
|
27
|
+
/**
|
|
28
|
+
* The org role check of {@link OrgGuard}, read live from PG: the caller's role in `orgId` (a
|
|
29
|
+
* person's membership, a service token's own org and role) allows `action`, else 404
|
|
30
|
+
* `org.not_found` (missing, soft-deleted, not a member: existence is not disclosed) or 403
|
|
31
|
+
* `forbidden` (HUMAN_ONLY for a service token, role too low). Also run before the body of an org
|
|
32
|
+
* package upload is read (ruling P3-29).
|
|
33
|
+
*/
|
|
34
|
+
export async function authorizeOrgAction(db, p, orgId, action) {
|
|
35
|
+
let role;
|
|
36
|
+
if (p.kind === "service") {
|
|
37
|
+
if (p.orgId !== orgId)
|
|
38
|
+
throw notFound();
|
|
39
|
+
const live = await db
|
|
40
|
+
.selectFrom("orgs")
|
|
41
|
+
.select("id")
|
|
42
|
+
.where("id", "=", orgId)
|
|
43
|
+
.where("deleted_at", "is", null)
|
|
44
|
+
.executeTakeFirst();
|
|
45
|
+
if (!live)
|
|
46
|
+
throw notFound();
|
|
47
|
+
if (HUMAN_ONLY.has(action)) {
|
|
48
|
+
throw new ApiError("forbidden", "Service tokens cannot perform this action");
|
|
49
|
+
}
|
|
50
|
+
role = p.role;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const m = await db
|
|
54
|
+
.selectFrom("memberships")
|
|
55
|
+
.innerJoin("orgs", "orgs.id", "memberships.org_id")
|
|
56
|
+
.select("memberships.role")
|
|
57
|
+
.where("memberships.org_id", "=", orgId)
|
|
58
|
+
.where("memberships.account_id", "=", p.account.id)
|
|
59
|
+
.where("orgs.deleted_at", "is", null)
|
|
60
|
+
.executeTakeFirst();
|
|
61
|
+
if (!m)
|
|
62
|
+
throw notFound();
|
|
63
|
+
role = m.role;
|
|
64
|
+
}
|
|
65
|
+
if (!can(role, action))
|
|
66
|
+
throw new ApiError("forbidden", "Insufficient organization role");
|
|
67
|
+
return role;
|
|
68
|
+
}
|
|
27
69
|
/**
|
|
28
70
|
* 组织守卫:每个请求实时从 PG 读组织与成员角色(不缓存)。
|
|
29
71
|
* - 组织不存在、已软删除、或调用者不是成员 → 404 `org.not_found`(不泄露组织是否存在)。
|
|
@@ -51,38 +93,7 @@ let OrgGuard = class OrgGuard {
|
|
|
51
93
|
const orgId = req.params.orgId;
|
|
52
94
|
if (!orgId)
|
|
53
95
|
throw new Error("OrgGuard: route has no :orgId parameter");
|
|
54
|
-
|
|
55
|
-
if (p.kind === "service") {
|
|
56
|
-
if (p.orgId !== orgId)
|
|
57
|
-
throw notFound();
|
|
58
|
-
const live = await this.db
|
|
59
|
-
.selectFrom("orgs")
|
|
60
|
-
.select("id")
|
|
61
|
-
.where("id", "=", orgId)
|
|
62
|
-
.where("deleted_at", "is", null)
|
|
63
|
-
.executeTakeFirst();
|
|
64
|
-
if (!live)
|
|
65
|
-
throw notFound();
|
|
66
|
-
if (HUMAN_ONLY.has(action)) {
|
|
67
|
-
throw new ApiError("forbidden", "Service tokens cannot perform this action");
|
|
68
|
-
}
|
|
69
|
-
role = p.role;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
const m = await this.db
|
|
73
|
-
.selectFrom("memberships")
|
|
74
|
-
.innerJoin("orgs", "orgs.id", "memberships.org_id")
|
|
75
|
-
.select("memberships.role")
|
|
76
|
-
.where("memberships.org_id", "=", orgId)
|
|
77
|
-
.where("memberships.account_id", "=", p.account.id)
|
|
78
|
-
.where("orgs.deleted_at", "is", null)
|
|
79
|
-
.executeTakeFirst();
|
|
80
|
-
if (!m)
|
|
81
|
-
throw notFound();
|
|
82
|
-
role = m.role;
|
|
83
|
-
}
|
|
84
|
-
if (!can(role, action))
|
|
85
|
-
throw new ApiError("forbidden", "Insufficient organization role");
|
|
96
|
+
const role = await authorizeOrgAction(this.db.db, p, orgId, action);
|
|
86
97
|
req.org = { orgId, role };
|
|
87
98
|
return true;
|
|
88
99
|
}
|
package/dist/orgs/orgs.module.js
CHANGED
|
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { Module } from "@nestjs/common";
|
|
8
|
+
import { CatalogModule } from "../catalog/catalog.module.js";
|
|
8
9
|
import { EventLogModule } from "../conversations/event-log.js";
|
|
9
10
|
import { EvalBudgetModule } from "../evals/budget.js";
|
|
10
11
|
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
@@ -43,6 +44,8 @@ OrgsModule = __decorate([
|
|
|
43
44
|
SandboxModule,
|
|
44
45
|
// cancels the deleted org's eval runs
|
|
45
46
|
EvalBudgetModule,
|
|
47
|
+
// a new org's plugin scope sync (the producer; the worker role consumes it)
|
|
48
|
+
CatalogModule,
|
|
46
49
|
// the producer side of directory-sync jobs (the maintenance processor consumes them)
|
|
47
50
|
QueueModule.registerQueue(MAINTENANCE_QUEUE_NAME),
|
|
48
51
|
],
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { OwnedItems } from "../catalog/owned-items.js";
|
|
2
|
+
import { PluginScopeSync } from "../catalog/scope-sync.js";
|
|
1
3
|
import { EvalBudget } from "../evals/budget.js";
|
|
2
4
|
import type { Account } from "../identity/accounts.js";
|
|
3
5
|
import { ApiTokenService } from "../identity/api-tokens.js";
|
|
@@ -18,8 +20,8 @@ export declare const SLUG_RE: RegExp;
|
|
|
18
20
|
/** 由名字生成 slug:转小写、非字母数字换 `-`、去首尾 `-`;为空则 `org-<6 位随机>`。 */
|
|
19
21
|
export declare function slugFromName(name: string): string;
|
|
20
22
|
/**
|
|
21
|
-
* Organizations: create, read, update and soft delete. A
|
|
22
|
-
* {@link KernelEvents} after the commit.
|
|
23
|
+
* Organizations: create, read, update and soft delete. A new org's plugin scope sync is enqueued
|
|
24
|
+
* after the commit; a soft delete emits `org.deleted` on {@link KernelEvents} after the commit.
|
|
23
25
|
*/
|
|
24
26
|
export declare class OrgsService {
|
|
25
27
|
private readonly db;
|
|
@@ -30,9 +32,17 @@ export declare class OrgsService {
|
|
|
30
32
|
private readonly events;
|
|
31
33
|
/** Cancels the deleted org's running eval runs (in the delete's transaction). */
|
|
32
34
|
private readonly evalBudget;
|
|
35
|
+
/** A new org gets the plugins its scope offers it (the scope sync, after the commit). */
|
|
36
|
+
private readonly scopeSync;
|
|
37
|
+
/** What the deleted org owns is transferred or removed in the delete's transaction (P3-20). */
|
|
38
|
+
private readonly ownedItems;
|
|
33
39
|
constructor(db: KernelDb, txHost: TransactionHost, settings: SettingsService, apiTokens: ApiTokenService, orgLock: OrgLock, events: KernelEvents,
|
|
34
40
|
/** Cancels the deleted org's running eval runs (in the delete's transaction). */
|
|
35
|
-
evalBudget: Pick<EvalBudget, "cancelRuns"
|
|
41
|
+
evalBudget: Pick<EvalBudget, "cancelRuns">,
|
|
42
|
+
/** A new org gets the plugins its scope offers it (the scope sync, after the commit). */
|
|
43
|
+
scopeSync: Pick<PluginScopeSync, "enqueueOrg">,
|
|
44
|
+
/** What the deleted org owns is transferred or removed in the delete's transaction (P3-20). */
|
|
45
|
+
ownedItems: Pick<OwnedItems, "onOrgDeleted">);
|
|
36
46
|
/**
|
|
37
47
|
* Creates an org with the actor as owner, in the caller's transaction when there is one (the
|
|
38
48
|
* setup wizard creates it with the account); a slug conflict is `org.slug_taken` either way, but
|
|
@@ -49,7 +59,7 @@ export declare class OrgsService {
|
|
|
49
59
|
listForAccount(accountId: string): Promise<(Org & {
|
|
50
60
|
role: OrgRole;
|
|
51
61
|
})[]>;
|
|
52
|
-
/**
|
|
62
|
+
/** 全部(未软删除的)组织及成员数(超级管理员用)。 */
|
|
53
63
|
listAll(): Promise<(Org & {
|
|
54
64
|
memberCount: number;
|
|
55
65
|
})[]>;
|
|
@@ -63,9 +73,12 @@ export declare class OrgsService {
|
|
|
63
73
|
private updateIn;
|
|
64
74
|
/**
|
|
65
75
|
* Soft delete (needs owner, decided live under the org lock): in the same transaction revokes
|
|
66
|
-
* the org's service tokens, cancels its running eval runs and pending catalog requests,
|
|
67
|
-
*
|
|
68
|
-
*
|
|
76
|
+
* the org's service tokens, cancels its running eval runs and pending catalog requests, clears
|
|
77
|
+
* sessions' current org pointing at it, and transfers or removes the plugins and promoted
|
|
78
|
+
* components it owns ({@link OwnedItems.onOrgDeleted}, P3-20: shared ones become the platform's,
|
|
79
|
+
* the others are removed, a removed plugin's extension taken out by its cleanup job after the
|
|
80
|
+
* commit); after the commit emits `org.deleted` (channel connections go with the org: the
|
|
81
|
+
* runtime's connection reads filter deleted orgs).
|
|
69
82
|
*/
|
|
70
83
|
softDelete(orgId: string, actor: Account, actorTokenId?: string): Promise<void>;
|
|
71
84
|
private softDeleteIn;
|
|
@@ -10,7 +10,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
10
10
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
11
11
|
import { Inject, Injectable } from "@nestjs/common";
|
|
12
12
|
import { sql } from "kysely";
|
|
13
|
-
import {
|
|
13
|
+
import { OwnedItems } from "../catalog/owned-items.js";
|
|
14
|
+
import { cancelPendingRequests } from "../catalog/request-rules.js";
|
|
15
|
+
import { PluginScopeSync } from "../catalog/scope-sync.js";
|
|
14
16
|
import { ApiError } from "../errors.js";
|
|
15
17
|
import { EvalBudget } from "../evals/budget.js";
|
|
16
18
|
import { ApiTokenService } from "../identity/api-tokens.js";
|
|
@@ -70,8 +72,8 @@ async function slugGuard(p) {
|
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
/**
|
|
73
|
-
* Organizations: create, read, update and soft delete. A
|
|
74
|
-
* {@link KernelEvents} after the commit.
|
|
75
|
+
* Organizations: create, read, update and soft delete. A new org's plugin scope sync is enqueued
|
|
76
|
+
* after the commit; a soft delete emits `org.deleted` on {@link KernelEvents} after the commit.
|
|
75
77
|
*/
|
|
76
78
|
let OrgsService = class OrgsService {
|
|
77
79
|
db;
|
|
@@ -81,9 +83,15 @@ let OrgsService = class OrgsService {
|
|
|
81
83
|
orgLock;
|
|
82
84
|
events;
|
|
83
85
|
evalBudget;
|
|
86
|
+
scopeSync;
|
|
87
|
+
ownedItems;
|
|
84
88
|
constructor(db, txHost, settings, apiTokens, orgLock, events,
|
|
85
89
|
/** Cancels the deleted org's running eval runs (in the delete's transaction). */
|
|
86
|
-
evalBudget
|
|
90
|
+
evalBudget,
|
|
91
|
+
/** A new org gets the plugins its scope offers it (the scope sync, after the commit). */
|
|
92
|
+
scopeSync,
|
|
93
|
+
/** What the deleted org owns is transferred or removed in the delete's transaction (P3-20). */
|
|
94
|
+
ownedItems) {
|
|
87
95
|
this.db = db;
|
|
88
96
|
this.txHost = txHost;
|
|
89
97
|
this.settings = settings;
|
|
@@ -91,6 +99,8 @@ let OrgsService = class OrgsService {
|
|
|
91
99
|
this.orgLock = orgLock;
|
|
92
100
|
this.events = events;
|
|
93
101
|
this.evalBudget = evalBudget;
|
|
102
|
+
this.scopeSync = scopeSync;
|
|
103
|
+
this.ownedItems = ownedItems;
|
|
94
104
|
}
|
|
95
105
|
/**
|
|
96
106
|
* Creates an org with the actor as owner, in the caller's transaction when there is one (the
|
|
@@ -104,8 +114,8 @@ let OrgsService = class OrgsService {
|
|
|
104
114
|
// read in the context's transaction: a caller holding a connection asking the pool for a
|
|
105
115
|
// second one could exhaust it under load
|
|
106
116
|
const { orgCreation } = await this.settings.get();
|
|
107
|
-
if (orgCreation === "
|
|
108
|
-
throw new ApiError("org.creation_disabled", "Only
|
|
117
|
+
if (orgCreation === "super_admin" && !actor.isSuperAdmin) {
|
|
118
|
+
throw new ApiError("org.creation_disabled", "Only super admins can create organizations");
|
|
109
119
|
}
|
|
110
120
|
const name = checkName(input.name);
|
|
111
121
|
const slug = input.slug ?? slugFromName(name);
|
|
@@ -127,6 +137,7 @@ let OrgsService = class OrgsService {
|
|
|
127
137
|
target: row.id,
|
|
128
138
|
detail: { slug, name },
|
|
129
139
|
});
|
|
140
|
+
afterCommit(() => this.scopeSync.enqueueOrg(row.id));
|
|
130
141
|
return toOrg(row);
|
|
131
142
|
}
|
|
132
143
|
/** 账号所属的(未软删除的)组织及其角色,按创建时间升序。 */
|
|
@@ -142,7 +153,7 @@ let OrgsService = class OrgsService {
|
|
|
142
153
|
.execute();
|
|
143
154
|
return rows.map((r) => ({ ...toOrg(r), role: r.role }));
|
|
144
155
|
}
|
|
145
|
-
/**
|
|
156
|
+
/** 全部(未软删除的)组织及成员数(超级管理员用)。 */
|
|
146
157
|
async listAll() {
|
|
147
158
|
const rows = await this.db
|
|
148
159
|
.selectFrom("orgs")
|
|
@@ -205,9 +216,12 @@ let OrgsService = class OrgsService {
|
|
|
205
216
|
}
|
|
206
217
|
/**
|
|
207
218
|
* Soft delete (needs owner, decided live under the org lock): in the same transaction revokes
|
|
208
|
-
* the org's service tokens, cancels its running eval runs and pending catalog requests,
|
|
209
|
-
*
|
|
210
|
-
*
|
|
219
|
+
* the org's service tokens, cancels its running eval runs and pending catalog requests, clears
|
|
220
|
+
* sessions' current org pointing at it, and transfers or removes the plugins and promoted
|
|
221
|
+
* components it owns ({@link OwnedItems.onOrgDeleted}, P3-20: shared ones become the platform's,
|
|
222
|
+
* the others are removed, a removed plugin's extension taken out by its cleanup job after the
|
|
223
|
+
* commit); after the commit emits `org.deleted` (channel connections go with the org: the
|
|
224
|
+
* runtime's connection reads filter deleted orgs).
|
|
211
225
|
*/
|
|
212
226
|
async softDelete(orgId, actor, actorTokenId) {
|
|
213
227
|
await this.softDeleteIn(orgId, actor, actorTokenId);
|
|
@@ -219,10 +233,14 @@ let OrgsService = class OrgsService {
|
|
|
219
233
|
.set({ deleted_at: sql `now()` })
|
|
220
234
|
.where("id", "=", orgId)
|
|
221
235
|
.execute();
|
|
236
|
+
// after the org is marked deleted, so it counts as no user of what it shared (P3-18)
|
|
237
|
+
await this.ownedItems.onOrgDeleted(orgId, actor.id, {
|
|
238
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
239
|
+
});
|
|
222
240
|
await this.apiTokens.revokeAllForOrg(orgId);
|
|
223
241
|
// eval runs of a deleted org stop spending: cancelled explicitly (audited with the reason)
|
|
224
242
|
await this.evalBudget.cancelRuns({ orgId }, { accountId: actor.id, ...(actorTokenId !== undefined && { tokenId: actorTokenId }) }, "org_deleted");
|
|
225
|
-
// pending catalog requests (including those passed to
|
|
243
|
+
// pending catalog requests (including those passed to super admins) are cancelled too
|
|
226
244
|
await cancelPendingRequests(this.db.db, { orgId }, actor.id, "org_deleted", actorTokenId !== undefined ? { actorTokenId } : {});
|
|
227
245
|
await this.db
|
|
228
246
|
.updateTable("sessions")
|
|
@@ -257,6 +275,8 @@ OrgsService = __decorate([
|
|
|
257
275
|
__param(3, Inject(ApiTokenService)),
|
|
258
276
|
__param(4, Inject(OrgLock)),
|
|
259
277
|
__param(5, Inject(KernelEvents)),
|
|
260
|
-
__param(6, Inject(EvalBudget))
|
|
278
|
+
__param(6, Inject(EvalBudget)),
|
|
279
|
+
__param(7, Inject(PluginScopeSync)),
|
|
280
|
+
__param(8, Inject(OwnedItems))
|
|
261
281
|
], OrgsService);
|
|
262
282
|
export { OrgsService };
|
package/dist/orgs/roles.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export type OrgRole = (typeof ORG_ROLES)[number];
|
|
|
4
4
|
/** `role` 是否不低于 `min`。 */
|
|
5
5
|
export declare function roleAtLeast(role: OrgRole, min: OrgRole): boolean;
|
|
6
6
|
/** 组织级动作;路由用 `@OrgAction(action)` 声明所需动作。 */
|
|
7
|
-
export type OrgAction = "org.read" | "org.update" | "org.delete" | "org.transfer" | "org.members.read" | "org.members.manage" | "org.invitations.manage" | "org.tokens.manage" | "org.extensions.manage" | "agents.create" | "agents.use" | "agents.manage" | "connectors.manage" | "connectors.use" | "approvals.decide" | "channels.manage" | "skills.read" | "skills.manage" | "ui.use" | "trajectories.read" | "evals.manage" | "org.models.manage" | "catalog.read" | "catalog.request" | "catalog.decide";
|
|
7
|
+
export type OrgAction = "org.read" | "org.update" | "org.delete" | "org.transfer" | "org.members.read" | "org.members.manage" | "org.invitations.manage" | "org.tokens.manage" | "org.extensions.read" | "org.extensions.manage" | "agents.create" | "agents.use" | "agents.manage" | "connectors.manage" | "connectors.use" | "approvals.decide" | "channels.manage" | "skills.read" | "skills.manage" | "ui.use" | "trajectories.read" | "evals.manage" | "org.models.manage" | "catalog.read" | "catalog.request" | "catalog.decide" | "catalog.upload";
|
|
8
8
|
/** 每个动作所需的最低角色。 */
|
|
9
9
|
export declare const ACTION_MIN_ROLE: Record<OrgAction, OrgRole>;
|
|
10
10
|
/** 只允许 user principal 执行的动作:服务令牌即使角色足够也拒绝(除 SERVICE_ALLOWED 外全部)。 */
|
package/dist/orgs/roles.js
CHANGED
|
@@ -12,6 +12,8 @@ export const ACTION_MIN_ROLE = {
|
|
|
12
12
|
"org.members.manage": "admin",
|
|
13
13
|
"org.invitations.manage": "admin",
|
|
14
14
|
"org.tokens.manage": "admin",
|
|
15
|
+
// the 扩展 page for members: state only, no config / secrets / schema (the list projects by role)
|
|
16
|
+
"org.extensions.read": "member",
|
|
15
17
|
"org.extensions.manage": "admin",
|
|
16
18
|
"org.delete": "owner",
|
|
17
19
|
"org.transfer": "owner",
|
|
@@ -38,11 +40,13 @@ export const ACTION_MIN_ROLE = {
|
|
|
38
40
|
"evals.manage": "admin",
|
|
39
41
|
// 本组织的模型用途映射(覆盖部署默认,如评委用途 eval)
|
|
40
42
|
"org.models.manage": "admin",
|
|
41
|
-
//
|
|
43
|
+
// 平台目录(组织视角):成员浏览(看不到 disabled)与申请;组织管理员决定成员申请(F-AF)。
|
|
42
44
|
// 安装另按条目种类要求 skills.manage / connectors.manage / org.extensions.manage(服务里在组织行锁内复核)
|
|
43
45
|
"catalog.read": "member",
|
|
44
46
|
"catalog.request": "member",
|
|
45
47
|
"catalog.decide": "admin",
|
|
48
|
+
// An org admin uploads a plugin package the org owns (spec §14.1 item 1, ruling P3-7)
|
|
49
|
+
"catalog.upload": "admin",
|
|
46
50
|
};
|
|
47
51
|
/** 服务令牌也可执行的动作:只读的 org.read、org.members.read,以及使用 agent 的 agents.use。 */
|
|
48
52
|
const SERVICE_ALLOWED = new Set([
|
|
@@ -4,7 +4,7 @@ import { type OrgSandboxLimits, type OrgSettings, type OrgSettingsDeployment, ty
|
|
|
4
4
|
/**
|
|
5
5
|
* 组织设置(`/api/v1/orgs/:orgId/settings`):成员可读,修改需 `org.update`(admin)。
|
|
6
6
|
* 响应带 `deployment`(部署默认值,如沙箱出站),设置页据此展示「跟随部署」时的实际取值;
|
|
7
|
-
* 以及只读的 `sandboxLimits`(组织实际生效的沙箱 cpu /
|
|
7
|
+
* 以及只读的 `sandboxLimits`(组织实际生效的沙箱 cpu / 内存与来源,超级管理员在部署设置里覆盖,C19)。
|
|
8
8
|
*/
|
|
9
9
|
type SettingsResponse = {
|
|
10
10
|
settings: OrgSettings;
|
|
@@ -12,8 +12,11 @@ import { OrgLock } from "./org-lock.js";
|
|
|
12
12
|
* - `locale`:组织默认语言(`zh` / `en`,默认 en),机器人在 IM 里说的固定话术按它选择。
|
|
13
13
|
* - `sandboxToolPolicy`:沙箱工具的默认策略(M5 T8,默认 allow)。为 `ask` 时除只读的
|
|
14
14
|
* `Read` / `Glob` / `Grep` 外都需要审批(执行时实时读取)。
|
|
15
|
+
* - `wakeOnBackgroundTask`:组织对 `runtime.wakeOnBackgroundTask` 的覆盖(缺省跟随部署),见 {@link effectiveWakeOnBackgroundTask}。
|
|
15
16
|
* - `sandboxEgress`:组织的沙箱出站(Ruling M19 / D6),缺省跟随部署的 `sandbox.limits.egress` + `allowHosts`。
|
|
16
17
|
* 见 {@link effectiveSandboxEgress}。存量值非法时按 `none` 读(宁可断网,不悄悄放宽到部署默认)。
|
|
18
|
+
* - `platformTool`: the `Platform` builtin for the whole org (Platform tool spec §3): `on`,
|
|
19
|
+
* `read-only` (writes listed as unavailable) or `off` (default `on`).
|
|
17
20
|
*/
|
|
18
21
|
/** 组织沙箱出站白名单的主机数上限。 */
|
|
19
22
|
export declare const ORG_SANDBOX_ALLOW_HOSTS_MAX = 200;
|
|
@@ -42,6 +45,11 @@ export declare const OrgSettingsSchema: z.ZodObject<{
|
|
|
42
45
|
allow: "allow";
|
|
43
46
|
ask: "ask";
|
|
44
47
|
}>>>;
|
|
48
|
+
platformTool: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
|
|
49
|
+
off: "off";
|
|
50
|
+
on: "on";
|
|
51
|
+
"read-only": "read-only";
|
|
52
|
+
}>>>;
|
|
45
53
|
sandboxEgress: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
46
54
|
mode: z.ZodEnum<{
|
|
47
55
|
allowlist: "allowlist";
|
|
@@ -49,6 +57,7 @@ export declare const OrgSettingsSchema: z.ZodObject<{
|
|
|
49
57
|
}>;
|
|
50
58
|
allowHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
51
59
|
}, z.core.$strict>>>;
|
|
60
|
+
wakeOnBackgroundTask: z.ZodCatch<z.ZodOptional<z.ZodBoolean>>;
|
|
52
61
|
}, z.core.$strip>;
|
|
53
62
|
export type OrgSettings = z.infer<typeof OrgSettingsSchema>;
|
|
54
63
|
/** PATCH 体:只改给出的字段;未知字段 → 400。 */
|
|
@@ -65,6 +74,12 @@ export declare const OrgSettingsPatchSchema: z.ZodObject<{
|
|
|
65
74
|
allow: "allow";
|
|
66
75
|
ask: "ask";
|
|
67
76
|
}>>;
|
|
77
|
+
platformTool: z.ZodOptional<z.ZodEnum<{
|
|
78
|
+
off: "off";
|
|
79
|
+
on: "on";
|
|
80
|
+
"read-only": "read-only";
|
|
81
|
+
}>>;
|
|
82
|
+
wakeOnBackgroundTask: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
68
83
|
sandboxEgress: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
69
84
|
mode: z.ZodEnum<{
|
|
70
85
|
allowlist: "allowlist";
|
|
@@ -81,15 +96,17 @@ export type DeploymentEgress = Pick<SandboxLimits, "egress" | "allowHosts">;
|
|
|
81
96
|
* (省略时用部署的),但部署是 `none` 时仍为 `none`(组织永远不比部署放得更开,部署改成 none 后存量设置也随之收紧)。
|
|
82
97
|
*/
|
|
83
98
|
export declare function effectiveSandboxEgress(deployment: DeploymentEgress, org: SandboxEgressSetting | undefined): DeploymentEgress;
|
|
99
|
+
/** Whether a finished background task wakes an idle conversation: the org's setting, else the deployment's. */
|
|
100
|
+
export declare function effectiveWakeOnBackgroundTask(deployment: boolean, org: OrgSettings["wakeOnBackgroundTask"]): boolean;
|
|
84
101
|
/**
|
|
85
|
-
* 组织实际生效的沙箱限额(C19 / Ruling M16
|
|
102
|
+
* 组织实际生效的沙箱限额(C19 / Ruling M16):超级管理员的覆盖(部署设置 `sandboxLimitOverrides[orgId]`)
|
|
86
103
|
* 给出的 cpu / memoryMb 替换部署默认,未给的项、disk 与出站沿用 `deployment`。只在创建沙箱时读取。
|
|
87
104
|
*/
|
|
88
105
|
export declare function effectiveSandboxLimits(deployment: SandboxLimits, override: {
|
|
89
106
|
cpu?: number | undefined;
|
|
90
107
|
memoryMb?: number | undefined;
|
|
91
108
|
} | undefined): SandboxLimits;
|
|
92
|
-
/** 组织设置 GET
|
|
109
|
+
/** 组织设置 GET 带回的只读沙箱限额:实际生效值与来源(有超级管理员的覆盖为 `override`)。 */
|
|
93
110
|
export interface OrgSandboxLimits {
|
|
94
111
|
cpu: number;
|
|
95
112
|
memoryMb: number;
|
|
@@ -118,7 +135,7 @@ export declare class OrgSettingsService {
|
|
|
118
135
|
config: Pick<KernelConfigService, "get">);
|
|
119
136
|
/** 部署默认值(设置页展示「跟随部署」时的实际取值)。 */
|
|
120
137
|
deployment(): OrgSettingsDeployment;
|
|
121
|
-
/** 组织实际生效的沙箱 cpu /
|
|
138
|
+
/** 组织实际生效的沙箱 cpu / 内存(只读;由超级管理员在部署设置里覆盖)。 */
|
|
122
139
|
sandboxLimits(orgId: string): Promise<OrgSandboxLimits>;
|
|
123
140
|
get(orgId: string): Promise<OrgSettings>;
|
|
124
141
|
update(orgId: string, patch: OrgSettingsPatch, actorAccountId: string, actorTokenId?: string): Promise<OrgSettings>;
|
|
@@ -25,8 +25,11 @@ import { OrgLock } from "./org-lock.js";
|
|
|
25
25
|
* - `locale`:组织默认语言(`zh` / `en`,默认 en),机器人在 IM 里说的固定话术按它选择。
|
|
26
26
|
* - `sandboxToolPolicy`:沙箱工具的默认策略(M5 T8,默认 allow)。为 `ask` 时除只读的
|
|
27
27
|
* `Read` / `Glob` / `Grep` 外都需要审批(执行时实时读取)。
|
|
28
|
+
* - `wakeOnBackgroundTask`:组织对 `runtime.wakeOnBackgroundTask` 的覆盖(缺省跟随部署),见 {@link effectiveWakeOnBackgroundTask}。
|
|
28
29
|
* - `sandboxEgress`:组织的沙箱出站(Ruling M19 / D6),缺省跟随部署的 `sandbox.limits.egress` + `allowHosts`。
|
|
29
30
|
* 见 {@link effectiveSandboxEgress}。存量值非法时按 `none` 读(宁可断网,不悄悄放宽到部署默认)。
|
|
31
|
+
* - `platformTool`: the `Platform` builtin for the whole org (Platform tool spec §3): `on`,
|
|
32
|
+
* `read-only` (writes listed as unavailable) or `off` (default `on`).
|
|
30
33
|
*/
|
|
31
34
|
/** 组织沙箱出站白名单的主机数上限。 */
|
|
32
35
|
export const ORG_SANDBOX_ALLOW_HOSTS_MAX = 200;
|
|
@@ -57,7 +60,10 @@ export const OrgSettingsSchema = z.object({
|
|
|
57
60
|
toolSearch: z.enum(["on", "off"]).default("on").catch("on"),
|
|
58
61
|
locale: z.enum(["zh", "en"]).default("en").catch("en"),
|
|
59
62
|
sandboxToolPolicy: z.enum(["allow", "ask"]).default("allow").catch("allow"),
|
|
63
|
+
platformTool: z.enum(["on", "read-only", "off"]).default("on").catch("on"),
|
|
60
64
|
sandboxEgress: SandboxEgressSettingSchema.optional().catch({ mode: "none" }),
|
|
65
|
+
/** Overrides `runtime.wakeOnBackgroundTask`; absent follows the deployment. */
|
|
66
|
+
wakeOnBackgroundTask: z.boolean().optional().catch(undefined),
|
|
61
67
|
});
|
|
62
68
|
/** PATCH 体:只改给出的字段;未知字段 → 400。 */
|
|
63
69
|
export const OrgSettingsPatchSchema = z
|
|
@@ -65,6 +71,9 @@ export const OrgSettingsPatchSchema = z
|
|
|
65
71
|
toolSearch: z.enum(["on", "off"]).optional(),
|
|
66
72
|
locale: z.enum(["zh", "en"]).optional(),
|
|
67
73
|
sandboxToolPolicy: z.enum(["allow", "ask"]).optional(),
|
|
74
|
+
platformTool: z.enum(["on", "read-only", "off"]).optional(),
|
|
75
|
+
/** null clears (follow the deployment again). */
|
|
76
|
+
wakeOnBackgroundTask: z.boolean().nullable().optional(),
|
|
68
77
|
/** null 清除(恢复跟随部署默认)。 */
|
|
69
78
|
sandboxEgress: SandboxEgressSettingSchema.nullable().optional(),
|
|
70
79
|
})
|
|
@@ -80,8 +89,12 @@ export function effectiveSandboxEgress(deployment, org) {
|
|
|
80
89
|
return { egress: "none", allowHosts: [] };
|
|
81
90
|
return { egress: "allowlist", allowHosts: [...(org.allowHosts ?? deployment.allowHosts)] };
|
|
82
91
|
}
|
|
92
|
+
/** Whether a finished background task wakes an idle conversation: the org's setting, else the deployment's. */
|
|
93
|
+
export function effectiveWakeOnBackgroundTask(deployment, org) {
|
|
94
|
+
return org ?? deployment;
|
|
95
|
+
}
|
|
83
96
|
/**
|
|
84
|
-
* 组织实际生效的沙箱限额(C19 / Ruling M16
|
|
97
|
+
* 组织实际生效的沙箱限额(C19 / Ruling M16):超级管理员的覆盖(部署设置 `sandboxLimitOverrides[orgId]`)
|
|
85
98
|
* 给出的 cpu / memoryMb 替换部署默认,未给的项、disk 与出站沿用 `deployment`。只在创建沙箱时读取。
|
|
86
99
|
*/
|
|
87
100
|
export function effectiveSandboxLimits(deployment, override) {
|
|
@@ -130,7 +143,7 @@ let OrgSettingsService = class OrgSettingsService {
|
|
|
130
143
|
sandboxEgress: { mode: lim.egress, allowHosts: [...lim.allowHosts] },
|
|
131
144
|
};
|
|
132
145
|
}
|
|
133
|
-
/** 组织实际生效的沙箱 cpu /
|
|
146
|
+
/** 组织实际生效的沙箱 cpu / 内存(只读;由超级管理员在部署设置里覆盖)。 */
|
|
134
147
|
async sandboxLimits(orgId) {
|
|
135
148
|
const lim = this.config.get().sandbox.limits;
|
|
136
149
|
const override = await readSandboxLimitOverride(this.db.db, orgId);
|
|
@@ -169,15 +182,17 @@ let OrgSettingsService = class OrgSettingsService {
|
|
|
169
182
|
const before = parseOrgSettings(stored);
|
|
170
183
|
const changes = Object.fromEntries(Object.entries(patch)
|
|
171
184
|
.filter(([, v]) => v !== undefined)
|
|
172
|
-
// null
|
|
185
|
+
// null clears sandboxEgress / wakeOnBackgroundTask: follow the deployment default again
|
|
173
186
|
.map(([k, v]) => [k, v === null ? undefined : v]));
|
|
174
187
|
const after = { ...before, ...changes };
|
|
175
188
|
if (after.sandboxEgress === undefined)
|
|
176
189
|
delete after.sandboxEgress;
|
|
190
|
+
if (after.wakeOnBackgroundTask === undefined)
|
|
191
|
+
delete after.wakeOnBackgroundTask;
|
|
177
192
|
if (sameSettings(before, after))
|
|
178
193
|
return before;
|
|
179
194
|
// 与存量合并:保留本版本不认识的键(清除的 sandboxEgress 不留在存量里)
|
|
180
|
-
const { sandboxEgress: _old, ...rest } = stored;
|
|
195
|
+
const { sandboxEgress: _old, wakeOnBackgroundTask: _oldWake, ...rest } = stored;
|
|
181
196
|
await this.db
|
|
182
197
|
.updateTable("orgs")
|
|
183
198
|
.set({ settings: JSON.stringify({ ...rest, ...after }) })
|
package/dist/overrides.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { FILE_PREVIEW_TIMEOUT } from "./files/previewers.js";
|
|
|
8
8
|
import { LIST_MODELS_TIMEOUT } from "./runtime/providers.js";
|
|
9
9
|
import { AGENT_LOOP_FACTORY, type AgentLoopFactory } from "./runtime/run-steps.js";
|
|
10
10
|
import { RUN_HOOKS, type RunHooks } from "./runtime/run-worker.js";
|
|
11
|
+
import { SUBAGENT_MESSAGES_HOOKS, type SubagentMessagesHooks } from "./runtime/subagents/messages.js";
|
|
11
12
|
import { USAGE_REPORT_RETRY, type UsageReportRetry } from "./runtime/usage-report.js";
|
|
12
13
|
import { SANDBOX_LEASE_TIMINGS, type SandboxLeaseTimings } from "./sandbox/leases.js";
|
|
13
14
|
import { TOOL_PIPELINE_HOOKS, type ToolPipelineHooks } from "./tools/pipeline.js";
|
|
@@ -20,6 +21,7 @@ import { EMBED_TOKEN_CLOCK } from "./ui/embed-token.js";
|
|
|
20
21
|
* - `RUN_HOOKS`: the run worker's hooks;
|
|
21
22
|
* - `EVAL_REPLAY_HOOKS`: the hooks of the eval full-run replay and the judge;
|
|
22
23
|
* - `TOOL_PIPELINE_HOOKS`: the tool pipeline's hooks and policy decision;
|
|
24
|
+
* - `SUBAGENT_MESSAGES_HOOKS`: the sub-agent message tools' hooks (a send raced by a run's end);
|
|
23
25
|
* - `BOOTSTRAP_LOCK_TTL`, `FILE_PREVIEW_TIMEOUT`, `LIST_MODELS_TIMEOUT`, `USAGE_REPORT_RETRY`,
|
|
24
26
|
* `SANDBOX_LEASE_TIMINGS`, `CHANNEL_WEBHOOK_TIMINGS`: shorter timings;
|
|
25
27
|
* - `EMBED_TOKEN_CLOCK`: the clock embed tokens are issued and checked with;
|
|
@@ -30,6 +32,7 @@ interface KernelSeams {
|
|
|
30
32
|
[RUN_HOOKS]: RunHooks;
|
|
31
33
|
[EVAL_REPLAY_HOOKS]: EvalReplayHooks;
|
|
32
34
|
[TOOL_PIPELINE_HOOKS]: ToolPipelineHooks;
|
|
35
|
+
[SUBAGENT_MESSAGES_HOOKS]: SubagentMessagesHooks;
|
|
33
36
|
[BOOTSTRAP_LOCK_TTL]: number;
|
|
34
37
|
[FILE_PREVIEW_TIMEOUT]: number;
|
|
35
38
|
[LIST_MODELS_TIMEOUT]: number;
|
package/dist/overrides.js
CHANGED
|
@@ -6,6 +6,7 @@ import { FILE_PREVIEW_TIMEOUT } from "./files/previewers.js";
|
|
|
6
6
|
import { LIST_MODELS_TIMEOUT } from "./runtime/providers.js";
|
|
7
7
|
import { AGENT_LOOP_FACTORY } from "./runtime/run-steps.js";
|
|
8
8
|
import { RUN_HOOKS } from "./runtime/run-worker.js";
|
|
9
|
+
import { SUBAGENT_MESSAGES_HOOKS, } from "./runtime/subagents/messages.js";
|
|
9
10
|
import { USAGE_REPORT_RETRY } from "./runtime/usage-report.js";
|
|
10
11
|
import { SANDBOX_LEASE_TIMINGS } from "./sandbox/leases.js";
|
|
11
12
|
import { TOOL_PIPELINE_HOOKS } from "./tools/pipeline.js";
|
|
@@ -15,6 +16,7 @@ const SEAM_TOKENS = [
|
|
|
15
16
|
RUN_HOOKS,
|
|
16
17
|
EVAL_REPLAY_HOOKS,
|
|
17
18
|
TOOL_PIPELINE_HOOKS,
|
|
19
|
+
SUBAGENT_MESSAGES_HOOKS,
|
|
18
20
|
BOOTSTRAP_LOCK_TTL,
|
|
19
21
|
FILE_PREVIEW_TIMEOUT,
|
|
20
22
|
LIST_MODELS_TIMEOUT,
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
2
|
+
import type { OrgRole } from "../orgs/roles.js";
|
|
3
|
+
import { type OrgSettings } from "../orgs/settings.service.js";
|
|
4
|
+
/** What `availability()` (./availability.ts) decides on, read live for each call (spec §6.1). */
|
|
5
|
+
export interface ActorFacts {
|
|
6
|
+
/**
|
|
7
|
+
* The actor's role in the org; null: not a member any more, or the account is disabled (the HTTP
|
|
8
|
+
* auth refuses a disabled account on every request).
|
|
9
|
+
*/
|
|
10
|
+
role: OrgRole | null;
|
|
11
|
+
isSuperAdmin: boolean;
|
|
12
|
+
/** A person who can see and answer a confirmation is behind this run. */
|
|
13
|
+
personPresent: boolean;
|
|
14
|
+
/** The root conversation's agent is `private` and its owner is the actor. */
|
|
15
|
+
agentPrivateToActor: boolean;
|
|
16
|
+
/** The org setting `platformTool`. */
|
|
17
|
+
setting: OrgSettings["platformTool"];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Reads the facts about the actor of a `Platform` call: the run's trigger account (spec §6.1),
|
|
21
|
+
* re-read on every call, as the HTTP guards would.
|
|
22
|
+
*
|
|
23
|
+
* A person is present when all of these hold:
|
|
24
|
+
* - there is a run, it belongs to the conversation and its trigger account is the actor;
|
|
25
|
+
* - the root conversation of the tree (a sub-agent's is followed up through its parents) is a
|
|
26
|
+
* `chat` (an `eval` conversation replays, nobody watches it);
|
|
27
|
+
* - the actor is an active member of the org, and not the org's anonymous guest account (a channel
|
|
28
|
+
* message from an unlinked user under the `anonymous` policy runs as that account).
|
|
29
|
+
*
|
|
30
|
+
* The agent is private to the actor when the root conversation's agent is `private` and owned by
|
|
31
|
+
* the actor (a sub-agent's own agent does not count; Platform tool spec §6.1).
|
|
32
|
+
*
|
|
33
|
+
* Service tokens cannot start runs (posting a message requires a user principal), so no run is
|
|
34
|
+
* token-started; a wake run (`budget_run_id` set) runs as the person whose run it continues and
|
|
35
|
+
* counts as present. No new run column is needed to tell the origins apart.
|
|
36
|
+
*/
|
|
37
|
+
export declare class PlatformActor {
|
|
38
|
+
private readonly db;
|
|
39
|
+
constructor(db: KernelDb);
|
|
40
|
+
facts(ctx: {
|
|
41
|
+
orgId: string;
|
|
42
|
+
accountId: string;
|
|
43
|
+
/** The calling agent (from the runtime, never from the model's input). */
|
|
44
|
+
agentId: string;
|
|
45
|
+
conversationId: string;
|
|
46
|
+
runId?: string | null;
|
|
47
|
+
}): Promise<ActorFacts>;
|
|
48
|
+
}
|