@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.2
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/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +179 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +261 -329
- package/dist/agents/definition.d.ts +8 -0
- package/dist/agents/definition.js +8 -0
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +20 -4
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +323 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +30 -13
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +2 -2
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +10 -4
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +10 -10
- package/dist/conversations/artifacts.js +35 -9
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +28 -18
- package/dist/conversations/event-log.js +74 -27
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/run-replay.d.ts +56 -8
- package/dist/evals/run-replay.js +140 -80
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +85 -57
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +9 -6
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +14 -8
- package/dist/orgs/settings.service.js +75 -46
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +7 -0
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -137
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +24 -57
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +26 -17
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +121 -75
- package/dist/runtime/run-worker.js +340 -226
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +4 -4
- package/dist/runtime/subagents/definition.js +2 -2
- package/dist/runtime/subagents/dispatch.d.ts +87 -6
- package/dist/runtime/subagents/dispatch.js +135 -140
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +1 -1
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +3 -3
- package/dist/runtime/subagents/roster.js +1 -1
- package/dist/runtime/subagents/skill-fork.d.ts +6 -7
- package/dist/runtime/subagents/skill-fork.js +16 -5
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -100
- package/dist/runtime/waits.d.ts +125 -57
- package/dist/runtime/waits.js +431 -208
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +33 -20
- package/dist/skills/catalog.js +96 -53
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +28 -18
- package/dist/skills/changes.service.js +421 -364
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invoke.d.ts +16 -15
- package/dist/skills/invoke.js +48 -17
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +27 -25
- package/dist/tools/approvals.service.js +324 -258
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtins/ask-user.d.ts +2 -2
- package/dist/tools/builtins/ask-user.js +1 -1
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +2 -2
- package/dist/tools/builtins/read-tool-output.js +1 -1
- package/dist/tools/builtins/sandbox/bash.js +2 -2
- package/dist/tools/builtins/sandbox/common.d.ts +2 -1
- package/dist/tools/builtins/sandbox/deliver.js +2 -2
- package/dist/tools/builtins/sandbox/edit.js +1 -1
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -2
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/write.js +1 -1
- package/dist/tools/builtins/skill-load.d.ts +3 -3
- package/dist/tools/builtins/skill-load.js +1 -1
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +434 -344
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +111 -79
- package/dist/tools/info.d.ts +12 -9
- package/dist/tools/info.js +33 -7
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +47 -3
- package/dist/tools/pipeline.d.ts +62 -46
- package/dist/tools/pipeline.js +145 -64
- package/dist/tools/policy.d.ts +2 -2
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +8 -5
- package/dist/tools/questions.service.d.ts +25 -24
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +30 -20
- package/dist/tools/registry.js +73 -37
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +9 -2
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
1
11
|
import { ApiError } from "../errors.js";
|
|
2
12
|
import { audit } from "../identity/audit.js";
|
|
3
|
-
import {
|
|
13
|
+
import { afterCommit } from "../infra/database/after-commit.js";
|
|
14
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
15
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
16
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
17
|
+
import { Offboarding } from "./offboarding.js";
|
|
18
|
+
import { OrgLock } from "./org-lock.js";
|
|
4
19
|
/**
|
|
5
20
|
* 账号是不是某个组织的匿名访客(`org_anonymous_accounts`)。匿名访客没有登录方式,只能以 guest 身份
|
|
6
21
|
* 代表 IM 里未绑定的人:不能被授予别的角色、成为 owner、指派为 agent 负责人、加入别的组织或被移出。
|
|
@@ -22,14 +37,18 @@ export async function rejectAnonymousGuest(db, accountId) {
|
|
|
22
37
|
/**
|
|
23
38
|
* 成员服务。发起人只传账号 id,角色由服务在组织行锁内实时读取,调用方无法传入过期角色。所有写操作在事务内先 `SELECT … FROM orgs WHERE id = $1 FOR NO KEY UPDATE`,
|
|
24
39
|
* 把同一组织的成员变更串行化(多副本下两个 owner 并发互相降级也恰好剩一个 owner)。
|
|
25
|
-
* 框架无关,由调用方注入 db。
|
|
26
40
|
*/
|
|
27
|
-
|
|
41
|
+
let MembersService = class MembersService {
|
|
28
42
|
db;
|
|
43
|
+
txHost;
|
|
44
|
+
orgLock;
|
|
29
45
|
offboarding;
|
|
30
|
-
|
|
31
|
-
|
|
46
|
+
constructor(db, txHost, orgLock,
|
|
47
|
+
/** Removing and leaving go through offboarding. */
|
|
48
|
+
offboarding) {
|
|
32
49
|
this.db = db;
|
|
50
|
+
this.txHost = txHost;
|
|
51
|
+
this.orgLock = orgLock;
|
|
33
52
|
this.offboarding = offboarding;
|
|
34
53
|
}
|
|
35
54
|
async list(orgId) {
|
|
@@ -61,33 +80,30 @@ export class MembersService {
|
|
|
61
80
|
/**
|
|
62
81
|
* 加入成员(邀请接受等,手动加入的唯一入口);已是成员 → `member.already_exists`;匿名访客 → `member.anonymous_guest`。
|
|
63
82
|
* 同一事务删除此人在该组织的通讯录排除(Ruling A20:手动重新加入后,通讯录同步恢复照常管理此人)。
|
|
64
|
-
* `actorAccountId` 仅用于审计。
|
|
83
|
+
* `actorAccountId` 仅用于审计。In the caller's transaction when there is one.
|
|
65
84
|
*/
|
|
66
|
-
async add(orgId, accountId, role, actorAccountId
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
});
|
|
89
|
-
};
|
|
90
|
-
return trx ? run(trx) : this.db.transaction().execute(run);
|
|
85
|
+
async add(orgId, accountId, role, actorAccountId) {
|
|
86
|
+
await this.orgLock.lock(orgId);
|
|
87
|
+
await rejectAnonymousGuest(this.db.db, accountId);
|
|
88
|
+
if (await this.roleIn(orgId, accountId)) {
|
|
89
|
+
throw new ApiError("member.already_exists", "Account is already a member");
|
|
90
|
+
}
|
|
91
|
+
await this.db
|
|
92
|
+
.insertInto("memberships")
|
|
93
|
+
.values({ org_id: orgId, account_id: accountId, role })
|
|
94
|
+
.execute();
|
|
95
|
+
await this.db
|
|
96
|
+
.deleteFrom("directory_exclusions")
|
|
97
|
+
.where("org_id", "=", orgId)
|
|
98
|
+
.where("account_id", "=", accountId)
|
|
99
|
+
.execute();
|
|
100
|
+
await audit(this.db.db, {
|
|
101
|
+
actorAccountId,
|
|
102
|
+
orgId,
|
|
103
|
+
action: "org.member.added",
|
|
104
|
+
target: accountId,
|
|
105
|
+
detail: { role },
|
|
106
|
+
});
|
|
91
107
|
}
|
|
92
108
|
/**
|
|
93
109
|
* 改角色:授予或撤销 owner、或改动一个 owner,只有 owner 能做(`org.owner_required`);
|
|
@@ -96,25 +112,26 @@ export class MembersService {
|
|
|
96
112
|
* 目标是匿名访客 → `member.anonymous_guest`。
|
|
97
113
|
*/
|
|
98
114
|
async changeRole(orgId, targetId, role, actorAccountId, actorTokenId) {
|
|
99
|
-
await this.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
await this.changeRoleIn(orgId, targetId, role, actorAccountId, actorTokenId);
|
|
116
|
+
}
|
|
117
|
+
async changeRoleIn(orgId, targetId, role, actorAccountId, actorTokenId) {
|
|
118
|
+
const { role: actorRole } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "org.members.manage");
|
|
119
|
+
const before = await this.requireMember(orgId, targetId);
|
|
120
|
+
await rejectAnonymousGuest(this.db.db, targetId);
|
|
121
|
+
if ((role === "owner" || before === "owner") && actorRole !== "owner") {
|
|
122
|
+
throw new ApiError("org.owner_required", "Only an owner can change owner roles");
|
|
123
|
+
}
|
|
124
|
+
if (before === role)
|
|
125
|
+
return;
|
|
126
|
+
await this.setRole(orgId, targetId, role);
|
|
127
|
+
await this.assertHasOwner(orgId);
|
|
128
|
+
await audit(this.db.db, {
|
|
129
|
+
actorAccountId,
|
|
130
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
131
|
+
orgId,
|
|
132
|
+
action: "org.member.role_changed",
|
|
133
|
+
target: targetId,
|
|
134
|
+
detail: { from: before, to: role },
|
|
118
135
|
});
|
|
119
136
|
}
|
|
120
137
|
/**
|
|
@@ -123,46 +140,49 @@ export class MembersService {
|
|
|
123
140
|
* 匿名访客不能移出(`member.anonymous_guest`;不再需要匿名访问时把渠道连接改回绑定策略)。
|
|
124
141
|
*/
|
|
125
142
|
async remove(orgId, targetId, actorAccountId, actorTokenId) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
+
await this.removeIn(orgId, targetId, actorAccountId, actorTokenId);
|
|
144
|
+
}
|
|
145
|
+
async removeIn(orgId, targetId, actorAccountId, actorTokenId) {
|
|
146
|
+
const { role: actorRole } = await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "org.members.manage");
|
|
147
|
+
const before = await this.requireMember(orgId, targetId);
|
|
148
|
+
await rejectAnonymousGuest(this.db.db, targetId);
|
|
149
|
+
if (before === "owner" && actorRole !== "owner") {
|
|
150
|
+
throw new ApiError("org.owner_required", "Only an owner can remove an owner");
|
|
151
|
+
}
|
|
152
|
+
const actor = { actorAccountId, ...(actorTokenId !== undefined && { actorTokenId }) };
|
|
153
|
+
const res = await this.offboarding.offboard(orgId, targetId, "removed", actor);
|
|
154
|
+
// the markers, events and run stops follow the root commit (none after a rollback)
|
|
155
|
+
afterCommit(() => this.offboarding.afterOffboard(res));
|
|
156
|
+
await audit(this.db.db, {
|
|
157
|
+
...actor,
|
|
158
|
+
orgId,
|
|
159
|
+
action: "org.member.removed",
|
|
160
|
+
target: targetId,
|
|
161
|
+
detail: { role: before },
|
|
143
162
|
});
|
|
144
|
-
|
|
163
|
+
return res;
|
|
145
164
|
}
|
|
146
165
|
/** 主动离开:走离职处理(原因 `left`);最后一个 owner → `org.last_owner`。 */
|
|
147
166
|
async leave(orgId, accountId, actorTokenId) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
await this.leaveIn(orgId, accountId, actorTokenId);
|
|
168
|
+
}
|
|
169
|
+
async leaveIn(orgId, accountId, actorTokenId) {
|
|
170
|
+
await this.orgLock.lock(orgId);
|
|
171
|
+
const before = await this.requireMember(orgId, accountId);
|
|
172
|
+
const actor = {
|
|
173
|
+
actorAccountId: accountId,
|
|
174
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
175
|
+
};
|
|
176
|
+
const res = await this.offboarding.offboard(orgId, accountId, "left", actor);
|
|
177
|
+
afterCommit(() => this.offboarding.afterOffboard(res));
|
|
178
|
+
await audit(this.db.db, {
|
|
179
|
+
...actor,
|
|
180
|
+
orgId,
|
|
181
|
+
action: "org.member.left",
|
|
182
|
+
target: accountId,
|
|
183
|
+
detail: { role: before },
|
|
164
184
|
});
|
|
165
|
-
|
|
185
|
+
return res;
|
|
166
186
|
}
|
|
167
187
|
/**
|
|
168
188
|
* 转让所有权:from 必须是 owner(`org.owner_required`);to 必须是成员(`member.not_found`)且不是匿名访客
|
|
@@ -172,33 +192,34 @@ export class MembersService {
|
|
|
172
192
|
if (fromAccountId === toAccountId) {
|
|
173
193
|
throw new ApiError("validation_failed", "Cannot transfer ownership to yourself");
|
|
174
194
|
}
|
|
175
|
-
await this.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
},
|
|
197
|
-
|
|
195
|
+
await this.transferIn(orgId, fromAccountId, toAccountId, actorTokenId);
|
|
196
|
+
}
|
|
197
|
+
async transferIn(orgId, fromAccountId, toAccountId, actorTokenId) {
|
|
198
|
+
await this.orgLock.lock(orgId);
|
|
199
|
+
const fromRole = await this.roleIn(orgId, fromAccountId);
|
|
200
|
+
if (fromRole !== "owner") {
|
|
201
|
+
throw new ApiError("org.owner_required", "Only an owner can transfer ownership");
|
|
202
|
+
}
|
|
203
|
+
const toRole = await this.requireMember(orgId, toAccountId);
|
|
204
|
+
await rejectAnonymousGuest(this.db.db, toAccountId);
|
|
205
|
+
await this.setRole(orgId, toAccountId, "owner");
|
|
206
|
+
await this.setRole(orgId, fromAccountId, "admin");
|
|
207
|
+
await audit(this.db.db, {
|
|
208
|
+
actorAccountId: fromAccountId,
|
|
209
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
210
|
+
orgId,
|
|
211
|
+
action: "org.ownership_transferred",
|
|
212
|
+
target: toAccountId,
|
|
213
|
+
detail: {
|
|
214
|
+
from: fromAccountId,
|
|
215
|
+
to: toAccountId,
|
|
216
|
+
fromRole: { before: fromRole, after: "admin" },
|
|
217
|
+
toRole: { before: toRole, after: "owner" },
|
|
218
|
+
},
|
|
198
219
|
});
|
|
199
220
|
}
|
|
200
|
-
async roleIn(
|
|
201
|
-
const r = await
|
|
221
|
+
async roleIn(orgId, accountId) {
|
|
222
|
+
const r = await this.db
|
|
202
223
|
.selectFrom("memberships")
|
|
203
224
|
.select("role")
|
|
204
225
|
.where("org_id", "=", orgId)
|
|
@@ -206,22 +227,22 @@ export class MembersService {
|
|
|
206
227
|
.executeTakeFirst();
|
|
207
228
|
return r?.role;
|
|
208
229
|
}
|
|
209
|
-
async requireMember(
|
|
210
|
-
const role = await this.roleIn(
|
|
230
|
+
async requireMember(orgId, accountId) {
|
|
231
|
+
const role = await this.roleIn(orgId, accountId);
|
|
211
232
|
if (!role)
|
|
212
233
|
throw new ApiError("member.not_found", "Member not found");
|
|
213
234
|
return role;
|
|
214
235
|
}
|
|
215
|
-
async setRole(
|
|
216
|
-
await
|
|
236
|
+
async setRole(orgId, accountId, role) {
|
|
237
|
+
await this.db
|
|
217
238
|
.updateTable("memberships")
|
|
218
239
|
.set({ role, updated_at: new Date() })
|
|
219
240
|
.where("org_id", "=", orgId)
|
|
220
241
|
.where("account_id", "=", accountId)
|
|
221
242
|
.execute();
|
|
222
243
|
}
|
|
223
|
-
async assertHasOwner(
|
|
224
|
-
const r = await
|
|
244
|
+
async assertHasOwner(orgId) {
|
|
245
|
+
const r = await this.db
|
|
225
246
|
.selectFrom("memberships")
|
|
226
247
|
.select((eb) => eb.fn.countAll().as("n"))
|
|
227
248
|
.where("org_id", "=", orgId)
|
|
@@ -231,4 +252,27 @@ export class MembersService {
|
|
|
231
252
|
throw new ApiError("org.last_owner", "An organization must keep at least one owner");
|
|
232
253
|
}
|
|
233
254
|
}
|
|
234
|
-
}
|
|
255
|
+
};
|
|
256
|
+
__decorate([
|
|
257
|
+
Transactional()
|
|
258
|
+
], MembersService.prototype, "add", null);
|
|
259
|
+
__decorate([
|
|
260
|
+
Transactional()
|
|
261
|
+
], MembersService.prototype, "changeRoleIn", null);
|
|
262
|
+
__decorate([
|
|
263
|
+
Transactional()
|
|
264
|
+
], MembersService.prototype, "removeIn", null);
|
|
265
|
+
__decorate([
|
|
266
|
+
Transactional()
|
|
267
|
+
], MembersService.prototype, "leaveIn", null);
|
|
268
|
+
__decorate([
|
|
269
|
+
Transactional()
|
|
270
|
+
], MembersService.prototype, "transferIn", null);
|
|
271
|
+
MembersService = __decorate([
|
|
272
|
+
Injectable(),
|
|
273
|
+
__param(0, Inject(KernelDb)),
|
|
274
|
+
__param(1, Inject(TransactionHost)),
|
|
275
|
+
__param(2, Inject(OrgLock)),
|
|
276
|
+
__param(3, Inject(Offboarding))
|
|
277
|
+
], MembersService);
|
|
278
|
+
export { MembersService };
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
1
|
import type { Redis } from "ioredis";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import type {
|
|
10
|
-
import
|
|
2
|
+
import { EventLog } from "../conversations/event-log.js";
|
|
3
|
+
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
4
|
+
import { SessionService } from "../identity/sessions.js";
|
|
5
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
6
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
7
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
8
|
+
import type { KernelLogger } from "../log.js";
|
|
9
|
+
import { SandboxJobs } from "../sandbox/jobs.js";
|
|
10
|
+
import { ApprovalsService } from "../tools/approvals.service.js";
|
|
11
|
+
import { Credentials } from "../tools/credentials.js";
|
|
12
|
+
import { QuestionsService } from "../tools/questions.service.js";
|
|
11
13
|
import type { OrgRole } from "./roles.js";
|
|
12
|
-
type Trx = Transaction<KernelDatabase>;
|
|
13
14
|
/** 离职原因:管理员移出、本人离开、通讯录同步判定离职。 */
|
|
14
15
|
export type OffboardReason = "removed" | "left" | "directory";
|
|
15
16
|
/** 一个进行中的运行。 */
|
|
@@ -18,7 +19,7 @@ export interface InFlightRun {
|
|
|
18
19
|
runId: string;
|
|
19
20
|
status: "queued" | "running" | "waiting";
|
|
20
21
|
}
|
|
21
|
-
/**
|
|
22
|
+
/** The result of one offboarding; the caller registers {@link Offboarding.afterOffboard} with the infra `afterCommit`. */
|
|
22
23
|
export interface OffboardResult {
|
|
23
24
|
role: OrgRole;
|
|
24
25
|
/** 在 PG 中被吊销的会话(提交后写 Redis 吊销标记)。 */
|
|
@@ -29,7 +30,7 @@ export interface OffboardResult {
|
|
|
29
30
|
runs: InFlightRun[];
|
|
30
31
|
/** 负责的 agent 转交给的所有者;没有转交时为 null。 */
|
|
31
32
|
newOwnerId: string | null;
|
|
32
|
-
/** 此人在该组织的对话里还没销毁的沙箱(按对话 id
|
|
33
|
+
/** 此人在该组织的对话里还没销毁的沙箱(按对话 id),提交后投递销毁。 */
|
|
33
34
|
sandboxConversations: string[];
|
|
34
35
|
/** Conversations whose queued messages were deleted (`changed: queue` after commit). */
|
|
35
36
|
queueConversations: string[];
|
|
@@ -40,10 +41,8 @@ export interface OffboardingRunControl {
|
|
|
40
41
|
abortIfOrphaned(conversationId: string, runId: string, byAccountId: string | null): Promise<boolean>;
|
|
41
42
|
requestAbort(runId: string, byAccountId: string | null): Promise<void>;
|
|
42
43
|
}
|
|
43
|
-
/**
|
|
44
|
+
/** The safety-net sweep: cron job name (no `:`), every 10 minutes, and the rows per page. */
|
|
44
45
|
export declare const OFFBOARD_SWEEP_JOB = "offboard-sweep";
|
|
45
|
-
export declare const OFFBOARD_SWEEP_SCHEDULER_ID = "offboard-sweep-every-10m";
|
|
46
|
-
export declare const OFFBOARD_SWEEP_EVERY_MS = 600000;
|
|
47
46
|
export declare const OFFBOARD_SWEEP_BATCH = 500;
|
|
48
47
|
/** 一次兜底扫描最多翻的页数(每页 {@link OFFBOARD_SWEEP_BATCH} 条),防止单次任务无限长。 */
|
|
49
48
|
export declare const OFFBOARD_SWEEP_MAX_PAGES = 20;
|
|
@@ -51,41 +50,9 @@ export declare const OFFBOARD_SWEEP_MAX_PAGES = 20;
|
|
|
51
50
|
export declare const OFFBOARD_ABORT_MARK_TTL_SECONDS = 1800;
|
|
52
51
|
/** 「已请求中止」标记(Redis 键)。 */
|
|
53
52
|
export declare const offboardAbortKey: (runId: string) => string;
|
|
54
|
-
export interface OffboardingDeps {
|
|
55
|
-
credentials: Pick<Credentials, "clearAccount">;
|
|
56
|
-
approvals: Pick<ApprovalsService, "cancelPendingFor">;
|
|
57
|
-
questions: Pick<QuestionsService, "cancelPendingFor">;
|
|
58
|
-
/** 提交后写会话吊销标记(快速路径;鉴权以 PG `revoked_at` 为准)。 */
|
|
59
|
-
sessions?: Pick<SessionService, "markRevoked">;
|
|
60
|
-
/** 提交后发布 cancelled 事件。 */
|
|
61
|
-
eventLog?: Pick<EventLog, "notify"> & Partial<Pick<EventLog, "publishChanged">>;
|
|
62
|
-
/** 提交后中止此人在该组织进行中的运行(Ruling A7)。 */
|
|
63
|
-
runs?: OffboardingRunControl;
|
|
64
|
-
/** 兜底扫描用:读「发起人已不是成员」的进行中运行。 */
|
|
65
|
-
db?: KernelDb;
|
|
66
|
-
/** 给了就登记兜底扫描(每 10 分钟,worker 角色执行)。 */
|
|
67
|
-
maintenance?: Pick<Maintenance, "handle" | "schedule">;
|
|
68
|
-
log?: Pick<Logger, "warn">;
|
|
69
|
-
/** 记「已请求中止」标记(提交后的中止与兜底扫描都写;扫描跳过仍带标记的运行)。 */
|
|
70
|
-
redis?: Pick<Redis, "set" | "exists">;
|
|
71
|
-
/**
|
|
72
|
-
* 已加载、提供 `directory@1` 的插件名(Ruling A24:手动移出 / 离开时对其中在该组织启用的每一个写通讯录排除)。
|
|
73
|
-
* 不给时只按成员关系自身的 `directory:<插件>` 来源写。
|
|
74
|
-
*/
|
|
75
|
-
directoryPlugins?: () => string[];
|
|
76
|
-
/** 兜底扫描每页条数(默认 {@link OFFBOARD_SWEEP_BATCH},测试用)。 */
|
|
77
|
-
sweepBatch?: number;
|
|
78
|
-
/**
|
|
79
|
-
* 提交后销毁此人对话的沙箱(内核投递维护任务,由 worker 逐个 `SandboxService.destroyFor`)。不给时不销毁,
|
|
80
|
-
* 留给不活跃销毁扫描(`sandbox.limits.destroyAfterInactiveDays`)。
|
|
81
|
-
*/
|
|
82
|
-
sandboxes?: {
|
|
83
|
-
destroy(conversationIds: string[]): Promise<void>;
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
53
|
/**
|
|
87
54
|
* 成员离职(spec 3.3):管理员移出、本人离开与通讯录同步共用这一条路径,全部写入在调用方的同一个事务内,
|
|
88
|
-
* 要么都生效要么都不生效。Redis 吊销标记、事件发布与中止进行中的运行是提交后的尽力而为({@link
|
|
55
|
+
* 要么都生效要么都不生效。Redis 吊销标记、事件发布与中止进行中的运行是提交后的尽力而为({@link afterOffboard}),
|
|
89
56
|
* 漏掉的运行由兜底扫描({@link sweep}:发起人已不是该组织成员的进行中运行)中止。框架无关。
|
|
90
57
|
*
|
|
91
58
|
* 已接受的窄窗口:离职提交时正在进行的 OAuth token 刷新(`Credentials` 刷新锁内)可能在提交之后把此人的
|
|
@@ -93,10 +60,28 @@ export interface OffboardingDeps {
|
|
|
93
60
|
* 残留的凭据不会被使用;重新加入组织后会被新的连接覆盖。
|
|
94
61
|
*/
|
|
95
62
|
export declare class Offboarding {
|
|
96
|
-
private readonly
|
|
97
|
-
|
|
63
|
+
private readonly db;
|
|
64
|
+
readonly txHost: TransactionHost;
|
|
65
|
+
private readonly sessions;
|
|
66
|
+
private readonly redis;
|
|
67
|
+
private readonly registry;
|
|
68
|
+
private readonly eventLog;
|
|
69
|
+
/** The departed member's sandboxes: one-off maintenance jobs, destroyed one by one by a worker. */
|
|
70
|
+
private readonly sandboxJobs;
|
|
71
|
+
/** Stops the departed member's runs (`by: null`, a system action). */
|
|
72
|
+
private readonly runs;
|
|
73
|
+
private readonly credentials;
|
|
74
|
+
private readonly approvals;
|
|
75
|
+
private readonly questions;
|
|
76
|
+
readonly log: KernelLogger;
|
|
77
|
+
constructor(db: KernelDb, txHost: TransactionHost, sessions: Pick<SessionService, "markRevoked">, redis: Pick<Redis, "set" | "exists">, registry: Pick<ExtensionRegistry, "list">, eventLog: Pick<EventLog, "notify" | "publishChanged">,
|
|
78
|
+
/** The departed member's sandboxes: one-off maintenance jobs, destroyed one by one by a worker. */
|
|
79
|
+
sandboxJobs: Pick<SandboxJobs, "destroy">,
|
|
80
|
+
/** Stops the departed member's runs (`by: null`, a system action). */
|
|
81
|
+
runs: OffboardingRunControl, credentials: Pick<Credentials, "clearAccount">, approvals: Pick<ApprovalsService, "cancelPendingFor">, questions: Pick<QuestionsService, "cancelPendingFor">, log: KernelLogger);
|
|
98
82
|
/**
|
|
99
|
-
*
|
|
83
|
+
* In the caller's transaction (`mandatory`: the caller holds the org row lock, order org row →
|
|
84
|
+
* membership, and did the "last owner" checks):
|
|
100
85
|
* 1. 删除成员关系(非成员 → `member.not_found`;删后组织没有 owner → `org.last_owner`),清空指向该组织的会话当前组织;
|
|
101
86
|
* 2. 吊销该账号**全部**会话与个人令牌(令牌与会话是账号级的,无法只吊销「该组织下」的,按保守处理);
|
|
102
87
|
* 3. 删除其在该组织所有连接器上的个人凭据;
|
|
@@ -110,17 +95,19 @@ export declare class Offboarding {
|
|
|
110
95
|
* 8. 审计 `org.member.offboarded`;
|
|
111
96
|
* 9. 记下此人在该组织对话里还没销毁的沙箱(提交后销毁,尽力而为)。
|
|
112
97
|
*/
|
|
113
|
-
offboard(
|
|
98
|
+
offboard(orgId: string, accountId: string, reason: OffboardReason, actor?: {
|
|
114
99
|
actorAccountId?: string;
|
|
115
100
|
actorTokenId?: string;
|
|
116
101
|
}): Promise<OffboardResult>;
|
|
117
102
|
/** 要写排除的通讯录插件:该组织启用的已加载通讯录插件 ∪ 成员关系自身的 `directory:<插件>` 来源,去重排序。 */
|
|
118
103
|
private exclusionPlugins;
|
|
119
104
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
105
|
+
* After the commit (callers register it with the infra `afterCommit` inside their transaction):
|
|
106
|
+
* writes the session revocation markers, publishes the cancelled events, stops the person's
|
|
107
|
+
* runs in the org and schedules destroying their conversations' sandboxes. A failing step only
|
|
108
|
+
* logs a warning.
|
|
122
109
|
*/
|
|
123
|
-
|
|
110
|
+
afterOffboard(r: OffboardResult): Promise<void>;
|
|
124
111
|
/**
|
|
125
112
|
* 中止一个运行,顺序同会话中止接口:waiting → 直接取消等待并写终态;孤儿 → 直接写终态;
|
|
126
113
|
* 否则经 Redis 广播中止(运行所在副本收到后结束;尚未开始的运行开始时补查中止标记)。失败只记 warn。
|
|
@@ -135,7 +122,17 @@ export declare class Offboarding {
|
|
|
135
122
|
* 不每轮重复广播;标记过期仍未结束的再处理一次。返回本次处理(未跳过)的运行数。
|
|
136
123
|
* 现任成员(含匿名访客这样的 guest 成员)发起的运行不受影响。
|
|
137
124
|
*/
|
|
138
|
-
sweep(): Promise<number>;
|
|
125
|
+
sweep(batch?: number): Promise<number>;
|
|
139
126
|
private recentlyAborted;
|
|
140
127
|
}
|
|
141
|
-
|
|
128
|
+
/**
|
|
129
|
+
* The offboarding safety-net sweep ({@link Offboarding.sweep}) every 10 minutes, once per tick
|
|
130
|
+
* across replicas; a worker-role job (`WorkerModule`).
|
|
131
|
+
*/
|
|
132
|
+
export declare class OffboardSweepJob {
|
|
133
|
+
private readonly offboarding;
|
|
134
|
+
readonly lockService: LockService;
|
|
135
|
+
readonly log: KernelLogger;
|
|
136
|
+
constructor(offboarding: Pick<Offboarding, "sweep">, lockService: LockService, log: KernelLogger);
|
|
137
|
+
run(): Promise<void>;
|
|
138
|
+
}
|