@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,11 +1,16 @@
|
|
|
1
1
|
import { type PluginExtensionSection } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
2
|
+
import type { core } from "zod";
|
|
3
|
+
import type { Keyring } from "../ctx/secrets.js";
|
|
4
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
5
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
6
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
7
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
4
8
|
import { type ProvenanceResult } from "../packages/provenance.js";
|
|
5
|
-
import
|
|
9
|
+
import { ExtensionApprovals } from "./approvals.js";
|
|
10
|
+
import { ExtensionBlobs } from "./blobs.js";
|
|
6
11
|
import { migrationWarnings, type PackageWarning, type PermissionGroup, type PermissionItem } from "./permission-view.js";
|
|
12
|
+
import { ExtensionRegistry } from "./registry.js";
|
|
7
13
|
export { migrationWarnings, type PackageWarning };
|
|
8
|
-
import type { ExtensionSource } from "./sources.js";
|
|
9
14
|
/** 上传 / 拉取一个包后的审阅结果(权限按静态清单与迁移 SQL 计算,不执行插件代码)。 */
|
|
10
15
|
export interface PackageReview {
|
|
11
16
|
sha256: string;
|
|
@@ -69,19 +74,36 @@ export interface IngestSource {
|
|
|
69
74
|
source: "npm" | "file" | "catalog" | "bootstrap";
|
|
70
75
|
ref: string;
|
|
71
76
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
/** npm 下载的总时限(毫秒),默认 120s。 */
|
|
79
|
-
npmTimeoutMs?: number;
|
|
80
|
-
}
|
|
81
|
-
/** 插件安装记录与包的导入(上传文件、npm)。本身无状态,多副本共用。 */
|
|
77
|
+
/**
|
|
78
|
+
* Extension install records and package imports (uploaded file, npm), and the deployment's desired
|
|
79
|
+
* state the replicas converge to: the install records desired enabled and each extension's
|
|
80
|
+
* effective deployment config (the startup config completed by the fields stored in PG). Stateless,
|
|
81
|
+
* shared by every replica; the extension host reads the desired state from here (one way).
|
|
82
|
+
*/
|
|
82
83
|
export declare class ExtensionInstalls {
|
|
83
|
-
private readonly
|
|
84
|
-
|
|
84
|
+
private readonly db;
|
|
85
|
+
readonly txHost: TransactionHost;
|
|
86
|
+
/** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
|
|
87
|
+
private readonly adminLock;
|
|
88
|
+
private readonly blobs;
|
|
89
|
+
private readonly approvals;
|
|
90
|
+
/** The config-declared extension names (an install cannot take them, C15). */
|
|
91
|
+
private readonly registry;
|
|
92
|
+
private readonly config;
|
|
93
|
+
private readonly keyring;
|
|
94
|
+
constructor(db: KernelDb, txHost: TransactionHost,
|
|
95
|
+
/** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
|
|
96
|
+
adminLock: EnterpriseAdminLock, blobs: ExtensionBlobs, approvals: ExtensionApprovals,
|
|
97
|
+
/** The config-declared extension names (an install cannot take them, C15). */
|
|
98
|
+
registry: ExtensionRegistry, config: KernelConfigService, keyring: Keyring);
|
|
99
|
+
/**
|
|
100
|
+
* An extension's effective deployment config, not validated yet (C10): the startup config
|
|
101
|
+
* (`fileValue`, file / Nacos merged with env) completed by the fields stored in PG; merged by
|
|
102
|
+
* the fields of `schema` when it is given.
|
|
103
|
+
*/
|
|
104
|
+
effectiveDeploymentConfig(plugin: string, fileValue: unknown, schema?: core.$ZodType): Promise<unknown>;
|
|
105
|
+
/** Every install record's extension name (any desired state). */
|
|
106
|
+
installedNames(): Promise<string[]>;
|
|
85
107
|
/**
|
|
86
108
|
* Validates and stores one package and returns the review; audits `extension.package_uploaded`.
|
|
87
109
|
* Only stores: no install, no desired state change (T14).
|
|
@@ -97,6 +119,17 @@ export declare class ExtensionInstalls {
|
|
|
97
119
|
store?: "object" | "pg";
|
|
98
120
|
expectPackageName?: string;
|
|
99
121
|
}): Promise<PackageReview>;
|
|
122
|
+
/**
|
|
123
|
+
* The enterprise admin re-check under its lock, in a transaction of its own (`requires_new`, as
|
|
124
|
+
* before the conversion): the package write that follows never runs inside a caller's
|
|
125
|
+
* transaction holding the lock.
|
|
126
|
+
*/
|
|
127
|
+
private authorize;
|
|
128
|
+
/**
|
|
129
|
+
* The `extension.package_uploaded` audit, re-checking the actor under the lock, committed on its
|
|
130
|
+
* own (`requires_new`): the stored package it records is not rolled back by a caller either.
|
|
131
|
+
*/
|
|
132
|
+
private auditUpload;
|
|
100
133
|
/** 上传的 tgz(来源 `file`)。 */
|
|
101
134
|
ingestFile(actor: string | null, bytes: Uint8Array, opts?: {
|
|
102
135
|
actorTokenId?: string;
|
|
@@ -1,19 +1,80 @@
|
|
|
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 { SDK_VERSION } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { configFields } from "../config/fields.js";
|
|
2
13
|
import { ApiError } from "../errors.js";
|
|
3
14
|
import { audit } from "../identity/audit.js";
|
|
4
|
-
import {
|
|
15
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
16
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
17
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
18
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
19
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
20
|
+
import { KEYRING } from "../infra/tokens.js";
|
|
5
21
|
import { fetchNpmPackage, IntegrityMismatchError, NpmFetchError, PackageTooLargeError, } from "../packages/npm.js";
|
|
6
22
|
import { fetchProvenance, PROVENANCE_TIMEOUT_MS, } from "../packages/provenance.js";
|
|
7
23
|
import { ExtensionApprovals } from "./approvals.js";
|
|
24
|
+
import { ExtensionBlobs } from "./blobs.js";
|
|
25
|
+
import { mergeDeploymentConfig, readStoredDeploymentConfig, schemaFields, secretPathsOf, } from "./deployment-config-store.js";
|
|
8
26
|
import { ExtensionPackageError, extensionPackageApiError, permissionSetOfPackage, readExtensionPackage, } from "./package.js";
|
|
9
27
|
import { diffPermissions } from "./permission-set.js";
|
|
10
28
|
import { migrationWarnings, permissionGroups, permissionKeyItems, reviewHash, } from "./permission-view.js";
|
|
29
|
+
import { ExtensionRegistry } from "./registry.js";
|
|
11
30
|
export { migrationWarnings };
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
31
|
+
/** The npm download time limit (ms). */
|
|
32
|
+
const NPM_TIMEOUT_MS = 120_000;
|
|
33
|
+
/**
|
|
34
|
+
* Extension install records and package imports (uploaded file, npm), and the deployment's desired
|
|
35
|
+
* state the replicas converge to: the install records desired enabled and each extension's
|
|
36
|
+
* effective deployment config (the startup config completed by the fields stored in PG). Stateless,
|
|
37
|
+
* shared by every replica; the extension host reads the desired state from here (one way).
|
|
38
|
+
*/
|
|
39
|
+
let ExtensionInstalls = class ExtensionInstalls {
|
|
40
|
+
db;
|
|
41
|
+
txHost;
|
|
42
|
+
adminLock;
|
|
43
|
+
blobs;
|
|
44
|
+
approvals;
|
|
45
|
+
registry;
|
|
46
|
+
config;
|
|
47
|
+
keyring;
|
|
48
|
+
constructor(db, txHost,
|
|
49
|
+
/** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
|
|
50
|
+
adminLock, blobs, approvals,
|
|
51
|
+
/** The config-declared extension names (an install cannot take them, C15). */
|
|
52
|
+
registry, config, keyring) {
|
|
53
|
+
this.db = db;
|
|
54
|
+
this.txHost = txHost;
|
|
55
|
+
this.adminLock = adminLock;
|
|
56
|
+
this.blobs = blobs;
|
|
57
|
+
this.approvals = approvals;
|
|
58
|
+
this.registry = registry;
|
|
59
|
+
this.config = config;
|
|
60
|
+
this.keyring = keyring;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* An extension's effective deployment config, not validated yet (C10): the startup config
|
|
64
|
+
* (`fileValue`, file / Nacos merged with env) completed by the fields stored in PG; merged by
|
|
65
|
+
* the fields of `schema` when it is given.
|
|
66
|
+
*/
|
|
67
|
+
async effectiveDeploymentConfig(plugin, fileValue, schema) {
|
|
68
|
+
const stored = await readStoredDeploymentConfig(this.db.db, this.keyring, plugin, {
|
|
69
|
+
secretPaths: secretPathsOf(schemaFields(schema)),
|
|
70
|
+
});
|
|
71
|
+
const fields = schema ? configFields(schema).map((f) => f.path) : undefined;
|
|
72
|
+
return mergeDeploymentConfig(stored, fileValue, fields);
|
|
73
|
+
}
|
|
74
|
+
/** Every install record's extension name (any desired state). */
|
|
75
|
+
async installedNames() {
|
|
76
|
+
const rows = await this.db.selectFrom("extension_installs").select("name").execute();
|
|
77
|
+
return rows.map((r) => r.name);
|
|
17
78
|
}
|
|
18
79
|
/**
|
|
19
80
|
* Validates and stores one package and returns the review; audits `extension.package_uploaded`.
|
|
@@ -26,7 +87,7 @@ export class ExtensionInstalls {
|
|
|
26
87
|
* `actor` null means the CLI (no enterprise admin re-check, audit without an actor).
|
|
27
88
|
*/
|
|
28
89
|
async ingest(actor, bytes, src, opts = {}) {
|
|
29
|
-
const maxBytes = this.
|
|
90
|
+
const maxBytes = this.config.get().packages.maxBytes;
|
|
30
91
|
if (bytes.byteLength > maxBytes) {
|
|
31
92
|
throw new ApiError("extension.package_too_large", `The extension package is larger than ${maxBytes} bytes`);
|
|
32
93
|
}
|
|
@@ -47,11 +108,11 @@ export class ExtensionInstalls {
|
|
|
47
108
|
issue,
|
|
48
109
|
]);
|
|
49
110
|
}
|
|
50
|
-
const declared = this.
|
|
111
|
+
const declared = this.registry.declared().get(m.name);
|
|
51
112
|
if (declared === "config") {
|
|
52
113
|
throw new ApiError("extension.config_declared", `Extension ${m.name} is declared in the startup config (extensions); remove it there before installing it as a package`);
|
|
53
114
|
}
|
|
54
|
-
const installed = await this.
|
|
115
|
+
const installed = await this.db
|
|
55
116
|
.selectFrom("extension_installs")
|
|
56
117
|
.innerJoin("extension_packages", "extension_packages.sha256", "extension_installs.sha256")
|
|
57
118
|
.select("extension_packages.package_name")
|
|
@@ -61,28 +122,22 @@ export class ExtensionInstalls {
|
|
|
61
122
|
throw new ApiError("extension.name_conflict", `Extension ${m.name} is already installed from package ${installed.package_name}; package ${packageName} uses the same extension name`);
|
|
62
123
|
}
|
|
63
124
|
// 写包之前在锁内复核发起人仍是企业管理员(守卫读到的身份可能已过期);审计在写完后同样复核
|
|
64
|
-
if (actor !== null)
|
|
65
|
-
await this.
|
|
66
|
-
|
|
67
|
-
await this.d.blobs.put(pkg, bytes, {
|
|
125
|
+
if (actor !== null)
|
|
126
|
+
await this.authorize(actor);
|
|
127
|
+
await this.blobs.put(pkg, bytes, {
|
|
68
128
|
source: src.source,
|
|
69
129
|
ref: src.ref,
|
|
70
130
|
actor,
|
|
71
131
|
...(opts.store !== undefined && { store: opts.store }),
|
|
72
132
|
});
|
|
73
|
-
await this.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
79
|
-
action: "extension.package_uploaded",
|
|
80
|
-
target: m.name,
|
|
81
|
-
detail: { name: m.name, version: m.version, sha256: pkg.sha256, source: src.source },
|
|
82
|
-
});
|
|
133
|
+
await this.auditUpload(actor, opts.actorTokenId, {
|
|
134
|
+
name: m.name,
|
|
135
|
+
version: m.version,
|
|
136
|
+
sha256: pkg.sha256,
|
|
137
|
+
source: src.source,
|
|
83
138
|
});
|
|
84
139
|
const set = permissionSetOfPackage(pkg);
|
|
85
|
-
const snapshot = (await
|
|
140
|
+
const snapshot = (await this.approvals.all()).get(m.name);
|
|
86
141
|
const { added, removed } = diffPermissions(snapshot?.permissions, set);
|
|
87
142
|
const warnings = migrationWarnings(pkg.migrationSql, m.name);
|
|
88
143
|
return {
|
|
@@ -97,6 +152,29 @@ export class ExtensionInstalls {
|
|
|
97
152
|
warnings,
|
|
98
153
|
};
|
|
99
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* The enterprise admin re-check under its lock, in a transaction of its own (`requires_new`, as
|
|
157
|
+
* before the conversion): the package write that follows never runs inside a caller's
|
|
158
|
+
* transaction holding the lock.
|
|
159
|
+
*/
|
|
160
|
+
async authorize(actor) {
|
|
161
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The `extension.package_uploaded` audit, re-checking the actor under the lock, committed on its
|
|
165
|
+
* own (`requires_new`): the stored package it records is not rolled back by a caller either.
|
|
166
|
+
*/
|
|
167
|
+
async auditUpload(actor, actorTokenId, detail) {
|
|
168
|
+
if (actor !== null)
|
|
169
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
170
|
+
await audit(this.db.db, {
|
|
171
|
+
...(actor !== null && { actorAccountId: actor }),
|
|
172
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
173
|
+
action: "extension.package_uploaded",
|
|
174
|
+
target: detail.name,
|
|
175
|
+
detail,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
100
178
|
/** 上传的 tgz(来源 `file`)。 */
|
|
101
179
|
ingestFile(actor, bytes, opts = {}) {
|
|
102
180
|
return this.ingest(actor, bytes, { source: "file", ref: "upload" }, opts);
|
|
@@ -108,13 +186,13 @@ export class ExtensionInstalls {
|
|
|
108
186
|
* too.
|
|
109
187
|
*/
|
|
110
188
|
async fetchNpm(input, signal) {
|
|
111
|
-
const c = this.
|
|
189
|
+
const c = this.config.get();
|
|
112
190
|
const cfg = {
|
|
113
191
|
registry: c.packages.npmRegistry,
|
|
114
192
|
maxBytes: c.packages.maxBytes,
|
|
115
193
|
...(c.packages.npmToken !== undefined && { token: c.packages.npmToken }),
|
|
116
194
|
};
|
|
117
|
-
const timeout = AbortSignal.timeout(
|
|
195
|
+
const timeout = AbortSignal.timeout(NPM_TIMEOUT_MS);
|
|
118
196
|
try {
|
|
119
197
|
return await fetchNpmPackage(cfg, input.package, input.version, signal ? AbortSignal.any([signal, timeout]) : timeout);
|
|
120
198
|
}
|
|
@@ -149,7 +227,7 @@ export class ExtensionInstalls {
|
|
|
149
227
|
* failure is `{ checked: false, reason }`. `integrity` ties the statement to the tarball.
|
|
150
228
|
*/
|
|
151
229
|
fetchProvenance(input, signal) {
|
|
152
|
-
const c = this.
|
|
230
|
+
const c = this.config.get();
|
|
153
231
|
const cfg = {
|
|
154
232
|
registry: c.packages.npmRegistry,
|
|
155
233
|
maxBytes: c.packages.maxBytes,
|
|
@@ -159,14 +237,14 @@ export class ExtensionInstalls {
|
|
|
159
237
|
return fetchProvenance(cfg, input.package, input.version, signal ? AbortSignal.any([signal, timeout]) : timeout, input.integrity !== undefined ? { integrity: input.integrity } : {});
|
|
160
238
|
}
|
|
161
239
|
async fetchVerified(input, signal, codes) {
|
|
162
|
-
const c = this.
|
|
240
|
+
const c = this.config.get();
|
|
163
241
|
const cfg = {
|
|
164
242
|
registry: c.packages.npmRegistry,
|
|
165
243
|
maxBytes: c.packages.maxBytes,
|
|
166
244
|
allowInsecureLoopback: c.marketplaces.allowInsecureLoopback,
|
|
167
245
|
...(c.packages.npmToken !== undefined && { token: c.packages.npmToken }),
|
|
168
246
|
};
|
|
169
|
-
const timeout = AbortSignal.timeout(
|
|
247
|
+
const timeout = AbortSignal.timeout(NPM_TIMEOUT_MS);
|
|
170
248
|
try {
|
|
171
249
|
return await fetchNpmPackage(cfg, input.package, input.version, signal ? AbortSignal.any([signal, timeout]) : timeout, {
|
|
172
250
|
expectedIntegrity: input.integrity,
|
|
@@ -201,7 +279,7 @@ export class ExtensionInstalls {
|
|
|
201
279
|
}
|
|
202
280
|
/** 全部安装记录(按名字)。 */
|
|
203
281
|
async list() {
|
|
204
|
-
const rows = await this.
|
|
282
|
+
const rows = await this.db
|
|
205
283
|
.selectFrom("extension_installs")
|
|
206
284
|
.innerJoin("extension_packages", "extension_packages.sha256", "extension_installs.sha256")
|
|
207
285
|
.selectAll("extension_installs")
|
|
@@ -225,7 +303,7 @@ export class ExtensionInstalls {
|
|
|
225
303
|
}
|
|
226
304
|
/** Install records desired enabled, with their reviewed extension sections (by name). */
|
|
227
305
|
async desired() {
|
|
228
|
-
const rows = await this.
|
|
306
|
+
const rows = await this.db
|
|
229
307
|
.selectFrom("extension_installs")
|
|
230
308
|
.innerJoin("extension_packages", "extension_packages.sha256", "extension_installs.sha256")
|
|
231
309
|
.select([
|
|
@@ -250,4 +328,22 @@ export class ExtensionInstalls {
|
|
|
250
328
|
section: r.section,
|
|
251
329
|
}));
|
|
252
330
|
}
|
|
253
|
-
}
|
|
331
|
+
};
|
|
332
|
+
__decorate([
|
|
333
|
+
Transactional({ propagation: "requires_new" })
|
|
334
|
+
], ExtensionInstalls.prototype, "authorize", null);
|
|
335
|
+
__decorate([
|
|
336
|
+
Transactional({ propagation: "requires_new" })
|
|
337
|
+
], ExtensionInstalls.prototype, "auditUpload", null);
|
|
338
|
+
ExtensionInstalls = __decorate([
|
|
339
|
+
Injectable(),
|
|
340
|
+
__param(0, Inject(KernelDb)),
|
|
341
|
+
__param(1, Inject(TransactionHost)),
|
|
342
|
+
__param(2, Inject(EnterpriseAdminLock)),
|
|
343
|
+
__param(3, Inject(ExtensionBlobs)),
|
|
344
|
+
__param(4, Inject(ExtensionApprovals)),
|
|
345
|
+
__param(5, Inject(ExtensionRegistry)),
|
|
346
|
+
__param(6, Inject(KernelConfigService)),
|
|
347
|
+
__param(7, Inject(KEYRING))
|
|
348
|
+
], ExtensionInstalls);
|
|
349
|
+
export { ExtensionInstalls };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The maintenance job scheduler ids the plugins reconcile had before becoming `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs (retired at worker start, `RETIRED_SCHEDULER_IDS`). A leaf module.
|
|
4
|
+
*/
|
|
5
|
+
/** The BullMQ repeatable scheduler the job had before it became `@LockedInterval` (retired). */
|
|
6
|
+
export declare const PLUGINS_RECONCILE_SCHEDULER_ID = "plugins-reconcile-every";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The maintenance job scheduler ids the plugins reconcile had before becoming `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs (retired at worker start, `RETIRED_SCHEDULER_IDS`). A leaf module.
|
|
4
|
+
*/
|
|
5
|
+
/** The BullMQ repeatable scheduler the job had before it became `@LockedInterval` (retired). */
|
|
6
|
+
export const PLUGINS_RECONCILE_SCHEDULER_ID = "plugins-reconcile-every";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** The kernel bus topics and the job of the extension lifecycle (a leaf module: no imports). */
|
|
2
|
+
/**
|
|
3
|
+
* 插件期望状态 / 快照变了(kernel bus 主题,频道 `cap:kernel:plugins.changed`,payload `{ plugin }`)。
|
|
4
|
+
* 后台、CLI 写完 PG 后发布;各副本据此 reconcile,并作废路由闸门的名字缓存。
|
|
5
|
+
*/
|
|
6
|
+
export declare const PLUGINS_CHANGED_TOPIC = "plugins.changed";
|
|
7
|
+
/** 周期兜底(kernel bus 主题 `plugins.reconcile`,payload `{}`):维护任务 `plugins-reconcile` 发布。 */
|
|
8
|
+
export declare const PLUGINS_RECONCILE_TOPIC = "plugins.reconcile";
|
|
9
|
+
/** The `@LockedInterval` job that publishes `plugins.reconcile` every `extensionHost.reconcileIntervalSeconds`. */
|
|
10
|
+
export declare const PLUGINS_RECONCILE_JOB = "plugins-reconcile";
|
|
11
|
+
/** 副本行心跳超过这么多个 reconcile 周期的副本不计入(C16;读状态的一方据此筛选)。 */
|
|
12
|
+
export declare const STALE_RECONCILE_PERIODS = 3;
|
|
13
|
+
/**
|
|
14
|
+
* 部署配置保存之后(kernel bus 主题,频道 `cap:kernel:plugin-deployment-config`,payload `{ plugin }`):
|
|
15
|
+
* 各副本重读并校验——只改了 hot 字段就地替换,改了非 hot 字段重新加载实例,不合法保持当前值并告警;
|
|
16
|
+
* 插件此刻待配置时,下一次 reconcile 加载它。
|
|
17
|
+
*/
|
|
18
|
+
export declare const PLUGIN_DEPLOYMENT_CONFIG_TOPIC = "plugin-deployment-config";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** The kernel bus topics and the job of the extension lifecycle (a leaf module: no imports). */
|
|
2
|
+
/**
|
|
3
|
+
* 插件期望状态 / 快照变了(kernel bus 主题,频道 `cap:kernel:plugins.changed`,payload `{ plugin }`)。
|
|
4
|
+
* 后台、CLI 写完 PG 后发布;各副本据此 reconcile,并作废路由闸门的名字缓存。
|
|
5
|
+
*/
|
|
6
|
+
export const PLUGINS_CHANGED_TOPIC = "plugins.changed";
|
|
7
|
+
/** 周期兜底(kernel bus 主题 `plugins.reconcile`,payload `{}`):维护任务 `plugins-reconcile` 发布。 */
|
|
8
|
+
export const PLUGINS_RECONCILE_TOPIC = "plugins.reconcile";
|
|
9
|
+
/** The `@LockedInterval` job that publishes `plugins.reconcile` every `extensionHost.reconcileIntervalSeconds`. */
|
|
10
|
+
export const PLUGINS_RECONCILE_JOB = "plugins-reconcile";
|
|
11
|
+
/** 副本行心跳超过这么多个 reconcile 周期的副本不计入(C16;读状态的一方据此筛选)。 */
|
|
12
|
+
export const STALE_RECONCILE_PERIODS = 3;
|
|
13
|
+
/**
|
|
14
|
+
* 部署配置保存之后(kernel bus 主题,频道 `cap:kernel:plugin-deployment-config`,payload `{ plugin }`):
|
|
15
|
+
* 各副本重读并校验——只改了 hot 字段就地替换,改了非 hot 字段重新加载实例,不合法保持当前值并告警;
|
|
16
|
+
* 插件此刻待配置时,下一次 reconcile 加载它。
|
|
17
|
+
*/
|
|
18
|
+
export const PLUGIN_DEPLOYMENT_CONFIG_TOPIC = "plugin-deployment-config";
|
|
@@ -1,49 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
1
|
+
import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
3
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
4
|
+
import type { KernelLogger } from "../log.js";
|
|
5
|
+
import { ExtensionHost } from "./host.js";
|
|
6
|
+
import { ExtensionInstalls } from "./installs.js";
|
|
7
|
+
import { PLUGINS_CHANGED_TOPIC, PLUGINS_RECONCILE_JOB, PLUGINS_RECONCILE_TOPIC, STALE_RECONCILE_PERIODS } from "./lifecycle-topics.js";
|
|
3
8
|
import { PLUGINS_MIGRATED_TOPIC } from "./migrate-lock.js";
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
* 插件期望状态 / 快照变了(kernel bus 主题,频道 `cap:kernel:plugins.changed`,payload `{ plugin }`)。
|
|
7
|
-
* 后台、CLI 写完 PG 后发布;各副本据此 reconcile,并作废路由闸门的名字缓存。
|
|
8
|
-
*/
|
|
9
|
-
export declare const PLUGINS_CHANGED_TOPIC = "plugins.changed";
|
|
10
|
-
/** 周期兜底(kernel bus 主题 `plugins.reconcile`,payload `{}`):维护任务 `plugins-reconcile` 发布。 */
|
|
11
|
-
export declare const PLUGINS_RECONCILE_TOPIC = "plugins.reconcile";
|
|
12
|
-
export { PLUGINS_MIGRATED_TOPIC };
|
|
13
|
-
/** 维护任务:每 `extensionHost.reconcileIntervalSeconds` 秒发布一次 `plugins.reconcile`(任务名与 scheduler id 不含 `:`)。 */
|
|
14
|
-
export declare const PLUGINS_RECONCILE_JOB = "plugins-reconcile";
|
|
15
|
-
export declare const PLUGINS_RECONCILE_SCHEDULER_ID = "plugins-reconcile-every";
|
|
16
|
-
/** 副本行心跳超过这么多个 reconcile 周期的副本不计入(C16;读状态的一方据此筛选)。 */
|
|
17
|
-
export declare const STALE_RECONCILE_PERIODS = 3;
|
|
18
|
-
/** The host operations {@link ExtensionLifecycle} needs. */
|
|
19
|
-
export interface LifecycleHost {
|
|
20
|
-
/** Converges this replica to the deployment's desired state (serialized; see `ExtensionHost.converge`). */
|
|
21
|
-
converge(): Promise<void>;
|
|
22
|
-
/** 用同一个包重新 setup(配置的非 hot 改动、依赖方联动)。 */
|
|
23
|
-
reload(name: string): Promise<ExtensionInstance>;
|
|
24
|
-
/**
|
|
25
|
-
* 部署配置保存后本副本重读并校验(hot 就地替换、非 hot 重新加载、不合法保持当前值);
|
|
26
|
-
* 插件此刻没在本副本生效时返回 `not_loaded`(待配置的由随后的 reconcile 加载)。
|
|
27
|
-
*/
|
|
28
|
-
applyDeploymentConfig(name: string): Promise<string>;
|
|
29
|
-
/** 在本副本生效、声明了部署级配置的插件(周期 reconcile 据此补上丢了消息的配置改动)。 */
|
|
30
|
-
configurablePlugins(): string[];
|
|
31
|
-
/** 作废路由闸门的安装记录名字缓存。 */
|
|
32
|
-
invalidateKnownNames(): void;
|
|
33
|
-
/** 内置与配置声明的插件名。 */
|
|
34
|
-
declared(): ReadonlyMap<string, unknown>;
|
|
35
|
-
}
|
|
36
|
-
export interface ExtensionLifecycleDeps {
|
|
37
|
-
host: LifecycleHost;
|
|
38
|
-
bus: {
|
|
39
|
-
subscribe(topic: string, handler: (payload: unknown) => void): Promise<() => Promise<void>>;
|
|
40
|
-
};
|
|
41
|
-
status: ReplicaStatusStore;
|
|
42
|
-
/** 安装记录里的全部插件名(任何期望状态;清理本副本已不认识的状态行)。 */
|
|
43
|
-
installedNames(): Promise<string[]>;
|
|
44
|
-
reconcileIntervalSeconds(): number;
|
|
45
|
-
log: Pick<Logger, "info" | "warn" | "error">;
|
|
46
|
-
}
|
|
9
|
+
import { ReplicaStatusStore } from "./sources.js";
|
|
10
|
+
export { PLUGINS_CHANGED_TOPIC, PLUGINS_MIGRATED_TOPIC, PLUGINS_RECONCILE_JOB, PLUGINS_RECONCILE_TOPIC, STALE_RECONCILE_PERIODS, };
|
|
47
11
|
/**
|
|
48
12
|
* 每副本一个:把本副本的插件加载状态收敛到 PG 期望状态(C16)。
|
|
49
13
|
* 触发来源:bus `kernel.plugins.changed`(后台 / CLI 改了期望状态或快照)、`kernel.plugins.reconcile`(维护任务周期兜底,
|
|
@@ -53,12 +17,22 @@ export interface ExtensionLifecycleDeps {
|
|
|
53
17
|
* 进程内只有排队用的 Promise(不是跨副本状态)。
|
|
54
18
|
*/
|
|
55
19
|
export declare class ExtensionLifecycle {
|
|
56
|
-
private readonly
|
|
20
|
+
private readonly host;
|
|
21
|
+
private readonly bus;
|
|
22
|
+
private readonly status;
|
|
23
|
+
/** Every install record's name (any desired state): prunes status rows this replica no longer knows. */
|
|
24
|
+
private readonly installs;
|
|
25
|
+
private readonly config;
|
|
26
|
+
private readonly log;
|
|
57
27
|
private running;
|
|
58
28
|
private queued;
|
|
59
29
|
private unsubs;
|
|
30
|
+
/** {@link start} was called (the kernel's start sequence; never in the CLI, which loads nothing). */
|
|
31
|
+
private started;
|
|
60
32
|
private stopped;
|
|
61
|
-
constructor(
|
|
33
|
+
constructor(host: ExtensionHost, bus: Pick<ExtensionContext["bus"], "publish" | "subscribe">, status: ReplicaStatusStore,
|
|
34
|
+
/** Every install record's name (any desired state): prunes status rows this replica no longer knows. */
|
|
35
|
+
installs: ExtensionInstalls, config: KernelConfigService, log: KernelLogger);
|
|
62
36
|
/** 订阅三个主题(订阅失败只记 error:周期任务的消息同样收不到时,下次启动再来)。 */
|
|
63
37
|
start(): Promise<void>;
|
|
64
38
|
/**
|
|
@@ -78,3 +52,17 @@ export declare class ExtensionLifecycle {
|
|
|
78
52
|
private trigger;
|
|
79
53
|
private run;
|
|
80
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* The periodic reconcile fallback (job `plugins-reconcile`, once per
|
|
57
|
+
* `extensionHost.reconcileIntervalSeconds` across replicas): publishes `kernel.plugins.reconcile`,
|
|
58
|
+
* so every replica converges even when it lost a message. A worker-role job (`WorkerModule`); every
|
|
59
|
+
* replica's {@link ExtensionLifecycle} subscribes to the topic.
|
|
60
|
+
*/
|
|
61
|
+
export declare class PluginsReconcileJob {
|
|
62
|
+
private readonly bus;
|
|
63
|
+
readonly config: KernelConfigService;
|
|
64
|
+
readonly lockService: LockService;
|
|
65
|
+
readonly log: KernelLogger;
|
|
66
|
+
constructor(bus: Pick<ExtensionContext["bus"], "publish">, config: KernelConfigService, lockService: LockService, log: KernelLogger);
|
|
67
|
+
run(): Promise<void>;
|
|
68
|
+
}
|