@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,8 +1,10 @@
|
|
|
1
1
|
import type { LocalizedName } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import {
|
|
3
|
-
import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
3
|
import { ApiError } from "../errors.js";
|
|
5
|
-
|
|
4
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
5
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
6
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
7
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
6
8
|
export type CatalogRequestStage = "org" | "deployment";
|
|
7
9
|
export type CatalogRequestStatus = "pending" | "approved" | "rejected" | "cancelled";
|
|
8
10
|
export type CatalogDecision = "approve" | "reject";
|
|
@@ -41,13 +43,13 @@ export declare const CATALOG_REQUESTS_LIST_MAX = 200;
|
|
|
41
43
|
* installed plugin only): the dependency's own item must still be live and not disabled, and the
|
|
42
44
|
* approval is judged by `approvedBy`.
|
|
43
45
|
*/
|
|
44
|
-
export declare function assertItemInstallable(t:
|
|
46
|
+
export declare function assertItemInstallable(t: KernelSchemaDb, orgId: string, itemId: string, approvedBy?: string): Promise<void>;
|
|
45
47
|
/**
|
|
46
48
|
* The extensions among `plugins` whose own catalog item (the non-deleted item with the same name) is
|
|
47
49
|
* disabled (FOR SHARE: exclusive with policy changes). A disabled item is a master switch: no path
|
|
48
50
|
* (direct enabling, its item, another plugin) can newly enable its extension (Ruling M-5).
|
|
49
51
|
*/
|
|
50
|
-
export declare function disabledPluginItems(db:
|
|
52
|
+
export declare function disabledPluginItems(db: KernelSchemaDb, plugins: readonly string[]): Promise<string[]>;
|
|
51
53
|
/**
|
|
52
54
|
* Throws `catalog.item_disabled` when a plugin's own catalog item is disabled (the message names
|
|
53
55
|
* the plugin).
|
|
@@ -62,17 +64,17 @@ export declare function pluginItemDisabled(names: readonly string[]): ApiError;
|
|
|
62
64
|
* as sources (an enterprise admin deleting an item withdraws its constraint). No source (not
|
|
63
65
|
* installed through the catalog) -> not bound by catalog policy.
|
|
64
66
|
*/
|
|
65
|
-
export declare function assertPluginSourcesInstallable(t:
|
|
67
|
+
export declare function assertPluginSourcesInstallable(t: KernelSchemaDb, orgId: string, plugin: string): Promise<void>;
|
|
66
68
|
/** 审计里带上 PAT(个人令牌发起时)。 */
|
|
67
69
|
export interface RequestActorOpts {
|
|
68
70
|
actorTokenId?: string;
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
71
|
-
* Cancels catalog requests still pending in the caller's transaction (
|
|
72
|
-
* deleted), status `cancelled` (the decider is the actor). Each one audits
|
|
73
|
+
* Cancels catalog requests still pending in the caller's transaction (`db` is its handle; when the
|
|
74
|
+
* item or the org is deleted), status `cancelled` (the decider is the actor). Each one audits
|
|
73
75
|
* `catalog.request_cancelled` (with the reason). Returns how many were cancelled.
|
|
74
76
|
*/
|
|
75
|
-
export declare function cancelPendingRequests(
|
|
77
|
+
export declare function cancelPendingRequests(db: KernelSchemaDb, where: {
|
|
76
78
|
itemId: string;
|
|
77
79
|
} | {
|
|
78
80
|
orgId: string;
|
|
@@ -90,8 +92,16 @@ export declare function cancelPendingRequests(t: Trx, where: {
|
|
|
90
92
|
* org row lock, in order). No in-process state.
|
|
91
93
|
*/
|
|
92
94
|
export declare class CatalogRequestsService {
|
|
93
|
-
private readonly
|
|
94
|
-
|
|
95
|
+
private readonly kdb;
|
|
96
|
+
/** The org row and enterprise admin locks: both join the caller's transaction. */
|
|
97
|
+
private readonly orgLock;
|
|
98
|
+
private readonly adminLock;
|
|
99
|
+
readonly txHost: TransactionHost;
|
|
100
|
+
constructor(kdb: KernelDb,
|
|
101
|
+
/** The org row and enterprise admin locks: both join the caller's transaction. */
|
|
102
|
+
orgLock: OrgLock, adminLock: EnterpriseAdminLock, txHost: TransactionHost);
|
|
103
|
+
/** The kernel-schema handle of the current context (the transaction, else the pool). */
|
|
104
|
+
private get db();
|
|
95
105
|
/**
|
|
96
106
|
* A member request (`catalog.request`, re-checked inside the org row lock). Item missing /
|
|
97
107
|
* deleted -> `catalog.item_not_found`; disabled -> org admins get `catalog.item_disabled`,
|
|
@@ -105,6 +115,7 @@ export declare class CatalogRequestsService {
|
|
|
105
115
|
request: CatalogRequestView;
|
|
106
116
|
created: boolean;
|
|
107
117
|
}>;
|
|
118
|
+
private writeRequest;
|
|
108
119
|
private pendingRow;
|
|
109
120
|
/**
|
|
110
121
|
* An org admin installing a needs_approval item without a grant: in the caller's transaction (the
|
|
@@ -112,7 +123,7 @@ export declare class CatalogRequestsService {
|
|
|
112
123
|
* existing pending request is moved to deployment (a member request goes to the enterprise admins
|
|
113
124
|
* with it). Returns the request id. Audits `catalog.requested`.
|
|
114
125
|
*/
|
|
115
|
-
requestDeployment(
|
|
126
|
+
requestDeployment(orgId: string, actor: string, item: {
|
|
116
127
|
id: string;
|
|
117
128
|
name: string;
|
|
118
129
|
}, version: string | null, opts?: RequestActorOpts): Promise<string>;
|
|
@@ -121,7 +132,7 @@ export declare class CatalogRequestsService {
|
|
|
121
132
|
* 申请——条目之后改成 allow 再装的就不会一直挂着)标为 approved(安装者即决定人),收件箱与企业管理员列表随之清空。
|
|
122
133
|
* 在调用方事务里执行。
|
|
123
134
|
*/
|
|
124
|
-
resolveByInstall(
|
|
135
|
+
resolveByInstall(orgId: string, itemId: string, actor: string, opts?: RequestActorOpts): Promise<void>;
|
|
125
136
|
/**
|
|
126
137
|
* An org admin decides a member request (`catalog.decide`, re-checked inside the org row lock;
|
|
127
138
|
* the request row FOR UPDATE). Not this org's request -> `catalog.request_not_found`; already
|
|
@@ -130,6 +141,7 @@ export declare class CatalogRequestsService {
|
|
|
130
141
|
* deployment (still pending); otherwise approved. Audits `catalog.request_decided`.
|
|
131
142
|
*/
|
|
132
143
|
decideOrg(orgId: string, actor: string, requestId: string, decision: CatalogDecision, opts?: RequestActorOpts): Promise<CatalogRequestView>;
|
|
144
|
+
private writeDecideOrg;
|
|
133
145
|
/**
|
|
134
146
|
* An enterprise admin decides a stage deployment request (re-checked inside the enterprise admin
|
|
135
147
|
* lock; the request row FOR UPDATE). Missing or still at the org stage ->
|
|
@@ -139,6 +151,7 @@ export declare class CatalogRequestsService {
|
|
|
139
151
|
* `catalog.request_decided` (with orgId).
|
|
140
152
|
*/
|
|
141
153
|
decideDeployment(actor: string, requestId: string, decision: CatalogDecision, opts?: RequestActorOpts): Promise<CatalogRequestView>;
|
|
154
|
+
private writeDecideDeployment;
|
|
142
155
|
/** 企业管理员的申请列表(stage deployment;`status` 缺省 pending),新的在前。 */
|
|
143
156
|
listDeployment(q?: {
|
|
144
157
|
status?: CatalogRequestStatus;
|
|
@@ -156,7 +169,6 @@ export declare class CatalogRequestsService {
|
|
|
156
169
|
stage: CatalogRequestStage;
|
|
157
170
|
status: string;
|
|
158
171
|
}>>;
|
|
159
|
-
view(
|
|
172
|
+
view(id: string): Promise<CatalogRequestView>;
|
|
160
173
|
private baseQuery;
|
|
161
174
|
}
|
|
162
|
-
export {};
|
|
@@ -1,9 +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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
1
10
|
import { randomUUID } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
12
|
import { sql } from "kysely";
|
|
3
13
|
import { ApiError } from "../errors.js";
|
|
4
14
|
import { audit } from "../identity/audit.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
15
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
16
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
17
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
18
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
19
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
7
20
|
import { roleAtLeast } from "../orgs/roles.js";
|
|
8
21
|
/** 申请列表一次最多返回的条数。 */
|
|
9
22
|
export const CATALOG_REQUESTS_LIST_MAX = 200;
|
|
@@ -107,12 +120,12 @@ export async function assertPluginSourcesInstallable(t, orgId, plugin) {
|
|
|
107
120
|
}
|
|
108
121
|
}
|
|
109
122
|
/**
|
|
110
|
-
* Cancels catalog requests still pending in the caller's transaction (
|
|
111
|
-
* deleted), status `cancelled` (the decider is the actor). Each one audits
|
|
123
|
+
* Cancels catalog requests still pending in the caller's transaction (`db` is its handle; when the
|
|
124
|
+
* item or the org is deleted), status `cancelled` (the decider is the actor). Each one audits
|
|
112
125
|
* `catalog.request_cancelled` (with the reason). Returns how many were cancelled.
|
|
113
126
|
*/
|
|
114
|
-
export async function cancelPendingRequests(
|
|
115
|
-
let q =
|
|
127
|
+
export async function cancelPendingRequests(db, where, actor, reason, opts = {}) {
|
|
128
|
+
let q = db
|
|
116
129
|
.updateTable("catalog_requests")
|
|
117
130
|
.set({ status: "cancelled", decided_by: actor, decided_at: sql `now()` })
|
|
118
131
|
.where("status", "=", "pending");
|
|
@@ -120,7 +133,7 @@ export async function cancelPendingRequests(t, where, actor, reason, opts = {})
|
|
|
120
133
|
"itemId" in where ? q.where("item_id", "=", where.itemId) : q.where("org_id", "=", where.orgId);
|
|
121
134
|
const rows = await q.returning(["id", "org_id", "item_id", "stage"]).execute();
|
|
122
135
|
for (const r of rows) {
|
|
123
|
-
await audit(
|
|
136
|
+
await audit(db, {
|
|
124
137
|
actorAccountId: actor,
|
|
125
138
|
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
126
139
|
orgId: r.org_id,
|
|
@@ -143,10 +156,22 @@ export async function cancelPendingRequests(t, where, actor, reason, opts = {})
|
|
|
143
156
|
* One pending request per org and item (partial unique index; org-side writes all run inside the
|
|
144
157
|
* org row lock, in order). No in-process state.
|
|
145
158
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
159
|
+
let CatalogRequestsService = class CatalogRequestsService {
|
|
160
|
+
kdb;
|
|
161
|
+
orgLock;
|
|
162
|
+
adminLock;
|
|
163
|
+
txHost;
|
|
164
|
+
constructor(kdb,
|
|
165
|
+
/** The org row and enterprise admin locks: both join the caller's transaction. */
|
|
166
|
+
orgLock, adminLock, txHost) {
|
|
167
|
+
this.kdb = kdb;
|
|
168
|
+
this.orgLock = orgLock;
|
|
169
|
+
this.adminLock = adminLock;
|
|
170
|
+
this.txHost = txHost;
|
|
171
|
+
}
|
|
172
|
+
/** The kernel-schema handle of the current context (the transaction, else the pool). */
|
|
173
|
+
get db() {
|
|
174
|
+
return this.kdb.db;
|
|
150
175
|
}
|
|
151
176
|
/**
|
|
152
177
|
* A member request (`catalog.request`, re-checked inside the org row lock). Item missing /
|
|
@@ -155,45 +180,47 @@ export class CatalogRequestsService {
|
|
|
155
180
|
* request is returned as is (`created: false`), no new one. Audits `catalog.requested`.
|
|
156
181
|
*/
|
|
157
182
|
async request(orgId, actor, itemId, input, opts = {}) {
|
|
158
|
-
const r = await this.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
183
|
+
const r = await this.writeRequest(orgId, actor, itemId, input, opts);
|
|
184
|
+
return { request: await this.view(r.id), created: r.created };
|
|
185
|
+
}
|
|
186
|
+
async writeRequest(orgId, actor, itemId, input, opts) {
|
|
187
|
+
const t = this.db;
|
|
188
|
+
const { role } = await this.orgLock.lockAndAuthorize(orgId, actor, "catalog.request");
|
|
189
|
+
const item = await lockItem(t, itemId);
|
|
190
|
+
if (!item || item.deleted_at !== null)
|
|
191
|
+
throw itemNotFound();
|
|
192
|
+
// 成员看不到 disabled 的条目(列表、详情、图标一致):同样答 not found,不暴露条目存在
|
|
193
|
+
if (item.policy === "disabled") {
|
|
194
|
+
throw roleAtLeast(role, "admin") ? itemDisabled() : itemNotFound();
|
|
195
|
+
}
|
|
196
|
+
const existing = await this.pendingRow(orgId, itemId);
|
|
197
|
+
if (existing)
|
|
198
|
+
return { id: existing.id, created: false };
|
|
199
|
+
const id = randomUUID();
|
|
200
|
+
await t
|
|
201
|
+
.insertInto("catalog_requests")
|
|
202
|
+
.values({
|
|
203
|
+
id,
|
|
204
|
+
org_id: orgId,
|
|
205
|
+
item_id: itemId,
|
|
206
|
+
version: input.version ?? null,
|
|
207
|
+
stage: "org",
|
|
208
|
+
requested_by: actor,
|
|
209
|
+
note: input.note ?? "",
|
|
210
|
+
})
|
|
211
|
+
.execute();
|
|
212
|
+
await audit(t, {
|
|
213
|
+
actorAccountId: actor,
|
|
214
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
215
|
+
orgId,
|
|
216
|
+
action: "catalog.requested",
|
|
217
|
+
target: id,
|
|
218
|
+
detail: { itemId, name: item.name, stage: "org" },
|
|
192
219
|
});
|
|
193
|
-
return {
|
|
220
|
+
return { id, created: true };
|
|
194
221
|
}
|
|
195
|
-
pendingRow(
|
|
196
|
-
return
|
|
222
|
+
pendingRow(orgId, itemId) {
|
|
223
|
+
return this.db
|
|
197
224
|
.selectFrom("catalog_requests")
|
|
198
225
|
.select(["id", "stage"])
|
|
199
226
|
.where("org_id", "=", orgId)
|
|
@@ -207,8 +234,9 @@ export class CatalogRequestsService {
|
|
|
207
234
|
* existing pending request is moved to deployment (a member request goes to the enterprise admins
|
|
208
235
|
* with it). Returns the request id. Audits `catalog.requested`.
|
|
209
236
|
*/
|
|
210
|
-
async requestDeployment(
|
|
211
|
-
const
|
|
237
|
+
async requestDeployment(orgId, actor, item, version, opts = {}) {
|
|
238
|
+
const t = this.db;
|
|
239
|
+
const existing = await this.pendingRow(orgId, item.id);
|
|
212
240
|
if (existing) {
|
|
213
241
|
if (existing.stage === "org") {
|
|
214
242
|
await t
|
|
@@ -254,7 +282,8 @@ export class CatalogRequestsService {
|
|
|
254
282
|
* 申请——条目之后改成 allow 再装的就不会一直挂着)标为 approved(安装者即决定人),收件箱与企业管理员列表随之清空。
|
|
255
283
|
* 在调用方事务里执行。
|
|
256
284
|
*/
|
|
257
|
-
async resolveByInstall(
|
|
285
|
+
async resolveByInstall(orgId, itemId, actor, opts = {}) {
|
|
286
|
+
const t = this.db;
|
|
258
287
|
const rows = await t
|
|
259
288
|
.updateTable("catalog_requests")
|
|
260
289
|
.set({ status: "approved", decided_by: actor, decided_at: sql `now()` })
|
|
@@ -284,50 +313,52 @@ export class CatalogRequestsService {
|
|
|
284
313
|
async decideOrg(orgId, actor, requestId, decision, opts = {}) {
|
|
285
314
|
if (!UUID_RE.test(requestId))
|
|
286
315
|
throw requestNotFound();
|
|
287
|
-
await this.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
316
|
+
await this.writeDecideOrg(orgId, actor, requestId, decision, opts);
|
|
317
|
+
return this.view(requestId);
|
|
318
|
+
}
|
|
319
|
+
async writeDecideOrg(orgId, actor, requestId, decision, opts) {
|
|
320
|
+
const t = this.db;
|
|
321
|
+
await this.orgLock.lockAndAuthorize(orgId, actor, "catalog.decide");
|
|
322
|
+
const row = await t
|
|
323
|
+
.selectFrom("catalog_requests")
|
|
324
|
+
.select(["id", "item_id", "stage", "status"])
|
|
325
|
+
.where("id", "=", requestId)
|
|
326
|
+
.where("org_id", "=", orgId)
|
|
327
|
+
.forUpdate()
|
|
328
|
+
.executeTakeFirst();
|
|
329
|
+
if (!row)
|
|
330
|
+
throw requestNotFound();
|
|
331
|
+
if (row.status !== "pending" || row.stage !== "org") {
|
|
332
|
+
throw new ApiError("catalog.request_decided", row.status === "pending"
|
|
333
|
+
? "This request is waiting for the enterprise admin"
|
|
334
|
+
: "This request has already been decided");
|
|
335
|
+
}
|
|
336
|
+
let escalated = false;
|
|
337
|
+
if (decision === "approve") {
|
|
338
|
+
const item = await lockItem(t, row.item_id);
|
|
339
|
+
if (!item || item.deleted_at !== null || item.policy === "disabled")
|
|
340
|
+
throw itemDisabled();
|
|
341
|
+
escalated = item.policy === "needs_approval" && !(await hasGrant(t, orgId, row.item_id));
|
|
342
|
+
}
|
|
343
|
+
await t
|
|
344
|
+
.updateTable("catalog_requests")
|
|
345
|
+
.set(escalated
|
|
346
|
+
? { stage: "deployment", org_decided_by: actor, org_decided_at: sql `now()` }
|
|
347
|
+
: {
|
|
348
|
+
status: decision === "approve" ? "approved" : "rejected",
|
|
349
|
+
decided_by: actor,
|
|
350
|
+
decided_at: sql `now()`,
|
|
351
|
+
})
|
|
352
|
+
.where("id", "=", requestId)
|
|
353
|
+
.execute();
|
|
354
|
+
await audit(t, {
|
|
355
|
+
actorAccountId: actor,
|
|
356
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
357
|
+
orgId,
|
|
358
|
+
action: "catalog.request_decided",
|
|
359
|
+
target: requestId,
|
|
360
|
+
detail: { itemId: row.item_id, decision, stage: "org", escalated },
|
|
329
361
|
});
|
|
330
|
-
return this.view(this.db, requestId);
|
|
331
362
|
}
|
|
332
363
|
/**
|
|
333
364
|
* An enterprise admin decides a stage deployment request (re-checked inside the enterprise admin
|
|
@@ -340,59 +371,61 @@ export class CatalogRequestsService {
|
|
|
340
371
|
async decideDeployment(actor, requestId, decision, opts = {}) {
|
|
341
372
|
if (!UUID_RE.test(requestId))
|
|
342
373
|
throw requestNotFound();
|
|
343
|
-
await this.
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
374
|
+
await this.writeDecideDeployment(actor, requestId, decision, opts);
|
|
375
|
+
return this.view(requestId);
|
|
376
|
+
}
|
|
377
|
+
async writeDecideDeployment(actor, requestId, decision, opts) {
|
|
378
|
+
const t = this.db;
|
|
379
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
380
|
+
const row = await t
|
|
381
|
+
.selectFrom("catalog_requests")
|
|
382
|
+
.select(["id", "org_id", "item_id", "stage", "status"])
|
|
383
|
+
.where("id", "=", requestId)
|
|
384
|
+
.forUpdate()
|
|
385
|
+
.executeTakeFirst();
|
|
386
|
+
if (row?.stage !== "deployment")
|
|
387
|
+
throw requestNotFound();
|
|
388
|
+
if (row.status !== "pending") {
|
|
389
|
+
throw new ApiError("catalog.request_decided", "This request has already been decided");
|
|
390
|
+
}
|
|
391
|
+
if (decision === "approve") {
|
|
392
|
+
const item = await lockItem(t, row.item_id);
|
|
393
|
+
if (!item || item.deleted_at !== null || item.policy === "disabled")
|
|
394
|
+
throw itemDisabled();
|
|
395
|
+
const org = await t
|
|
396
|
+
.selectFrom("orgs")
|
|
397
|
+
.select("deleted_at")
|
|
398
|
+
.where("id", "=", row.org_id)
|
|
350
399
|
.executeTakeFirst();
|
|
351
|
-
if (
|
|
400
|
+
if (!org || org.deleted_at !== null)
|
|
352
401
|
throw requestNotFound();
|
|
353
|
-
if (row.status !== "pending") {
|
|
354
|
-
throw new ApiError("catalog.request_decided", "This request has already been decided");
|
|
355
|
-
}
|
|
356
|
-
if (decision === "approve") {
|
|
357
|
-
const item = await lockItem(t, row.item_id);
|
|
358
|
-
if (!item || item.deleted_at !== null || item.policy === "disabled")
|
|
359
|
-
throw itemDisabled();
|
|
360
|
-
const org = await t
|
|
361
|
-
.selectFrom("orgs")
|
|
362
|
-
.select("deleted_at")
|
|
363
|
-
.where("id", "=", row.org_id)
|
|
364
|
-
.executeTakeFirst();
|
|
365
|
-
if (!org || org.deleted_at !== null)
|
|
366
|
-
throw requestNotFound();
|
|
367
|
-
await t
|
|
368
|
-
.insertInto("catalog_org_grants")
|
|
369
|
-
.values({ item_id: row.item_id, org_id: row.org_id, granted_by: actor })
|
|
370
|
-
.onConflict((oc) => oc.columns(["item_id", "org_id"]).doNothing())
|
|
371
|
-
.execute();
|
|
372
|
-
}
|
|
373
402
|
await t
|
|
374
|
-
.
|
|
375
|
-
.
|
|
376
|
-
|
|
377
|
-
decided_by: actor,
|
|
378
|
-
decided_at: sql `now()`,
|
|
379
|
-
})
|
|
380
|
-
.where("id", "=", requestId)
|
|
403
|
+
.insertInto("catalog_org_grants")
|
|
404
|
+
.values({ item_id: row.item_id, org_id: row.org_id, granted_by: actor })
|
|
405
|
+
.onConflict((oc) => oc.columns(["item_id", "org_id"]).doNothing())
|
|
381
406
|
.execute();
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
407
|
+
}
|
|
408
|
+
await t
|
|
409
|
+
.updateTable("catalog_requests")
|
|
410
|
+
.set({
|
|
411
|
+
status: decision === "approve" ? "approved" : "rejected",
|
|
412
|
+
decided_by: actor,
|
|
413
|
+
decided_at: sql `now()`,
|
|
414
|
+
})
|
|
415
|
+
.where("id", "=", requestId)
|
|
416
|
+
.execute();
|
|
417
|
+
await audit(t, {
|
|
418
|
+
actorAccountId: actor,
|
|
419
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
420
|
+
orgId: row.org_id,
|
|
421
|
+
action: "catalog.request_decided",
|
|
422
|
+
target: requestId,
|
|
423
|
+
detail: { itemId: row.item_id, decision, stage: "deployment" },
|
|
390
424
|
});
|
|
391
|
-
return this.view(this.db, requestId);
|
|
392
425
|
}
|
|
393
426
|
/** 企业管理员的申请列表(stage deployment;`status` 缺省 pending),新的在前。 */
|
|
394
427
|
async listDeployment(q = {}) {
|
|
395
|
-
const rows = await this.baseQuery(
|
|
428
|
+
const rows = await this.baseQuery()
|
|
396
429
|
.where("r.stage", "=", "deployment")
|
|
397
430
|
.where("r.status", "=", q.status ?? "pending")
|
|
398
431
|
.where("o.deleted_at", "is", null)
|
|
@@ -427,7 +460,7 @@ export class CatalogRequestsService {
|
|
|
427
460
|
.executeTakeFirst();
|
|
428
461
|
if (!m || !roleAtLeast(m.role, "admin"))
|
|
429
462
|
return [];
|
|
430
|
-
const rows = await this.baseQuery(
|
|
463
|
+
const rows = await this.baseQuery()
|
|
431
464
|
.where("r.org_id", "=", orgId)
|
|
432
465
|
.where("r.stage", "=", "org")
|
|
433
466
|
.where("r.status", "=", "pending")
|
|
@@ -450,14 +483,14 @@ export class CatalogRequestsService {
|
|
|
450
483
|
out.set(r.item_id, { id: r.id, stage: r.stage, status: r.status });
|
|
451
484
|
return out;
|
|
452
485
|
}
|
|
453
|
-
async view(
|
|
454
|
-
const row = await this.baseQuery(
|
|
486
|
+
async view(id) {
|
|
487
|
+
const row = await this.baseQuery().where("r.id", "=", id).executeTakeFirst();
|
|
455
488
|
if (!row)
|
|
456
489
|
throw requestNotFound();
|
|
457
490
|
return toView(row);
|
|
458
491
|
}
|
|
459
|
-
baseQuery(
|
|
460
|
-
return db
|
|
492
|
+
baseQuery() {
|
|
493
|
+
return this.db
|
|
461
494
|
.selectFrom("catalog_requests as r")
|
|
462
495
|
.innerJoin("catalog_items as i", "i.id", "r.item_id")
|
|
463
496
|
.innerJoin("orgs as o", "o.id", "r.org_id")
|
|
@@ -482,7 +515,30 @@ export class CatalogRequestsService {
|
|
|
482
515
|
"r.created_at",
|
|
483
516
|
]);
|
|
484
517
|
}
|
|
485
|
-
}
|
|
518
|
+
};
|
|
519
|
+
__decorate([
|
|
520
|
+
Transactional()
|
|
521
|
+
], CatalogRequestsService.prototype, "writeRequest", null);
|
|
522
|
+
__decorate([
|
|
523
|
+
Transactional({ propagation: "mandatory" })
|
|
524
|
+
], CatalogRequestsService.prototype, "requestDeployment", null);
|
|
525
|
+
__decorate([
|
|
526
|
+
Transactional({ propagation: "mandatory" })
|
|
527
|
+
], CatalogRequestsService.prototype, "resolveByInstall", null);
|
|
528
|
+
__decorate([
|
|
529
|
+
Transactional()
|
|
530
|
+
], CatalogRequestsService.prototype, "writeDecideOrg", null);
|
|
531
|
+
__decorate([
|
|
532
|
+
Transactional()
|
|
533
|
+
], CatalogRequestsService.prototype, "writeDecideDeployment", null);
|
|
534
|
+
CatalogRequestsService = __decorate([
|
|
535
|
+
Injectable(),
|
|
536
|
+
__param(0, Inject(KernelDb)),
|
|
537
|
+
__param(1, Inject(OrgLock)),
|
|
538
|
+
__param(2, Inject(EnterpriseAdminLock)),
|
|
539
|
+
__param(3, Inject(TransactionHost))
|
|
540
|
+
], CatalogRequestsService);
|
|
541
|
+
export { CatalogRequestsService };
|
|
486
542
|
function toView(r) {
|
|
487
543
|
return {
|
|
488
544
|
id: r.id,
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type { ExtensionHost } from "../extensions/host.js";
|
|
4
|
-
type Trx = Transaction<KernelDatabase>;
|
|
1
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
2
|
+
import type { ExtensionRegistry } from "../extensions/registry.js";
|
|
5
3
|
/**
|
|
6
4
|
* Which versions an org may upgrade an installed plugin to (package ecosystem spec §10, Decision
|
|
7
5
|
* 10, Ruling 8):
|
|
@@ -32,7 +30,7 @@ export interface TargetVersion {
|
|
|
32
30
|
* this replica loaded from the startup config; undefined when the deployment runs none (then no
|
|
33
31
|
* upgrade target and no "upgrade pending").
|
|
34
32
|
*/
|
|
35
|
-
export declare function deployedExtension(db:
|
|
33
|
+
export declare function deployedExtension(db: KernelSchemaDb, host: Pick<ExtensionRegistry, "manifests">, name: string): Promise<DeployedExtension | undefined>;
|
|
36
34
|
/** Whether catalog version `v` carries the deployment's extension `d`. */
|
|
37
35
|
export declare const runsDeployed: (v: TargetVersion, d: DeployedExtension) => boolean;
|
|
38
36
|
/**
|
|
@@ -51,9 +49,8 @@ export interface UpgradeInfo {
|
|
|
51
49
|
* The upgrade info of org installs (`itemId`, `name`, `version`), keyed by `itemId@version`; reads
|
|
52
50
|
* the items' catalog versions and the deployment's extensions in a few queries.
|
|
53
51
|
*/
|
|
54
|
-
export declare function upgradeInfo(db:
|
|
52
|
+
export declare function upgradeInfo(db: KernelSchemaDb, host: Pick<ExtensionRegistry, "manifests">, installs: readonly {
|
|
55
53
|
itemId: string;
|
|
56
54
|
name: string;
|
|
57
55
|
version: string;
|
|
58
56
|
}[]): Promise<Map<string, UpgradeInfo>>;
|
|
59
|
-
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { ChannelCard, InboundEvent, InboundSender } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
3
|
import type { ApprovalsService } from "../tools/approvals.service.js";
|
|
4
4
|
import type { QuestionsService } from "../tools/questions.service.js";
|
|
5
5
|
import type { ChannelConnectionRow, ChannelConnections } from "./connections.service.js";
|
|
6
|
-
import type
|
|
6
|
+
import { type ChannelJobs } from "./jobs.js";
|
|
7
7
|
import { type ChannelLocale, type ChannelPhrase } from "./phrases.js";
|
|
8
8
|
type CardActionEvent = Extract<InboundEvent, {
|
|
9
9
|
type: "card_action";
|
|
@@ -14,11 +14,13 @@ export type SpeakerResolver = (connectionId: string, row: ChannelConnectionRow,
|
|
|
14
14
|
threadAccount: string | null;
|
|
15
15
|
} | undefined>;
|
|
16
16
|
export interface ChannelCardActionsDeps {
|
|
17
|
-
|
|
17
|
+
/** The context-aware kernel-schema handle (read at call time). */
|
|
18
|
+
readonly db: KernelSchemaDb;
|
|
18
19
|
connections: Pick<ChannelConnections, "row" | "send">;
|
|
19
20
|
approvals: Pick<ApprovalsService, "decide">;
|
|
20
21
|
questions: Pick<QuestionsService, "answer">;
|
|
21
|
-
|
|
22
|
+
/** The delivery of the card's conversation. */
|
|
23
|
+
outbound: Pick<ChannelJobs, "enqueue">;
|
|
22
24
|
resolveSpeaker: SpeakerResolver;
|
|
23
25
|
}
|
|
24
26
|
/**
|
package/dist/channels/actions.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ApiError } from "../errors.js";
|
|
2
2
|
import { readOrgSettings } from "../orgs/settings.service.js";
|
|
3
|
-
import { idempotencyKey } from "./
|
|
3
|
+
import { idempotencyKey } from "./jobs.js";
|
|
4
4
|
import { phrase } from "./phrases.js";
|
|
5
5
|
import { findThread, threadKeyOf } from "./threads.js";
|
|
6
6
|
/** 授权 / 状态类失败 → 回给点击者的一句话(不改卡片);其余错误照常抛出。 */
|