@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,13 +1,33 @@
|
|
|
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
|
+
};
|
|
1
10
|
import { EXTENSION_POINTS, parseExtensionPoint, } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
12
|
import { assertItemInstallable, assertPluginSourcesInstallable, disabledPluginItems, pluginItemDisabled, } from "../catalog/requests.service.js";
|
|
3
13
|
import { changedPaths, configFields, getPath, secretValues } from "../config/fields.js";
|
|
4
14
|
import { createSecrets } from "../ctx/secrets.js";
|
|
5
15
|
import { ApiError } from "../errors.js";
|
|
6
16
|
import { audit } from "../identity/audit.js";
|
|
7
|
-
import {
|
|
17
|
+
import { afterCommit } from "../infra/database/after-commit.js";
|
|
18
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
19
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
20
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
21
|
+
import { KernelEvents } from "../infra/events/kernel-events.js";
|
|
22
|
+
import { KERNEL_LOGGER, KEYRING } from "../infra/tokens.js";
|
|
23
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
24
|
+
import { toIssues } from "./config-issues.js";
|
|
8
25
|
import { configToJsonSchema } from "./config-json-schema.js";
|
|
9
26
|
import { enabledExtensionsQuery, requiredExtensions } from "./enabled.js";
|
|
27
|
+
import { ExtensionHost } from "./host.js";
|
|
28
|
+
import { ExtensionInstalls } from "./installs.js";
|
|
10
29
|
import { permissionGroups } from "./permission-view.js";
|
|
30
|
+
export { toIssues };
|
|
11
31
|
/** 内核自己的 secrets 命名空间(plugin-sdk 把 `kernel` 列为保留插件名,插件不会与之相撞)。 */
|
|
12
32
|
const SECRETS_NAMESPACE = "kernel";
|
|
13
33
|
const secretKey = (plugin, path) => `plugin-config:${plugin}:${path}`;
|
|
@@ -48,37 +68,6 @@ function deleteDeep(obj, path) {
|
|
|
48
68
|
if (isObj(node))
|
|
49
69
|
delete node[segs[segs.length - 1]];
|
|
50
70
|
}
|
|
51
|
-
/** 由 issue 类型与结构字段生成说明;不用 zod 的 message(自定义消息可能拼入输入值)。 */
|
|
52
|
-
function issueMessage(i) {
|
|
53
|
-
switch (i.code) {
|
|
54
|
-
case "invalid_type":
|
|
55
|
-
return `expected ${i.expected}`;
|
|
56
|
-
case "too_small":
|
|
57
|
-
return `too small (minimum ${String(i.minimum)})`;
|
|
58
|
-
case "too_big":
|
|
59
|
-
return `too big (maximum ${String(i.maximum)})`;
|
|
60
|
-
case "invalid_format":
|
|
61
|
-
return `invalid ${i.format}`;
|
|
62
|
-
case "not_multiple_of":
|
|
63
|
-
return `not a multiple of ${String(i.divisor)}`;
|
|
64
|
-
case "unrecognized_keys":
|
|
65
|
-
return "unrecognized keys";
|
|
66
|
-
case "invalid_union":
|
|
67
|
-
return "no union member matched";
|
|
68
|
-
case "invalid_key":
|
|
69
|
-
return "invalid key";
|
|
70
|
-
case "invalid_element":
|
|
71
|
-
return "invalid element";
|
|
72
|
-
default:
|
|
73
|
-
return "invalid value";
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
export function toIssues(error) {
|
|
77
|
-
return error.issues.map((i) => ({
|
|
78
|
-
path: i.path.map(String).join("."),
|
|
79
|
-
message: issueMessage(i),
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
71
|
/** 插件组织级 schema 中标记 secret 的叶子点路径(对象路径之外的 secret 已在插件加载时拒绝)。 */
|
|
83
72
|
function secretPaths(schema) {
|
|
84
73
|
return configFields(schema)
|
|
@@ -92,69 +81,94 @@ function secretPaths(schema) {
|
|
|
92
81
|
* written in the same transaction as the config row.
|
|
93
82
|
* No in-process state: every call reads PG, safe with multiple replicas.
|
|
94
83
|
*/
|
|
95
|
-
|
|
96
|
-
|
|
84
|
+
let OrgExtensionConfigs = class OrgExtensionConfigs {
|
|
85
|
+
kdb;
|
|
86
|
+
txHost;
|
|
97
87
|
keyring;
|
|
98
88
|
host;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
orgLock;
|
|
90
|
+
installs;
|
|
91
|
+
events;
|
|
92
|
+
log;
|
|
93
|
+
/** Test seam only: a deterministic interleaving point after the config rows are read, before the secrets. */
|
|
94
|
+
afterConfigRowRead;
|
|
95
|
+
constructor(kdb, txHost, keyring, host,
|
|
96
|
+
/** The org row lock (orgs/org-lock.ts): joins the transaction. */
|
|
97
|
+
orgLock,
|
|
98
|
+
/** Install records (any desired state): the ones not loaded are listed unavailable (T14). */
|
|
99
|
+
installs,
|
|
100
|
+
/** `extension.org-disabled` after a disable commits (channel connections drop at once). */
|
|
101
|
+
events,
|
|
102
|
+
/** Secret values handled (written or decrypted) are masked in the logs after the commit. */
|
|
103
|
+
log) {
|
|
104
|
+
this.kdb = kdb;
|
|
105
|
+
this.txHost = txHost;
|
|
102
106
|
this.keyring = keyring;
|
|
103
107
|
this.host = host;
|
|
104
|
-
this.
|
|
108
|
+
this.orgLock = orgLock;
|
|
109
|
+
this.installs = installs;
|
|
110
|
+
this.events = events;
|
|
111
|
+
this.log = log;
|
|
105
112
|
}
|
|
106
|
-
/**
|
|
113
|
+
/** The kernel-schema handle of the current transaction. */
|
|
114
|
+
get db() {
|
|
115
|
+
return this.kdb.db;
|
|
116
|
+
}
|
|
117
|
+
/** 把一份组织配置里的密钥值登记到日志打码(无密钥时无操作);调用方须在事务提交后调用。 */
|
|
107
118
|
reportSecrets(found) {
|
|
108
|
-
if (!found
|
|
119
|
+
if (!found)
|
|
109
120
|
return;
|
|
110
121
|
const values = secretValues(found.schema, found.config);
|
|
111
122
|
if (values.length > 0)
|
|
112
|
-
this.
|
|
123
|
+
this.log.addOrgSecrets(values);
|
|
113
124
|
}
|
|
114
|
-
/**
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
.
|
|
118
|
-
.setIsolationLevel("repeatable read")
|
|
119
|
-
.setAccessMode("read only")
|
|
120
|
-
.execute(fn);
|
|
125
|
+
/** After a write committed: a disabled extension's channel connections drop at once. */
|
|
126
|
+
async afterPut(orgId, plugin, enabled) {
|
|
127
|
+
if (!enabled)
|
|
128
|
+
await this.events.emit("extension.org-disabled", { orgId, plugin });
|
|
121
129
|
}
|
|
122
130
|
/**
|
|
123
131
|
* 列出所有已加载插件在该组织下的状态(按加载顺序);无记录时 enabled=false、config=null。
|
|
124
132
|
* 之后是已安装但此刻没加载的插件(部署上停用等),`available: false`,按名字排序。
|
|
125
133
|
*/
|
|
126
134
|
async list(orgId) {
|
|
127
|
-
const installed = (await this.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
135
|
+
const installed = (await this.installs.list()).map((r) => ({
|
|
136
|
+
name: r.name,
|
|
137
|
+
version: r.version,
|
|
138
|
+
}));
|
|
139
|
+
return this.listSnapshot(orgId, installed);
|
|
140
|
+
}
|
|
141
|
+
/** `REPEATABLE READ` read-only: the config rows and the secrets come from one snapshot. */
|
|
142
|
+
async listSnapshot(orgId, installed) {
|
|
143
|
+
const t = this.db;
|
|
144
|
+
const rows = await t
|
|
145
|
+
.selectFrom("extension_org_configs")
|
|
146
|
+
.select(["plugin", "enabled", "config"])
|
|
147
|
+
.where("org_id", "=", orgId)
|
|
148
|
+
.execute();
|
|
149
|
+
await this.afterConfigRowRead?.();
|
|
150
|
+
const setKeys = await this.setSecretKeys(t, orgId);
|
|
151
|
+
// Required bootstrap plugins are listed enabled (no org config row needed, spec §7)
|
|
152
|
+
const required = await requiredExtensions(t);
|
|
153
|
+
const loaded = this.host.manifests();
|
|
154
|
+
const views = loaded.map((m) => this.view(m, rows.find((r) => r.plugin === m.name), setKeys, required.has(m.name)));
|
|
155
|
+
const names = new Set(loaded.map((m) => m.name));
|
|
156
|
+
const unavailable = installed
|
|
157
|
+
.filter((i) => !names.has(i.name))
|
|
158
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
159
|
+
.map((i) => ({
|
|
160
|
+
plugin: i.name,
|
|
161
|
+
version: i.version,
|
|
162
|
+
enabled: required.has(i.name) || (rows.find((r) => r.plugin === i.name)?.enabled ?? false),
|
|
163
|
+
configurable: false,
|
|
164
|
+
config: null,
|
|
165
|
+
secrets: [],
|
|
166
|
+
permissions: [],
|
|
167
|
+
orgConfigSchema: null,
|
|
168
|
+
available: false,
|
|
169
|
+
required: required.has(i.name),
|
|
170
|
+
}));
|
|
171
|
+
return [...views, ...unavailable];
|
|
158
172
|
}
|
|
159
173
|
/**
|
|
160
174
|
* Writes enablement and / or config. The actor's role is re-read under the org row lock (needs
|
|
@@ -173,141 +187,145 @@ export class OrgExtensionConfigs {
|
|
|
173
187
|
if (input.config !== undefined && !schema) {
|
|
174
188
|
throw new ApiError("extension.no_org_config", `Extension ${plugin} has no organization config`);
|
|
175
189
|
}
|
|
190
|
+
return this.write(orgId, plugin, manifest, input, actorAccountId, actorTokenId, opts);
|
|
191
|
+
}
|
|
192
|
+
async write(orgId, plugin, manifest, input, actorAccountId, actorTokenId, opts) {
|
|
193
|
+
const schema = manifest.config?.org;
|
|
176
194
|
let seen;
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
await assertItemInstallable(t, orgId, opts.viaItem, opts.approvedBy ?? opts.viaItem);
|
|
204
|
-
}
|
|
205
|
-
else
|
|
206
|
-
await assertPluginSourcesInstallable(t, orgId, plugin);
|
|
195
|
+
const t = this.db;
|
|
196
|
+
await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "org.extensions.manage");
|
|
197
|
+
const row = await t
|
|
198
|
+
.selectFrom("extension_org_configs")
|
|
199
|
+
.select(["enabled", "config"])
|
|
200
|
+
.where("plugin", "=", plugin)
|
|
201
|
+
.where("org_id", "=", orgId)
|
|
202
|
+
.executeTakeFirst();
|
|
203
|
+
const required = (await requiredExtensions(t)).has(plugin);
|
|
204
|
+
if (required && input.enabled === false)
|
|
205
|
+
throw requiredError(plugin);
|
|
206
|
+
if (opts.ifDisabled && (row?.enabled === true || required)) {
|
|
207
|
+
opts.ifDisabled.skipped = true;
|
|
208
|
+
return this.view(manifest, row, await this.setSecretKeys(t, orgId), required);
|
|
209
|
+
}
|
|
210
|
+
// A required plugin is enabled whatever the row said (it may predate `required`)
|
|
211
|
+
const enabled = required || (input.enabled ?? row?.enabled ?? false);
|
|
212
|
+
// 新启用来自企业目录的插件:按条目策略与授予复核(C22;已启用的不受影响)
|
|
213
|
+
if (input.enabled === true && row?.enabled !== true && !required) {
|
|
214
|
+
// 插件自己的条目 disabled 是总开关,任何途径都不能新启用(裁决 M-5)
|
|
215
|
+
const killed = await disabledPluginItems(t, [plugin]);
|
|
216
|
+
if (killed.length > 0)
|
|
217
|
+
throw pluginItemDisabled(killed);
|
|
218
|
+
// 经某个条目安装:只看该条目(应用里的插件按应用条目,C22);直接启用:全部来源里最严格的生效
|
|
219
|
+
if (opts.viaItem !== undefined) {
|
|
220
|
+
await assertItemInstallable(t, orgId, opts.viaItem, opts.approvedBy ?? opts.viaItem);
|
|
207
221
|
}
|
|
208
|
-
|
|
209
|
-
await
|
|
210
|
-
|
|
211
|
-
|
|
222
|
+
else
|
|
223
|
+
await assertPluginSourcesInstallable(t, orgId, plugin);
|
|
224
|
+
}
|
|
225
|
+
if (input.enabled === true)
|
|
226
|
+
await this.assertDependenciesEnabled(t, orgId, manifest);
|
|
227
|
+
else if (input.enabled === false && !input.force) {
|
|
228
|
+
await this.assertNoEnabledDependents(t, orgId, manifest);
|
|
229
|
+
}
|
|
230
|
+
let plain = row?.config ?? null;
|
|
231
|
+
let changed = [];
|
|
232
|
+
if (schema) {
|
|
233
|
+
const secrets = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
|
|
234
|
+
const paths = secretPaths(schema);
|
|
235
|
+
const before = structuredClone(plain ?? {});
|
|
236
|
+
for (const p of paths) {
|
|
237
|
+
const v = await secrets.get(orgId, secretKey(plugin, p));
|
|
238
|
+
if (v !== null)
|
|
239
|
+
setDeep(before, p, JSON.parse(v));
|
|
212
240
|
}
|
|
213
|
-
let
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
const secrets = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
|
|
217
|
-
const paths = secretPaths(schema);
|
|
218
|
-
const before = structuredClone(plain ?? {});
|
|
241
|
+
let next;
|
|
242
|
+
if (input.config !== undefined) {
|
|
243
|
+
next = structuredClone(input.config);
|
|
219
244
|
for (const p of paths) {
|
|
220
|
-
const v =
|
|
221
|
-
if (v
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
for (const p of paths) {
|
|
228
|
-
const v = getPath(input.config, p);
|
|
229
|
-
if (v === null)
|
|
230
|
-
deleteDeep(next, p);
|
|
231
|
-
else if (v === undefined) {
|
|
232
|
-
const old = getPath(before, p);
|
|
233
|
-
if (old !== undefined)
|
|
234
|
-
setDeep(next, p, old);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
next = before;
|
|
240
|
-
}
|
|
241
|
-
if (input.config !== undefined || enabled) {
|
|
242
|
-
const r = schema.safeParse(next);
|
|
243
|
-
if (!r.success) {
|
|
244
|
-
throw new ApiError("extension.config_invalid", `Invalid organization config for extension ${plugin}`, toIssues(r.error));
|
|
245
|
+
const v = getPath(input.config, p);
|
|
246
|
+
if (v === null)
|
|
247
|
+
deleteDeep(next, p);
|
|
248
|
+
else if (v === undefined) {
|
|
249
|
+
const old = getPath(before, p);
|
|
250
|
+
if (old !== undefined)
|
|
251
|
+
setDeep(next, p, old);
|
|
245
252
|
}
|
|
246
|
-
next = r.data;
|
|
247
253
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
await secrets.delete(orgId, secretKey(plugin, p));
|
|
257
|
-
else
|
|
258
|
-
await secrets.set(orgId, secretKey(plugin, p), JSON.stringify(v));
|
|
259
|
-
}
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
next = before;
|
|
257
|
+
}
|
|
258
|
+
if (input.config !== undefined || enabled) {
|
|
259
|
+
const r = schema.safeParse(next);
|
|
260
|
+
if (!r.success) {
|
|
261
|
+
throw new ApiError("extension.config_invalid", `Invalid organization config for extension ${plugin}`, toIssues(r.error));
|
|
260
262
|
}
|
|
263
|
+
next = r.data;
|
|
261
264
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
265
|
+
seen = { schema, config: next };
|
|
266
|
+
if (input.config !== undefined) {
|
|
267
|
+
changed = changedPaths(schema, before, next);
|
|
268
|
+
plain = structuredClone(next);
|
|
269
|
+
for (const p of paths) {
|
|
270
|
+
const v = getPath(next, p);
|
|
271
|
+
deleteDeep(plain, p);
|
|
272
|
+
if (v === undefined)
|
|
273
|
+
await secrets.delete(orgId, secretKey(plugin, p));
|
|
274
|
+
else
|
|
275
|
+
await secrets.set(orgId, secretKey(plugin, p), JSON.stringify(v));
|
|
276
|
+
}
|
|
269
277
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
278
|
+
}
|
|
279
|
+
// 当前 schema 中已不存在的密钥路径:同一事务内清掉遗留的密文行
|
|
280
|
+
const live = new Set((schema ? secretPaths(schema) : []).map((p) => secretKey(plugin, p)));
|
|
281
|
+
const prefix = secretKey(plugin, "");
|
|
282
|
+
const cleanup = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
|
|
283
|
+
for (const key of await this.setSecretKeys(t, orgId)) {
|
|
284
|
+
if (key.startsWith(prefix) && !live.has(key))
|
|
285
|
+
await cleanup.delete(orgId, key);
|
|
286
|
+
}
|
|
287
|
+
await t
|
|
288
|
+
.insertInto("extension_org_configs")
|
|
289
|
+
.values({
|
|
290
|
+
plugin,
|
|
291
|
+
org_id: orgId,
|
|
292
|
+
enabled,
|
|
293
|
+
config: plain === null ? null : JSON.stringify(plain),
|
|
294
|
+
updated_by: actorAccountId,
|
|
295
|
+
})
|
|
296
|
+
.onConflict((oc) => oc.columns(["plugin", "org_id"]).doUpdateSet({
|
|
297
|
+
enabled,
|
|
298
|
+
config: plain === null ? null : JSON.stringify(plain),
|
|
299
|
+
updated_by: actorAccountId,
|
|
300
|
+
updated_at: new Date(),
|
|
301
|
+
}))
|
|
302
|
+
.execute();
|
|
303
|
+
await audit(t, {
|
|
304
|
+
actorAccountId,
|
|
305
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
306
|
+
orgId,
|
|
307
|
+
action: "org.plugin_config.updated",
|
|
308
|
+
target: plugin,
|
|
309
|
+
detail: {
|
|
280
310
|
enabled,
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
await opts.inTransaction?.(t, false);
|
|
299
|
-
// 在同一事务里读回,返回值就是刚提交的状态
|
|
300
|
-
const saved = await t
|
|
301
|
-
.selectFrom("extension_org_configs")
|
|
302
|
-
.select(["plugin", "enabled", "config"])
|
|
303
|
-
.where("plugin", "=", plugin)
|
|
304
|
-
.where("org_id", "=", orgId)
|
|
305
|
-
.executeTakeFirst();
|
|
306
|
-
return this.view(manifest, saved, await this.setSecretKeys(t, orgId), required);
|
|
311
|
+
changedPaths: changed,
|
|
312
|
+
...(opts.viaItem !== undefined && { catalogItemId: opts.viaItem }),
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
// 在同一事务里读回,返回值就是刚提交的状态
|
|
316
|
+
const saved = await t
|
|
317
|
+
.selectFrom("extension_org_configs")
|
|
318
|
+
.select(["plugin", "enabled", "config"])
|
|
319
|
+
.where("plugin", "=", plugin)
|
|
320
|
+
.where("org_id", "=", orgId)
|
|
321
|
+
.executeTakeFirst();
|
|
322
|
+
const view = this.view(manifest, saved, await this.setSecretKeys(t, orgId), required);
|
|
323
|
+
// Only once the root transaction committed (an outer caller's too): a rolled-back write
|
|
324
|
+
// registers no secrets and disconnects nothing
|
|
325
|
+
afterCommit(async () => {
|
|
326
|
+
this.reportSecrets(seen);
|
|
327
|
+
await this.afterPut(orgId, plugin, view.enabled);
|
|
307
328
|
});
|
|
308
|
-
// 事务已提交:回滚的写入不会走到这里
|
|
309
|
-
this.reportSecrets(seen);
|
|
310
|
-
await this.hooks.afterPut?.(orgId, plugin, view.enabled);
|
|
311
329
|
return view;
|
|
312
330
|
}
|
|
313
331
|
/**
|
|
@@ -319,30 +337,33 @@ export class OrgExtensionConfigs {
|
|
|
319
337
|
*/
|
|
320
338
|
async get(orgId, plugin) {
|
|
321
339
|
const manifest = this.manifest(plugin);
|
|
322
|
-
const result = await this.
|
|
323
|
-
const row = await t
|
|
324
|
-
.selectFrom("extension_org_configs")
|
|
325
|
-
.select(["enabled", "config"])
|
|
326
|
-
.where("plugin", "=", plugin)
|
|
327
|
-
.where("org_id", "=", orgId)
|
|
328
|
-
.executeTakeFirst();
|
|
329
|
-
await this.hooks.afterConfigRowRead?.();
|
|
330
|
-
const required = (await requiredExtensions(t)).has(plugin);
|
|
331
|
-
if (!row && !required)
|
|
332
|
-
return undefined;
|
|
333
|
-
const enabled = required || row?.enabled === true;
|
|
334
|
-
const schema = manifest.config?.org;
|
|
335
|
-
// 已停用的插件不会被实例化:不校验(可能是升级前存下的旧配置),也不解密密钥
|
|
336
|
-
if (!schema || !enabled)
|
|
337
|
-
return { enabled, config: null };
|
|
338
|
-
return this.decode(t, orgId, plugin, schema, row?.config ?? {});
|
|
339
|
-
});
|
|
340
|
+
const result = await this.getSnapshot(orgId, plugin, manifest);
|
|
340
341
|
// 只读快照已结束;config 非 null 意味着插件有 org schema 且已解密
|
|
341
342
|
const schema = manifest.config?.org;
|
|
342
343
|
if (schema && result?.config != null)
|
|
343
344
|
this.reportSecrets({ schema, config: result.config });
|
|
344
345
|
return result;
|
|
345
346
|
}
|
|
347
|
+
/** `REPEATABLE READ` read-only: the config row and the secrets come from one snapshot. */
|
|
348
|
+
async getSnapshot(orgId, plugin, manifest) {
|
|
349
|
+
const t = this.db;
|
|
350
|
+
const row = await t
|
|
351
|
+
.selectFrom("extension_org_configs")
|
|
352
|
+
.select(["enabled", "config"])
|
|
353
|
+
.where("plugin", "=", plugin)
|
|
354
|
+
.where("org_id", "=", orgId)
|
|
355
|
+
.executeTakeFirst();
|
|
356
|
+
await this.afterConfigRowRead?.();
|
|
357
|
+
const required = (await requiredExtensions(t)).has(plugin);
|
|
358
|
+
if (!row && !required)
|
|
359
|
+
return undefined;
|
|
360
|
+
const enabled = required || row?.enabled === true;
|
|
361
|
+
const schema = manifest.config?.org;
|
|
362
|
+
// 已停用的插件不会被实例化:不校验(可能是升级前存下的旧配置),也不解密密钥
|
|
363
|
+
if (!schema || !enabled)
|
|
364
|
+
return { enabled, config: null };
|
|
365
|
+
return this.decode(t, orgId, plugin, schema, row?.config ?? {});
|
|
366
|
+
}
|
|
346
367
|
async decode(t, orgId, plugin, schema, stored) {
|
|
347
368
|
const full = structuredClone(stored);
|
|
348
369
|
const secrets = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
|
|
@@ -362,9 +383,10 @@ export class OrgExtensionConfigs {
|
|
|
362
383
|
}
|
|
363
384
|
/**
|
|
364
385
|
* 该组织里已启用、且所 requires 的按组织启用的能力只剩这个插件提供的插件(停用它会让它们失去依赖)。
|
|
365
|
-
* 在调用方事务里读(应用卸载 /
|
|
386
|
+
* 在调用方事务里读(应用卸载 / 回滚前判断是否保留;`mandatory`: the caller holds the org row lock).
|
|
366
387
|
*/
|
|
367
|
-
async enabledDependents(
|
|
388
|
+
async enabledDependents(orgId, plugin) {
|
|
389
|
+
const t = this.db;
|
|
368
390
|
const manifest = this.host.manifests().find((m) => m.name === plugin);
|
|
369
391
|
if (!manifest)
|
|
370
392
|
return [];
|
|
@@ -391,7 +413,8 @@ export class OrgExtensionConfigs {
|
|
|
391
413
|
* 在调用方事务里停用(应用安装的回滚与卸载用;调用方已锁组织行并复核角色):不检查依赖方,配置保留,
|
|
392
414
|
* 审计 `org.plugin_config.updated`(带 reason)。提交后调用方须再调 {@link afterDisable}。
|
|
393
415
|
*/
|
|
394
|
-
async disableIn(
|
|
416
|
+
async disableIn(orgId, plugin, actorAccountId, reason) {
|
|
417
|
+
const t = this.db;
|
|
395
418
|
// A required bootstrap plugin stays enabled in every org
|
|
396
419
|
if ((await requiredExtensions(t)).has(plugin))
|
|
397
420
|
return false;
|
|
@@ -416,7 +439,7 @@ export class OrgExtensionConfigs {
|
|
|
416
439
|
}
|
|
417
440
|
/** {@link disableIn} 的事务提交之后:通知停用(断开该插件的渠道连接等)。 */
|
|
418
441
|
async afterDisable(orgId, plugin) {
|
|
419
|
-
await this.
|
|
442
|
+
await this.afterPut(orgId, plugin, false);
|
|
420
443
|
}
|
|
421
444
|
/** 该组织已启用的插件名(只含当前已加载的插件;待批准的不算;必需的引导插件始终算启用)。 */
|
|
422
445
|
async enabledSet(t, orgId) {
|
|
@@ -516,5 +539,40 @@ export class OrgExtensionConfigs {
|
|
|
516
539
|
.execute();
|
|
517
540
|
return new Set(rows.map((r) => r.key));
|
|
518
541
|
}
|
|
519
|
-
}
|
|
542
|
+
};
|
|
543
|
+
__decorate([
|
|
544
|
+
Transactional({
|
|
545
|
+
propagation: "requires_new",
|
|
546
|
+
isolationLevel: "repeatable read",
|
|
547
|
+
accessMode: "read only",
|
|
548
|
+
})
|
|
549
|
+
], OrgExtensionConfigs.prototype, "listSnapshot", null);
|
|
550
|
+
__decorate([
|
|
551
|
+
Transactional()
|
|
552
|
+
], OrgExtensionConfigs.prototype, "write", null);
|
|
553
|
+
__decorate([
|
|
554
|
+
Transactional({
|
|
555
|
+
propagation: "requires_new",
|
|
556
|
+
isolationLevel: "repeatable read",
|
|
557
|
+
accessMode: "read only",
|
|
558
|
+
})
|
|
559
|
+
], OrgExtensionConfigs.prototype, "getSnapshot", null);
|
|
560
|
+
__decorate([
|
|
561
|
+
Transactional({ propagation: "mandatory" })
|
|
562
|
+
], OrgExtensionConfigs.prototype, "enabledDependents", null);
|
|
563
|
+
__decorate([
|
|
564
|
+
Transactional({ propagation: "mandatory" })
|
|
565
|
+
], OrgExtensionConfigs.prototype, "disableIn", null);
|
|
566
|
+
OrgExtensionConfigs = __decorate([
|
|
567
|
+
Injectable(),
|
|
568
|
+
__param(0, Inject(KernelDb)),
|
|
569
|
+
__param(1, Inject(TransactionHost)),
|
|
570
|
+
__param(2, Inject(KEYRING)),
|
|
571
|
+
__param(3, Inject(ExtensionHost)),
|
|
572
|
+
__param(4, Inject(OrgLock)),
|
|
573
|
+
__param(5, Inject(ExtensionInstalls)),
|
|
574
|
+
__param(6, Inject(KernelEvents)),
|
|
575
|
+
__param(7, Inject(KERNEL_LOGGER))
|
|
576
|
+
], OrgExtensionConfigs);
|
|
577
|
+
export { OrgExtensionConfigs };
|
|
520
578
|
const requiredError = (plugin) => new ApiError("extension.required", `Extension ${plugin} is required by this deployment (a bootstrap plugin): it is enabled in every organization and cannot be disabled`);
|