@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
|
@@ -16,16 +16,16 @@ import { KernelDb } from "../infra/database/kernel-db.js";
|
|
|
16
16
|
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
17
17
|
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
18
18
|
import { audit } from "./audit.js";
|
|
19
|
-
import { EnterpriseAdminLock, EnterpriseAdminLockModule } from "./enterprise-admin.js";
|
|
20
19
|
import { MAX_PASSWORD_LENGTH, normalizeLogin, validatePassword } from "./login.js";
|
|
21
20
|
import { DUMMY_PASSWORD_HASH, hashPassword, verifyPassword } from "./passwords.js";
|
|
21
|
+
import { SuperAdminLock, SuperAdminLockModule } from "./super-admin.js";
|
|
22
22
|
/** 构造 `Account` 所需的 accounts 列(供跨表查询 select 使用)。 */
|
|
23
23
|
export const ACCOUNT_COLUMNS = [
|
|
24
24
|
"accounts.id",
|
|
25
25
|
"accounts.display_name",
|
|
26
26
|
"accounts.email",
|
|
27
27
|
"accounts.status",
|
|
28
|
-
"accounts.
|
|
28
|
+
"accounts.is_super_admin",
|
|
29
29
|
"accounts.created_at",
|
|
30
30
|
];
|
|
31
31
|
export function toAccount(r) {
|
|
@@ -34,7 +34,7 @@ export function toAccount(r) {
|
|
|
34
34
|
displayName: r.display_name,
|
|
35
35
|
email: r.email,
|
|
36
36
|
status: r.status,
|
|
37
|
-
|
|
37
|
+
isSuperAdmin: r.is_super_admin,
|
|
38
38
|
createdAt: r.created_at,
|
|
39
39
|
};
|
|
40
40
|
}
|
|
@@ -82,8 +82,8 @@ let AccountsService = class AccountsService {
|
|
|
82
82
|
return this.insertLocal(await prepareLocal(input, passwordHash));
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
85
|
+
* A super admin creates a local account (optionally a super admin): under the
|
|
86
|
+
* super admin lock, re-checks that the actor is still an active super admin (else
|
|
87
87
|
* `forbidden`), creates the account and audits `account.created`. The hash is computed before
|
|
88
88
|
* the lock.
|
|
89
89
|
*/
|
|
@@ -98,45 +98,45 @@ let AccountsService = class AccountsService {
|
|
|
98
98
|
...(actorTokenId !== undefined && { actorTokenId }),
|
|
99
99
|
action: "account.created",
|
|
100
100
|
target: a.id,
|
|
101
|
-
detail: {
|
|
101
|
+
detail: { superAdmin: a.isSuperAdmin },
|
|
102
102
|
});
|
|
103
103
|
return a;
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* CLI: creates
|
|
106
|
+
* CLI: creates a super admin without checking whether the deployment is set up; a taken
|
|
107
107
|
* login → `account.login_taken`.
|
|
108
108
|
*/
|
|
109
|
-
async
|
|
110
|
-
return this.
|
|
109
|
+
async createSuperAdmin(input) {
|
|
110
|
+
return this.insertSuperAdmin(input, await this.hashNewPassword(input.password));
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
113
|
-
* CLI `admin create --if-none`: creates
|
|
113
|
+
* CLI `admin create --if-none`: creates a super admin only when no active one exists. The
|
|
114
114
|
* check and the insert run in one transaction under {@link SetupLock}, the lock the web setup
|
|
115
115
|
* takes, so concurrent runs (and a concurrent web setup) create exactly one. Returns undefined
|
|
116
|
-
* when an active
|
|
116
|
+
* when an active super admin already exists; a taken login still throws
|
|
117
117
|
* `account.login_taken`.
|
|
118
118
|
*/
|
|
119
|
-
async
|
|
120
|
-
return this.
|
|
119
|
+
async createSuperAdminIfNone(input) {
|
|
120
|
+
return this.createSuperAdminIfNoneIn(input, await this.hashNewPassword(input.password));
|
|
121
121
|
}
|
|
122
|
-
async
|
|
122
|
+
async createSuperAdminIfNoneIn(input, passwordHash) {
|
|
123
123
|
await this.setupLock.lock();
|
|
124
|
-
if ((await this.
|
|
124
|
+
if ((await this.countSuperAdmins()) > 0)
|
|
125
125
|
return undefined;
|
|
126
|
-
return this.
|
|
126
|
+
return this.insertSuperAdmin(input, passwordHash);
|
|
127
127
|
}
|
|
128
|
-
async
|
|
128
|
+
async insertSuperAdmin(input, passwordHash) {
|
|
129
129
|
const account = await this.createLocal({
|
|
130
130
|
login: input.login,
|
|
131
131
|
password: input.password,
|
|
132
132
|
displayName: input.displayName,
|
|
133
|
-
|
|
133
|
+
superAdmin: true,
|
|
134
134
|
...(input.email !== undefined && { email: input.email }),
|
|
135
135
|
}, passwordHash);
|
|
136
136
|
await audit(this.db.db, {
|
|
137
137
|
action: "account.created",
|
|
138
138
|
target: account.id,
|
|
139
|
-
detail: {
|
|
139
|
+
detail: { superAdmin: true, via: "cli" },
|
|
140
140
|
});
|
|
141
141
|
return account;
|
|
142
142
|
}
|
|
@@ -163,7 +163,7 @@ let AccountsService = class AccountsService {
|
|
|
163
163
|
"accounts.email",
|
|
164
164
|
"accounts.email_verified",
|
|
165
165
|
"accounts.status",
|
|
166
|
-
"accounts.
|
|
166
|
+
"accounts.is_super_admin",
|
|
167
167
|
"accounts.created_at",
|
|
168
168
|
"accounts.updated_at",
|
|
169
169
|
"local_passwords.password_hash",
|
|
@@ -245,13 +245,13 @@ let AccountsService = class AccountsService {
|
|
|
245
245
|
return (await this.updateAccount(id, patch, actorAccountId, actorTokenId)).account;
|
|
246
246
|
}
|
|
247
247
|
/**
|
|
248
|
-
*
|
|
248
|
+
* A super admin changes an account. Disabling (`status: "disabled"`) revokes the
|
|
249
249
|
* account's sessions (`sessions.revoked_at`) and personal tokens in **the same PG transaction**,
|
|
250
250
|
* all or nothing; returns the revoked session ids, whose Redis markers the caller writes after
|
|
251
251
|
* the commit (the fast path; a failure is only a warning: auth reads PG).
|
|
252
252
|
*/
|
|
253
253
|
async updateAccount(id, patch, actorAccountId, actorTokenId) {
|
|
254
|
-
// Every
|
|
254
|
+
// Every super admin write is serialized by one lock and re-checks the actor under it: two
|
|
255
255
|
// admins revoking each other concurrently cannot leave none, and a just-revoked admin's
|
|
256
256
|
// request in flight fails
|
|
257
257
|
await this.adminLock.lockAndAuthorize(actorAccountId);
|
|
@@ -269,14 +269,14 @@ let AccountsService = class AccountsService {
|
|
|
269
269
|
});
|
|
270
270
|
}
|
|
271
271
|
/**
|
|
272
|
-
* The CLI's `capybara admin grant|revoke <login>` (no actor account): changes the
|
|
273
|
-
* admin flag by local login under the
|
|
274
|
-
* {@link updateAccount} "last active
|
|
272
|
+
* The CLI's `capybara admin grant|revoke <login>` (no actor account): changes the super
|
|
273
|
+
* admin flag by local login under the super admin lock; revoking keeps the
|
|
274
|
+
* {@link updateAccount} "last active super admin" check (`account.last_super_admin`),
|
|
275
275
|
* decided under the lock, so it cannot race a web revoke into none. Audit `account.updated`
|
|
276
276
|
* without an actor, `detail.via = "cli"`. Already in the target state → no change and no audit
|
|
277
277
|
* (`changed: false`). Unknown login → `account.not_found`.
|
|
278
278
|
*/
|
|
279
|
-
async
|
|
279
|
+
async setSuperAdminByLogin(login, isSuperAdmin) {
|
|
280
280
|
let external;
|
|
281
281
|
try {
|
|
282
282
|
external = normalizeLogin(login);
|
|
@@ -284,9 +284,9 @@ let AccountsService = class AccountsService {
|
|
|
284
284
|
catch {
|
|
285
285
|
throw new ApiError("account.not_found", "Account not found");
|
|
286
286
|
}
|
|
287
|
-
return this.
|
|
287
|
+
return this.setSuperAdminIn(external, isSuperAdmin);
|
|
288
288
|
}
|
|
289
|
-
async
|
|
289
|
+
async setSuperAdminIn(external, isSuperAdmin) {
|
|
290
290
|
await this.adminLock.lock();
|
|
291
291
|
const before = await this.db
|
|
292
292
|
.selectFrom("identities")
|
|
@@ -297,10 +297,10 @@ let AccountsService = class AccountsService {
|
|
|
297
297
|
.executeTakeFirst();
|
|
298
298
|
if (!before)
|
|
299
299
|
throw new ApiError("account.not_found", "Account not found");
|
|
300
|
-
if (before.
|
|
300
|
+
if (before.is_super_admin === isSuperAdmin) {
|
|
301
301
|
return { account: toAccount(before), changed: false };
|
|
302
302
|
}
|
|
303
|
-
const patch = {
|
|
303
|
+
const patch = { isSuperAdmin };
|
|
304
304
|
const { account } = await this.applyUpdate(before, patch, {
|
|
305
305
|
detail: { ...patch, via: "cli" },
|
|
306
306
|
});
|
|
@@ -314,12 +314,12 @@ let AccountsService = class AccountsService {
|
|
|
314
314
|
.executeTakeFirstOrThrow();
|
|
315
315
|
return Number(r.n);
|
|
316
316
|
}
|
|
317
|
-
/** Active (status = active)
|
|
318
|
-
async
|
|
317
|
+
/** Active (status = active) super admins, in the context's transaction when there is one. */
|
|
318
|
+
async countSuperAdmins() {
|
|
319
319
|
const r = await this.db
|
|
320
320
|
.selectFrom("accounts")
|
|
321
321
|
.select((eb) => eb.fn.countAll().as("n"))
|
|
322
|
-
.where("
|
|
322
|
+
.where("is_super_admin", "=", true)
|
|
323
323
|
.where("status", "=", "active")
|
|
324
324
|
.executeTakeFirstOrThrow();
|
|
325
325
|
return Number(r.n);
|
|
@@ -334,7 +334,7 @@ let AccountsService = class AccountsService {
|
|
|
334
334
|
id,
|
|
335
335
|
display_name: input.displayName,
|
|
336
336
|
email: input.email ?? null,
|
|
337
|
-
|
|
337
|
+
is_super_admin: input.superAdmin ?? false,
|
|
338
338
|
})
|
|
339
339
|
.returningAll()
|
|
340
340
|
.executeTakeFirstOrThrow();
|
|
@@ -380,8 +380,8 @@ let AccountsService = class AccountsService {
|
|
|
380
380
|
.execute();
|
|
381
381
|
}
|
|
382
382
|
/**
|
|
383
|
-
* Changes the account under the
|
|
384
|
-
* re-checks "the last active
|
|
383
|
+
* Changes the account under the super admin lock the caller holds: updates the row,
|
|
384
|
+
* re-checks "the last active super admin", audits `account.updated`; disabling revokes the
|
|
385
385
|
* account's sessions and personal tokens.
|
|
386
386
|
*/
|
|
387
387
|
async applyUpdate(before, patch, auditAs) {
|
|
@@ -391,18 +391,18 @@ let AccountsService = class AccountsService {
|
|
|
391
391
|
values.display_name = patch.displayName;
|
|
392
392
|
if (patch.status !== undefined)
|
|
393
393
|
values.status = patch.status;
|
|
394
|
-
if (patch.
|
|
395
|
-
values.
|
|
394
|
+
if (patch.isSuperAdmin !== undefined)
|
|
395
|
+
values.is_super_admin = patch.isSuperAdmin;
|
|
396
396
|
const row = await this.db
|
|
397
397
|
.updateTable("accounts")
|
|
398
398
|
.set(values)
|
|
399
399
|
.where("id", "=", id)
|
|
400
400
|
.returningAll()
|
|
401
401
|
.executeTakeFirstOrThrow();
|
|
402
|
-
const wasActiveAdmin = before.
|
|
403
|
-
const isActiveAdmin = row.
|
|
404
|
-
if (wasActiveAdmin && !isActiveAdmin && (await this.
|
|
405
|
-
throw new ApiError("account.
|
|
402
|
+
const wasActiveAdmin = before.is_super_admin && before.status === "active";
|
|
403
|
+
const isActiveAdmin = row.is_super_admin && row.status === "active";
|
|
404
|
+
if (wasActiveAdmin && !isActiveAdmin && (await this.countSuperAdmins()) === 0) {
|
|
405
|
+
throw new ApiError("account.last_super_admin", "Cannot remove the last active super admin");
|
|
406
406
|
}
|
|
407
407
|
await audit(this.db.db, {
|
|
408
408
|
...(auditAs.actorAccountId !== undefined && { actorAccountId: auditAs.actorAccountId }),
|
|
@@ -439,10 +439,10 @@ __decorate([
|
|
|
439
439
|
], AccountsService.prototype, "createByAdminIn", null);
|
|
440
440
|
__decorate([
|
|
441
441
|
Transactional()
|
|
442
|
-
], AccountsService.prototype, "
|
|
442
|
+
], AccountsService.prototype, "createSuperAdminIfNoneIn", null);
|
|
443
443
|
__decorate([
|
|
444
444
|
Transactional()
|
|
445
|
-
], AccountsService.prototype, "
|
|
445
|
+
], AccountsService.prototype, "insertSuperAdmin", null);
|
|
446
446
|
__decorate([
|
|
447
447
|
Transactional()
|
|
448
448
|
], AccountsService.prototype, "changePasswordIn", null);
|
|
@@ -451,7 +451,7 @@ __decorate([
|
|
|
451
451
|
], AccountsService.prototype, "updateAccount", null);
|
|
452
452
|
__decorate([
|
|
453
453
|
Transactional()
|
|
454
|
-
], AccountsService.prototype, "
|
|
454
|
+
], AccountsService.prototype, "setSuperAdminIn", null);
|
|
455
455
|
__decorate([
|
|
456
456
|
Transactional()
|
|
457
457
|
], AccountsService.prototype, "insertLocal", null);
|
|
@@ -465,7 +465,7 @@ AccountsService = __decorate([
|
|
|
465
465
|
Injectable(),
|
|
466
466
|
__param(0, Inject(KernelDb)),
|
|
467
467
|
__param(1, Inject(TransactionHost)),
|
|
468
|
-
__param(2, Inject(
|
|
468
|
+
__param(2, Inject(SuperAdminLock)),
|
|
469
469
|
__param(3, Inject(SetupLock))
|
|
470
470
|
], AccountsService);
|
|
471
471
|
export { AccountsService };
|
|
@@ -478,7 +478,7 @@ let AccountsModule = class AccountsModule {
|
|
|
478
478
|
};
|
|
479
479
|
AccountsModule = __decorate([
|
|
480
480
|
Module({
|
|
481
|
-
imports: [SetupLockModule,
|
|
481
|
+
imports: [SetupLockModule, SuperAdminLockModule],
|
|
482
482
|
providers: [AccountsService],
|
|
483
483
|
exports: [AccountsService],
|
|
484
484
|
})
|
package/dist/identity/audit.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
|
5
5
|
* so the event commits or rolls back with the write it records.
|
|
6
6
|
*/
|
|
7
7
|
export declare function audit(db: KernelSchemaDb, e: {
|
|
8
|
-
|
|
8
|
+
/** The acting account; absent or null for the kernel itself (a job such as the scope sync). */
|
|
9
|
+
actorAccountId?: string | null;
|
|
9
10
|
actorTokenId?: string;
|
|
10
11
|
orgId?: string;
|
|
11
12
|
action: string;
|
|
@@ -15,7 +15,7 @@ import { CredentialThrottler } from "../infra/throttler/credential-throttler.js"
|
|
|
15
15
|
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
16
16
|
import { ZBody } from "../infra/validation/zod-params.js";
|
|
17
17
|
import { AccountsService } from "./accounts.js";
|
|
18
|
-
import { ACCESS_COOKIE, clearSessionCookies,
|
|
18
|
+
import { ACCESS_COOKIE, clearSessionCookies, refreshCookieValues, setSessionCookies, } from "./cookies.js";
|
|
19
19
|
import { Public } from "./principal.js";
|
|
20
20
|
import { SessionService } from "./sessions.js";
|
|
21
21
|
const LoginBodySchema = z.object({ login: z.string().max(256), password: z.string() });
|
|
@@ -74,9 +74,13 @@ let AuthController = class AuthController {
|
|
|
74
74
|
*/
|
|
75
75
|
async refresh(req, reply) {
|
|
76
76
|
try {
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
// the header may carry several cap_rt (legacy Path and Path=/): the current one of a live session wins
|
|
78
|
+
const candidates = refreshCookieValues(req.headers.cookie);
|
|
79
|
+
if (candidates.length === 0) {
|
|
79
80
|
throw new ApiError("auth.refresh_invalid", "Refresh token is missing");
|
|
81
|
+
}
|
|
82
|
+
// none is current: the last one (the Path=/ cookie) goes through the usual replay handling
|
|
83
|
+
const rt = (await this.sessions.pickCurrentRefresh(candidates)) ?? candidates.at(-1);
|
|
80
84
|
const session = await this.sessions.refresh(rt, clientMeta(req));
|
|
81
85
|
const account = await this.accounts.get(session.accountId);
|
|
82
86
|
if (!account)
|
|
@@ -94,13 +98,13 @@ let AuthController = class AuthController {
|
|
|
94
98
|
async logout(req, reply) {
|
|
95
99
|
clearSessionCookies(reply);
|
|
96
100
|
const at = req.cookies[ACCESS_COOKIE];
|
|
97
|
-
const
|
|
101
|
+
const rts = refreshCookieValues(req.headers.cookie);
|
|
98
102
|
if (at) {
|
|
99
103
|
const sid = await this.sessions.sessionIdFromAccess(at);
|
|
100
104
|
if (sid !== undefined)
|
|
101
105
|
await this.sessions.revoke(sid);
|
|
102
106
|
}
|
|
103
|
-
|
|
107
|
+
for (const rt of rts)
|
|
104
108
|
await this.sessions.revokeByRefresh(rt);
|
|
105
109
|
}
|
|
106
110
|
};
|
|
@@ -3,21 +3,29 @@ import { Reflector } from "@nestjs/core";
|
|
|
3
3
|
import type { FastifyRequest } from "fastify";
|
|
4
4
|
import { AccountsService } from "./accounts.js";
|
|
5
5
|
import { ApiTokenService } from "./api-tokens.js";
|
|
6
|
+
import { type Principal } from "./principal.js";
|
|
6
7
|
import { SessionService } from "./sessions.js";
|
|
7
8
|
/** CSRF 头:Cookie 认证的非安全请求(及所有公开路由的非安全请求)必须带 `X-Capybara-Csrf: 1`。 */
|
|
8
9
|
export declare const CSRF_HEADER = "x-capybara-csrf";
|
|
9
|
-
/** 解析凭据要用的服务({@link AuthGuard} 与 {@link
|
|
10
|
+
/** 解析凭据要用的服务({@link AuthGuard} 与 {@link authorizeSuperAdmin} 共用)。 */
|
|
10
11
|
export interface AuthServices {
|
|
11
12
|
accounts: AccountsService;
|
|
12
13
|
sessions: SessionService;
|
|
13
14
|
tokens: ApiTokenService;
|
|
14
15
|
}
|
|
15
16
|
/**
|
|
16
|
-
* 在读请求体之前(Fastify `onRequest`)按 `@
|
|
17
|
-
* 等,Cookie 认证的非安全请求要求 CSRF
|
|
17
|
+
* 在读请求体之前(Fastify `onRequest`)按 `@SuperAdmin` 路由的规则认证:无凭据 / 凭据无效 → `auth.required`
|
|
18
|
+
* 等,Cookie 认证的非安全请求要求 CSRF 头,服务令牌与非超级管理员 → `forbidden`。插件包上传用它:
|
|
18
19
|
* 未认证的大请求体不被读入内存。之后 {@link AuthGuard} 照常再判一次。
|
|
19
20
|
*/
|
|
20
|
-
export declare function
|
|
21
|
+
export declare function authorizeSuperAdmin(req: FastifyRequest, s: AuthServices): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Before the body is read (Fastify `onRequest`), for an org's package upload (an `@OrgAction`
|
|
24
|
+
* route of a human-only action): authenticated like {@link authorizeSuperAdmin}, a person (service
|
|
25
|
+
* tokens -> `forbidden`), CSRF for cookies. Returns the principal for the org role check that also
|
|
26
|
+
* runs before the body (ruling P3-29); `OrgGuard` and the service's lock re-check it afterwards.
|
|
27
|
+
*/
|
|
28
|
+
export declare function authenticateOrgUploader(req: FastifyRequest, s: AuthServices): Promise<Principal>;
|
|
21
29
|
/**
|
|
22
30
|
* 全局守卫(`APP_GUARD`),默认拒绝:
|
|
23
31
|
* 1. `Authorization: Bearer cap_pat_…|cap_svc_…` → API 令牌;个人令牌再实时读账号状态。不做 CSRF 检查。
|
|
@@ -27,7 +35,7 @@ export declare function authorizeEnterpriseAdmin(req: FastifyRequest, s: AuthSer
|
|
|
27
35
|
* (便于登出 / 刷新);PG / Redis 故障等其他异常照常抛出。
|
|
28
36
|
* 4. 路由约束:service principal 只能访问 `@AllowService` 路由(否则 `forbidden`);
|
|
29
37
|
* `@SessionOnly` 要求 Web 会话:个人令牌 → `auth.session_required`,服务令牌(即使路由经 `@OrgAction`
|
|
30
|
-
* 隐含 `@AllowService`)→ `forbidden`;`@
|
|
38
|
+
* 隐含 `@AllowService`)→ `forbidden`;`@SuperAdmin` 要求超级管理员(`forbidden`)。
|
|
31
39
|
* 5. `@Public` 路由的非安全方法无论是否带 Cookie 都要求 CSRF 头。
|
|
32
40
|
* 账号状态每个请求都从 PG 实时读取,不在进程内缓存。插件路由 `/plugins/*` 不经过 Nest,不受此守卫约束。
|
|
33
41
|
*/
|
|
@@ -13,7 +13,7 @@ import { ApiError } from "../errors.js";
|
|
|
13
13
|
import { AccountsService } from "./accounts.js";
|
|
14
14
|
import { ApiTokenService } from "./api-tokens.js";
|
|
15
15
|
import { ACCESS_COOKIE } from "./cookies.js";
|
|
16
|
-
import { ALLOW_SERVICE_KEY,
|
|
16
|
+
import { ALLOW_SERVICE_KEY, PUBLIC_KEY, SESSION_ONLY_KEY, SUPER_ADMIN_KEY, } from "./principal.js";
|
|
17
17
|
import { SessionService } from "./sessions.js";
|
|
18
18
|
/** CSRF 头:Cookie 认证的非安全请求(及所有公开路由的非安全请求)必须带 `X-Capybara-Csrf: 1`。 */
|
|
19
19
|
export const CSRF_HEADER = "x-capybara-csrf";
|
|
@@ -62,11 +62,11 @@ async function resolvePrincipal(req, s) {
|
|
|
62
62
|
return undefined;
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
|
-
* 在读请求体之前(Fastify `onRequest`)按 `@
|
|
66
|
-
* 等,Cookie 认证的非安全请求要求 CSRF
|
|
65
|
+
* 在读请求体之前(Fastify `onRequest`)按 `@SuperAdmin` 路由的规则认证:无凭据 / 凭据无效 → `auth.required`
|
|
66
|
+
* 等,Cookie 认证的非安全请求要求 CSRF 头,服务令牌与非超级管理员 → `forbidden`。插件包上传用它:
|
|
67
67
|
* 未认证的大请求体不被读入内存。之后 {@link AuthGuard} 照常再判一次。
|
|
68
68
|
*/
|
|
69
|
-
export async function
|
|
69
|
+
export async function authorizeSuperAdmin(req, s) {
|
|
70
70
|
const resolved = await resolvePrincipal(req, s);
|
|
71
71
|
if (!resolved)
|
|
72
72
|
throw new ApiError("auth.required", "Authentication required");
|
|
@@ -76,8 +76,25 @@ export async function authorizeEnterpriseAdmin(req, s) {
|
|
|
76
76
|
if (p.kind === "service") {
|
|
77
77
|
throw new ApiError("forbidden", "Service tokens cannot access this endpoint");
|
|
78
78
|
}
|
|
79
|
-
if (!p.account.
|
|
80
|
-
throw new ApiError("forbidden", "
|
|
79
|
+
if (!p.account.isSuperAdmin)
|
|
80
|
+
throw new ApiError("forbidden", "Super admin required");
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Before the body is read (Fastify `onRequest`), for an org's package upload (an `@OrgAction`
|
|
84
|
+
* route of a human-only action): authenticated like {@link authorizeSuperAdmin}, a person (service
|
|
85
|
+
* tokens -> `forbidden`), CSRF for cookies. Returns the principal for the org role check that also
|
|
86
|
+
* runs before the body (ruling P3-29); `OrgGuard` and the service's lock re-check it afterwards.
|
|
87
|
+
*/
|
|
88
|
+
export async function authenticateOrgUploader(req, s) {
|
|
89
|
+
const resolved = await resolvePrincipal(req, s);
|
|
90
|
+
if (!resolved)
|
|
91
|
+
throw new ApiError("auth.required", "Authentication required");
|
|
92
|
+
if (resolved.cookie && !SAFE_METHODS.has(req.method.toUpperCase()))
|
|
93
|
+
requireCsrf(req);
|
|
94
|
+
if (resolved.principal.kind === "service") {
|
|
95
|
+
throw new ApiError("forbidden", "Service tokens cannot access this endpoint");
|
|
96
|
+
}
|
|
97
|
+
return resolved.principal;
|
|
81
98
|
}
|
|
82
99
|
/**
|
|
83
100
|
* 全局守卫(`APP_GUARD`),默认拒绝:
|
|
@@ -88,7 +105,7 @@ export async function authorizeEnterpriseAdmin(req, s) {
|
|
|
88
105
|
* (便于登出 / 刷新);PG / Redis 故障等其他异常照常抛出。
|
|
89
106
|
* 4. 路由约束:service principal 只能访问 `@AllowService` 路由(否则 `forbidden`);
|
|
90
107
|
* `@SessionOnly` 要求 Web 会话:个人令牌 → `auth.session_required`,服务令牌(即使路由经 `@OrgAction`
|
|
91
|
-
* 隐含 `@AllowService`)→ `forbidden`;`@
|
|
108
|
+
* 隐含 `@AllowService`)→ `forbidden`;`@SuperAdmin` 要求超级管理员(`forbidden`)。
|
|
92
109
|
* 5. `@Public` 路由的非安全方法无论是否带 Cookie 都要求 CSRF 头。
|
|
93
110
|
* 账号状态每个请求都从 PG 实时读取,不在进程内缓存。插件路由 `/plugins/*` 不经过 Nest,不受此守卫约束。
|
|
94
111
|
*/
|
|
@@ -142,8 +159,8 @@ let AuthGuard = class AuthGuard {
|
|
|
142
159
|
if (flag(SESSION_ONLY_KEY) && !(p.kind === "user" && p.via === "session")) {
|
|
143
160
|
throw new ApiError("auth.session_required", "This endpoint requires a web session");
|
|
144
161
|
}
|
|
145
|
-
if (flag(
|
|
146
|
-
throw new ApiError("forbidden", "
|
|
162
|
+
if (flag(SUPER_ADMIN_KEY) && !(p.kind === "user" && p.account.isSuperAdmin)) {
|
|
163
|
+
throw new ApiError("forbidden", "Super admin required");
|
|
147
164
|
}
|
|
148
165
|
return true;
|
|
149
166
|
}
|
|
@@ -3,14 +3,29 @@ import type { KernelConfig } from "../config/schema.js";
|
|
|
3
3
|
import type { IssuedSession } from "./sessions.js";
|
|
4
4
|
/** access token Cookie:随所有请求发送。 */
|
|
5
5
|
export declare const ACCESS_COOKIE = "cap_at";
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* The refresh-token cookie: SameSite=Lax so a top-level navigation from another site (an IM card
|
|
8
|
+
* link, an email, an OAuth return) carries it and the web tier can renew the session. The refresh
|
|
9
|
+
* endpoint is POST-only and requires `X-Capybara-Csrf`, and Lax cookies are not sent on cross-site
|
|
10
|
+
* POSTs, so this does not widen CSRF exposure.
|
|
11
|
+
*/
|
|
7
12
|
export declare const REFRESH_COOKIE = "cap_rt";
|
|
8
|
-
/** refresh Cookie 的 Path。 */
|
|
9
|
-
export declare const REFRESH_COOKIE_PATH = "/api/v1/auth";
|
|
10
13
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
14
|
+
* Path of the refresh Cookie: `/`, so the web tier sees it on page requests and can renew the
|
|
15
|
+
* session while rendering on the server.
|
|
16
|
+
*/
|
|
17
|
+
export declare const REFRESH_COOKIE_PATH = "/";
|
|
18
|
+
/** The Path earlier releases set `cap_rt` on; browsers may still hold it, so it is cleared too. */
|
|
19
|
+
export declare const LEGACY_REFRESH_COOKIE_PATH = "/api/v1/auth";
|
|
20
|
+
/**
|
|
21
|
+
* Writes the session cookies. Both are HttpOnly, host-only (no Domain), SameSite=Lax and Path=/;
|
|
22
|
+
* the `cap_rt` on the legacy Path is cleared at the same time.
|
|
13
23
|
*/
|
|
14
24
|
export declare function setSessionCookies(reply: FastifyReply, s: IssuedSession, cfg: KernelConfig): void;
|
|
15
25
|
/** 清除会话 Cookie(Path 必须与设置时一致才能覆盖)。 */
|
|
16
26
|
export declare function clearSessionCookies(reply: FastifyReply): void;
|
|
27
|
+
/**
|
|
28
|
+
* Every `cap_rt` value of a raw `cookie` header, in header order. A browser holding the legacy
|
|
29
|
+
* Path cookie and the new one sends both, the more specific Path first.
|
|
30
|
+
*/
|
|
31
|
+
export declare function refreshCookieValues(header: string | undefined): string[];
|
package/dist/identity/cookies.js
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
/** access token Cookie:随所有请求发送。 */
|
|
2
2
|
export const ACCESS_COOKIE = "cap_at";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* The refresh-token cookie: SameSite=Lax so a top-level navigation from another site (an IM card
|
|
5
|
+
* link, an email, an OAuth return) carries it and the web tier can renew the session. The refresh
|
|
6
|
+
* endpoint is POST-only and requires `X-Capybara-Csrf`, and Lax cookies are not sent on cross-site
|
|
7
|
+
* POSTs, so this does not widen CSRF exposure.
|
|
8
|
+
*/
|
|
4
9
|
export const REFRESH_COOKIE = "cap_rt";
|
|
5
|
-
/** refresh Cookie 的 Path。 */
|
|
6
|
-
export const REFRESH_COOKIE_PATH = "/api/v1/auth";
|
|
7
10
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
11
|
+
* Path of the refresh Cookie: `/`, so the web tier sees it on page requests and can renew the
|
|
12
|
+
* session while rendering on the server.
|
|
13
|
+
*/
|
|
14
|
+
export const REFRESH_COOKIE_PATH = "/";
|
|
15
|
+
/** The Path earlier releases set `cap_rt` on; browsers may still hold it, so it is cleared too. */
|
|
16
|
+
export const LEGACY_REFRESH_COOKIE_PATH = "/api/v1/auth";
|
|
17
|
+
/**
|
|
18
|
+
* Writes the session cookies. Both are HttpOnly, host-only (no Domain), SameSite=Lax and Path=/;
|
|
19
|
+
* the `cap_rt` on the legacy Path is cleared at the same time.
|
|
10
20
|
*/
|
|
11
21
|
export function setSessionCookies(reply, s, cfg) {
|
|
12
22
|
const secure = cfg.auth.cookieSecure;
|
|
@@ -20,13 +30,41 @@ export function setSessionCookies(reply, s, cfg) {
|
|
|
20
30
|
reply.setCookie(REFRESH_COOKIE, s.refreshToken, {
|
|
21
31
|
path: REFRESH_COOKIE_PATH,
|
|
22
32
|
httpOnly: true,
|
|
23
|
-
sameSite: "
|
|
33
|
+
sameSite: "lax",
|
|
24
34
|
secure,
|
|
25
35
|
maxAge: cfg.auth.refreshTokenTtlDays * 86400,
|
|
26
36
|
});
|
|
37
|
+
reply.clearCookie(REFRESH_COOKIE, { path: LEGACY_REFRESH_COOKIE_PATH });
|
|
27
38
|
}
|
|
28
39
|
/** 清除会话 Cookie(Path 必须与设置时一致才能覆盖)。 */
|
|
29
40
|
export function clearSessionCookies(reply) {
|
|
30
41
|
reply.clearCookie(ACCESS_COOKIE, { path: "/" });
|
|
31
42
|
reply.clearCookie(REFRESH_COOKIE, { path: REFRESH_COOKIE_PATH });
|
|
43
|
+
reply.clearCookie(REFRESH_COOKIE, { path: LEGACY_REFRESH_COOKIE_PATH });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Every `cap_rt` value of a raw `cookie` header, in header order. A browser holding the legacy
|
|
47
|
+
* Path cookie and the new one sends both, the more specific Path first.
|
|
48
|
+
*/
|
|
49
|
+
export function refreshCookieValues(header) {
|
|
50
|
+
if (!header)
|
|
51
|
+
return [];
|
|
52
|
+
const out = [];
|
|
53
|
+
for (const part of header.split(";")) {
|
|
54
|
+
const eq = part.indexOf("=");
|
|
55
|
+
if (eq < 0 || part.slice(0, eq).trim() !== REFRESH_COOKIE)
|
|
56
|
+
continue;
|
|
57
|
+
let v = part.slice(eq + 1).trim();
|
|
58
|
+
if (v.startsWith('"') && v.endsWith('"') && v.length >= 2)
|
|
59
|
+
v = v.slice(1, -1);
|
|
60
|
+
try {
|
|
61
|
+
v = decodeURIComponent(v);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// keep the raw value
|
|
65
|
+
}
|
|
66
|
+
if (v)
|
|
67
|
+
out.push(v);
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
32
70
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Identity: accounts, sessions, API tokens, deployment settings and the
|
|
2
|
+
* Identity: accounts, sessions, API tokens, deployment settings and the super admin lock,
|
|
3
3
|
* external identities with IM binding and third-party sign-in.
|
|
4
4
|
*/
|
|
5
5
|
export declare class IdentityModule {
|
|
@@ -11,14 +11,14 @@ import { OrgLockModule } from "../orgs/org-lock.js";
|
|
|
11
11
|
import { AccountsModule } from "./accounts.js";
|
|
12
12
|
import { ApiTokenService } from "./api-tokens.js";
|
|
13
13
|
import { IdentityBinding } from "./binding.js";
|
|
14
|
-
import { EnterpriseAdminLockModule } from "./enterprise-admin.js";
|
|
15
14
|
import { ExternalIdentities } from "./external.js";
|
|
16
15
|
import { ExternalIdentityLock } from "./external-identity-lock.js";
|
|
17
16
|
import { SessionService } from "./sessions.js";
|
|
18
17
|
import { SettingsService } from "./settings.js";
|
|
19
18
|
import { SsoFlow } from "./sso.js";
|
|
19
|
+
import { SuperAdminLockModule } from "./super-admin.js";
|
|
20
20
|
/**
|
|
21
|
-
* Identity: accounts, sessions, API tokens, deployment settings and the
|
|
21
|
+
* Identity: accounts, sessions, API tokens, deployment settings and the super admin lock,
|
|
22
22
|
* external identities with IM binding and third-party sign-in.
|
|
23
23
|
*/
|
|
24
24
|
let IdentityModule = class IdentityModule {
|
|
@@ -29,7 +29,7 @@ IdentityModule = __decorate([
|
|
|
29
29
|
AccountsModule,
|
|
30
30
|
OrgLockModule,
|
|
31
31
|
SetupLockModule,
|
|
32
|
-
|
|
32
|
+
SuperAdminLockModule,
|
|
33
33
|
ExtensionRegistryModule,
|
|
34
34
|
],
|
|
35
35
|
providers: [
|
|
@@ -46,7 +46,7 @@ IdentityModule = __decorate([
|
|
|
46
46
|
SessionService,
|
|
47
47
|
ApiTokenService,
|
|
48
48
|
SettingsService,
|
|
49
|
-
|
|
49
|
+
SuperAdminLockModule,
|
|
50
50
|
ExternalIdentities,
|
|
51
51
|
IdentityBinding,
|
|
52
52
|
SsoFlow,
|
|
@@ -8,6 +8,7 @@ import { type Account, AccountsService } from "./accounts.js";
|
|
|
8
8
|
import { type ApiTokenRecord, ApiTokenService } from "./api-tokens.js";
|
|
9
9
|
import { type Principal } from "./principal.js";
|
|
10
10
|
import { SessionService } from "./sessions.js";
|
|
11
|
+
import { SettingsService } from "./settings.js";
|
|
11
12
|
declare const ChangePasswordSchema: z.ZodObject<{
|
|
12
13
|
currentPassword: z.ZodString;
|
|
13
14
|
newPassword: z.ZodString;
|
|
@@ -33,12 +34,15 @@ export declare class MeController {
|
|
|
33
34
|
private readonly tokens;
|
|
34
35
|
private readonly throttler;
|
|
35
36
|
private readonly log;
|
|
36
|
-
|
|
37
|
+
private readonly settings;
|
|
38
|
+
constructor(accounts: AccountsService, sessions: SessionService, orgs: OrgsService, tokens: ApiTokenService, throttler: CredentialThrottler, log: Logger, settings: SettingsService);
|
|
37
39
|
me(principal: Principal): Promise<{
|
|
38
40
|
account: Account;
|
|
39
41
|
via: "session" | "pat";
|
|
40
42
|
currentOrgId: string | null;
|
|
41
43
|
memberships: MembershipView[];
|
|
44
|
+
/** Whether `POST /api/v1/orgs` would accept this account (the `orgCreation` setting). */
|
|
45
|
+
canCreateOrg: boolean;
|
|
42
46
|
}>;
|
|
43
47
|
/** 切换当前组织(仅 Web 会话);`null` 清空。非成员或已软删除的组织 → `org.not_found`。 */
|
|
44
48
|
setCurrentOrg(principal: Principal, body: z.infer<typeof CurrentOrgSchema>): Promise<void>;
|