@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,9 +1,28 @@
|
|
|
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";
|
|
2
12
|
import { sql } from "kysely";
|
|
3
13
|
import { ApiError } from "../errors.js";
|
|
4
|
-
import {
|
|
14
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
15
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
16
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
17
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
18
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
19
|
+
import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
|
|
5
20
|
import { ExtensionApprovals, snapshotCovers, writeSnapshot, } from "./approvals.js";
|
|
6
|
-
import {
|
|
21
|
+
import { ExtensionBlobs } from "./blobs.js";
|
|
22
|
+
import { ExtensionHost } from "./host.js";
|
|
23
|
+
import { ExtensionInstalls } from "./installs.js";
|
|
24
|
+
import { ExtensionLifecycle, PLUGINS_CHANGED_TOPIC, STALE_RECONCILE_PERIODS } from "./lifecycle.js";
|
|
25
|
+
import { PluginApproveLock } from "./locks.js";
|
|
7
26
|
import { ExtensionPackageError, permissionSetOfPackage, readExtensionPackage } from "./package.js";
|
|
8
27
|
import { buildPermissionSet, diffPermissions } from "./permission-set.js";
|
|
9
28
|
import { deriveExtensionStatus, migrationWarnings, permissionGroups, permissionKeyItems, reviewHash, } from "./permission-view.js";
|
|
@@ -31,11 +50,42 @@ function assertReadable(s) {
|
|
|
31
50
|
* 部署级插件后台(企业管理员):列表 / 详情与网页批准权限(D8)。无状态,多副本共用;
|
|
32
51
|
* 状态由 PG(安装记录、快照、各副本状态行)与本副本宿主(配置声明插件的清单)推出。
|
|
33
52
|
*/
|
|
34
|
-
|
|
35
|
-
|
|
53
|
+
let ExtensionAdmin = class ExtensionAdmin {
|
|
54
|
+
kdb;
|
|
55
|
+
txHost;
|
|
56
|
+
adminLock;
|
|
57
|
+
approveLock;
|
|
58
|
+
blobs;
|
|
59
|
+
installs;
|
|
60
|
+
approvals;
|
|
61
|
+
host;
|
|
62
|
+
lifecycle;
|
|
63
|
+
config;
|
|
64
|
+
bus;
|
|
65
|
+
log;
|
|
36
66
|
packageSets = new Map();
|
|
37
|
-
constructor(
|
|
38
|
-
|
|
67
|
+
constructor(kdb, txHost,
|
|
68
|
+
/** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
|
|
69
|
+
adminLock, approveLock, blobs, installs, approvals,
|
|
70
|
+
/** The config-declared extensions (this replica's host; the CLI fills it from its inspection). */
|
|
71
|
+
host,
|
|
72
|
+
/** This replica's reconcile after an approval (a no-op where the lifecycle never started: the CLI). */
|
|
73
|
+
lifecycle, config, bus, log) {
|
|
74
|
+
this.kdb = kdb;
|
|
75
|
+
this.txHost = txHost;
|
|
76
|
+
this.adminLock = adminLock;
|
|
77
|
+
this.approveLock = approveLock;
|
|
78
|
+
this.blobs = blobs;
|
|
79
|
+
this.installs = installs;
|
|
80
|
+
this.approvals = approvals;
|
|
81
|
+
this.host = host;
|
|
82
|
+
this.lifecycle = lifecycle;
|
|
83
|
+
this.config = config;
|
|
84
|
+
this.bus = bus;
|
|
85
|
+
this.log = log;
|
|
86
|
+
}
|
|
87
|
+
get db() {
|
|
88
|
+
return this.kdb.db;
|
|
39
89
|
}
|
|
40
90
|
/** 全部插件(配置声明 → 安装记录,各自按名字)。 */
|
|
41
91
|
async list() {
|
|
@@ -84,62 +134,64 @@ export class ExtensionAdmin {
|
|
|
84
134
|
throw stale();
|
|
85
135
|
if (body.reviewHash !== reviewHash(s.set, s.warnings))
|
|
86
136
|
throw stale();
|
|
87
|
-
await this.
|
|
88
|
-
await lockEnterpriseAdminsAndAuthorize(trx, actor);
|
|
89
|
-
await sql `SELECT pg_advisory_xact_lock(hashtext(${`capybara.plugin-approve:${name}`}))`.execute(trx);
|
|
90
|
-
if (s.install !== null) {
|
|
91
|
-
// 审阅之后安装记录可能已换包(T14 升级):锁行复核
|
|
92
|
-
const row = await trx
|
|
93
|
-
.selectFrom("extension_installs")
|
|
94
|
-
.select("sha256")
|
|
95
|
-
.where("name", "=", name)
|
|
96
|
-
.forUpdate()
|
|
97
|
-
.executeTakeFirst();
|
|
98
|
-
if (row?.sha256 !== s.install.sha256)
|
|
99
|
-
throw stale();
|
|
100
|
-
}
|
|
101
|
-
const snapRow = await trx
|
|
102
|
-
.selectFrom("extension_permission_snapshots")
|
|
103
|
-
.select(["version", "permissions"])
|
|
104
|
-
.where("plugin", "=", name)
|
|
105
|
-
.forUpdate()
|
|
106
|
-
.executeTakeFirst();
|
|
107
|
-
const snap = snapRow && {
|
|
108
|
-
version: snapRow.version,
|
|
109
|
-
permissions: snapRow.permissions,
|
|
110
|
-
};
|
|
111
|
-
if (snapshotCovers(snap, s.set)) {
|
|
112
|
-
throw new ApiError("extension.not_pending", `Extension ${name} ${s.version} has no new permissions awaiting approval`);
|
|
113
|
-
}
|
|
114
|
-
const { added, removed } = diffPermissions(snap?.permissions, s.set);
|
|
115
|
-
await writeSnapshot(trx, name, s.version, s.set, {
|
|
116
|
-
source: "web",
|
|
117
|
-
approvedBy: actor,
|
|
118
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
119
|
-
audit: { added, removed, sha256: s.install?.sha256 ?? null },
|
|
120
|
-
});
|
|
121
|
-
});
|
|
137
|
+
await this.writeApproval(actor, name, s, opts.actorTokenId, stale);
|
|
122
138
|
try {
|
|
123
|
-
await this.
|
|
139
|
+
await this.bus.publish(PLUGINS_CHANGED_TOPIC, { plugin: name });
|
|
124
140
|
}
|
|
125
141
|
catch (err) {
|
|
126
142
|
// 快照已写入;其他副本由周期 reconcile(T14)兜底
|
|
127
|
-
this.
|
|
143
|
+
this.log.warn("cannot publish plugins.changed after approval", { plugin: name, err });
|
|
128
144
|
}
|
|
129
145
|
try {
|
|
130
|
-
await this.
|
|
146
|
+
await this.lifecycle.reconcile(`approved:${name}`);
|
|
131
147
|
}
|
|
132
148
|
catch (err) {
|
|
133
|
-
this.
|
|
149
|
+
this.log.error("loading approved plugins on this replica failed", { plugin: name, err });
|
|
134
150
|
}
|
|
135
151
|
return this.get(name);
|
|
136
152
|
}
|
|
153
|
+
async writeApproval(actor, name, s, actorTokenId, stale) {
|
|
154
|
+
const db = this.db;
|
|
155
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
156
|
+
await this.approveLock.lock(name);
|
|
157
|
+
if (s.install !== null) {
|
|
158
|
+
// 审阅之后安装记录可能已换包(T14 升级):锁行复核
|
|
159
|
+
const row = await db
|
|
160
|
+
.selectFrom("extension_installs")
|
|
161
|
+
.select("sha256")
|
|
162
|
+
.where("name", "=", name)
|
|
163
|
+
.forUpdate()
|
|
164
|
+
.executeTakeFirst();
|
|
165
|
+
if (row?.sha256 !== s.install.sha256)
|
|
166
|
+
throw stale();
|
|
167
|
+
}
|
|
168
|
+
const snapRow = await db
|
|
169
|
+
.selectFrom("extension_permission_snapshots")
|
|
170
|
+
.select(["version", "permissions"])
|
|
171
|
+
.where("plugin", "=", name)
|
|
172
|
+
.forUpdate()
|
|
173
|
+
.executeTakeFirst();
|
|
174
|
+
const snap = snapRow && {
|
|
175
|
+
version: snapRow.version,
|
|
176
|
+
permissions: snapRow.permissions,
|
|
177
|
+
};
|
|
178
|
+
if (snapshotCovers(snap, s.set)) {
|
|
179
|
+
throw new ApiError("extension.not_pending", `Extension ${name} ${s.version} has no new permissions awaiting approval`);
|
|
180
|
+
}
|
|
181
|
+
const { added, removed } = diffPermissions(snap?.permissions, s.set);
|
|
182
|
+
await writeSnapshot(db, name, s.version, s.set, {
|
|
183
|
+
source: "web",
|
|
184
|
+
approvedBy: actor,
|
|
185
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
186
|
+
audit: { added, removed, sha256: s.install?.sha256 ?? null },
|
|
187
|
+
});
|
|
188
|
+
}
|
|
137
189
|
/** 配置声明 → 安装记录(与配置声明重名的安装记录不生效,不单列)。`only` 给出时只取这一个。 */
|
|
138
190
|
async subjects(only) {
|
|
139
|
-
const declared = this.
|
|
191
|
+
const declared = this.host
|
|
140
192
|
.declaredPlugins()
|
|
141
193
|
.filter((p) => only === undefined || p.name === only);
|
|
142
|
-
const taken = new Set(this.
|
|
194
|
+
const taken = new Set(this.host.declaredPlugins().map((p) => p.name));
|
|
143
195
|
const out = [...declared]
|
|
144
196
|
.sort((a, b) => a.name.localeCompare(b.name))
|
|
145
197
|
.map((p) => ({
|
|
@@ -154,7 +206,7 @@ export class ExtensionAdmin {
|
|
|
154
206
|
}));
|
|
155
207
|
if (only !== undefined && out.length > 0)
|
|
156
208
|
return out;
|
|
157
|
-
const rows = (await this.
|
|
209
|
+
const rows = (await this.installs.list()).filter((r) => !taken.has(r.name) && (only === undefined || r.name === only));
|
|
158
210
|
for (const r of rows) {
|
|
159
211
|
let info;
|
|
160
212
|
try {
|
|
@@ -168,7 +220,7 @@ export class ExtensionAdmin {
|
|
|
168
220
|
? err.message
|
|
169
221
|
: `package ${r.name} ${r.version} (${r.sha256}) cannot be read: ${err instanceof Error ? err.message : String(err)}`;
|
|
170
222
|
// A pre-0.1.0 package is an expected state (repack needed), logged without a stack trace.
|
|
171
|
-
this.
|
|
223
|
+
this.log.warn("plugin package unreadable for the admin view", {
|
|
172
224
|
plugin: r.name,
|
|
173
225
|
sha256: r.sha256,
|
|
174
226
|
...(legacy ? { reason: detail } : { err }),
|
|
@@ -207,8 +259,8 @@ export class ExtensionAdmin {
|
|
|
207
259
|
async packageInfo(sha256) {
|
|
208
260
|
let cached = this.packageSets.get(sha256);
|
|
209
261
|
if (!cached) {
|
|
210
|
-
const pkg = await readExtensionPackage(await this.
|
|
211
|
-
maxBytes: this.
|
|
262
|
+
const pkg = await readExtensionPackage(await this.blobs.get(sha256), {
|
|
263
|
+
maxBytes: this.config.get().packages.maxBytes,
|
|
212
264
|
hostSdkVersion: SDK_VERSION,
|
|
213
265
|
});
|
|
214
266
|
cached = {
|
|
@@ -225,9 +277,9 @@ export class ExtensionAdmin {
|
|
|
225
277
|
if (subjects.length === 0)
|
|
226
278
|
return [];
|
|
227
279
|
const names = subjects.map((s) => s.name);
|
|
228
|
-
const snapshots = await
|
|
229
|
-
const staleSeconds = STALE_RECONCILE_PERIODS * this.
|
|
230
|
-
const rows = await this.
|
|
280
|
+
const snapshots = await this.approvals.all();
|
|
281
|
+
const staleSeconds = STALE_RECONCILE_PERIODS * this.config.get().extensionHost.reconcileIntervalSeconds;
|
|
282
|
+
const rows = await this.db
|
|
231
283
|
.selectFrom("extension_replica_status")
|
|
232
284
|
.selectAll()
|
|
233
285
|
.where("plugin", "in", names)
|
|
@@ -307,7 +359,26 @@ export class ExtensionAdmin {
|
|
|
307
359
|
};
|
|
308
360
|
});
|
|
309
361
|
}
|
|
310
|
-
}
|
|
362
|
+
};
|
|
363
|
+
__decorate([
|
|
364
|
+
Transactional()
|
|
365
|
+
], ExtensionAdmin.prototype, "writeApproval", null);
|
|
366
|
+
ExtensionAdmin = __decorate([
|
|
367
|
+
Injectable(),
|
|
368
|
+
__param(0, Inject(KernelDb)),
|
|
369
|
+
__param(1, Inject(TransactionHost)),
|
|
370
|
+
__param(2, Inject(EnterpriseAdminLock)),
|
|
371
|
+
__param(3, Inject(PluginApproveLock)),
|
|
372
|
+
__param(4, Inject(ExtensionBlobs)),
|
|
373
|
+
__param(5, Inject(ExtensionInstalls)),
|
|
374
|
+
__param(6, Inject(ExtensionApprovals)),
|
|
375
|
+
__param(7, Inject(ExtensionHost)),
|
|
376
|
+
__param(8, Inject(ExtensionLifecycle)),
|
|
377
|
+
__param(9, Inject(KernelConfigService)),
|
|
378
|
+
__param(10, Inject(KERNEL_BUS)),
|
|
379
|
+
__param(11, Inject(KERNEL_LOGGER))
|
|
380
|
+
], ExtensionAdmin);
|
|
381
|
+
export { ExtensionAdmin };
|
|
311
382
|
const replicaView = (r) => ({
|
|
312
383
|
replicaId: r.replica_id,
|
|
313
384
|
version: r.version,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ExtensionManifest } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
4
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
4
5
|
import { type PermissionSet } from "./permission-set.js";
|
|
5
6
|
/** An approved permission snapshot (one row of `capybara.extension_permission_snapshots`). */
|
|
6
7
|
export interface PermissionSnapshot {
|
|
@@ -70,11 +71,11 @@ export declare function withPreApproved(snapshots: Map<string, PermissionSnapsho
|
|
|
70
71
|
/** 快照是否已覆盖该权限集合(没有需要批准的新增;F-N:「待批准」只看这一条,与期望状态无关)。 */
|
|
71
72
|
export declare function snapshotCovers(snap: Pick<PermissionSnapshot, "permissions"> | undefined, set: PermissionSet): boolean;
|
|
72
73
|
/**
|
|
73
|
-
* Writes (adds or overwrites) a snapshot
|
|
74
|
-
* `extension.permissions_approved` audit is written
|
|
74
|
+
* Writes (adds or overwrites) a snapshot on `db` (the caller's transaction); with `audit`, the
|
|
75
|
+
* `extension.permissions_approved` audit is written on the same handle (actor is `approvedBy`,
|
|
75
76
|
* empty for the CLI).
|
|
76
77
|
*/
|
|
77
|
-
export declare function writeSnapshot(
|
|
78
|
+
export declare function writeSnapshot(db: KernelSchemaDb, plugin: string, version: string, permissions: PermissionSet, opts: {
|
|
78
79
|
source: PermissionSnapshot["source"];
|
|
79
80
|
approvedBy?: string | null;
|
|
80
81
|
actorTokenId?: string;
|
|
@@ -89,11 +90,14 @@ export declare function writeSnapshot(trx: Transaction<KernelDatabase>, plugin:
|
|
|
89
90
|
};
|
|
90
91
|
};
|
|
91
92
|
}): Promise<void>;
|
|
92
|
-
/**
|
|
93
|
+
/** Every approved snapshot, by extension name (a query on `db`; the CLI's migrate runs it on its own pool). */
|
|
94
|
+
export declare function readSnapshots(db: KernelSchemaDb): Promise<Map<string, PermissionSnapshot>>;
|
|
95
|
+
/** The permission snapshots (PG; the kernel and the CLI share them). */
|
|
93
96
|
export declare class ExtensionApprovals {
|
|
94
97
|
private readonly db;
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
readonly txHost: TransactionHost;
|
|
99
|
+
constructor(db: KernelDb, txHost: TransactionHost);
|
|
100
|
+
/** Every snapshot, by extension name. */
|
|
97
101
|
all(): Promise<Map<string, PermissionSnapshot>>;
|
|
98
102
|
/**
|
|
99
103
|
* Approves (adds or overwrites) a snapshot: writes the current permission set and version,
|
|
@@ -1,7 +1,20 @@
|
|
|
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 { OBJECT_STORE_EXTENSION_POINT } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
12
|
import { sql } from "kysely";
|
|
3
13
|
import semver from "semver";
|
|
4
14
|
import { audit } from "../identity/audit.js";
|
|
15
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
16
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
17
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
5
18
|
import { blockingKeys, diffPermissions, permissionKeys, } from "./permission-set.js";
|
|
6
19
|
/**
|
|
7
20
|
* 按依赖拓扑序(`ordered`)比对快照,决定每个插件加载还是待批准:
|
|
@@ -107,11 +120,11 @@ export function snapshotCovers(snap, set) {
|
|
|
107
120
|
return (snap !== undefined && blockingKeys(diffPermissions(snap.permissions, set).added).length === 0);
|
|
108
121
|
}
|
|
109
122
|
/**
|
|
110
|
-
* Writes (adds or overwrites) a snapshot
|
|
111
|
-
* `extension.permissions_approved` audit is written
|
|
123
|
+
* Writes (adds or overwrites) a snapshot on `db` (the caller's transaction); with `audit`, the
|
|
124
|
+
* `extension.permissions_approved` audit is written on the same handle (actor is `approvedBy`,
|
|
112
125
|
* empty for the CLI).
|
|
113
126
|
*/
|
|
114
|
-
export async function writeSnapshot(
|
|
127
|
+
export async function writeSnapshot(db, plugin, version, permissions, opts) {
|
|
115
128
|
const values = {
|
|
116
129
|
plugin,
|
|
117
130
|
version,
|
|
@@ -120,7 +133,7 @@ export async function writeSnapshot(trx, plugin, version, permissions, opts) {
|
|
|
120
133
|
approved_at: sql `now()`,
|
|
121
134
|
source: opts.source,
|
|
122
135
|
};
|
|
123
|
-
await
|
|
136
|
+
await db
|
|
124
137
|
.insertInto("extension_permission_snapshots")
|
|
125
138
|
.values(values)
|
|
126
139
|
.onConflict((oc) => oc.column("plugin").doUpdateSet({
|
|
@@ -132,7 +145,7 @@ export async function writeSnapshot(trx, plugin, version, permissions, opts) {
|
|
|
132
145
|
}))
|
|
133
146
|
.execute();
|
|
134
147
|
if (opts.audit) {
|
|
135
|
-
await audit(
|
|
148
|
+
await audit(db, {
|
|
136
149
|
...(opts.approvedBy && { actorAccountId: opts.approvedBy }),
|
|
137
150
|
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
138
151
|
action: "extension.permissions_approved",
|
|
@@ -143,26 +156,32 @@ export async function writeSnapshot(trx, plugin, version, permissions, opts) {
|
|
|
143
156
|
}
|
|
144
157
|
/** `version` 是否比 `than` 旧(任一方不是合法 semver 时视为不旧)。 */
|
|
145
158
|
const isOlder = (version, than) => semver.valid(version) !== null && semver.valid(than) !== null && semver.lt(version, than);
|
|
146
|
-
/**
|
|
147
|
-
export
|
|
159
|
+
/** Every approved snapshot, by extension name (a query on `db`; the CLI's migrate runs it on its own pool). */
|
|
160
|
+
export async function readSnapshots(db) {
|
|
161
|
+
const rows = await db.selectFrom("extension_permission_snapshots").selectAll().execute();
|
|
162
|
+
return new Map(rows.map((r) => [
|
|
163
|
+
r.plugin,
|
|
164
|
+
{
|
|
165
|
+
plugin: r.plugin,
|
|
166
|
+
version: r.version,
|
|
167
|
+
permissions: r.permissions,
|
|
168
|
+
approvedBy: r.approved_by,
|
|
169
|
+
approvedAt: r.approved_at,
|
|
170
|
+
source: r.source,
|
|
171
|
+
},
|
|
172
|
+
]));
|
|
173
|
+
}
|
|
174
|
+
/** The permission snapshots (PG; the kernel and the CLI share them). */
|
|
175
|
+
let ExtensionApprovals = class ExtensionApprovals {
|
|
148
176
|
db;
|
|
149
|
-
|
|
177
|
+
txHost;
|
|
178
|
+
constructor(db, txHost) {
|
|
150
179
|
this.db = db;
|
|
180
|
+
this.txHost = txHost;
|
|
151
181
|
}
|
|
152
|
-
/**
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return new Map(rows.map((r) => [
|
|
156
|
-
r.plugin,
|
|
157
|
-
{
|
|
158
|
-
plugin: r.plugin,
|
|
159
|
-
version: r.version,
|
|
160
|
-
permissions: r.permissions,
|
|
161
|
-
approvedBy: r.approved_by,
|
|
162
|
-
approvedAt: r.approved_at,
|
|
163
|
-
source: r.source,
|
|
164
|
-
},
|
|
165
|
-
]));
|
|
182
|
+
/** Every snapshot, by extension name. */
|
|
183
|
+
all() {
|
|
184
|
+
return readSnapshots(this.db.db);
|
|
166
185
|
}
|
|
167
186
|
/**
|
|
168
187
|
* Approves (adds or overwrites) a snapshot: writes the current permission set and version,
|
|
@@ -170,9 +189,7 @@ export class ExtensionApprovals {
|
|
|
170
189
|
* same transaction (actor is `approvedBy`, empty for the CLI).
|
|
171
190
|
*/
|
|
172
191
|
async approve(plugin, version, permissions, opts) {
|
|
173
|
-
await this.db
|
|
174
|
-
.transaction()
|
|
175
|
-
.execute((trx) => writeSnapshot(trx, plugin, version, permissions, opts));
|
|
192
|
+
await writeSnapshot(this.db.db, plugin, version, permissions, opts);
|
|
176
193
|
}
|
|
177
194
|
/**
|
|
178
195
|
* 权限变少、不变或只多出 `ui.view:*`(不卡加载)时更新快照的权限集合与版本;批准人、批准时间与来源保持不变,
|
|
@@ -181,25 +198,35 @@ export class ExtensionApprovals {
|
|
|
181
198
|
* 或当前集合相对快照有需要批准的新增时不更新。返回是否更新。
|
|
182
199
|
*/
|
|
183
200
|
async refresh(plugin, version, permissions) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return true;
|
|
203
|
-
});
|
|
201
|
+
const row = await this.db
|
|
202
|
+
.selectFrom("extension_permission_snapshots")
|
|
203
|
+
.select(["version", "permissions"])
|
|
204
|
+
.where("plugin", "=", plugin)
|
|
205
|
+
.forUpdate()
|
|
206
|
+
.executeTakeFirst();
|
|
207
|
+
if (!row || isOlder(version, row.version))
|
|
208
|
+
return false;
|
|
209
|
+
const { added } = diffPermissions(row.permissions, permissions);
|
|
210
|
+
if (blockingKeys(added).length > 0) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
await this.db
|
|
214
|
+
.updateTable("extension_permission_snapshots")
|
|
215
|
+
.set({ version, permissions: JSON.stringify(permissions) })
|
|
216
|
+
.where("plugin", "=", plugin)
|
|
217
|
+
.execute();
|
|
218
|
+
return true;
|
|
204
219
|
}
|
|
205
|
-
}
|
|
220
|
+
};
|
|
221
|
+
__decorate([
|
|
222
|
+
Transactional()
|
|
223
|
+
], ExtensionApprovals.prototype, "approve", null);
|
|
224
|
+
__decorate([
|
|
225
|
+
Transactional()
|
|
226
|
+
], ExtensionApprovals.prototype, "refresh", null);
|
|
227
|
+
ExtensionApprovals = __decorate([
|
|
228
|
+
Injectable(),
|
|
229
|
+
__param(0, Inject(KernelDb)),
|
|
230
|
+
__param(1, Inject(TransactionHost))
|
|
231
|
+
], ExtensionApprovals);
|
|
232
|
+
export { ExtensionApprovals };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
2
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
3
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
4
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
3
5
|
import type { ExtensionPackage } from "./package.js";
|
|
4
6
|
/**
|
|
5
7
|
* Content-addressed extension package store (C13): one copy per sha256 of the whole tgz.
|
|
@@ -24,20 +26,35 @@ export interface ExtensionBlobSource {
|
|
|
24
26
|
store?: "object" | "pg";
|
|
25
27
|
}
|
|
26
28
|
export declare class ExtensionBlobs {
|
|
27
|
-
private readonly
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
private readonly db;
|
|
30
|
+
readonly txHost: TransactionHost;
|
|
31
|
+
/** Without an object-store extension (the CLI) packages go to PG. */
|
|
32
|
+
private readonly storage;
|
|
33
|
+
private readonly config;
|
|
34
|
+
/**
|
|
35
|
+
* CLI only: packages the CLI process imported itself and reads back before the store, since such
|
|
36
|
+
* a package may be recorded in an object store the CLI cannot read. Each entry's sha256 was
|
|
37
|
+
* checked by {@link remember}; content-addressed and immutable, so it is never stale. Bounded
|
|
38
|
+
* ({@link REMEMBERED_MAX}, oldest dropped); a kernel replica never fills it.
|
|
39
|
+
*/
|
|
40
|
+
private readonly local;
|
|
41
|
+
constructor(db: KernelDb, txHost: TransactionHost,
|
|
42
|
+
/** Without an object-store extension (the CLI) packages go to PG. */
|
|
43
|
+
storage: StorageService, config: KernelConfigService);
|
|
44
|
+
/** `packages.maxBytes` (read at every call). */
|
|
45
|
+
private maxBytes;
|
|
46
|
+
/**
|
|
47
|
+
* CLI only: keeps `bytes` for {@link get} in this process (see {@link local}). Bytes whose sha256
|
|
48
|
+
* is not `sha256` throw {@link ExtensionBlobIntegrityError} and are not kept.
|
|
49
|
+
*/
|
|
50
|
+
remember(sha256: string, bytes: Uint8Array): void;
|
|
35
51
|
/**
|
|
36
52
|
* Stores a validated package (the result of {@link readExtensionPackage}) and its bytes, and writes
|
|
37
53
|
* the `extension_packages` row. Does nothing when a package with the same sha256 exists
|
|
38
54
|
* (content-addressed, idempotent; replicas writing the same package concurrently is harmless).
|
|
39
55
|
*/
|
|
40
56
|
put(p: ExtensionPackage, bytes: Uint8Array, src: ExtensionBlobSource): Promise<void>;
|
|
57
|
+
private record;
|
|
41
58
|
/** 已有记录的包:按记录的存放位置检查字节在不在,不在就写回(调用方已校验 sha256)。 */
|
|
42
59
|
private repair;
|
|
43
60
|
/** Reads the package from its recorded location and checks its sha256; a mismatch throws {@link ExtensionBlobIntegrityError}. */
|