@capybara-hq/kernel 0.1.0-rc.4 → 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 +39 -13
- package/dist/admin/admin.controller.js +33 -17
- 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 +51 -22
- package/dist/agents/agents.service.js +172 -70
- 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/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/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 +6 -2
- package/dist/config/schema.js +46 -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 +69 -12
- package/dist/conversations/conversations.service.js +106 -27
- 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 +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +362 -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 +82 -2
- package/dist/errors.js +82 -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 +16 -4
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.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 +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/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 +8 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +19 -1
- package/dist/extensions/host.js +30 -7
- 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/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +23 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- 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 +21 -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 +11 -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/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 +20 -9
- package/dist/models/purposes.js +17 -8
- 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 +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 +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.js +2 -0
- 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 +30 -8
- package/dist/runtime/model-call.js +69 -19
- 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 +11 -5
- package/dist/runtime/run-worker.js +54 -31
- 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 +43 -29
- 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.js +17 -12
- 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 +187 -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/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
|
@@ -8,6 +8,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
10
|
import { Inject, Injectable } from "@nestjs/common";
|
|
11
|
+
import { PluginScopeSyncProcessor } from "../catalog/scope-sync.js";
|
|
11
12
|
import { ChannelsProcessor } from "../channels/channels.module.js";
|
|
12
13
|
import { ChannelOutbound } from "../channels/outbound.js";
|
|
13
14
|
import { TitleQueue } from "../conversations/titles.js";
|
|
@@ -24,8 +25,8 @@ import { UsageReporter } from "../runtime/usage-report.js";
|
|
|
24
25
|
/**
|
|
25
26
|
* The worker role's parts, driven by `KernelLifecycle` at fixed points of its start order and stop
|
|
26
27
|
* phases (so they stay ordered after the extension load and before the extension host closes): the
|
|
27
|
-
* queue consumers (runs, sub-agent runs, evals, maintenance,
|
|
28
|
-
* titles) and the schedulers of the `@LockedCron` / `@LockedInterval` jobs. Provided only by
|
|
28
|
+
* queue consumers (runs, sub-agent runs, evals, maintenance, the plugin scope sync, channel
|
|
29
|
+
* deliveries, `usage.report`, titles) and the schedulers of the `@LockedCron` / `@LockedInterval` jobs. Provided only by
|
|
29
30
|
* `WorkerModule`, so a process without the worker role has none of them.
|
|
30
31
|
*/
|
|
31
32
|
let WorkerRole = class WorkerRole {
|
|
@@ -44,13 +45,14 @@ let WorkerRole = class WorkerRole {
|
|
|
44
45
|
channelsProcessor;
|
|
45
46
|
evalsProcessor;
|
|
46
47
|
maintenanceProcessor;
|
|
48
|
+
scopeProcessor;
|
|
47
49
|
/** The startup config (the roles). */
|
|
48
50
|
config;
|
|
49
51
|
/** The run worker was started: the runs phase drains it. */
|
|
50
52
|
runsStarted = false;
|
|
51
53
|
/** The eval worker was started: the runs phase drains it. */
|
|
52
54
|
evalsStarted = false;
|
|
53
|
-
constructor(config, log, intervals, scheduledRuns, runWorker, evalWorker, usageReport, titles, channelOutbound, runsProcessor, subagentRunsProcessor, usageProcessor, titleProcessor, channelsProcessor, evalsProcessor, maintenanceProcessor) {
|
|
55
|
+
constructor(config, log, intervals, scheduledRuns, runWorker, evalWorker, usageReport, titles, channelOutbound, runsProcessor, subagentRunsProcessor, usageProcessor, titleProcessor, channelsProcessor, evalsProcessor, maintenanceProcessor, scopeProcessor) {
|
|
54
56
|
this.log = log;
|
|
55
57
|
this.intervals = intervals;
|
|
56
58
|
this.scheduledRuns = scheduledRuns;
|
|
@@ -66,6 +68,7 @@ let WorkerRole = class WorkerRole {
|
|
|
66
68
|
this.channelsProcessor = channelsProcessor;
|
|
67
69
|
this.evalsProcessor = evalsProcessor;
|
|
68
70
|
this.maintenanceProcessor = maintenanceProcessor;
|
|
71
|
+
this.scopeProcessor = scopeProcessor;
|
|
69
72
|
this.config = config.get();
|
|
70
73
|
}
|
|
71
74
|
/**
|
|
@@ -92,6 +95,7 @@ let WorkerRole = class WorkerRole {
|
|
|
92
95
|
}
|
|
93
96
|
checkpoint();
|
|
94
97
|
this.maintenanceProcessor.start();
|
|
98
|
+
this.scopeProcessor.start();
|
|
95
99
|
this.channelOutbound.startWorker(this.channelsProcessor.worker);
|
|
96
100
|
this.usageReport.startWorker(this.usageProcessor.worker);
|
|
97
101
|
this.titles.startWorker(this.titleProcessor.worker);
|
|
@@ -101,6 +105,8 @@ let WorkerRole = class WorkerRole {
|
|
|
101
105
|
// The gate opens: from here on ticks run; the runOnStart jobs run once now, in the background
|
|
102
106
|
this.scheduledRuns.open();
|
|
103
107
|
this.intervals.runStartJobs();
|
|
108
|
+
// Every plugin's scope converges once per worker start (a failed or lost sync is retried)
|
|
109
|
+
this.scopeProcessor.resync();
|
|
104
110
|
}
|
|
105
111
|
/**
|
|
106
112
|
* Closes the start gate and stops the schedulers (no new tick; the runs in progress get the stop
|
|
@@ -117,9 +123,9 @@ let WorkerRole = class WorkerRole {
|
|
|
117
123
|
drainEvals(budgetMs) {
|
|
118
124
|
return this.evalsStarted ? this.evalWorker.close(budgetMs) : undefined;
|
|
119
125
|
}
|
|
120
|
-
/** Closes the maintenance queue's worker. */
|
|
121
|
-
closeMaintenance() {
|
|
122
|
-
|
|
126
|
+
/** Closes the maintenance queue's worker and the plugin scope sync's (it stops between pairs). */
|
|
127
|
+
async closeMaintenance() {
|
|
128
|
+
await Promise.all([this.maintenanceProcessor.worker.close(), this.scopeProcessor.close()]);
|
|
123
129
|
}
|
|
124
130
|
};
|
|
125
131
|
WorkerRole = __decorate([
|
|
@@ -139,6 +145,7 @@ WorkerRole = __decorate([
|
|
|
139
145
|
__param(12, Inject(TitleProcessor)),
|
|
140
146
|
__param(13, Inject(ChannelsProcessor)),
|
|
141
147
|
__param(14, Inject(EvalsProcessor)),
|
|
142
|
-
__param(15, Inject(MaintenanceProcessor))
|
|
148
|
+
__param(15, Inject(MaintenanceProcessor)),
|
|
149
|
+
__param(16, Inject(PluginScopeSyncProcessor))
|
|
143
150
|
], WorkerRole);
|
|
144
151
|
export { WorkerRole };
|
|
@@ -5,7 +5,7 @@ import type { KernelConfig } from "../config/schema.js";
|
|
|
5
5
|
* `worker`: the cron scheduler and the `@LockedInterval` scheduler (`KernelScheduleModule`, the one
|
|
6
6
|
* place `ScheduleModule.forRoot` is imported), every fixed-period job (`@LockedCron` /
|
|
7
7
|
* `@LockedInterval`, each once per tick across replicas), every queue consumer (`@Processor`: runs,
|
|
8
|
-
* sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries) and
|
|
8
|
+
* sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries, the plugin scope sync) and
|
|
9
9
|
* {@link WorkerRole}, which `KernelLifecycle` drives. A process without the worker role runs no cron
|
|
10
10
|
* and no BullMQ worker (the queues' producers exist on every role).
|
|
11
11
|
*/
|
|
@@ -10,18 +10,22 @@ import { BackgroundModule } from "../background/background.module.js";
|
|
|
10
10
|
import { BackgroundTaskPollJob } from "../background/poll.job.js";
|
|
11
11
|
import { CatalogModule } from "../catalog/catalog.module.js";
|
|
12
12
|
import { CatalogJobs } from "../catalog/jobs.js";
|
|
13
|
+
import { PlatformMigration } from "../catalog/platform-migration.js";
|
|
14
|
+
import { PluginScopeWorkersModule } from "../catalog/scope-sync-workers.js";
|
|
13
15
|
import { ChannelsModule, ChannelWorkersModule } from "../channels/channels.module.js";
|
|
14
16
|
import { GatewayCheckJob } from "../channels/supervisor.js";
|
|
15
17
|
import { AttachmentsModule } from "../conversations/attachments.module.js";
|
|
16
18
|
import { AttachmentCleanupJob } from "../conversations/attachments.service.js";
|
|
17
19
|
import { EventLogModule } from "../conversations/event-log.js";
|
|
18
20
|
import { TitlesModule } from "../conversations/titles.js";
|
|
21
|
+
import { LegacySandboxCleanupJob } from "../environments/legacy-cleanup.job.js";
|
|
19
22
|
import { EvalWorkersModule } from "../evals/evals.module.js";
|
|
20
23
|
import { ExtensionsModule } from "../extensions/extensions.module.js";
|
|
21
24
|
import { PluginsReconcileJob } from "../extensions/lifecycle.js";
|
|
22
25
|
import { KernelScheduleModule } from "../infra/schedule/schedule.module.js";
|
|
23
26
|
import { DirectoryScanJob } from "../orgs/directory-sync.js";
|
|
24
27
|
import { OffboardSweepJob } from "../orgs/offboarding.js";
|
|
28
|
+
import { OrgLockModule } from "../orgs/org-lock.js";
|
|
25
29
|
import { OrgsModule } from "../orgs/orgs.module.js";
|
|
26
30
|
import { MaintenanceModule } from "../runtime/maintenance.js";
|
|
27
31
|
import { RuntimeWorkersModule } from "../runtime/run-processors.js";
|
|
@@ -40,7 +44,7 @@ import { WorkerRole } from "./worker-role.js";
|
|
|
40
44
|
* `worker`: the cron scheduler and the `@LockedInterval` scheduler (`KernelScheduleModule`, the one
|
|
41
45
|
* place `ScheduleModule.forRoot` is imported), every fixed-period job (`@LockedCron` /
|
|
42
46
|
* `@LockedInterval`, each once per tick across replicas), every queue consumer (`@Processor`: runs,
|
|
43
|
-
* sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries) and
|
|
47
|
+
* sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries, the plugin scope sync) and
|
|
44
48
|
* {@link WorkerRole}, which `KernelLifecycle` drives. A process without the worker role runs no cron
|
|
45
49
|
* and no BullMQ worker (the queues' producers exist on every role).
|
|
46
50
|
*/
|
|
@@ -55,6 +59,7 @@ let WorkerModule = WorkerModule_1 = class WorkerModule {
|
|
|
55
59
|
EvalWorkersModule.forRoot(config),
|
|
56
60
|
ChannelWorkersModule.forRoot(config),
|
|
57
61
|
MaintenanceModule,
|
|
62
|
+
PluginScopeWorkersModule,
|
|
58
63
|
// the domains the fixed-period jobs call
|
|
59
64
|
RuntimeModule,
|
|
60
65
|
UsageReportModule,
|
|
@@ -67,6 +72,7 @@ let WorkerModule = WorkerModule_1 = class WorkerModule {
|
|
|
67
72
|
ToolsModule,
|
|
68
73
|
CatalogModule,
|
|
69
74
|
OrgsModule,
|
|
75
|
+
OrgLockModule,
|
|
70
76
|
ExtensionsModule,
|
|
71
77
|
ChannelsModule,
|
|
72
78
|
],
|
|
@@ -76,9 +82,11 @@ let WorkerModule = WorkerModule_1 = class WorkerModule {
|
|
|
76
82
|
AttachmentCleanupJob,
|
|
77
83
|
StoragePurgeJob,
|
|
78
84
|
SandboxSweepJobs,
|
|
85
|
+
LegacySandboxCleanupJob,
|
|
79
86
|
BackgroundTaskPollJob,
|
|
80
87
|
ToolJobs,
|
|
81
88
|
CatalogJobs,
|
|
89
|
+
PlatformMigration,
|
|
82
90
|
DirectoryScanJob,
|
|
83
91
|
OffboardSweepJob,
|
|
84
92
|
PluginsReconcileJob,
|
|
@@ -54,8 +54,8 @@ export interface BuildModelRequestInput {
|
|
|
54
54
|
model: ModelInfo;
|
|
55
55
|
step: number;
|
|
56
56
|
/**
|
|
57
|
-
* loop 已吸收到的位置(R31):the largest seq of the absorbable events (`user_message
|
|
58
|
-
* `background_task_finished`, {@link isAbsorbable}) the loop took. 提供时:
|
|
57
|
+
* loop 已吸收到的位置(R31):the largest seq of the absorbable events (`user_message`,
|
|
58
|
+
* `background_task_finished` and `subagent_delivery`, {@link isAbsorbable}) the loop took. 提供时:
|
|
59
59
|
* - seq 大于它的可吸收事件不进请求(运行中途到达、尚未被吸收的插话或后台任务结束,由后续步骤吸收或触发下一轮);
|
|
60
60
|
* - 每个可吸收事件放在**吸收它的那次模型调用**的位置:日志里第一个 `request.absorbedUpToSeq`
|
|
61
61
|
* 不小于它的 `model_call` 之前(没有该字段的旧 model_call 视为吸收了它之前的全部消息),
|
|
@@ -232,8 +232,10 @@ export declare function summaryText(summary: string): string;
|
|
|
232
232
|
* - messages:最近一条摘要(若有)作为首条 user 消息,其后按 seq 回放 `coversUpToSeq` 之后的
|
|
233
233
|
* `user_message` / `assistant_message`(content 原样,含 opaque;aborted 的也回放;媒体引用按
|
|
234
234
|
* {@link resolveMedia} 换成 base64 或文字占位)/ `reminder`
|
|
235
|
-
* (`role: "system"`,放在它所在的位置)/ `
|
|
236
|
-
*
|
|
235
|
+
* (`role: "system"`,放在它所在的位置)/ `tools_changed` (`role: "system"`, the text of {@link toolsChangedText}, at its position) /
|
|
236
|
+
* `background_task_finished`(`role: "system"`, the text of
|
|
237
|
+
* {@link renderBackgroundFinished}, placed like a user_message)/ `subagent_delivery` (likewise,
|
|
238
|
+
* the text of {@link renderSubagentDelivery});`tool_result` 事件还原为紧随其 assistant 消息之后的一条 user 消息
|
|
237
239
|
* (同一步的多个结果合并,按该 assistant 消息里 tool_call 的顺序;找不到对应调用的结果不进请求)。
|
|
238
240
|
* 其他事件不进请求。提供 `absorbedUpToSeq` 时,
|
|
239
241
|
* 尚未被吸收的可吸收事件不进请求,运行中途到达的放在吸收它的调用处(见 BuildModelRequestInput)。
|
|
@@ -3,8 +3,10 @@ import { MEDIA_LIMITS, } from "@capybara-hq/plugin-sdk";
|
|
|
3
3
|
import { renderBackgroundFinished } from "../../background/render.js";
|
|
4
4
|
import { isAbsorbable, } from "../../conversations/events.js";
|
|
5
5
|
import { catalogText, isAlwaysLoaded } from "../../tools/builtins/tool-search.js";
|
|
6
|
+
import { renderSubagentDelivery } from "../subagents/render.js";
|
|
6
7
|
import { LEGACY_CATALOG_HEADER, LEGACY_SKILL_TEXTS, usesLegacyToolNames } from "./legacy-text.js";
|
|
7
8
|
import { invokedSkillNames, invokedSkillsText, SKILL_TEXTS, skillsCatalogEvents, snapshotChangeText, snapshotCurrentText, snapshotSystemText, systemSkillsCatalog, } from "./skills.js";
|
|
9
|
+
import { toolsChangedText } from "./tool-changes.js";
|
|
8
10
|
/**
|
|
9
11
|
* 平台行为规范(模型可见,英文)。短而通用(spec 6 原则 5);不放时间戳、会话 ID 等会变化的内容,
|
|
10
12
|
* 保证同一 agent 版本在所有会话中 system 前缀一致、可命中提示词缓存。改动它会让所有缓存失效。
|
|
@@ -332,8 +334,10 @@ export function summaryText(summary) {
|
|
|
332
334
|
* - messages:最近一条摘要(若有)作为首条 user 消息,其后按 seq 回放 `coversUpToSeq` 之后的
|
|
333
335
|
* `user_message` / `assistant_message`(content 原样,含 opaque;aborted 的也回放;媒体引用按
|
|
334
336
|
* {@link resolveMedia} 换成 base64 或文字占位)/ `reminder`
|
|
335
|
-
* (`role: "system"`,放在它所在的位置)/ `
|
|
336
|
-
*
|
|
337
|
+
* (`role: "system"`,放在它所在的位置)/ `tools_changed` (`role: "system"`, the text of {@link toolsChangedText}, at its position) /
|
|
338
|
+
* `background_task_finished`(`role: "system"`, the text of
|
|
339
|
+
* {@link renderBackgroundFinished}, placed like a user_message)/ `subagent_delivery` (likewise,
|
|
340
|
+
* the text of {@link renderSubagentDelivery});`tool_result` 事件还原为紧随其 assistant 消息之后的一条 user 消息
|
|
337
341
|
* (同一步的多个结果合并,按该 assistant 消息里 tool_call 的顺序;找不到对应调用的结果不进请求)。
|
|
338
342
|
* 其他事件不进请求。提供 `absorbedUpToSeq` 时,
|
|
339
343
|
* 尚未被吸收的可吸收事件不进请求,运行中途到达的放在吸收它的调用处(见 BuildModelRequestInput)。
|
|
@@ -381,7 +385,7 @@ export function buildModelRequest(input) {
|
|
|
381
385
|
lastCall = absorbedBy(e);
|
|
382
386
|
}
|
|
383
387
|
/**
|
|
384
|
-
* 第 i 个事件(可吸收事件:user_message / background_task_finished)的放置方式:
|
|
388
|
+
* 第 i 个事件(可吸收事件:user_message / background_task_finished / subagent_delivery)的放置方式:
|
|
385
389
|
* - `inline`:在吸收它的调用(之后第一个 `absorbedBy ≥ seq` 的 model_call,或本次请求)之前,
|
|
386
390
|
* 没有「由未吸收它的调用生成的回复」→ 按 seq 原位回放(常规情况,与不提供 absorbedUpToSeq 时一致);
|
|
387
391
|
* - `deferred`:它之后有非空 assistant_message 是由一次没有吸收它的 model_call 生成的(它在那一步
|
|
@@ -467,10 +471,20 @@ export function buildModelRequest(input) {
|
|
|
467
471
|
};
|
|
468
472
|
/** 被某次模型调用跳过(运行中途到达)、尚未被吸收的可吸收事件,按 seq 升序。 */
|
|
469
473
|
let deferred = [];
|
|
470
|
-
/**
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
+
/**
|
|
475
|
+
* An absorbable event as a request message: a user turn, or the system text of a finished task
|
|
476
|
+
* or a sub-agent's delivery.
|
|
477
|
+
*/
|
|
478
|
+
const absorbableMessage = (e) => {
|
|
479
|
+
switch (e.type) {
|
|
480
|
+
case "user_message":
|
|
481
|
+
return { role: "user", content: userBlocks(e) };
|
|
482
|
+
case "background_task_finished":
|
|
483
|
+
return { role: "system", content: renderBackgroundFinished(e.payload) };
|
|
484
|
+
case "subagent_delivery":
|
|
485
|
+
return { role: "system", content: renderSubagentDelivery(e.payload) };
|
|
486
|
+
}
|
|
487
|
+
};
|
|
474
488
|
/**
|
|
475
489
|
* 把已被吸收(seq ≤ upTo)的延后消息按 seq 顺序放进 messages,插在末尾连续的 system 提醒之前
|
|
476
490
|
* (若有)。这样某一步自己写在 model_call 之前的提醒(含收尾提醒)仍排在它所跟随的用户消息之后,
|
|
@@ -575,6 +589,11 @@ export function buildModelRequest(input) {
|
|
|
575
589
|
messages.push({ role: "system", content: e.payload.text });
|
|
576
590
|
reminderSeqs.push(e.seq);
|
|
577
591
|
break;
|
|
592
|
+
// the tool set changed since the previous request (tool naming spec §9.1); one covered by
|
|
593
|
+
// the summary is dropped: the request's tool list is current anyway
|
|
594
|
+
case "tools_changed":
|
|
595
|
+
messages.push({ role: "system", content: toolsChangedText(e.payload) });
|
|
596
|
+
break;
|
|
578
597
|
// hook_denied is not model-visible: the model sees only the denied tool call's tool_result
|
|
579
598
|
// (and nothing for a denied model request), so request building skips it
|
|
580
599
|
case "hook_denied":
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* run writes a new snapshot announcing the new map, and old snapshots keep their text (phase C
|
|
9
9
|
* changed the Task / Agent line, sub-agents spec §16.5; the tool-naming change shortened it to the
|
|
10
10
|
* Claude Code names, spec 2026-10-29 §6; background Bash made TaskOutput and TaskStop available,
|
|
11
|
-
* spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools
|
|
11
|
+
* spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools;
|
|
12
|
+
* SendMessage joined it when it replaced `Agent` with `resume`, agent map spec §4.2).
|
|
12
13
|
*/
|
|
13
14
|
export declare const CLAUDE_CODE_TOOL_MAP: string;
|
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
* run writes a new snapshot announcing the new map, and old snapshots keep their text (phase C
|
|
9
9
|
* changed the Task / Agent line, sub-agents spec §16.5; the tool-naming change shortened it to the
|
|
10
10
|
* Claude Code names, spec 2026-10-29 §6; background Bash made TaskOutput and TaskStop available,
|
|
11
|
-
* spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools
|
|
11
|
+
* spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools;
|
|
12
|
+
* SendMessage joined it when it replaced `Agent` with `resume`, agent map spec §4.2).
|
|
12
13
|
*/
|
|
13
14
|
export const CLAUDE_CODE_TOOL_MAP = [
|
|
14
15
|
"Some skills in this conversation were written for Claude Code. Its tools Bash, Read, Write, Edit,",
|
|
15
|
-
"Glob, Grep, Skill, AskUserQuestion, ToolSearch, Agent, WebFetch and WebSearch have the same names here, when they are",
|
|
16
|
+
"Glob, Grep, Skill, AskUserQuestion, ToolSearch, Agent, SendMessage, WebFetch and WebSearch have the same names here, when they are",
|
|
16
17
|
"in your tools. For the others:",
|
|
17
18
|
"- MultiEdit -> several Edit calls",
|
|
18
19
|
"- TodoWrite -> plugin__todo__write when it is in your tools; otherwise keep the task list in your replies",
|
|
19
|
-
"- Task -> Agent;
|
|
20
|
+
"- Task -> Agent; model names haiku / sonnet / opus -> fast / standard / capable",
|
|
20
21
|
"- TaskOutput -> TaskOutput, TaskStop -> TaskStop",
|
|
21
22
|
"- Any other tool a skill names (for example NotebookEdit, EnterWorktree) -> not available unless one of your tools does the same job",
|
|
22
23
|
// biome-ignore lint/suspicious/noTemplateCurlyInString: the literal Claude Code variable the model reads
|
|
23
|
-
"The sandbox tools exist only when this agent has a sandbox; without them a skill's scripts cannot run. A path such as ${CLAUDE_PLUGIN_ROOT}/skills/<name>/... means /skills/<name>/... after Skill has copied that skill into the sandbox.",
|
|
24
|
+
"The sandbox tools exist only when this agent has a sandbox; without them a skill's scripts cannot run. A path such as ${CLAUDE_PLUGIN_ROOT}/skills/<name>/... means /skills/<name>@<version-id>/... after Skill has copied that skill into the sandbox.",
|
|
24
25
|
].join("\n");
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { renderBackgroundFinished } from "../../background/render.js";
|
|
2
|
+
import { renderSubagentDelivery } from "../subagents/render.js";
|
|
2
3
|
import { latestSummary } from "./build.js";
|
|
4
|
+
import { toolsChangedText } from "./tool-changes.js";
|
|
3
5
|
/** 压缩请求的标记:放在 system 中,便于识别(model-fake 据此返回摘要)。 */
|
|
4
6
|
export const COMPACTION_MARKER = "CAPYBARA_COMPACTION";
|
|
5
7
|
/** 压缩请求的输出上限。 */
|
|
@@ -112,9 +114,16 @@ function transcriptLine(e) {
|
|
|
112
114
|
}
|
|
113
115
|
case "reminder":
|
|
114
116
|
return `System reminder: ${e.payload.text}`;
|
|
117
|
+
// a tool set change is a system message of the request (build.ts); kept in the transcript so
|
|
118
|
+
// the summary does not carry an earlier "I have no such tool" forward as current
|
|
119
|
+
case "tools_changed":
|
|
120
|
+
return `System reminder: ${toolsChangedText(e.payload)}`;
|
|
115
121
|
// a finished background task is a system message of the request (build.ts)
|
|
116
122
|
case "background_task_finished":
|
|
117
123
|
return `System reminder: ${renderBackgroundFinished(e.payload)}`;
|
|
124
|
+
// a sub-agent's delivery is a system message of the request (build.ts)
|
|
125
|
+
case "subagent_delivery":
|
|
126
|
+
return `System reminder: ${renderSubagentDelivery(e.payload)}`;
|
|
118
127
|
// phase D: a forked skill's report is user content of the request (build.ts)
|
|
119
128
|
case "skill_fork_result":
|
|
120
129
|
return `User: ${e.payload.text}`;
|
|
@@ -3,3 +3,5 @@
|
|
|
3
3
|
* 调用方先把它写成 `reminder` 事件,再由 `buildModelRequest` 按事件重建进请求。
|
|
4
4
|
*/
|
|
5
5
|
export declare function turnLimitReminder(step: number, maxSteps: number): string | null;
|
|
6
|
+
/** 所用模型不支持工具(`capabilities.tools` 为 false)时的提醒(模型可见,英文)。 */
|
|
7
|
+
export declare const TOOLS_UNSUPPORTED_REMINDER = "Tools are unavailable for this model. Answer without calling tools.";
|
|
@@ -9,3 +9,5 @@ export function turnLimitReminder(step, maxSteps) {
|
|
|
9
9
|
return null;
|
|
10
10
|
return `You are close to the step limit for this turn (step ${step} of ${maxSteps}). Wrap up and give the user your best answer now.`;
|
|
11
11
|
}
|
|
12
|
+
/** 所用模型不支持工具(`capabilities.tools` 为 false)时的提醒(模型可见,英文)。 */
|
|
13
|
+
export const TOOLS_UNSUPPORTED_REMINDER = "Tools are unavailable for this model. Answer without calling tools.";
|
|
@@ -81,11 +81,18 @@ export function sameSnapshot(a, b) {
|
|
|
81
81
|
function catalogChanges(prev, next, pinnedIds) {
|
|
82
82
|
const before = new Map(prev.map((s) => [s.id, s]));
|
|
83
83
|
const after = new Map(next.map((s) => [s.id, s]));
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
// A skill renamed under its id (the platform components migration renames a clashing org skill)
|
|
85
|
+
// reads as its old name removed and its new name added: the model calls skills by name.
|
|
86
|
+
const renamed = (s, other) => {
|
|
87
|
+
const o = other.get(s.id);
|
|
88
|
+
return o !== undefined && o.name !== s.name;
|
|
89
|
+
};
|
|
90
|
+
const added = next.filter((s) => !before.has(s.id) || renamed(s, before));
|
|
91
|
+
const removed = prev.filter((s) => !after.has(s.id) || renamed(s, after));
|
|
86
92
|
const updated = next.filter((s) => {
|
|
87
93
|
const p = before.get(s.id);
|
|
88
94
|
return (p !== undefined &&
|
|
95
|
+
p.name === s.name &&
|
|
89
96
|
!pinnedIds?.has(s.id) &&
|
|
90
97
|
(p.version !== s.version || p.description !== s.description || p.source !== s.source));
|
|
91
98
|
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ConversationEvent, EventPayload } from "../../conversations/events.js";
|
|
2
|
+
/**
|
|
3
|
+
* Tool set changes mid-conversation (tool naming spec §9.1). The kernel resolves the tools on every
|
|
4
|
+
* step, so an extension switched on in the org, a connector set up or a sub-agent roster added
|
|
5
|
+
* changes the next request's tool list; earlier answers in the history ("I have no web search")
|
|
6
|
+
* would still contradict it. A step whose resolved set differs from the one the previous request
|
|
7
|
+
* offered logs a `tools_changed` event before its request; request building renders it at its
|
|
8
|
+
* position as a system message ({@link toolsChangedText}).
|
|
9
|
+
*/
|
|
10
|
+
export type ToolsChange = Pick<EventPayload<"tools_changed">, "added" | "removed">;
|
|
11
|
+
/**
|
|
12
|
+
* The tool set the conversation's previous model request offered, from the log alone: the last
|
|
13
|
+
* `model_call`'s `tools` and `catalog` keys (with `ToolSearch` the catalog holds the deferred
|
|
14
|
+
* tools, so the union is the whole resolved set), then any `tools_changed` logged after it (a
|
|
15
|
+
* step that logged its change and crashed before its request: the change is not logged twice).
|
|
16
|
+
* Skipped: a `model_call` without recorded tools (older logs) and a call whose tools were left out
|
|
17
|
+
* because its model has no tool support (empty, with that step's unsupported reminder): those say
|
|
18
|
+
* nothing about the resolved set. Null when no request offered a known set yet.
|
|
19
|
+
*/
|
|
20
|
+
export declare function previousToolSet(events: readonly ConversationEvent[]): Set<string> | null;
|
|
21
|
+
/**
|
|
22
|
+
* The change from the previous request's tool set to `current` (sorted names), or null: before
|
|
23
|
+
* the conversation's first request (its list is the baseline) and when nothing changed.
|
|
24
|
+
*/
|
|
25
|
+
export declare function toolSetChange(events: readonly ConversationEvent[], current: readonly string[]): ToolsChange | null;
|
|
26
|
+
/** The model-visible text of a `tools_changed` event (English). */
|
|
27
|
+
export declare function toolsChangedText(change: ToolsChange): string;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { TOOLS_UNSUPPORTED_REMINDER } from "./reminders.js";
|
|
2
|
+
/**
|
|
3
|
+
* The tool set the conversation's previous model request offered, from the log alone: the last
|
|
4
|
+
* `model_call`'s `tools` and `catalog` keys (with `ToolSearch` the catalog holds the deferred
|
|
5
|
+
* tools, so the union is the whole resolved set), then any `tools_changed` logged after it (a
|
|
6
|
+
* step that logged its change and crashed before its request: the change is not logged twice).
|
|
7
|
+
* Skipped: a `model_call` without recorded tools (older logs) and a call whose tools were left out
|
|
8
|
+
* because its model has no tool support (empty, with that step's unsupported reminder): those say
|
|
9
|
+
* nothing about the resolved set. Null when no request offered a known set yet.
|
|
10
|
+
*/
|
|
11
|
+
export function previousToolSet(events) {
|
|
12
|
+
const unsupported = new Set();
|
|
13
|
+
for (const e of events) {
|
|
14
|
+
if (e.type === "reminder" && e.payload.text === TOOLS_UNSUPPORTED_REMINDER) {
|
|
15
|
+
unsupported.add(`${e.runId ?? ""}\u0000${e.payload.step}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
let known = null;
|
|
19
|
+
for (const e of events) {
|
|
20
|
+
if (e.type === "model_call") {
|
|
21
|
+
const { tools, catalog } = e.payload.request;
|
|
22
|
+
if (tools === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
const keys = [...tools, ...(catalog ?? [])].map((t) => t.key);
|
|
25
|
+
if (keys.length === 0 && unsupported.has(`${e.runId ?? ""}\u0000${e.payload.step}`))
|
|
26
|
+
continue;
|
|
27
|
+
known = new Set(keys);
|
|
28
|
+
}
|
|
29
|
+
else if (e.type === "tools_changed" && known !== null) {
|
|
30
|
+
for (const k of e.payload.removed)
|
|
31
|
+
known.delete(k);
|
|
32
|
+
for (const k of e.payload.added)
|
|
33
|
+
known.add(k);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return known;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The change from the previous request's tool set to `current` (sorted names), or null: before
|
|
40
|
+
* the conversation's first request (its list is the baseline) and when nothing changed.
|
|
41
|
+
*/
|
|
42
|
+
export function toolSetChange(events, current) {
|
|
43
|
+
const before = previousToolSet(events);
|
|
44
|
+
if (before === null)
|
|
45
|
+
return null;
|
|
46
|
+
const now = new Set(current);
|
|
47
|
+
const added = [...now].filter((k) => !before.has(k)).sort();
|
|
48
|
+
const removed = [...before].filter((k) => !now.has(k)).sort();
|
|
49
|
+
return added.length === 0 && removed.length === 0 ? null : { added, removed };
|
|
50
|
+
}
|
|
51
|
+
/** The model-visible text of a `tools_changed` event (English). */
|
|
52
|
+
export function toolsChangedText(change) {
|
|
53
|
+
const parts = ["Your tools changed."];
|
|
54
|
+
if (change.added.length > 0)
|
|
55
|
+
parts.push(`Now available: ${change.added.join(", ")}.`);
|
|
56
|
+
if (change.removed.length > 0)
|
|
57
|
+
parts.push(`No longer available: ${change.removed.join(", ")}.`);
|
|
58
|
+
parts.push("Use the current tool list; it replaces anything said earlier in this conversation about which tools you have.");
|
|
59
|
+
return parts.join(" ");
|
|
60
|
+
}
|
|
@@ -112,6 +112,8 @@ export function hookDeniedAudit(at, payload, denial) {
|
|
|
112
112
|
: {}),
|
|
113
113
|
// M-1: the named plugin is enabled but not loaded on the replica that handled the call
|
|
114
114
|
...(denial.notLoaded ? { notLoaded: true } : {}),
|
|
115
|
+
// layering spec A §6: the named plugin's effective config is not valid in the organization
|
|
116
|
+
...(denial.needsConfig ? { needsConfig: true } : {}),
|
|
115
117
|
},
|
|
116
118
|
};
|
|
117
119
|
}
|
|
@@ -32,7 +32,9 @@ export interface LangGraphLoopHooks {
|
|
|
32
32
|
* worker 崩溃后由其他副本从最近的 checkpoint 续跑(spec 4.4、Review Focus 1)。
|
|
33
33
|
*
|
|
34
34
|
* 图:`prepare → model →(tool_use)tools → prepare …`;prepare 发现步数超过上限 → `wrapUp` → 结束;
|
|
35
|
-
* prepare finding the deadline passed
|
|
35
|
+
* prepare finding the deadline passed → end; a sub-agent's run finding its tree's token budget used
|
|
36
|
+
* up → `wrapUp` (one tool-less call that hands back its findings) → end, or end at once when the
|
|
37
|
+
* run has made no step yet (nothing new to report);
|
|
36
38
|
* 模型中止或正常结束 → 结束。`durability: "sync"`:每个节点的 checkpoint 在下一个节点开始前落库。
|
|
37
39
|
*
|
|
38
40
|
* 幂等:`runModelStep` / `runFinalWrapUp` 按 (runId, step) 幂等,续跑重新执行 model 节点时若回复已在日志里,
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { Annotation, END, START, StateGraph } from "@langchain/langgraph";
|
|
2
2
|
import { MediaCache } from "./media-cache.js";
|
|
3
3
|
import { runFinalWrapUp, runModelStep, } from "./model-call.js";
|
|
4
|
-
import { subagentBudgetUsedUp } from "./subagents/limits.js";
|
|
4
|
+
import { budgetRunOf, subagentBudgetUsedUp } from "./subagents/limits.js";
|
|
5
5
|
import { isForkInvocation } from "./subagents/skill-fork.js";
|
|
6
6
|
/**
|
|
7
7
|
* 图状态:只记录进度,消息每步从事件日志重建(runModelStep 自己读日志),checkpoint 很小。
|
|
8
8
|
* - `step`:当前(最近一次进入的)步骤编号,prepare 节点 +1;
|
|
9
|
-
* - `consumedUpToSeq`:已吸收的最大可吸收事件 seq(user_message / background_task_finished
|
|
10
|
-
* finish TaskOutput or TaskStop already reported is absorbed like any
|
|
9
|
+
* - `consumedUpToSeq`:已吸收的最大可吸收事件 seq(user_message / background_task_finished /
|
|
10
|
+
* subagent_delivery; a finish TaskOutput or TaskStop already reported is absorbed like any
|
|
11
|
+
* other, rendered short);
|
|
11
12
|
* - `lastStopReason`:最近一步模型调用的停止原因;
|
|
12
13
|
* - `outcome`:图的结束方式(在决定结束的节点里写入,续跑已结束的图时直接读出,不依赖当前时间)。
|
|
14
|
+
* - `budgetWrapUp`: set when a sub-agent's tree used its token budget after the run made a step: the
|
|
15
|
+
* run goes to the `wrapUp` node for one tool-less call that hands back what it found, then ends
|
|
16
|
+
* with `budget` (sub-agents spec §8.3). Null otherwise (the step limit routes there by `step`; a channel cannot share the
|
|
17
|
+
* node's name).
|
|
13
18
|
*
|
|
14
19
|
* 所有 channel 都是默认的 LastValue(不用实验性的 DeltaChannel,也没有子图):
|
|
15
20
|
* 每个 checkpoint 自带完整状态,`pruneToLatest` 之后仍能独立还原(R19)。
|
|
@@ -19,8 +24,15 @@ const LoopState = Annotation.Root({
|
|
|
19
24
|
consumedUpToSeq: Annotation(),
|
|
20
25
|
lastStopReason: Annotation(),
|
|
21
26
|
outcome: Annotation(),
|
|
27
|
+
budgetWrapUp: Annotation(),
|
|
22
28
|
});
|
|
23
|
-
const INITIAL = {
|
|
29
|
+
const INITIAL = {
|
|
30
|
+
step: 0,
|
|
31
|
+
consumedUpToSeq: 0,
|
|
32
|
+
lastStopReason: null,
|
|
33
|
+
outcome: null,
|
|
34
|
+
budgetWrapUp: null,
|
|
35
|
+
};
|
|
24
36
|
/**
|
|
25
37
|
* prepare 节点在停机信号下抛出:本次 invoke 以它结束,checkpoint 停在 prepare 之前
|
|
26
38
|
* (LangGraph 把出错的任务记为该 checkpoint 上的 pending error,`invoke(null)` 续跑时重新执行它)。
|
|
@@ -56,7 +68,9 @@ class LoopSuspended extends Error {
|
|
|
56
68
|
* worker 崩溃后由其他副本从最近的 checkpoint 续跑(spec 4.4、Review Focus 1)。
|
|
57
69
|
*
|
|
58
70
|
* 图:`prepare → model →(tool_use)tools → prepare …`;prepare 发现步数超过上限 → `wrapUp` → 结束;
|
|
59
|
-
* prepare finding the deadline passed
|
|
71
|
+
* prepare finding the deadline passed → end; a sub-agent's run finding its tree's token budget used
|
|
72
|
+
* up → `wrapUp` (one tool-less call that hands back its findings) → end, or end at once when the
|
|
73
|
+
* run has made no step yet (nothing new to report);
|
|
60
74
|
* 模型中止或正常结束 → 结束。`durability: "sync"`:每个节点的 checkpoint 在下一个节点开始前落库。
|
|
61
75
|
*
|
|
62
76
|
* 幂等:`runModelStep` / `runFinalWrapUp` 按 (runId, step) 幂等,续跑重新执行 model 节点时若回复已在日志里,
|
|
@@ -130,6 +144,7 @@ export class LangGraphLoop {
|
|
|
130
144
|
accountId: ctx.triggerAccountId,
|
|
131
145
|
...(ctx.conversationKind !== undefined && { conversationKind: ctx.conversationKind }),
|
|
132
146
|
...(ctx.parent !== undefined && { parentRunId: ctx.parent.runId, parent: ctx.parent }),
|
|
147
|
+
...(ctx.subagent === true && { subagent: true }),
|
|
133
148
|
});
|
|
134
149
|
const deps = this.stepDeps;
|
|
135
150
|
const hooks = this.hooks;
|
|
@@ -140,11 +155,14 @@ export class LangGraphLoop {
|
|
|
140
155
|
// 否则 consumed_seq 越过它们、也不会再起新一轮。
|
|
141
156
|
if (timedOut())
|
|
142
157
|
return { outcome: "max_duration" };
|
|
143
|
-
// a sub-agent stops before its next request once its
|
|
144
|
-
//
|
|
158
|
+
// a sub-agent stops before its next request once its tree used its token budget (spec §8.3,
|
|
159
|
+
// agent map §6: on the budget run; fresh read, in-flight requests of others may overshoot by
|
|
160
|
+
// one each). A run that made a step hands back what it found in one final tool-less call
|
|
161
|
+
// (one more over); a run stopped before its first step (a wake of a stopped tree) has
|
|
162
|
+
// nothing new to report and ends at once.
|
|
145
163
|
if (ctx.parent !== undefined &&
|
|
146
|
-
(await subagentBudgetUsedUp(deps.db, deps.config, ctx.orgId, ctx.parent.runId))) {
|
|
147
|
-
return { outcome: "budget" };
|
|
164
|
+
(await subagentBudgetUsedUp(deps.db, deps.config, ctx.orgId, ctx.parent.budgetRunId ?? (await budgetRunOf(deps.db, ctx.parent.runId))))) {
|
|
165
|
+
return s.step > 0 ? { step: s.step + 1, budgetWrapUp: true } : { outcome: "budget" };
|
|
148
166
|
}
|
|
149
167
|
let consumed = s.consumedUpToSeq;
|
|
150
168
|
// the run's first prepare (also when it runs again after a suspend on its fork's sub-agent)
|
|
@@ -173,8 +191,10 @@ export class LangGraphLoop {
|
|
|
173
191
|
const model = async (s) => {
|
|
174
192
|
const r = await runModelStep(deps, input(s.step, s.consumedUpToSeq));
|
|
175
193
|
await hooks.afterModelStep?.(ctx.runId, s.step, r);
|
|
194
|
+
// budget used up by a compaction call before the step's request: hand back in the wrap-up,
|
|
195
|
+
// at this step (it logged no request)
|
|
176
196
|
if (r.budget)
|
|
177
|
-
return {
|
|
197
|
+
return { budgetWrapUp: true };
|
|
178
198
|
if (r.aborted) {
|
|
179
199
|
return { lastStopReason: "aborted", outcome: timedOut() ? "max_duration" : "aborted" };
|
|
180
200
|
}
|
|
@@ -218,11 +238,12 @@ export class LangGraphLoop {
|
|
|
218
238
|
return {};
|
|
219
239
|
};
|
|
220
240
|
const wrapUp = async (s) => {
|
|
221
|
-
const
|
|
241
|
+
const budget = s.budgetWrapUp === true;
|
|
242
|
+
const r = await runFinalWrapUp(deps, input(s.step, s.consumedUpToSeq), budget ? "budget" : "max_steps");
|
|
222
243
|
await hooks.afterModelStep?.(ctx.runId, s.step, r);
|
|
223
244
|
return {
|
|
224
245
|
lastStopReason: r.aborted ? "aborted" : r.stopReason,
|
|
225
|
-
outcome: r.
|
|
246
|
+
outcome: r.aborted && !timedOut() ? "aborted" : budget || r.budget ? "budget" : "max_steps",
|
|
226
247
|
};
|
|
227
248
|
};
|
|
228
249
|
return new StateGraph(LoopState)
|
|
@@ -235,12 +256,9 @@ export class LangGraphLoop {
|
|
|
235
256
|
// (aborted / completed: a fork invocation's run ended in its first prepare, phase D)
|
|
236
257
|
if (s.outcome !== null)
|
|
237
258
|
return END;
|
|
238
|
-
return s.step > ctx.limits.maxSteps ? "wrapUp" : "model";
|
|
259
|
+
return s.budgetWrapUp === true || s.step > ctx.limits.maxSteps ? "wrapUp" : "model";
|
|
239
260
|
}, ["model", "wrapUp", END])
|
|
240
|
-
.addConditionalEdges("model", (s) => (s.outcome === null ? "tools" : END), [
|
|
241
|
-
"tools",
|
|
242
|
-
END,
|
|
243
|
-
])
|
|
261
|
+
.addConditionalEdges("model", (s) => (s.budgetWrapUp === true ? "wrapUp" : s.outcome === null ? "tools" : END), ["tools", "wrapUp", END])
|
|
244
262
|
.addEdge("tools", "prepare")
|
|
245
263
|
.addEdge("wrapUp", END)
|
|
246
264
|
.compile({ checkpointer: this.saver });
|