@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap.json +10 -6
- package/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +179 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +261 -329
- package/dist/agents/definition.d.ts +8 -0
- package/dist/agents/definition.js +8 -0
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +20 -4
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +323 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -0
- package/dist/catalog/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +30 -13
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +2 -2
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +60 -82
- package/dist/channels/outbound.js +165 -193
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +16 -1
- package/dist/config/schema.js +54 -7
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +10 -10
- package/dist/conversations/artifacts.js +35 -9
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +28 -18
- package/dist/conversations/event-log.js +74 -27
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -62
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +2 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/run-replay.d.ts +56 -8
- package/dist/evals/run-replay.js +140 -80
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -120
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +96 -42
- package/dist/extensions/bootstrap.js +303 -155
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +52 -47
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +85 -57
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +19 -12
- package/dist/index.js +13 -8
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +41 -10
- package/dist/log.js +91 -17
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +14 -8
- package/dist/orgs/settings.service.js +75 -46
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- package/dist/runtime/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +7 -0
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +45 -74
- package/dist/runtime/maintenance.js +139 -136
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +24 -57
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- package/dist/runtime/run-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +26 -17
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +121 -75
- package/dist/runtime/run-worker.js +340 -225
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +4 -4
- package/dist/runtime/subagents/definition.js +2 -2
- package/dist/runtime/subagents/dispatch.d.ts +87 -6
- package/dist/runtime/subagents/dispatch.js +135 -140
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +1 -1
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +3 -3
- package/dist/runtime/subagents/roster.js +1 -1
- package/dist/runtime/subagents/skill-fork.d.ts +6 -7
- package/dist/runtime/subagents/skill-fork.js +16 -5
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -99
- package/dist/runtime/waits.d.ts +125 -57
- package/dist/runtime/waits.js +431 -208
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +33 -20
- package/dist/skills/catalog.js +96 -53
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +28 -18
- package/dist/skills/changes.service.js +421 -364
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invoke.d.ts +16 -15
- package/dist/skills/invoke.js +48 -17
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +27 -25
- package/dist/tools/approvals.service.js +324 -258
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtins/ask-user.d.ts +2 -2
- package/dist/tools/builtins/ask-user.js +1 -1
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +2 -2
- package/dist/tools/builtins/read-tool-output.js +1 -1
- package/dist/tools/builtins/sandbox/bash.js +2 -2
- package/dist/tools/builtins/sandbox/common.d.ts +7 -4
- package/dist/tools/builtins/sandbox/common.js +5 -3
- package/dist/tools/builtins/sandbox/deliver.js +2 -2
- package/dist/tools/builtins/sandbox/edit.js +1 -1
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -2
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/write.js +1 -1
- package/dist/tools/builtins/skill-load.d.ts +3 -3
- package/dist/tools/builtins/skill-load.js +1 -1
- package/dist/tools/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +434 -344
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +111 -79
- package/dist/tools/info.d.ts +12 -9
- package/dist/tools/info.js +33 -7
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +47 -3
- package/dist/tools/pipeline.d.ts +62 -46
- package/dist/tools/pipeline.js +145 -64
- package/dist/tools/policy.d.ts +2 -2
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +8 -5
- package/dist/tools/questions.service.d.ts +25 -24
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +30 -20
- package/dist/tools/registry.js +73 -37
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +91 -0
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +11 -2
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -7,14 +7,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { Controller, Get, HttpCode, Inject, Param, Post } from "@nestjs/common";
|
|
11
11
|
import { z } from "zod";
|
|
12
|
-
import { QUESTIONS } from "../http/tokens.js";
|
|
13
|
-
import { ZodPipe } from "../http/zod.pipe.js";
|
|
14
12
|
import { CurrentPrincipal, requireUser } from "../identity/principal.js";
|
|
13
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
14
|
+
import { ZBody } from "../infra/validation/zod-params.js";
|
|
15
15
|
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
16
|
+
import { QuestionsService } from "./questions.service.js";
|
|
16
17
|
/** 回答体:`answer` 的形状由服务按表单校验(`validateAnswer`,不符 → `validation_failed`)。 */
|
|
17
18
|
const AnswerBody = z.object({ answer: z.record(z.string().max(200), z.unknown()) }).strict();
|
|
19
|
+
class QuestionAnswerBody extends createZodDto(AnswerBody, "QuestionAnswerBody") {
|
|
20
|
+
}
|
|
18
21
|
/**
|
|
19
22
|
* 输入请求(`ask_user`、插件工具的 `input_required`):`/api/v1/orgs/:orgId/questions`。
|
|
20
23
|
* 动作用 `approvals.decide`(访客起、仅限用户主体):回答必须由人做出,agent / 服务令牌不能代答;
|
|
@@ -49,10 +52,10 @@ __decorate([
|
|
|
49
52
|
__param(0, CurrentPrincipal()),
|
|
50
53
|
__param(1, CurrentOrg()),
|
|
51
54
|
__param(2, Param("id")),
|
|
52
|
-
__param(3,
|
|
55
|
+
__param(3, ZBody(QuestionAnswerBody))
|
|
53
56
|
], QuestionsController.prototype, "answer", null);
|
|
54
57
|
QuestionsController = __decorate([
|
|
55
58
|
Controller("api/v1/orgs/:orgId/questions"),
|
|
56
|
-
__param(0, Inject(
|
|
59
|
+
__param(0, Inject(QuestionsService))
|
|
57
60
|
], QuestionsController);
|
|
58
61
|
export { QuestionsController };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type FormAnswer, type InputForm
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
1
|
+
import { type FormAnswer, type InputForm } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { EventLog } from "../conversations/event-log.js";
|
|
3
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
4
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
6
|
+
import { KernelEvents } from "../infra/events/kernel-events.js";
|
|
7
7
|
export type QuestionStatus = "pending" | "answered" | "expired" | "cancelled";
|
|
8
8
|
/** 一条输入请求(`ask_user`、插件工具的 `input_required`、MCP elicitation 共用)。 */
|
|
9
9
|
export interface QuestionRecord {
|
|
@@ -37,31 +37,30 @@ export interface QuestionAskInput {
|
|
|
37
37
|
form: InputForm;
|
|
38
38
|
state: unknown;
|
|
39
39
|
}
|
|
40
|
-
export interface QuestionsServiceDeps {
|
|
41
|
-
db: KernelDb;
|
|
42
|
-
eventLog: EventLog;
|
|
43
|
-
config: () => KernelConfig;
|
|
44
|
-
log: Pick<Logger, "warn">;
|
|
45
|
-
/**
|
|
46
|
-
* 回答提交之后调用(恰好一次:只有把 pending 改掉的那次回答会调用),用于续跑。失败只记日志(回答已生效)。
|
|
47
|
-
*/
|
|
48
|
-
onAnswered?: (question: QuestionRecord) => Promise<void>;
|
|
49
|
-
}
|
|
50
40
|
/** 网页读取输入请求的视图(不含插件 state:那是工具内部的续跑数据)。 */
|
|
51
41
|
export type QuestionView = Omit<QuestionRecord, "state">;
|
|
52
42
|
/**
|
|
53
43
|
* 输入请求:新建(tools 节点)、回答(只有对话发起人)、超时与取消(等待机制)。
|
|
54
44
|
* 状态全部在 PG:回答 / 超时 / 取消都在事务里 `SELECT … FOR UPDATE` 该行,多副本并发时恰好一个生效,
|
|
55
45
|
* 只有生效的那次写 `question_answered`。HTTP 接口见 questions.controller.ts。
|
|
46
|
+
*
|
|
47
|
+
* An answer is announced after the commit as the domain event `question.answered` (exactly once),
|
|
48
|
+
* which the run's waits follow to resume it (spec §3b; the wait sweep resumes a run whose resume was
|
|
49
|
+
* lost). Events are appended in the context's transaction (`EventLog.appendIn`).
|
|
56
50
|
*/
|
|
57
51
|
export declare class QuestionsService {
|
|
58
|
-
private readonly
|
|
59
|
-
|
|
52
|
+
private readonly db;
|
|
53
|
+
private readonly config;
|
|
54
|
+
private readonly eventLog;
|
|
55
|
+
private readonly events;
|
|
56
|
+
readonly txHost: TransactionHost;
|
|
57
|
+
constructor(db: KernelDb, config: Pick<KernelConfigService, "get">, eventLog: Pick<EventLog, "appendIn" | "notify">, events: Pick<KernelEvents, "emit">, txHost: TransactionHost);
|
|
60
58
|
/**
|
|
61
59
|
* 新建 pending 输入请求(`expires_at` = 现在 + `tools.approvalTimeoutHours`)并写 `question_asked`,同一事务。
|
|
62
60
|
* 按 (run_id, call_id, attempt) 幂等:已存在则返回已有记录,事件按 `question_asked:<id>` 幂等。
|
|
63
61
|
*/
|
|
64
62
|
ask(input: QuestionAskInput): Promise<QuestionRecord>;
|
|
63
|
+
private askIn;
|
|
65
64
|
/**
|
|
66
65
|
* 读一条输入请求(网页展示表单用):只有该运行的发起人(其他人 → 403 `forbidden`);
|
|
67
66
|
* 不属于该组织 / 不存在 → `question.not_found`。
|
|
@@ -76,6 +75,7 @@ export declare class QuestionsService {
|
|
|
76
75
|
* 传 `orgId` 时还要求输入请求属于该组织(HTTP 接口用)。
|
|
77
76
|
*/
|
|
78
77
|
answer(questionId: string, accountId: string, answer: unknown, orgId?: string): Promise<QuestionRecord>;
|
|
78
|
+
private answerIn;
|
|
79
79
|
/**
|
|
80
80
|
* 超时(等待机制的超时任务调用):仍 pending 且已到期 → 置 expired、写 `question_answered{expired}`。
|
|
81
81
|
* 返回 `expired`(本次生效)/ `not_due`(尚未到期)/ `settled`(已回答、已取消或不存在)。
|
|
@@ -84,20 +84,21 @@ export declare class QuestionsService {
|
|
|
84
84
|
outcome: "expired" | "not_due" | "settled";
|
|
85
85
|
record?: QuestionRecord;
|
|
86
86
|
}>;
|
|
87
|
+
private expireIn;
|
|
87
88
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
89
|
+
* 在调用方的事务内(`mandatory`)取消运行的全部 pending 输入请求(运行在等待中被中止),各写
|
|
90
|
+
* `question_answered{cancelled}`。返回被取消的记录;调用方提交后发布事件。
|
|
90
91
|
*/
|
|
91
|
-
cancelPendingIn(
|
|
92
|
+
cancelPendingIn(runId: string): Promise<QuestionRecord[]>;
|
|
92
93
|
/**
|
|
93
|
-
*
|
|
94
|
+
* 在调用方的事务内(`mandatory`)取消某组织里由 `accountId` 发起的运行上的全部 pending 输入请求(只有运行发起人能回答,
|
|
94
95
|
* 即「其作为处理人」的提问;成员离职时调用),走与 {@link cancelPendingIn} 相同的取消路径:置 cancelled、
|
|
95
96
|
* 写 `question_answered{cancelled}`。返回被取消的记录与各会话写到的最大 seq;调用方提交后发布事件。
|
|
96
97
|
*/
|
|
97
|
-
cancelPendingFor(
|
|
98
|
+
cancelPendingFor(orgId: string, accountId: string): Promise<{
|
|
98
99
|
records: QuestionRecord[];
|
|
99
100
|
seqs: Map<string, number>;
|
|
100
101
|
}>;
|
|
102
|
+
/** `question_answered` in the current transaction; returns its seq. */
|
|
101
103
|
private answeredEvent;
|
|
102
104
|
}
|
|
103
|
-
export {};
|
|
@@ -1,7 +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
|
+
};
|
|
1
10
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { validateAnswer
|
|
11
|
+
import { validateAnswer } from "@capybara-hq/plugin-sdk";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
3
13
|
import { sql } from "kysely";
|
|
14
|
+
import { EventLog } from "../conversations/event-log.js";
|
|
4
15
|
import { ApiError } from "../errors.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 { KernelEvents } from "../infra/events/kernel-events.js";
|
|
5
21
|
const notFound = () => new ApiError("question.not_found", "Question not found");
|
|
6
22
|
const notInitiator = () => new ApiError("forbidden", "Only the user who started the run can answer this question");
|
|
7
23
|
const toView = ({ state: _state, ...rest }) => rest;
|
|
@@ -32,75 +48,88 @@ const isPlainObject = (v) => typeof v === "object" && v !== null && !Array.isArr
|
|
|
32
48
|
* 输入请求:新建(tools 节点)、回答(只有对话发起人)、超时与取消(等待机制)。
|
|
33
49
|
* 状态全部在 PG:回答 / 超时 / 取消都在事务里 `SELECT … FOR UPDATE` 该行,多副本并发时恰好一个生效,
|
|
34
50
|
* 只有生效的那次写 `question_answered`。HTTP 接口见 questions.controller.ts。
|
|
51
|
+
*
|
|
52
|
+
* An answer is announced after the commit as the domain event `question.answered` (exactly once),
|
|
53
|
+
* which the run's waits follow to resume it (spec §3b; the wait sweep resumes a run whose resume was
|
|
54
|
+
* lost). Events are appended in the context's transaction (`EventLog.appendIn`).
|
|
35
55
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
56
|
+
let QuestionsService = class QuestionsService {
|
|
57
|
+
db;
|
|
58
|
+
config;
|
|
59
|
+
eventLog;
|
|
60
|
+
events;
|
|
61
|
+
txHost;
|
|
62
|
+
constructor(db, config, eventLog, events, txHost) {
|
|
63
|
+
this.db = db;
|
|
64
|
+
this.config = config;
|
|
65
|
+
this.eventLog = eventLog;
|
|
66
|
+
this.events = events;
|
|
67
|
+
this.txHost = txHost;
|
|
40
68
|
}
|
|
41
69
|
/**
|
|
42
70
|
* 新建 pending 输入请求(`expires_at` = 现在 + `tools.approvalTimeoutHours`)并写 `question_asked`,同一事务。
|
|
43
71
|
* 按 (run_id, call_id, attempt) 幂等:已存在则返回已有记录,事件按 `question_asked:<id>` 幂等。
|
|
44
72
|
*/
|
|
45
73
|
async ask(input) {
|
|
46
|
-
const {
|
|
47
|
-
|
|
74
|
+
const { record, toSeq } = await this.askIn(input);
|
|
75
|
+
await this.eventLog.notify(record.conversationId, toSeq);
|
|
76
|
+
return record;
|
|
77
|
+
}
|
|
78
|
+
async askIn(input) {
|
|
79
|
+
const hours = this.config.get().tools.approvalTimeoutHours;
|
|
48
80
|
const spec = {
|
|
49
81
|
form: input.form,
|
|
50
82
|
state: input.state ?? null,
|
|
51
83
|
toolKey: input.toolKey,
|
|
52
84
|
step: input.step,
|
|
53
85
|
};
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
},
|
|
86
|
+
const t = this.db.db;
|
|
87
|
+
await t
|
|
88
|
+
.insertInto("questions")
|
|
89
|
+
.values({
|
|
90
|
+
id: randomUUID(),
|
|
91
|
+
org_id: input.orgId,
|
|
92
|
+
conversation_id: input.conversationId,
|
|
93
|
+
run_id: input.runId,
|
|
94
|
+
call_id: input.callId,
|
|
95
|
+
attempt: input.attempt,
|
|
96
|
+
spec: JSON.stringify(spec),
|
|
97
|
+
answer: null,
|
|
98
|
+
answered_by: null,
|
|
99
|
+
expires_at: sql `now() + ${hours}::integer * interval '1 hour'`,
|
|
100
|
+
})
|
|
101
|
+
.onConflict((oc) => oc.columns(["run_id", "call_id", "attempt"]).doNothing())
|
|
102
|
+
.execute();
|
|
103
|
+
const row = await t
|
|
104
|
+
.selectFrom("questions")
|
|
105
|
+
.selectAll()
|
|
106
|
+
.where("run_id", "=", input.runId)
|
|
107
|
+
.where("call_id", "=", input.callId)
|
|
108
|
+
.where("attempt", "=", input.attempt)
|
|
109
|
+
.executeTakeFirstOrThrow();
|
|
110
|
+
const rec = toRecord(row);
|
|
111
|
+
const written = await this.eventLog.appendIn(rec.conversationId, [
|
|
112
|
+
{
|
|
113
|
+
type: "question_asked",
|
|
114
|
+
runId: rec.runId,
|
|
115
|
+
idemKey: `question_asked:${rec.id}`,
|
|
116
|
+
payload: {
|
|
117
|
+
step: rec.step,
|
|
118
|
+
callId: rec.callId,
|
|
119
|
+
questionId: rec.id,
|
|
120
|
+
form: rec.form,
|
|
121
|
+
expiresAt: rec.expiresAt,
|
|
91
122
|
},
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
await eventLog.notify(record.conversationId, toSeq);
|
|
96
|
-
return record;
|
|
123
|
+
},
|
|
124
|
+
]);
|
|
125
|
+
return { record: rec, toSeq: Math.max(...written.map((e) => e.seq)) };
|
|
97
126
|
}
|
|
98
127
|
/**
|
|
99
128
|
* 读一条输入请求(网页展示表单用):只有该运行的发起人(其他人 → 403 `forbidden`);
|
|
100
129
|
* 不属于该组织 / 不存在 → `question.not_found`。
|
|
101
130
|
*/
|
|
102
131
|
async get(orgId, questionId, accountId) {
|
|
103
|
-
const row = await this.
|
|
132
|
+
const row = await this.db
|
|
104
133
|
.selectFrom("questions")
|
|
105
134
|
.innerJoin("runs", "runs.id", "questions.run_id")
|
|
106
135
|
.selectAll("questions")
|
|
@@ -116,7 +145,7 @@ export class QuestionsService {
|
|
|
116
145
|
}
|
|
117
146
|
/** 某个调用的全部输入请求(按轮次升序)。 */
|
|
118
147
|
async forCall(runId, callId) {
|
|
119
|
-
const rows = await this.
|
|
148
|
+
const rows = await this.db
|
|
120
149
|
.selectFrom("questions")
|
|
121
150
|
.selectAll()
|
|
122
151
|
.where("run_id", "=", runId)
|
|
@@ -132,103 +161,107 @@ export class QuestionsService {
|
|
|
132
161
|
* 传 `orgId` 时还要求输入请求属于该组织(HTTP 接口用)。
|
|
133
162
|
*/
|
|
134
163
|
async answer(questionId, accountId, answer, orgId) {
|
|
135
|
-
const {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
q = q.where("org_id", "=", orgId);
|
|
144
|
-
const locked = await q.forUpdate().executeTakeFirst();
|
|
145
|
-
if (!locked)
|
|
146
|
-
throw notFound();
|
|
147
|
-
const run = await t
|
|
148
|
-
.selectFrom("runs")
|
|
149
|
-
.select("trigger_account_id")
|
|
150
|
-
.where("id", "=", locked.run_id)
|
|
151
|
-
.executeTakeFirst();
|
|
152
|
-
if (run?.trigger_account_id !== accountId)
|
|
153
|
-
throw notInitiator();
|
|
154
|
-
const before = toRecord(locked);
|
|
155
|
-
if (before.status !== "pending") {
|
|
156
|
-
throw new ApiError("question.already_answered", "Question has already been answered");
|
|
157
|
-
}
|
|
158
|
-
if (locked.expired) {
|
|
159
|
-
throw new ApiError("question.already_answered", "Question has expired");
|
|
160
|
-
}
|
|
161
|
-
const problems = isPlainObject(answer)
|
|
162
|
-
? validateAnswer(before.form, answer)
|
|
163
|
-
: ["answer must be an object"];
|
|
164
|
-
if (problems.length > 0) {
|
|
165
|
-
throw new ApiError("validation_failed", "Answer does not match the form", problems.map((message) => ({ path: "answer", message })));
|
|
166
|
-
}
|
|
167
|
-
const updated = await t
|
|
168
|
-
.updateTable("questions")
|
|
169
|
-
.set({
|
|
170
|
-
status: "answered",
|
|
171
|
-
answer: JSON.stringify(answer),
|
|
172
|
-
answered_by: accountId,
|
|
173
|
-
answered_at: sql `now()`,
|
|
174
|
-
})
|
|
175
|
-
.where("id", "=", questionId)
|
|
176
|
-
.returningAll()
|
|
177
|
-
.executeTakeFirstOrThrow();
|
|
178
|
-
const toSeq = await this.answeredEvent(t, before, answer, accountId, "answered");
|
|
179
|
-
return { record: toRecord(updated), toSeq };
|
|
164
|
+
const { record, toSeq } = await this.answerIn(questionId, accountId, answer, orgId);
|
|
165
|
+
await this.eventLog.notify(record.conversationId, toSeq);
|
|
166
|
+
// waits resume the run and its IM delivery is enqueued (handler failures are logged)
|
|
167
|
+
await this.events.emit("question.answered", {
|
|
168
|
+
id: record.id,
|
|
169
|
+
orgId: record.orgId,
|
|
170
|
+
conversationId: record.conversationId,
|
|
171
|
+
runId: record.runId,
|
|
180
172
|
});
|
|
181
|
-
await eventLog.notify(record.conversationId, toSeq);
|
|
182
|
-
if (this.deps.onAnswered) {
|
|
183
|
-
try {
|
|
184
|
-
await this.deps.onAnswered(record);
|
|
185
|
-
}
|
|
186
|
-
catch (err) {
|
|
187
|
-
this.deps.log.warn("question onAnswered hook failed", { questionId: record.id, err });
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
173
|
return record;
|
|
191
174
|
}
|
|
175
|
+
// its own transaction (as the legacy one was): `question.answered` is emitted only after the
|
|
176
|
+
// answer committed, even when a caller has a transaction open
|
|
177
|
+
async answerIn(questionId, accountId, answer, orgId) {
|
|
178
|
+
const t = this.db.db;
|
|
179
|
+
let q = t
|
|
180
|
+
.selectFrom("questions")
|
|
181
|
+
.selectAll()
|
|
182
|
+
.select(sql `expires_at <= now()`.as("expired"))
|
|
183
|
+
.where("id", "=", questionId);
|
|
184
|
+
if (orgId !== undefined)
|
|
185
|
+
q = q.where("org_id", "=", orgId);
|
|
186
|
+
const locked = await q.forUpdate().executeTakeFirst();
|
|
187
|
+
if (!locked)
|
|
188
|
+
throw notFound();
|
|
189
|
+
const run = await t
|
|
190
|
+
.selectFrom("runs")
|
|
191
|
+
.select("trigger_account_id")
|
|
192
|
+
.where("id", "=", locked.run_id)
|
|
193
|
+
.executeTakeFirst();
|
|
194
|
+
if (run?.trigger_account_id !== accountId)
|
|
195
|
+
throw notInitiator();
|
|
196
|
+
const before = toRecord(locked);
|
|
197
|
+
if (before.status !== "pending") {
|
|
198
|
+
throw new ApiError("question.already_answered", "Question has already been answered");
|
|
199
|
+
}
|
|
200
|
+
if (locked.expired) {
|
|
201
|
+
throw new ApiError("question.already_answered", "Question has expired");
|
|
202
|
+
}
|
|
203
|
+
const problems = isPlainObject(answer)
|
|
204
|
+
? validateAnswer(before.form, answer)
|
|
205
|
+
: ["answer must be an object"];
|
|
206
|
+
if (problems.length > 0) {
|
|
207
|
+
throw new ApiError("validation_failed", "Answer does not match the form", problems.map((message) => ({ path: "answer", message })));
|
|
208
|
+
}
|
|
209
|
+
const updated = await t
|
|
210
|
+
.updateTable("questions")
|
|
211
|
+
.set({
|
|
212
|
+
status: "answered",
|
|
213
|
+
answer: JSON.stringify(answer),
|
|
214
|
+
answered_by: accountId,
|
|
215
|
+
answered_at: sql `now()`,
|
|
216
|
+
})
|
|
217
|
+
.where("id", "=", questionId)
|
|
218
|
+
.returningAll()
|
|
219
|
+
.executeTakeFirstOrThrow();
|
|
220
|
+
const toSeq = await this.answeredEvent(before, answer, accountId, "answered");
|
|
221
|
+
return { record: toRecord(updated), toSeq };
|
|
222
|
+
}
|
|
192
223
|
/**
|
|
193
224
|
* 超时(等待机制的超时任务调用):仍 pending 且已到期 → 置 expired、写 `question_answered{expired}`。
|
|
194
225
|
* 返回 `expired`(本次生效)/ `not_due`(尚未到期)/ `settled`(已回答、已取消或不存在)。
|
|
195
226
|
*/
|
|
196
227
|
async expire(questionId) {
|
|
197
|
-
const
|
|
198
|
-
const r = await db.transaction().execute(async (t) => {
|
|
199
|
-
const locked = await t
|
|
200
|
-
.selectFrom("questions")
|
|
201
|
-
.selectAll()
|
|
202
|
-
.select(sql `expires_at <= now()`.as("expired"))
|
|
203
|
-
.where("id", "=", questionId)
|
|
204
|
-
.forUpdate()
|
|
205
|
-
.executeTakeFirst();
|
|
206
|
-
if (!locked)
|
|
207
|
-
return { outcome: "settled" };
|
|
208
|
-
const before = toRecord(locked);
|
|
209
|
-
if (before.status !== "pending")
|
|
210
|
-
return { outcome: "settled", record: before };
|
|
211
|
-
if (!locked.expired)
|
|
212
|
-
return { outcome: "not_due", record: before };
|
|
213
|
-
const updated = await t
|
|
214
|
-
.updateTable("questions")
|
|
215
|
-
.set({ status: "expired", answered_at: sql `now()` })
|
|
216
|
-
.where("id", "=", questionId)
|
|
217
|
-
.returningAll()
|
|
218
|
-
.executeTakeFirstOrThrow();
|
|
219
|
-
const toSeq = await this.answeredEvent(t, before, null, null, "expired");
|
|
220
|
-
return { outcome: "expired", record: toRecord(updated), toSeq };
|
|
221
|
-
});
|
|
228
|
+
const r = await this.expireIn(questionId);
|
|
222
229
|
if ("toSeq" in r && r.toSeq !== undefined && r.record) {
|
|
223
|
-
await eventLog.notify(r.record.conversationId, r.toSeq);
|
|
230
|
+
await this.eventLog.notify(r.record.conversationId, r.toSeq);
|
|
224
231
|
}
|
|
225
232
|
return r.record ? { outcome: r.outcome, record: r.record } : { outcome: r.outcome };
|
|
226
233
|
}
|
|
234
|
+
async expireIn(questionId) {
|
|
235
|
+
const t = this.db.db;
|
|
236
|
+
const locked = await t
|
|
237
|
+
.selectFrom("questions")
|
|
238
|
+
.selectAll()
|
|
239
|
+
.select(sql `expires_at <= now()`.as("expired"))
|
|
240
|
+
.where("id", "=", questionId)
|
|
241
|
+
.forUpdate()
|
|
242
|
+
.executeTakeFirst();
|
|
243
|
+
if (!locked)
|
|
244
|
+
return { outcome: "settled" };
|
|
245
|
+
const before = toRecord(locked);
|
|
246
|
+
if (before.status !== "pending")
|
|
247
|
+
return { outcome: "settled", record: before };
|
|
248
|
+
if (!locked.expired)
|
|
249
|
+
return { outcome: "not_due", record: before };
|
|
250
|
+
const updated = await t
|
|
251
|
+
.updateTable("questions")
|
|
252
|
+
.set({ status: "expired", answered_at: sql `now()` })
|
|
253
|
+
.where("id", "=", questionId)
|
|
254
|
+
.returningAll()
|
|
255
|
+
.executeTakeFirstOrThrow();
|
|
256
|
+
const toSeq = await this.answeredEvent(before, null, null, "expired");
|
|
257
|
+
return { outcome: "expired", record: toRecord(updated), toSeq };
|
|
258
|
+
}
|
|
227
259
|
/**
|
|
228
|
-
*
|
|
229
|
-
*
|
|
260
|
+
* 在调用方的事务内(`mandatory`)取消运行的全部 pending 输入请求(运行在等待中被中止),各写
|
|
261
|
+
* `question_answered{cancelled}`。返回被取消的记录;调用方提交后发布事件。
|
|
230
262
|
*/
|
|
231
|
-
async cancelPendingIn(
|
|
263
|
+
async cancelPendingIn(runId) {
|
|
264
|
+
const t = this.db.db;
|
|
232
265
|
const rows = await t
|
|
233
266
|
.selectFrom("questions")
|
|
234
267
|
.selectAll()
|
|
@@ -246,17 +279,18 @@ export class QuestionsService {
|
|
|
246
279
|
.returningAll()
|
|
247
280
|
.executeTakeFirstOrThrow();
|
|
248
281
|
const rec = toRecord(row);
|
|
249
|
-
await this.answeredEvent(
|
|
282
|
+
await this.answeredEvent(rec, null, null, "cancelled");
|
|
250
283
|
out.push(toRecord(updated));
|
|
251
284
|
}
|
|
252
285
|
return out;
|
|
253
286
|
}
|
|
254
287
|
/**
|
|
255
|
-
*
|
|
288
|
+
* 在调用方的事务内(`mandatory`)取消某组织里由 `accountId` 发起的运行上的全部 pending 输入请求(只有运行发起人能回答,
|
|
256
289
|
* 即「其作为处理人」的提问;成员离职时调用),走与 {@link cancelPendingIn} 相同的取消路径:置 cancelled、
|
|
257
290
|
* 写 `question_answered{cancelled}`。返回被取消的记录与各会话写到的最大 seq;调用方提交后发布事件。
|
|
258
291
|
*/
|
|
259
|
-
async cancelPendingFor(
|
|
292
|
+
async cancelPendingFor(orgId, accountId) {
|
|
293
|
+
const t = this.db.db;
|
|
260
294
|
const rows = await t
|
|
261
295
|
.selectFrom("questions")
|
|
262
296
|
.selectAll()
|
|
@@ -275,21 +309,46 @@ export class QuestionsService {
|
|
|
275
309
|
.where("id", "=", row.id)
|
|
276
310
|
.returningAll()
|
|
277
311
|
.executeTakeFirstOrThrow();
|
|
278
|
-
const seq = await this.answeredEvent(
|
|
312
|
+
const seq = await this.answeredEvent(toRecord(row), null, null, "cancelled");
|
|
279
313
|
seqs.set(row.conversation_id, Math.max(seqs.get(row.conversation_id) ?? 0, seq));
|
|
280
314
|
records.push(toRecord(updated));
|
|
281
315
|
}
|
|
282
316
|
return { records, seqs };
|
|
283
317
|
}
|
|
284
|
-
|
|
285
|
-
|
|
318
|
+
/** `question_answered` in the current transaction; returns its seq. */
|
|
319
|
+
async answeredEvent(q, answer, byAccountId, outcome) {
|
|
320
|
+
const written = await this.eventLog.appendIn(q.conversationId, [
|
|
286
321
|
{
|
|
287
322
|
type: "question_answered",
|
|
288
323
|
runId: q.runId,
|
|
289
324
|
idemKey: `question_answered:${q.id}`,
|
|
290
325
|
payload: { questionId: q.id, callId: q.callId, answer, byAccountId, outcome },
|
|
291
326
|
},
|
|
292
|
-
]
|
|
327
|
+
]);
|
|
293
328
|
return Math.max(...written.map((e) => e.seq));
|
|
294
329
|
}
|
|
295
|
-
}
|
|
330
|
+
};
|
|
331
|
+
__decorate([
|
|
332
|
+
Transactional()
|
|
333
|
+
], QuestionsService.prototype, "askIn", null);
|
|
334
|
+
__decorate([
|
|
335
|
+
Transactional({ propagation: "requires_new" })
|
|
336
|
+
], QuestionsService.prototype, "answerIn", null);
|
|
337
|
+
__decorate([
|
|
338
|
+
Transactional()
|
|
339
|
+
], QuestionsService.prototype, "expireIn", null);
|
|
340
|
+
__decorate([
|
|
341
|
+
Transactional({ propagation: "mandatory" })
|
|
342
|
+
], QuestionsService.prototype, "cancelPendingIn", null);
|
|
343
|
+
__decorate([
|
|
344
|
+
Transactional({ propagation: "mandatory" })
|
|
345
|
+
], QuestionsService.prototype, "cancelPendingFor", null);
|
|
346
|
+
QuestionsService = __decorate([
|
|
347
|
+
Injectable(),
|
|
348
|
+
__param(0, Inject(KernelDb)),
|
|
349
|
+
__param(1, Inject(KernelConfigService)),
|
|
350
|
+
__param(2, Inject(EventLog)),
|
|
351
|
+
__param(3, Inject(KernelEvents)),
|
|
352
|
+
__param(4, Inject(TransactionHost))
|
|
353
|
+
], QuestionsService);
|
|
354
|
+
export { QuestionsService };
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import type { Connector, InputRequired,
|
|
1
|
+
import type { Connector, InputRequired, ToolAnnotations, ToolCallContext, ToolResult, ToolSpec } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import type { AgentDefinition } from "../agents/definition.js";
|
|
3
|
-
import type { KernelConfig } from "../config/schema.js";
|
|
4
3
|
import type { ToolView } from "../conversations/events.js";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
4
|
+
import { ExtensionHost } from "../extensions/host.js";
|
|
5
|
+
import { ExtensionRegistry } from "../extensions/registry.js";
|
|
6
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
7
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
7
8
|
import type { OrgRole } from "../orgs/roles.js";
|
|
8
|
-
import
|
|
9
|
+
import { BuiltinTools } from "./builtins/builtin-tools.js";
|
|
10
|
+
export { canonicalJson } from "./canonical-json.js";
|
|
9
11
|
/**
|
|
10
12
|
* 内核内置工具的名字(Task 10 / Task 19 实现;M5 T8 加沙箱工具)。保存 agent 时内置工具引用按这份清单校验,
|
|
11
13
|
* 不依赖当前是否已注册,避免实现落地顺序影响已保存的定义;运行时未注册的照常报不可用。
|
|
@@ -119,8 +121,6 @@ export interface UnavailableTool {
|
|
|
119
121
|
ref: string;
|
|
120
122
|
reason: string;
|
|
121
123
|
}
|
|
122
|
-
/** 键排序、去掉 undefined 的 JSON(jsonb 不保留键顺序,指纹必须与顺序无关)。 */
|
|
123
|
-
export declare function canonicalJson(v: unknown): string;
|
|
124
124
|
/** The first 16 hex digits of sha256(canonicalJson(v)): a fingerprint independent of key order. */
|
|
125
125
|
export declare function contentHash(v: unknown): string;
|
|
126
126
|
/**
|
|
@@ -138,17 +138,6 @@ export declare function withoutDisplayFields<T>(spec: T): T;
|
|
|
138
138
|
export declare function specHash(spec: unknown): string;
|
|
139
139
|
/** 由注解推导默认策略:只读 → allow;其余(破坏性 / 无注解)→ ask。 */
|
|
140
140
|
export declare function policyFromAnnotations(a: ToolAnnotations | undefined): "allow" | "ask";
|
|
141
|
-
export interface ToolRegistryDeps {
|
|
142
|
-
db: KernelDb;
|
|
143
|
-
host: ExtensionHost;
|
|
144
|
-
credentials: Credentials;
|
|
145
|
-
log: Logger;
|
|
146
|
-
builtins: BuiltinTool[];
|
|
147
|
-
/**
|
|
148
|
-
* 当前配置(`tools.searchThreshold*`)。不提供时从不启用 `tool_search`(只用于不关心它的测试 / 调用方)。
|
|
149
|
-
*/
|
|
150
|
-
config?: () => KernelConfig;
|
|
151
|
-
}
|
|
152
141
|
/** `forAgent` 的结果。 */
|
|
153
142
|
export interface AgentTools {
|
|
154
143
|
tools: ResolvedTool[];
|
|
@@ -182,8 +171,29 @@ export interface AgentTools {
|
|
|
182
171
|
* different sources with the same key report a duplicate.
|
|
183
172
|
*/
|
|
184
173
|
export declare class ToolRegistry {
|
|
185
|
-
private readonly
|
|
186
|
-
|
|
174
|
+
private readonly db;
|
|
175
|
+
/** Extension tools and the organization's enabled extensions. */
|
|
176
|
+
private readonly host;
|
|
177
|
+
/** The installed connectors (`connector@1`, from the extension registry). */
|
|
178
|
+
private readonly extensions;
|
|
179
|
+
private readonly builtinTools;
|
|
180
|
+
/**
|
|
181
|
+
* `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `tool_search` is never
|
|
182
|
+
* offered and the sub-agent limits are the schema defaults.
|
|
183
|
+
*/
|
|
184
|
+
private readonly config?;
|
|
185
|
+
constructor(db: KernelDb,
|
|
186
|
+
/** Extension tools and the organization's enabled extensions. */
|
|
187
|
+
host: Pick<ExtensionHost, "tools" | "enabledPlugins">,
|
|
188
|
+
/** The installed connectors (`connector@1`, from the extension registry). */
|
|
189
|
+
extensions: Pick<ExtensionRegistry, "list">, builtinTools: Pick<BuiltinTools, "list">,
|
|
190
|
+
/**
|
|
191
|
+
* `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `tool_search` is never
|
|
192
|
+
* offered and the sub-agent limits are the schema defaults.
|
|
193
|
+
*/
|
|
194
|
+
config?: Pick<KernelConfigService, "get"> | undefined);
|
|
195
|
+
/** The kernel's builtin tools (`tool_search` is added by {@link forAgent}, not by definitions). */
|
|
196
|
+
private get builtins();
|
|
187
197
|
/** `host.list("connector")` 中 `kind` 匹配的第一个实现;未安装返回 undefined。 */
|
|
188
198
|
findConnector(kind: string): Connector | undefined;
|
|
189
199
|
/** 同 {@link findConnector},未安装时抛错。 */
|