@capybara-hq/kernel 0.1.0-rc.1 → 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/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 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +10 -4
- 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 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/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 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +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 +16 -11
- package/dist/index.js +9 -6
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +165 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +126 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +90 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +96 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +86 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +16 -0
- package/dist/infra/logging/logging.module.js +34 -0
- package/dist/infra/queue/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +7 -0
- package/dist/infra/queue/redis-connection.js +18 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +87 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +15 -0
- package/dist/infra/tokens.js +15 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +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 -137
- 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 -226
- 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 -100
- 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 +2 -1
- 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 +9 -2
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -1,13 +1,27 @@
|
|
|
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
11
|
import { parseSkillMd, SKILL_ENTRY_FILE } from "@capybara-hq/plugin-sdk";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
3
13
|
import { sql } from "kysely";
|
|
4
14
|
import { assertItemInstallable } from "../catalog/requests.service.js";
|
|
5
|
-
import { SKILL_PACKAGE_CONTENT_TYPE, skillFilesPrefix, } from "../conversations/attachments.service.js";
|
|
15
|
+
import { AttachmentsService, SKILL_PACKAGE_CONTENT_TYPE, skillFilesPrefix, } from "../conversations/attachments.service.js";
|
|
6
16
|
import { ApiError } from "../errors.js";
|
|
7
17
|
import { audit } from "../identity/audit.js";
|
|
8
18
|
import { assertCustomAllowed } from "../identity/settings.js";
|
|
9
|
-
import {
|
|
19
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
20
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
21
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
22
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
10
23
|
import { textBytesTokens } from "../runtime/context/tokens.js";
|
|
24
|
+
import { StorageService } from "../storage/storage.service.js";
|
|
11
25
|
import { invocationOf, PINNED_SKILLS_LIMITS } from "./catalog.js";
|
|
12
26
|
import { readSkillPackage, storedInvocation } from "./package.js";
|
|
13
27
|
/**
|
|
@@ -69,7 +83,7 @@ const notFound = () => new ApiError("skill.not_found", "Skill not found");
|
|
|
69
83
|
* 否则 `validation_failed`(path `skills.orgSkills.<i>`);不可重复。调用方须已锁组织行(技能删除同样锁组织行,二者串行)。
|
|
70
84
|
* `kept`:当前版本里已有的引用(保存时合法),修改时不再核对——技能之后被删也不挡住其他改动(运行时由 T14 忽略已删除的技能)。
|
|
71
85
|
*/
|
|
72
|
-
export async function assertOrgSkills(
|
|
86
|
+
export async function assertOrgSkills(db, orgId, ids, kept = new Set()) {
|
|
73
87
|
const details = [];
|
|
74
88
|
const seen = new Set();
|
|
75
89
|
ids.forEach((id, i) => {
|
|
@@ -79,7 +93,7 @@ export async function assertOrgSkills(t, orgId, ids, kept = new Set()) {
|
|
|
79
93
|
});
|
|
80
94
|
const toCheck = [...seen].filter((id) => !kept.has(id));
|
|
81
95
|
if (toCheck.length > 0) {
|
|
82
|
-
const found = await
|
|
96
|
+
const found = await db
|
|
83
97
|
.selectFrom("skills")
|
|
84
98
|
.select("id")
|
|
85
99
|
.where("org_id", "=", orgId)
|
|
@@ -117,7 +131,7 @@ export async function assertOrgSkills(t, orgId, ids, kept = new Set()) {
|
|
|
117
131
|
* when the pinned list changed: a pinned skill's new version never blocks an unrelated edit (the
|
|
118
132
|
* run keeps what fits).
|
|
119
133
|
*/
|
|
120
|
-
export async function assertPinnedSkills(
|
|
134
|
+
export async function assertPinnedSkills(db, orgId, agentId, skills, kept = []) {
|
|
121
135
|
const pinned = skills?.pinned;
|
|
122
136
|
if (pinned === undefined)
|
|
123
137
|
return;
|
|
@@ -138,7 +152,7 @@ export async function assertPinnedSkills(t, orgId, agentId, skills, kept = []) {
|
|
|
138
152
|
}
|
|
139
153
|
const rows = unique.length === 0
|
|
140
154
|
? []
|
|
141
|
-
: await
|
|
155
|
+
: await db
|
|
142
156
|
.selectFrom("skills as s")
|
|
143
157
|
.innerJoin("skill_versions as v", (j) => j.onRef("v.skill_id", "=", "s.id").onRef("v.version", "=", "s.current_version"))
|
|
144
158
|
.select(["s.id", "s.scope", "s.agent_id", "v.manifest"])
|
|
@@ -223,20 +237,34 @@ const summaryQuery = (db) => db
|
|
|
223
237
|
"v.suggest_pinned",
|
|
224
238
|
"v.manifest",
|
|
225
239
|
]);
|
|
226
|
-
/**
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
240
|
+
/** The stored manifest of a skill package (the invocation only when it is not the default). */
|
|
241
|
+
function skillManifest(pkg) {
|
|
242
|
+
const invocation = pkg.invocation && storedInvocation(pkg.invocation);
|
|
243
|
+
return {
|
|
244
|
+
name: pkg.name,
|
|
245
|
+
description: pkg.description,
|
|
246
|
+
files: pkg.files.map(({ path, size, sha256 }) => ({ path, size, sha256 })),
|
|
247
|
+
...(invocation !== undefined && { invocation }),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
let SkillsService = class SkillsService {
|
|
251
|
+
db;
|
|
252
|
+
storage;
|
|
253
|
+
attachments;
|
|
254
|
+
txHost;
|
|
255
|
+
orgLock;
|
|
256
|
+
constructor(db, storage, attachments, txHost, orgLock) {
|
|
257
|
+
this.db = db;
|
|
258
|
+
this.storage = storage;
|
|
259
|
+
this.attachments = attachments;
|
|
260
|
+
this.txHost = txHost;
|
|
261
|
+
this.orgLock = orgLock;
|
|
234
262
|
}
|
|
235
263
|
/** 登记一个技能包上传(预签名 POST,`application/zip`,≤ 50MB);角色由路由的 `skills.manage` 把关。 */
|
|
236
264
|
async createUpload(orgId, accountId, input) {
|
|
237
265
|
// 部署设置 customSkills 为 deny:组织只能从企业目录安装技能(C22)
|
|
238
|
-
await assertCustomAllowed(this.
|
|
239
|
-
return this.
|
|
266
|
+
await assertCustomAllowed(this.db.db, "customSkills");
|
|
267
|
+
return this.attachments.create(orgId, accountId, { name: input.name, contentType: SKILL_PACKAGE_CONTENT_TYPE, size: input.size }, "skill-package");
|
|
240
268
|
}
|
|
241
269
|
/**
|
|
242
270
|
* 用一个技能包上传创建技能或新增版本:
|
|
@@ -248,10 +276,10 @@ export class SkillsService {
|
|
|
248
276
|
* 同一上传已经产生过版本(上次提交了、响应丢了而重试)→ 直接返回那个版本(同组织、同一发起人)。
|
|
249
277
|
*/
|
|
250
278
|
async upload(orgId, actorAccountId, uploadId, actorTokenId) {
|
|
251
|
-
this.
|
|
279
|
+
this.storage.assertAvailable();
|
|
252
280
|
const prefix = skillFilesPrefix(uploadId);
|
|
253
281
|
// 重试(上次已提交、响应丢了):同一上传已产生的版本直接返回,不再要求上传仍可用
|
|
254
|
-
const done = await this.
|
|
282
|
+
const done = await this.db
|
|
255
283
|
.selectFrom("skill_versions")
|
|
256
284
|
.innerJoin("skills", "skills.id", "skill_versions.skill_id")
|
|
257
285
|
.select(["skills.id", "skill_versions.version"])
|
|
@@ -261,37 +289,51 @@ export class SkillsService {
|
|
|
261
289
|
.where("skills.deleted_at", "is", null)
|
|
262
290
|
.executeTakeFirst();
|
|
263
291
|
if (done) {
|
|
264
|
-
const row = await summaryQuery(this.
|
|
292
|
+
const row = await summaryQuery(this.db.db)
|
|
265
293
|
.where("s.id", "=", done.id)
|
|
266
294
|
.executeTakeFirstOrThrow();
|
|
267
295
|
return { skill: summary(row), version: done.version, created: done.version === 1 };
|
|
268
296
|
}
|
|
269
297
|
// 自建被禁止时先拒绝(事务里再复核一次)
|
|
270
|
-
await assertCustomAllowed(this.
|
|
271
|
-
const zip = await this.
|
|
298
|
+
await assertCustomAllowed(this.db.db, "customSkills");
|
|
299
|
+
const zip = await this.attachments.readSkillPackage(orgId, actorAccountId, uploadId);
|
|
272
300
|
const pkg = await readSkillPackage(zip);
|
|
273
|
-
|
|
301
|
+
await this.putFiles(orgId, prefix, pkg.files);
|
|
302
|
+
return this.createUploadedVersionIn(orgId, actorAccountId, uploadId, pkg, prefix, actorTokenId);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* The transaction of {@link upload}: under the org row lock (re-checking `skills.manage`), the
|
|
306
|
+
* custom-skill policy is re-checked and the upload consumed (of concurrent requests for the same
|
|
307
|
+
* upload only one succeeds), then the version is written in the same transaction
|
|
308
|
+
* ({@link createVersionIn} joins it).
|
|
309
|
+
*/
|
|
310
|
+
async createUploadedVersionIn(orgId, actorAccountId, uploadId, pkg, prefix, actorTokenId) {
|
|
311
|
+
await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "skills.manage");
|
|
312
|
+
await assertCustomAllowed(this.db.db, "customSkills");
|
|
313
|
+
await this.attachments.consumeSkillPackage(orgId, actorAccountId, uploadId);
|
|
314
|
+
return this.createVersionIn(orgId, actorAccountId, pkg, skillManifest(pkg), prefix, {
|
|
274
315
|
prefix,
|
|
275
316
|
...(actorTokenId !== undefined && { actorTokenId }),
|
|
276
|
-
inTransaction: async (t) => {
|
|
277
|
-
await assertCustomAllowed(t, "customSkills");
|
|
278
|
-
await this.d.attachments.consumeSkillPackage(t, orgId, actorAccountId, uploadId);
|
|
279
|
-
},
|
|
280
317
|
});
|
|
281
318
|
}
|
|
282
319
|
/**
|
|
283
320
|
* 用一组已校验的技能文件创建组织技能或给同名技能新增版本(上传与企业目录安装共用):
|
|
284
321
|
* 1. 把文件写到 `kernel/<orgId>/<prefix>`(缺省 `skills/<新 id>/`);
|
|
285
|
-
* 2. 一个事务里:锁组织行并复核 `skills.manage
|
|
322
|
+
* 2. 一个事务里:锁组织行并复核 `skills.manage`(目录安装:按条目策略复核),
|
|
286
323
|
* 同名未删除的组织技能存在则 `current_version + 1`,否则新建;技能与版本都记下 `directory` 来源(没有则清空:
|
|
287
324
|
* 自定义上传盖在目录技能上就不再算目录安装),写版本与审计
|
|
288
325
|
* (`skill.created` / `skill.version_created`,目录安装时 detail 带 directory)。
|
|
289
326
|
*/
|
|
290
327
|
async createVersionFromFiles(orgId, actorAccountId, pkg, opts = {}) {
|
|
291
|
-
this.
|
|
328
|
+
this.storage.assertAvailable();
|
|
292
329
|
const prefix = opts.prefix ?? skillFilesPrefix(randomUUID());
|
|
293
|
-
|
|
294
|
-
|
|
330
|
+
await this.putFiles(orgId, prefix, pkg.files);
|
|
331
|
+
return this.createVersionIn(orgId, actorAccountId, pkg, skillManifest(pkg), prefix, opts);
|
|
332
|
+
}
|
|
333
|
+
/** Writes a skill package's files to `kernel/<orgId>/<prefix>` (a few at a time). */
|
|
334
|
+
async putFiles(orgId, prefix, files) {
|
|
335
|
+
const store = this.storage.kernel(orgId);
|
|
336
|
+
const queue = [...files];
|
|
295
337
|
await Promise.all(Array.from({ length: Math.min(PUT_CONCURRENCY, queue.length) }, async () => {
|
|
296
338
|
for (let f = queue.shift(); f; f = queue.shift()) {
|
|
297
339
|
await store.put(`${prefix}${f.path}`, f.data, {
|
|
@@ -300,108 +342,102 @@ export class SkillsService {
|
|
|
300
342
|
});
|
|
301
343
|
}
|
|
302
344
|
}));
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
345
|
+
}
|
|
346
|
+
/** The transaction of {@link createVersionFromFiles}. */
|
|
347
|
+
async createVersionIn(orgId, actorAccountId, pkg, manifest, prefix, opts) {
|
|
348
|
+
await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "skills.manage");
|
|
349
|
+
if (opts.catalog) {
|
|
350
|
+
const c = opts.catalog;
|
|
351
|
+
await assertItemInstallable(this.db.db, orgId, c.itemId, c.approvedBy ?? c.itemId);
|
|
352
|
+
}
|
|
353
|
+
const existing = await this.db
|
|
354
|
+
.selectFrom("skills")
|
|
355
|
+
.select(["id", "current_version", "catalog_item_id"])
|
|
356
|
+
.where("org_id", "=", orgId)
|
|
357
|
+
.where("scope", "=", "org")
|
|
358
|
+
.where("name", "=", pkg.name)
|
|
359
|
+
.where("deleted_at", "is", null)
|
|
360
|
+
.forUpdate()
|
|
361
|
+
.executeTakeFirst();
|
|
362
|
+
// A catalog install never overwrites a skill of other provenance (spec §9.2; planning checks
|
|
363
|
+
// it first, this closes the race with a skill created since)
|
|
364
|
+
if (existing && opts.catalog && existing.catalog_item_id !== opts.catalog.itemId) {
|
|
365
|
+
const conflicts = await skillConflicts(this.db.db, orgId, opts.catalog.itemId, [pkg.name]);
|
|
366
|
+
if (conflicts.length > 0)
|
|
367
|
+
throw skillConflictError(conflicts);
|
|
368
|
+
}
|
|
369
|
+
const id = existing?.id ?? randomUUID();
|
|
370
|
+
const version = (existing?.current_version ?? 0) + 1;
|
|
371
|
+
// 来源跟着最新版本走:目录安装记条目与版本,自定义上传清掉(内容已不是目录里的那份)
|
|
372
|
+
const provenance = {
|
|
373
|
+
catalog_item_id: opts.catalog?.itemId ?? null,
|
|
374
|
+
catalog_version: opts.catalog?.version ?? null,
|
|
309
375
|
};
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
.
|
|
320
|
-
.
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
.
|
|
325
|
-
.forUpdate()
|
|
326
|
-
.executeTakeFirst();
|
|
327
|
-
// A catalog install never overwrites a skill of other provenance (spec §9.2; planning checks
|
|
328
|
-
// it first, this closes the race with a skill created since)
|
|
329
|
-
if (existing && opts.catalog && existing.catalog_item_id !== opts.catalog.itemId) {
|
|
330
|
-
const conflicts = await skillConflicts(t, orgId, opts.catalog.itemId, [pkg.name]);
|
|
331
|
-
if (conflicts.length > 0)
|
|
332
|
-
throw skillConflictError(conflicts);
|
|
333
|
-
}
|
|
334
|
-
const id = existing?.id ?? randomUUID();
|
|
335
|
-
const version = (existing?.current_version ?? 0) + 1;
|
|
336
|
-
// 来源跟着最新版本走:目录安装记条目与版本,自定义上传清掉(内容已不是目录里的那份)
|
|
337
|
-
const provenance = {
|
|
338
|
-
catalog_item_id: opts.catalog?.itemId ?? null,
|
|
339
|
-
catalog_version: opts.catalog?.version ?? null,
|
|
340
|
-
};
|
|
341
|
-
if (existing) {
|
|
342
|
-
await t
|
|
343
|
-
.updateTable("skills")
|
|
344
|
-
.set({
|
|
345
|
-
current_version: version,
|
|
346
|
-
description: pkg.description,
|
|
347
|
-
...provenance,
|
|
348
|
-
updated_at: sql `now()`,
|
|
349
|
-
})
|
|
350
|
-
.where("id", "=", id)
|
|
351
|
-
.execute();
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
await t
|
|
355
|
-
.insertInto("skills")
|
|
356
|
-
.values({
|
|
357
|
-
id,
|
|
358
|
-
org_id: orgId,
|
|
359
|
-
scope: "org",
|
|
360
|
-
agent_id: null,
|
|
361
|
-
name: pkg.name,
|
|
362
|
-
description: pkg.description,
|
|
363
|
-
current_version: 1,
|
|
364
|
-
created_by: actorAccountId,
|
|
365
|
-
...provenance,
|
|
366
|
-
})
|
|
367
|
-
.execute();
|
|
368
|
-
}
|
|
369
|
-
await t
|
|
370
|
-
.insertInto("skill_versions")
|
|
376
|
+
if (existing) {
|
|
377
|
+
await this.db
|
|
378
|
+
.updateTable("skills")
|
|
379
|
+
.set({
|
|
380
|
+
current_version: version,
|
|
381
|
+
description: pkg.description,
|
|
382
|
+
...provenance,
|
|
383
|
+
updated_at: sql `now()`,
|
|
384
|
+
})
|
|
385
|
+
.where("id", "=", id)
|
|
386
|
+
.execute();
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
await this.db
|
|
390
|
+
.insertInto("skills")
|
|
371
391
|
.values({
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
392
|
+
id,
|
|
393
|
+
org_id: orgId,
|
|
394
|
+
scope: "org",
|
|
395
|
+
agent_id: null,
|
|
396
|
+
name: pkg.name,
|
|
397
|
+
description: pkg.description,
|
|
398
|
+
current_version: 1,
|
|
376
399
|
created_by: actorAccountId,
|
|
377
400
|
...provenance,
|
|
378
|
-
source_format: opts.catalog?.format ?? "capybara",
|
|
379
|
-
suggest_pinned: opts.catalog?.suggestPinned ?? false,
|
|
380
401
|
})
|
|
381
402
|
.execute();
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
403
|
+
}
|
|
404
|
+
await this.db
|
|
405
|
+
.insertInto("skill_versions")
|
|
406
|
+
.values({
|
|
407
|
+
skill_id: id,
|
|
408
|
+
version,
|
|
409
|
+
manifest: JSON.stringify(manifest),
|
|
410
|
+
object_prefix: prefix,
|
|
411
|
+
created_by: actorAccountId,
|
|
412
|
+
...provenance,
|
|
413
|
+
source_format: opts.catalog?.format ?? "capybara",
|
|
414
|
+
suggest_pinned: opts.catalog?.suggestPinned ?? false,
|
|
415
|
+
})
|
|
416
|
+
.execute();
|
|
417
|
+
await audit(this.db.db, {
|
|
418
|
+
actorAccountId,
|
|
419
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
420
|
+
orgId,
|
|
421
|
+
action: existing ? "skill.version_created" : "skill.created",
|
|
422
|
+
target: id,
|
|
423
|
+
detail: {
|
|
424
|
+
name: pkg.name,
|
|
425
|
+
version,
|
|
426
|
+
files: manifest.files.length,
|
|
427
|
+
...(opts.catalog && { catalog: opts.catalog }),
|
|
428
|
+
},
|
|
397
429
|
});
|
|
430
|
+
const row = await summaryQuery(this.db.db).where("s.id", "=", id).executeTakeFirstOrThrow();
|
|
431
|
+
return { skill: summary(row), version, created: !existing };
|
|
398
432
|
}
|
|
399
433
|
/**
|
|
400
|
-
*
|
|
401
|
-
*
|
|
434
|
+
* In the caller's transaction (`mandatory`: the caller holds the org row lock), reverts the
|
|
435
|
+
* version a plugin install added to an existing skill: only while `version` is still current,
|
|
436
|
+
* back to the previous version, deleting this version's row (returns false when a newer version
|
|
437
|
+
* exists); the skill's description and catalog source revert too. Audit `skill.version_reverted`.
|
|
402
438
|
*/
|
|
403
|
-
async revertVersionIn(
|
|
404
|
-
const row = await
|
|
439
|
+
async revertVersionIn(orgId, skillId, version, actorAccountId, reason) {
|
|
440
|
+
const row = await this.db
|
|
405
441
|
.selectFrom("skills")
|
|
406
442
|
.select(["current_version", "name"])
|
|
407
443
|
.where("id", "=", skillId)
|
|
@@ -411,13 +447,13 @@ export class SkillsService {
|
|
|
411
447
|
.executeTakeFirst();
|
|
412
448
|
if (!row || row.current_version !== version || version <= 1)
|
|
413
449
|
return false;
|
|
414
|
-
const prev = await
|
|
450
|
+
const prev = await this.db
|
|
415
451
|
.selectFrom("skill_versions")
|
|
416
452
|
.select(["manifest", "catalog_item_id", "catalog_version"])
|
|
417
453
|
.where("skill_id", "=", skillId)
|
|
418
454
|
.where("version", "=", version - 1)
|
|
419
455
|
.executeTakeFirst();
|
|
420
|
-
await
|
|
456
|
+
await this.db
|
|
421
457
|
.updateTable("skills")
|
|
422
458
|
.set({
|
|
423
459
|
current_version: version - 1,
|
|
@@ -430,12 +466,12 @@ export class SkillsService {
|
|
|
430
466
|
})
|
|
431
467
|
.where("id", "=", skillId)
|
|
432
468
|
.execute();
|
|
433
|
-
await
|
|
469
|
+
await this.db
|
|
434
470
|
.deleteFrom("skill_versions")
|
|
435
471
|
.where("skill_id", "=", skillId)
|
|
436
472
|
.where("version", "=", version)
|
|
437
473
|
.execute();
|
|
438
|
-
await audit(
|
|
474
|
+
await audit(this.db.db, {
|
|
439
475
|
actorAccountId,
|
|
440
476
|
orgId,
|
|
441
477
|
action: "skill.version_reverted",
|
|
@@ -445,11 +481,12 @@ export class SkillsService {
|
|
|
445
481
|
return true;
|
|
446
482
|
}
|
|
447
483
|
/**
|
|
448
|
-
*
|
|
449
|
-
*
|
|
484
|
+
* In the caller's transaction (`mandatory`: the caller holds the org row lock), soft-deletes an
|
|
485
|
+
* org skill (plugin install rollback and uninstall). Audit `skill.deleted` with the reason.
|
|
486
|
+
* Returns false when it is already deleted or missing.
|
|
450
487
|
*/
|
|
451
|
-
async softDeleteIn(
|
|
452
|
-
const r = await
|
|
488
|
+
async softDeleteIn(orgId, skillId, actorAccountId, reason) {
|
|
489
|
+
const r = await this.db
|
|
453
490
|
.updateTable("skills")
|
|
454
491
|
.set({ deleted_at: sql `now()`, updated_at: sql `now()` })
|
|
455
492
|
.where("id", "=", skillId)
|
|
@@ -460,7 +497,7 @@ export class SkillsService {
|
|
|
460
497
|
.executeTakeFirst();
|
|
461
498
|
if (!r)
|
|
462
499
|
return false;
|
|
463
|
-
await audit(
|
|
500
|
+
await audit(this.db.db, {
|
|
464
501
|
actorAccountId,
|
|
465
502
|
orgId,
|
|
466
503
|
action: "skill.deleted",
|
|
@@ -471,7 +508,7 @@ export class SkillsService {
|
|
|
471
508
|
}
|
|
472
509
|
/** 组织技能库(`scope=org`、未删除),按名字排序。 */
|
|
473
510
|
async list(orgId) {
|
|
474
|
-
const rows = await summaryQuery(this.
|
|
511
|
+
const rows = await summaryQuery(this.db.db)
|
|
475
512
|
.where("s.org_id", "=", orgId)
|
|
476
513
|
.where("s.scope", "=", "org")
|
|
477
514
|
.where("s.deleted_at", "is", null)
|
|
@@ -481,7 +518,7 @@ export class SkillsService {
|
|
|
481
518
|
}
|
|
482
519
|
/** 对该 agent 自动生效的技能(`scope=agent`、未删除),按名字排序。 */
|
|
483
520
|
async listForAgent(orgId, agentId) {
|
|
484
|
-
const rows = await summaryQuery(this.
|
|
521
|
+
const rows = await summaryQuery(this.db.db)
|
|
485
522
|
.where("s.org_id", "=", orgId)
|
|
486
523
|
.where("s.scope", "=", "agent")
|
|
487
524
|
.where("s.agent_id", "=", agentId)
|
|
@@ -492,7 +529,7 @@ export class SkillsService {
|
|
|
492
529
|
}
|
|
493
530
|
/** 组织技能详情:各版本与文件清单。不存在 / 已删除 / 不是组织技能 → `skill.not_found`。 */
|
|
494
531
|
async get(orgId, skillId) {
|
|
495
|
-
const row = await summaryQuery(this.
|
|
532
|
+
const row = await summaryQuery(this.db.db)
|
|
496
533
|
.where("s.id", "=", skillId)
|
|
497
534
|
.where("s.org_id", "=", orgId)
|
|
498
535
|
.where("s.scope", "=", "org")
|
|
@@ -500,7 +537,7 @@ export class SkillsService {
|
|
|
500
537
|
.executeTakeFirst();
|
|
501
538
|
if (!row)
|
|
502
539
|
throw notFound();
|
|
503
|
-
const versions = await this.
|
|
540
|
+
const versions = await this.db
|
|
504
541
|
.selectFrom("skill_versions")
|
|
505
542
|
.select(["version", "manifest", "created_by", "created_at", "object_prefix"])
|
|
506
543
|
.where("skill_id", "=", skillId)
|
|
@@ -525,7 +562,7 @@ export class SkillsService {
|
|
|
525
562
|
if (!entry || entry.size > SKILL_BODY_MAX_BYTES)
|
|
526
563
|
return null;
|
|
527
564
|
try {
|
|
528
|
-
const got = await this.
|
|
565
|
+
const got = await this.storage.kernel(orgId).get(`${v.object_prefix}${SKILL_ENTRY_FILE}`);
|
|
529
566
|
if (!got)
|
|
530
567
|
return null;
|
|
531
568
|
const text = new TextDecoder("utf-8", { fatal: true }).decode(await new Response(got.body).arrayBuffer());
|
|
@@ -541,27 +578,53 @@ export class SkillsService {
|
|
|
541
578
|
* 保存时会被拒绝(运行时由 T14 忽略已删除的技能)。不存在 / 已删除 → `skill.not_found`。
|
|
542
579
|
*/
|
|
543
580
|
async softDelete(orgId, skillId, actorAccountId, actorTokenId) {
|
|
544
|
-
await this.
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
581
|
+
await this.softDeleteTx(orgId, skillId, actorAccountId, actorTokenId);
|
|
582
|
+
}
|
|
583
|
+
/** The transaction of {@link softDelete}. */
|
|
584
|
+
async softDeleteTx(orgId, skillId, actorAccountId, actorTokenId) {
|
|
585
|
+
await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "skills.manage");
|
|
586
|
+
const r = await this.db
|
|
587
|
+
.updateTable("skills")
|
|
588
|
+
.set({ deleted_at: sql `now()`, updated_at: sql `now()` })
|
|
589
|
+
.where("id", "=", skillId)
|
|
590
|
+
.where("org_id", "=", orgId)
|
|
591
|
+
.where("scope", "=", "org")
|
|
592
|
+
.where("deleted_at", "is", null)
|
|
593
|
+
.returning(["name"])
|
|
594
|
+
.executeTakeFirst();
|
|
595
|
+
if (!r)
|
|
596
|
+
throw notFound();
|
|
597
|
+
await audit(this.db.db, {
|
|
598
|
+
actorAccountId,
|
|
599
|
+
...(actorTokenId !== undefined && { actorTokenId }),
|
|
600
|
+
orgId,
|
|
601
|
+
action: "skill.deleted",
|
|
602
|
+
target: skillId,
|
|
603
|
+
detail: { name: r.name },
|
|
565
604
|
});
|
|
566
605
|
}
|
|
567
|
-
}
|
|
606
|
+
};
|
|
607
|
+
__decorate([
|
|
608
|
+
Transactional()
|
|
609
|
+
], SkillsService.prototype, "createUploadedVersionIn", null);
|
|
610
|
+
__decorate([
|
|
611
|
+
Transactional()
|
|
612
|
+
], SkillsService.prototype, "createVersionIn", null);
|
|
613
|
+
__decorate([
|
|
614
|
+
Transactional({ propagation: "mandatory" })
|
|
615
|
+
], SkillsService.prototype, "revertVersionIn", null);
|
|
616
|
+
__decorate([
|
|
617
|
+
Transactional({ propagation: "mandatory" })
|
|
618
|
+
], SkillsService.prototype, "softDeleteIn", null);
|
|
619
|
+
__decorate([
|
|
620
|
+
Transactional()
|
|
621
|
+
], SkillsService.prototype, "softDeleteTx", null);
|
|
622
|
+
SkillsService = __decorate([
|
|
623
|
+
Injectable(),
|
|
624
|
+
__param(0, Inject(KernelDb)),
|
|
625
|
+
__param(1, Inject(StorageService)),
|
|
626
|
+
__param(2, Inject(AttachmentsService)),
|
|
627
|
+
__param(3, Inject(TransactionHost)),
|
|
628
|
+
__param(4, Inject(OrgLock))
|
|
629
|
+
], SkillsService);
|
|
630
|
+
export { SkillsService };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The maintenance job scheduler ids the storage purge had before becoming `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs (retired at worker start, `RETIRED_SCHEDULER_IDS`). A leaf module.
|
|
4
|
+
*/
|
|
5
|
+
/** The maintenance job scheduler id it had before it became a cron (retired at worker start). */
|
|
6
|
+
export declare const STORAGE_PURGE_SCHEDULER_ID = "storage-org-purge-hourly";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The maintenance job scheduler ids the storage purge had before becoming `@LockedCron` /
|
|
3
|
+
* `@LockedInterval` jobs (retired at worker start, `RETIRED_SCHEDULER_IDS`). A leaf module.
|
|
4
|
+
*/
|
|
5
|
+
/** The maintenance job scheduler id it had before it became a cron (retired at worker start). */
|
|
6
|
+
export const STORAGE_PURGE_SCHEDULER_ID = "storage-org-purge-hourly";
|
package/dist/storage/purge.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
4
|
-
|
|
2
|
+
import type { KernelSchemaDb } from "../db/kernel-schema.js";
|
|
3
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
4
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
6
|
+
import type { KernelLogger } from "../log.js";
|
|
7
|
+
import { type PrefixedStorage, StorageService } from "./storage.service.js";
|
|
8
|
+
/** 定时任务:清理已删除组织的对象存储(名字不含 `:`),每小时整点。 */
|
|
5
9
|
export declare const STORAGE_PURGE_JOB = "storage-org-purge";
|
|
6
|
-
export declare const STORAGE_PURGE_SCHEDULER_ID = "storage-org-purge-hourly";
|
|
7
|
-
export declare const STORAGE_PURGE_EVERY_MS = 3600000;
|
|
8
10
|
/**
|
|
9
11
|
* 删除「软删除超过 `afterDays` 天、尚未清理存储」的组织的全部对象(`StorageService.deleteOrg`),
|
|
10
12
|
* 成功后写 `orgs.storage_purged_at`,之后不再处理。返回本次清理的组织数。
|
|
@@ -20,8 +22,21 @@ export declare const STORAGE_PURGE_EVERY_MS = 3600000;
|
|
|
20
22
|
* 3. 成功:写 `storage_purged_at` 并清空认领;失败:清空认领(下一次运行重试),本次运行不再碰它。
|
|
21
23
|
*/
|
|
22
24
|
export declare function purgeDeletedOrgStorage(d: {
|
|
23
|
-
db:
|
|
24
|
-
storage:
|
|
25
|
+
db: Pick<KernelSchemaDb, "updateTable" | "selectFrom">;
|
|
26
|
+
storage: PrefixedStorage;
|
|
25
27
|
afterDays: number;
|
|
26
28
|
log: Pick<Logger, "info" | "warn">;
|
|
27
29
|
}): Promise<number>;
|
|
30
|
+
/**
|
|
31
|
+
* The hourly `storage-org-purge` job (fixed period: `@LockedCron`, once per tick across replicas):
|
|
32
|
+
* {@link purgeDeletedOrgStorage} with `storage.purgeDeletedOrgsAfterDays`.
|
|
33
|
+
*/
|
|
34
|
+
export declare class StoragePurgeJob {
|
|
35
|
+
private readonly db;
|
|
36
|
+
private readonly storage;
|
|
37
|
+
private readonly config;
|
|
38
|
+
readonly lockService: LockService;
|
|
39
|
+
readonly log: KernelLogger;
|
|
40
|
+
constructor(db: KernelDb, storage: StorageService, config: KernelConfigService, lockService: LockService, log: KernelLogger);
|
|
41
|
+
run(): Promise<void>;
|
|
42
|
+
}
|