@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/drift.js
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
|
-
|
|
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
|
+
};
|
|
10
|
+
import { connectorToolKey, TOOL_TITLE_MAX, ToolError, validateToolPresentation, } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { getQueueToken } from "@nestjs/bullmq";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
13
|
import { sql } from "kysely";
|
|
3
14
|
import { ApiError } from "../errors.js";
|
|
4
15
|
import { audit } from "../identity/audit.js";
|
|
16
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
17
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
18
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
19
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
20
|
+
import { KERNEL_LOGGER } from "../infra/tokens.js";
|
|
21
|
+
import { MAINTENANCE_QUEUE_NAME } from "../runtime/maintenance-queue.js";
|
|
5
22
|
import { HIDDEN_FORMAT_RE } from "../text.js";
|
|
6
|
-
import { CredentialMissing, isOAuth } from "./credentials.js";
|
|
7
|
-
import {
|
|
23
|
+
import { CredentialMissing, Credentials, isOAuth } from "./credentials.js";
|
|
24
|
+
import { toolKeyIssue } from "./naming.js";
|
|
8
25
|
import { redactDeep, redactorFor } from "./redact.js";
|
|
9
|
-
import { canonicalJson, policyFromAnnotations, specHash } from "./registry.js";
|
|
26
|
+
import { canonicalJson, policyFromAnnotations, specHash, ToolRegistry } from "./registry.js";
|
|
10
27
|
import { resourceToolSpecs } from "./resources.js";
|
|
11
28
|
import { recordToolSpecs } from "./specs.js";
|
|
12
29
|
/**
|
|
@@ -20,15 +37,12 @@ import { recordToolSpecs } from "./specs.js";
|
|
|
20
37
|
* 连接器从未拍过快照(`tools_synced_at` 为空且没有工具行,即 OAuth 授权码连接器安装时不 listTools,A16)时,
|
|
21
38
|
* 首个快照按安装处理(直接启用)。
|
|
22
39
|
*
|
|
23
|
-
*
|
|
40
|
+
* 触发:周期扫描(`drift-scan`,每 `tools.driftIntervalHours` 一次的 `@LockedInterval`,见 jobs.ts)、连接器在会话中报告工具清单变了(MCP
|
|
24
41
|
* `notifications/tools/list_changed`)、管理员手动刷新(`ConnectorsService.refresh`,走同一套比对)。
|
|
25
42
|
* 授权(`tool_grants` / `conversation_tool_grants`)按 spec_hash 比对(D8),复核通过采用新指纹后旧授权自然失效。
|
|
26
43
|
*/
|
|
27
|
-
|
|
28
|
-
export
|
|
29
|
-
export const DRIFT_SCHEDULER_ID = "drift-scan-interval";
|
|
30
|
-
/** 单个连接器的漂移检查任务名。 */
|
|
31
|
-
export const DRIFT_CONNECTOR_JOB = "drift-connector";
|
|
44
|
+
import { DRIFT_CONNECTOR_JOB } from "./job-ids.js";
|
|
45
|
+
export { DRIFT_CONNECTOR_JOB, DRIFT_SCAN_JOB, DRIFT_SCHEDULER_ID } from "./job-ids.js";
|
|
32
46
|
/**
|
|
33
47
|
* list_changed 触发的检查:jobId 按连接器与分钟桶去重(同一分钟内多次通知只检查一次;connectorId 为 UUID,不含 `:`)。
|
|
34
48
|
*/
|
|
@@ -91,7 +105,7 @@ export function snapshot(slug, specs, resources) {
|
|
|
91
105
|
...(isObj(s.connectorData) && { connectorData: s.connectorData }),
|
|
92
106
|
...displayFields(s),
|
|
93
107
|
};
|
|
94
|
-
let issue = toolKeyIssue(
|
|
108
|
+
let issue = toolKeyIssue(connectorToolKey(slug, name));
|
|
95
109
|
if (!issue && !isObj(s.inputSchema))
|
|
96
110
|
issue = "Tool inputSchema must be an object";
|
|
97
111
|
if (issue)
|
|
@@ -108,7 +122,7 @@ export function snapshot(slug, specs, resources) {
|
|
|
108
122
|
});
|
|
109
123
|
continue;
|
|
110
124
|
}
|
|
111
|
-
const issue = toolKeyIssue(
|
|
125
|
+
const issue = toolKeyIssue(connectorToolKey(slug, spec.name));
|
|
112
126
|
if (issue)
|
|
113
127
|
issues.push({ name: spec.name, reason: issue });
|
|
114
128
|
rows.push({ name: spec.name, spec, specHash: specHash(spec), issue, source: "resources" });
|
|
@@ -158,7 +172,7 @@ const displayOf = (spec) => {
|
|
|
158
172
|
};
|
|
159
173
|
/** 工具当前不能启用的原因(视图、启用与复核校验共用)。 */
|
|
160
174
|
export function toolIssue(slug, spec) {
|
|
161
|
-
const keyIssue = toolKeyIssue(
|
|
175
|
+
const keyIssue = toolKeyIssue(connectorToolKey(slug, spec.name));
|
|
162
176
|
if (keyIssue)
|
|
163
177
|
return keyIssue;
|
|
164
178
|
if (!isObj(spec.inputSchema))
|
|
@@ -167,30 +181,28 @@ export function toolIssue(slug, spec) {
|
|
|
167
181
|
}
|
|
168
182
|
/** 任务保留时长:完成的 jobId 留一段时间,同一桶内的重复投递被 BullMQ 按 jobId 去重。 */
|
|
169
183
|
const KEEP_FAILED = { age: 86_400 };
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
await this.check(orgId, connectorId, trigger);
|
|
189
|
-
});
|
|
190
|
-
}
|
|
184
|
+
let ToolDrift = class ToolDrift {
|
|
185
|
+
db;
|
|
186
|
+
registry;
|
|
187
|
+
credentials;
|
|
188
|
+
config;
|
|
189
|
+
log;
|
|
190
|
+
queue;
|
|
191
|
+
txHost;
|
|
192
|
+
constructor(db, registry, credentials, config, log,
|
|
193
|
+
/** The maintenance queue's producer (`drift-connector` jobs). */
|
|
194
|
+
queue, txHost) {
|
|
195
|
+
this.db = db;
|
|
196
|
+
this.registry = registry;
|
|
197
|
+
this.credentials = credentials;
|
|
198
|
+
this.config = config;
|
|
199
|
+
this.log = log;
|
|
200
|
+
this.queue = queue;
|
|
201
|
+
this.txHost = txHost;
|
|
191
202
|
}
|
|
203
|
+
/** The scan period (`tools.driftIntervalHours`). */
|
|
192
204
|
intervalMs() {
|
|
193
|
-
return this.
|
|
205
|
+
return this.config.get().tools.driftIntervalHours * 3_600_000;
|
|
194
206
|
}
|
|
195
207
|
/**
|
|
196
208
|
* 打开一次会话拉工具清单,无论成败都关闭会话;会话带 `listResources` 即视为支持 resources。
|
|
@@ -200,11 +212,11 @@ export class ToolDrift {
|
|
|
200
212
|
async listTools(connector, endpoint, auth, logCtx,
|
|
201
213
|
/** 收到 401:OAuth 连接器在刷新锁内刷新(参数为最后一次注入的鉴权)。 */
|
|
202
214
|
onUnauthorized = async () => { }) {
|
|
203
|
-
const c = this.
|
|
215
|
+
const c = this.registry.findConnector(connector);
|
|
204
216
|
if (!c) {
|
|
205
217
|
throw new ApiError("connector.connect_failed", `The connector ${connector} is not installed`);
|
|
206
218
|
}
|
|
207
|
-
const signal = AbortSignal.timeout(this.
|
|
219
|
+
const signal = AbortSignal.timeout(this.config.get().tools.timeoutMs);
|
|
208
220
|
const injected = [];
|
|
209
221
|
const tracked = async () => {
|
|
210
222
|
const inj = await auth();
|
|
@@ -230,20 +242,21 @@ export class ToolDrift {
|
|
|
230
242
|
if (e instanceof CredentialMissing)
|
|
231
243
|
throw e;
|
|
232
244
|
// 日志经 logger 打码(凭据值已在构造注入时登记)
|
|
233
|
-
this.
|
|
245
|
+
this.log.warn("connector listTools failed", { ...logCtx, connector, err: e });
|
|
234
246
|
throw new ApiError("connector.connect_failed", connectFailedMessage(e, redactorFor(injected)));
|
|
235
247
|
}
|
|
236
248
|
finally {
|
|
237
249
|
await session?.close().catch((e) => {
|
|
238
|
-
this.
|
|
250
|
+
this.log.warn("connector session close failed", { ...logCtx, connector, err: e });
|
|
239
251
|
});
|
|
240
252
|
}
|
|
241
253
|
}
|
|
242
254
|
/**
|
|
243
|
-
*
|
|
255
|
+
* 把新快照与当前工具行比对并写入(调用方已在事务内锁住连接器行:`mandatory`);返回按名排序的变化。
|
|
244
256
|
* 规则见文件头。待复核的新定义也写进 `tool_specs`(内容寻址,只增不改)。
|
|
245
257
|
*/
|
|
246
|
-
async apply(
|
|
258
|
+
async apply(app, rows) {
|
|
259
|
+
const t = this.db.db;
|
|
247
260
|
const current = await t
|
|
248
261
|
.selectFrom("connector_tools")
|
|
249
262
|
.select([
|
|
@@ -341,7 +354,7 @@ export class ToolDrift {
|
|
|
341
354
|
.where("name", "=", r.name)
|
|
342
355
|
.execute();
|
|
343
356
|
// No audit row (the model sees nothing new), but leave a trace for operators.
|
|
344
|
-
this.
|
|
357
|
+
this.log.info("connector tool display updated", {
|
|
345
358
|
event: "connector.tool_display_updated",
|
|
346
359
|
connectorId: app.id,
|
|
347
360
|
tool: r.name,
|
|
@@ -393,8 +406,8 @@ export class ToolDrift {
|
|
|
393
406
|
* 连不上 / 都失败 → 跳过(不改快照,下个周期或下次通知再查)。
|
|
394
407
|
*/
|
|
395
408
|
async check(orgId, connectorId, trigger) {
|
|
396
|
-
const
|
|
397
|
-
const app = (await db
|
|
409
|
+
const log = this.log;
|
|
410
|
+
const app = (await this.db
|
|
398
411
|
.selectFrom("connectors")
|
|
399
412
|
.select([
|
|
400
413
|
"id",
|
|
@@ -415,7 +428,7 @@ export class ToolDrift {
|
|
|
415
428
|
return { status: "skipped", reason: "not_found" };
|
|
416
429
|
if (app.status !== "active")
|
|
417
430
|
return { status: "skipped", reason: "inactive" };
|
|
418
|
-
if (!this.
|
|
431
|
+
if (!this.registry.findConnector(app.connector)) {
|
|
419
432
|
log.warn("tool drift check skipped: connector not installed", {
|
|
420
433
|
orgId,
|
|
421
434
|
connectorId,
|
|
@@ -427,7 +440,7 @@ export class ToolDrift {
|
|
|
427
440
|
const personal = auth.type !== "none" && !isOAuth(auth) && auth.ownership === "personal";
|
|
428
441
|
const personalOAuth = auth.type === "oauth_code";
|
|
429
442
|
const accounts = personal || personalOAuth
|
|
430
|
-
? await this.
|
|
443
|
+
? await this.credentials.personalHolders(orgId, connectorId, PERSONAL_CANDIDATES)
|
|
431
444
|
: [app.created_by];
|
|
432
445
|
if (accounts.length === 0) {
|
|
433
446
|
log.info("tool drift check skipped: no member credential", { orgId, connectorId });
|
|
@@ -437,7 +450,7 @@ export class ToolDrift {
|
|
|
437
450
|
let reason = "no_credential";
|
|
438
451
|
for (const accountId of accounts) {
|
|
439
452
|
try {
|
|
440
|
-
listed = await this.listTools(app.connector, app.endpoint, () => this.
|
|
453
|
+
listed = await this.listTools(app.connector, app.endpoint, () => this.credentials.injection(orgId, connectorId, auth, accountId), { orgId, connectorId, trigger }, (last) => this.credentials.onUnauthorized(orgId, connectorId, auth, accountId, last));
|
|
441
454
|
break;
|
|
442
455
|
}
|
|
443
456
|
catch (e) {
|
|
@@ -455,53 +468,57 @@ export class ToolDrift {
|
|
|
455
468
|
return { status: "skipped", reason };
|
|
456
469
|
}
|
|
457
470
|
const { rows } = snapshot(app.slug, listed.specs, listed.resources);
|
|
458
|
-
const changes = await
|
|
459
|
-
const locked = await t
|
|
460
|
-
.selectFrom("connectors")
|
|
461
|
-
.select(["id", "tools_synced_at"])
|
|
462
|
-
.where("id", "=", connectorId)
|
|
463
|
-
.where("deleted_at", "is", null)
|
|
464
|
-
.where("status", "=", "active")
|
|
465
|
-
.forUpdate()
|
|
466
|
-
.executeTakeFirst();
|
|
467
|
-
if (!locked)
|
|
468
|
-
return null;
|
|
469
|
-
const c = await this.apply(t, locked, rows);
|
|
470
|
-
if (c.added.length + c.changed.length + c.removed.length > 0) {
|
|
471
|
-
await audit(t, {
|
|
472
|
-
orgId,
|
|
473
|
-
action: "connector.tools_drifted",
|
|
474
|
-
target: connectorId,
|
|
475
|
-
detail: {
|
|
476
|
-
added: c.added.length,
|
|
477
|
-
changed: c.changed.length,
|
|
478
|
-
removed: c.removed.length,
|
|
479
|
-
trigger,
|
|
480
|
-
},
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
return c;
|
|
484
|
-
});
|
|
471
|
+
const changes = await this.applyChecked(orgId, connectorId, trigger, rows);
|
|
485
472
|
if (!changes)
|
|
486
473
|
return { status: "skipped", reason: "inactive" };
|
|
487
474
|
return { status: "checked", changes };
|
|
488
475
|
}
|
|
476
|
+
/** The locked compare-and-write of {@link check}, audited when something changed. */
|
|
477
|
+
async applyChecked(orgId, connectorId, trigger, rows) {
|
|
478
|
+
const t = this.db.db;
|
|
479
|
+
const locked = await t
|
|
480
|
+
.selectFrom("connectors")
|
|
481
|
+
.select(["id", "tools_synced_at"])
|
|
482
|
+
.where("id", "=", connectorId)
|
|
483
|
+
.where("deleted_at", "is", null)
|
|
484
|
+
.where("status", "=", "active")
|
|
485
|
+
.forUpdate()
|
|
486
|
+
.executeTakeFirst();
|
|
487
|
+
if (!locked)
|
|
488
|
+
return null;
|
|
489
|
+
const c = await this.apply(locked, rows);
|
|
490
|
+
if (c.added.length + c.changed.length + c.removed.length > 0) {
|
|
491
|
+
await audit(t, {
|
|
492
|
+
orgId,
|
|
493
|
+
action: "connector.tools_drifted",
|
|
494
|
+
target: connectorId,
|
|
495
|
+
detail: {
|
|
496
|
+
added: c.added.length,
|
|
497
|
+
changed: c.changed.length,
|
|
498
|
+
removed: c.removed.length,
|
|
499
|
+
trigger,
|
|
500
|
+
},
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
return c;
|
|
504
|
+
}
|
|
489
505
|
/**
|
|
490
506
|
* 连接器在会话中报告工具清单变了:投递一次该连接器的检查(jobId 按分钟桶去重)。投递失败只记日志。
|
|
491
507
|
*/
|
|
492
508
|
async onToolsChanged(orgId, connectorId) {
|
|
493
|
-
|
|
494
|
-
if (!m || connectorId.includes(":"))
|
|
509
|
+
if (connectorId.includes(":"))
|
|
495
510
|
return;
|
|
496
511
|
try {
|
|
497
|
-
await
|
|
512
|
+
await this.queue.add(DRIFT_CONNECTOR_JOB, { orgId, connectorId, trigger: "list_changed" }, {
|
|
498
513
|
jobId: listChangedJobId(connectorId),
|
|
514
|
+
// a check runs once: a failure waits for the next trigger (the queue default retries)
|
|
515
|
+
attempts: 1,
|
|
499
516
|
removeOnComplete: { age: 3_600 },
|
|
500
517
|
removeOnFail: KEEP_FAILED,
|
|
501
518
|
});
|
|
502
519
|
}
|
|
503
520
|
catch (err) {
|
|
504
|
-
this.
|
|
521
|
+
this.log.warn("cannot enqueue tool drift check", { orgId, connectorId, err });
|
|
505
522
|
}
|
|
506
523
|
}
|
|
507
524
|
/**
|
|
@@ -509,12 +526,9 @@ export class ToolDrift {
|
|
|
509
526
|
* jobId 按周期桶去重——即使扫描在多个副本上重复执行,每个连接器每周期也只检查一次。返回投递数。
|
|
510
527
|
*/
|
|
511
528
|
async scan() {
|
|
512
|
-
const m = this.d.maintenance;
|
|
513
|
-
if (!m)
|
|
514
|
-
return 0;
|
|
515
529
|
const interval = this.intervalMs();
|
|
516
530
|
const bucket = Math.floor(Date.now() / interval);
|
|
517
|
-
const apps = await this.
|
|
531
|
+
const apps = await this.db
|
|
518
532
|
.selectFrom("connectors")
|
|
519
533
|
.select(["id", "org_id"])
|
|
520
534
|
.where("deleted_at", "is", null)
|
|
@@ -528,12 +542,30 @@ export class ToolDrift {
|
|
|
528
542
|
for (const a of apps) {
|
|
529
543
|
if (a.id.includes(":"))
|
|
530
544
|
continue;
|
|
531
|
-
await
|
|
545
|
+
await this.queue.add(DRIFT_CONNECTOR_JOB, { orgId: a.org_id, connectorId: a.id, trigger: "schedule" }, {
|
|
532
546
|
jobId: driftScanJobId(a.id, bucket),
|
|
547
|
+
attempts: 1,
|
|
533
548
|
removeOnComplete: { age: Math.ceil(interval / 1000) },
|
|
534
549
|
removeOnFail: KEEP_FAILED,
|
|
535
550
|
});
|
|
536
551
|
}
|
|
537
552
|
return apps.length;
|
|
538
553
|
}
|
|
539
|
-
}
|
|
554
|
+
};
|
|
555
|
+
__decorate([
|
|
556
|
+
Transactional({ propagation: "mandatory" })
|
|
557
|
+
], ToolDrift.prototype, "apply", null);
|
|
558
|
+
__decorate([
|
|
559
|
+
Transactional()
|
|
560
|
+
], ToolDrift.prototype, "applyChecked", null);
|
|
561
|
+
ToolDrift = __decorate([
|
|
562
|
+
Injectable(),
|
|
563
|
+
__param(0, Inject(KernelDb)),
|
|
564
|
+
__param(1, Inject(ToolRegistry)),
|
|
565
|
+
__param(2, Inject(Credentials)),
|
|
566
|
+
__param(3, Inject(KernelConfigService)),
|
|
567
|
+
__param(4, Inject(KERNEL_LOGGER)),
|
|
568
|
+
__param(5, Inject(getQueueToken(MAINTENANCE_QUEUE_NAME))),
|
|
569
|
+
__param(6, Inject(TransactionHost))
|
|
570
|
+
], ToolDrift);
|
|
571
|
+
export { ToolDrift };
|
|
@@ -33,7 +33,7 @@ export class ElicitationSuspended extends Error {
|
|
|
33
33
|
}
|
|
34
34
|
/** 不能展示的 elicitation 被拒绝时附在工具结果后的说明(模型可见,英文)。 */
|
|
35
35
|
export const UNSUPPORTED_ELICITATION_NOTE = "The app asked the user for input that cannot be shown in this client, so the request was declined";
|
|
36
|
-
const unsupportedNote = (why) => `[${UNSUPPORTED_ELICITATION_NOTE} (${why}). If the call needs that input, ask the user for it with
|
|
36
|
+
const unsupportedNote = (why) => `[${UNSUPPORTED_ELICITATION_NOTE} (${why}). If the call needs that input, ask the user for it with AskUserQuestion and pass it as tool arguments, or try another approach.]`;
|
|
37
37
|
/** URL 模式表单里「已完成」开关的字段名。 */
|
|
38
38
|
export const URL_COMPLETED_FIELD = "completed";
|
|
39
39
|
/** 表单标题(远端给的 message)最多字符数。 */
|
package/dist/tools/info.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import
|
|
1
|
+
import { type LocalizedName } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { ConversationAccess } from "../conversations/access.js";
|
|
3
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
4
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { ToolRegistry } from "./registry.js";
|
|
3
6
|
/**
|
|
4
7
|
* Tool presentation metadata for the conversation page (UI refresh B, design spec §6.16.9): the
|
|
5
8
|
* kind picks the row verb and the group counts, the title and key arguments the row's wording.
|
|
@@ -9,16 +12,32 @@ export type ToolKind = "command" | "read" | "edit" | "search" | "connector" | "m
|
|
|
9
12
|
export interface ToolInfo {
|
|
10
13
|
/** The model-visible tool key, as asked for. */
|
|
11
14
|
key: string;
|
|
15
|
+
/**
|
|
16
|
+
* Set only for a release-candidate builtin key (old history, tool naming spec §9): the current
|
|
17
|
+
* tool it stands for. Everything else describes that tool, with `keyArgs` in the old parameter
|
|
18
|
+
* names the logged input carries. Pages map a call's name through it (the `Agent` row, labels).
|
|
19
|
+
*/
|
|
20
|
+
aliasOf?: string;
|
|
12
21
|
/** The declared display title (`ToolSpec.title`), or null. */
|
|
13
22
|
title: string | null;
|
|
14
23
|
kind: ToolKind;
|
|
24
|
+
/** True exactly for the builtin tools that run in the conversation's sandbox. */
|
|
25
|
+
sandbox: boolean;
|
|
15
26
|
/** The declared key arguments (`ToolSpec.keyArgs`), or []. */
|
|
16
27
|
keyArgs: string[];
|
|
28
|
+
/**
|
|
29
|
+
* The local tool name parsed from a connector or extension key (`mcp__crm__delete` -> `delete`),
|
|
30
|
+
* shown in brackets after the source's display name; null for builtins and unparsable keys.
|
|
31
|
+
*/
|
|
32
|
+
tool: string | null;
|
|
17
33
|
source: {
|
|
18
34
|
kind: "builtin";
|
|
19
|
-
}
|
|
35
|
+
}
|
|
36
|
+
/** `displayName`: the plugin's catalog display name, else its name. */
|
|
37
|
+
| {
|
|
20
38
|
kind: "extension";
|
|
21
39
|
name: string;
|
|
40
|
+
displayName: LocalizedName;
|
|
22
41
|
} | {
|
|
23
42
|
kind: "connector";
|
|
24
43
|
id: string;
|
|
@@ -29,18 +48,17 @@ export interface ToolInfo {
|
|
|
29
48
|
kind: "unknown";
|
|
30
49
|
};
|
|
31
50
|
}
|
|
32
|
-
|
|
33
|
-
export declare const BUILTIN_TOOL_KINDS: Readonly<Record<string, ToolKind>>;
|
|
51
|
+
export { BUILTIN_TOOL_KINDS } from "./builtin-names.js";
|
|
34
52
|
/** At most this many keys per request, each at most {@link TOOL_INFO_KEY_MAX} characters. */
|
|
35
53
|
export declare const TOOL_INFO_MAX_KEYS = 100;
|
|
36
54
|
export declare const TOOL_INFO_KEY_MAX = 200;
|
|
37
55
|
export interface ToolInfoDeps {
|
|
38
|
-
db:
|
|
56
|
+
db: KernelSchemaDb;
|
|
39
57
|
registry: Pick<ToolRegistry, "builtinSpecs" | "extensionToolSpecs">;
|
|
40
58
|
}
|
|
41
59
|
/**
|
|
42
60
|
* Presentation metadata for `keys` in this org, in request order with repeats dropped. Builtins
|
|
43
|
-
* by name;
|
|
61
|
+
* by name (a release-candidate builtin key as its current tool, with `aliasOf`); `plugin__<plugin>__<tool>` keys as a loaded extension's registration, and `mcp__<slug>__<tool>` keys as a live
|
|
44
62
|
* connector's current stored tool (its reviewed definition, never a pending one). Anything else
|
|
45
63
|
* comes back as an unknown plain tool.
|
|
46
64
|
*
|
|
@@ -55,13 +73,14 @@ export interface ToolInfoDeps {
|
|
|
55
73
|
* here it only changes the label.
|
|
56
74
|
*/
|
|
57
75
|
export declare function toolInfo(deps: ToolInfoDeps, orgId: string, keys: readonly string[]): Promise<ToolInfo[]>;
|
|
58
|
-
export interface ConversationToolInfoDeps extends ToolInfoDeps {
|
|
59
|
-
/** Conversation visibility (the same rule as the events API: `ConversationsService.isAccessible`). */
|
|
60
|
-
isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
|
|
61
|
-
}
|
|
62
76
|
/** `GET /conversations/:id/tools`: {@link toolInfo} for a conversation the viewer can read. */
|
|
63
77
|
export declare class ConversationToolInfo {
|
|
64
|
-
private readonly
|
|
65
|
-
|
|
78
|
+
private readonly db;
|
|
79
|
+
private readonly registry;
|
|
80
|
+
/** Conversation visibility (the same rule as the events API). */
|
|
81
|
+
private readonly access;
|
|
82
|
+
constructor(db: KernelDb, registry: Pick<ToolRegistry, "builtinSpecs" | "extensionToolSpecs">,
|
|
83
|
+
/** Conversation visibility (the same rule as the events API). */
|
|
84
|
+
access: Pick<ConversationAccess, "isAccessible">);
|
|
66
85
|
get(orgId: string, conversationId: string, viewerAccountId: string, keys: readonly string[]): Promise<ToolInfo[]>;
|
|
67
86
|
}
|
package/dist/tools/info.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
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
|
+
};
|
|
10
|
+
import { connectorToolKey, extensionToolKey, parseToolKey, } from "@capybara-hq/plugin-sdk";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { ConversationAccess } from "../conversations/access.js";
|
|
1
13
|
import { ApiError } from "../errors.js";
|
|
14
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
2
15
|
import { UUID_RE } from "../ui/registry.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
sandbox_write: "edit",
|
|
9
|
-
sandbox_edit: "edit",
|
|
10
|
-
sandbox_glob: "search",
|
|
11
|
-
sandbox_grep: "search",
|
|
12
|
-
sandbox_deliver: "tool",
|
|
13
|
-
tool_search: "meta",
|
|
14
|
-
skill_load: "meta",
|
|
15
|
-
skill_write: "meta",
|
|
16
|
-
read_tool_output: "meta",
|
|
17
|
-
ask_user: "meta",
|
|
18
|
-
};
|
|
16
|
+
import { BUILTIN_TOOL_KINDS, SANDBOX_TOOL_NAMES } from "./builtin-names.js";
|
|
17
|
+
import { pluginDisplayNames } from "./display-names.js";
|
|
18
|
+
import { isLegacyBuiltinKey, LEGACY_BUILTINS } from "./legacy-keys.js";
|
|
19
|
+
import { ToolRegistry } from "./registry.js";
|
|
20
|
+
export { BUILTIN_TOOL_KINDS } from "./builtin-names.js";
|
|
19
21
|
/** At most this many keys per request, each at most {@link TOOL_INFO_KEY_MAX} characters. */
|
|
20
22
|
export const TOOL_INFO_MAX_KEYS = 100;
|
|
21
23
|
export const TOOL_INFO_KEY_MAX = 200;
|
|
@@ -25,7 +27,7 @@ const display = (spec) => ({
|
|
|
25
27
|
});
|
|
26
28
|
/**
|
|
27
29
|
* Presentation metadata for `keys` in this org, in request order with repeats dropped. Builtins
|
|
28
|
-
* by name;
|
|
30
|
+
* by name (a release-candidate builtin key as its current tool, with `aliasOf`); `plugin__<plugin>__<tool>` keys as a loaded extension's registration, and `mcp__<slug>__<tool>` keys as a live
|
|
29
31
|
* connector's current stored tool (its reviewed definition, never a pending one). Anything else
|
|
30
32
|
* comes back as an unknown plain tool.
|
|
31
33
|
*
|
|
@@ -42,17 +44,13 @@ const display = (spec) => ({
|
|
|
42
44
|
export async function toolInfo(deps, orgId, keys) {
|
|
43
45
|
const unique = [...new Set(keys)];
|
|
44
46
|
const builtins = new Map(deps.registry.builtinSpecs().map((s) => [s.name, s]));
|
|
45
|
-
const extensions = new Map(deps.registry.extensionToolSpecs().map((t) => [
|
|
46
|
-
const split = (key) => {
|
|
47
|
-
const i = key.indexOf(KEY_SEPARATOR);
|
|
48
|
-
return i > 0 ? [key.slice(0, i), key.slice(i + KEY_SEPARATOR.length)] : null;
|
|
49
|
-
};
|
|
47
|
+
const extensions = new Map(deps.registry.extensionToolSpecs().map((t) => [extensionToolKey(t.plugin, t.spec.name), t]));
|
|
50
48
|
const slugs = [
|
|
51
49
|
...new Set(unique.flatMap((k) => {
|
|
52
50
|
if (builtins.has(k) || extensions.has(k))
|
|
53
51
|
return [];
|
|
54
|
-
const p =
|
|
55
|
-
return p ? [p
|
|
52
|
+
const p = parseToolKey(k);
|
|
53
|
+
return p?.kind === "connector" ? [p.slug] : [];
|
|
56
54
|
})),
|
|
57
55
|
];
|
|
58
56
|
const connectorRows = slugs.length === 0
|
|
@@ -65,15 +63,37 @@ export async function toolInfo(deps, orgId, keys) {
|
|
|
65
63
|
.where("c.deleted_at", "is", null)
|
|
66
64
|
.where("c.slug", "in", slugs)
|
|
67
65
|
.execute();
|
|
68
|
-
const connectorTools = new Map(connectorRows.map((r) => [
|
|
66
|
+
const connectorTools = new Map(connectorRows.map((r) => [connectorToolKey(r.slug, r.tool), r]));
|
|
67
|
+
const displayNames = await pluginDisplayNames(deps.db, unique.flatMap((k) => {
|
|
68
|
+
const e = extensions.get(k);
|
|
69
|
+
return e ? [e.plugin] : [];
|
|
70
|
+
}));
|
|
71
|
+
const localTool = (key) => {
|
|
72
|
+
const p = parseToolKey(key);
|
|
73
|
+
return p && p.kind !== "builtin" ? p.tool : null;
|
|
74
|
+
};
|
|
75
|
+
const builtinInfo = (key, name, spec) => ({
|
|
76
|
+
key,
|
|
77
|
+
...display(spec),
|
|
78
|
+
kind: BUILTIN_TOOL_KINDS[name] ?? "tool",
|
|
79
|
+
sandbox: SANDBOX_TOOL_NAMES.includes(name),
|
|
80
|
+
tool: null,
|
|
81
|
+
source: { kind: "builtin" },
|
|
82
|
+
});
|
|
69
83
|
return unique.map((key) => {
|
|
70
84
|
const b = builtins.get(key);
|
|
71
|
-
if (b)
|
|
85
|
+
if (b)
|
|
86
|
+
return builtinInfo(key, key, b);
|
|
87
|
+
const legacy = isLegacyBuiltinKey(key) ? LEGACY_BUILTINS[key] : undefined;
|
|
88
|
+
const current = legacy && builtins.get(legacy.name);
|
|
89
|
+
if (legacy && current) {
|
|
90
|
+
// the logged input of an rc call names the old parameters: key arguments in those names
|
|
91
|
+
const oldName = new Map(Object.entries(legacy.params).map(([o, n]) => [n, o]));
|
|
92
|
+
const info = builtinInfo(key, legacy.name, current);
|
|
72
93
|
return {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
source: { kind: "builtin" },
|
|
94
|
+
...info,
|
|
95
|
+
aliasOf: legacy.name,
|
|
96
|
+
keyArgs: info.keyArgs.map((a) => oldName.get(a) ?? a),
|
|
77
97
|
};
|
|
78
98
|
}
|
|
79
99
|
const e = extensions.get(key);
|
|
@@ -82,7 +102,13 @@ export async function toolInfo(deps, orgId, keys) {
|
|
|
82
102
|
key,
|
|
83
103
|
...display(e.spec),
|
|
84
104
|
kind: "tool",
|
|
85
|
-
|
|
105
|
+
sandbox: false,
|
|
106
|
+
tool: e.spec.name,
|
|
107
|
+
source: {
|
|
108
|
+
kind: "extension",
|
|
109
|
+
name: e.plugin,
|
|
110
|
+
displayName: displayNames.get(e.plugin) ?? { zh: e.plugin, en: e.plugin },
|
|
111
|
+
},
|
|
86
112
|
};
|
|
87
113
|
const c = connectorTools.get(key);
|
|
88
114
|
if (c) {
|
|
@@ -91,23 +117,46 @@ export async function toolInfo(deps, orgId, keys) {
|
|
|
91
117
|
key,
|
|
92
118
|
...display(c.spec),
|
|
93
119
|
kind: "connector",
|
|
120
|
+
sandbox: false,
|
|
121
|
+
tool: c.tool,
|
|
94
122
|
source: { kind: "connector", id: c.id, name: c.name },
|
|
95
123
|
};
|
|
96
124
|
}
|
|
97
|
-
return {
|
|
125
|
+
return {
|
|
126
|
+
key,
|
|
127
|
+
title: null,
|
|
128
|
+
kind: "tool",
|
|
129
|
+
sandbox: false,
|
|
130
|
+
keyArgs: [],
|
|
131
|
+
tool: localTool(key),
|
|
132
|
+
source: { kind: "unknown" },
|
|
133
|
+
};
|
|
98
134
|
});
|
|
99
135
|
}
|
|
100
136
|
/** `GET /conversations/:id/tools`: {@link toolInfo} for a conversation the viewer can read. */
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
137
|
+
let ConversationToolInfo = class ConversationToolInfo {
|
|
138
|
+
db;
|
|
139
|
+
registry;
|
|
140
|
+
access;
|
|
141
|
+
constructor(db, registry,
|
|
142
|
+
/** Conversation visibility (the same rule as the events API). */
|
|
143
|
+
access) {
|
|
144
|
+
this.db = db;
|
|
145
|
+
this.registry = registry;
|
|
146
|
+
this.access = access;
|
|
105
147
|
}
|
|
106
148
|
async get(orgId, conversationId, viewerAccountId, keys) {
|
|
107
149
|
if (!UUID_RE.test(conversationId) ||
|
|
108
|
-
!(await this.
|
|
150
|
+
!(await this.access.isAccessible(orgId, conversationId, viewerAccountId))) {
|
|
109
151
|
throw new ApiError("conversation.not_found", "Conversation not found");
|
|
110
152
|
}
|
|
111
|
-
return toolInfo(this.
|
|
153
|
+
return toolInfo({ db: this.db.db, registry: this.registry }, orgId, keys);
|
|
112
154
|
}
|
|
113
|
-
}
|
|
155
|
+
};
|
|
156
|
+
ConversationToolInfo = __decorate([
|
|
157
|
+
Injectable(),
|
|
158
|
+
__param(0, Inject(KernelDb)),
|
|
159
|
+
__param(1, Inject(ToolRegistry)),
|
|
160
|
+
__param(2, Inject(ConversationAccess))
|
|
161
|
+
], ConversationToolInfo);
|
|
162
|
+
export { ConversationToolInfo };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** The periodic drift scan (`@LockedInterval`, tools/jobs.ts). */
|
|
2
|
+
export declare const DRIFT_SCAN_JOB = "drift-scan";
|
|
3
|
+
/** The BullMQ repeatable scheduler the scan had before it became `@LockedInterval` (retired). */
|
|
4
|
+
export declare const DRIFT_SCHEDULER_ID = "drift-scan-interval";
|
|
5
|
+
/**
|
|
6
|
+
* 单个连接器的漂移检查任务名(维护队列上的一次性任务:生产方是 `ToolDrift`,消费方是
|
|
7
|
+
* `MaintenanceProcessor`)。
|
|
8
|
+
*/
|
|
9
|
+
export declare const DRIFT_CONNECTOR_JOB = "drift-connector";
|
|
10
|
+
/** The hourly cleanup of expired tool output archives (`@LockedCron`, tools/jobs.ts). */
|
|
11
|
+
export declare const OUTPUT_CLEANUP_JOB = "output-cleanup";
|
|
12
|
+
/** The BullMQ repeatable scheduler the cleanup had before it became `@LockedCron` (retired). */
|
|
13
|
+
export declare const OUTPUT_CLEANUP_SCHEDULER_ID = "output-cleanup-hourly";
|