@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +10 -6
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +179 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +261 -329
- package/dist/agents/definition.d.ts +8 -0
- package/dist/agents/definition.js +8 -0
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +20 -4
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +323 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +30 -13
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +2 -2
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -193
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +16 -1
- package/dist/config/schema.js +54 -7
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +10 -10
- package/dist/conversations/artifacts.js +35 -9
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +28 -18
- package/dist/conversations/event-log.js +74 -27
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -62
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +2 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/run-replay.d.ts +56 -8
- package/dist/evals/run-replay.js +140 -80
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -120
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +96 -42
- package/dist/extensions/bootstrap.js +303 -155
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +52 -47
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +85 -57
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +19 -12
- package/dist/index.js +13 -8
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +41 -10
- package/dist/log.js +91 -17
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +14 -8
- package/dist/orgs/settings.service.js +75 -46
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +7 -0
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -136
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +24 -57
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +26 -17
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +121 -75
- package/dist/runtime/run-worker.js +340 -225
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +4 -4
- package/dist/runtime/subagents/definition.js +2 -2
- package/dist/runtime/subagents/dispatch.d.ts +87 -6
- package/dist/runtime/subagents/dispatch.js +135 -140
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +1 -1
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +3 -3
- package/dist/runtime/subagents/roster.js +1 -1
- package/dist/runtime/subagents/skill-fork.d.ts +6 -7
- package/dist/runtime/subagents/skill-fork.js +16 -5
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -99
- package/dist/runtime/waits.d.ts +125 -57
- package/dist/runtime/waits.js +431 -208
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +33 -20
- package/dist/skills/catalog.js +96 -53
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +28 -18
- package/dist/skills/changes.service.js +421 -364
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invoke.d.ts +16 -15
- package/dist/skills/invoke.js +48 -17
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +27 -25
- package/dist/tools/approvals.service.js +324 -258
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtins/ask-user.d.ts +2 -2
- package/dist/tools/builtins/ask-user.js +1 -1
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +2 -2
- package/dist/tools/builtins/read-tool-output.js +1 -1
- package/dist/tools/builtins/sandbox/bash.js +2 -2
- package/dist/tools/builtins/sandbox/common.d.ts +7 -4
- package/dist/tools/builtins/sandbox/common.js +5 -3
- package/dist/tools/builtins/sandbox/deliver.js +2 -2
- package/dist/tools/builtins/sandbox/edit.js +1 -1
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -2
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/write.js +1 -1
- package/dist/tools/builtins/skill-load.d.ts +3 -3
- package/dist/tools/builtins/skill-load.js +1 -1
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +434 -344
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +111 -79
- package/dist/tools/info.d.ts +12 -9
- package/dist/tools/info.js +33 -7
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +47 -3
- package/dist/tools/pipeline.d.ts +62 -46
- package/dist/tools/pipeline.js +145 -64
- package/dist/tools/policy.d.ts +2 -2
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +8 -5
- package/dist/tools/questions.service.d.ts +25 -24
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +30 -20
- package/dist/tools/registry.js +73 -37
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +11 -2
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -1,18 +1,63 @@
|
|
|
1
|
+
import { type ExtensionManifest, type ExtensionPointRef } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { type InflightTracker } from "./inflight.js";
|
|
1
3
|
import type { ExtensionInstance } from "./instance.js";
|
|
4
|
+
import type { ExtensionSource } from "./sources.js";
|
|
5
|
+
/** One item of {@link ExtensionRegistry.list}. */
|
|
6
|
+
export interface ExtensionPointEntry {
|
|
7
|
+
plugin: string;
|
|
8
|
+
capability: ExtensionPointRef;
|
|
9
|
+
impl: unknown;
|
|
10
|
+
/** 插件清单的 version。 */
|
|
11
|
+
version: string;
|
|
12
|
+
/** 部署配置摘要,见 `deploymentConfigHash`。 */
|
|
13
|
+
configHash: string;
|
|
14
|
+
/** 提供方实例的在途计数(connector / sandbox / model-provider 的 `impl` 已经包成计入它的代理)。 */
|
|
15
|
+
inflight: InflightTracker;
|
|
16
|
+
}
|
|
2
17
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
18
|
+
* The extension instances in effect in this process (by extension name, one each). One provider
|
|
19
|
+
* per process (decision R6 of the Nest kernel spec): the extension host writes it, other domains
|
|
20
|
+
* read extension points and manifests from it, never from the host. The order is the order of
|
|
21
|
+
* first activation (the host loads in dependency order; a replaced instance keeps its place). It
|
|
22
|
+
* is only this process's view: the desired state across replicas is in PG (the install records),
|
|
23
|
+
* and each replica reconciles itself.
|
|
5
24
|
*/
|
|
6
25
|
export declare class ExtensionRegistry {
|
|
7
26
|
private readonly instances;
|
|
8
27
|
private readonly listeners;
|
|
9
28
|
private rev;
|
|
29
|
+
/** The config-declared extension names of this process (the startup config `extensions` list). */
|
|
30
|
+
private declaredNames;
|
|
31
|
+
/**
|
|
32
|
+
* Records the config-declared extensions (the host at load; before it, the start sequence for
|
|
33
|
+
* the bootstrap step; the CLI from its inspection). Install records cannot take these names and
|
|
34
|
+
* the admin operations refuse them (C15).
|
|
35
|
+
*/
|
|
36
|
+
declare(names: Iterable<string>): void;
|
|
37
|
+
/** The config-declared extension names → source (see {@link declare}). */
|
|
38
|
+
declared(): Map<string, ExtensionSource>;
|
|
10
39
|
/** 原子替换:登记新实例,返回被替换的旧实例(由调用方 dispose)。 */
|
|
11
40
|
activate(inst: ExtensionInstance): ExtensionInstance | undefined;
|
|
12
41
|
/** 摘下:返回被摘下的实例(由调用方 dispose);不在时返回 undefined。 */
|
|
13
42
|
deactivate(name: string): ExtensionInstance | undefined;
|
|
14
43
|
current(name: string): ExtensionInstance | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* An active extension's deployment config (validated against its manifest's schema, secrets
|
|
46
|
+
* included), passed back as `config` when the kernel calls its extension points (such as the
|
|
47
|
+
* login config of `identity-source@1`); undefined when it is not active. Never echo it in a
|
|
48
|
+
* response or a log.
|
|
49
|
+
*/
|
|
50
|
+
deploymentConfig(name: string): unknown;
|
|
15
51
|
all(): ExtensionInstance[];
|
|
52
|
+
/**
|
|
53
|
+
* 列出提供某能力(任意主版本)的所有插件及实现;`extensionPointName` 为能力名(不含主版本),
|
|
54
|
+
* 同一插件提供多个主版本时各占一项,由调用方按主版本选择。
|
|
55
|
+
* 每项带插件版本与部署配置摘要,供调用方做「插件升级 / 改配置即失效」的缓存键。
|
|
56
|
+
* 实时取自注册表:调用方不要缓存实现对象(插件撤销 / 升级后旧实现不再有效)。
|
|
57
|
+
*/
|
|
58
|
+
list(extensionPointName: string): ExtensionPointEntry[];
|
|
59
|
+
/** 已加载插件的清单(按加载顺序,即依赖拓扑序)。 */
|
|
60
|
+
manifests(): ExtensionManifest[];
|
|
16
61
|
/** 每次激活 / 摘下加一(给按版本缓存的派生视图用,如插件路由表)。 */
|
|
17
62
|
revision(): number;
|
|
18
63
|
/**
|
|
@@ -22,3 +67,6 @@ export declare class ExtensionRegistry {
|
|
|
22
67
|
onChange(listener: (name: string) => void): () => void;
|
|
23
68
|
private changed;
|
|
24
69
|
}
|
|
70
|
+
/** The one {@link ExtensionRegistry}: every domain that reads extension points imports this. */
|
|
71
|
+
export declare class ExtensionRegistryModule {
|
|
72
|
+
}
|
|
@@ -1,11 +1,44 @@
|
|
|
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 { parseExtensionPoint, } from "@capybara-hq/plugin-sdk";
|
|
8
|
+
import { Injectable, Module } from "@nestjs/common";
|
|
9
|
+
import { trackCalls } from "./inflight.js";
|
|
10
|
+
/** 内核消费的提供方能力:调用计入提供方实例的在途计数(撤销 / 升级时排空,C17)。 */
|
|
11
|
+
const TRACKED_EXTENSION_POINTS = {
|
|
12
|
+
connector: { sessions: ["open"] },
|
|
13
|
+
sandbox: {},
|
|
14
|
+
"model-provider": {},
|
|
15
|
+
};
|
|
1
16
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
17
|
+
* The extension instances in effect in this process (by extension name, one each). One provider
|
|
18
|
+
* per process (decision R6 of the Nest kernel spec): the extension host writes it, other domains
|
|
19
|
+
* read extension points and manifests from it, never from the host. The order is the order of
|
|
20
|
+
* first activation (the host loads in dependency order; a replaced instance keeps its place). It
|
|
21
|
+
* is only this process's view: the desired state across replicas is in PG (the install records),
|
|
22
|
+
* and each replica reconciles itself.
|
|
4
23
|
*/
|
|
5
|
-
|
|
24
|
+
let ExtensionRegistry = class ExtensionRegistry {
|
|
6
25
|
instances = new Map();
|
|
7
26
|
listeners = new Set();
|
|
8
27
|
rev = 0;
|
|
28
|
+
/** The config-declared extension names of this process (the startup config `extensions` list). */
|
|
29
|
+
declaredNames = new Map();
|
|
30
|
+
/**
|
|
31
|
+
* Records the config-declared extensions (the host at load; before it, the start sequence for
|
|
32
|
+
* the bootstrap step; the CLI from its inspection). Install records cannot take these names and
|
|
33
|
+
* the admin operations refuse them (C15).
|
|
34
|
+
*/
|
|
35
|
+
declare(names) {
|
|
36
|
+
this.declaredNames = new Map([...names].map((n) => [n, "config"]));
|
|
37
|
+
}
|
|
38
|
+
/** The config-declared extension names → source (see {@link declare}). */
|
|
39
|
+
declared() {
|
|
40
|
+
return new Map(this.declaredNames);
|
|
41
|
+
}
|
|
9
42
|
/** 原子替换:登记新实例,返回被替换的旧实例(由调用方 dispose)。 */
|
|
10
43
|
activate(inst) {
|
|
11
44
|
const old = this.instances.get(inst.name);
|
|
@@ -25,9 +58,50 @@ export class ExtensionRegistry {
|
|
|
25
58
|
current(name) {
|
|
26
59
|
return this.instances.get(name);
|
|
27
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* An active extension's deployment config (validated against its manifest's schema, secrets
|
|
63
|
+
* included), passed back as `config` when the kernel calls its extension points (such as the
|
|
64
|
+
* login config of `identity-source@1`); undefined when it is not active. Never echo it in a
|
|
65
|
+
* response or a log.
|
|
66
|
+
*/
|
|
67
|
+
deploymentConfig(name) {
|
|
68
|
+
return this.instances.get(name)?.config;
|
|
69
|
+
}
|
|
28
70
|
all() {
|
|
29
71
|
return [...this.instances.values()];
|
|
30
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* 列出提供某能力(任意主版本)的所有插件及实现;`extensionPointName` 为能力名(不含主版本),
|
|
75
|
+
* 同一插件提供多个主版本时各占一项,由调用方按主版本选择。
|
|
76
|
+
* 每项带插件版本与部署配置摘要,供调用方做「插件升级 / 改配置即失效」的缓存键。
|
|
77
|
+
* 实时取自注册表:调用方不要缓存实现对象(插件撤销 / 升级后旧实现不再有效)。
|
|
78
|
+
*/
|
|
79
|
+
list(extensionPointName) {
|
|
80
|
+
const out = [];
|
|
81
|
+
const tracked = TRACKED_EXTENSION_POINTS[extensionPointName];
|
|
82
|
+
for (const i of this.instances.values()) {
|
|
83
|
+
for (const [cap, impl] of i.provided) {
|
|
84
|
+
if (parseExtensionPoint(cap).name === extensionPointName) {
|
|
85
|
+
out.push({
|
|
86
|
+
plugin: i.name,
|
|
87
|
+
capability: cap,
|
|
88
|
+
// 内核消费的提供方调用计入实例在途计数:停用 / 升级时先排空、到时限中止(C17)
|
|
89
|
+
impl: tracked && typeof impl === "object" && impl !== null
|
|
90
|
+
? trackCalls(impl, i.inflight, tracked)
|
|
91
|
+
: impl,
|
|
92
|
+
version: i.version,
|
|
93
|
+
configHash: i.configHash,
|
|
94
|
+
inflight: i.inflight,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
/** 已加载插件的清单(按加载顺序,即依赖拓扑序)。 */
|
|
102
|
+
manifests() {
|
|
103
|
+
return this.all().map((i) => i.manifest);
|
|
104
|
+
}
|
|
31
105
|
/** 每次激活 / 摘下加一(给按版本缓存的派生视图用,如插件路由表)。 */
|
|
32
106
|
revision() {
|
|
33
107
|
return this.rev;
|
|
@@ -53,4 +127,15 @@ export class ExtensionRegistry {
|
|
|
53
127
|
}
|
|
54
128
|
}
|
|
55
129
|
}
|
|
56
|
-
}
|
|
130
|
+
};
|
|
131
|
+
ExtensionRegistry = __decorate([
|
|
132
|
+
Injectable()
|
|
133
|
+
], ExtensionRegistry);
|
|
134
|
+
export { ExtensionRegistry };
|
|
135
|
+
/** The one {@link ExtensionRegistry}: every domain that reads extension points imports this. */
|
|
136
|
+
let ExtensionRegistryModule = class ExtensionRegistryModule {
|
|
137
|
+
};
|
|
138
|
+
ExtensionRegistryModule = __decorate([
|
|
139
|
+
Module({ providers: [ExtensionRegistry], exports: [ExtensionRegistry] })
|
|
140
|
+
], ExtensionRegistryModule);
|
|
141
|
+
export { ExtensionRegistryModule };
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
2
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
3
|
+
import type { KernelLogger } from "../log.js";
|
|
2
4
|
/**
|
|
3
5
|
* Where an extension comes from (C15 / C13):
|
|
4
6
|
* - `config`: the startup config's `extensions` list (development mode and existing deployments),
|
|
@@ -33,15 +35,17 @@ export interface ExtensionLoadStatus {
|
|
|
33
35
|
/** This replica's extension load status (PG `extension_replica_status`; each replica writes only its own rows). */
|
|
34
36
|
export declare class ReplicaStatusStore {
|
|
35
37
|
private readonly db;
|
|
36
|
-
|
|
37
|
-
private readonly
|
|
38
|
-
private readonly redact;
|
|
38
|
+
/** Its `redact` masks `detail` before it is written (an error may carry a secret an extension put in it). */
|
|
39
|
+
private readonly log;
|
|
39
40
|
/** 本进程写过行(停机时才需要删;没写过时不碰数据库,例如启动在迁移前就失败)。 */
|
|
40
41
|
private wrote;
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
/** This process's replica id ({@link newReplicaId}; one store per process). */
|
|
43
|
+
readonly replicaId: string;
|
|
44
|
+
/** `http.replicaId` of the startup config (recorded with each row). */
|
|
45
|
+
private readonly httpReplicaId;
|
|
46
|
+
constructor(db: KernelDb, config: KernelConfigService,
|
|
47
|
+
/** Its `redact` masks `detail` before it is written (an error may carry a secret an extension put in it). */
|
|
48
|
+
log: Pick<KernelLogger, "redact">);
|
|
45
49
|
/** 打码后截断到 {@link MAX_DETAIL}。 */
|
|
46
50
|
private cleanDetail;
|
|
47
51
|
/** 写入(覆盖)本副本该插件的一行,心跳取当前时间。 */
|
|
@@ -1,6 +1,19 @@
|
|
|
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 { randomBytes } from "node:crypto";
|
|
2
11
|
import { hostname } from "node:os";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
3
13
|
import { sql } from "kysely";
|
|
14
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
15
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
16
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
4
17
|
/** 副本(进程)id:`<hostname>-<pid>-<6 位随机>`,每个进程唯一(`http.replicaId` 可能跨重启不变或多副本相同)。 */
|
|
5
18
|
export function newReplicaId() {
|
|
6
19
|
return `${hostname()}-${process.pid}-${randomBytes(3).toString("hex")}`;
|
|
@@ -8,25 +21,26 @@ export function newReplicaId() {
|
|
|
8
21
|
/** detail 的长度上限(报错信息可能很长)。 */
|
|
9
22
|
const MAX_DETAIL = 2000;
|
|
10
23
|
/** This replica's extension load status (PG `extension_replica_status`; each replica writes only its own rows). */
|
|
11
|
-
|
|
24
|
+
let ReplicaStatusStore = class ReplicaStatusStore {
|
|
12
25
|
db;
|
|
13
|
-
|
|
14
|
-
httpReplicaId;
|
|
15
|
-
redact;
|
|
26
|
+
log;
|
|
16
27
|
/** 本进程写过行(停机时才需要删;没写过时不碰数据库,例如启动在迁移前就失败)。 */
|
|
17
28
|
wrote = false;
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
29
|
+
/** This process's replica id ({@link newReplicaId}; one store per process). */
|
|
30
|
+
replicaId = newReplicaId();
|
|
31
|
+
/** `http.replicaId` of the startup config (recorded with each row). */
|
|
32
|
+
httpReplicaId;
|
|
33
|
+
constructor(db, config,
|
|
34
|
+
/** Its `redact` masks `detail` before it is written (an error may carry a secret an extension put in it). */
|
|
35
|
+
log) {
|
|
22
36
|
this.db = db;
|
|
23
|
-
this.
|
|
24
|
-
|
|
25
|
-
this.
|
|
37
|
+
this.log = log;
|
|
38
|
+
const id = config.get().http.replicaId;
|
|
39
|
+
this.httpReplicaId = id === undefined ? undefined : String(id);
|
|
26
40
|
}
|
|
27
41
|
/** 打码后截断到 {@link MAX_DETAIL}。 */
|
|
28
42
|
cleanDetail(detail) {
|
|
29
|
-
return this.redact(detail).slice(0, MAX_DETAIL);
|
|
43
|
+
return this.log.redact(detail).slice(0, MAX_DETAIL);
|
|
30
44
|
}
|
|
31
45
|
/** 写入(覆盖)本副本该插件的一行,心跳取当前时间。 */
|
|
32
46
|
async write(s) {
|
|
@@ -117,4 +131,11 @@ export class ReplicaStatusStore {
|
|
|
117
131
|
.where("replica_id", "=", this.replicaId)
|
|
118
132
|
.execute();
|
|
119
133
|
}
|
|
120
|
-
}
|
|
134
|
+
};
|
|
135
|
+
ReplicaStatusStore = __decorate([
|
|
136
|
+
Injectable(),
|
|
137
|
+
__param(0, Inject(KernelDb)),
|
|
138
|
+
__param(1, Inject(KernelConfigService)),
|
|
139
|
+
__param(2, Inject(KERNEL_LOGGER))
|
|
140
|
+
], ReplicaStatusStore);
|
|
141
|
+
export { ReplicaStatusStore };
|
|
@@ -0,0 +1,22 @@
|
|
|
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 { ConversationsModule } from "../conversations/conversations.module.js";
|
|
9
|
+
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
10
|
+
import { StorageModule } from "../storage/storage.module.js";
|
|
11
|
+
import { PreviewerRegistry } from "./previewers.js";
|
|
12
|
+
/** File previewers (`file-preview@1`): which previewers take a file, the org's order, rendering. */
|
|
13
|
+
let FilesModule = class FilesModule {
|
|
14
|
+
};
|
|
15
|
+
FilesModule = __decorate([
|
|
16
|
+
Module({
|
|
17
|
+
imports: [ExtensionsModule, ConversationsModule, StorageModule],
|
|
18
|
+
providers: [PreviewerRegistry],
|
|
19
|
+
exports: [PreviewerRegistry],
|
|
20
|
+
})
|
|
21
|
+
], FilesModule);
|
|
22
|
+
export { FilesModule };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { type Principal } from "../identity/principal.js";
|
|
3
3
|
import { type OrgContext } from "../orgs/org.guard.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type OrgPreviewerItem, type PreviewerItem, PreviewerRegistry } from "./previewers.js";
|
|
5
5
|
declare const PreviewQuery: z.ZodObject<{
|
|
6
6
|
locale: z.ZodDefault<z.ZodEnum<{
|
|
7
7
|
en: "en";
|
|
@@ -15,6 +15,11 @@ declare const OrderBody: z.ZodObject<{
|
|
|
15
15
|
disabled: z.ZodDefault<z.ZodBoolean>;
|
|
16
16
|
}, z.core.$strip>>;
|
|
17
17
|
}, z.core.$strip>;
|
|
18
|
+
/** The previewer named in a preview path (the other path parameters are read as they are). */
|
|
19
|
+
declare const PreviewParams: z.ZodObject<{
|
|
20
|
+
plugin: z.ZodString;
|
|
21
|
+
previewerId: z.ZodString;
|
|
22
|
+
}, z.core.$strip>;
|
|
18
23
|
/**
|
|
19
24
|
* `file-preview@1` (UI refresh B Task 11):
|
|
20
25
|
* - `GET /api/v1/orgs/:orgId/conversations/:id/files/:fileId/previewers` → `{ previewers }`: the
|
|
@@ -33,7 +38,7 @@ export declare class FilePreviewersController {
|
|
|
33
38
|
forFile(principal: Principal, org: OrgContext, id: string, fileId: string): Promise<{
|
|
34
39
|
previewers: PreviewerItem[];
|
|
35
40
|
}>;
|
|
36
|
-
preview(principal: Principal, org: OrgContext, id: string, fileId: string, plugin
|
|
41
|
+
preview(principal: Principal, org: OrgContext, id: string, fileId: string, { plugin, previewerId }: z.infer<typeof PreviewParams>, q: z.infer<typeof PreviewQuery>): Promise<{
|
|
37
42
|
view: import("@capybara-hq/plugin-sdk").UiView;
|
|
38
43
|
}>;
|
|
39
44
|
list(org: OrgContext): Promise<{
|
|
@@ -7,17 +7,26 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { Controller, Get, Header, Inject, Param, Put } from "@nestjs/common";
|
|
11
11
|
import { z } from "zod";
|
|
12
|
-
import { FILE_PREVIEWERS } from "../http/tokens.js";
|
|
13
|
-
import { ZodPipe } from "../http/zod.pipe.js";
|
|
14
12
|
import { CurrentPrincipal, requireUser } from "../identity/principal.js";
|
|
13
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
14
|
+
import { ZBody, ZParam, ZQuery } from "../infra/validation/zod-params.js";
|
|
15
15
|
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
16
|
+
import { PreviewerRegistry } from "./previewers.js";
|
|
16
17
|
const Id = z.string().min(1).max(100);
|
|
17
18
|
const PreviewQuery = z.object({ locale: z.enum(["zh", "en"]).default("en") });
|
|
18
19
|
const OrderBody = z.object({
|
|
19
20
|
items: z.array(z.object({ plugin: Id, id: Id, disabled: z.boolean().default(false) })).max(500),
|
|
20
21
|
});
|
|
22
|
+
/** The previewer named in a preview path (the other path parameters are read as they are). */
|
|
23
|
+
const PreviewParams = z.object({ plugin: Id, previewerId: Id });
|
|
24
|
+
class FilePreviewQueryDto extends createZodDto(PreviewQuery, "FilePreviewQuery") {
|
|
25
|
+
}
|
|
26
|
+
class FilePreviewParamsDto extends createZodDto(PreviewParams, "FilePreviewParams") {
|
|
27
|
+
}
|
|
28
|
+
class FilePreviewersOrderBodyDto extends createZodDto(OrderBody, "FilePreviewersOrderBody") {
|
|
29
|
+
}
|
|
21
30
|
/**
|
|
22
31
|
* `file-preview@1` (UI refresh B Task 11):
|
|
23
32
|
* - `GET /api/v1/orgs/:orgId/conversations/:id/files/:fileId/previewers` → `{ previewers }`: the
|
|
@@ -39,7 +48,7 @@ let FilePreviewersController = class FilePreviewersController {
|
|
|
39
48
|
const p = requireUser(principal);
|
|
40
49
|
return { previewers: await this.previewers.forFile(org.orgId, id, p.account.id, fileId) };
|
|
41
50
|
}
|
|
42
|
-
async preview(principal, org, id, fileId, plugin, previewerId, q) {
|
|
51
|
+
async preview(principal, org, id, fileId, { plugin, previewerId }, q) {
|
|
43
52
|
const p = requireUser(principal);
|
|
44
53
|
const view = await this.previewers.render({
|
|
45
54
|
orgId: org.orgId,
|
|
@@ -82,9 +91,8 @@ __decorate([
|
|
|
82
91
|
__param(1, CurrentOrg()),
|
|
83
92
|
__param(2, Param("id")),
|
|
84
93
|
__param(3, Param("fileId")),
|
|
85
|
-
__param(4,
|
|
86
|
-
__param(5,
|
|
87
|
-
__param(6, Query(new ZodPipe(PreviewQuery)))
|
|
94
|
+
__param(4, ZParam(FilePreviewParamsDto)),
|
|
95
|
+
__param(5, ZQuery(FilePreviewQueryDto))
|
|
88
96
|
], FilePreviewersController.prototype, "preview", null);
|
|
89
97
|
__decorate([
|
|
90
98
|
Get("file-previewers"),
|
|
@@ -96,10 +104,10 @@ __decorate([
|
|
|
96
104
|
OrgAction("org.extensions.manage"),
|
|
97
105
|
__param(0, CurrentOrg()),
|
|
98
106
|
__param(1, CurrentPrincipal()),
|
|
99
|
-
__param(2,
|
|
107
|
+
__param(2, ZBody(FilePreviewersOrderBodyDto))
|
|
100
108
|
], FilePreviewersController.prototype, "put", null);
|
|
101
109
|
FilePreviewersController = __decorate([
|
|
102
110
|
Controller("api/v1/orgs/:orgId"),
|
|
103
|
-
__param(0, Inject(
|
|
111
|
+
__param(0, Inject(PreviewerRegistry))
|
|
104
112
|
], FilePreviewersController);
|
|
105
113
|
export { FilePreviewersController };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type FilePreviewer, type Logger, type UiView } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
2
|
+
import { ConversationFiles } from "../conversations/files.js";
|
|
3
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
4
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
6
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
6
7
|
/** Time limit of a previewer's render (UI refresh spec §5.3: 10 s on the conversation page). */
|
|
7
8
|
export declare const FILE_PREVIEW_TIMEOUT_MS = 10000;
|
|
8
9
|
/** A previewer that takes a file, as listed for the conversation page. */
|
|
@@ -24,29 +25,21 @@ export interface OrgPreviewerItem extends PreviewerItem {
|
|
|
24
25
|
position: number;
|
|
25
26
|
disabled: boolean;
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
host: Pick<ExtensionHost, "list">;
|
|
30
|
-
/** Extensions enabled in the org (queried every time). */
|
|
31
|
-
enabledPlugins(orgId: string): Promise<Set<string>>;
|
|
32
|
-
files: Pick<ConversationFiles, "file">;
|
|
33
|
-
storage: Pick<StorageService, "kernel">;
|
|
34
|
-
log: Pick<Logger, "warn">;
|
|
35
|
-
/** Default {@link FILE_PREVIEW_TIMEOUT_MS}. */
|
|
36
|
-
timeoutMs?: number;
|
|
37
|
-
}
|
|
28
|
+
/** Optional provider: a view previewer's render time limit (ms) instead of {@link FILE_PREVIEW_TIMEOUT_MS} (tests). */
|
|
29
|
+
export declare const FILE_PREVIEW_TIMEOUT: unique symbol;
|
|
38
30
|
/**
|
|
39
31
|
* `file-preview@1` (UI refresh spec §5.8): which previewers take a file, in the org's order
|
|
40
32
|
* (`capybara.file_previewers` rows first by position, then the rest in provider order; disabled ones
|
|
41
33
|
* dropped; only extensions enabled in the org), and rendering a view previewer through a read grant
|
|
42
34
|
* for that one file (valid only during the call, capped at the previewer's `maxBytes`; the extension
|
|
43
35
|
* never gets a storage key or URL). Providers are validated when they are provided (`ctx.provide`).
|
|
44
|
-
*
|
|
36
|
+
* No state across requests.
|
|
45
37
|
*/
|
|
46
38
|
export declare class PreviewerRegistry {
|
|
47
|
-
|
|
39
|
+
readonly txHost: TransactionHost;
|
|
48
40
|
private readonly timeoutMs;
|
|
49
|
-
|
|
41
|
+
private readonly d;
|
|
42
|
+
constructor(kdb: Pick<KernelDb, "db">, host: Pick<ExtensionHost, "list" | "enabledPlugins">, files: Pick<ConversationFiles, "file">, storage: Pick<StorageService, "kernel">, log: Pick<Logger, "warn">, txHost: TransactionHost, timeoutMs?: number);
|
|
50
43
|
/** Every previewer loaded on this replica, in provider order (load order, then list order). */
|
|
51
44
|
private loaded;
|
|
52
45
|
/** The org's previewers (enabled extensions only) in its order, disabled ones included. */
|
|
@@ -68,6 +61,8 @@ export declare class PreviewerRegistry {
|
|
|
68
61
|
accountId?: string;
|
|
69
62
|
tokenId?: string;
|
|
70
63
|
}): Promise<OrgPreviewerItem[]>;
|
|
64
|
+
/** Replaces the org's rows of the previewers this replica knows, in one transaction. */
|
|
65
|
+
private putIn;
|
|
71
66
|
/** Previewers that take this file (viewer must read the conversation), in the org's order. */
|
|
72
67
|
forFile(orgId: string, conversationId: string, viewer: string, fileId: string): Promise<PreviewerItem[]>;
|
|
73
68
|
private accepting;
|
package/dist/files/previewers.js
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
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 { FILE_PREVIEW_EXTENSION_POINT, previewerAccepts, validateUiView, } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
2
12
|
import { sql } from "kysely";
|
|
13
|
+
import { ConversationFiles } from "../conversations/files.js";
|
|
3
14
|
import { ApiError } from "../errors.js";
|
|
15
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
4
16
|
import { audit } from "../identity/audit.js";
|
|
5
|
-
import {
|
|
17
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
18
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
19
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
20
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
21
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
22
|
+
import { callExtension } from "../ui/call-extension.js";
|
|
6
23
|
/** Time limit of a previewer's render (UI refresh spec §5.3: 10 s on the conversation page). */
|
|
7
24
|
export const FILE_PREVIEW_TIMEOUT_MS = 10_000;
|
|
8
25
|
const notFound = () => new ApiError("ui.not_found", "Previewer not found");
|
|
@@ -40,20 +57,33 @@ async function readAtMost(body, max) {
|
|
|
40
57
|
}
|
|
41
58
|
return out;
|
|
42
59
|
}
|
|
60
|
+
/** Optional provider: a view previewer's render time limit (ms) instead of {@link FILE_PREVIEW_TIMEOUT_MS} (tests). */
|
|
61
|
+
export const FILE_PREVIEW_TIMEOUT = Symbol("FILE_PREVIEW_TIMEOUT");
|
|
43
62
|
/**
|
|
44
63
|
* `file-preview@1` (UI refresh spec §5.8): which previewers take a file, in the org's order
|
|
45
64
|
* (`capybara.file_previewers` rows first by position, then the rest in provider order; disabled ones
|
|
46
65
|
* dropped; only extensions enabled in the org), and rendering a view previewer through a read grant
|
|
47
66
|
* for that one file (valid only during the call, capped at the previewer's `maxBytes`; the extension
|
|
48
67
|
* never gets a storage key or URL). Providers are validated when they are provided (`ctx.provide`).
|
|
49
|
-
*
|
|
68
|
+
* No state across requests.
|
|
50
69
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
70
|
+
let PreviewerRegistry = class PreviewerRegistry {
|
|
71
|
+
txHost;
|
|
53
72
|
timeoutMs;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.
|
|
73
|
+
d;
|
|
74
|
+
constructor(kdb, host, files, storage, log, txHost, timeoutMs = FILE_PREVIEW_TIMEOUT_MS) {
|
|
75
|
+
this.txHost = txHost;
|
|
76
|
+
this.timeoutMs = timeoutMs;
|
|
77
|
+
this.d = {
|
|
78
|
+
get db() {
|
|
79
|
+
return kdb.db;
|
|
80
|
+
},
|
|
81
|
+
host,
|
|
82
|
+
enabledPlugins: (orgId) => host.enabledPlugins(orgId),
|
|
83
|
+
files,
|
|
84
|
+
storage,
|
|
85
|
+
log,
|
|
86
|
+
};
|
|
57
87
|
}
|
|
58
88
|
/** Every previewer loaded on this replica, in provider order (load order, then list order). */
|
|
59
89
|
loaded() {
|
|
@@ -119,36 +149,38 @@ export class PreviewerRegistry {
|
|
|
119
149
|
}
|
|
120
150
|
seen.add(k);
|
|
121
151
|
}
|
|
122
|
-
await this.
|
|
123
|
-
if (known.size > 0) {
|
|
124
|
-
await trx
|
|
125
|
-
.deleteFrom("file_previewers")
|
|
126
|
-
.where("org_id", "=", orgId)
|
|
127
|
-
.where(sql `plugin || '/' || previewer_id`, "in", [...known])
|
|
128
|
-
.execute();
|
|
129
|
-
}
|
|
130
|
-
if (items.length > 0) {
|
|
131
|
-
await trx
|
|
132
|
-
.insertInto("file_previewers")
|
|
133
|
-
.values(items.map((i, position) => ({
|
|
134
|
-
org_id: orgId,
|
|
135
|
-
plugin: i.plugin,
|
|
136
|
-
previewer_id: i.id,
|
|
137
|
-
position,
|
|
138
|
-
disabled: i.disabled,
|
|
139
|
-
})))
|
|
140
|
-
.execute();
|
|
141
|
-
}
|
|
142
|
-
await audit(trx, {
|
|
143
|
-
...(actor.accountId !== undefined && { actorAccountId: actor.accountId }),
|
|
144
|
-
...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
|
|
145
|
-
orgId,
|
|
146
|
-
action: "org.file_previewers.updated",
|
|
147
|
-
detail: { items },
|
|
148
|
-
});
|
|
149
|
-
});
|
|
152
|
+
await this.putIn(orgId, items, known, actor);
|
|
150
153
|
return this.list(orgId);
|
|
151
154
|
}
|
|
155
|
+
/** Replaces the org's rows of the previewers this replica knows, in one transaction. */
|
|
156
|
+
async putIn(orgId, items, known, actor) {
|
|
157
|
+
if (known.size > 0) {
|
|
158
|
+
await this.d.db
|
|
159
|
+
.deleteFrom("file_previewers")
|
|
160
|
+
.where("org_id", "=", orgId)
|
|
161
|
+
.where(sql `plugin || '/' || previewer_id`, "in", [...known])
|
|
162
|
+
.execute();
|
|
163
|
+
}
|
|
164
|
+
if (items.length > 0) {
|
|
165
|
+
await this.d.db
|
|
166
|
+
.insertInto("file_previewers")
|
|
167
|
+
.values(items.map((i, position) => ({
|
|
168
|
+
org_id: orgId,
|
|
169
|
+
plugin: i.plugin,
|
|
170
|
+
previewer_id: i.id,
|
|
171
|
+
position,
|
|
172
|
+
disabled: i.disabled,
|
|
173
|
+
})))
|
|
174
|
+
.execute();
|
|
175
|
+
}
|
|
176
|
+
await audit(this.d.db, {
|
|
177
|
+
...(actor.accountId !== undefined && { actorAccountId: actor.accountId }),
|
|
178
|
+
...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
|
|
179
|
+
orgId,
|
|
180
|
+
action: "org.file_previewers.updated",
|
|
181
|
+
detail: { items },
|
|
182
|
+
});
|
|
183
|
+
}
|
|
152
184
|
/** Previewers that take this file (viewer must read the conversation), in the org's order. */
|
|
153
185
|
async forFile(orgId, conversationId, viewer, fileId) {
|
|
154
186
|
const file = await this.d.files.file(orgId, conversationId, viewer, fileId);
|
|
@@ -247,4 +279,19 @@ export class PreviewerRegistry {
|
|
|
247
279
|
const file = await this.d.files.file(t.orgId, t.conversationId, t.accountId, t.fileId);
|
|
248
280
|
return (await this.accepting(t.orgId, file)).some((l) => l.plugin === t.plugin && l.previewer.embed === t.contribution);
|
|
249
281
|
}
|
|
250
|
-
}
|
|
282
|
+
};
|
|
283
|
+
__decorate([
|
|
284
|
+
Transactional({ propagation: "requires_new" })
|
|
285
|
+
], PreviewerRegistry.prototype, "putIn", null);
|
|
286
|
+
PreviewerRegistry = __decorate([
|
|
287
|
+
Injectable(),
|
|
288
|
+
__param(0, Inject(KernelDb)),
|
|
289
|
+
__param(1, Inject(ExtensionHost)),
|
|
290
|
+
__param(2, Inject(ConversationFiles)),
|
|
291
|
+
__param(3, Inject(StorageService)),
|
|
292
|
+
__param(4, Inject(KERNEL_LOGGER)),
|
|
293
|
+
__param(5, Inject(TransactionHost)),
|
|
294
|
+
__param(6, Optional()),
|
|
295
|
+
__param(6, Inject(FILE_PREVIEW_TIMEOUT))
|
|
296
|
+
], PreviewerRegistry);
|
|
297
|
+
export { PreviewerRegistry };
|