@capybara-hq/kernel 0.1.0-rc.0 → 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/bootstrap.json +10 -6
- 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 -193
- 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 +16 -1
- package/dist/config/schema.js +54 -7
- 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 -62
- 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/queue.js +3 -2
- 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 +2 -0
- package/dist/errors.js +2 -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 -120
- 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 +96 -42
- package/dist/extensions/bootstrap.js +303 -155
- 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 +52 -47
- 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 +19 -12
- package/dist/index.js +13 -8
- 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 -241
- 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-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +41 -10
- package/dist/log.js +91 -17
- 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/net/public-address.js +3 -2
- 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 -136
- 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 -225
- 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 -99
- 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 +7 -4
- package/dist/tools/builtins/sandbox/common.js +5 -3
- 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 +11 -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,18 +1,23 @@
|
|
|
1
|
-
|
|
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";
|
|
11
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
12
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
13
|
+
import { LockedInterval } from "../infra/schedule/locked-interval.js";
|
|
14
|
+
import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
|
|
15
|
+
import { ExtensionHost } from "./host.js";
|
|
16
|
+
import { ExtensionInstalls } from "./installs.js";
|
|
17
|
+
import { PLUGIN_DEPLOYMENT_CONFIG_TOPIC, PLUGINS_CHANGED_TOPIC, PLUGINS_RECONCILE_JOB, PLUGINS_RECONCILE_TOPIC, STALE_RECONCILE_PERIODS, } from "./lifecycle-topics.js";
|
|
2
18
|
import { PLUGINS_MIGRATED_TOPIC } from "./migrate-lock.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* 后台、CLI 写完 PG 后发布;各副本据此 reconcile,并作废路由闸门的名字缓存。
|
|
6
|
-
*/
|
|
7
|
-
export const PLUGINS_CHANGED_TOPIC = "plugins.changed";
|
|
8
|
-
/** 周期兜底(kernel bus 主题 `plugins.reconcile`,payload `{}`):维护任务 `plugins-reconcile` 发布。 */
|
|
9
|
-
export const PLUGINS_RECONCILE_TOPIC = "plugins.reconcile";
|
|
10
|
-
export { PLUGINS_MIGRATED_TOPIC };
|
|
11
|
-
/** 维护任务:每 `extensionHost.reconcileIntervalSeconds` 秒发布一次 `plugins.reconcile`(任务名与 scheduler id 不含 `:`)。 */
|
|
12
|
-
export const PLUGINS_RECONCILE_JOB = "plugins-reconcile";
|
|
13
|
-
export const PLUGINS_RECONCILE_SCHEDULER_ID = "plugins-reconcile-every";
|
|
14
|
-
/** 副本行心跳超过这么多个 reconcile 周期的副本不计入(C16;读状态的一方据此筛选)。 */
|
|
15
|
-
export const STALE_RECONCILE_PERIODS = 3;
|
|
19
|
+
import { ReplicaStatusStore } from "./sources.js";
|
|
20
|
+
export { PLUGINS_CHANGED_TOPIC, PLUGINS_MIGRATED_TOPIC, PLUGINS_RECONCILE_JOB, PLUGINS_RECONCILE_TOPIC, STALE_RECONCILE_PERIODS, };
|
|
16
21
|
/** 心跳超过这么多个周期的行直接删除(副本早已退出;读的一方本来就不计入)。 */
|
|
17
22
|
const PRUNE_RECONCILE_PERIODS = 10;
|
|
18
23
|
/**
|
|
@@ -23,34 +28,49 @@ const PRUNE_RECONCILE_PERIODS = 10;
|
|
|
23
28
|
* 每次 reconcile 开始与结束时都刷新本副本状态行的心跳,并清理已卸载插件的行与早已退出的副本的行。
|
|
24
29
|
* 进程内只有排队用的 Promise(不是跨副本状态)。
|
|
25
30
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
let ExtensionLifecycle = class ExtensionLifecycle {
|
|
32
|
+
host;
|
|
33
|
+
bus;
|
|
34
|
+
status;
|
|
35
|
+
installs;
|
|
36
|
+
config;
|
|
37
|
+
log;
|
|
28
38
|
running;
|
|
29
39
|
queued;
|
|
30
40
|
unsubs = [];
|
|
41
|
+
/** {@link start} was called (the kernel's start sequence; never in the CLI, which loads nothing). */
|
|
42
|
+
started = false;
|
|
31
43
|
stopped = false;
|
|
32
|
-
constructor(
|
|
33
|
-
|
|
44
|
+
constructor(host, bus, status,
|
|
45
|
+
/** Every install record's name (any desired state): prunes status rows this replica no longer knows. */
|
|
46
|
+
installs, config, log) {
|
|
47
|
+
this.host = host;
|
|
48
|
+
this.bus = bus;
|
|
49
|
+
this.status = status;
|
|
50
|
+
this.installs = installs;
|
|
51
|
+
this.config = config;
|
|
52
|
+
this.log = log;
|
|
34
53
|
}
|
|
35
54
|
/** 订阅三个主题(订阅失败只记 error:周期任务的消息同样收不到时,下次启动再来)。 */
|
|
36
55
|
async start() {
|
|
56
|
+
this.started = true;
|
|
37
57
|
const on = async (topic, handler) => {
|
|
38
58
|
try {
|
|
39
|
-
this.unsubs.push(await this.
|
|
59
|
+
this.unsubs.push(await this.bus.subscribe(topic, handler));
|
|
40
60
|
}
|
|
41
61
|
catch (err) {
|
|
42
|
-
this.
|
|
62
|
+
this.log.error("cannot subscribe to plugin lifecycle topic", { topic, err });
|
|
43
63
|
}
|
|
44
64
|
};
|
|
45
65
|
await on(PLUGINS_CHANGED_TOPIC, (p) => {
|
|
46
66
|
// 安装 / 卸载改变了「部署已知」的插件名:路由闸门不等 TTL
|
|
47
|
-
this.
|
|
67
|
+
this.host.invalidateKnownNames();
|
|
48
68
|
this.trigger(`changed:${pluginOf(p)}`);
|
|
49
69
|
});
|
|
50
70
|
await on(PLUGINS_RECONCILE_TOPIC, () => this.trigger("periodic"));
|
|
51
71
|
await on(PLUGINS_MIGRATED_TOPIC, (p) => this.trigger(`migrated:${pluginOf(p)}`));
|
|
52
72
|
await on(PLUGIN_DEPLOYMENT_CONFIG_TOPIC, (p) => {
|
|
53
|
-
this.applyConfig(pluginOf(p)).catch((err) => this.
|
|
73
|
+
this.applyConfig(pluginOf(p)).catch((err) => this.log.error("applying a plugin deployment config change failed", {
|
|
54
74
|
plugin: pluginOf(p),
|
|
55
75
|
err,
|
|
56
76
|
}));
|
|
@@ -63,7 +83,7 @@ export class ExtensionLifecycle {
|
|
|
63
83
|
async applyConfig(plugin) {
|
|
64
84
|
if (this.stopped)
|
|
65
85
|
return;
|
|
66
|
-
const r = await this.
|
|
86
|
+
const r = await this.host.applyDeploymentConfig(plugin);
|
|
67
87
|
if (r === "not_loaded")
|
|
68
88
|
await this.reconcile(`config:${plugin}`);
|
|
69
89
|
}
|
|
@@ -79,7 +99,9 @@ export class ExtensionLifecycle {
|
|
|
79
99
|
* 宿主那一步失败只记 error(下一个周期再来);之后照常刷新心跳。
|
|
80
100
|
*/
|
|
81
101
|
reconcile(reason) {
|
|
82
|
-
|
|
102
|
+
// Before start (the bootstrap step, the CLI) there is nothing loaded to converge: the host
|
|
103
|
+
// loads the desired state as it is when it starts
|
|
104
|
+
if (this.stopped || !this.started)
|
|
83
105
|
return Promise.resolve();
|
|
84
106
|
if (this.queued)
|
|
85
107
|
return this.queued;
|
|
@@ -98,38 +120,38 @@ export class ExtensionLifecycle {
|
|
|
98
120
|
}
|
|
99
121
|
/** 用同一个包重新 setup(配置的非 hot 改动、依赖方联动;与 reconcile 一样在宿主的串行队列里)。 */
|
|
100
122
|
async reload(name) {
|
|
101
|
-
await this.
|
|
123
|
+
await this.host.reload(name);
|
|
102
124
|
}
|
|
103
125
|
trigger(reason) {
|
|
104
|
-
this.reconcile(reason).catch((err) => this.
|
|
126
|
+
this.reconcile(reason).catch((err) => this.log.error("plugin reconcile failed", { reason, err }));
|
|
105
127
|
}
|
|
106
128
|
async run(reason) {
|
|
107
129
|
// 开始时也刷新心跳:converge 可能很久(排空在途调用、迁移),不能因此被读状态的一方当成退出的副本
|
|
108
|
-
await this.
|
|
109
|
-
this.
|
|
130
|
+
await this.status.heartbeat().catch((err) => {
|
|
131
|
+
this.log.warn("cannot refresh plugin replica status heartbeats", { err });
|
|
110
132
|
});
|
|
111
133
|
try {
|
|
112
|
-
await this.
|
|
134
|
+
await this.host.converge();
|
|
113
135
|
}
|
|
114
136
|
catch (err) {
|
|
115
137
|
if (this.stopped)
|
|
116
138
|
return;
|
|
117
|
-
this.
|
|
139
|
+
this.log.error("plugin reconcile failed; retrying on the next cycle", { reason, err });
|
|
118
140
|
}
|
|
119
141
|
if (this.stopped)
|
|
120
142
|
return;
|
|
121
143
|
if (reason === "periodic") {
|
|
122
144
|
// 丢了 plugin-deployment-config 消息时:周期兜底重读生效插件的部署配置(没变时什么都不做)
|
|
123
|
-
for (const name of this.
|
|
145
|
+
for (const name of this.host.configurablePlugins()) {
|
|
124
146
|
if (this.stopped)
|
|
125
147
|
return;
|
|
126
148
|
try {
|
|
127
|
-
await this.
|
|
149
|
+
await this.host.applyDeploymentConfig(name);
|
|
128
150
|
}
|
|
129
151
|
catch (err) {
|
|
130
152
|
if (this.stopped)
|
|
131
153
|
return;
|
|
132
|
-
this.
|
|
154
|
+
this.log.error("applying a plugin deployment config change failed", {
|
|
133
155
|
plugin: name,
|
|
134
156
|
err,
|
|
135
157
|
});
|
|
@@ -137,16 +159,58 @@ export class ExtensionLifecycle {
|
|
|
137
159
|
}
|
|
138
160
|
}
|
|
139
161
|
try {
|
|
140
|
-
await this.
|
|
141
|
-
const keep = [...this.
|
|
142
|
-
const period = this.
|
|
143
|
-
await this.
|
|
162
|
+
await this.status.heartbeat();
|
|
163
|
+
const keep = [...this.host.declared().keys(), ...(await this.installs.installedNames())];
|
|
164
|
+
const period = this.config.get().extensionHost.reconcileIntervalSeconds;
|
|
165
|
+
await this.status.prune(keep, PRUNE_RECONCILE_PERIODS * period);
|
|
144
166
|
}
|
|
145
167
|
catch (err) {
|
|
146
|
-
this.
|
|
168
|
+
this.log.warn("cannot refresh plugin replica status heartbeats", { err });
|
|
147
169
|
}
|
|
148
170
|
}
|
|
149
|
-
}
|
|
171
|
+
};
|
|
172
|
+
ExtensionLifecycle = __decorate([
|
|
173
|
+
Injectable(),
|
|
174
|
+
__param(0, Inject(ExtensionHost)),
|
|
175
|
+
__param(1, Inject(KERNEL_BUS)),
|
|
176
|
+
__param(2, Inject(ReplicaStatusStore)),
|
|
177
|
+
__param(3, Inject(ExtensionInstalls)),
|
|
178
|
+
__param(4, Inject(KernelConfigService)),
|
|
179
|
+
__param(5, Inject(KERNEL_LOGGER))
|
|
180
|
+
], ExtensionLifecycle);
|
|
181
|
+
export { ExtensionLifecycle };
|
|
150
182
|
const pluginOf = (p) => typeof p === "object" && p !== null && typeof p.plugin === "string"
|
|
151
183
|
? p.plugin
|
|
152
184
|
: "?";
|
|
185
|
+
/**
|
|
186
|
+
* The periodic reconcile fallback (job `plugins-reconcile`, once per
|
|
187
|
+
* `extensionHost.reconcileIntervalSeconds` across replicas): publishes `kernel.plugins.reconcile`,
|
|
188
|
+
* so every replica converges even when it lost a message. A worker-role job (`WorkerModule`); every
|
|
189
|
+
* replica's {@link ExtensionLifecycle} subscribes to the topic.
|
|
190
|
+
*/
|
|
191
|
+
let PluginsReconcileJob = class PluginsReconcileJob {
|
|
192
|
+
bus;
|
|
193
|
+
config;
|
|
194
|
+
lockService;
|
|
195
|
+
log;
|
|
196
|
+
constructor(bus, config, lockService, log) {
|
|
197
|
+
this.bus = bus;
|
|
198
|
+
this.config = config;
|
|
199
|
+
this.lockService = lockService;
|
|
200
|
+
this.log = log;
|
|
201
|
+
}
|
|
202
|
+
async run() {
|
|
203
|
+
await this.bus.publish(PLUGINS_RECONCILE_TOPIC, {});
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
__decorate([
|
|
207
|
+
LockedInterval(PLUGINS_RECONCILE_JOB, (c) => c.extensionHost.reconcileIntervalSeconds * 1000)
|
|
208
|
+
], PluginsReconcileJob.prototype, "run", null);
|
|
209
|
+
PluginsReconcileJob = __decorate([
|
|
210
|
+
Injectable(),
|
|
211
|
+
__param(0, Inject(KERNEL_BUS)),
|
|
212
|
+
__param(1, Inject(KernelConfigService)),
|
|
213
|
+
__param(2, Inject(LockService)),
|
|
214
|
+
__param(3, Inject(KERNEL_LOGGER))
|
|
215
|
+
], PluginsReconcileJob);
|
|
216
|
+
export { PluginsReconcileJob };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
2
|
+
import { XactLock } from "../infra/database/xact-lock.js";
|
|
3
|
+
/**
|
|
4
|
+
* Serializes the install record writes of one extension name (install, enable, disable, uninstall),
|
|
5
|
+
* including a first install that has no row to lock yet. Joins the caller's transaction
|
|
6
|
+
* (`mandatory`), which holds the lock until it ends.
|
|
7
|
+
*/
|
|
8
|
+
export declare class PluginInstallLock {
|
|
9
|
+
private readonly xactLock;
|
|
10
|
+
readonly txHost: TransactionHost;
|
|
11
|
+
constructor(xactLock: XactLock, txHost: TransactionHost);
|
|
12
|
+
lock(name: string): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Serializes the permission snapshot writes of one extension (web approval, the bootstrap step's
|
|
16
|
+
* approval of a stored package). Joins the caller's transaction (`mandatory`).
|
|
17
|
+
*/
|
|
18
|
+
export declare class PluginApproveLock {
|
|
19
|
+
private readonly xactLock;
|
|
20
|
+
readonly txHost: TransactionHost;
|
|
21
|
+
constructor(xactLock: XactLock, txHost: TransactionHost);
|
|
22
|
+
lock(name: string): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Serializes the deployment config writes of one extension. Joins the caller's transaction
|
|
26
|
+
* (`mandatory`).
|
|
27
|
+
*/
|
|
28
|
+
export declare class PluginDeploymentConfigLock {
|
|
29
|
+
private readonly xactLock;
|
|
30
|
+
readonly txHost: TransactionHost;
|
|
31
|
+
constructor(xactLock: XactLock, txHost: TransactionHost);
|
|
32
|
+
lock(name: string): Promise<void>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
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";
|
|
11
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
12
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
13
|
+
import { XactLock } from "../infra/database/xact-lock.js";
|
|
14
|
+
/**
|
|
15
|
+
* Serializes the install record writes of one extension name (install, enable, disable, uninstall),
|
|
16
|
+
* including a first install that has no row to lock yet. Joins the caller's transaction
|
|
17
|
+
* (`mandatory`), which holds the lock until it ends.
|
|
18
|
+
*/
|
|
19
|
+
let PluginInstallLock = class PluginInstallLock {
|
|
20
|
+
xactLock;
|
|
21
|
+
txHost;
|
|
22
|
+
constructor(xactLock, txHost) {
|
|
23
|
+
this.xactLock = xactLock;
|
|
24
|
+
this.txHost = txHost;
|
|
25
|
+
}
|
|
26
|
+
async lock(name) {
|
|
27
|
+
await this.xactLock.lock(`capybara.plugin-install:${name}`);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
__decorate([
|
|
31
|
+
Transactional({ propagation: "mandatory" })
|
|
32
|
+
], PluginInstallLock.prototype, "lock", null);
|
|
33
|
+
PluginInstallLock = __decorate([
|
|
34
|
+
Injectable(),
|
|
35
|
+
__param(0, Inject(XactLock)),
|
|
36
|
+
__param(1, Inject(TransactionHost))
|
|
37
|
+
], PluginInstallLock);
|
|
38
|
+
export { PluginInstallLock };
|
|
39
|
+
/**
|
|
40
|
+
* Serializes the permission snapshot writes of one extension (web approval, the bootstrap step's
|
|
41
|
+
* approval of a stored package). Joins the caller's transaction (`mandatory`).
|
|
42
|
+
*/
|
|
43
|
+
let PluginApproveLock = class PluginApproveLock {
|
|
44
|
+
xactLock;
|
|
45
|
+
txHost;
|
|
46
|
+
constructor(xactLock, txHost) {
|
|
47
|
+
this.xactLock = xactLock;
|
|
48
|
+
this.txHost = txHost;
|
|
49
|
+
}
|
|
50
|
+
async lock(name) {
|
|
51
|
+
await this.xactLock.lock(`capybara.plugin-approve:${name}`);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
__decorate([
|
|
55
|
+
Transactional({ propagation: "mandatory" })
|
|
56
|
+
], PluginApproveLock.prototype, "lock", null);
|
|
57
|
+
PluginApproveLock = __decorate([
|
|
58
|
+
Injectable(),
|
|
59
|
+
__param(0, Inject(XactLock)),
|
|
60
|
+
__param(1, Inject(TransactionHost))
|
|
61
|
+
], PluginApproveLock);
|
|
62
|
+
export { PluginApproveLock };
|
|
63
|
+
/**
|
|
64
|
+
* Serializes the deployment config writes of one extension. Joins the caller's transaction
|
|
65
|
+
* (`mandatory`).
|
|
66
|
+
*/
|
|
67
|
+
let PluginDeploymentConfigLock = class PluginDeploymentConfigLock {
|
|
68
|
+
xactLock;
|
|
69
|
+
txHost;
|
|
70
|
+
constructor(xactLock, txHost) {
|
|
71
|
+
this.xactLock = xactLock;
|
|
72
|
+
this.txHost = txHost;
|
|
73
|
+
}
|
|
74
|
+
async lock(name) {
|
|
75
|
+
await this.xactLock.lock(`capybara.plugin-deployment-config:${name}`);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
__decorate([
|
|
79
|
+
Transactional({ propagation: "mandatory" })
|
|
80
|
+
], PluginDeploymentConfigLock.prototype, "lock", null);
|
|
81
|
+
PluginDeploymentConfigLock = __decorate([
|
|
82
|
+
Injectable(),
|
|
83
|
+
__param(0, Inject(XactLock)),
|
|
84
|
+
__param(1, Inject(TransactionHost))
|
|
85
|
+
], PluginDeploymentConfigLock);
|
|
86
|
+
export { PluginDeploymentConfigLock };
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
|
|
1
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
2
|
/** 插件迁移完成(kernel bus 主题,频道 `cap:kernel:plugins.migrated`,payload `{ plugin, sha256 }`)。 */
|
|
4
3
|
export declare const PLUGINS_MIGRATED_TOPIC = "plugins.migrated";
|
|
5
4
|
/** 插件迁移咨询锁的键前缀(`hashtext(<前缀><插件名>)`)。 */
|
|
6
5
|
export declare const MIGRATE_LOCK_PREFIX = "capybara.plugin-migrate:";
|
|
7
6
|
/** {@link ensureMigrated} 的依赖。 */
|
|
8
7
|
export interface MigrateLockDeps {
|
|
9
|
-
db:
|
|
8
|
+
db: KernelSchemaDb;
|
|
10
9
|
/** 迁移用独立连接(不走连接池)。 */
|
|
11
10
|
dbUrl: string;
|
|
12
11
|
connectTimeoutMs?: number | undefined;
|
|
@@ -45,7 +44,7 @@ export declare function ensureMigrated(d: MigrateLockDeps, name: string, sha256:
|
|
|
45
44
|
* 按插件 schema 的 `_migrations` 表比对文件名与 checksum(与迁移器相同的 sha256);改过内容的也算未执行。
|
|
46
45
|
* 插件从没迁移过时返回全部文件。
|
|
47
46
|
*/
|
|
48
|
-
export declare function unrunMigrations(db:
|
|
47
|
+
export declare function unrunMigrations(db: KernelSchemaDb, name: string, files: {
|
|
49
48
|
file: string;
|
|
50
49
|
sql: string;
|
|
51
50
|
}[]): Promise<string[]>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { type Principal } from "../identity/principal.js";
|
|
3
3
|
import { type OrgContext } from "../orgs/org.guard.js";
|
|
4
|
-
import
|
|
4
|
+
import { OrgExtensionConfigs, type OrgExtensionView } from "./org-config.js";
|
|
5
5
|
declare const PutBody: z.ZodObject<{
|
|
6
6
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
7
7
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
@@ -7,12 +7,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { Controller, Get, Inject, Param, Put } from "@nestjs/common";
|
|
11
11
|
import { z } from "zod";
|
|
12
|
-
import { ORG_EXTENSION_CONFIGS } from "../http/tokens.js";
|
|
13
|
-
import { ZodPipe } from "../http/zod.pipe.js";
|
|
14
12
|
import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
|
|
13
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
14
|
+
import { ZBody } from "../infra/validation/zod-params.js";
|
|
15
15
|
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
16
|
+
import { OrgExtensionConfigs } from "./org-config.js";
|
|
16
17
|
const PutBody = z
|
|
17
18
|
.object({
|
|
18
19
|
enabled: z.boolean().optional(),
|
|
@@ -20,6 +21,8 @@ const PutBody = z
|
|
|
20
21
|
force: z.boolean().optional(),
|
|
21
22
|
})
|
|
22
23
|
.strict();
|
|
24
|
+
class OrgExtensionPutBody extends createZodDto(PutBody, "OrgExtensionPutBody") {
|
|
25
|
+
}
|
|
23
26
|
/**
|
|
24
27
|
* Org-level extension enablement and config (`/api/v1/orgs/:orgId/extensions`); responses echo only
|
|
25
28
|
* non-secret config and whether each secret is set.
|
|
@@ -50,10 +53,10 @@ __decorate([
|
|
|
50
53
|
__param(0, CurrentPrincipal()),
|
|
51
54
|
__param(1, CurrentOrg()),
|
|
52
55
|
__param(2, Param("extension")),
|
|
53
|
-
__param(3,
|
|
56
|
+
__param(3, ZBody(OrgExtensionPutBody))
|
|
54
57
|
], OrgExtensionConfigsController.prototype, "put", null);
|
|
55
58
|
OrgExtensionConfigsController = __decorate([
|
|
56
59
|
Controller("api/v1/orgs/:orgId/extensions"),
|
|
57
|
-
__param(0, Inject(
|
|
60
|
+
__param(0, Inject(OrgExtensionConfigs))
|
|
58
61
|
], OrgExtensionConfigsController);
|
|
59
62
|
export { OrgExtensionConfigsController };
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import type { Transaction } from "kysely";
|
|
2
|
-
import type { z } from "zod";
|
|
3
1
|
import { type Keyring } from "../ctx/secrets.js";
|
|
4
|
-
import
|
|
2
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
3
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
4
|
+
import { KernelEvents } from "../infra/events/kernel-events.js";
|
|
5
|
+
import type { KernelLogger } from "../log.js";
|
|
6
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
7
|
+
import { type ConfigIssue, toIssues } from "./config-issues.js";
|
|
5
8
|
import { type JsonSchema } from "./config-json-schema.js";
|
|
6
|
-
import
|
|
9
|
+
import { ExtensionHost } from "./host.js";
|
|
10
|
+
import { ExtensionInstalls } from "./installs.js";
|
|
7
11
|
import { type PermissionGroup } from "./permission-view.js";
|
|
8
|
-
type
|
|
12
|
+
export { type ConfigIssue, toIssues };
|
|
9
13
|
/** 组织视角下一个已加载插件的状态;`config` 永远不含密钥字段,密钥只回显「是否已设置」。 */
|
|
10
14
|
export interface OrgExtensionView {
|
|
11
15
|
plugin: string;
|
|
@@ -56,24 +60,16 @@ export interface OrgExtensionPutOptions {
|
|
|
56
60
|
*/
|
|
57
61
|
approvedBy?: string;
|
|
58
62
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
63
|
+
* For a plugin install: when the extension is already enabled under the org row lock, nothing is
|
|
64
|
+
* written (no config change, no audit) and `skipped` is set to true. "Enabled before" and
|
|
65
|
+
* "enabled now" are decided under the lock, so a concurrent enable cannot race it. A caller that
|
|
66
|
+
* records the extension in the same transaction (the catalog install, `put` joins its
|
|
67
|
+
* transaction) reads `skipped` after `put` returns: no concurrent uninstall fits in between.
|
|
61
68
|
*/
|
|
62
69
|
ifDisabled?: {
|
|
63
70
|
skipped: boolean;
|
|
64
71
|
};
|
|
65
|
-
/**
|
|
66
|
-
* 在同一个事务(组织行锁内)里最后执行,`skipped` 同 {@link ifDisabled}:应用安装在这里记组件,启用与记录之间
|
|
67
|
-
* 插不进并发的卸载。
|
|
68
|
-
*/
|
|
69
|
-
inTransaction?: (t: Trx, skipped: boolean) => Promise<void>;
|
|
70
|
-
}
|
|
71
|
-
/** 校验失败的单条原因:只含路径与按 issue 类型生成的说明,不回显字段值。 */
|
|
72
|
-
export interface ConfigIssue {
|
|
73
|
-
path: string;
|
|
74
|
-
message: string;
|
|
75
72
|
}
|
|
76
|
-
export declare function toIssues(error: z.ZodError): ConfigIssue[];
|
|
77
73
|
/**
|
|
78
74
|
* Org-level extension config: enablement and the `config.org` config stored per org.
|
|
79
75
|
* The non-secret part is stored in `capybara.extension_org_configs.config`; each secret field is
|
|
@@ -82,38 +78,42 @@ export declare function toIssues(error: z.ZodError): ConfigIssue[];
|
|
|
82
78
|
* No in-process state: every call reads PG, safe with multiple replicas.
|
|
83
79
|
*/
|
|
84
80
|
export declare class OrgExtensionConfigs {
|
|
85
|
-
private readonly
|
|
81
|
+
private readonly kdb;
|
|
82
|
+
readonly txHost: TransactionHost;
|
|
86
83
|
private readonly keyring;
|
|
87
84
|
private readonly host;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
85
|
+
/** The org row lock (orgs/org-lock.ts): joins the transaction. */
|
|
86
|
+
private readonly orgLock;
|
|
87
|
+
/** Install records (any desired state): the ones not loaded are listed unavailable (T14). */
|
|
88
|
+
private readonly installs;
|
|
89
|
+
/** `extension.org-disabled` after a disable commits (channel connections drop at once). */
|
|
90
|
+
private readonly events;
|
|
91
|
+
/** Secret values handled (written or decrypted) are masked in the logs after the commit. */
|
|
92
|
+
private readonly log;
|
|
93
|
+
/** Test seam only: a deterministic interleaving point after the config rows are read, before the secrets. */
|
|
94
|
+
afterConfigRowRead: (() => Promise<void>) | undefined;
|
|
95
|
+
constructor(kdb: KernelDb, txHost: TransactionHost, keyring: Keyring, host: ExtensionHost,
|
|
96
|
+
/** The org row lock (orgs/org-lock.ts): joins the transaction. */
|
|
97
|
+
orgLock: OrgLock,
|
|
98
|
+
/** Install records (any desired state): the ones not loaded are listed unavailable (T14). */
|
|
99
|
+
installs: ExtensionInstalls,
|
|
100
|
+
/** `extension.org-disabled` after a disable commits (channel connections drop at once). */
|
|
101
|
+
events: KernelEvents,
|
|
102
|
+
/** Secret values handled (written or decrypted) are masked in the logs after the commit. */
|
|
103
|
+
log: KernelLogger);
|
|
104
|
+
/** The kernel-schema handle of the current transaction. */
|
|
105
|
+
private get db();
|
|
106
|
+
/** 把一份组织配置里的密钥值登记到日志打码(无密钥时无操作);调用方须在事务提交后调用。 */
|
|
109
107
|
private reportSecrets;
|
|
110
|
-
/**
|
|
111
|
-
private
|
|
108
|
+
/** After a write committed: a disabled extension's channel connections drop at once. */
|
|
109
|
+
private afterPut;
|
|
112
110
|
/**
|
|
113
111
|
* 列出所有已加载插件在该组织下的状态(按加载顺序);无记录时 enabled=false、config=null。
|
|
114
112
|
* 之后是已安装但此刻没加载的插件(部署上停用等),`available: false`,按名字排序。
|
|
115
113
|
*/
|
|
116
114
|
list(orgId: string): Promise<OrgExtensionView[]>;
|
|
115
|
+
/** `REPEATABLE READ` read-only: the config rows and the secrets come from one snapshot. */
|
|
116
|
+
private listSnapshot;
|
|
117
117
|
/**
|
|
118
118
|
* Writes enablement and / or config. The actor's role is re-read under the org row lock (needs
|
|
119
119
|
* `org.extensions.manage`).
|
|
@@ -126,6 +126,7 @@ export declare class OrgExtensionConfigs {
|
|
|
126
126
|
* does not satisfy the schema -> `extension.config_invalid`.
|
|
127
127
|
*/
|
|
128
128
|
put(orgId: string, plugin: string, input: OrgExtensionInput, actorAccountId: string, actorTokenId?: string, opts?: OrgExtensionPutOptions): Promise<OrgExtensionView>;
|
|
129
|
+
private write;
|
|
129
130
|
/**
|
|
130
131
|
* 读取并解密某插件在该组织下的完整配置(供运行时按组织构造插件实例)。
|
|
131
132
|
* A required bootstrap plugin is enabled without a row (its stored config, or `{}`, is validated).
|
|
@@ -137,17 +138,19 @@ export declare class OrgExtensionConfigs {
|
|
|
137
138
|
enabled: boolean;
|
|
138
139
|
config: unknown;
|
|
139
140
|
} | undefined>;
|
|
141
|
+
/** `REPEATABLE READ` read-only: the config row and the secrets come from one snapshot. */
|
|
142
|
+
private getSnapshot;
|
|
140
143
|
private decode;
|
|
141
144
|
/**
|
|
142
145
|
* 该组织里已启用、且所 requires 的按组织启用的能力只剩这个插件提供的插件(停用它会让它们失去依赖)。
|
|
143
|
-
* 在调用方事务里读(应用卸载 /
|
|
146
|
+
* 在调用方事务里读(应用卸载 / 回滚前判断是否保留;`mandatory`: the caller holds the org row lock).
|
|
144
147
|
*/
|
|
145
|
-
enabledDependents(
|
|
148
|
+
enabledDependents(orgId: string, plugin: string): Promise<string[]>;
|
|
146
149
|
/**
|
|
147
150
|
* 在调用方事务里停用(应用安装的回滚与卸载用;调用方已锁组织行并复核角色):不检查依赖方,配置保留,
|
|
148
151
|
* 审计 `org.plugin_config.updated`(带 reason)。提交后调用方须再调 {@link afterDisable}。
|
|
149
152
|
*/
|
|
150
|
-
disableIn(
|
|
153
|
+
disableIn(orgId: string, plugin: string, actorAccountId: string, reason: string): Promise<boolean>;
|
|
151
154
|
/** {@link disableIn} 的事务提交之后:通知停用(断开该插件的渠道连接等)。 */
|
|
152
155
|
afterDisable(orgId: string, plugin: string): Promise<void>;
|
|
153
156
|
/** 该组织已启用的插件名(只含当前已加载的插件;待批准的不算;必需的引导插件始终算启用)。 */
|
|
@@ -166,4 +169,3 @@ export declare class OrgExtensionConfigs {
|
|
|
166
169
|
/** 该组织在 `kernel` 命名空间下已设置的插件配置密钥键(不解密)。 */
|
|
167
170
|
private setSecretKeys;
|
|
168
171
|
}
|
|
169
|
-
export {};
|