@cjhyy/code-shell-core 0.7.1 → 0.8.0
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/README.md +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +254 -195
- package/dist/engine/engine.js +1812 -2041
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +34 -123
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +60 -0
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.js +2 -6
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +77 -19
- package/dist/tool-system/executor.js +75 -50
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +186 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -45
- package/dist/arena/arena.js +0 -362
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -518
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -72
- package/dist/git/worktree/crud.js +0 -235
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -87
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -43
- package/dist/git/worktree/query.js +0 -128
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -416
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -363
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
|
@@ -13,6 +13,7 @@ import { createTranscriptTranslator } from "./agent-transcript-translator.js";
|
|
|
13
13
|
import { notificationQueue } from "./agent-notifications.js";
|
|
14
14
|
import { nanoid } from "nanoid";
|
|
15
15
|
import { logger } from "../../logging/logger.js";
|
|
16
|
+
import { applyAgentProgressPhase, applyAgentProgressUsage, initialAgentProgress, reduceAgentProgress, } from "./agent-progress.js";
|
|
16
17
|
/**
|
|
17
18
|
* Invoke a stream callback that came from outside the engine's own
|
|
18
19
|
* TurnLoop wrap (e.g. `subAgentSpawner.parentStream`, which is the
|
|
@@ -69,6 +70,8 @@ export function resolveAgentTypeOverrides(agentType, registry) {
|
|
|
69
70
|
maxTurns: def.maxTurns,
|
|
70
71
|
toolAllowlist: def.tools,
|
|
71
72
|
skillAllowlist: namespacePluginSkills(def.skills, def.source, def.pluginName),
|
|
73
|
+
sandboxMode: def.sandbox,
|
|
74
|
+
mcpAllowlist: def.mcp,
|
|
72
75
|
appendSystemPrompt: def.systemPrompt,
|
|
73
76
|
};
|
|
74
77
|
}
|
|
@@ -273,10 +276,34 @@ streamOverride) {
|
|
|
273
276
|
if (usage)
|
|
274
277
|
opts.recordBilledUsage?.(usage);
|
|
275
278
|
const finalText = text || `Agent completed but produced no text output.`;
|
|
276
|
-
safeEmit(startEndSink, {
|
|
279
|
+
safeEmit(startEndSink, {
|
|
280
|
+
type: "agent_end",
|
|
281
|
+
agentId,
|
|
282
|
+
name,
|
|
283
|
+
description,
|
|
284
|
+
text: finalText,
|
|
285
|
+
agentType,
|
|
286
|
+
});
|
|
277
287
|
emitSubAgentHook(opts.hooks, "subagent_finish", { agentId, description, text: finalText });
|
|
278
288
|
return finalText;
|
|
279
289
|
}
|
|
290
|
+
function createAgentProgressTracker(agentId) {
|
|
291
|
+
let progress = initialAgentProgress();
|
|
292
|
+
return {
|
|
293
|
+
current: () => progress,
|
|
294
|
+
onEvent: (event) => {
|
|
295
|
+
progress = reduceAgentProgress(progress, event);
|
|
296
|
+
asyncAgentRegistry.updateProgress(agentId, progress);
|
|
297
|
+
},
|
|
298
|
+
onRuntime: (event) => {
|
|
299
|
+
progress =
|
|
300
|
+
event.type === "usage"
|
|
301
|
+
? applyAgentProgressUsage(progress, event.usage)
|
|
302
|
+
: applyAgentProgressPhase(progress, event.phase, Date.now(), event.toolName);
|
|
303
|
+
asyncAgentRegistry.updateProgress(agentId, progress);
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
}
|
|
280
307
|
export async function agentTool(args, ctx) {
|
|
281
308
|
const prompt = args.prompt;
|
|
282
309
|
const description = args.description || "sub-agent";
|
|
@@ -329,10 +356,13 @@ export async function agentTool(args, ctx) {
|
|
|
329
356
|
// through AgentCancel(agent_id).
|
|
330
357
|
if (runInBackground) {
|
|
331
358
|
if (asyncAgentRegistry.runningCount() >= MAX_BACKGROUND_AGENTS) {
|
|
332
|
-
return `Error: too many background agents running (limit ${MAX_BACKGROUND_AGENTS}). ` +
|
|
333
|
-
`Wait for some to finish or cancel one with AgentCancel(agent_id) before launching more
|
|
359
|
+
return (`Error: too many background agents running (limit ${MAX_BACKGROUND_AGENTS}). ` +
|
|
360
|
+
`Wait for some to finish or cancel one with AgentCancel(agent_id) before launching more.`);
|
|
334
361
|
}
|
|
335
362
|
const controller = new AbortController();
|
|
363
|
+
const runtimeGeneration = asyncAgentRegistry.allocateRuntimeGeneration(agentId);
|
|
364
|
+
const progressTracker = createAgentProgressTracker(agentId);
|
|
365
|
+
let liveLease;
|
|
336
366
|
asyncAgentRegistry.register({
|
|
337
367
|
agentId,
|
|
338
368
|
name,
|
|
@@ -341,6 +371,9 @@ export async function agentTool(args, ctx) {
|
|
|
341
371
|
// Tag with the spawning session so the parent Engine.run waits only on
|
|
342
372
|
// its own background agents (hasRunningForSession).
|
|
343
373
|
sessionId: ctx?.sessionId,
|
|
374
|
+
childSessionId: agentId,
|
|
375
|
+
runtimeGeneration,
|
|
376
|
+
progress: progressTracker.current(),
|
|
344
377
|
status: "running",
|
|
345
378
|
startedAt: Date.now(),
|
|
346
379
|
abort: () => controller.abort(),
|
|
@@ -371,15 +404,52 @@ export async function agentTool(args, ctx) {
|
|
|
371
404
|
model: overrides.model,
|
|
372
405
|
toolAllowlist: overrides.toolAllowlist,
|
|
373
406
|
skillAllowlist: overrides.skillAllowlist,
|
|
407
|
+
sandboxMode: overrides.sandboxMode,
|
|
408
|
+
mcpAllowlist: overrides.mcpAllowlist,
|
|
374
409
|
appendSystemPrompt: overrides.appendSystemPrompt,
|
|
375
410
|
readOnlySession: overrides.resolvedType === "researcher" || overrides.resolvedType === "explorer",
|
|
376
411
|
hooks: ctx?.hooks,
|
|
377
412
|
recordBilledUsage: ctx?.recordBilledUsage,
|
|
413
|
+
runtimeGeneration,
|
|
414
|
+
bindLiveControl: (control, ownerToken) => {
|
|
415
|
+
const lease = asyncAgentRegistry.acquireWriterLease(control.childSessionId, control.runtimeGeneration, ownerToken);
|
|
416
|
+
if (!lease)
|
|
417
|
+
return false;
|
|
418
|
+
if (!asyncAgentRegistry.bindLiveControl(agentId, control, lease)) {
|
|
419
|
+
asyncAgentRegistry.releaseWriterLease(lease);
|
|
420
|
+
return false;
|
|
421
|
+
}
|
|
422
|
+
liveLease = lease;
|
|
423
|
+
return lease;
|
|
424
|
+
},
|
|
425
|
+
closeLiveControl: (_control, lease) => {
|
|
426
|
+
if (lease)
|
|
427
|
+
asyncAgentRegistry.closeDirectionIntake(agentId, lease);
|
|
428
|
+
},
|
|
429
|
+
onProgressEvent: progressTracker.onEvent,
|
|
430
|
+
onAgentProgress: progressTracker.onRuntime,
|
|
378
431
|
signal: controller.signal,
|
|
379
432
|
}, parentStream, // uiStream: agent_start/end → main feed
|
|
380
433
|
transcriptSink)
|
|
381
434
|
.then((text) => {
|
|
382
|
-
|
|
435
|
+
if (controller.signal.aborted) {
|
|
436
|
+
if (liveLease)
|
|
437
|
+
asyncAgentRegistry.completeTerminal(agentId, "cancelled", liveLease);
|
|
438
|
+
else
|
|
439
|
+
asyncAgentRegistry.markCancelled(agentId);
|
|
440
|
+
void ctx?.hooks?.emit("notification", {
|
|
441
|
+
kind: "agent_cancelled",
|
|
442
|
+
agentId,
|
|
443
|
+
name,
|
|
444
|
+
description,
|
|
445
|
+
});
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
const transitioned = liveLease
|
|
449
|
+
? asyncAgentRegistry.completeTerminal(agentId, "completed", liveLease)
|
|
450
|
+
: (asyncAgentRegistry.markCompleted(agentId), true);
|
|
451
|
+
if (!transitioned)
|
|
452
|
+
return;
|
|
383
453
|
// External-readable copy of the result (tail / cross-session history).
|
|
384
454
|
// Best-effort; never blocks the completion path.
|
|
385
455
|
void writeAgentOutputFile(agentId, {
|
|
@@ -442,7 +512,10 @@ export async function agentTool(args, ctx) {
|
|
|
442
512
|
// User-initiated cancel: mark status but do NOT enqueue —
|
|
443
513
|
// the main agent doesn't need a follow-up turn. Dock still
|
|
444
514
|
// shows the "cancelled" badge for the fade window.
|
|
445
|
-
|
|
515
|
+
if (liveLease)
|
|
516
|
+
asyncAgentRegistry.completeTerminal(agentId, "cancelled", liveLease);
|
|
517
|
+
else
|
|
518
|
+
asyncAgentRegistry.markCancelled(agentId);
|
|
446
519
|
void ctx?.hooks?.emit("notification", {
|
|
447
520
|
kind: "agent_cancelled",
|
|
448
521
|
agentId,
|
|
@@ -451,7 +524,11 @@ export async function agentTool(args, ctx) {
|
|
|
451
524
|
});
|
|
452
525
|
return;
|
|
453
526
|
}
|
|
454
|
-
|
|
527
|
+
const transitioned = liveLease
|
|
528
|
+
? asyncAgentRegistry.completeTerminal(agentId, "failed", liveLease)
|
|
529
|
+
: (asyncAgentRegistry.markFailed(agentId), true);
|
|
530
|
+
if (!transitioned)
|
|
531
|
+
return;
|
|
455
532
|
void writeAgentOutputFile(agentId, {
|
|
456
533
|
status: "failed",
|
|
457
534
|
body: err.message,
|
|
@@ -535,6 +612,7 @@ function recordCompletedSyncAgent(opts) {
|
|
|
535
612
|
sessionId: opts.parentSessionId,
|
|
536
613
|
// agent_id === childSid: the resumable session lives at sessions/<agentId>/.
|
|
537
614
|
childSessionId: opts.agentId,
|
|
615
|
+
runtimeGeneration: opts.runtimeGeneration,
|
|
538
616
|
status: "completed",
|
|
539
617
|
startedAt: now,
|
|
540
618
|
finishedAt: now,
|
|
@@ -566,6 +644,10 @@ async function runSyncSubAgent(args) {
|
|
|
566
644
|
// the background, so the finally block leaves the parent-abort listener with
|
|
567
645
|
// the background handlers instead of removing it.
|
|
568
646
|
let handedOff = false;
|
|
647
|
+
const childSessionId = resumeSessionId ?? agentId;
|
|
648
|
+
const runtimeGeneration = asyncAgentRegistry.allocateRuntimeGeneration(childSessionId);
|
|
649
|
+
const progressTracker = createAgentProgressTracker(agentId);
|
|
650
|
+
let liveBinding;
|
|
569
651
|
// Run the agent, but don't necessarily await it to completion: race the run
|
|
570
652
|
// against the auto-background timer. The run promise is shared between the
|
|
571
653
|
// inline await and (if we hand off) the background completion handlers, so
|
|
@@ -580,11 +662,30 @@ async function runSyncSubAgent(args) {
|
|
|
580
662
|
model: overrides.model,
|
|
581
663
|
toolAllowlist: overrides.toolAllowlist,
|
|
582
664
|
skillAllowlist: overrides.skillAllowlist,
|
|
665
|
+
sandboxMode: overrides.sandboxMode,
|
|
666
|
+
mcpAllowlist: overrides.mcpAllowlist,
|
|
583
667
|
appendSystemPrompt: overrides.appendSystemPrompt,
|
|
584
668
|
readOnlySession: overrides.resolvedType === "researcher" || overrides.resolvedType === "explorer",
|
|
585
669
|
resumeSessionId,
|
|
586
670
|
hooks: ctx?.hooks,
|
|
587
671
|
recordBilledUsage: ctx?.recordBilledUsage,
|
|
672
|
+
runtimeGeneration,
|
|
673
|
+
bindLiveControl: (control, ownerToken) => {
|
|
674
|
+
const lease = asyncAgentRegistry.acquireWriterLease(control.childSessionId, control.runtimeGeneration, ownerToken);
|
|
675
|
+
if (!lease)
|
|
676
|
+
return false;
|
|
677
|
+
liveBinding = { control, lease };
|
|
678
|
+
return lease;
|
|
679
|
+
},
|
|
680
|
+
closeLiveControl: (_control, lease) => {
|
|
681
|
+
if (!lease)
|
|
682
|
+
return;
|
|
683
|
+
if (handedOff)
|
|
684
|
+
return asyncAgentRegistry.closeDirectionIntake(agentId, lease);
|
|
685
|
+
return asyncAgentRegistry.releaseWriterLease(lease);
|
|
686
|
+
},
|
|
687
|
+
onProgressEvent: progressTracker.onEvent,
|
|
688
|
+
onAgentProgress: progressTracker.onRuntime,
|
|
588
689
|
signal: syncController.signal,
|
|
589
690
|
});
|
|
590
691
|
// Sentinel that the timer resolves with, so we can tell "agent finished" from
|
|
@@ -599,7 +700,12 @@ async function runSyncSubAgent(args) {
|
|
|
599
700
|
try {
|
|
600
701
|
// If there's no timer (threshold 0/∞ disabled), just await as before.
|
|
601
702
|
const winner = timerPromise
|
|
602
|
-
? await Promise.race([
|
|
703
|
+
? await Promise.race([
|
|
704
|
+
runPromise
|
|
705
|
+
.then((t) => ({ ok: true, text: t }))
|
|
706
|
+
.catch((e) => ({ ok: false, err: e })),
|
|
707
|
+
timerPromise,
|
|
708
|
+
])
|
|
603
709
|
: { ok: true, text: await runPromise };
|
|
604
710
|
if (winner === BG_HANDOFF) {
|
|
605
711
|
// Threshold elapsed while the agent is STILL running. Detach it into the
|
|
@@ -616,6 +722,10 @@ async function runSyncSubAgent(args) {
|
|
|
616
722
|
hooks: ctx?.hooks,
|
|
617
723
|
parentSignal,
|
|
618
724
|
onParentAbort,
|
|
725
|
+
childSessionId,
|
|
726
|
+
runtimeGeneration,
|
|
727
|
+
liveBinding,
|
|
728
|
+
progress: progressTracker.current(),
|
|
619
729
|
// The agent_start fired in runSubAgent put the UI card into 'working'.
|
|
620
730
|
// runSubAgent's own agent_end (line ~299) only fires if spawn() RESOLVES;
|
|
621
731
|
// on failure/cancel it throws before that, so the card would hang
|
|
@@ -644,14 +754,26 @@ async function runSyncSubAgent(args) {
|
|
|
644
754
|
agentType: overrides.resolvedType,
|
|
645
755
|
description,
|
|
646
756
|
parentSessionId: ctx?.sessionId,
|
|
757
|
+
runtimeGeneration,
|
|
647
758
|
});
|
|
648
759
|
return winner.text;
|
|
649
760
|
}
|
|
650
761
|
throw winner.err;
|
|
651
762
|
}
|
|
652
763
|
catch (err) {
|
|
653
|
-
emitSubAgentHook(ctx?.hooks, "subagent_error", {
|
|
654
|
-
|
|
764
|
+
emitSubAgentHook(ctx?.hooks, "subagent_error", {
|
|
765
|
+
agentId,
|
|
766
|
+
description,
|
|
767
|
+
error: err.message,
|
|
768
|
+
});
|
|
769
|
+
safeEmit(parentStream, {
|
|
770
|
+
type: "agent_end",
|
|
771
|
+
agentId,
|
|
772
|
+
name,
|
|
773
|
+
description,
|
|
774
|
+
error: err.message,
|
|
775
|
+
agentType: overrides.resolvedType,
|
|
776
|
+
});
|
|
655
777
|
if (parentSignal?.aborted)
|
|
656
778
|
return "Agent was aborted.";
|
|
657
779
|
return `Agent error: ${err.message}`;
|
|
@@ -674,7 +796,7 @@ async function runSyncSubAgent(args) {
|
|
|
674
796
|
* a running (then completed/failed) background agent. Never aborts the agent.
|
|
675
797
|
*/
|
|
676
798
|
function handoffToBackground(runPromise, controller, meta) {
|
|
677
|
-
const { agentId, name, description, agentType, sessionId, hooks, uiStream } = meta;
|
|
799
|
+
const { agentId, name, description, agentType, sessionId, hooks, uiStream, childSessionId, runtimeGeneration, liveBinding, progress, } = meta;
|
|
678
800
|
// The agent outlives the spawning turn now, so parent-turn abort must NOT
|
|
679
801
|
// cascade to it (same contract as an explicit background agent). Detach the
|
|
680
802
|
// parent listener; cancellation from here on goes through AgentCancel.
|
|
@@ -685,10 +807,21 @@ function handoffToBackground(runPromise, controller, meta) {
|
|
|
685
807
|
agentType,
|
|
686
808
|
description,
|
|
687
809
|
sessionId,
|
|
810
|
+
childSessionId,
|
|
811
|
+
runtimeGeneration,
|
|
812
|
+
progress,
|
|
688
813
|
status: "running",
|
|
689
814
|
startedAt: Date.now(),
|
|
690
815
|
abort: () => controller.abort(),
|
|
691
816
|
});
|
|
817
|
+
if (liveBinding &&
|
|
818
|
+
!asyncAgentRegistry.bindLiveControl(agentId, liveBinding.control, liveBinding.lease)) {
|
|
819
|
+
logger.warn("agent_live_control.handoff_bind_failed", {
|
|
820
|
+
agentId,
|
|
821
|
+
childSessionId,
|
|
822
|
+
runtimeGeneration,
|
|
823
|
+
});
|
|
824
|
+
}
|
|
692
825
|
// Tell the UI this agent is now running in the BACKGROUND (still working,
|
|
693
826
|
// just detached from the parent turn). Without this the card's only signals
|
|
694
827
|
// are agent_start (looks foreground) and the eventual agent_end — so during
|
|
@@ -701,7 +834,21 @@ function handoffToBackground(runPromise, controller, meta) {
|
|
|
701
834
|
ensureAgentHeartbeat();
|
|
702
835
|
runPromise
|
|
703
836
|
.then((text) => {
|
|
704
|
-
|
|
837
|
+
if (controller.signal.aborted) {
|
|
838
|
+
if (liveBinding) {
|
|
839
|
+
asyncAgentRegistry.completeTerminal(agentId, "cancelled", liveBinding.lease);
|
|
840
|
+
}
|
|
841
|
+
else {
|
|
842
|
+
asyncAgentRegistry.markCancelled(agentId);
|
|
843
|
+
}
|
|
844
|
+
void hooks?.emit("notification", { kind: "agent_cancelled", agentId, name, description });
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
const transitioned = liveBinding
|
|
848
|
+
? asyncAgentRegistry.completeTerminal(agentId, "completed", liveBinding.lease)
|
|
849
|
+
: (asyncAgentRegistry.markCompleted(agentId), true);
|
|
850
|
+
if (!transitioned)
|
|
851
|
+
return;
|
|
705
852
|
void writeAgentOutputFile(agentId, {
|
|
706
853
|
status: "completed",
|
|
707
854
|
body: text,
|
|
@@ -710,24 +857,53 @@ function handoffToBackground(runPromise, controller, meta) {
|
|
|
710
857
|
onError: (m, meta) => logger.warn(m, meta),
|
|
711
858
|
});
|
|
712
859
|
if (sessionId) {
|
|
713
|
-
notificationQueue.enqueue({
|
|
860
|
+
notificationQueue.enqueue({
|
|
861
|
+
agentId,
|
|
862
|
+
name,
|
|
863
|
+
description,
|
|
864
|
+
status: "completed",
|
|
865
|
+
finalText: text,
|
|
866
|
+
enqueuedAt: Date.now(),
|
|
867
|
+
}, sessionId);
|
|
714
868
|
}
|
|
715
869
|
else {
|
|
716
870
|
logger.warn("agent_completion_without_session", { agentId, name, status: "completed" });
|
|
717
871
|
}
|
|
718
|
-
void hooks?.emit("notification", {
|
|
872
|
+
void hooks?.emit("notification", {
|
|
873
|
+
kind: "agent_completed",
|
|
874
|
+
agentId,
|
|
875
|
+
name,
|
|
876
|
+
description,
|
|
877
|
+
finalText: text,
|
|
878
|
+
});
|
|
719
879
|
})
|
|
720
880
|
.catch((err) => {
|
|
721
881
|
// runSubAgent threw before its success agent_end, so the UI card is still
|
|
722
882
|
// 'working'. Close it out with a terminal agent_end{error} (mirrors the
|
|
723
883
|
// synchronous catch at the agentTool level).
|
|
724
|
-
safeEmit(uiStream, {
|
|
884
|
+
safeEmit(uiStream, {
|
|
885
|
+
type: "agent_end",
|
|
886
|
+
agentId,
|
|
887
|
+
name,
|
|
888
|
+
description,
|
|
889
|
+
error: err.message,
|
|
890
|
+
agentType,
|
|
891
|
+
});
|
|
725
892
|
if (controller.signal.aborted) {
|
|
726
|
-
|
|
893
|
+
if (liveBinding) {
|
|
894
|
+
asyncAgentRegistry.completeTerminal(agentId, "cancelled", liveBinding.lease);
|
|
895
|
+
}
|
|
896
|
+
else {
|
|
897
|
+
asyncAgentRegistry.markCancelled(agentId);
|
|
898
|
+
}
|
|
727
899
|
void hooks?.emit("notification", { kind: "agent_cancelled", agentId, name, description });
|
|
728
900
|
return;
|
|
729
901
|
}
|
|
730
|
-
|
|
902
|
+
const transitioned = liveBinding
|
|
903
|
+
? asyncAgentRegistry.completeTerminal(agentId, "failed", liveBinding.lease)
|
|
904
|
+
: (asyncAgentRegistry.markFailed(agentId), true);
|
|
905
|
+
if (!transitioned)
|
|
906
|
+
return;
|
|
731
907
|
void writeAgentOutputFile(agentId, {
|
|
732
908
|
status: "failed",
|
|
733
909
|
body: err.message,
|
|
@@ -736,12 +912,25 @@ function handoffToBackground(runPromise, controller, meta) {
|
|
|
736
912
|
onError: (m, meta) => logger.warn(m, meta),
|
|
737
913
|
});
|
|
738
914
|
if (sessionId) {
|
|
739
|
-
notificationQueue.enqueue({
|
|
915
|
+
notificationQueue.enqueue({
|
|
916
|
+
agentId,
|
|
917
|
+
name,
|
|
918
|
+
description,
|
|
919
|
+
status: "failed",
|
|
920
|
+
error: err.message,
|
|
921
|
+
enqueuedAt: Date.now(),
|
|
922
|
+
}, sessionId);
|
|
740
923
|
}
|
|
741
924
|
else {
|
|
742
925
|
logger.warn("agent_completion_without_session", { agentId, name, status: "failed" });
|
|
743
926
|
}
|
|
744
|
-
void hooks?.emit("notification", {
|
|
927
|
+
void hooks?.emit("notification", {
|
|
928
|
+
kind: "agent_failed",
|
|
929
|
+
agentId,
|
|
930
|
+
name,
|
|
931
|
+
description,
|
|
932
|
+
error: err.message,
|
|
933
|
+
});
|
|
745
934
|
});
|
|
746
935
|
}
|
|
747
936
|
// ─── AgentStatus / AgentCancel — companions to run_in_background ─
|
|
@@ -784,13 +973,17 @@ export async function agentStatusTool(args, ctx) {
|
|
|
784
973
|
return list
|
|
785
974
|
.map((e) => {
|
|
786
975
|
const dur = ((e.finishedAt ?? Date.now()) - e.startedAt) / 1000;
|
|
787
|
-
|
|
976
|
+
const progress = e.status === "running" && e.progress ? ` — ${e.progress.summary}` : "";
|
|
977
|
+
return `${e.agentId} [${e.status}] ${e.description}${progress} (${dur.toFixed(1)}s)`;
|
|
788
978
|
})
|
|
789
979
|
.join("\n");
|
|
790
980
|
}
|
|
791
981
|
const e = asyncAgentRegistry.get(agentId);
|
|
792
982
|
if (!e)
|
|
793
983
|
return `Error: agent_id "${agentId}" not found.`;
|
|
984
|
+
if (ctx?.sessionId && e.sessionId !== ctx.sessionId) {
|
|
985
|
+
return `Error: agent_id "${agentId}" is not in this session.`;
|
|
986
|
+
}
|
|
794
987
|
const dur = ((e.finishedAt ?? Date.now()) - e.startedAt) / 1000;
|
|
795
988
|
const lines = [
|
|
796
989
|
`agent_id: ${e.agentId}`,
|
|
@@ -808,6 +1001,9 @@ export async function agentStatusTool(args, ctx) {
|
|
|
808
1001
|
lines.push("", "(cancelled — no result delivered)");
|
|
809
1002
|
}
|
|
810
1003
|
else if (e.status === "running") {
|
|
1004
|
+
if (e.progress) {
|
|
1005
|
+
lines.push(`phase: ${e.progress.phase}`, `progress: ${e.progress.summary}`, `tokens: ${e.progress.tokens.total}`, `observed: ${e.progress.observedAt}`);
|
|
1006
|
+
}
|
|
811
1007
|
lines.push("", "(still running — call AgentStatus again later)");
|
|
812
1008
|
}
|
|
813
1009
|
return lines.join("\n");
|
|
@@ -838,9 +1034,7 @@ export async function agentCancelTool(args) {
|
|
|
838
1034
|
return `Agent ${agentId} is already ${e.status}; nothing to cancel.`;
|
|
839
1035
|
}
|
|
840
1036
|
const ok = asyncAgentRegistry.cancel(agentId);
|
|
841
|
-
return ok
|
|
842
|
-
? `Agent ${agentId} cancelled.`
|
|
843
|
-
: `Failed to cancel agent ${agentId}.`;
|
|
1037
|
+
return ok ? `Agent ${agentId} cancelled.` : `Failed to cancel agent ${agentId}.`;
|
|
844
1038
|
}
|
|
845
1039
|
// ─── AgentSendInput — continue a previously-spawned sub-agent ────
|
|
846
1040
|
export const agentSendInputToolDef = {
|
|
@@ -870,24 +1064,47 @@ export const agentSendInputToolDef = {
|
|
|
870
1064
|
description: "The follow-up instruction. The agent already remembers its earlier work — " +
|
|
871
1065
|
"send only what's new (feedback, the next step, a question).",
|
|
872
1066
|
},
|
|
1067
|
+
delivery: {
|
|
1068
|
+
type: "string",
|
|
1069
|
+
enum: ["next-safe-point", "interrupt-and-redrive"],
|
|
1070
|
+
description: "For a running child: queue at the next complete model/tool boundary (default), " +
|
|
1071
|
+
"or cooperatively interrupt the active batch and serially redrive the same runtime.",
|
|
1072
|
+
},
|
|
873
1073
|
},
|
|
1074
|
+
additionalProperties: false,
|
|
874
1075
|
required: ["agent_id", "prompt"],
|
|
875
1076
|
},
|
|
876
1077
|
};
|
|
877
1078
|
export async function agentSendInputTool(args, ctx) {
|
|
1079
|
+
const allowedKeys = new Set(["agent_id", "prompt", "delivery", "__signal"]);
|
|
1080
|
+
if (Object.keys(args).some((key) => !allowedKeys.has(key))) {
|
|
1081
|
+
return "Error: invalid-request: AgentSendInput accepts only agent_id, prompt, and delivery.";
|
|
1082
|
+
}
|
|
878
1083
|
const agentId = args.agent_id?.trim();
|
|
879
1084
|
const prompt = args.prompt;
|
|
1085
|
+
const rawDelivery = args.delivery;
|
|
880
1086
|
if (!agentId)
|
|
881
1087
|
return "Error: agent_id is required.";
|
|
882
1088
|
if (!prompt)
|
|
883
1089
|
return "Error: prompt is required.";
|
|
1090
|
+
if (rawDelivery !== undefined &&
|
|
1091
|
+
rawDelivery !== "next-safe-point" &&
|
|
1092
|
+
rawDelivery !== "interrupt-and-redrive") {
|
|
1093
|
+
return "Error: invalid delivery. Expected next-safe-point or interrupt-and-redrive.";
|
|
1094
|
+
}
|
|
1095
|
+
const delivery = rawDelivery ?? "next-safe-point";
|
|
884
1096
|
if (!ctx?.subAgentSpawner) {
|
|
885
1097
|
return "Error: Agent tool is not configured (no subAgentSpawner in ctx).";
|
|
886
1098
|
}
|
|
887
1099
|
// Same flat-hierarchy rule as Agent: a sub-agent cannot continue (or spawn)
|
|
888
1100
|
// another sub-agent. Layered with the NESTED_AGENT_TOOLS strip in engine.ts.
|
|
889
1101
|
if (ctx.isSubAgent === true) {
|
|
890
|
-
return
|
|
1102
|
+
return JSON.stringify({
|
|
1103
|
+
status: "rejected",
|
|
1104
|
+
reason: "not-direct-parent",
|
|
1105
|
+
rejectedAt: Date.now(),
|
|
1106
|
+
message: "Nested agents are not supported. Sub-agents cannot send input to other sub-agents.",
|
|
1107
|
+
});
|
|
891
1108
|
}
|
|
892
1109
|
const spawner = ctx.subAgentSpawner;
|
|
893
1110
|
const parentSignal = args.__signal;
|
|
@@ -910,17 +1127,41 @@ export async function agentSendInputTool(args, ctx) {
|
|
|
910
1127
|
`It may never have run or its session was cleaned up. ` +
|
|
911
1128
|
`Re-spawn with Agent(...) and a complete task description.`);
|
|
912
1129
|
}
|
|
913
|
-
//
|
|
914
|
-
//
|
|
915
|
-
//
|
|
916
|
-
// to the SAME transcript concurrently — sub-agents have no per-session
|
|
917
|
-
// `active` lock (the protocol layer's serialization only covers top-level
|
|
918
|
-
// sessions), so the two writers interleave and can corrupt the transcript.
|
|
919
|
-
// Refuse until it finishes (or is cancelled).
|
|
1130
|
+
// A running target owns its transcript writer lease. This branch is route-only:
|
|
1131
|
+
// registry validation + the bound live runtime enqueue the direction envelope;
|
|
1132
|
+
// it must never construct/resume a second child Engine.
|
|
920
1133
|
if (entry?.status === "running") {
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
1134
|
+
const ack = await asyncAgentRegistry.routeDirection({
|
|
1135
|
+
callerSessionId: ctx.sessionId ?? "",
|
|
1136
|
+
callerIsSubAgent: false,
|
|
1137
|
+
agentId,
|
|
1138
|
+
prompt,
|
|
1139
|
+
delivery,
|
|
1140
|
+
});
|
|
1141
|
+
return JSON.stringify(ack);
|
|
1142
|
+
}
|
|
1143
|
+
if (entry?.status === "cancelling" || asyncAgentRegistry.getWriterLease(resumeSessionId)) {
|
|
1144
|
+
return `Error: sub-agent "${agentId}" is still cancelling; wait for its previous runtime to fully exit.`;
|
|
1145
|
+
}
|
|
1146
|
+
const callerSessionId = ctx.sessionId ?? "";
|
|
1147
|
+
if (entry) {
|
|
1148
|
+
if (!callerSessionId || entry.sessionId !== callerSessionId) {
|
|
1149
|
+
return `Error: caller is not the direct parent of sub-agent "${agentId}" (not in this session).`;
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
else {
|
|
1153
|
+
const persistedParent = spawner.getSessionParentId?.(resumeSessionId);
|
|
1154
|
+
if (!callerSessionId || persistedParent === undefined || persistedParent === null) {
|
|
1155
|
+
return `Error: cannot verify the direct parent of sub-agent "${agentId}"; continuation is denied.`;
|
|
1156
|
+
}
|
|
1157
|
+
if (persistedParent !== callerSessionId) {
|
|
1158
|
+
return `Error: caller is not the direct parent of sub-agent "${agentId}" (not in this session).`;
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
if (delivery === "interrupt-and-redrive") {
|
|
1162
|
+
return (`Error: sub-agent "${agentId}" is no longer running; ` +
|
|
1163
|
+
`interrupt-and-redrive cannot interrupt a terminal target. ` +
|
|
1164
|
+
`Omit delivery to use the existing transcript continuation path.`);
|
|
924
1165
|
}
|
|
925
1166
|
const name = entry?.name;
|
|
926
1167
|
const description = entry?.description ?? "sub-agent continuation";
|
|
@@ -44,12 +44,39 @@ export interface BackgroundJobEntry {
|
|
|
44
44
|
ccSessionId?: string;
|
|
45
45
|
/** Files the external agent changed (parsed from its transcript, #6). */
|
|
46
46
|
changedFiles?: string[];
|
|
47
|
-
/**
|
|
47
|
+
/** Directory in which the external job was launched. This is an audit/listing
|
|
48
|
+
* snapshot, not necessarily the workspace the job ultimately writes. */
|
|
49
|
+
launchCwd?: string;
|
|
50
|
+
/** @deprecated Back-compatible serialized alias of launchCwd. */
|
|
48
51
|
cwd?: string;
|
|
52
|
+
/** Normalized snapshot of the declared effective workspace cwd. Preserved
|
|
53
|
+
* separately from its resolved root for mixed git-resolution fallback. */
|
|
54
|
+
effectiveWorkspaceCwd?: string;
|
|
55
|
+
/** Canonical source workspace before per-run isolation. Unlike
|
|
56
|
+
* effectiveWorkspaceRoot, this remains the main checkout for linked
|
|
57
|
+
* worktrees so later writers targeting that checkout can auto-isolate too. */
|
|
58
|
+
workspaceRoot?: string;
|
|
59
|
+
/** Canonical conflict identity: git worktree root when resolvable, otherwise
|
|
60
|
+
* the normalized effective workspace cwd. */
|
|
61
|
+
effectiveWorkspaceRoot?: string;
|
|
62
|
+
/** Git common dir identifies the main repository shared by linked worktrees.
|
|
63
|
+
* Conflict checks deliberately compare worktree roots, so separate
|
|
64
|
+
* worktrees of the same repository remain isolated. */
|
|
65
|
+
gitCommonDir?: string;
|
|
66
|
+
/** Whether effectiveWorkspaceRoot came from git or the cwd fallback. */
|
|
67
|
+
effectiveWorkspaceKind?: "git-worktree" | "cwd";
|
|
49
68
|
/** DriveAgent prompt summary, separate from the UI-oriented description. */
|
|
50
69
|
promptSummary?: string;
|
|
51
70
|
/** External CLI kind for DriveAgent jobs. */
|
|
52
71
|
cli?: ExternalCliKind;
|
|
72
|
+
/** DriveAgent workspace lifecycle metadata. */
|
|
73
|
+
isolation?: "current" | "worktree" | "none";
|
|
74
|
+
worktreePath?: string;
|
|
75
|
+
worktreeBranch?: string;
|
|
76
|
+
worktreeBaseRef?: string;
|
|
77
|
+
worktreeCleanup?: "auto" | "keep" | "detach" | "discard";
|
|
78
|
+
worktreeBranchPrefix?: string;
|
|
79
|
+
worktreeLifecycle?: "running" | "kept" | "detached" | "discarded" | "cleanup-failed";
|
|
53
80
|
/** Client message that launched this external job. */
|
|
54
81
|
originClientMessageId?: string;
|
|
55
82
|
/** Optional cancellation hook for jobs backed by a live process. It may
|
|
@@ -63,12 +90,27 @@ export interface BackgroundJobOutcome {
|
|
|
63
90
|
finalText?: string;
|
|
64
91
|
ccSessionId?: string;
|
|
65
92
|
changedFiles?: string[];
|
|
93
|
+
worktreeLifecycle?: "running" | "kept" | "detached" | "discarded" | "cleanup-failed";
|
|
66
94
|
}
|
|
67
95
|
export interface BackgroundJobStartOptions {
|
|
68
96
|
kind?: BackgroundJobKind;
|
|
97
|
+
/** Preferred name for the external process's launch directory. */
|
|
98
|
+
launchCwd?: string;
|
|
99
|
+
/** @deprecated Back-compatible alias for launchCwd. */
|
|
69
100
|
cwd?: string;
|
|
101
|
+
/** Optional host-declared workspace the job is expected to write. Defaults
|
|
102
|
+
* to launchCwd. This avoids guessing later shell `cd` commands. */
|
|
103
|
+
effectiveWorkspaceCwd?: string;
|
|
104
|
+
/** Source workspace before a job-specific worktree was created. */
|
|
105
|
+
workspaceRoot?: string;
|
|
70
106
|
promptSummary?: string;
|
|
71
107
|
cli?: ExternalCliKind;
|
|
108
|
+
isolation?: "current" | "worktree" | "none";
|
|
109
|
+
worktreePath?: string;
|
|
110
|
+
worktreeBranch?: string;
|
|
111
|
+
worktreeBaseRef?: string;
|
|
112
|
+
worktreeCleanup?: "auto" | "keep" | "detach" | "discard";
|
|
113
|
+
worktreeBranchPrefix?: string;
|
|
72
114
|
originClientMessageId?: string;
|
|
73
115
|
abort?: () => void | BackgroundJobOutcome | Promise<void | BackgroundJobOutcome>;
|
|
74
116
|
}
|
|
@@ -83,13 +125,24 @@ declare class BackgroundJobRegistry {
|
|
|
83
125
|
get(jobId: string): BackgroundJobEntry | undefined;
|
|
84
126
|
/** Persist artifacts discovered while a running job is winding down. */
|
|
85
127
|
recordArtifacts(jobId: string, artifacts: Pick<BackgroundJobOutcome, "ccSessionId" | "changedFiles">): void;
|
|
128
|
+
/** Update retained DriveAgent lifecycle state after an explicit cleanup. */
|
|
129
|
+
recordWorktreeLifecycle(jobId: string, lifecycle: NonNullable<BackgroundJobEntry["worktreeLifecycle"]>, note?: string): boolean;
|
|
86
130
|
cancel(jobId: string, outcome?: Omit<BackgroundJobOutcome, "status">): Promise<boolean>;
|
|
87
131
|
/** True while any running/cancelling job spawned by `sessionId` remains. */
|
|
88
132
|
hasRunningForSession(sessionId: string): boolean;
|
|
89
133
|
/** Running jobs spawned by `sessionId`. Feeds the goal judge's task list. */
|
|
90
134
|
listRunningForSession(sessionId: string): BackgroundJobEntry[];
|
|
91
|
-
/** Running jobs, across all sessions,
|
|
135
|
+
/** Running jobs, across all sessions, in the same effective workspace.
|
|
136
|
+
*
|
|
137
|
+
* Git paths compare by canonical worktree root, so sibling launch directories
|
|
138
|
+
* collide while distinct linked worktrees do not. A declared
|
|
139
|
+
* effectiveWorkspaceCwd takes precedence over launchCwd. If either side could
|
|
140
|
+
* not be resolved through git, exact launch-cwd matching remains the
|
|
141
|
+
* conservative back-compatible fallback. */
|
|
92
142
|
listRunningByCwd(cwd: string): BackgroundJobEntry[];
|
|
143
|
+
/** Running and retained terminal jobs in the effective workspace containing
|
|
144
|
+
* cwd. Used by DriveAgentJobs' cross-session cwd filter. */
|
|
145
|
+
listByWorkspaceCwd(cwd: string): BackgroundJobEntry[];
|
|
93
146
|
/** All jobs (running + retained terminal) for `sessionId`. Feeds the panel. */
|
|
94
147
|
listForSession(sessionId: string): BackgroundJobEntry[];
|
|
95
148
|
/** All jobs (running + retained terminal) across sessions. Feeds all-scope UI. */
|