@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
package/dist/log-loki.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
const PUSH_PATH = "/loki/api/v1/push";
|
|
2
|
+
const PUSH_TIMEOUT_MS = 10_000;
|
|
3
|
+
/** A batch is pushed right away once it reaches this many records. */
|
|
4
|
+
const BATCH_SIZE = 1_000;
|
|
5
|
+
const ERROR_NOTE_INTERVAL_MS = 60_000;
|
|
6
|
+
function pushUrl(url) {
|
|
7
|
+
const u = new URL(url);
|
|
8
|
+
if (!u.pathname.endsWith(PUSH_PATH))
|
|
9
|
+
u.pathname = `${u.pathname.replace(/\/+$/, "")}${PUSH_PATH}`;
|
|
10
|
+
return u;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Batches JSON log lines and POSTs them to Loki's push API (JSON body), one stream per level with
|
|
14
|
+
* the labels `{ job: "capybara", ...labels, role, level }`. Pushing never blocks or throws into the
|
|
15
|
+
* caller: a failed push drops its batch and is reported to `onError` at most once per minute; while
|
|
16
|
+
* Loki is down at most `maxBuffer` records are kept. The interval timer is unref'd.
|
|
17
|
+
*/
|
|
18
|
+
export function createLokiStream(opts) {
|
|
19
|
+
const url = pushUrl(opts.url);
|
|
20
|
+
const intervalMs = opts.intervalMs ?? 2_000;
|
|
21
|
+
const maxBuffer = opts.maxBuffer ?? 10_000;
|
|
22
|
+
const now = opts.now ?? Date.now;
|
|
23
|
+
const onError = opts.onError ?? ((m) => void process.stderr.write(`capybara: ${m}\n`));
|
|
24
|
+
// the marker keeps these pushes out of HTTP client traces (apps/capybara tracing.ts)
|
|
25
|
+
const headers = {
|
|
26
|
+
"content-type": "application/json",
|
|
27
|
+
"x-capybara-log-push": "1",
|
|
28
|
+
};
|
|
29
|
+
if (opts.username !== undefined || opts.password !== undefined) {
|
|
30
|
+
const token = Buffer.from(`${opts.username ?? ""}:${opts.password ?? ""}`).toString("base64");
|
|
31
|
+
headers.authorization = `Basic ${token}`;
|
|
32
|
+
}
|
|
33
|
+
const baseLabels = { job: "capybara", ...opts.labels, role: opts.role };
|
|
34
|
+
let buffer = [];
|
|
35
|
+
let dropped = 0;
|
|
36
|
+
let inFlight;
|
|
37
|
+
let timer;
|
|
38
|
+
let lastNote = Number.NEGATIVE_INFINITY;
|
|
39
|
+
let closed = false;
|
|
40
|
+
/** Reports at most once a minute; `message` names the Loki origin only (a URL may carry credentials). */
|
|
41
|
+
const report = (message) => {
|
|
42
|
+
const t = now();
|
|
43
|
+
if (t - lastNote < ERROR_NOTE_INTERVAL_MS)
|
|
44
|
+
return;
|
|
45
|
+
lastNote = t;
|
|
46
|
+
onError(`${message}; further Loki errors are not reported for a minute`);
|
|
47
|
+
};
|
|
48
|
+
const note = (reason) => report(`cannot push logs to Loki at ${url.origin} (${reason}); records are dropped until it recovers`);
|
|
49
|
+
const pushBatch = async (batch, lost) => {
|
|
50
|
+
const streams = new Map();
|
|
51
|
+
for (const e of batch) {
|
|
52
|
+
const values = streams.get(e.level) ?? [];
|
|
53
|
+
values.push([e.ns, e.line]);
|
|
54
|
+
streams.set(e.level, values);
|
|
55
|
+
}
|
|
56
|
+
const body = JSON.stringify({
|
|
57
|
+
streams: [...streams].map(([level, values]) => ({
|
|
58
|
+
stream: { ...baseLabels, level },
|
|
59
|
+
values,
|
|
60
|
+
})),
|
|
61
|
+
});
|
|
62
|
+
try {
|
|
63
|
+
const res = await fetch(url, {
|
|
64
|
+
method: "POST",
|
|
65
|
+
headers,
|
|
66
|
+
body,
|
|
67
|
+
signal: AbortSignal.timeout(PUSH_TIMEOUT_MS),
|
|
68
|
+
});
|
|
69
|
+
await res.body?.cancel();
|
|
70
|
+
if (!res.ok)
|
|
71
|
+
note(`HTTP ${res.status}`);
|
|
72
|
+
else if (lost > 0) {
|
|
73
|
+
report(`${lost} log records for Loki at ${url.origin} were dropped: the buffer was full`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
note(e instanceof Error ? (e.cause instanceof Error ? e.cause.message : e.message) : "error");
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
/** Starts a push of the current buffer unless one is in flight. */
|
|
81
|
+
const kick = () => {
|
|
82
|
+
if (inFlight || buffer.length === 0)
|
|
83
|
+
return inFlight ?? Promise.resolve();
|
|
84
|
+
const batch = buffer;
|
|
85
|
+
const lost = dropped;
|
|
86
|
+
buffer = [];
|
|
87
|
+
dropped = 0;
|
|
88
|
+
inFlight = pushBatch(batch, lost).finally(() => {
|
|
89
|
+
inFlight = undefined;
|
|
90
|
+
});
|
|
91
|
+
return inFlight;
|
|
92
|
+
};
|
|
93
|
+
const ensureTimer = () => {
|
|
94
|
+
if (timer || closed)
|
|
95
|
+
return;
|
|
96
|
+
timer = setInterval(() => void kick(), intervalMs);
|
|
97
|
+
timer.unref();
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
write(chunk) {
|
|
101
|
+
for (const line of chunk.split("\n")) {
|
|
102
|
+
if (line === "")
|
|
103
|
+
continue;
|
|
104
|
+
let level = "info";
|
|
105
|
+
let ms = Date.now();
|
|
106
|
+
try {
|
|
107
|
+
const rec = JSON.parse(line);
|
|
108
|
+
if (typeof rec.level === "string")
|
|
109
|
+
level = rec.level;
|
|
110
|
+
if (typeof rec.time === "string") {
|
|
111
|
+
const t = Date.parse(rec.time);
|
|
112
|
+
if (!Number.isNaN(t))
|
|
113
|
+
ms = t;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// not JSON: push it as is
|
|
118
|
+
}
|
|
119
|
+
buffer.push({ level, ns: `${BigInt(ms) * 1000000n}`, line });
|
|
120
|
+
if (buffer.length > maxBuffer) {
|
|
121
|
+
buffer.shift();
|
|
122
|
+
dropped++;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
ensureTimer();
|
|
126
|
+
if (buffer.length >= BATCH_SIZE)
|
|
127
|
+
void kick();
|
|
128
|
+
},
|
|
129
|
+
async flush() {
|
|
130
|
+
while (inFlight || buffer.length > 0) {
|
|
131
|
+
if (inFlight)
|
|
132
|
+
await inFlight;
|
|
133
|
+
else
|
|
134
|
+
await kick();
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
async close() {
|
|
138
|
+
closed = true;
|
|
139
|
+
if (timer)
|
|
140
|
+
clearInterval(timer);
|
|
141
|
+
timer = undefined;
|
|
142
|
+
await this.flush();
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
package/dist/log.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { type LokiOptions } from "./log-loki.js";
|
|
2
3
|
/** 日志级别,按严重程度递增。 */
|
|
3
4
|
export declare const LOG_LEVELS: readonly ["debug", "info", "warn", "error"];
|
|
4
5
|
/** 日志级别。 */
|
|
@@ -11,7 +12,7 @@ export interface KernelLogger extends Logger {
|
|
|
11
12
|
setLevel(level: string): void;
|
|
12
13
|
/**
|
|
13
14
|
* 登记部署方(运维)给的密钥值:内核配置与插件部署级配置里的 secret 字段。此后日志消息与字段里出现这些值都替换为
|
|
14
|
-
* `[REDACTED]`(顶层的 `
|
|
15
|
+
* `[REDACTED]`(顶层的 `time` / `level` 不打码)。字符串与数字(转成字符串)登记,布尔不登记;
|
|
15
16
|
* 数组与对象递归展开其中的标量;短于 4 个字符的值不登记(会误伤普通文本)。
|
|
16
17
|
* 数值字段的字符串形式等于已登记值时同样打码。
|
|
17
18
|
*/
|
|
@@ -27,6 +28,8 @@ export interface KernelLogger extends Logger {
|
|
|
27
28
|
* 报错说明)之前用。
|
|
28
29
|
*/
|
|
29
30
|
redact(text: string): string;
|
|
31
|
+
/** Waits until buffered records reached every output (Loki); never rejects. Call before exit. */
|
|
32
|
+
flush(): Promise<void>;
|
|
30
33
|
}
|
|
31
34
|
/**
|
|
32
35
|
* 用与 logger 相同的匹配器打码任意文本(工具结果等不经过日志的内容用):展开规则同 `addOrgSecrets`
|
|
@@ -34,15 +37,43 @@ export interface KernelLogger extends Logger {
|
|
|
34
37
|
* 不得小于匹配器的分桶前缀长度 4)。没有可用的值时原样返回。
|
|
35
38
|
*/
|
|
36
39
|
export declare function createRedactor(values: readonly unknown[], minLength?: number): (s: string) => string;
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
/** Console format: `pretty` (pino-pretty, one line per record), `json`, or `auto` (pretty on a TTY). */
|
|
41
|
+
export declare const LOG_FORMATS: readonly ["auto", "pretty", "json"];
|
|
42
|
+
/** Console format. */
|
|
43
|
+
export type LogFormat = (typeof LOG_FORMATS)[number];
|
|
44
|
+
/** A minimal writable the console output goes to (`process.stdout` by default). */
|
|
45
|
+
export interface LogOutput {
|
|
46
|
+
write(chunk: string): unknown;
|
|
47
|
+
}
|
|
48
|
+
/** Options of {@link createLogger}. */
|
|
49
|
+
export interface LoggerOptions {
|
|
50
|
+
/**
|
|
51
|
+
* Receives every record as one JSON line (no trailing newline) instead of the console; the
|
|
52
|
+
* console format is ignored. Used by tests and embedders that collect records themselves.
|
|
53
|
+
*/
|
|
45
54
|
write?: (line: string) => void;
|
|
55
|
+
/** Console format; default `auto`. */
|
|
56
|
+
format?: LogFormat;
|
|
57
|
+
/** Console stream; default `process.stdout`. */
|
|
58
|
+
out?: LogOutput;
|
|
59
|
+
/** Whether the console is a terminal (picks `auto` and colors); default `process.stdout.isTTY`. */
|
|
60
|
+
isTTY?: boolean;
|
|
61
|
+
/** Also push every record to Loki. */
|
|
62
|
+
loki?: LokiOptions;
|
|
63
|
+
/** Fields on every record (e.g. `role`); log calls cannot overwrite them. */
|
|
64
|
+
base?: Record<string, string>;
|
|
65
|
+
/** Capacity of the org secret set (tests). */
|
|
46
66
|
orgSecretCapacity?: number;
|
|
67
|
+
/** Called on every matcher rebuild (tests). */
|
|
47
68
|
onMatcherBuild?: () => void;
|
|
48
|
-
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Creates the kernel logger on pino. Each record is `{ time, level, msg, ...base, ...fields }` with
|
|
72
|
+
* `level` the label and `time` ISO 8601; fields cannot overwrite time / level / msg or the base
|
|
73
|
+
* fields; an Error becomes name / message / stack (and cause). Redaction happens before pino, so
|
|
74
|
+
* every output sees the same redacted record: deployment secrets (`addSecrets`) in msg and every
|
|
75
|
+
* field string, org secrets (`addOrgSecrets`) in fields only; level and time are never redacted.
|
|
76
|
+
* The console gets pino-pretty or JSON lines per `opts.format`; `opts.write` replaces the console
|
|
77
|
+
* with a JSON line sink.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createLogger(level?: string, opts?: LoggerOptions): KernelLogger;
|
package/dist/log.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { pino } from "pino";
|
|
2
|
+
import { prettyFactory } from "pino-pretty";
|
|
1
3
|
import { secretScalars } from "./config/fields.js";
|
|
4
|
+
import { logContext } from "./log-context.js";
|
|
5
|
+
import { createLokiStream } from "./log-loki.js";
|
|
2
6
|
/** 日志级别,按严重程度递增。 */
|
|
3
7
|
export const LOG_LEVELS = ["debug", "info", "warn", "error"];
|
|
4
8
|
const LEVELS = LOG_LEVELS;
|
|
5
9
|
const REDACTED = "[REDACTED]";
|
|
6
|
-
const RESERVED = new Set(["
|
|
10
|
+
const RESERVED = new Set(["time", "level", "msg"]);
|
|
7
11
|
/** 部署方密钥的最短登记长度:过短的值打码会误伤普通文本。 */
|
|
8
12
|
const MIN_SECRET_LEN = 4;
|
|
9
13
|
/** 组织来源密钥的最短登记长度。 */
|
|
@@ -101,16 +105,64 @@ function expandSecret(value) {
|
|
|
101
105
|
}
|
|
102
106
|
return out;
|
|
103
107
|
}
|
|
108
|
+
/** Console format: `pretty` (pino-pretty, one line per record), `json`, or `auto` (pretty on a TTY). */
|
|
109
|
+
export const LOG_FORMATS = ["auto", "pretty", "json"];
|
|
110
|
+
/** Fields shown in the pretty prefix instead of the trailing object, in this order. */
|
|
111
|
+
const PREFIX_FIELDS = ["reqId", "traceId", "jobId", "runId", "plugin"];
|
|
112
|
+
/** pino-pretty's message format: `[role] [reqId=…] [plugin=…] msg`, each part only when present. */
|
|
113
|
+
function prettyMessage(log, messageKey) {
|
|
114
|
+
const parts = [];
|
|
115
|
+
if (typeof log.role === "string")
|
|
116
|
+
parts.push(`[${log.role}]`);
|
|
117
|
+
for (const k of PREFIX_FIELDS) {
|
|
118
|
+
const v = log[k];
|
|
119
|
+
if (typeof v === "string" || typeof v === "number")
|
|
120
|
+
parts.push(`[${k}=${v}]`);
|
|
121
|
+
}
|
|
122
|
+
parts.push(String(log[messageKey] ?? ""));
|
|
123
|
+
return parts.join(" ");
|
|
124
|
+
}
|
|
125
|
+
function consoleStream(opts) {
|
|
126
|
+
if (opts.write) {
|
|
127
|
+
const write = opts.write;
|
|
128
|
+
// pino hands each record as one string ending in "\n"
|
|
129
|
+
return { write: (s) => write(s.endsWith("\n") ? s.slice(0, -1) : s) };
|
|
130
|
+
}
|
|
131
|
+
const format = opts.format ?? "auto";
|
|
132
|
+
if (!LOG_FORMATS.includes(format)) {
|
|
133
|
+
throw new Error(`invalid log.format "${format}" (expected ${LOG_FORMATS.join(", ")})`);
|
|
134
|
+
}
|
|
135
|
+
const out = opts.out ?? process.stdout;
|
|
136
|
+
const isTTY = opts.isTTY ?? process.stdout.isTTY === true;
|
|
137
|
+
const pretty = format === "pretty" || (format === "auto" && isTTY);
|
|
138
|
+
if (!pretty)
|
|
139
|
+
return { write: (s) => out.write(s) };
|
|
140
|
+
// In process (no worker thread): pino-pretty formats each line synchronously.
|
|
141
|
+
const format_ = prettyFactory({
|
|
142
|
+
colorize: isTTY,
|
|
143
|
+
colorizeObjects: isTTY,
|
|
144
|
+
singleLine: true,
|
|
145
|
+
// errors stay inside the one-line object instead of a multi-line stack block
|
|
146
|
+
errorLikeObjectKeys: [],
|
|
147
|
+
translateTime: "SYS:HH:MM:ss.l",
|
|
148
|
+
ignore: ["pid", "hostname", "role", "spanId", ...PREFIX_FIELDS].join(","),
|
|
149
|
+
messageFormat: (log, messageKey) => prettyMessage(log, messageKey),
|
|
150
|
+
});
|
|
151
|
+
return { write: (s) => out.write(format_(s)) };
|
|
152
|
+
}
|
|
104
153
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* `
|
|
154
|
+
* Creates the kernel logger on pino. Each record is `{ time, level, msg, ...base, ...fields }` with
|
|
155
|
+
* `level` the label and `time` ISO 8601; fields cannot overwrite time / level / msg or the base
|
|
156
|
+
* fields; an Error becomes name / message / stack (and cause). Redaction happens before pino, so
|
|
157
|
+
* every output sees the same redacted record: deployment secrets (`addSecrets`) in msg and every
|
|
158
|
+
* field string, org secrets (`addOrgSecrets`) in fields only; level and time are never redacted.
|
|
159
|
+
* The console gets pino-pretty or JSON lines per `opts.format`; `opts.write` replaces the console
|
|
160
|
+
* with a JSON line sink.
|
|
110
161
|
*/
|
|
111
162
|
export function createLogger(level = "info", opts = {}) {
|
|
112
163
|
let current = parseLevel(level);
|
|
113
|
-
const
|
|
164
|
+
const base = opts.base ?? {};
|
|
165
|
+
const reserved = new Set([...RESERVED, ...Object.keys(base)]);
|
|
114
166
|
const orgCapacity = opts.orgSecretCapacity ?? ORG_SECRET_CAPACITY;
|
|
115
167
|
/** 部署方密钥(数量由配置决定,不淘汰)。 */
|
|
116
168
|
const secrets = new Set();
|
|
@@ -136,12 +188,10 @@ export function createLogger(level = "info", opts = {}) {
|
|
|
136
188
|
return deployMatcher(s);
|
|
137
189
|
};
|
|
138
190
|
const isSecret = (v) => secrets.has(v) || orgSecrets.has(v);
|
|
191
|
+
/** Redacts and serializes the fields to JSON (errors expanded, cycles cut). */
|
|
139
192
|
const serialize = (entry) => {
|
|
140
193
|
const seen = new WeakSet();
|
|
141
|
-
return JSON.stringify(entry,
|
|
142
|
-
if (this === entry && RESERVED.has(key)) {
|
|
143
|
-
return key === "msg" && typeof value === "string" ? redactMsg(value) : value;
|
|
144
|
-
}
|
|
194
|
+
return JSON.stringify(entry, (_key, value) => {
|
|
145
195
|
if (typeof value === "string")
|
|
146
196
|
return redact(value);
|
|
147
197
|
if ((typeof value === "number" || typeof value === "bigint") && isSecret(String(value))) {
|
|
@@ -167,21 +217,42 @@ export function createLogger(level = "info", opts = {}) {
|
|
|
167
217
|
return value;
|
|
168
218
|
});
|
|
169
219
|
};
|
|
220
|
+
const loki = opts.loki ? createLokiStream(opts.loki) : undefined;
|
|
221
|
+
const sink = pino({
|
|
222
|
+
level: "debug",
|
|
223
|
+
base,
|
|
224
|
+
messageKey: "msg",
|
|
225
|
+
timestamp: pino.stdTimeFunctions.isoTime,
|
|
226
|
+
formatters: { level: (label) => ({ level: label }) },
|
|
227
|
+
// request / job / trace fields of the current async context (log-context.ts)
|
|
228
|
+
mixin: () => ({ ...logContext() }),
|
|
229
|
+
// fields arrive already serialized: no pino serializers, no depth or size limits
|
|
230
|
+
serializers: { err: (e) => e },
|
|
231
|
+
depthLimit: Number.MAX_SAFE_INTEGER,
|
|
232
|
+
edgeLimit: Number.MAX_SAFE_INTEGER,
|
|
233
|
+
},
|
|
234
|
+
// level filtering is ours (setLevel); every stream takes everything that got this far
|
|
235
|
+
loki
|
|
236
|
+
? pino.multistream([
|
|
237
|
+
{ level: "debug", stream: consoleStream(opts) },
|
|
238
|
+
{ level: "debug", stream: loki },
|
|
239
|
+
])
|
|
240
|
+
: consoleStream(opts));
|
|
170
241
|
const emit = (lvl, msg, fields) => {
|
|
171
242
|
if (LEVELS.indexOf(lvl) < LEVELS.indexOf(current))
|
|
172
243
|
return;
|
|
173
|
-
const entry = {
|
|
244
|
+
const entry = {};
|
|
174
245
|
for (const [k, v] of Object.entries(fields ?? {}))
|
|
175
|
-
if (!
|
|
246
|
+
if (!reserved.has(k))
|
|
176
247
|
entry[k] = v;
|
|
177
|
-
let
|
|
248
|
+
let obj;
|
|
178
249
|
try {
|
|
179
|
-
|
|
250
|
+
obj = JSON.parse(serialize(entry));
|
|
180
251
|
}
|
|
181
252
|
catch {
|
|
182
|
-
|
|
253
|
+
obj = { logError: "unserializable fields" };
|
|
183
254
|
}
|
|
184
|
-
|
|
255
|
+
sink[lvl](obj, redactMsg(msg));
|
|
185
256
|
};
|
|
186
257
|
return {
|
|
187
258
|
debug: (msg, fields) => emit("debug", msg, fields),
|
|
@@ -192,6 +263,9 @@ export function createLogger(level = "info", opts = {}) {
|
|
|
192
263
|
return current;
|
|
193
264
|
},
|
|
194
265
|
redact: (text) => redact(text),
|
|
266
|
+
flush: async () => {
|
|
267
|
+
await loki?.flush();
|
|
268
|
+
},
|
|
195
269
|
setLevel(l) {
|
|
196
270
|
current = parseLevel(l);
|
|
197
271
|
},
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Module } from "@nestjs/common";
|
|
8
|
+
import { ExtensionRegistryModule } from "../extensions/registry.js";
|
|
9
|
+
import { IdentityModule } from "../identity/identity.module.js";
|
|
10
|
+
import { OrgLockModule } from "../orgs/org-lock.js";
|
|
11
|
+
import { ProvidersModule } from "../runtime/providers.js";
|
|
12
|
+
import { PricesService } from "./prices.js";
|
|
13
|
+
import { ModelPurposesService } from "./purposes.js";
|
|
14
|
+
/** Model prices and model purposes. */
|
|
15
|
+
let ModelsModule = class ModelsModule {
|
|
16
|
+
};
|
|
17
|
+
ModelsModule = __decorate([
|
|
18
|
+
Module({
|
|
19
|
+
imports: [ExtensionRegistryModule, IdentityModule, OrgLockModule, ProvidersModule],
|
|
20
|
+
providers: [PricesService, ModelPurposesService],
|
|
21
|
+
exports: [PricesService, ModelPurposesService],
|
|
22
|
+
})
|
|
23
|
+
], ModelsModule);
|
|
24
|
+
export { ModelsModule };
|
package/dist/models/prices.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ModelUsage } from "@capybara-hq/plugin-sdk";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import
|
|
3
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
4
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
4
6
|
/**
|
|
5
7
|
* 一个模型的价格(C2):每百万 token,币种为部署设置 `priceCurrency`。由企业管理员录入,插件不声明价格。
|
|
6
8
|
* 缓存读 / 写价为 null 时按输入价计。
|
|
@@ -36,7 +38,9 @@ export type ModelPricePut = z.infer<typeof MODEL_PRICE_PUT>;
|
|
|
36
38
|
/** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
|
|
37
39
|
export declare class PricesService {
|
|
38
40
|
private readonly db;
|
|
39
|
-
|
|
41
|
+
readonly txHost: TransactionHost;
|
|
42
|
+
private readonly adminLock;
|
|
43
|
+
constructor(db: KernelDb, txHost: TransactionHost, adminLock: EnterpriseAdminLock);
|
|
40
44
|
/** 全部价格,按 provider、model 排序。 */
|
|
41
45
|
list(): Promise<ModelPrice[]>;
|
|
42
46
|
/** 价格表(按 {@link priceKey} 查)。 */
|
|
@@ -50,4 +54,6 @@ export declare class PricesService {
|
|
|
50
54
|
model: string;
|
|
51
55
|
price: null;
|
|
52
56
|
}, actorAccountId: string, actorTokenId?: string): Promise<void>;
|
|
57
|
+
/** The write of {@link put}, under the enterprise admin lock. */
|
|
58
|
+
private write;
|
|
53
59
|
}
|
package/dist/models/prices.js
CHANGED
|
@@ -1,7 +1,20 @@
|
|
|
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 { Inject, Injectable } from "@nestjs/common";
|
|
1
11
|
import { z } from "zod";
|
|
2
12
|
import { ApiError } from "../errors.js";
|
|
3
13
|
import { audit } from "../identity/audit.js";
|
|
4
|
-
import {
|
|
14
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
15
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
16
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
17
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
5
18
|
/** 价格表的键。供应商名与模型 id 不含换行,拼接不会撞键。 */
|
|
6
19
|
export const priceKey = (provider, model) => `${provider}\n${model}`;
|
|
7
20
|
/** 一次调用的估算成本;没有价格 → null。用量的四项互不重叠(见 plugin-sdk `ModelUsage`)。 */
|
|
@@ -36,10 +49,14 @@ export const MODEL_PRICE_PUT = z.union([
|
|
|
36
49
|
const num = (v) => Number(v);
|
|
37
50
|
const numOrNull = (v) => (v === null ? null : Number(v));
|
|
38
51
|
/** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
|
|
39
|
-
|
|
52
|
+
let PricesService = class PricesService {
|
|
40
53
|
db;
|
|
41
|
-
|
|
54
|
+
txHost;
|
|
55
|
+
adminLock;
|
|
56
|
+
constructor(db, txHost, adminLock) {
|
|
42
57
|
this.db = db;
|
|
58
|
+
this.txHost = txHost;
|
|
59
|
+
this.adminLock = adminLock;
|
|
43
60
|
}
|
|
44
61
|
/** 全部价格,按 provider、model 排序。 */
|
|
45
62
|
async list() {
|
|
@@ -78,44 +95,55 @@ export class PricesService {
|
|
|
78
95
|
if (!check.success) {
|
|
79
96
|
throw new ApiError("validation_failed", "Invalid model price", check.error.issues.map((i) => ({ path: i.path.join("."), message: i.message })));
|
|
80
97
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
actorAccountId,
|
|
93
|
-
...(actorTokenId !== undefined && { actorTokenId }),
|
|
94
|
-
action: "model_price.deleted",
|
|
95
|
-
target,
|
|
96
|
-
detail: { provider: v.provider, model: v.model },
|
|
97
|
-
});
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
const values = {
|
|
101
|
-
input_per_mtok: v.inputPerMTok,
|
|
102
|
-
output_per_mtok: v.outputPerMTok,
|
|
103
|
-
cache_read_per_mtok: v.cacheReadPerMTok,
|
|
104
|
-
cache_write_per_mtok: v.cacheWritePerMTok,
|
|
105
|
-
updated_by: actorAccountId,
|
|
106
|
-
};
|
|
107
|
-
await trx
|
|
108
|
-
.insertInto("model_prices")
|
|
109
|
-
.values({ provider: v.provider, model: v.model, ...values })
|
|
110
|
-
.onConflict((oc) => oc.columns(["provider", "model"]).doUpdateSet({ ...values, updated_at: new Date() }))
|
|
98
|
+
await this.write(check.data, actorAccountId, actorTokenId);
|
|
99
|
+
}
|
|
100
|
+
/** The write of {@link put}, under the enterprise admin lock. */
|
|
101
|
+
async write(v, actorAccountId, actorTokenId) {
|
|
102
|
+
await this.adminLock.lockAndAuthorize(actorAccountId);
|
|
103
|
+
const target = `${v.provider}/${v.model}`;
|
|
104
|
+
if ("price" in v) {
|
|
105
|
+
await this.db
|
|
106
|
+
.deleteFrom("model_prices")
|
|
107
|
+
.where("provider", "=", v.provider)
|
|
108
|
+
.where("model", "=", v.model)
|
|
111
109
|
.execute();
|
|
112
|
-
await audit(
|
|
110
|
+
await audit(this.db.db, {
|
|
113
111
|
actorAccountId,
|
|
114
112
|
...(actorTokenId !== undefined && { actorTokenId }),
|
|
115
|
-
action: "model_price.
|
|
113
|
+
action: "model_price.deleted",
|
|
116
114
|
target,
|
|
117
|
-
detail: {
|
|
115
|
+
detail: { provider: v.provider, model: v.model },
|
|
118
116
|
});
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const values = {
|
|
120
|
+
input_per_mtok: v.inputPerMTok,
|
|
121
|
+
output_per_mtok: v.outputPerMTok,
|
|
122
|
+
cache_read_per_mtok: v.cacheReadPerMTok,
|
|
123
|
+
cache_write_per_mtok: v.cacheWritePerMTok,
|
|
124
|
+
updated_by: actorAccountId,
|
|
125
|
+
};
|
|
126
|
+
await this.db
|
|
127
|
+
.insertInto("model_prices")
|
|
128
|
+
.values({ provider: v.provider, model: v.model, ...values })
|
|
129
|
+
.onConflict((oc) => oc.columns(["provider", "model"]).doUpdateSet({ ...values, updated_at: new Date() }))
|
|
130
|
+
.execute();
|
|
131
|
+
await audit(this.db.db, {
|
|
132
|
+
actorAccountId,
|
|
133
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
134
|
+
action: "model_price.updated",
|
|
135
|
+
target,
|
|
136
|
+
detail: { ...v },
|
|
119
137
|
});
|
|
120
138
|
}
|
|
121
|
-
}
|
|
139
|
+
};
|
|
140
|
+
__decorate([
|
|
141
|
+
Transactional()
|
|
142
|
+
], PricesService.prototype, "write", null);
|
|
143
|
+
PricesService = __decorate([
|
|
144
|
+
Injectable(),
|
|
145
|
+
__param(0, Inject(KernelDb)),
|
|
146
|
+
__param(1, Inject(TransactionHost)),
|
|
147
|
+
__param(2, Inject(EnterpriseAdminLock))
|
|
148
|
+
], PricesService);
|
|
149
|
+
export { PricesService };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Principal } from "../identity/principal.js";
|
|
2
2
|
import { type OrgContext } from "../orgs/org.guard.js";
|
|
3
|
-
import {
|
|
3
|
+
import { ModelPurposesService, type PurposePut, type PurposeTarget, type PurposeView } from "./purposes.js";
|
|
4
4
|
/** body 的目标(参数缺省为 `{}`)。 */
|
|
5
5
|
export declare const purposeTargetOf: (b: PurposePut) => PurposeTarget | null;
|
|
6
6
|
/**
|
|
@@ -7,12 +7,11 @@ 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 {
|
|
11
|
-
import { MODEL_PURPOSES } from "../http/tokens.js";
|
|
12
|
-
import { ZodPipe } from "../http/zod.pipe.js";
|
|
10
|
+
import { Controller, Get, Inject, Param, Put } from "@nestjs/common";
|
|
13
11
|
import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
|
|
12
|
+
import { ZBody } from "../infra/validation/zod-params.js";
|
|
14
13
|
import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
|
|
15
|
-
import {
|
|
14
|
+
import { ModelPurposesService, PurposePutDto, } from "./purposes.js";
|
|
16
15
|
/** body 的目标(参数缺省为 `{}`)。 */
|
|
17
16
|
export const purposeTargetOf = (b) => b.target === null ? null : { model: b.target.model, params: b.target.params ?? {} };
|
|
18
17
|
/**
|
|
@@ -47,10 +46,10 @@ __decorate([
|
|
|
47
46
|
__param(0, CurrentPrincipal()),
|
|
48
47
|
__param(1, CurrentOrg()),
|
|
49
48
|
__param(2, Param("purpose")),
|
|
50
|
-
__param(3,
|
|
49
|
+
__param(3, ZBody(PurposePutDto))
|
|
51
50
|
], ModelPurposesController.prototype, "put", null);
|
|
52
51
|
ModelPurposesController = __decorate([
|
|
53
52
|
Controller("api/v1/orgs/:orgId/model-purposes"),
|
|
54
|
-
__param(0, Inject(
|
|
53
|
+
__param(0, Inject(ModelPurposesService))
|
|
55
54
|
], ModelPurposesController);
|
|
56
55
|
export { ModelPurposesController };
|