@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +187 -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 +280 -335
- package/dist/agents/definition.d.ts +39 -8
- package/dist/agents/definition.js +201 -17
- 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 +39 -8
- 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 +326 -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/claude/agents.js +13 -10
- 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 +31 -14
- 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 +10 -4
- package/dist/channels/cards.js +16 -8
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +12 -6
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- 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 +39 -18
- package/dist/conversations/event-log.js +93 -27
- package/dist/conversations/events.d.ts +23 -3
- package/dist/conversations/events.js +26 -14
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +4 -4
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/recorded-tools.d.ts +27 -1
- package/dist/evals/recorded-tools.js +85 -10
- package/dist/evals/run-replay.d.ts +61 -8
- package/dist/evals/run-replay.js +159 -85
- 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.d.ts +2 -2
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +86 -58
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +9 -6
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +456 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +16 -10
- package/dist/orgs/settings.service.js +77 -48
- 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/context/build.d.ts +6 -6
- package/dist/runtime/context/build.js +18 -8
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +9 -10
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +37 -30
- 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 +8 -1
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -137
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +25 -58
- 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 +27 -18
- 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 +122 -76
- package/dist/runtime/run-worker.js +343 -229
- 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 +5 -10
- package/dist/runtime/subagents/definition.js +13 -14
- package/dist/runtime/subagents/dispatch.d.ts +89 -8
- package/dist/runtime/subagents/dispatch.js +137 -142
- 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 +3 -2
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +4 -4
- package/dist/runtime/subagents/roster.js +2 -2
- package/dist/runtime/subagents/skill-fork.d.ts +8 -9
- package/dist/runtime/subagents/skill-fork.js +17 -6
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -100
- package/dist/runtime/waits.d.ts +127 -59
- package/dist/runtime/waits.js +433 -210
- 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 +37 -24
- package/dist/skills/catalog.js +100 -57
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +30 -20
- package/dist/skills/changes.service.js +425 -367
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +17 -16
- package/dist/skills/invoke.js +53 -21
- 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 +33 -25
- package/dist/tools/approvals.service.js +343 -259
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +73 -0
- package/dist/tools/builtin-names.js +116 -0
- package/dist/tools/builtins/agent.d.ts +7 -7
- package/dist/tools/builtins/agent.js +7 -11
- package/dist/tools/builtins/ask-user.d.ts +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- 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 +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +33 -30
- package/dist/tools/builtins/sandbox/common.d.ts +5 -4
- package/dist/tools/builtins/sandbox/common.js +2 -2
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +13 -13
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +42 -31
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +6 -6
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +149 -32
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +22 -15
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +38 -34
- package/dist/tools/builtins/skill-load.d.ts +6 -6
- package/dist/tools/builtins/skill-load.js +33 -17
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +10 -10
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- 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 +438 -348
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/info.d.ts +32 -13
- package/dist/tools/info.js +88 -39
- 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/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- 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 +48 -4
- package/dist/tools/pipeline.d.ts +72 -50
- package/dist/tools/pipeline.js +239 -100
- package/dist/tools/policy.d.ts +3 -16
- package/dist/tools/policy.js +13 -19
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +43 -38
- package/dist/tools/registry.js +100 -72
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- 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 +10 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- 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/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
package/dist/tools/registry.js
CHANGED
|
@@ -1,38 +1,31 @@
|
|
|
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 { createHash } from "node:crypto";
|
|
11
|
+
import { connectorToolKey, extensionToolKey } from "@capybara-hq/plugin-sdk";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
13
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
14
|
+
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
15
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
16
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
2
17
|
import { readOrgSettings } from "../orgs/settings.service.js";
|
|
3
18
|
import { estimateTokens } from "../runtime/context/tokens.js";
|
|
4
19
|
import { SUBAGENT_LIMIT_DEFAULTS, subagentLimits } from "../runtime/subagents/limits.js";
|
|
5
20
|
import { resolveRoster } from "../runtime/subagents/roster.js";
|
|
6
|
-
import { AGENT_TOOL,
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export const BUILTIN_TOOL_NAMES = [
|
|
15
|
-
"ask_user",
|
|
16
|
-
"read_tool_output",
|
|
17
|
-
"tool_search",
|
|
18
|
-
"skill_load",
|
|
19
|
-
"skill_write",
|
|
20
|
-
...SANDBOX_TOOL_NAMES,
|
|
21
|
-
// phase C: dispatches sub-agents; its description is built per agent from the roster
|
|
22
|
-
"agent",
|
|
23
|
-
];
|
|
24
|
-
/** 键排序、去掉 undefined 的 JSON(jsonb 不保留键顺序,指纹必须与顺序无关)。 */
|
|
25
|
-
export function canonicalJson(v) {
|
|
26
|
-
if (Array.isArray(v))
|
|
27
|
-
return `[${v.map(canonicalJson).join(",")}]`;
|
|
28
|
-
if (v !== null && typeof v === "object") {
|
|
29
|
-
const entries = Object.entries(v)
|
|
30
|
-
.filter(([, x]) => x !== undefined)
|
|
31
|
-
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
32
|
-
return `{${entries.map(([k, x]) => `${JSON.stringify(k)}:${canonicalJson(x)}`).join(",")}}`;
|
|
33
|
-
}
|
|
34
|
-
return JSON.stringify(v);
|
|
35
|
-
}
|
|
21
|
+
import { AGENT_TOOL, BUILTIN_TOOL_NAMES, SKILL_LOAD, TOOL_SEARCH } from "./builtin-names.js";
|
|
22
|
+
import { agentToolSpec } from "./builtins/agent.js";
|
|
23
|
+
import { BuiltinTools } from "./builtins/builtin-tools.js";
|
|
24
|
+
import { canonicalJson } from "./canonical-json.js";
|
|
25
|
+
import { legacyKeySaveText } from "./legacy-keys.js";
|
|
26
|
+
import { toolKeyIssue } from "./naming.js";
|
|
27
|
+
export { BUILTIN_TOOL_NAMES } from "./builtin-names.js";
|
|
28
|
+
export { canonicalJson } from "./canonical-json.js";
|
|
36
29
|
/** The first 16 hex digits of sha256(canonicalJson(v)): a fingerprint independent of key order. */
|
|
37
30
|
export function contentHash(v) {
|
|
38
31
|
return createHash("sha256").update(canonicalJson(v)).digest("hex").slice(0, 16);
|
|
@@ -63,10 +56,8 @@ export function specHash(spec) {
|
|
|
63
56
|
export function policyFromAnnotations(a) {
|
|
64
57
|
return a?.readOnlyHint === true ? "allow" : "ask";
|
|
65
58
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
/** 内置 `skill_load` 的名字(对话日志里有技能目录快照时由注册表自动加入,不进 agent 定义)。 */
|
|
69
|
-
const SKILL_LOAD = "skill_load";
|
|
59
|
+
// `ToolSearch` is added by the registry by org setting and threshold, `Skill` when the log has a
|
|
60
|
+
// skills catalog snapshot; neither comes from agent definitions (`./builtin-names.ts`).
|
|
70
61
|
/** 工具定义(模型可见三项)的估算 token 数(与请求估算同一口径)。 */
|
|
71
62
|
function estimateToolTokens(tools) {
|
|
72
63
|
return estimateTokens([], [], tools.map((t) => ({
|
|
@@ -97,14 +88,35 @@ const sourceId = (s) => s.kind === "builtin"
|
|
|
97
88
|
* Only the first of a key is kept; the same source referenced twice is deduplicated silently,
|
|
98
89
|
* different sources with the same key report a duplicate.
|
|
99
90
|
*/
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
91
|
+
let ToolRegistry = class ToolRegistry {
|
|
92
|
+
db;
|
|
93
|
+
host;
|
|
94
|
+
extensions;
|
|
95
|
+
builtinTools;
|
|
96
|
+
config;
|
|
97
|
+
constructor(db,
|
|
98
|
+
/** Extension tools and the organization's enabled extensions. */
|
|
99
|
+
host,
|
|
100
|
+
/** The installed connectors (`connector@1`, from the extension registry). */
|
|
101
|
+
extensions, builtinTools,
|
|
102
|
+
/**
|
|
103
|
+
* `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `ToolSearch` is never
|
|
104
|
+
* offered and the sub-agent limits are the schema defaults.
|
|
105
|
+
*/
|
|
106
|
+
config) {
|
|
107
|
+
this.db = db;
|
|
108
|
+
this.host = host;
|
|
109
|
+
this.extensions = extensions;
|
|
110
|
+
this.builtinTools = builtinTools;
|
|
111
|
+
this.config = config;
|
|
112
|
+
}
|
|
113
|
+
/** The kernel's builtin tools (`ToolSearch` is added by {@link forAgent}, not by definitions). */
|
|
114
|
+
get builtins() {
|
|
115
|
+
return this.builtinTools.list();
|
|
104
116
|
}
|
|
105
117
|
/** `host.list("connector")` 中 `kind` 匹配的第一个实现;未安装返回 undefined。 */
|
|
106
118
|
findConnector(kind) {
|
|
107
|
-
for (const e of this.
|
|
119
|
+
for (const e of this.extensions.list("connector")) {
|
|
108
120
|
const impl = e.impl;
|
|
109
121
|
if (impl?.kind === kind)
|
|
110
122
|
return impl;
|
|
@@ -127,10 +139,10 @@ export class ToolRegistry {
|
|
|
127
139
|
*/
|
|
128
140
|
handler(source) {
|
|
129
141
|
if (source.kind === "builtin") {
|
|
130
|
-
return this.
|
|
142
|
+
return this.builtins.find((b) => b.spec.name === source.name)?.run;
|
|
131
143
|
}
|
|
132
144
|
if (source.kind === "plugin") {
|
|
133
|
-
const t = this.
|
|
145
|
+
const t = this.host
|
|
134
146
|
.tools()
|
|
135
147
|
.find((x) => x.plugin === source.plugin && x.spec.name === source.name);
|
|
136
148
|
if (!t)
|
|
@@ -141,15 +153,15 @@ export class ToolRegistry {
|
|
|
141
153
|
}
|
|
142
154
|
/** The registered builtin tools' specs (display metadata for `tools/info.ts`). */
|
|
143
155
|
builtinSpecs() {
|
|
144
|
-
return this.
|
|
156
|
+
return this.builtins.map((b) => b.spec);
|
|
145
157
|
}
|
|
146
158
|
/** The loaded extensions' registered tool specs, with their extension's name. */
|
|
147
159
|
extensionToolSpecs() {
|
|
148
|
-
return this.
|
|
160
|
+
return this.host.tools().map((t) => ({ plugin: t.plugin, spec: t.spec }));
|
|
149
161
|
}
|
|
150
162
|
/** 已安装连接器的 kind 列表(去重,按加载顺序)。 */
|
|
151
163
|
connectorKinds() {
|
|
152
|
-
return [...new Set(this.
|
|
164
|
+
return [...new Set(this.extensions.list("connector").map((e) => e.impl.kind))];
|
|
153
165
|
}
|
|
154
166
|
/**
|
|
155
167
|
* 保存 agent 时校验工具引用(只看「存在」,停用 / 待复核 / 插件未启用等运行时状态不拒绝,由 `forAgent` 报不可用):
|
|
@@ -162,7 +174,7 @@ export class ToolRegistry {
|
|
|
162
174
|
async checkRefs(orgId, refs) {
|
|
163
175
|
const issues = [];
|
|
164
176
|
const owner = new Map();
|
|
165
|
-
const pluginTools = this.
|
|
177
|
+
const pluginTools = this.host.tools();
|
|
166
178
|
const connectorIds = [
|
|
167
179
|
...new Set(refs.flatMap((r) => (r.kind === "connector" ? [r.connectorId] : []))),
|
|
168
180
|
];
|
|
@@ -179,13 +191,19 @@ export class ToolRegistry {
|
|
|
179
191
|
const path = `tools.${i}`;
|
|
180
192
|
if (ref.kind === "builtin") {
|
|
181
193
|
if (!BUILTIN_TOOL_NAMES.includes(ref.name)) {
|
|
182
|
-
|
|
194
|
+
const renamed = legacyKeySaveText(ref.name);
|
|
195
|
+
issues.push({
|
|
196
|
+
path,
|
|
197
|
+
message: renamed === null
|
|
198
|
+
? `Built-in tool "${ref.name}" does not exist`
|
|
199
|
+
: `Built-in tool ${renamed}`,
|
|
200
|
+
});
|
|
183
201
|
return;
|
|
184
202
|
}
|
|
185
203
|
claim(path, ref.name, `builtin:${ref.name}`);
|
|
186
204
|
}
|
|
187
205
|
else if (ref.kind === "plugin") {
|
|
188
|
-
const key =
|
|
206
|
+
const key = extensionToolKey(ref.plugin, ref.name);
|
|
189
207
|
if (!pluginTools.some((x) => x.plugin === ref.plugin && x.spec.name === ref.name)) {
|
|
190
208
|
issues.push({ path, message: `Plugin tool "${key}" does not exist` });
|
|
191
209
|
return;
|
|
@@ -212,22 +230,22 @@ export class ToolRegistry {
|
|
|
212
230
|
});
|
|
213
231
|
continue;
|
|
214
232
|
}
|
|
215
|
-
claim(path,
|
|
233
|
+
claim(path, connectorToolKey(app.slug, name), `connector:${app.id}:${name}`);
|
|
216
234
|
}
|
|
217
235
|
}
|
|
218
236
|
});
|
|
219
237
|
return { keys: new Set(owner.keys()), issues };
|
|
220
238
|
}
|
|
221
239
|
/**
|
|
222
|
-
* 解析 agent 引用的工具(见类注释),再判定是否启用 `
|
|
240
|
+
* 解析 agent 引用的工具(见类注释),再判定是否启用 `ToolSearch`:组织设置 `toolSearch === "on"`,且
|
|
223
241
|
* 可用工具数 > `tools.searchThresholdTools` 或其定义的估算 token > `tools.searchThresholdTokens`。
|
|
224
|
-
* 启用时把内置 `
|
|
225
|
-
* `skillLoad`:对话日志里有技能目录快照(`skills_catalog`,Ruling M17)→ 加入内置 `
|
|
226
|
-
* 定义里显式引用的 `
|
|
242
|
+
* 启用时把内置 `ToolSearch` 追加到末尾。定义里显式引用的 `ToolSearch` 忽略(由这里按设置管理)。
|
|
243
|
+
* `skillLoad`:对话日志里有技能目录快照(`skills_catalog`,Ruling M17)→ 加入内置 `Skill`(始终完整加载);
|
|
244
|
+
* 定义里显式引用的 `Skill` 同样忽略。
|
|
227
245
|
*/
|
|
228
246
|
async forAgent(orgId, def) {
|
|
229
247
|
const { tools, unavailable, hidden } = await this.resolve(orgId, def);
|
|
230
|
-
const sl = def.skillLoad === true && this.
|
|
248
|
+
const sl = def.skillLoad === true && this.builtins.find((x) => x.spec.name === SKILL_LOAD);
|
|
231
249
|
if (sl) {
|
|
232
250
|
tools.push({
|
|
233
251
|
key: SKILL_LOAD,
|
|
@@ -240,7 +258,7 @@ export class ToolRegistry {
|
|
|
240
258
|
}
|
|
241
259
|
const toolSearch = await this.searchActive(orgId, tools);
|
|
242
260
|
if (toolSearch) {
|
|
243
|
-
const b = this.
|
|
261
|
+
const b = this.builtins.find((x) => x.spec.name === TOOL_SEARCH);
|
|
244
262
|
tools.push({
|
|
245
263
|
key: TOOL_SEARCH,
|
|
246
264
|
source: { kind: "builtin", name: TOOL_SEARCH },
|
|
@@ -251,16 +269,16 @@ export class ToolRegistry {
|
|
|
251
269
|
}
|
|
252
270
|
return { tools, unavailable, hidden, toolSearch };
|
|
253
271
|
}
|
|
254
|
-
/** 是否启用 `
|
|
272
|
+
/** 是否启用 `ToolSearch`(见 {@link forAgent});先比阈值,超过才读组织设置。 */
|
|
255
273
|
async searchActive(orgId, tools) {
|
|
256
|
-
const cfg = this.
|
|
257
|
-
if (!cfg || !this.
|
|
274
|
+
const cfg = this.config?.get().tools;
|
|
275
|
+
if (!cfg || !this.builtins.some((b) => b.spec.name === TOOL_SEARCH))
|
|
258
276
|
return false;
|
|
259
277
|
const over = tools.length > cfg.searchThresholdTools ||
|
|
260
278
|
estimateToolTokens(tools) > cfg.searchThresholdTokens;
|
|
261
279
|
if (!over)
|
|
262
280
|
return false;
|
|
263
|
-
return (await readOrgSettings(this.
|
|
281
|
+
return (await readOrgSettings(this.db.db, orgId)).toolSearch === "on";
|
|
264
282
|
}
|
|
265
283
|
async resolve(orgId, def) {
|
|
266
284
|
const tools = [];
|
|
@@ -288,12 +306,12 @@ export class ToolRegistry {
|
|
|
288
306
|
...new Set(def.tools.flatMap((r) => (r.kind === "connector" ? [r.connectorId] : []))),
|
|
289
307
|
];
|
|
290
308
|
const apps = await this.loadConnectors(orgId, connectorIds);
|
|
291
|
-
const pluginTools = this.
|
|
309
|
+
const pluginTools = this.host.tools();
|
|
292
310
|
for (const ref of def.tools) {
|
|
293
311
|
if (ref.kind === "builtin") {
|
|
294
312
|
if (ref.name === TOOL_SEARCH || ref.name === SKILL_LOAD)
|
|
295
313
|
continue;
|
|
296
|
-
const b = this.
|
|
314
|
+
const b = this.builtins.find((x) => x.spec.name === ref.name);
|
|
297
315
|
if (!b) {
|
|
298
316
|
unavailable.push({ ref: ref.name, reason: "Built-in tool does not exist" });
|
|
299
317
|
continue;
|
|
@@ -303,11 +321,11 @@ export class ToolRegistry {
|
|
|
303
321
|
unavailable.push({ ref: ref.name, reason: why });
|
|
304
322
|
continue;
|
|
305
323
|
}
|
|
306
|
-
// `
|
|
324
|
+
// `Agent`: the description lists this definition's roster (sub-agents spec §4.3); with an
|
|
307
325
|
// empty roster there is nothing to dispatch, so the tool is not offered at all
|
|
308
326
|
let spec = b.spec;
|
|
309
327
|
if (b.spec.name === AGENT_TOOL) {
|
|
310
|
-
const roster = await resolveRoster(this.
|
|
328
|
+
const roster = await resolveRoster(this.db.db, orgId, { subagents: def.subagents });
|
|
311
329
|
if (roster.length === 0)
|
|
312
330
|
continue;
|
|
313
331
|
spec = agentToolSpec(roster, await this.maxConcurrentSubagents(orgId));
|
|
@@ -323,7 +341,7 @@ export class ToolRegistry {
|
|
|
323
341
|
});
|
|
324
342
|
}
|
|
325
343
|
else if (ref.kind === "plugin") {
|
|
326
|
-
const key =
|
|
344
|
+
const key = extensionToolKey(ref.plugin, ref.name);
|
|
327
345
|
const t = pluginTools.find((x) => x.plugin === ref.plugin && x.spec.name === ref.name);
|
|
328
346
|
if (!t) {
|
|
329
347
|
unavailable.push({ ref: key, reason: "Plugin tool does not exist" });
|
|
@@ -355,7 +373,7 @@ export class ToolRegistry {
|
|
|
355
373
|
unavailable.push({ ref: `app:${ref.connectorId}`, reason: "App does not exist" });
|
|
356
374
|
continue;
|
|
357
375
|
}
|
|
358
|
-
const all =
|
|
376
|
+
const all = connectorToolKey(app.slug, "*");
|
|
359
377
|
if (app.deleted) {
|
|
360
378
|
unavailable.push({ ref: all, reason: `App ${app.slug} was deleted` });
|
|
361
379
|
continue;
|
|
@@ -377,7 +395,7 @@ export class ToolRegistry {
|
|
|
377
395
|
// 「all」里未启用的工具不算 agent 点名要的,不进 unavailable(不提醒),只记进 hidden 备查
|
|
378
396
|
const notEnabled = ref.tools === "all" ? hidden : unavailable;
|
|
379
397
|
for (const t of wanted) {
|
|
380
|
-
const key =
|
|
398
|
+
const key = connectorToolKey(app.slug, t.name);
|
|
381
399
|
// 远端已不再提供(漂移检测置停用并标记,见 drift.ts):与「没有这一行」同一个事实
|
|
382
400
|
if ("missing" in t || t.gone) {
|
|
383
401
|
notEnabled.push({ ref: key, reason: `Tool no longer exists in app ${app.slug}` });
|
|
@@ -414,25 +432,26 @@ export class ToolRegistry {
|
|
|
414
432
|
return { tools, unavailable, hidden };
|
|
415
433
|
}
|
|
416
434
|
/**
|
|
417
|
-
* `subagents.maxConcurrentPerRun` with the organization's override, for the `
|
|
435
|
+
* `subagents.maxConcurrentPerRun` with the organization's override, for the `Agent` tool's
|
|
418
436
|
* description (§4.3). A change of the limit changes the tool's spec hash; replays read the
|
|
419
437
|
* definition logged by hash, so no drift reason is involved. Without config (some tests): the
|
|
420
438
|
* schema default.
|
|
421
439
|
*/
|
|
422
440
|
async maxConcurrentSubagents(orgId) {
|
|
423
|
-
const
|
|
424
|
-
|
|
441
|
+
const cfg = this.config;
|
|
442
|
+
const config = cfg ?? { get: () => ({ subagents: SUBAGENT_LIMIT_DEFAULTS }) };
|
|
443
|
+
return (await subagentLimits(this.db.db, config, orgId)).maxConcurrentPerRun;
|
|
425
444
|
}
|
|
426
445
|
/** Plugins the organization enabled (built-in plugins always count as enabled, C14). */
|
|
427
446
|
async enabledPlugins(orgId) {
|
|
428
|
-
return this.
|
|
447
|
+
return this.host.enabledPlugins(orgId);
|
|
429
448
|
}
|
|
430
449
|
async loadConnectors(orgId, ids) {
|
|
431
450
|
const out = new Map();
|
|
432
451
|
if (ids.length === 0)
|
|
433
452
|
return out;
|
|
434
453
|
// 软删除的连接器也读出来,只为给出「已删除」这个更准确的原因(slug 可能已被新连接器复用,按 id 区分)
|
|
435
|
-
const apps = await this.
|
|
454
|
+
const apps = await this.db
|
|
436
455
|
.selectFrom("connectors")
|
|
437
456
|
.select(["id", "slug", "connector", "status", "deleted_at"])
|
|
438
457
|
.where("org_id", "=", orgId)
|
|
@@ -441,7 +460,7 @@ export class ToolRegistry {
|
|
|
441
460
|
const live = apps.filter((a) => a.deleted_at === null).map((a) => a.id);
|
|
442
461
|
const toolRows = live.length === 0
|
|
443
462
|
? []
|
|
444
|
-
: await this.
|
|
463
|
+
: await this.db
|
|
445
464
|
.selectFrom("connector_tools")
|
|
446
465
|
.select([
|
|
447
466
|
"connector_id",
|
|
@@ -478,4 +497,13 @@ export class ToolRegistry {
|
|
|
478
497
|
}
|
|
479
498
|
return out;
|
|
480
499
|
}
|
|
481
|
-
}
|
|
500
|
+
};
|
|
501
|
+
ToolRegistry = __decorate([
|
|
502
|
+
Injectable(),
|
|
503
|
+
__param(0, Inject(KernelDb)),
|
|
504
|
+
__param(1, Inject(ExtensionHost)),
|
|
505
|
+
__param(2, Inject(ExtensionRegistry)),
|
|
506
|
+
__param(3, Inject(BuiltinTools)),
|
|
507
|
+
__param(4, Inject(KernelConfigService))
|
|
508
|
+
], ToolRegistry);
|
|
509
|
+
export { ToolRegistry };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ConnectorSession, type ToolResult, type ToolSpec } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
/**
|
|
3
|
-
* 连接器 resources 的两个内核工具(brief
|
|
3
|
+
* 连接器 resources 的两个内核工具(brief:`mcp__<slug>__list_resources`、`mcp__<slug>__read_resource {uri}`)。
|
|
4
4
|
*
|
|
5
5
|
* 设计:安装 / 刷新连接器时,连接器会话带 `listResources` 方法即视为支持 resources(不额外调用,免得多一次外连
|
|
6
6
|
* 和多一种失败),内核把这两个工具作为 `source = 'resources'` 的行写进 `connector_tools`(迁移 0013)。这样它们和
|
package/dist/tools/resources.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ToolError, } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
/**
|
|
3
|
-
* 连接器 resources 的两个内核工具(brief
|
|
3
|
+
* 连接器 resources 的两个内核工具(brief:`mcp__<slug>__list_resources`、`mcp__<slug>__read_resource {uri}`)。
|
|
4
4
|
*
|
|
5
5
|
* 设计:安装 / 刷新连接器时,连接器会话带 `listResources` 方法即视为支持 resources(不额外调用,免得多一次外连
|
|
6
6
|
* 和多一种失败),内核把这两个工具作为 `source = 'resources'` 的行写进 `connector_tools`(迁移 0013)。这样它们和
|
package/dist/tools/specs.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { ToolSpec } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
3
|
-
import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
3
|
/**
|
|
5
4
|
* 把工具定义按指纹存进 `capybara.tool_specs`(内容寻址:同一指纹只存一次,已存在不改)。
|
|
6
5
|
* `model_call` 只记 `{key, specHash}`,定义本身存这里——连接器刷新 / 插件升级改了定义之后,早先请求用过的定义
|
|
7
6
|
* 仍可按指纹取回,模型请求可由日志还原。
|
|
8
7
|
*/
|
|
9
|
-
export declare function recordToolSpecs(
|
|
8
|
+
export declare function recordToolSpecs(
|
|
9
|
+
/** The pool or a transaction (a transaction is a Kysely handle too). */
|
|
10
|
+
db: KernelSchemaDb, specs: readonly {
|
|
10
11
|
specHash: string;
|
|
11
12
|
spec: ToolSpec;
|
|
12
13
|
}[]): Promise<void>;
|
|
13
14
|
/** 按指纹取回工具定义;没有记录 → null。 */
|
|
14
|
-
export declare function loadToolSpec(db:
|
|
15
|
+
export declare function loadToolSpec(db: KernelSchemaDb, specHash: string): Promise<ToolSpec | null>;
|
package/dist/tools/specs.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* `model_call` 只记 `{key, specHash}`,定义本身存这里——连接器刷新 / 插件升级改了定义之后,早先请求用过的定义
|
|
4
4
|
* 仍可按指纹取回,模型请求可由日志还原。
|
|
5
5
|
*/
|
|
6
|
-
export async function recordToolSpecs(
|
|
6
|
+
export async function recordToolSpecs(
|
|
7
|
+
/** The pool or a transaction (a transaction is a Kysely handle too). */
|
|
8
|
+
db, specs) {
|
|
7
9
|
const unique = new Map();
|
|
8
10
|
for (const s of specs)
|
|
9
11
|
if (!unique.has(s.specHash))
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools and connectors: credentials, output archives, the builtin tools and the registry,
|
|
3
|
+
* approvals and questions (their decisions are the domain events `approval.decided` /
|
|
4
|
+
* `question.answered`), drift detection (the producer of the one-off `drift-connector` jobs the
|
|
5
|
+
* maintenance processor consumes), the breaker, connector content, the execution pipeline, org
|
|
6
|
+
* connectors and the OAuth connect flow. The periodic jobs (`ToolJobs`: the drift scan and the
|
|
7
|
+
* output cleanup) are the worker role's (`WorkerModule`).
|
|
8
|
+
*/
|
|
9
|
+
export declare class ToolsModule {
|
|
10
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
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 { ConversationAccessModule } from "../conversations/access.js";
|
|
9
|
+
import { AttachmentsModule } from "../conversations/attachments.module.js";
|
|
10
|
+
import { EventLogModule } from "../conversations/event-log.js";
|
|
11
|
+
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
12
|
+
import { QueueModule } from "../infra/queue/queue.module.js";
|
|
13
|
+
import { OrgLockModule } from "../orgs/org-lock.js";
|
|
14
|
+
import { MAINTENANCE_QUEUE_NAME } from "../runtime/maintenance-queue.js";
|
|
15
|
+
import { SubagentsModule } from "../runtime/subagents/subagents.service.js";
|
|
16
|
+
import { SandboxModule } from "../sandbox/sandbox.module.js";
|
|
17
|
+
import { SkillsModule } from "../skills/skills.module.js";
|
|
18
|
+
import { StorageModule } from "../storage/storage.module.js";
|
|
19
|
+
import { ApprovalsService } from "./approvals.service.js";
|
|
20
|
+
import { Breaker } from "./breaker.js";
|
|
21
|
+
import { BuiltinTools } from "./builtins/builtin-tools.js";
|
|
22
|
+
import { ConnectorContent } from "./connector-content.js";
|
|
23
|
+
import { ConnectorsService } from "./connectors.service.js";
|
|
24
|
+
import { Credentials } from "./credentials.js";
|
|
25
|
+
import { ToolDrift } from "./drift.js";
|
|
26
|
+
import { ConversationToolInfo } from "./info.js";
|
|
27
|
+
import { OAuthFlow } from "./oauth/flow.js";
|
|
28
|
+
import { ToolOutputs } from "./outputs.js";
|
|
29
|
+
import { ToolPipeline } from "./pipeline.js";
|
|
30
|
+
import { QuestionsService } from "./questions.service.js";
|
|
31
|
+
import { ToolRegistry } from "./registry.js";
|
|
32
|
+
/**
|
|
33
|
+
* Tools and connectors: credentials, output archives, the builtin tools and the registry,
|
|
34
|
+
* approvals and questions (their decisions are the domain events `approval.decided` /
|
|
35
|
+
* `question.answered`), drift detection (the producer of the one-off `drift-connector` jobs the
|
|
36
|
+
* maintenance processor consumes), the breaker, connector content, the execution pipeline, org
|
|
37
|
+
* connectors and the OAuth connect flow. The periodic jobs (`ToolJobs`: the drift scan and the
|
|
38
|
+
* output cleanup) are the worker role's (`WorkerModule`).
|
|
39
|
+
*/
|
|
40
|
+
let ToolsModule = class ToolsModule {
|
|
41
|
+
};
|
|
42
|
+
ToolsModule = __decorate([
|
|
43
|
+
Module({
|
|
44
|
+
imports: [
|
|
45
|
+
EventLogModule,
|
|
46
|
+
AttachmentsModule,
|
|
47
|
+
ExtensionsModule,
|
|
48
|
+
StorageModule,
|
|
49
|
+
SkillsModule,
|
|
50
|
+
OrgLockModule,
|
|
51
|
+
// the `Agent` tool's dispatch
|
|
52
|
+
SubagentsModule,
|
|
53
|
+
// the builtin sandbox and skill tools run in the conversation's sandbox
|
|
54
|
+
SandboxModule,
|
|
55
|
+
// the conversation page's tool metadata reads only what the viewer may see
|
|
56
|
+
ConversationAccessModule,
|
|
57
|
+
QueueModule.registerQueue(MAINTENANCE_QUEUE_NAME),
|
|
58
|
+
],
|
|
59
|
+
providers: [
|
|
60
|
+
Credentials,
|
|
61
|
+
ToolOutputs,
|
|
62
|
+
BuiltinTools,
|
|
63
|
+
ToolRegistry,
|
|
64
|
+
ApprovalsService,
|
|
65
|
+
QuestionsService,
|
|
66
|
+
ToolDrift,
|
|
67
|
+
Breaker,
|
|
68
|
+
ConnectorContent,
|
|
69
|
+
ToolPipeline,
|
|
70
|
+
ConnectorsService,
|
|
71
|
+
OAuthFlow,
|
|
72
|
+
ConversationToolInfo,
|
|
73
|
+
],
|
|
74
|
+
exports: [
|
|
75
|
+
Credentials,
|
|
76
|
+
ToolOutputs,
|
|
77
|
+
BuiltinTools,
|
|
78
|
+
ToolRegistry,
|
|
79
|
+
ApprovalsService,
|
|
80
|
+
QuestionsService,
|
|
81
|
+
ToolDrift,
|
|
82
|
+
Breaker,
|
|
83
|
+
ConnectorContent,
|
|
84
|
+
ToolPipeline,
|
|
85
|
+
ConnectorsService,
|
|
86
|
+
OAuthFlow,
|
|
87
|
+
ConversationToolInfo,
|
|
88
|
+
],
|
|
89
|
+
})
|
|
90
|
+
], ToolsModule);
|
|
91
|
+
export { ToolsModule };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Calls an extension with a time limit and an abort signal (plugin views, actions and file
|
|
4
|
+
* previewers): over the limit the signal aborts and the call is 504 `ui.timeout`; a throw is
|
|
5
|
+
* `failCode` (502) without echoing the extension's message. An `ApiError` thrown by `fn` passes.
|
|
6
|
+
*/
|
|
7
|
+
export declare function callExtension<T>(o: {
|
|
8
|
+
log: Pick<Logger, "warn">;
|
|
9
|
+
plugin: string;
|
|
10
|
+
what: string;
|
|
11
|
+
fields: Record<string, unknown>;
|
|
12
|
+
timeoutMs: number;
|
|
13
|
+
failCode: "ui.render_failed" | "ui.action_failed";
|
|
14
|
+
failMessage: string;
|
|
15
|
+
fn: (signal: AbortSignal) => Promise<T>;
|
|
16
|
+
}): Promise<T>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ApiError } from "../errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Calls an extension with a time limit and an abort signal (plugin views, actions and file
|
|
4
|
+
* previewers): over the limit the signal aborts and the call is 504 `ui.timeout`; a throw is
|
|
5
|
+
* `failCode` (502) without echoing the extension's message. An `ApiError` thrown by `fn` passes.
|
|
6
|
+
*/
|
|
7
|
+
export async function callExtension(o) {
|
|
8
|
+
const ac = new AbortController();
|
|
9
|
+
let timer;
|
|
10
|
+
const timeout = new Promise((resolve) => {
|
|
11
|
+
timer = setTimeout(() => {
|
|
12
|
+
ac.abort(new Error(`plugin ui ${o.what} timed out`));
|
|
13
|
+
resolve("timeout");
|
|
14
|
+
}, o.timeoutMs);
|
|
15
|
+
});
|
|
16
|
+
try {
|
|
17
|
+
const r = await Promise.race([
|
|
18
|
+
Promise.resolve()
|
|
19
|
+
.then(() => o.fn(ac.signal))
|
|
20
|
+
.then((value) => ({ value })),
|
|
21
|
+
timeout,
|
|
22
|
+
]);
|
|
23
|
+
if (r === "timeout") {
|
|
24
|
+
o.log.warn(`plugin ui ${o.what} timed out`, { ...o.fields, timeoutMs: o.timeoutMs });
|
|
25
|
+
throw new ApiError("ui.timeout", `Plugin ${o.plugin} did not respond within ${o.timeoutMs / 1000}s`);
|
|
26
|
+
}
|
|
27
|
+
return r.value;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
if (e instanceof ApiError)
|
|
31
|
+
throw e;
|
|
32
|
+
o.log.warn(`plugin ui ${o.what} failed`, { ...o.fields, err: e });
|
|
33
|
+
throw new ApiError(o.failCode, o.failMessage);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
clearTimeout(timer);
|
|
37
|
+
}
|
|
38
|
+
}
|
package/dist/ui/embed-token.d.ts
CHANGED
|
@@ -6,20 +6,21 @@ export declare const EMBED_TOKEN_TTL_SECONDS = 300;
|
|
|
6
6
|
export declare const EMBED_TOKEN_SKEW_SECONDS = 30;
|
|
7
7
|
/** HKDF 用途(keyring 派生时 info 为 `capybara:capybara-embed/1`),也是签名输入的域前缀。 */
|
|
8
8
|
export declare const EMBED_KEY_INFO = "capybara-embed/1";
|
|
9
|
+
/** Optional provider: the clock {@link EmbedTokens} issues and checks with (default `Date.now`; tests). */
|
|
10
|
+
export declare const EMBED_TOKEN_CLOCK: unique symbol;
|
|
9
11
|
/**
|
|
10
12
|
* 嵌入令牌:`base64url(JSON 声明).base64url(HMAC-SHA256(key, "capybara-embed/1." + 第一段))`。
|
|
11
13
|
* - 格式固定、没有头(没有 alg 可混淆);密钥由主密钥环经 HKDF 派生,轮换后上一把主密钥签的令牌仍可校验到过期;
|
|
12
14
|
* - 校验:严格 base64url、常量时间比较签名、逐字段核对声明、`exp` 容许 {@link EMBED_TOKEN_SKEW_SECONDS} 秒偏差、
|
|
13
15
|
* `exp` 不得超过「现在 + 有效期 + 偏差」、`plugin` 必须是调用方插件;任何一项不过都返回 null(不说明原因)。
|
|
14
|
-
* 无状态(不落库、不进 Redis):各副本用同一主密钥即可校验,不需要共享状态。
|
|
16
|
+
* 无状态(不落库、不进 Redis):各副本用同一主密钥即可校验,不需要共享状态。One provider: the UI
|
|
17
|
+
* routes issue tokens with it and every extension's `ctx` verifies them with it.
|
|
15
18
|
*/
|
|
16
19
|
export declare class EmbedTokens {
|
|
20
|
+
private readonly now;
|
|
17
21
|
private readonly current;
|
|
18
22
|
private readonly keys;
|
|
19
|
-
|
|
20
|
-
constructor(keyring: Keyring, opts?: {
|
|
21
|
-
now?: () => number;
|
|
22
|
-
});
|
|
23
|
+
constructor(keyring: Keyring, now?: () => number);
|
|
23
24
|
/** 签发:`exp` = 现在 + {@link EMBED_TOKEN_TTL_SECONDS}。 */
|
|
24
25
|
issue(c: Omit<EmbedClaims, "exp">): {
|
|
25
26
|
token: string;
|
|
@@ -29,3 +30,6 @@ export declare class EmbedTokens {
|
|
|
29
30
|
/** 校验令牌并要求它签给 `plugin`;不通过返回 null。 */
|
|
30
31
|
verify(token: unknown, plugin: string): EmbedClaims | null;
|
|
31
32
|
}
|
|
33
|
+
/** {@link EmbedTokens} on its own: the extension host (`ctx`) and the UI routes import it. */
|
|
34
|
+
export declare class EmbedTokensModule {
|
|
35
|
+
}
|