@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.6
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 +61 -5
- package/dist/admin/admin.controller.d.ts +51 -14
- package/dist/admin/admin.controller.js +60 -19
- package/dist/admin/extensions.controller.d.ts +16 -2
- package/dist/admin/extensions.controller.js +26 -6
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +16 -0
- package/dist/agents/agent-lookup.js +11 -0
- package/dist/agents/agents.controller.d.ts +76 -1
- package/dist/agents/agents.controller.js +90 -11
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +32 -6
- package/dist/agents/agents.service.d.ts +54 -23
- package/dist/agents/agents.service.js +180 -76
- package/dist/agents/definition.d.ts +49 -0
- package/dist/agents/definition.js +45 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -0
- package/dist/agents/models.controller.d.ts +34 -5
- package/dist/agents/models.controller.js +50 -6
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/readiness.controller.d.ts +5 -5
- package/dist/agents/readiness.controller.js +6 -6
- package/dist/agents/templates.controller.d.ts +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +475 -52
- package/dist/background/background.module.js +8 -1
- package/dist/background/finish.d.ts +3 -2
- package/dist/background/launch-lock.d.ts +4 -3
- package/dist/background/launch-lock.js +4 -3
- package/dist/background/poll.job.d.ts +9 -6
- package/dist/background/poll.job.js +30 -22
- package/dist/background/session.d.ts +13 -2
- package/dist/background/session.js +13 -0
- package/dist/background/stop.d.ts +12 -6
- package/dist/background/stop.js +57 -39
- package/dist/background/store.d.ts +18 -6
- package/dist/background/store.js +12 -6
- package/dist/background/tasks.service.d.ts +15 -5
- package/dist/background/tasks.service.js +42 -17
- package/dist/background/wake-rules.d.ts +27 -18
- package/dist/background/wake-rules.js +52 -22
- package/dist/background/wake.d.ts +13 -11
- package/dist/background/wake.js +20 -14
- package/dist/catalog/admin-catalog.controller.d.ts +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +221 -0
- package/dist/catalog/platform-components.js +761 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +178 -34
- package/dist/catalog/plugin-import.js +622 -82
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1147 -1136
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.js +1 -0
- package/dist/channels/cards.js +20 -2
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +10 -2
- package/dist/config/schema.js +70 -22
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +27 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/conversations.controller.d.ts +43 -18
- package/dist/conversations/conversations.controller.js +79 -38
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +7 -7
- package/dist/conversations/conversations.service.d.ts +73 -15
- package/dist/conversations/conversations.service.js +115 -35
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +20 -5
- package/dist/conversations/event-log.js +60 -0
- package/dist/conversations/events.d.ts +84 -2
- package/dist/conversations/events.js +91 -17
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +5 -0
- package/dist/conversations/titles.d.ts +5 -3
- package/dist/conversations/titles.js +21 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +20 -1
- package/dist/ctx/create-ctx.js +38 -7
- package/dist/db/kernel-schema.d.ts +386 -18
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +85 -2
- package/dist/errors.js +85 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +4 -2
- package/dist/evals/run-replay.js +20 -6
- package/dist/evals/runs.service.d.ts +2 -1
- package/dist/evals/runs.service.js +13 -12
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +4 -3
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +65 -42
- package/dist/extensions/admin-view.d.ts +37 -10
- package/dist/extensions/admin-view.js +103 -20
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/deployment-config.d.ts +28 -5
- package/dist/extensions/deployment-config.js +48 -7
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +11 -11
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +24 -10
- package/dist/extensions/host.js +49 -54
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +75 -6
- package/dist/extensions/org-config.js +184 -32
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/permission-view.d.ts +16 -4
- package/dist/extensions/permission-view.js +4 -4
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.d.ts +12 -5
- package/dist/extensions/point-defaults.js +37 -9
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +25 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.js +1 -1
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +24 -1
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +19 -2
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +99 -0
- package/dist/models/enablement.js +263 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -4
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +37 -12
- package/dist/models/purposes.js +63 -17
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +9 -7
- package/dist/orgs/offboarding.js +28 -17
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +15 -3
- package/dist/orgs/settings.service.js +6 -2
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1405 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +9 -1
- package/dist/runtime/context/build.d.ts +6 -4
- package/dist/runtime/context/build.js +26 -7
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +5 -4
- package/dist/runtime/context/compaction.js +9 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.d.ts +8 -1
- package/dist/runtime/hook-calls.js +40 -7
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +35 -17
- package/dist/runtime/loop.d.ts +32 -4
- package/dist/runtime/maintenance.d.ts +7 -4
- package/dist/runtime/maintenance.js +23 -8
- package/dist/runtime/model-call.d.ts +38 -11
- package/dist/runtime/model-call.js +97 -24
- package/dist/runtime/providers.d.ts +146 -32
- package/dist/runtime/providers.js +321 -67
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +37 -3
- package/dist/runtime/run-queue.js +188 -11
- package/dist/runtime/run-worker.d.ts +12 -6
- package/dist/runtime/run-worker.js +58 -35
- package/dist/runtime/runtime.module.js +3 -0
- package/dist/runtime/step-log.d.ts +9 -4
- package/dist/runtime/step-log.js +8 -5
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +46 -32
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +33 -38
- package/dist/runtime/usage-report.js +169 -96
- package/dist/runtime/waits.d.ts +140 -37
- package/dist/runtime/waits.js +394 -106
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +4 -3
- package/dist/sandbox/sandbox.service.d.ts +229 -134
- package/dist/sandbox/sandbox.service.js +630 -409
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +23 -4
- package/dist/tools/builtin-names.d.ts +21 -5
- package/dist/tools/builtin-names.js +30 -5
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +6 -2
- package/dist/tools/builtins/builtin-tools.js +37 -12
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.js +13 -3
- package/dist/tools/builtins/sandbox/common.d.ts +43 -24
- package/dist/tools/builtins/sandbox/common.js +80 -45
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
- package/dist/tools/builtins/sandbox/task-output.js +30 -5
- package/dist/tools/builtins/sandbox/task-stop.js +2 -1
- package/dist/tools/builtins/sandbox/write.js +2 -2
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- package/dist/tools/builtins/web/extract.js +5 -1
- package/dist/tools/builtins/web/fetch.js +1 -0
- package/dist/tools/builtins/web/search.js +1 -0
- package/dist/tools/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +193 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +98 -5
- package/dist/tools/registry.js +87 -9
- package/dist/tools/tools.module.js +12 -2
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -32
- package/dist/extensions/org-config.controller.js +0 -70
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ExtensionContext, Logger } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import type { Redis } from "ioredis";
|
|
3
|
+
import { EventLog } from "../conversations/event-log.js";
|
|
4
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
5
|
+
import { type StreamSink } from "./model-call.js";
|
|
6
|
+
/** How long a draft lives without a write (a step that keeps streaming keeps refreshing it). */
|
|
7
|
+
export declare const DRAFT_TTL_SECONDS = 600;
|
|
8
|
+
/** At most one write per step per window, plus the one at the end of the model stream. */
|
|
9
|
+
export declare const DRAFT_FLUSH_MS = 200;
|
|
10
|
+
/** One step's draft: `{ text, thinking }` as JSON (spec 2026-11-07 §3.2). */
|
|
11
|
+
export declare const draftKey: (runId: string, step: number) => string;
|
|
12
|
+
/** What one step of a run has streamed so far. */
|
|
13
|
+
export interface RunDraft {
|
|
14
|
+
step: number;
|
|
15
|
+
text: string;
|
|
16
|
+
thinking: string;
|
|
17
|
+
}
|
|
18
|
+
/** A draft of a conversation's active run (the `event: draft` frame's data). */
|
|
19
|
+
export interface LiveDraft extends RunDraft {
|
|
20
|
+
runId: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Live drafts (spec 2026-11-07-run-input-and-live-drafts §3.2): what each step of a running run
|
|
24
|
+
* has streamed so far, kept in Redis so a viewer that (re)connects on any replica gets the text
|
|
25
|
+
* already shown, then the deltas from there on.
|
|
26
|
+
*
|
|
27
|
+
* The writer is the process executing the run: it holds the step's draft in memory (only for the
|
|
28
|
+
* runs it executes; {@link release} drops them when the execution ends) and writes it at most once
|
|
29
|
+
* per {@link DRAFT_FLUSH_MS}: on the first delta past the window, or, when deltas stop inside it,
|
|
30
|
+
* by one trailing one-shot timer per held step (process-local, unref'd, cancelled by a write,
|
|
31
|
+
* {@link clear} and {@link release}), plus once when the model stream ends ({@link flush}). Writes are issued before the delta is published, on the same
|
|
32
|
+
* connection as the bus publish, so a viewer that sees a delta past its snapshot and asks again
|
|
33
|
+
* gets a draft at least that far whenever that delta was written. Every write refreshes the
|
|
34
|
+
* {@link DRAFT_TTL_SECONDS} TTL; {@link clear} deletes the step's draft once its
|
|
35
|
+
* `assistant_message` is logged or the step is reset. Redis failures are logged, never thrown to
|
|
36
|
+
* the run: a draft is a convenience, the log stays the truth.
|
|
37
|
+
*/
|
|
38
|
+
export declare class RunDrafts {
|
|
39
|
+
private readonly redis;
|
|
40
|
+
private readonly kdb;
|
|
41
|
+
private readonly eventLog;
|
|
42
|
+
private readonly log;
|
|
43
|
+
private readonly held;
|
|
44
|
+
constructor(redis: Redis, kdb: KernelDb, eventLog: Pick<EventLog, "findByIdem">, log: Pick<Logger, "warn">);
|
|
45
|
+
private get db();
|
|
46
|
+
/** Adds a delta to the step's draft; writes it when the last write is a window old. */
|
|
47
|
+
append(runId: string, step: number, channel: "text" | "thinking", text: string): void;
|
|
48
|
+
/** The end of the step's model stream: writes what the window still holds. */
|
|
49
|
+
flush(runId: string, step: number): void;
|
|
50
|
+
/** Deletes the step's draft (its `assistant_message` is logged, or the step starts over). */
|
|
51
|
+
clear(runId: string, step: number): void;
|
|
52
|
+
/**
|
|
53
|
+
* Drops what this process holds for the run (its execution here ended: finished, suspended,
|
|
54
|
+
* handed over). Redis keeps what was written: another worker may continue the run, and a step
|
|
55
|
+
* that never ended is not shown once the run is no longer running (TTL removes it).
|
|
56
|
+
*/
|
|
57
|
+
release(runId: string): void;
|
|
58
|
+
/** The run's steps with a draft, by step. */
|
|
59
|
+
read(runId: string): Promise<RunDraft[]>;
|
|
60
|
+
/**
|
|
61
|
+
* The drafts a viewer of the conversation is shown: steps of its running run (or only `runId`)
|
|
62
|
+
* whose `assistant_message` is not logged. Redis is read before the log, so a step finalized
|
|
63
|
+
* meanwhile is either skipped here or its `assistant_message` reaches the viewer after the draft.
|
|
64
|
+
*/
|
|
65
|
+
live(conversationId: string, runId?: string): Promise<LiveDraft[]>;
|
|
66
|
+
/** Whether the run belongs to the conversation (the draft route's 404). */
|
|
67
|
+
runOf(conversationId: string, runId: string): Promise<boolean>;
|
|
68
|
+
private drop;
|
|
69
|
+
private write;
|
|
70
|
+
}
|
|
71
|
+
/** What {@link streamSink} uses. */
|
|
72
|
+
export interface StreamSinkDeps {
|
|
73
|
+
bus: Pick<ExtensionContext["bus"], "publish">;
|
|
74
|
+
drafts: Pick<RunDrafts, "append" | "flush" | "clear">;
|
|
75
|
+
log: Pick<Logger, "warn">;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The run's stream sink (one per execution of a run): publishes deltas on the conversation's topic
|
|
79
|
+
* (`conv.<id>`, shared with `{ kind: "events" }`, so a subscriber on any replica gets them) with
|
|
80
|
+
* `offset`, the characters of that channel (text or thinking) this attempt of the step streamed
|
|
81
|
+
* before the delta, and keeps the step's live draft. `step_reset` clears the draft and both
|
|
82
|
+
* offsets; `stream_end` / `step_end` only flush / clear the draft and are not published. A failed
|
|
83
|
+
* publish is only logged: deltas are drafts, the `assistant_message` in the log is the truth.
|
|
84
|
+
*/
|
|
85
|
+
export declare function streamSink(conversationId: string, deps: StreamSinkDeps): StreamSink;
|
|
@@ -0,0 +1,230 @@
|
|
|
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";
|
|
11
|
+
import { conversationTopic, EventLog, } from "../conversations/event-log.js";
|
|
12
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
13
|
+
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
14
|
+
import { assistantIdemKey } from "./model-call.js";
|
|
15
|
+
/** How long a draft lives without a write (a step that keeps streaming keeps refreshing it). */
|
|
16
|
+
export const DRAFT_TTL_SECONDS = 600;
|
|
17
|
+
/** At most one write per step per window, plus the one at the end of the model stream. */
|
|
18
|
+
export const DRAFT_FLUSH_MS = 200;
|
|
19
|
+
/** One step's draft: `{ text, thinking }` as JSON (spec 2026-11-07 §3.2). */
|
|
20
|
+
export const draftKey = (runId, step) => `capk:run-draft:${runId}:${step}`;
|
|
21
|
+
/** The steps of a run that have a draft (a set, so a reader finds them without a key scan). */
|
|
22
|
+
const stepsKey = (runId) => `capk:run-draft-steps:${runId}`;
|
|
23
|
+
const parse = (step, v) => {
|
|
24
|
+
if (v === null)
|
|
25
|
+
return null;
|
|
26
|
+
try {
|
|
27
|
+
const d = JSON.parse(v);
|
|
28
|
+
return {
|
|
29
|
+
step,
|
|
30
|
+
text: typeof d.text === "string" ? d.text : "",
|
|
31
|
+
thinking: typeof d.thinking === "string" ? d.thinking : "",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Live drafts (spec 2026-11-07-run-input-and-live-drafts §3.2): what each step of a running run
|
|
40
|
+
* has streamed so far, kept in Redis so a viewer that (re)connects on any replica gets the text
|
|
41
|
+
* already shown, then the deltas from there on.
|
|
42
|
+
*
|
|
43
|
+
* The writer is the process executing the run: it holds the step's draft in memory (only for the
|
|
44
|
+
* runs it executes; {@link release} drops them when the execution ends) and writes it at most once
|
|
45
|
+
* per {@link DRAFT_FLUSH_MS}: on the first delta past the window, or, when deltas stop inside it,
|
|
46
|
+
* by one trailing one-shot timer per held step (process-local, unref'd, cancelled by a write,
|
|
47
|
+
* {@link clear} and {@link release}), plus once when the model stream ends ({@link flush}). Writes are issued before the delta is published, on the same
|
|
48
|
+
* connection as the bus publish, so a viewer that sees a delta past its snapshot and asks again
|
|
49
|
+
* gets a draft at least that far whenever that delta was written. Every write refreshes the
|
|
50
|
+
* {@link DRAFT_TTL_SECONDS} TTL; {@link clear} deletes the step's draft once its
|
|
51
|
+
* `assistant_message` is logged or the step is reset. Redis failures are logged, never thrown to
|
|
52
|
+
* the run: a draft is a convenience, the log stays the truth.
|
|
53
|
+
*/
|
|
54
|
+
let RunDrafts = class RunDrafts {
|
|
55
|
+
redis;
|
|
56
|
+
kdb;
|
|
57
|
+
eventLog;
|
|
58
|
+
log;
|
|
59
|
+
held = new Map();
|
|
60
|
+
constructor(redis, kdb, eventLog, log) {
|
|
61
|
+
this.redis = redis;
|
|
62
|
+
this.kdb = kdb;
|
|
63
|
+
this.eventLog = eventLog;
|
|
64
|
+
this.log = log;
|
|
65
|
+
}
|
|
66
|
+
get db() {
|
|
67
|
+
return this.kdb.db;
|
|
68
|
+
}
|
|
69
|
+
/** Adds a delta to the step's draft; writes it when the last write is a window old. */
|
|
70
|
+
append(runId, step, channel, text) {
|
|
71
|
+
let h = this.held.get(runId);
|
|
72
|
+
if (h?.step !== step) {
|
|
73
|
+
if (h)
|
|
74
|
+
this.drop(runId, h);
|
|
75
|
+
h = {
|
|
76
|
+
step,
|
|
77
|
+
text: "",
|
|
78
|
+
thinking: "",
|
|
79
|
+
writtenAt: Number.NEGATIVE_INFINITY,
|
|
80
|
+
dirty: false,
|
|
81
|
+
timer: undefined,
|
|
82
|
+
};
|
|
83
|
+
this.held.set(runId, h);
|
|
84
|
+
}
|
|
85
|
+
h[channel] += text;
|
|
86
|
+
h.dirty = true;
|
|
87
|
+
const elapsed = Date.now() - h.writtenAt;
|
|
88
|
+
if (elapsed >= DRAFT_FLUSH_MS)
|
|
89
|
+
this.write(runId, h);
|
|
90
|
+
else if (h.timer === undefined) {
|
|
91
|
+
// held: written when the window ends even if no delta follows (a tool input, a pause)
|
|
92
|
+
h.timer = setTimeout(() => {
|
|
93
|
+
h.timer = undefined;
|
|
94
|
+
this.flush(runId, step);
|
|
95
|
+
}, DRAFT_FLUSH_MS - elapsed).unref();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** The end of the step's model stream: writes what the window still holds. */
|
|
99
|
+
flush(runId, step) {
|
|
100
|
+
const h = this.held.get(runId);
|
|
101
|
+
if (h?.step === step && h.dirty)
|
|
102
|
+
this.write(runId, h);
|
|
103
|
+
}
|
|
104
|
+
/** Deletes the step's draft (its `assistant_message` is logged, or the step starts over). */
|
|
105
|
+
clear(runId, step) {
|
|
106
|
+
const h = this.held.get(runId);
|
|
107
|
+
if (h?.step === step)
|
|
108
|
+
this.drop(runId, h);
|
|
109
|
+
this.redis
|
|
110
|
+
.multi()
|
|
111
|
+
.del(draftKey(runId, step))
|
|
112
|
+
.srem(stepsKey(runId), String(step))
|
|
113
|
+
.exec()
|
|
114
|
+
.catch((err) => this.log.warn("run draft clear failed", { runId, step, err }));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Drops what this process holds for the run (its execution here ended: finished, suspended,
|
|
118
|
+
* handed over). Redis keeps what was written: another worker may continue the run, and a step
|
|
119
|
+
* that never ended is not shown once the run is no longer running (TTL removes it).
|
|
120
|
+
*/
|
|
121
|
+
release(runId) {
|
|
122
|
+
const h = this.held.get(runId);
|
|
123
|
+
if (h)
|
|
124
|
+
this.drop(runId, h);
|
|
125
|
+
}
|
|
126
|
+
/** The run's steps with a draft, by step. */
|
|
127
|
+
async read(runId) {
|
|
128
|
+
const steps = (await this.redis.smembers(stepsKey(runId)))
|
|
129
|
+
.map(Number)
|
|
130
|
+
.filter((n) => Number.isSafeInteger(n))
|
|
131
|
+
.sort((a, b) => a - b);
|
|
132
|
+
if (steps.length === 0)
|
|
133
|
+
return [];
|
|
134
|
+
const values = await this.redis.mget(steps.map((s) => draftKey(runId, s)));
|
|
135
|
+
return steps.flatMap((s, i) => parse(s, values[i] ?? null) ?? []);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The drafts a viewer of the conversation is shown: steps of its running run (or only `runId`)
|
|
139
|
+
* whose `assistant_message` is not logged. Redis is read before the log, so a step finalized
|
|
140
|
+
* meanwhile is either skipped here or its `assistant_message` reaches the viewer after the draft.
|
|
141
|
+
*/
|
|
142
|
+
async live(conversationId, runId) {
|
|
143
|
+
let q = this.db
|
|
144
|
+
.selectFrom("runs")
|
|
145
|
+
.select("id")
|
|
146
|
+
.where("conversation_id", "=", conversationId)
|
|
147
|
+
.where("status", "=", "running");
|
|
148
|
+
if (runId !== undefined)
|
|
149
|
+
q = q.where("id", "=", runId);
|
|
150
|
+
const out = [];
|
|
151
|
+
for (const run of await q.execute()) {
|
|
152
|
+
for (const d of await this.read(run.id)) {
|
|
153
|
+
const final = await this.eventLog.findByIdem(conversationId, assistantIdemKey(run.id, d.step));
|
|
154
|
+
if (final === undefined)
|
|
155
|
+
out.push({ runId: run.id, ...d });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
/** Whether the run belongs to the conversation (the draft route's 404). */
|
|
161
|
+
async runOf(conversationId, runId) {
|
|
162
|
+
const row = await this.db
|
|
163
|
+
.selectFrom("runs")
|
|
164
|
+
.select("id")
|
|
165
|
+
.where("id", "=", runId)
|
|
166
|
+
.where("conversation_id", "=", conversationId)
|
|
167
|
+
.executeTakeFirst();
|
|
168
|
+
return row !== undefined;
|
|
169
|
+
}
|
|
170
|
+
drop(runId, h) {
|
|
171
|
+
clearTimeout(h.timer);
|
|
172
|
+
h.timer = undefined;
|
|
173
|
+
this.held.delete(runId);
|
|
174
|
+
}
|
|
175
|
+
write(runId, h) {
|
|
176
|
+
clearTimeout(h.timer);
|
|
177
|
+
h.timer = undefined;
|
|
178
|
+
h.writtenAt = Date.now();
|
|
179
|
+
h.dirty = false;
|
|
180
|
+
const { step } = h;
|
|
181
|
+
this.redis
|
|
182
|
+
.multi()
|
|
183
|
+
.set(draftKey(runId, step), JSON.stringify({ text: h.text, thinking: h.thinking }), "EX", DRAFT_TTL_SECONDS)
|
|
184
|
+
.sadd(stepsKey(runId), String(step))
|
|
185
|
+
.expire(stepsKey(runId), DRAFT_TTL_SECONDS)
|
|
186
|
+
.exec()
|
|
187
|
+
.catch((err) => this.log.warn("run draft write failed", { runId, step, err }));
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
RunDrafts = __decorate([
|
|
191
|
+
Injectable(),
|
|
192
|
+
__param(0, Inject(REDIS)),
|
|
193
|
+
__param(1, Inject(KernelDb)),
|
|
194
|
+
__param(2, Inject(EventLog)),
|
|
195
|
+
__param(3, Inject(KERNEL_LOGGER))
|
|
196
|
+
], RunDrafts);
|
|
197
|
+
export { RunDrafts };
|
|
198
|
+
/**
|
|
199
|
+
* The run's stream sink (one per execution of a run): publishes deltas on the conversation's topic
|
|
200
|
+
* (`conv.<id>`, shared with `{ kind: "events" }`, so a subscriber on any replica gets them) with
|
|
201
|
+
* `offset`, the characters of that channel (text or thinking) this attempt of the step streamed
|
|
202
|
+
* before the delta, and keeps the step's live draft. `step_reset` clears the draft and both
|
|
203
|
+
* offsets; `stream_end` / `step_end` only flush / clear the draft and are not published. A failed
|
|
204
|
+
* publish is only logged: deltas are drafts, the `assistant_message` in the log is the truth.
|
|
205
|
+
*/
|
|
206
|
+
export function streamSink(conversationId, deps) {
|
|
207
|
+
let at = { runId: "", step: -1, text: 0, thinking: 0 };
|
|
208
|
+
const publish = (msg) => deps.bus
|
|
209
|
+
.publish(conversationTopic(conversationId), msg)
|
|
210
|
+
.catch((err) => deps.log.warn("stream delta publish failed", { conversationId, err }));
|
|
211
|
+
return (d) => {
|
|
212
|
+
if (d.kind === "stream_end")
|
|
213
|
+
return deps.drafts.flush(d.runId, d.step);
|
|
214
|
+
if (d.kind === "step_end")
|
|
215
|
+
return deps.drafts.clear(d.runId, d.step);
|
|
216
|
+
if (at.runId !== d.runId || at.step !== d.step || d.kind === "step_reset") {
|
|
217
|
+
at = { runId: d.runId, step: d.step, text: 0, thinking: 0 };
|
|
218
|
+
}
|
|
219
|
+
if (d.kind === "step_reset") {
|
|
220
|
+
deps.drafts.clear(d.runId, d.step);
|
|
221
|
+
void publish({ kind: "delta", runId: d.runId, step: d.step, delta: "step_reset" });
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const text = d.text ?? "";
|
|
225
|
+
const offset = at[d.kind];
|
|
226
|
+
at[d.kind] += text.length;
|
|
227
|
+
deps.drafts.append(d.runId, d.step, d.kind, text);
|
|
228
|
+
void publish({ kind: "delta", runId: d.runId, step: d.step, delta: d.kind, text, offset });
|
|
229
|
+
};
|
|
230
|
+
}
|
|
@@ -34,12 +34,10 @@ export declare class RunJobs {
|
|
|
34
34
|
queue(name?: string): Queue<RunJobData>;
|
|
35
35
|
/** A run job by id on the queue `name`, or undefined. */
|
|
36
36
|
getJob(jobId: string, name?: string): Promise<Job<RunJobData> | undefined>;
|
|
37
|
-
/** Adds a conversation run job (`ensureRun`'s own enqueue). */
|
|
38
|
-
add(data: RunJobData, jobId: string): Promise<void>;
|
|
39
37
|
/**
|
|
40
|
-
* Enqueues a run job under the caller's job id (resumes, dispatches, repairs). The
|
|
41
|
-
* the conversation's kind (a sub-agent's runs go to
|
|
42
|
-
* `kind` when the caller knows it, else it is read.
|
|
38
|
+
* Enqueues a run job under the caller's job id (`ensureRun`, resumes, dispatches, repairs). The
|
|
39
|
+
* queue follows the conversation's kind (a sub-agent's runs go to
|
|
40
|
+
* {@link SUBAGENT_RUN_QUEUE_NAME}); pass `kind` when the caller knows it, else it is read.
|
|
43
41
|
*/
|
|
44
42
|
enqueue(data: RunJobData, jobId: string, kind?: ConversationKind): Promise<void>;
|
|
45
43
|
}
|
package/dist/runtime/run-jobs.js
CHANGED
|
@@ -54,14 +54,10 @@ let RunJobs = class RunJobs {
|
|
|
54
54
|
getJob(jobId, name = RUN_QUEUE_NAME) {
|
|
55
55
|
return this.queue(name).getJob(jobId);
|
|
56
56
|
}
|
|
57
|
-
/** Adds a conversation run job (`ensureRun`'s own enqueue). */
|
|
58
|
-
async add(data, jobId) {
|
|
59
|
-
await this.queue().add("run", data, { jobId, ...RUN_JOB_OPTIONS });
|
|
60
|
-
}
|
|
61
57
|
/**
|
|
62
|
-
* Enqueues a run job under the caller's job id (resumes, dispatches, repairs). The
|
|
63
|
-
* the conversation's kind (a sub-agent's runs go to
|
|
64
|
-
* `kind` when the caller knows it, else it is read.
|
|
58
|
+
* Enqueues a run job under the caller's job id (`ensureRun`, resumes, dispatches, repairs). The
|
|
59
|
+
* queue follows the conversation's kind (a sub-agent's runs go to
|
|
60
|
+
* {@link SUBAGENT_RUN_QUEUE_NAME}); pass `kind` when the caller knows it, else it is read.
|
|
65
61
|
*/
|
|
66
62
|
async enqueue(data, jobId, kind) {
|
|
67
63
|
const k = kind ??
|
|
@@ -52,9 +52,11 @@ export declare class RunQueue {
|
|
|
52
52
|
* 且没有 queued / running / waiting 的运行时:插入 `runs`(queued)并投递任务,返回 runId;否则返回 null。
|
|
53
53
|
*
|
|
54
54
|
* The boundary (`trigger_seq`) is that newest message; with none unconsumed, the queue's head
|
|
55
|
-
* once it is sent; with no head either, a wake-eligible finished background task
|
|
56
|
-
* Bash spec §3, {@link wakeDecisionIn}): the run is
|
|
57
|
-
*
|
|
55
|
+
* once it is sent; with no head either, a wake-eligible finished background task or sub-agent
|
|
56
|
+
* delivery (background Bash spec §3, agent map spec §5.3, {@link wakeDecisionIn}): the run is
|
|
57
|
+
* then attributed to the event's trigger account and joins the tree's budget window, and an
|
|
58
|
+
* event inside the wake window schedules the delayed `bg-wake` job instead. A sub-agent's
|
|
59
|
+
* conversation is only woken this way ({@link childWakeIn}).
|
|
58
60
|
*
|
|
59
61
|
* 孤儿清理(R29,按需进行,没有定时器):已有的 queued / running 运行若 BullMQ 任务已不存在、
|
|
60
62
|
* 会话锁也无人持有(queued 的还要超过宽限期),说明没有任何 worker 会再执行它——写
|
|
@@ -71,6 +73,38 @@ export declare class RunQueue {
|
|
|
71
73
|
}): Promise<string | null>;
|
|
72
74
|
/** {@link ensureRun}'s transaction: what it decided goes back through `st`. */
|
|
73
75
|
private ensureRunIn;
|
|
76
|
+
/**
|
|
77
|
+
* {@link ensureRunIn} for a sub-agent's conversation (agent map spec §5.3), under its row lock.
|
|
78
|
+
* Its runs from a task, or from a message to an idle sub-agent, are started by the dispatch
|
|
79
|
+
* (`Agent`, `SendMessage`), which also records the dispatch. Here it is started from a parent's
|
|
80
|
+
* message that reached its run after that run's last model call (agent map spec §10: a message
|
|
81
|
+
* racing the run's end starts a new run, never lost); and it is woken by its own background
|
|
82
|
+
* task's finish or a delivery from its own sub-agent, under the same rules as a chat
|
|
83
|
+
* conversation. Neither happens once its last run was stopped (`aborted`): a stopped sub-agent is
|
|
84
|
+
* started again only by its parent. Both read the queue and the trigger account's access on the root
|
|
85
|
+
* of its tree; a message needs no wake setting and has no wake window. The run counts against
|
|
86
|
+
* the root's budget window and runs on the sub-agent queue under `runJobId(child, boundary
|
|
87
|
+
* seq)`. An active run is left to the orphan repair after the commit (`repairRunId`), never
|
|
88
|
+
* started past.
|
|
89
|
+
*/
|
|
90
|
+
private childWakeIn;
|
|
91
|
+
/**
|
|
92
|
+
* The newest unconsumed message of an idle sub-agent (a `SendMessage` its last run did not absorb)
|
|
93
|
+
* as a run boundary, or null: none; the root's queue is paused or the root deleted (the
|
|
94
|
+
* message waits for the unpause, {@link wakeHeldTree}); or its author can no longer send to the
|
|
95
|
+
* root (it waits for a later run). The caller already refused a stopped sub-agent (last run
|
|
96
|
+
* `aborted`): a message that reached it while running and then stopped is parked, and the next
|
|
97
|
+
* run its parent starts absorbs it. Called under the sub-agent's row lock.
|
|
98
|
+
*/
|
|
99
|
+
private pendingMessageIn;
|
|
100
|
+
/**
|
|
101
|
+
* Re-derives the wakes a paused root held for its tree (agent map spec §5.3: a paused root queue
|
|
102
|
+
* holds the wakes of the whole tree): after the root's queue is unpaused, {@link ensureRun} on
|
|
103
|
+
* every sub-agent conversation below it that has an unconsumed wake event or message and no
|
|
104
|
+
* active run (the root itself is the caller's own `ensureRun`). Errors are logged; the next
|
|
105
|
+
* event, run end or page opening of that conversation re-derives its wake.
|
|
106
|
+
*/
|
|
107
|
+
wakeHeldTree(rootId: string): Promise<void>;
|
|
74
108
|
/**
|
|
75
109
|
* Schedules the delayed `bg-wake` job at the end of the conversation's wake window (after the
|
|
76
110
|
* commit): one job per conversation and window end, so finishes inside one window share it. It
|