@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5
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 +47 -16
- package/dist/admin/admin.controller.js +44 -19
- package/dist/admin/extensions.controller.d.ts +24 -3
- package/dist/admin/extensions.controller.js +48 -8
- 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 +19 -0
- package/dist/agents/agent-lookup.js +21 -0
- package/dist/agents/agent-profile.service.d.ts +29 -0
- package/dist/agents/agent-profile.service.js +117 -0
- package/dist/agents/agents.controller.d.ts +168 -3
- package/dist/agents/agents.controller.js +201 -12
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +36 -6
- package/dist/agents/agents.service.d.ts +64 -27
- package/dist/agents/agents.service.js +199 -74
- package/dist/agents/definition.d.ts +53 -0
- package/dist/agents/definition.js +55 -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/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +9 -3
- package/dist/agents/models.controller.js +19 -4
- 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/profile.d.ts +96 -0
- package/dist/agents/profile.js +51 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- 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 +476 -53
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +87 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +94 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +36 -0
- package/dist/background/launch.js +70 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +190 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +79 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +243 -0
- package/dist/background/store.d.ts +162 -0
- package/dist/background/store.js +357 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +77 -0
- package/dist/background/tasks.service.js +211 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- 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/claude/agents.js +2 -0
- 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 +623 -83
- 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 +1148 -1137
- 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 +21 -3
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/connections.service.d.ts +16 -1
- package/dist/channels/connections.service.js +38 -4
- 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/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +24 -2
- package/dist/config/schema.js +145 -19
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -23
- package/dist/conversations/conversations.controller.js +141 -50
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.service.d.ts +108 -9
- package/dist/conversations/conversations.service.js +237 -30
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +21 -6
- package/dist/conversations/event-log.js +70 -1
- package/dist/conversations/events.d.ts +140 -0
- package/dist/conversations/events.js +142 -13
- package/dist/conversations/queue.d.ts +3 -1
- package/dist/conversations/queue.js +13 -2
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +8 -1
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +36 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +420 -20
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- 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 +90 -2
- package/dist/errors.js +90 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +7 -2
- package/dist/evals/run-replay.js +42 -7
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +13 -7
- package/dist/evals/trajectory.js +1 -1
- 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 +67 -42
- package/dist/extensions/admin-view.d.ts +39 -10
- package/dist/extensions/admin-view.js +111 -20
- package/dist/extensions/blobs.js +1 -0
- 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-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +6 -0
- package/dist/extensions/deployment-config.d.ts +78 -8
- package/dist/extensions/deployment-config.js +172 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +14 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +45 -2
- package/dist/extensions/host.js +112 -16
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +81 -6
- package/dist/extensions/org-config.js +195 -44
- 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/package.d.ts +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +19 -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.controller.d.ts +34 -0
- package/dist/extensions/point-defaults.controller.js +71 -0
- package/dist/extensions/point-defaults.d.ts +71 -0
- package/dist/extensions/point-defaults.js +234 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +31 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- 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.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/cookies.d.ts +20 -5
- package/dist/identity/cookies.js +44 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.d.ts +5 -1
- package/dist/identity/me.controller.js +12 -3
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- 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 +2 -2
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +27 -1
- package/dist/infra/database/database.module.js +1 -0
- 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/lifecycle/process-guards.js +4 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- 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/log.d.ts +13 -1
- package/dist/log.js +93 -17
- 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 +43 -9
- package/dist/models/purposes.js +48 -18
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- 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 +20 -3
- package/dist/orgs/settings.service.js +19 -4
- 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 +1387 -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 +15 -1
- package/dist/runtime/context/build.d.ts +11 -7
- package/dist/runtime/context/build.js +46 -19
- package/dist/runtime/context/claude-tools.d.ts +3 -1
- package/dist/runtime/context/claude-tools.js +8 -6
- package/dist/runtime/context/compaction.js +13 -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.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +34 -5
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +46 -8
- package/dist/runtime/model-call.js +72 -21
- package/dist/runtime/providers.d.ts +6 -0
- package/dist/runtime/providers.js +8 -0
- 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 +59 -2
- package/dist/runtime/run-queue.js +311 -38
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +69 -33
- package/dist/runtime/runtime.module.js +11 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- 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 +44 -28
- 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.d.ts +2 -1
- package/dist/runtime/usage-report.js +19 -13
- package/dist/runtime/waits.d.ts +145 -36
- package/dist/runtime/waits.js +423 -109
- 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 +10 -4
- package/dist/sandbox/sandbox.service.d.ts +282 -129
- package/dist/sandbox/sandbox.service.js +736 -381
- 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 +25 -4
- package/dist/tools/builtin-names.d.ts +41 -7
- package/dist/tools/builtin-names.js +59 -7
- 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 +19 -1
- package/dist/tools/builtins/builtin-tools.js +59 -2
- 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.d.ts +1 -1
- package/dist/tools/builtins/sandbox/bash.js +241 -4
- package/dist/tools/builtins/sandbox/common.d.ts +69 -27
- package/dist/tools/builtins/sandbox/common.js +87 -48
- package/dist/tools/builtins/sandbox/deliver.js +1 -1
- 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 +3 -1
- package/dist/tools/builtins/sandbox/index.js +7 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
- package/dist/tools/builtins/sandbox/task-output.js +329 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- 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/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -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/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -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 +202 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +120 -8
- package/dist/tools/registry.js +112 -19
- package/dist/tools/tools.module.js +24 -2
- package/dist/tools/validate.js +1 -1
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- 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/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 -24
- package/dist/extensions/org-config.controller.js +0 -62
package/dist/runtime/stream.js
CHANGED
|
@@ -15,6 +15,7 @@ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
|
15
15
|
import { GracefulShutdown } from "../infra/lifecycle/graceful-shutdown.service.js";
|
|
16
16
|
import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
|
|
17
17
|
import { isUiBusMessage, uiFrame } from "../ui/registry.js";
|
|
18
|
+
import { RunDrafts } from "./run-drafts.js";
|
|
18
19
|
/** 补读事件的分页大小。 */
|
|
19
20
|
const PAGE = 500;
|
|
20
21
|
/** 慢客户端的积压上限:超过即关闭流,客户端带 Last-Event-ID 重连补读。 */
|
|
@@ -55,6 +56,7 @@ function isBusMessage(m) {
|
|
|
55
56
|
return k === "delta" && typeof m.runId === "string";
|
|
56
57
|
}
|
|
57
58
|
const eventFrame = (e) => `id: ${e.seq}\nevent: event\ndata: ${JSON.stringify(e)}\n\n`;
|
|
59
|
+
const draftFrame = (d) => `event: draft\ndata: ${JSON.stringify({ runId: d.runId, step: d.step, text: d.text, thinking: d.thinking })}\n\n`;
|
|
58
60
|
/**
|
|
59
61
|
* 会话事件流(SSE):本进程持有的连接集合,停机时一并关闭。
|
|
60
62
|
* 跨副本的数据只经 PG(事件日志)与内核 bus(`conv.<id>`)流动,进程内只保存连接本身的资源
|
|
@@ -71,13 +73,14 @@ let ConversationStreams = class ConversationStreams {
|
|
|
71
73
|
* an event stream. Without `GracefulShutdown` (a standalone HTTP application, tests only) the
|
|
72
74
|
* streams end with their connections.
|
|
73
75
|
*/
|
|
74
|
-
constructor(eventLog, bus, access, config, log, shutdown) {
|
|
76
|
+
constructor(eventLog, bus, access, config, log, drafts, shutdown) {
|
|
75
77
|
this.d = {
|
|
76
78
|
eventLog,
|
|
77
79
|
bus,
|
|
78
80
|
access: (orgId, conversationId, viewer) => access.isAccessible(orgId, conversationId, viewer),
|
|
79
81
|
config,
|
|
80
82
|
log,
|
|
83
|
+
drafts: (conversationId) => drafts.live(conversationId),
|
|
81
84
|
};
|
|
82
85
|
if (shutdown?.signal.aborted)
|
|
83
86
|
this.closeAll();
|
|
@@ -131,8 +134,9 @@ ConversationStreams = __decorate([
|
|
|
131
134
|
__param(2, Inject(ConversationAccess)),
|
|
132
135
|
__param(3, Inject(KernelConfigService)),
|
|
133
136
|
__param(4, Inject(KERNEL_LOGGER)),
|
|
134
|
-
__param(5,
|
|
135
|
-
__param(
|
|
137
|
+
__param(5, Inject(RunDrafts)),
|
|
138
|
+
__param(6, Optional()),
|
|
139
|
+
__param(6, Inject(GracefulShutdown))
|
|
136
140
|
], ConversationStreams);
|
|
137
141
|
export { ConversationStreams };
|
|
138
142
|
/**
|
|
@@ -176,6 +180,9 @@ class Connection {
|
|
|
176
180
|
this.openGate = resolve;
|
|
177
181
|
});
|
|
178
182
|
this.enqueue(() => this.catchUp());
|
|
183
|
+
// live drafts (spec 2026-11-07 §3.2): after the catch-up, before any delta (deltas are queued
|
|
184
|
+
// behind this); a delta also in the draft is dropped by the client by its offset
|
|
185
|
+
this.enqueue(() => this.sendDrafts());
|
|
179
186
|
}
|
|
180
187
|
async subscribe() {
|
|
181
188
|
const un = await this.d.bus.subscribe(conversationTopic(this.p.conversationId), (m) => this.onMessage(m));
|
|
@@ -282,6 +289,23 @@ class Connection {
|
|
|
282
289
|
return;
|
|
283
290
|
}
|
|
284
291
|
}
|
|
292
|
+
/** One `event: draft` per step of the running run whose `assistant_message` is not logged. */
|
|
293
|
+
async sendDrafts() {
|
|
294
|
+
let drafts;
|
|
295
|
+
try {
|
|
296
|
+
drafts = await this.d.drafts(this.p.conversationId);
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
// a convenience: without it the client resumes from the next delta (and asks for the draft)
|
|
300
|
+
this.d.log.warn("conversation stream cannot read live drafts", {
|
|
301
|
+
conversationId: this.p.conversationId,
|
|
302
|
+
err,
|
|
303
|
+
});
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
for (const d of drafts)
|
|
307
|
+
this.write(draftFrame(d));
|
|
308
|
+
}
|
|
285
309
|
/** 发最后一帧错误并关闭(未发完的排队输出随关闭丢弃)。 */
|
|
286
310
|
fail(code) {
|
|
287
311
|
if (this.closed)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AppendEvent, EventLog } from "../../conversations/event-log.js";
|
|
2
2
|
import type { EventPayload } from "../../conversations/events.js";
|
|
3
3
|
import type { KernelSchemaDb } from "../../db/kernel-schema.js";
|
|
4
|
+
import type { SubagentAbortedBy } from "./status.js";
|
|
4
5
|
/** Idempotency key of the parent's `subagent_finished` event. */
|
|
5
6
|
export declare const finishedIdemKey: (childRunId: string) => string;
|
|
6
7
|
/** A dispatch row, by its child run. */
|
|
@@ -10,29 +11,76 @@ export interface DispatchRow {
|
|
|
10
11
|
parentConversationId: string;
|
|
11
12
|
childConversationId: string;
|
|
12
13
|
childRunId: string;
|
|
14
|
+
/** The budget run the dispatch counts against (agent map spec §6); set when read from the row. */
|
|
15
|
+
budgetRunId?: string;
|
|
16
|
+
/**
|
|
17
|
+
* A person's fork invocation (phase D, `subagent_dispatches.for_skill`): the parent run waits on
|
|
18
|
+
* it (`subagents` wait); every other dispatch runs in the background (agent map spec §5.4).
|
|
19
|
+
*/
|
|
20
|
+
forSkill?: boolean;
|
|
13
21
|
}
|
|
14
22
|
/** The dispatch that started `childRunId`, or null (not a sub-agent run). */
|
|
15
23
|
export declare function dispatchOfChildRun(db: KernelSchemaDb, childRunId: string): Promise<DispatchRow | null>;
|
|
24
|
+
/**
|
|
25
|
+
* The dispatch row a finished child run reports through (agent map spec §5.2: every run of a child
|
|
26
|
+
* conversation that ends appends one `finished` delivery to its parent): the run's own dispatch
|
|
27
|
+
* (`Agent`, `SendMessage`), else, for a run nobody dispatched (a wake run, §5.3), the newest dispatch
|
|
28
|
+
* of its conversation with `childRunId` set to this run, `forSkill` false (a wake run of a fork's
|
|
29
|
+
* child is delivered like any background run; no parent run waits on it) and the run's own budget
|
|
30
|
+
* run. Null when the run is unknown or its conversation was never dispatched.
|
|
31
|
+
*/
|
|
32
|
+
export declare function deliveryRowOfChildRun(db: KernelSchemaDb, childRunId: string): Promise<DispatchRow | null>;
|
|
16
33
|
/** The dispatch of the parent call `(runId, callId)`, or null (not dispatched yet). */
|
|
17
34
|
export declare function dispatchOfCall(db: KernelSchemaDb, runId: string, callId: string): Promise<DispatchRow | null>;
|
|
18
35
|
/**
|
|
19
|
-
* The
|
|
20
|
-
*
|
|
36
|
+
* The root conversation of `conversationId`'s tree (agent map spec §6): the first ancestor without
|
|
37
|
+
* a parent, or `conversationId` itself for a root (or an unknown id).
|
|
38
|
+
*/
|
|
39
|
+
export declare function rootConversationOf(db: KernelSchemaDb, conversationId: string): Promise<string>;
|
|
40
|
+
/** Where a sub-agent's request for a person is shown: see {@link rootSurfaceOf}. */
|
|
41
|
+
export interface RootSurface {
|
|
42
|
+
/** The root conversation of the sub-agent's tree. */
|
|
43
|
+
conversationId: string;
|
|
44
|
+
/** The root run the event is logged under: the one that last dispatched the branch. */
|
|
45
|
+
runId: string;
|
|
46
|
+
/** Child conversation ids from the root's child down to the sub-agent itself. */
|
|
47
|
+
path: string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Where the sub-agent conversation `conversationId`, in its run `runId`, shows a request for a
|
|
51
|
+
* person (`subagent_waiting`: an approval, a question or a connect card; agent map spec §7): the
|
|
52
|
+
* **root** conversation of its tree, the only one a person looks at, with the path from the root's
|
|
53
|
+
* child down to it, under the root run that last dispatched (or messaged) the root's child on that
|
|
54
|
+
* path (for a child of the root, the run's own dispatch first). `parent`, when the caller knows the
|
|
55
|
+
* run's dispatch and it was made by the root (`depth` 0), answers without a read. Null for a root
|
|
56
|
+
* conversation, or a branch the root never dispatched.
|
|
57
|
+
*/
|
|
58
|
+
export declare function rootSurfaceOf(db: KernelSchemaDb, conversationId: string, runId: string, parent?: {
|
|
59
|
+
conversationId: string;
|
|
60
|
+
runId: string;
|
|
61
|
+
depth: number;
|
|
62
|
+
}): Promise<RootSurface | null>;
|
|
63
|
+
/**
|
|
64
|
+
* The result of a finished child run (spec §4.4) and its `subagent_finished` payload, from the
|
|
65
|
+
* child's log only: the status from its terminal event, the reply from its last
|
|
21
66
|
* `assistant_message` (text blocks), the tool call count from its `tool_result` events, the usage
|
|
22
67
|
* from its `usage` events (compaction included) and the duration from `run_started` to the
|
|
23
|
-
* terminal event. Null while the run has no terminal event.
|
|
68
|
+
* terminal event. Null while the run has no terminal event. `content` is the fork report's text
|
|
69
|
+
* (`agentResultText`); `reply`, `errorMessage` and `abortedBy` are what a background child's
|
|
70
|
+
* finished `subagent_delivery` carries.
|
|
24
71
|
*
|
|
25
72
|
* `modelGiven`: the parent's call named a `model`; for an org agent, which runs on its own model
|
|
26
73
|
* (§5.4, §5.5), the status line then says `model: the agent's own`.
|
|
27
74
|
*/
|
|
28
|
-
export declare function childResult(eventLog: EventLog, row: DispatchRow,
|
|
29
|
-
/** `forSkill`: a fork invocation's report (no resume hint, see `agentResultText`). */
|
|
30
|
-
opts?: {
|
|
75
|
+
export declare function childResult(eventLog: EventLog, row: DispatchRow, opts?: {
|
|
31
76
|
modelGiven?: boolean;
|
|
32
|
-
forSkill?: boolean;
|
|
33
77
|
}): Promise<{
|
|
34
78
|
content: string;
|
|
35
79
|
isError: boolean;
|
|
80
|
+
/** The text of the child's last `assistant_message`. */
|
|
81
|
+
reply: string;
|
|
82
|
+
errorMessage?: string;
|
|
83
|
+
abortedBy?: SubagentAbortedBy;
|
|
36
84
|
finished: EventPayload<"subagent_finished">;
|
|
37
85
|
} | null>;
|
|
38
86
|
/** The parent's `subagent_finished` event for a finished child (idempotent by its key). */
|
|
@@ -8,6 +8,8 @@ const DISPATCH_COLUMNS = [
|
|
|
8
8
|
"parent_conversation_id",
|
|
9
9
|
"child_conversation_id",
|
|
10
10
|
"child_run_id",
|
|
11
|
+
"budget_run_id",
|
|
12
|
+
"for_skill",
|
|
11
13
|
];
|
|
12
14
|
const toRow = (r) => ({
|
|
13
15
|
parentRunId: r.parent_run_id,
|
|
@@ -15,6 +17,8 @@ const toRow = (r) => ({
|
|
|
15
17
|
parentConversationId: r.parent_conversation_id,
|
|
16
18
|
childConversationId: r.child_conversation_id,
|
|
17
19
|
childRunId: r.child_run_id,
|
|
20
|
+
budgetRunId: r.budget_run_id,
|
|
21
|
+
forSkill: r.for_skill,
|
|
18
22
|
});
|
|
19
23
|
/** The dispatch that started `childRunId`, or null (not a sub-agent run). */
|
|
20
24
|
export async function dispatchOfChildRun(db, childRunId) {
|
|
@@ -25,6 +29,41 @@ export async function dispatchOfChildRun(db, childRunId) {
|
|
|
25
29
|
.executeTakeFirst();
|
|
26
30
|
return r ? toRow(r) : null;
|
|
27
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The dispatch row a finished child run reports through (agent map spec §5.2: every run of a child
|
|
34
|
+
* conversation that ends appends one `finished` delivery to its parent): the run's own dispatch
|
|
35
|
+
* (`Agent`, `SendMessage`), else, for a run nobody dispatched (a wake run, §5.3), the newest dispatch
|
|
36
|
+
* of its conversation with `childRunId` set to this run, `forSkill` false (a wake run of a fork's
|
|
37
|
+
* child is delivered like any background run; no parent run waits on it) and the run's own budget
|
|
38
|
+
* run. Null when the run is unknown or its conversation was never dispatched.
|
|
39
|
+
*/
|
|
40
|
+
export async function deliveryRowOfChildRun(db, childRunId) {
|
|
41
|
+
const own = await dispatchOfChildRun(db, childRunId);
|
|
42
|
+
if (own)
|
|
43
|
+
return own;
|
|
44
|
+
const run = await db
|
|
45
|
+
.selectFrom("runs")
|
|
46
|
+
.select(["conversation_id", "budget_run_id"])
|
|
47
|
+
.where("id", "=", childRunId)
|
|
48
|
+
.executeTakeFirst();
|
|
49
|
+
if (!run)
|
|
50
|
+
return null;
|
|
51
|
+
const latest = await db
|
|
52
|
+
.selectFrom("subagent_dispatches")
|
|
53
|
+
.select(DISPATCH_COLUMNS)
|
|
54
|
+
.where("child_conversation_id", "=", run.conversation_id)
|
|
55
|
+
.orderBy("created_at", "desc")
|
|
56
|
+
.limit(1)
|
|
57
|
+
.executeTakeFirst();
|
|
58
|
+
if (!latest)
|
|
59
|
+
return null;
|
|
60
|
+
return {
|
|
61
|
+
...toRow(latest),
|
|
62
|
+
childRunId,
|
|
63
|
+
forSkill: false,
|
|
64
|
+
...(run.budget_run_id !== null && { budgetRunId: run.budget_run_id }),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
28
67
|
/** The dispatch of the parent call `(runId, callId)`, or null (not dispatched yet). */
|
|
29
68
|
export async function dispatchOfCall(db, runId, callId) {
|
|
30
69
|
const r = await db
|
|
@@ -35,6 +74,63 @@ export async function dispatchOfCall(db, runId, callId) {
|
|
|
35
74
|
.executeTakeFirst();
|
|
36
75
|
return r ? toRow(r) : null;
|
|
37
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* `conversationId` and its ancestors, nearest first, ending at the root of its tree (the first
|
|
79
|
+
* conversation without a parent); just `[conversationId]` for a root or an unknown id. Walks at
|
|
80
|
+
* most 16 levels, far above `subagents.maxDepth`'s bound of 5.
|
|
81
|
+
*/
|
|
82
|
+
async function ancestryOf(db, conversationId) {
|
|
83
|
+
const chain = [conversationId];
|
|
84
|
+
for (let i = 0; i < 16; i++) {
|
|
85
|
+
const row = await db
|
|
86
|
+
.selectFrom("conversations")
|
|
87
|
+
.select("parent_conversation_id")
|
|
88
|
+
.where("id", "=", chain[chain.length - 1])
|
|
89
|
+
.executeTakeFirst();
|
|
90
|
+
if (!row?.parent_conversation_id)
|
|
91
|
+
return chain;
|
|
92
|
+
chain.push(row.parent_conversation_id);
|
|
93
|
+
}
|
|
94
|
+
return chain;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The root conversation of `conversationId`'s tree (agent map spec §6): the first ancestor without
|
|
98
|
+
* a parent, or `conversationId` itself for a root (or an unknown id).
|
|
99
|
+
*/
|
|
100
|
+
export async function rootConversationOf(db, conversationId) {
|
|
101
|
+
return (await ancestryOf(db, conversationId)).at(-1);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Where the sub-agent conversation `conversationId`, in its run `runId`, shows a request for a
|
|
105
|
+
* person (`subagent_waiting`: an approval, a question or a connect card; agent map spec §7): the
|
|
106
|
+
* **root** conversation of its tree, the only one a person looks at, with the path from the root's
|
|
107
|
+
* child down to it, under the root run that last dispatched (or messaged) the root's child on that
|
|
108
|
+
* path (for a child of the root, the run's own dispatch first). `parent`, when the caller knows the
|
|
109
|
+
* run's dispatch and it was made by the root (`depth` 0), answers without a read. Null for a root
|
|
110
|
+
* conversation, or a branch the root never dispatched.
|
|
111
|
+
*/
|
|
112
|
+
export async function rootSurfaceOf(db, conversationId, runId, parent) {
|
|
113
|
+
if (parent?.depth === 0) {
|
|
114
|
+
return { conversationId: parent.conversationId, runId: parent.runId, path: [conversationId] };
|
|
115
|
+
}
|
|
116
|
+
const chain = await ancestryOf(db, conversationId);
|
|
117
|
+
if (chain.length < 2)
|
|
118
|
+
return null;
|
|
119
|
+
const root = chain.at(-1);
|
|
120
|
+
const path = chain.slice(0, -1).reverse();
|
|
121
|
+
const top = path[0];
|
|
122
|
+
const own = path.length === 1 ? await dispatchOfChildRun(db, runId) : null;
|
|
123
|
+
const dispatch = own ??
|
|
124
|
+
(await db
|
|
125
|
+
.selectFrom("subagent_dispatches")
|
|
126
|
+
.select(["parent_run_id as parentRunId"])
|
|
127
|
+
.where("child_conversation_id", "=", top)
|
|
128
|
+
.where("parent_conversation_id", "=", root)
|
|
129
|
+
.orderBy("created_at", "desc")
|
|
130
|
+
.limit(1)
|
|
131
|
+
.executeTakeFirst());
|
|
132
|
+
return dispatch ? { conversationId: root, runId: dispatch.parentRunId, path } : null;
|
|
133
|
+
}
|
|
38
134
|
/** All events of one run of a conversation, by seq. */
|
|
39
135
|
async function runEvents(eventLog, conversationId, runId) {
|
|
40
136
|
const out = [];
|
|
@@ -49,18 +145,18 @@ async function runEvents(eventLog, conversationId, runId) {
|
|
|
49
145
|
}
|
|
50
146
|
}
|
|
51
147
|
/**
|
|
52
|
-
* The
|
|
53
|
-
*
|
|
148
|
+
* The result of a finished child run (spec §4.4) and its `subagent_finished` payload, from the
|
|
149
|
+
* child's log only: the status from its terminal event, the reply from its last
|
|
54
150
|
* `assistant_message` (text blocks), the tool call count from its `tool_result` events, the usage
|
|
55
151
|
* from its `usage` events (compaction included) and the duration from `run_started` to the
|
|
56
|
-
* terminal event. Null while the run has no terminal event.
|
|
152
|
+
* terminal event. Null while the run has no terminal event. `content` is the fork report's text
|
|
153
|
+
* (`agentResultText`); `reply`, `errorMessage` and `abortedBy` are what a background child's
|
|
154
|
+
* finished `subagent_delivery` carries.
|
|
57
155
|
*
|
|
58
156
|
* `modelGiven`: the parent's call named a `model`; for an org agent, which runs on its own model
|
|
59
157
|
* (§5.4, §5.5), the status line then says `model: the agent's own`.
|
|
60
158
|
*/
|
|
61
|
-
export async function childResult(eventLog, row,
|
|
62
|
-
/** `forSkill`: a fork invocation's report (no resume hint, see `agentResultText`). */
|
|
63
|
-
opts = {}) {
|
|
159
|
+
export async function childResult(eventLog, row, opts = {}) {
|
|
64
160
|
const events = await runEvents(eventLog, row.childConversationId, row.childRunId);
|
|
65
161
|
const terminal = events.find((e) => e.type === "run_finished" || e.type === "run_failed" || e.type === "run_aborted");
|
|
66
162
|
if (!terminal)
|
|
@@ -121,10 +217,12 @@ opts = {}) {
|
|
|
121
217
|
tokens: usageTokens(usage),
|
|
122
218
|
...(abortedBy !== undefined && { abortedBy }),
|
|
123
219
|
...(ownModel && { ownModel }),
|
|
124
|
-
...(opts.forSkill === true && { noResumeHint: true }),
|
|
125
220
|
});
|
|
126
221
|
return {
|
|
127
222
|
...text,
|
|
223
|
+
reply,
|
|
224
|
+
...(errorMessage !== undefined && { errorMessage }),
|
|
225
|
+
...(abortedBy !== undefined && { abortedBy }),
|
|
128
226
|
finished: {
|
|
129
227
|
subagentId: row.childConversationId,
|
|
130
228
|
childRunId: row.childRunId,
|
|
@@ -42,6 +42,13 @@ export interface CheckedOrgAgent {
|
|
|
42
42
|
version: number;
|
|
43
43
|
definition: AgentDefinition;
|
|
44
44
|
}
|
|
45
|
+
/** Where a new child sits (agent map spec §6): its depth below the root and the tree's limit. */
|
|
46
|
+
export interface ChildDepth {
|
|
47
|
+
/** The child's depth: 1 for a child of a root conversation. */
|
|
48
|
+
childDepth: number;
|
|
49
|
+
/** `subagents.maxDepth` for the organization; a child at it never gets `Agent`. */
|
|
50
|
+
maxDepth: number;
|
|
51
|
+
}
|
|
45
52
|
/**
|
|
46
53
|
* The effective definition of a sub-agent at its first dispatch (spec §5.3–§5.5):
|
|
47
54
|
* - `general` / `inline` / `plugin`: the parent's definition narrowed by the template (tools by
|
|
@@ -52,10 +59,12 @@ export interface CheckedOrgAgent {
|
|
|
52
59
|
* (`tierFallback`); a template `effort` is set when the resolved model declares it;
|
|
53
60
|
* - `agent`: the org agent's version that passed the gates (`orgAgent`, from {@link checkOrgAgent}),
|
|
54
61
|
* its own tools minus the child-removed ones, its policies with the parent's on top (stricter
|
|
55
|
-
* wins), its skills and
|
|
56
|
-
*
|
|
62
|
+
* wins), its skills, model and `subagents` block; `tier` ignored.
|
|
63
|
+
* Nesting (agent map spec §4.1): `Agent` stays unless the child is at `maxDepth`; the frozen
|
|
64
|
+
* definition keeps a `subagents` block, the roster the child dispatches from: an org agent's own,
|
|
65
|
+
* otherwise the parent definition's (a general-purpose, inline or plugin child inherits it).
|
|
57
66
|
*/
|
|
58
|
-
export declare function effectiveDefinition(d: EffectiveDefinitionDeps, a: {
|
|
67
|
+
export declare function effectiveDefinition(d: EffectiveDefinitionDeps, a: ChildDepth & {
|
|
59
68
|
orgId: string;
|
|
60
69
|
parent: AgentDefinition;
|
|
61
70
|
parentAgentId: string;
|
|
@@ -2,7 +2,8 @@ import { connectorToolKey, extensionToolKey, parseToolKey, SKILL_ENTRY_FILE, san
|
|
|
2
2
|
import { loadTemplates } from "../../agents/templates.js";
|
|
3
3
|
import { ApiError } from "../../errors.js";
|
|
4
4
|
import { PINNED_SKILLS_LIMITS } from "../../skills/catalog.js";
|
|
5
|
-
import {
|
|
5
|
+
import { selectedSkills } from "../../skills/usable.js";
|
|
6
|
+
import { AGENT_TOOL, CHILD_REMOVED_TOOLS } from "../../tools/builtin-names.js";
|
|
6
7
|
export { CHILD_REMOVED_TOOLS } from "../../tools/builtin-names.js";
|
|
7
8
|
/**
|
|
8
9
|
* The roster entry's template is gone (an inline template edited away, a plugin template
|
|
@@ -67,13 +68,15 @@ async function loadConnectors(db, orgId, refs) {
|
|
|
67
68
|
}
|
|
68
69
|
/**
|
|
69
70
|
* Narrows tool refs by resolved key (spec §5.3): keeps a key when `allow` (if given) lists it and
|
|
70
|
-
* neither `deny` nor {@link CHILD_REMOVED_TOOLS} does. A connector ref with `tools: "all"` stays
|
|
71
|
+
* neither `deny` nor {@link CHILD_REMOVED_TOOLS} does (nor, with `removeAgent`, it is `Agent`). A connector ref with `tools: "all"` stays
|
|
71
72
|
* live only when nothing can narrow it (no allowlist and no deny key under `mcp__<slug>__`), so a tool
|
|
72
73
|
* the connector gains later never slips past the template; otherwise it becomes the kept names, or
|
|
73
74
|
* is dropped. A connector that no longer exists keeps its ref only without an allowlist.
|
|
74
75
|
*/
|
|
75
|
-
function narrowTools(refs, connectors, allow, deny) {
|
|
76
|
+
function narrowTools(refs, connectors, allow, deny, removeAgent) {
|
|
76
77
|
const removed = new Set(CHILD_REMOVED_TOOLS);
|
|
78
|
+
if (removeAgent)
|
|
79
|
+
removed.add(AGENT_TOOL);
|
|
77
80
|
const keep = (key) => !removed.has(key) && !deny.has(key) && (allow === null || allow.has(key));
|
|
78
81
|
const out = [];
|
|
79
82
|
for (const ref of refs) {
|
|
@@ -115,25 +118,17 @@ function narrowTools(refs, connectors, allow, deny) {
|
|
|
115
118
|
* this order, the skill from the template's own plugin, the agent's own skill, the org skill (ties
|
|
116
119
|
* by id), with a warning. Dropped ones get a warning.
|
|
117
120
|
*/
|
|
118
|
-
async function pinnedFor(db, a, refs, byName
|
|
119
|
-
|
|
121
|
+
async function pinnedFor(db, a, refs, byName,
|
|
122
|
+
/** Further names the template lists (`selectedSkills`): resolved the same way, never pinned. */
|
|
123
|
+
selected = []) {
|
|
124
|
+
if (refs.length === 0 && selected.length === 0)
|
|
120
125
|
return { pinned: [], warnings: [] };
|
|
121
|
-
|
|
122
|
-
const rows = (await db
|
|
123
|
-
.
|
|
124
|
-
|
|
125
|
-
.
|
|
126
|
-
|
|
127
|
-
.where("s.org_id", "=", a.orgId)
|
|
128
|
-
.where("s.deleted_at", "is", null)
|
|
129
|
-
.where((eb) => {
|
|
130
|
-
const own = eb.and([eb("s.scope", "=", "agent"), eb("s.agent_id", "=", a.parentAgentId)]);
|
|
131
|
-
return orgSkills.length === 0
|
|
132
|
-
? own
|
|
133
|
-
: eb.or([own, eb.and([eb("s.scope", "=", "org"), eb("s.id", "in", orgSkills)])]);
|
|
134
|
-
})
|
|
135
|
-
.orderBy("s.id")
|
|
136
|
-
.execute()).map((r) => ({
|
|
126
|
+
// org and agent skills, linked org copies and platform skills on in the org (phase 2), by id
|
|
127
|
+
const rows = (await selectedSkills(db, {
|
|
128
|
+
orgId: a.orgId,
|
|
129
|
+
agentId: a.parentAgentId,
|
|
130
|
+
orgSkills: a.parent.skills?.orgSkills ?? [],
|
|
131
|
+
})).map((r) => ({
|
|
137
132
|
id: r.id,
|
|
138
133
|
name: r.name,
|
|
139
134
|
scope: r.scope,
|
|
@@ -179,6 +174,13 @@ async function pinnedFor(db, a, refs, byName) {
|
|
|
179
174
|
total += r.bytes;
|
|
180
175
|
pinned.push(r.id);
|
|
181
176
|
}
|
|
177
|
+
for (const ref of selected) {
|
|
178
|
+
if (refs.includes(ref))
|
|
179
|
+
continue;
|
|
180
|
+
if (!match(ref)) {
|
|
181
|
+
warnings.push(`The skill "${ref}" is not available: the agent does not select it.`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
182
184
|
return { pinned, warnings };
|
|
183
185
|
}
|
|
184
186
|
/** The `effort` declaration of `model`, or null (or when the model cannot be resolved). */
|
|
@@ -220,6 +222,7 @@ async function resolveTier(d, orgId, parent, tier) {
|
|
|
220
222
|
}
|
|
221
223
|
/** `"{parent name} › {agent type}"`, within the 80-character name limit. */
|
|
222
224
|
const childName = (parent, type) => `${parent} › ${type}`.slice(0, 80);
|
|
225
|
+
const atMaxDepth = (a) => a.childDepth >= a.maxDepth;
|
|
223
226
|
function orgAgentDefinition(d, a) {
|
|
224
227
|
// the version the gates checked (checkOrgAgent), never read again here: a version saved in
|
|
225
228
|
// between could be one the gates never saw (batch 3 review M1)
|
|
@@ -228,11 +231,15 @@ function orgAgentDefinition(d, a) {
|
|
|
228
231
|
}
|
|
229
232
|
const agentId = a.entry.agentId ?? "";
|
|
230
233
|
const own = a.orgAgent.definition;
|
|
231
|
-
|
|
234
|
+
// prompt files are authoring data: the child's model sees only `instructions` (their join), and
|
|
235
|
+
// `subagent_started.definition` keeps its shape (spec 2026-11-04 §3.3); its own `subagents`
|
|
236
|
+
// block stays: it is the roster the child dispatches from (agent map spec §4.1); pending
|
|
237
|
+
// connectors are authoring data too (ruling P4-6)
|
|
238
|
+
const { skills, instructionFiles: _files, pendingConnectors: _pending, ...rest } = own;
|
|
232
239
|
const definition = {
|
|
233
240
|
...rest,
|
|
234
241
|
// its own tools, not intersected with the parent's; only the child-removed ones go
|
|
235
|
-
tools: narrowTools(own.tools, new Map(), null, new Set()),
|
|
242
|
+
tools: narrowTools(own.tools, new Map(), null, new Set(), atMaxDepth(a)),
|
|
236
243
|
// its policies, then the parent's on top, stricter wins (keys outside its tools are inert)
|
|
237
244
|
toolPolicies: stricterPolicies(own.toolPolicies ?? {}, a.parent.toolPolicies ?? {}),
|
|
238
245
|
...(skills !== undefined && {
|
|
@@ -261,8 +268,10 @@ function orgAgentDefinition(d, a) {
|
|
|
261
268
|
* (`tierFallback`); a template `effort` is set when the resolved model declares it;
|
|
262
269
|
* - `agent`: the org agent's version that passed the gates (`orgAgent`, from {@link checkOrgAgent}),
|
|
263
270
|
* its own tools minus the child-removed ones, its policies with the parent's on top (stricter
|
|
264
|
-
* wins), its skills and
|
|
265
|
-
*
|
|
271
|
+
* wins), its skills, model and `subagents` block; `tier` ignored.
|
|
272
|
+
* Nesting (agent map spec §4.1): `Agent` stays unless the child is at `maxDepth`; the frozen
|
|
273
|
+
* definition keeps a `subagents` block, the roster the child dispatches from: an org agent's own,
|
|
274
|
+
* otherwise the parent definition's (a general-purpose, inline or plugin child inherits it).
|
|
266
275
|
*/
|
|
267
276
|
export async function effectiveDefinition(d, a) {
|
|
268
277
|
if (a.entry.source === "agent")
|
|
@@ -281,12 +290,18 @@ export async function effectiveDefinition(d, a) {
|
|
|
281
290
|
if (!row)
|
|
282
291
|
throw new SubagentTypeGoneError(entry.type);
|
|
283
292
|
template = row.template;
|
|
284
|
-
ref = {
|
|
293
|
+
ref = {
|
|
294
|
+
source: "plugin",
|
|
295
|
+
id: row.id,
|
|
296
|
+
version: row.version,
|
|
297
|
+
...(row.plugin ? { plugin: row.plugin } : {}),
|
|
298
|
+
...(row.platformTemplateId !== undefined && { platformTemplateId: row.platformTemplateId }),
|
|
299
|
+
};
|
|
285
300
|
}
|
|
286
301
|
const connectors = await loadConnectors(d.db, a.orgId, parent.tools);
|
|
287
|
-
const tools = narrowTools(parent.tools, connectors, template?.tools !== undefined ? new Set(template.tools) : null, new Set(template?.disallowedTools ?? []));
|
|
302
|
+
const tools = narrowTools(parent.tools, connectors, template?.tools !== undefined ? new Set(template.tools) : null, new Set(template?.disallowedTools ?? []), atMaxDepth(a));
|
|
288
303
|
const toolPolicies = stricterPolicies(parent.toolPolicies ?? {}, template?.toolPolicies ?? {});
|
|
289
|
-
const { pinned, warnings } = await pinnedFor(d.db, a, template?.skills ?? [], entry.source === "plugin" ? { plugin: entry.plugin } : null);
|
|
304
|
+
const { pinned, warnings } = await pinnedFor(d.db, a, template?.skills ?? [], entry.source === "plugin" ? { plugin: entry.plugin } : null, template?.selectedSkills ?? []);
|
|
290
305
|
const tier = a.tier ?? template?.model ?? "inherit";
|
|
291
306
|
const m = await resolveTier(d, a.orgId, parent, tier);
|
|
292
307
|
let modelParams = m.modelParams;
|
|
@@ -315,6 +330,7 @@ export async function effectiveDefinition(d, a) {
|
|
|
315
330
|
...(pinned.length > 0 && { pinned }),
|
|
316
331
|
},
|
|
317
332
|
}),
|
|
333
|
+
...(parent.subagents !== undefined && { subagents: parent.subagents }),
|
|
318
334
|
};
|
|
319
335
|
return {
|
|
320
336
|
definition,
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { EventLog } from "../../conversations/event-log.js";
|
|
2
|
+
import type { EventPayload } from "../../conversations/events.js";
|
|
3
|
+
import { KernelDb } from "../../infra/database/kernel-db.js";
|
|
4
|
+
import { TransactionHost } from "../../infra/database/transaction-host.js";
|
|
5
|
+
import { KernelEvents } from "../../infra/events/kernel-events.js";
|
|
6
|
+
import type { KernelLogger } from "../../log.js";
|
|
7
|
+
import { type DispatchRow } from "./child.js";
|
|
8
|
+
/** What a caller of {@link SubagentDeliveries.deliverIn} gives; the rest comes from the dispatch. */
|
|
9
|
+
export type DeliveryInput = Omit<EventPayload<"subagent_delivery">, "subagentId" | "childRunId" | "description" | "triggerAccountId">;
|
|
10
|
+
/** Idempotency key of a child run's finished delivery (one per child run). */
|
|
11
|
+
export declare const finishedDeliveryIdemKey: (childRunId: string) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Deliveries from a sub-agent to its parent conversation (agent map spec §4.5, §5.2): each is one
|
|
14
|
+
* model-visible, absorbable `subagent_delivery` event in the parent's log. A parent run that is
|
|
15
|
+
* active absorbs it at its next model call; an idle parent is woken from the `subagent.delivered`
|
|
16
|
+
* domain event (emitted after the commit, with the log's notify).
|
|
17
|
+
*
|
|
18
|
+
* A background child's run reaching a terminal state ({@link childFinished}) writes the
|
|
19
|
+
* display-only `subagent_finished` and a `finished` delivery in one transaction, both idempotent by
|
|
20
|
+
* the child run, so of two finishers (the worker and a stop, the orphan sweep) exactly one writes
|
|
21
|
+
* them. A run that handed back a report and then completed writes no delivery (acceptance
|
|
22
|
+
* 2026-11-07): the report already told the parent everything, and a content-free "completed" line
|
|
23
|
+
* only woke an idle parent for nothing and pushed the report away from the end of its request. Fork invocations (phase D, `for_skill`) do not deliver: their parent run waits on the child
|
|
24
|
+
* and writes the report itself (`advanceSkillForks`).
|
|
25
|
+
*/
|
|
26
|
+
export declare class SubagentDeliveries {
|
|
27
|
+
private readonly kdb;
|
|
28
|
+
private readonly eventLog;
|
|
29
|
+
private readonly events;
|
|
30
|
+
private readonly log;
|
|
31
|
+
readonly txHost: TransactionHost;
|
|
32
|
+
constructor(kdb: KernelDb, eventLog: EventLog, events: KernelEvents, log: Pick<KernelLogger, "warn">, txHost: TransactionHost);
|
|
33
|
+
/** The context's handle (the transaction of a `@Transactional` method, else the pool). */
|
|
34
|
+
private get db();
|
|
35
|
+
/**
|
|
36
|
+
* Appends one delivery of the dispatch `row` to the parent log, in the caller's transaction or
|
|
37
|
+
* one of its own: the description is the dispatch's (`subagent_dispatched`), the trigger account
|
|
38
|
+
* the child run's (a wake runs as that person, §7). Idempotent by `opts.idemKey` (a finish's
|
|
39
|
+
* default is {@link finishedDeliveryIdemKey}; a report or a note must name its own): under the
|
|
40
|
+
* parent conversation's row lock, an existing delivery returns null and writes nothing. After
|
|
41
|
+
* the commit: the log's notify and `subagent.delivered`. Returns the new event's seq.
|
|
42
|
+
*/
|
|
43
|
+
deliverIn(row: DispatchRow, d: DeliveryInput, opts?: {
|
|
44
|
+
idemKey?: string;
|
|
45
|
+
}): Promise<number | null>;
|
|
46
|
+
/**
|
|
47
|
+
* A background child run reached a terminal state (agent map spec §4.5, §5.2): appends the
|
|
48
|
+
* parent's `subagent_finished` (display only) and a `finished` delivery in one transaction, for
|
|
49
|
+
* every run of a child conversation (dispatched, sent a message or woken;
|
|
50
|
+
* {@link deliveryRowOfChildRun}), each once by its run. The delivery
|
|
51
|
+
* carries the final reply when the run handed back no report, else no text and `handedBack`; a
|
|
52
|
+
* failed run's error message and code, an aborted run who stopped it. A run that handed back and
|
|
53
|
+
* then `completed` gets only `subagent_finished` (not model-visible, wakes nothing); the log's
|
|
54
|
+
* notify still announces it to viewers. A run of a conversation never dispatched, a fork
|
|
55
|
+
* invocation's child, or not terminal yet is left alone. True when this call wrote the finish.
|
|
56
|
+
*/
|
|
57
|
+
childFinished(childRunId: string): Promise<boolean>;
|
|
58
|
+
/** {@link childFinished}'s transaction. */
|
|
59
|
+
private finishIn;
|
|
60
|
+
/**
|
|
61
|
+
* {@link finishIn} for a run that handed back and completed: only `subagent_finished`, written
|
|
62
|
+
* once under the parent conversation's row lock (idempotent by the child run), then the log's
|
|
63
|
+
* notify after the commit. No `subagent.delivered`: nothing model-visible arrived, so no wake.
|
|
64
|
+
* True when this call wrote it.
|
|
65
|
+
*/
|
|
66
|
+
private finishSilentlyIn;
|
|
67
|
+
/** Whether the child run handed back a report (`SubagentHandback`) before it finished. */
|
|
68
|
+
private handedBack;
|
|
69
|
+
/** The dispatch's task label (`subagent_dispatched.description`), else the child's title. */
|
|
70
|
+
private descriptionOf;
|
|
71
|
+
}
|