@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
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { Connector, ConnectorTemplateSpec, LocalizedName, PluginManifest } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { KernelConfig } from "../config/schema.js";
|
|
3
|
+
import type { KernelSchemaDb, SourceFormat } from "../db/kernel-schema.js";
|
|
4
|
+
import type { StorageService } from "../storage/storage.service.js";
|
|
5
|
+
import type { CatalogItemView, CatalogPolicy, CatalogVersionSource, PermissionsMismatch, SourceDetail } from "./catalog.service.js";
|
|
6
|
+
import type { TranslationReport } from "./claude/report.js";
|
|
7
|
+
import { type ImportedAs } from "./marketplaces.service.js";
|
|
8
|
+
/**
|
|
9
|
+
* The object storage prefix of one import (relative to `deployment/`):
|
|
10
|
+
* `directory/<itemId>/<version>/<importId>/`. Each import gets a new `importId`, so the losing one of
|
|
11
|
+
* two concurrent imports of the same version never overwrites the committed version's files; reads
|
|
12
|
+
* always go through the `object_prefix` stored on the version row. Build metadata's `+` is written
|
|
13
|
+
* as `_` (a `+` in a key can turn into a space through URL query encoding).
|
|
14
|
+
*/
|
|
15
|
+
export declare const catalogObjectPrefix: (itemId: string, version: string, importId: string) => string;
|
|
16
|
+
/**
|
|
17
|
+
* Checks a connector template against the loaded connector `c` (problem paths start with `at`): the
|
|
18
|
+
* endpoint matches its `endpointSchema` and carries no credential-like headers / query / URL user
|
|
19
|
+
* info (the same rule as connector installs); every `editableEndpoint` path exists in the endpoint
|
|
20
|
+
* schema.
|
|
21
|
+
*/
|
|
22
|
+
export declare function templateProblems(c: Connector, t: ConnectorTemplateSpec, at: string): string[];
|
|
23
|
+
/** Writes the files to `deployment/<prefix><path>` ({@link PUT_CONCURRENCY} at a time). */
|
|
24
|
+
export declare function putCatalogFiles(storage: StorageService, prefix: string, files: {
|
|
25
|
+
path: string;
|
|
26
|
+
size: number;
|
|
27
|
+
data: Uint8Array;
|
|
28
|
+
}[]): Promise<void>;
|
|
29
|
+
/** Compares the marketplace's permission summary with the computed keys ({@link PermissionsMismatch}). */
|
|
30
|
+
export declare function permissionsMismatch(declared: string[] | undefined, actual: string[] | undefined): PermissionsMismatch;
|
|
31
|
+
/** The fields the list shows (the item's publisher / description / displayName). */
|
|
32
|
+
export interface CatalogListing {
|
|
33
|
+
publisher: string;
|
|
34
|
+
description: string;
|
|
35
|
+
displayName: LocalizedName | null;
|
|
36
|
+
}
|
|
37
|
+
/** Input of {@link writeCatalogVersion}. */
|
|
38
|
+
export interface CatalogVersionWrite {
|
|
39
|
+
/** null: the CLI (no account). */
|
|
40
|
+
actor: string | null;
|
|
41
|
+
actorTokenId?: string;
|
|
42
|
+
name: string;
|
|
43
|
+
/** null: a git plugin without package.json. */
|
|
44
|
+
packageName: string | null;
|
|
45
|
+
/**
|
|
46
|
+
* The version recorded (from {@link precheckCatalogImport}: the plugin's own, or with build
|
|
47
|
+
* metadata when that release was imported with other content).
|
|
48
|
+
*/
|
|
49
|
+
version: string;
|
|
50
|
+
/** The content digest of the plugin's files. */
|
|
51
|
+
contentDigest: string;
|
|
52
|
+
/** The normalized plugin.json. */
|
|
53
|
+
manifest: PluginManifest;
|
|
54
|
+
listing: CatalogListing;
|
|
55
|
+
/** The id of the item to create when there is none yet (the one the storage prefix used). */
|
|
56
|
+
newItemId: string;
|
|
57
|
+
source: {
|
|
58
|
+
source: CatalogVersionSource;
|
|
59
|
+
ref: string;
|
|
60
|
+
integrity?: string;
|
|
61
|
+
detail?: SourceDetail;
|
|
62
|
+
};
|
|
63
|
+
/** Imported from a marketplace: the item records it. */
|
|
64
|
+
marketplaceId?: string;
|
|
65
|
+
objectPrefix: string | null;
|
|
66
|
+
extensionSha256: string | null;
|
|
67
|
+
files: {
|
|
68
|
+
path: string;
|
|
69
|
+
size: number;
|
|
70
|
+
sha256: string;
|
|
71
|
+
}[];
|
|
72
|
+
size: number;
|
|
73
|
+
/** The format the plugin was read from (default `capybara`). */
|
|
74
|
+
sourceFormat?: SourceFormat;
|
|
75
|
+
/** The translation report of a Claude Code plugin. */
|
|
76
|
+
translation?: TranslationReport | null;
|
|
77
|
+
/** The root LICENSE text. */
|
|
78
|
+
licenseText?: string | null;
|
|
79
|
+
/** The root LICENSE was too long (or not UTF-8) to store. */
|
|
80
|
+
licenseTruncated?: boolean;
|
|
81
|
+
/** Merged into the detail of the `catalog.imported` audit. */
|
|
82
|
+
auditDetail?: Record<string, unknown>;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The identity of a git source, `<host>/<repo>:<path>` (host lower case, no `.git`), or null when
|
|
86
|
+
* the source is not git. An item without package.json is identified by it instead of a package name.
|
|
87
|
+
*/
|
|
88
|
+
export declare function gitIdentity(detail: SourceDetail | undefined): string | null;
|
|
89
|
+
/** What is being imported, as far as the version conflict rules need it. */
|
|
90
|
+
export interface ImportIdentity {
|
|
91
|
+
packageName: string | null;
|
|
92
|
+
/** The plugin's own version (plugin.json, else the fallback of spec §5.3). */
|
|
93
|
+
version: string;
|
|
94
|
+
contentDigest: string;
|
|
95
|
+
integrity?: string;
|
|
96
|
+
detail?: SourceDetail;
|
|
97
|
+
marketplaceId?: string;
|
|
98
|
+
}
|
|
99
|
+
type ExistingVersion = {
|
|
100
|
+
version: string;
|
|
101
|
+
content_digest: string | null;
|
|
102
|
+
integrity: string | null;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* The version a new import records (Decision 6, spec §5.3): the plugin's own version, unless that
|
|
106
|
+
* release is already imported. A version of the same release (equal but for build metadata) with
|
|
107
|
+
* the same content (digest; for versions without one, the same integrity) -> `catalog.version_exists`
|
|
108
|
+
* "already imported"; other content -> `<version>+git.<sha12>` (git) or `+sha256.<12>` (any other
|
|
109
|
+
* source, the digest's first 12 hex), never overwriting the imported version. A git commit already
|
|
110
|
+
* recorded with other content (a Claude Code plugin whose marketplace entry changed while its own
|
|
111
|
+
* commit did not, see `claudeContentDigest`) falls back to `+sha256.<12>`.
|
|
112
|
+
*/
|
|
113
|
+
export declare function recordedVersion(existing: ExistingVersion[], p: ImportIdentity): string;
|
|
114
|
+
/**
|
|
115
|
+
* Conflict precheck before writing (no lock; {@link writeCatalogVersion}'s re-check inside the
|
|
116
|
+
* transaction is final): an item with the same name from another npm package (or, without one,
|
|
117
|
+
* another git source) -> `catalog.name_conflict`; the release already imported with the same
|
|
118
|
+
* content -> `catalog.version_exists`. Returns the existing item (undefined when there is none) and
|
|
119
|
+
* the version to record ({@link recordedVersion}).
|
|
120
|
+
*/
|
|
121
|
+
export declare function precheckCatalogImport(db: KernelSchemaDb, name: string, p: ImportIdentity): Promise<{
|
|
122
|
+
existing: {
|
|
123
|
+
id: string;
|
|
124
|
+
} | undefined;
|
|
125
|
+
version: string;
|
|
126
|
+
}>;
|
|
127
|
+
/**
|
|
128
|
+
* Writes a catalog version in the caller's transaction (`db` is its handle; the caller has
|
|
129
|
+
* re-checked the enterprise admin and holds the name's {@link CatalogItemLock}): checks conflicts again (the same source; no version of
|
|
130
|
+
* the release with the same content; `version` not taken meanwhile), creates the item when there is
|
|
131
|
+
* none or adds the version (latest and display fields change only for a newer version, a version
|
|
132
|
+
* equal but for build metadata being newer as the later import), and writes the version row (with
|
|
133
|
+
* its content digest) and the `catalog.imported` audit. Returns the item id.
|
|
134
|
+
*/
|
|
135
|
+
export declare function writeCatalogVersion(db: KernelSchemaDb, w: CatalogVersionWrite): Promise<string>;
|
|
136
|
+
/**
|
|
137
|
+
* An extension name belongs to the npm package that first installed it (`extension_name_owners`,
|
|
138
|
+
* Ruling P3): when another package owns it, the import is refused right away with
|
|
139
|
+
* `extension.name_conflict` (the same code as at install), instead of failing only at deploy time.
|
|
140
|
+
*/
|
|
141
|
+
export declare function assertPluginNameOwner(db: KernelSchemaDb, name: string, packageName: string | null): Promise<void>;
|
|
142
|
+
/** A catalog version as {@link marketplaceLatest} compares it with its marketplace entries. */
|
|
143
|
+
type RecordedVersion = ImportedAs & {
|
|
144
|
+
imported_at?: Date;
|
|
145
|
+
};
|
|
146
|
+
/** What the marketplace says about a marketplace-imported item. */
|
|
147
|
+
export interface MarketplaceStatus {
|
|
148
|
+
/** See {@link CatalogItemView.latestMarketplaceVersion}. */
|
|
149
|
+
latest: string | null;
|
|
150
|
+
/** See {@link CatalogItemView.contentChanged}. */
|
|
151
|
+
contentChanged: boolean;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* For each marketplace-imported item, its marketplace (when enabled): the highest compatible
|
|
155
|
+
* version listed, and whether a compatible entry's content changed at an imported version.
|
|
156
|
+
*/
|
|
157
|
+
export declare function marketplaceLatest(db: KernelSchemaDb, config: KernelConfig, items: {
|
|
158
|
+
id: string;
|
|
159
|
+
name: string;
|
|
160
|
+
marketplace_id?: string | null;
|
|
161
|
+
}[], versions: ReadonlyMap<string, readonly RecordedVersion[]>): Promise<Map<string, MarketplaceStatus>>;
|
|
162
|
+
/** Org install counts per item (see {@link CatalogItemView.installs}). */
|
|
163
|
+
export declare function countInstalls(db: KernelSchemaDb, items: {
|
|
164
|
+
id: string;
|
|
165
|
+
name: string;
|
|
166
|
+
latest_version: string;
|
|
167
|
+
}[], versions: ReadonlyMap<string, {
|
|
168
|
+
version: string;
|
|
169
|
+
extension_sha256: string | null;
|
|
170
|
+
}[]>): Promise<Map<string, number>>;
|
|
171
|
+
export declare function itemView(i: {
|
|
172
|
+
id: string;
|
|
173
|
+
name: string;
|
|
174
|
+
publisher: string;
|
|
175
|
+
display_name: LocalizedName | null;
|
|
176
|
+
description: string;
|
|
177
|
+
policy: CatalogPolicy;
|
|
178
|
+
latest_version: string;
|
|
179
|
+
marketplace_id?: string | null;
|
|
180
|
+
updated_at: Date;
|
|
181
|
+
}, versions: {
|
|
182
|
+
version: string;
|
|
183
|
+
source: string;
|
|
184
|
+
imported_at?: Date;
|
|
185
|
+
}[], installs?: number, marketplace?: MarketplaceStatus): CatalogItemView;
|
|
186
|
+
export {};
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import { sql } from "kysely";
|
|
2
|
+
import { ApiError } from "../errors.js";
|
|
3
|
+
import { enabledExtensionsByOrg } from "../extensions/enabled.js";
|
|
4
|
+
import { audit } from "../identity/audit.js";
|
|
5
|
+
import { endpointCredentialIssues } from "../tools/endpoint.js";
|
|
6
|
+
import { gitLocationIdentity } from "./git-source.js";
|
|
7
|
+
import { entryCompatible, entryContentChanged, sourceEffective, } from "./marketplaces.service.js";
|
|
8
|
+
import { schemaHasPath } from "./schema-path.js";
|
|
9
|
+
import { compareVersions, newestFirst, sameRelease, withBuild } from "./versions.js";
|
|
10
|
+
/**
|
|
11
|
+
* The object storage prefix of one import (relative to `deployment/`):
|
|
12
|
+
* `directory/<itemId>/<version>/<importId>/`. Each import gets a new `importId`, so the losing one of
|
|
13
|
+
* two concurrent imports of the same version never overwrites the committed version's files; reads
|
|
14
|
+
* always go through the `object_prefix` stored on the version row. Build metadata's `+` is written
|
|
15
|
+
* as `_` (a `+` in a key can turn into a space through URL query encoding).
|
|
16
|
+
*/
|
|
17
|
+
export const catalogObjectPrefix = (itemId, version, importId) => `directory/${itemId}/${version.replace(/\+/g, "_")}/${importId}/`;
|
|
18
|
+
const PUT_CONCURRENCY = 8;
|
|
19
|
+
/**
|
|
20
|
+
* Checks a connector template against the loaded connector `c` (problem paths start with `at`): the
|
|
21
|
+
* endpoint matches its `endpointSchema` and carries no credential-like headers / query / URL user
|
|
22
|
+
* info (the same rule as connector installs); every `editableEndpoint` path exists in the endpoint
|
|
23
|
+
* schema.
|
|
24
|
+
*/
|
|
25
|
+
export function templateProblems(c, t, at) {
|
|
26
|
+
const problems = [];
|
|
27
|
+
const r = c.endpointSchema.safeParse(t.endpoint);
|
|
28
|
+
if (!r.success) {
|
|
29
|
+
for (const i of r.error.issues) {
|
|
30
|
+
problems.push(`${[`${at}.endpoint`, ...i.path.map(String)].join(".")}: ${i.message}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
for (const leak of endpointCredentialIssues(r.data)) {
|
|
35
|
+
problems.push(`${at}.${leak.path}: ${leak.message}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (const p of t.editableEndpoint ?? []) {
|
|
39
|
+
if (!schemaHasPath(c.endpointSchema, p.split("."))) {
|
|
40
|
+
problems.push(`${at}.editableEndpoint "${p}" is not a field of the ${t.connector} connector's endpoint`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return problems;
|
|
44
|
+
}
|
|
45
|
+
/** Writes the files to `deployment/<prefix><path>` ({@link PUT_CONCURRENCY} at a time). */
|
|
46
|
+
export async function putCatalogFiles(storage, prefix, files) {
|
|
47
|
+
const store = storage.deployment();
|
|
48
|
+
const queue = [...files];
|
|
49
|
+
await Promise.all(Array.from({ length: Math.min(PUT_CONCURRENCY, queue.length) }, async () => {
|
|
50
|
+
for (let f = queue.shift(); f; f = queue.shift()) {
|
|
51
|
+
await store.put(`${prefix}${f.path}`, f.data, {
|
|
52
|
+
contentType: "application/octet-stream",
|
|
53
|
+
size: f.size,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
/** Compares the marketplace's permission summary with the computed keys ({@link PermissionsMismatch}). */
|
|
59
|
+
export function permissionsMismatch(declared, actual) {
|
|
60
|
+
if (declared === undefined || actual === undefined)
|
|
61
|
+
return null;
|
|
62
|
+
const want = new Set(declared);
|
|
63
|
+
const have = new Set(actual);
|
|
64
|
+
const missing = [...have].filter((k) => !want.has(k)).sort();
|
|
65
|
+
const extra = [...want].filter((k) => !have.has(k)).sort();
|
|
66
|
+
return missing.length > 0 || extra.length > 0 ? { missing, extra } : null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The live item of a name, with the source identity of its latest version
|
|
70
|
+
* ({@link sourceIdentity}; null when there is none).
|
|
71
|
+
*/
|
|
72
|
+
async function liveItem(db, name) {
|
|
73
|
+
const item = await db
|
|
74
|
+
.selectFrom("catalog_items")
|
|
75
|
+
.select(["id", "package_name", "latest_version", "marketplace_id"])
|
|
76
|
+
.where("name", "=", name)
|
|
77
|
+
.where("deleted_at", "is", null)
|
|
78
|
+
.executeTakeFirst();
|
|
79
|
+
if (!item)
|
|
80
|
+
return undefined;
|
|
81
|
+
const latest = await db
|
|
82
|
+
.selectFrom("catalog_item_versions")
|
|
83
|
+
.select("source_detail")
|
|
84
|
+
.where("item_id", "=", item.id)
|
|
85
|
+
.where("version", "=", item.latest_version)
|
|
86
|
+
.executeTakeFirst();
|
|
87
|
+
return {
|
|
88
|
+
...item,
|
|
89
|
+
source: sourceIdentity(latest?.source_detail ?? undefined, item.marketplace_id ?? undefined),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The identity of a git source, `<host>/<repo>:<path>` (host lower case, no `.git`), or null when
|
|
94
|
+
* the source is not git. An item without package.json is identified by it instead of a package name.
|
|
95
|
+
*/
|
|
96
|
+
export function gitIdentity(detail) {
|
|
97
|
+
if (detail === undefined || !("commit" in detail))
|
|
98
|
+
return null;
|
|
99
|
+
return gitLocationIdentity(detail);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* What identifies the source of a plugin without package.json: `git <host>/<repo>:<path>`, or, for
|
|
103
|
+
* a marketplace archive (a skills-only tgz without plugin.json), `marketplace <id>` (the
|
|
104
|
+
* marketplace vouches for its entries; archive URLs change from version to version). null for
|
|
105
|
+
* anything else.
|
|
106
|
+
*/
|
|
107
|
+
function sourceIdentity(detail, marketplaceId) {
|
|
108
|
+
const git = gitIdentity(detail);
|
|
109
|
+
if (git !== null)
|
|
110
|
+
return `git ${git}`;
|
|
111
|
+
if (detail !== undefined && "url" in detail && marketplaceId !== undefined) {
|
|
112
|
+
return `marketplace ${marketplaceId}`;
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/** The versions of an item, with what tells their content apart. */
|
|
117
|
+
async function itemVersions(db, itemId) {
|
|
118
|
+
return db
|
|
119
|
+
.selectFrom("catalog_item_versions")
|
|
120
|
+
.select(["version", "content_digest", "integrity"])
|
|
121
|
+
.where("item_id", "=", itemId)
|
|
122
|
+
.execute();
|
|
123
|
+
}
|
|
124
|
+
/** `atConfirm`: found under the lock at confirm (another import committed after the review). */
|
|
125
|
+
const versionExists = (version, sameContent, atConfirm = false) => new ApiError("catalog.version_exists", (sameContent
|
|
126
|
+
? `Version ${version} of this catalog item is already imported with the same content`
|
|
127
|
+
: `Version ${version} of this catalog item has already been imported`) +
|
|
128
|
+
(atConfirm
|
|
129
|
+
? " (by another import since this one was prepared); prepare the import again"
|
|
130
|
+
: ""));
|
|
131
|
+
/**
|
|
132
|
+
* No version of the release of `p.version` (equal but for build metadata) holds the same content
|
|
133
|
+
* (digest; for a version without one, the same integrity), else `catalog.version_exists`.
|
|
134
|
+
*/
|
|
135
|
+
function assertNewContent(existing, p, atConfirm = false) {
|
|
136
|
+
const same = existing.find((v) => sameRelease(v.version, p.version) &&
|
|
137
|
+
(v.content_digest !== null
|
|
138
|
+
? v.content_digest === p.contentDigest
|
|
139
|
+
: v.integrity !== null && v.integrity === p.integrity));
|
|
140
|
+
if (same)
|
|
141
|
+
throw versionExists(same.version, true, atConfirm);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The version a new import records (Decision 6, spec §5.3): the plugin's own version, unless that
|
|
145
|
+
* release is already imported. A version of the same release (equal but for build metadata) with
|
|
146
|
+
* the same content (digest; for versions without one, the same integrity) -> `catalog.version_exists`
|
|
147
|
+
* "already imported"; other content -> `<version>+git.<sha12>` (git) or `+sha256.<12>` (any other
|
|
148
|
+
* source, the digest's first 12 hex), never overwriting the imported version. A git commit already
|
|
149
|
+
* recorded with other content (a Claude Code plugin whose marketplace entry changed while its own
|
|
150
|
+
* commit did not, see `claudeContentDigest`) falls back to `+sha256.<12>`.
|
|
151
|
+
*/
|
|
152
|
+
export function recordedVersion(existing, p) {
|
|
153
|
+
assertNewContent(existing, p);
|
|
154
|
+
if (!existing.some((v) => v.version === p.version))
|
|
155
|
+
return p.version;
|
|
156
|
+
const d = p.detail;
|
|
157
|
+
const byDigest = withBuild(p.version, `sha256.${p.contentDigest.slice(0, 12)}`);
|
|
158
|
+
let next = d !== undefined && "commit" in d
|
|
159
|
+
? withBuild(p.version, `git.${d.commit.slice(0, 12)}`)
|
|
160
|
+
: byDigest;
|
|
161
|
+
if (existing.some((v) => v.version === next))
|
|
162
|
+
next = byDigest;
|
|
163
|
+
if (existing.some((v) => v.version === next))
|
|
164
|
+
throw versionExists(next, false);
|
|
165
|
+
return next;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Conflict precheck before writing (no lock; {@link writeCatalogVersion}'s re-check inside the
|
|
169
|
+
* transaction is final): an item with the same name from another npm package (or, without one,
|
|
170
|
+
* another git source) -> `catalog.name_conflict`; the release already imported with the same
|
|
171
|
+
* content -> `catalog.version_exists`. Returns the existing item (undefined when there is none) and
|
|
172
|
+
* the version to record ({@link recordedVersion}).
|
|
173
|
+
*/
|
|
174
|
+
export async function precheckCatalogImport(db, name, p) {
|
|
175
|
+
const existing = await liveItem(db, name);
|
|
176
|
+
if (!existing)
|
|
177
|
+
return { existing, version: p.version };
|
|
178
|
+
assertSameSource(existing, p.packageName, sourceIdentity(p.detail, p.marketplaceId));
|
|
179
|
+
return { existing, version: recordedVersion(await itemVersions(db, existing.id), p) };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Writes a catalog version in the caller's transaction (`db` is its handle; the caller has
|
|
183
|
+
* re-checked the enterprise admin and holds the name's {@link CatalogItemLock}): checks conflicts again (the same source; no version of
|
|
184
|
+
* the release with the same content; `version` not taken meanwhile), creates the item when there is
|
|
185
|
+
* none or adds the version (latest and display fields change only for a newer version, a version
|
|
186
|
+
* equal but for build metadata being newer as the later import), and writes the version row (with
|
|
187
|
+
* its content digest) and the `catalog.imported` audit. Returns the item id.
|
|
188
|
+
*/
|
|
189
|
+
export async function writeCatalogVersion(db, w) {
|
|
190
|
+
const t = db;
|
|
191
|
+
const { name, version, listing } = w;
|
|
192
|
+
const live = await liveItem(t, name);
|
|
193
|
+
let id;
|
|
194
|
+
if (live) {
|
|
195
|
+
id = live.id;
|
|
196
|
+
assertSameSource(live, w.packageName, sourceIdentity(w.source.detail, w.marketplaceId));
|
|
197
|
+
const existing = await itemVersions(t, id);
|
|
198
|
+
// the same content under any version of the release, then the recorded version itself
|
|
199
|
+
assertNewContent(existing, {
|
|
200
|
+
version,
|
|
201
|
+
contentDigest: w.contentDigest,
|
|
202
|
+
...(w.source.integrity !== undefined && { integrity: w.source.integrity }),
|
|
203
|
+
}, true);
|
|
204
|
+
if (existing.some((v) => v.version === version))
|
|
205
|
+
throw versionExists(version, false, true);
|
|
206
|
+
const newer = compareVersions(version, live.latest_version) >= 0;
|
|
207
|
+
await t
|
|
208
|
+
.updateTable("catalog_items")
|
|
209
|
+
.set({
|
|
210
|
+
updated_at: sql `now()`,
|
|
211
|
+
...(w.marketplaceId !== undefined && { marketplace_id: w.marketplaceId }),
|
|
212
|
+
...(newer && {
|
|
213
|
+
latest_version: version,
|
|
214
|
+
publisher: listing.publisher,
|
|
215
|
+
description: listing.description,
|
|
216
|
+
display_name: listing.displayName ? JSON.stringify(listing.displayName) : null,
|
|
217
|
+
}),
|
|
218
|
+
})
|
|
219
|
+
.where("id", "=", id)
|
|
220
|
+
.execute();
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
id = w.newItemId;
|
|
224
|
+
await t
|
|
225
|
+
.insertInto("catalog_items")
|
|
226
|
+
.values({
|
|
227
|
+
id,
|
|
228
|
+
name,
|
|
229
|
+
package_name: w.packageName,
|
|
230
|
+
publisher: listing.publisher,
|
|
231
|
+
description: listing.description,
|
|
232
|
+
display_name: listing.displayName ? JSON.stringify(listing.displayName) : null,
|
|
233
|
+
latest_version: version,
|
|
234
|
+
created_by: w.actor,
|
|
235
|
+
marketplace_id: w.marketplaceId ?? null,
|
|
236
|
+
})
|
|
237
|
+
.execute();
|
|
238
|
+
}
|
|
239
|
+
await t
|
|
240
|
+
.insertInto("catalog_item_versions")
|
|
241
|
+
.values({
|
|
242
|
+
item_id: id,
|
|
243
|
+
version,
|
|
244
|
+
manifest: JSON.stringify(w.manifest),
|
|
245
|
+
source: w.source.source,
|
|
246
|
+
source_ref: w.source.ref,
|
|
247
|
+
integrity: w.source.integrity ?? null,
|
|
248
|
+
source_detail: w.source.detail !== undefined ? JSON.stringify(w.source.detail) : null,
|
|
249
|
+
content_digest: w.contentDigest,
|
|
250
|
+
object_prefix: w.objectPrefix,
|
|
251
|
+
extension_sha256: w.extensionSha256,
|
|
252
|
+
files: JSON.stringify(w.files.map(({ path, size, sha256 }) => ({ path, size, sha256 }))),
|
|
253
|
+
size: w.size,
|
|
254
|
+
imported_by: w.actor,
|
|
255
|
+
source_format: w.sourceFormat ?? "capybara",
|
|
256
|
+
translation: w.translation != null ? JSON.stringify(w.translation) : null,
|
|
257
|
+
license_text: w.licenseText ?? null,
|
|
258
|
+
license_truncated: w.licenseTruncated === true,
|
|
259
|
+
})
|
|
260
|
+
.execute();
|
|
261
|
+
await audit(t, {
|
|
262
|
+
...(w.actor !== null && { actorAccountId: w.actor }),
|
|
263
|
+
...(w.actorTokenId !== undefined && { actorTokenId: w.actorTokenId }),
|
|
264
|
+
action: "catalog.imported",
|
|
265
|
+
target: id,
|
|
266
|
+
detail: {
|
|
267
|
+
name,
|
|
268
|
+
version,
|
|
269
|
+
source: w.source.source,
|
|
270
|
+
sourceRef: w.source.ref,
|
|
271
|
+
contentDigest: w.contentDigest,
|
|
272
|
+
...(w.extensionSha256 !== null && { sha256: w.extensionSha256 }),
|
|
273
|
+
...(w.source.integrity !== undefined && { integrity: w.source.integrity }),
|
|
274
|
+
...(w.marketplaceId !== undefined && { marketplaceId: w.marketplaceId }),
|
|
275
|
+
...w.auditDetail,
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
return id;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* An extension name belongs to the npm package that first installed it (`extension_name_owners`,
|
|
282
|
+
* Ruling P3): when another package owns it, the import is refused right away with
|
|
283
|
+
* `extension.name_conflict` (the same code as at install), instead of failing only at deploy time.
|
|
284
|
+
*/
|
|
285
|
+
export async function assertPluginNameOwner(db, name, packageName) {
|
|
286
|
+
const owner = await db
|
|
287
|
+
.selectFrom("extension_name_owners")
|
|
288
|
+
.select("package_name")
|
|
289
|
+
.where("name", "=", name)
|
|
290
|
+
.executeTakeFirst();
|
|
291
|
+
if (owner && owner.package_name !== packageName) {
|
|
292
|
+
throw new ApiError("extension.name_conflict", `Extension name ${name} belongs to package ${owner.package_name}; ${packageLabel(packageName)} cannot use it`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/** "package <name>", or what a plugin without package.json is called in messages. */
|
|
296
|
+
const packageLabel = (p) => p === null ? "a plugin without package.json" : `package ${p}`;
|
|
297
|
+
/**
|
|
298
|
+
* Whether a plugin may add a version to an existing item: the same npm package, or, for an item
|
|
299
|
+
* without package.json, the same source ({@link sourceIdentity}: git host, repo and path, so
|
|
300
|
+
* unrelated repos that resolve to the same name never merge; or the same marketplace for an
|
|
301
|
+
* archive); never a mix of the two.
|
|
302
|
+
*/
|
|
303
|
+
function assertSameSource(item, packageName, source) {
|
|
304
|
+
const from = (p, src) => p !== null ? `package ${p}` : (src ?? "a plugin without package.json");
|
|
305
|
+
const same = item.package_name !== null
|
|
306
|
+
? item.package_name === packageName
|
|
307
|
+
: packageName === null && item.source !== null && item.source === source;
|
|
308
|
+
if (!same) {
|
|
309
|
+
throw new ApiError("catalog.name_conflict", `A catalog item with this name comes from ${from(item.package_name, item.source)}; ${from(packageName, source)} cannot add versions to it`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* For each marketplace-imported item, its marketplace (when enabled): the highest compatible
|
|
314
|
+
* version listed, and whether a compatible entry's content changed at an imported version.
|
|
315
|
+
*/
|
|
316
|
+
export async function marketplaceLatest(db, config, items, versions) {
|
|
317
|
+
const out = new Map();
|
|
318
|
+
const sourced = items.filter((i) => typeof i.marketplace_id === "string");
|
|
319
|
+
if (sourced.length === 0)
|
|
320
|
+
return out;
|
|
321
|
+
const rows = await db
|
|
322
|
+
.selectFrom("marketplace_entries as e")
|
|
323
|
+
.innerJoin("marketplaces as s", "s.id", "e.source_id")
|
|
324
|
+
.select([
|
|
325
|
+
"e.source_id",
|
|
326
|
+
"e.name",
|
|
327
|
+
"e.version",
|
|
328
|
+
"e.entry",
|
|
329
|
+
"e.head_commit",
|
|
330
|
+
"e.tree_oid",
|
|
331
|
+
"s.builtin",
|
|
332
|
+
"s.enabled",
|
|
333
|
+
"s.url",
|
|
334
|
+
"s.last_commit",
|
|
335
|
+
])
|
|
336
|
+
.where("e.source_id", "in", [...new Set(sourced.map((i) => i.marketplace_id))])
|
|
337
|
+
.where("e.name", "in", [...new Set(sourced.map((i) => i.name))])
|
|
338
|
+
.execute();
|
|
339
|
+
for (const i of sourced) {
|
|
340
|
+
const listed = rows.filter((r) => r.source_id === i.marketplace_id &&
|
|
341
|
+
r.name === i.name &&
|
|
342
|
+
sourceEffective(r, config) &&
|
|
343
|
+
entryCompatible(r.entry));
|
|
344
|
+
const [best] = listed
|
|
345
|
+
.filter((r) => r.version !== "")
|
|
346
|
+
.map((r) => r.version)
|
|
347
|
+
.sort(newestFirst);
|
|
348
|
+
const recorded = versions.get(i.id) ?? [];
|
|
349
|
+
out.set(i.id, {
|
|
350
|
+
latest: best ?? null,
|
|
351
|
+
contentChanged: listed.some((r) => entryContentChanged(r.entry, {
|
|
352
|
+
marketplaceId: r.source_id,
|
|
353
|
+
headCommit: r.head_commit,
|
|
354
|
+
treeOid: r.tree_oid,
|
|
355
|
+
url: r.url,
|
|
356
|
+
lastCommit: r.last_commit,
|
|
357
|
+
}, recorded)),
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
return out;
|
|
361
|
+
}
|
|
362
|
+
/** Org install counts per item (see {@link CatalogItemView.installs}). */
|
|
363
|
+
export async function countInstalls(db, items, versions) {
|
|
364
|
+
const orgs = new Map(items.map((i) => [i.id, new Set()]));
|
|
365
|
+
const installed = await db
|
|
366
|
+
.selectFrom("plugin_installs")
|
|
367
|
+
.select(["item_id", "org_id"])
|
|
368
|
+
.where("item_id", "in", items.map((i) => i.id))
|
|
369
|
+
.where("status", "in", ["installed", "upgrading"])
|
|
370
|
+
.execute();
|
|
371
|
+
for (const r of installed)
|
|
372
|
+
orgs.get(r.item_id)?.add(r.org_id);
|
|
373
|
+
const withExtension = items.filter((i) => (versions.get(i.id) ?? []).find((v) => v.version === i.latest_version)?.extension_sha256 !=
|
|
374
|
+
null);
|
|
375
|
+
if (withExtension.length > 0) {
|
|
376
|
+
const enabled = await db
|
|
377
|
+
.selectFrom(enabledExtensionsByOrg(db).as("en"))
|
|
378
|
+
.select(["en.plugin", "en.org_id"])
|
|
379
|
+
.where("en.plugin", "in", withExtension.map((p) => p.name))
|
|
380
|
+
.execute();
|
|
381
|
+
for (const i of withExtension) {
|
|
382
|
+
for (const r of enabled)
|
|
383
|
+
if (r.plugin === i.name)
|
|
384
|
+
orgs.get(i.id)?.add(r.org_id);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
return new Map([...orgs].map(([id, set]) => [id, set.size]));
|
|
388
|
+
}
|
|
389
|
+
export function itemView(i, versions, installs = 0, marketplace = { latest: null, contentChanged: false }) {
|
|
390
|
+
const sorted = [...versions].sort((a, b) => newestFirst({ version: a.version, importedAt: a.imported_at ?? null }, { version: b.version, importedAt: b.imported_at ?? null }));
|
|
391
|
+
const top = sorted[0]?.version ?? i.latest_version;
|
|
392
|
+
const latestMarketplaceVersion = marketplace.latest;
|
|
393
|
+
return {
|
|
394
|
+
id: i.id,
|
|
395
|
+
name: i.name,
|
|
396
|
+
publisher: i.publisher,
|
|
397
|
+
displayName: i.display_name,
|
|
398
|
+
description: i.description,
|
|
399
|
+
policy: i.policy,
|
|
400
|
+
latestVersion: i.latest_version,
|
|
401
|
+
versions: sorted.map((v) => v.version),
|
|
402
|
+
installs,
|
|
403
|
+
source: versions.find((v) => v.version === i.latest_version)?.source ?? "file",
|
|
404
|
+
marketplaceId: i.marketplace_id ?? null,
|
|
405
|
+
latestMarketplaceVersion,
|
|
406
|
+
newerInMarketplace: latestMarketplaceVersion !== null && compareVersions(latestMarketplaceVersion, top) > 0,
|
|
407
|
+
contentChanged: marketplace.contentChanged,
|
|
408
|
+
updatedAt: i.updated_at.toISOString(),
|
|
409
|
+
};
|
|
410
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The enterprise side of the catalog: marketplaces, the one import review (prepare -> confirm) and
|
|
3
|
+
* the items with their policy. The CLI's `capybara plugins *` and `capybara bootstrap` run on this
|
|
4
|
+
* part alone.
|
|
5
|
+
*/
|
|
6
|
+
export declare class CatalogImportModule {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The plugin catalog (spec §4, §10): {@link CatalogImportModule}, catalog requests, and org installs,
|
|
10
|
+
* upgrades and rollbacks with their dependencies. The catalog's periodic jobs (`CatalogJobs`) are
|
|
11
|
+
* the worker role's (`WorkerModule`).
|
|
12
|
+
*/
|
|
13
|
+
export declare class CatalogModule {
|
|
14
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
import { Module } from "@nestjs/common";
|
|
8
|
+
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
9
|
+
import { EnterpriseAdminLockModule } from "../identity/enterprise-admin.js";
|
|
10
|
+
import { OrgLockModule } from "../orgs/org-lock.js";
|
|
11
|
+
import { SkillsModule } from "../skills/skills.module.js";
|
|
12
|
+
import { StorageModule } from "../storage/storage.module.js";
|
|
13
|
+
import { ToolsModule } from "../tools/tools.module.js";
|
|
14
|
+
import { CatalogService } from "./catalog.service.js";
|
|
15
|
+
import { CatalogItemLock, CatalogSourceLock } from "./locks.js";
|
|
16
|
+
import { MarketplacesService } from "./marketplaces.service.js";
|
|
17
|
+
import { OrgCatalogService } from "./org-catalog.service.js";
|
|
18
|
+
import { PluginImport } from "./plugin-import.js";
|
|
19
|
+
import { PluginInstaller } from "./plugin-install.js";
|
|
20
|
+
import { PluginUpgrader } from "./plugin-upgrade.js";
|
|
21
|
+
import { CatalogRequestsService } from "./requests.service.js";
|
|
22
|
+
/**
|
|
23
|
+
* The enterprise side of the catalog: marketplaces, the one import review (prepare -> confirm) and
|
|
24
|
+
* the items with their policy. The CLI's `capybara plugins *` and `capybara bootstrap` run on this
|
|
25
|
+
* part alone.
|
|
26
|
+
*/
|
|
27
|
+
let CatalogImportModule = class CatalogImportModule {
|
|
28
|
+
};
|
|
29
|
+
CatalogImportModule = __decorate([
|
|
30
|
+
Module({
|
|
31
|
+
imports: [ExtensionsModule, EnterpriseAdminLockModule, StorageModule],
|
|
32
|
+
providers: [
|
|
33
|
+
CatalogSourceLock,
|
|
34
|
+
CatalogItemLock,
|
|
35
|
+
MarketplacesService,
|
|
36
|
+
PluginImport,
|
|
37
|
+
CatalogService,
|
|
38
|
+
],
|
|
39
|
+
exports: [MarketplacesService, PluginImport, CatalogService],
|
|
40
|
+
})
|
|
41
|
+
], CatalogImportModule);
|
|
42
|
+
export { CatalogImportModule };
|
|
43
|
+
/**
|
|
44
|
+
* The plugin catalog (spec §4, §10): {@link CatalogImportModule}, catalog requests, and org installs,
|
|
45
|
+
* upgrades and rollbacks with their dependencies. The catalog's periodic jobs (`CatalogJobs`) are
|
|
46
|
+
* the worker role's (`WorkerModule`).
|
|
47
|
+
*/
|
|
48
|
+
let CatalogModule = class CatalogModule {
|
|
49
|
+
};
|
|
50
|
+
CatalogModule = __decorate([
|
|
51
|
+
Module({
|
|
52
|
+
imports: [
|
|
53
|
+
CatalogImportModule,
|
|
54
|
+
ExtensionsModule,
|
|
55
|
+
EnterpriseAdminLockModule,
|
|
56
|
+
OrgLockModule,
|
|
57
|
+
StorageModule,
|
|
58
|
+
SkillsModule,
|
|
59
|
+
ToolsModule,
|
|
60
|
+
],
|
|
61
|
+
providers: [CatalogRequestsService, PluginInstaller, PluginUpgrader, OrgCatalogService],
|
|
62
|
+
exports: [
|
|
63
|
+
CatalogImportModule,
|
|
64
|
+
CatalogRequestsService,
|
|
65
|
+
PluginInstaller,
|
|
66
|
+
PluginUpgrader,
|
|
67
|
+
OrgCatalogService,
|
|
68
|
+
],
|
|
69
|
+
})
|
|
70
|
+
], CatalogModule);
|
|
71
|
+
export { CatalogModule };
|