@cjhyy/code-shell-core 0.7.0 → 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 +20 -5
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +20 -4
- package/dist/context/manager.js +42 -7
- package/dist/context/token-counter.js +5 -3
- package/dist/context/tool-result-storage.d.ts +6 -0
- package/dist/context/tool-result-storage.js +25 -4
- package/dist/credentials/access.d.ts +13 -2
- package/dist/credentials/access.js +99 -4
- package/dist/credentials/index.d.ts +3 -2
- package/dist/credentials/index.js +2 -1
- package/dist/credentials/oauth.d.ts +9 -1
- package/dist/credentials/oauth.js +80 -1
- package/dist/credentials/store.d.ts +16 -2
- package/dist/credentials/store.js +33 -11
- package/dist/credentials/types.d.ts +62 -1
- package/dist/credentials/types.js +16 -1
- 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 +272 -184
- package/dist/engine/engine.js +1869 -1864
- 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/session-title.d.ts +2 -1
- package/dist/engine/session-title.js +4 -1
- 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 +67 -10
- package/dist/engine/turn-loop.js +538 -97
- package/dist/engine/types.d.ts +35 -4
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +26 -9
- package/dist/hooks/events.js +0 -3
- package/dist/hooks/goal-stop-hook.d.ts +28 -29
- package/dist/hooks/goal-stop-hook.js +344 -144
- package/dist/hooks/registry.js +4 -1
- package/dist/hooks/shell-runner.d.ts +12 -1
- package/dist/hooks/shell-runner.js +160 -9
- package/dist/index.d.ts +51 -110
- 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 +37 -125
- 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 +72 -10
- 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/llm/types.d.ts +12 -5
- 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 +10 -4
- package/dist/plugins/pluginCommandHook.js +133 -18
- 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 +77 -3
- package/dist/protocol/chat-session-manager.js +194 -18
- package/dist/protocol/chat-session.d.ts +72 -9
- package/dist/protocol/chat-session.js +151 -16
- package/dist/protocol/client.d.ts +37 -4
- package/dist/protocol/client.js +118 -6
- 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 +152 -14
- package/dist/protocol/server.js +1574 -229
- package/dist/protocol/types.d.ts +182 -32
- package/dist/protocol/types.js +18 -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.d.ts +3 -0
- package/dist/services/dream-consolidation.js +14 -2
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.d.ts +34 -10
- package/dist/services/oauth.js +236 -98
- 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 +208 -25
- package/dist/session/session-manager.js +1232 -116
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +76 -6
- package/dist/session/transcript.js +278 -7
- 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 +279 -34
- package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
- package/dist/tool-system/builtin/background-jobs.js +111 -15
- package/dist/tool-system/builtin/background-work.d.ts +12 -1
- package/dist/tool-system/builtin/background-work.js +12 -1
- package/dist/tool-system/builtin/bash.d.ts +3 -5
- package/dist/tool-system/builtin/bash.js +14 -6
- package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
- 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.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +14 -10
- 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.d.ts +4 -0
- package/dist/tool-system/builtin/generate-video.js +164 -28
- package/dist/tool-system/builtin/glob.d.ts +2 -1
- package/dist/tool-system/builtin/glob.js +28 -3
- package/dist/tool-system/builtin/grep.d.ts +1 -0
- package/dist/tool-system/builtin/grep.js +82 -17
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +57 -18
- package/dist/tool-system/builtin/index.js +280 -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/video-providers.d.ts +12 -15
- package/dist/tool-system/builtin/video-providers.js +1 -0
- package/dist/tool-system/builtin/view-image.d.ts +2 -2
- package/dist/tool-system/builtin/web-fetch.js +60 -15
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +14 -4
- 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 +94 -24
- package/dist/tool-system/executor.js +99 -58
- 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 +17 -1
- package/dist/tool-system/mcp-manager.js +72 -7
- 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/path-policy.d.ts +19 -0
- package/dist/tool-system/path-policy.js +62 -1
- package/dist/tool-system/permission.d.ts +69 -3
- package/dist/tool-system/permission.js +429 -30
- package/dist/tool-system/registry.d.ts +15 -3
- package/dist/tool-system/registry.js +82 -40
- 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 +201 -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 -43
- package/dist/arena/arena.js +0 -333
- 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 -24
- package/dist/arena/phases/adjudication.js +0 -141
- package/dist/arena/phases/build-consensus.d.ts +0 -29
- package/dist/arena/phases/build-consensus.js +0 -83
- 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 -45
- package/dist/arena/phases/cross-review.js +0 -218
- package/dist/arena/phases/debate-rounds.d.ts +0 -27
- package/dist/arena/phases/debate-rounds.js +0 -159
- package/dist/arena/phases/participant-research.d.ts +0 -38
- package/dist/arena/phases/participant-research.js +0 -314
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
- package/dist/arena/phases/planning-detail-expansion.js +0 -119
- package/dist/arena/planner.d.ts +0 -27
- package/dist/arena/planner.js +0 -311
- 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 -514
- 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 -69
- package/dist/git/worktree/crud.js +0 -206
- 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 -51
- 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 -42
- package/dist/git/worktree/query.js +0 -121
- 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 -415
- 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 -345
- /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
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
* loops run in the main engine process, so start/finish and the engine's wait
|
|
21
21
|
* loop observe the same instance.
|
|
22
22
|
*/
|
|
23
|
-
import { normalizeCwdPath } from "../../
|
|
23
|
+
import { normalizeCwdPath } from "../../utils/cwd-normalize.js";
|
|
24
|
+
import { execFileSync } from "node:child_process";
|
|
25
|
+
import { resolveGit } from "../../utils/exec.js";
|
|
24
26
|
function isValidSessionId(sid) {
|
|
25
27
|
return typeof sid === "string" && sid.length > 0;
|
|
26
28
|
}
|
|
@@ -28,22 +30,50 @@ function isValidSessionId(sid) {
|
|
|
28
30
|
* UX limit; a human never spawns this many background jobs in one session. */
|
|
29
31
|
const MAX_TERMINAL_JOBS_PER_SESSION = 50;
|
|
30
32
|
const CANCEL_WAIT_TIMEOUT_MS = 5_000;
|
|
33
|
+
/** Resolve once at registration/query time. Git failures and non-git paths
|
|
34
|
+
* intentionally collapse to the legacy normalized-cwd identity. */
|
|
35
|
+
function resolveEffectiveWorkspaceIdentity(cwd) {
|
|
36
|
+
const normalizedCwd = normalizeCwdPath(cwd);
|
|
37
|
+
try {
|
|
38
|
+
const output = execFileSync(resolveGit(), ["rev-parse", "--path-format=absolute", "--show-toplevel", "--git-common-dir"], {
|
|
39
|
+
cwd: normalizedCwd,
|
|
40
|
+
encoding: "utf-8",
|
|
41
|
+
timeout: 5_000,
|
|
42
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
43
|
+
}).trim();
|
|
44
|
+
const [rawRoot, rawCommonDir] = output.split(/\r?\n/);
|
|
45
|
+
if (rawRoot && rawCommonDir) {
|
|
46
|
+
return {
|
|
47
|
+
root: normalizeCwdPath(rawRoot),
|
|
48
|
+
kind: "git-worktree",
|
|
49
|
+
gitCommonDir: normalizeCwdPath(rawCommonDir),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Non-git, missing git, deleted cwd, and timeouts all retain legacy cwd
|
|
55
|
+
// comparison semantics. Conflict detection must never break job launch.
|
|
56
|
+
}
|
|
57
|
+
return { root: normalizedCwd, kind: "cwd" };
|
|
58
|
+
}
|
|
31
59
|
function isActiveStatus(status) {
|
|
32
60
|
return status === "running" || status === "cancelling";
|
|
33
61
|
}
|
|
34
62
|
async function waitForAbort(abort) {
|
|
35
63
|
let timer;
|
|
36
64
|
try {
|
|
37
|
-
await Promise.race([
|
|
65
|
+
const result = await Promise.race([
|
|
38
66
|
Promise.resolve().then(abort),
|
|
39
67
|
new Promise((resolve) => {
|
|
40
|
-
timer = setTimeout(resolve, CANCEL_WAIT_TIMEOUT_MS);
|
|
68
|
+
timer = setTimeout(() => resolve(undefined), CANCEL_WAIT_TIMEOUT_MS);
|
|
41
69
|
}),
|
|
42
70
|
]);
|
|
71
|
+
return result && typeof result === "object" ? result : undefined;
|
|
43
72
|
}
|
|
44
73
|
catch {
|
|
45
74
|
// Cancellation is best-effort; the terminal state still closes after the
|
|
46
75
|
// abort hook settles or the hard deadline expires.
|
|
76
|
+
return undefined;
|
|
47
77
|
}
|
|
48
78
|
finally {
|
|
49
79
|
if (timer)
|
|
@@ -57,6 +87,14 @@ class BackgroundJobRegistry {
|
|
|
57
87
|
start(jobId, sessionId, description = "", options) {
|
|
58
88
|
if (!isValidSessionId(sessionId))
|
|
59
89
|
return;
|
|
90
|
+
const rawLaunchCwd = options?.launchCwd ?? options?.cwd;
|
|
91
|
+
const launchCwd = rawLaunchCwd ? normalizeCwdPath(rawLaunchCwd) : undefined;
|
|
92
|
+
const effectiveWorkspaceCwd = options?.effectiveWorkspaceCwd
|
|
93
|
+
? normalizeCwdPath(options.effectiveWorkspaceCwd)
|
|
94
|
+
: launchCwd;
|
|
95
|
+
const workspaceIdentity = effectiveWorkspaceCwd
|
|
96
|
+
? resolveEffectiveWorkspaceIdentity(effectiveWorkspaceCwd)
|
|
97
|
+
: undefined;
|
|
60
98
|
this.jobs.set(jobId, {
|
|
61
99
|
jobId,
|
|
62
100
|
sessionId,
|
|
@@ -64,9 +102,29 @@ class BackgroundJobRegistry {
|
|
|
64
102
|
description,
|
|
65
103
|
status: "running",
|
|
66
104
|
startedAt: Date.now(),
|
|
67
|
-
...(
|
|
105
|
+
...(launchCwd ? { launchCwd, cwd: launchCwd } : {}),
|
|
106
|
+
...(effectiveWorkspaceCwd ? { effectiveWorkspaceCwd } : {}),
|
|
107
|
+
...(options?.workspaceRoot ? { workspaceRoot: normalizeCwdPath(options.workspaceRoot) } : {}),
|
|
108
|
+
...(workspaceIdentity
|
|
109
|
+
? {
|
|
110
|
+
effectiveWorkspaceRoot: workspaceIdentity.root,
|
|
111
|
+
effectiveWorkspaceKind: workspaceIdentity.kind,
|
|
112
|
+
...(workspaceIdentity.gitCommonDir
|
|
113
|
+
? { gitCommonDir: workspaceIdentity.gitCommonDir }
|
|
114
|
+
: {}),
|
|
115
|
+
}
|
|
116
|
+
: {}),
|
|
68
117
|
...(options?.promptSummary ? { promptSummary: options.promptSummary } : {}),
|
|
69
118
|
...(options?.cli ? { cli: options.cli } : {}),
|
|
119
|
+
...(options?.isolation ? { isolation: options.isolation } : {}),
|
|
120
|
+
...(options?.worktreePath ? { worktreePath: normalizeCwdPath(options.worktreePath) } : {}),
|
|
121
|
+
...(options?.worktreeBranch ? { worktreeBranch: options.worktreeBranch } : {}),
|
|
122
|
+
...(options?.worktreeBaseRef ? { worktreeBaseRef: options.worktreeBaseRef } : {}),
|
|
123
|
+
...(options?.worktreeCleanup ? { worktreeCleanup: options.worktreeCleanup } : {}),
|
|
124
|
+
...(options?.worktreeBranchPrefix
|
|
125
|
+
? { worktreeBranchPrefix: options.worktreeBranchPrefix }
|
|
126
|
+
: {}),
|
|
127
|
+
...(options?.worktreePath ? { worktreeLifecycle: "running" } : {}),
|
|
70
128
|
...(options?.originClientMessageId
|
|
71
129
|
? { originClientMessageId: options.originClientMessageId }
|
|
72
130
|
: {}),
|
|
@@ -90,6 +148,9 @@ class BackgroundJobRegistry {
|
|
|
90
148
|
entry.ccSessionId = outcome.ccSessionId;
|
|
91
149
|
if (outcome?.changedFiles !== undefined)
|
|
92
150
|
entry.changedFiles = outcome.changedFiles;
|
|
151
|
+
if (outcome?.worktreeLifecycle !== undefined) {
|
|
152
|
+
entry.worktreeLifecycle = outcome.worktreeLifecycle;
|
|
153
|
+
}
|
|
93
154
|
this.evictTerminalOverCap(entry.sessionId);
|
|
94
155
|
this.notify();
|
|
95
156
|
}
|
|
@@ -106,6 +167,17 @@ class BackgroundJobRegistry {
|
|
|
106
167
|
if (artifacts.changedFiles !== undefined)
|
|
107
168
|
entry.changedFiles = artifacts.changedFiles;
|
|
108
169
|
}
|
|
170
|
+
/** Update retained DriveAgent lifecycle state after an explicit cleanup. */
|
|
171
|
+
recordWorktreeLifecycle(jobId, lifecycle, note) {
|
|
172
|
+
const entry = this.jobs.get(jobId);
|
|
173
|
+
if (!entry || !entry.worktreePath)
|
|
174
|
+
return false;
|
|
175
|
+
entry.worktreeLifecycle = lifecycle;
|
|
176
|
+
if (note)
|
|
177
|
+
entry.finalText = `${entry.finalText ? `${entry.finalText}\n\n` : ""}[worktree lifecycle] ${note}`;
|
|
178
|
+
this.notify();
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
109
181
|
async cancel(jobId, outcome) {
|
|
110
182
|
const entry = this.jobs.get(jobId);
|
|
111
183
|
if (!entry)
|
|
@@ -118,20 +190,22 @@ class BackgroundJobRegistry {
|
|
|
118
190
|
// process as active until the abort hook confirms exit.
|
|
119
191
|
entry.status = "cancelling";
|
|
120
192
|
this.notify();
|
|
121
|
-
|
|
122
|
-
await waitForAbort(entry.abort);
|
|
193
|
+
const abortOutcome = entry.abort ? await waitForAbort(entry.abort) : undefined;
|
|
123
194
|
// Session teardown/reset may have removed the entry while termination was
|
|
124
195
|
// in flight. Do not resurrect or notify for a closed session.
|
|
125
196
|
if (this.jobs.get(jobId) !== entry || entry.status !== "cancelling")
|
|
126
197
|
return false;
|
|
127
|
-
entry.status = "cancelled";
|
|
198
|
+
entry.status = abortOutcome?.status ?? "cancelled";
|
|
128
199
|
entry.finishedAt = Date.now();
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
200
|
+
const finalText = abortOutcome?.finalText ?? outcome?.finalText;
|
|
201
|
+
const ccSessionId = abortOutcome?.ccSessionId ?? outcome?.ccSessionId;
|
|
202
|
+
const changedFiles = abortOutcome?.changedFiles ?? outcome?.changedFiles;
|
|
203
|
+
if (finalText !== undefined)
|
|
204
|
+
entry.finalText = finalText;
|
|
205
|
+
if (ccSessionId !== undefined)
|
|
206
|
+
entry.ccSessionId = ccSessionId;
|
|
207
|
+
if (changedFiles !== undefined)
|
|
208
|
+
entry.changedFiles = changedFiles;
|
|
135
209
|
this.evictTerminalOverCap(entry.sessionId);
|
|
136
210
|
this.notify();
|
|
137
211
|
return true;
|
|
@@ -148,10 +222,32 @@ class BackgroundJobRegistry {
|
|
|
148
222
|
listRunningForSession(sessionId) {
|
|
149
223
|
return [...this.jobs.values()].filter((e) => e.sessionId === sessionId && isActiveStatus(e.status));
|
|
150
224
|
}
|
|
151
|
-
/** Running jobs, across all sessions,
|
|
225
|
+
/** Running jobs, across all sessions, in the same effective workspace.
|
|
226
|
+
*
|
|
227
|
+
* Git paths compare by canonical worktree root, so sibling launch directories
|
|
228
|
+
* collide while distinct linked worktrees do not. A declared
|
|
229
|
+
* effectiveWorkspaceCwd takes precedence over launchCwd. If either side could
|
|
230
|
+
* not be resolved through git, exact launch-cwd matching remains the
|
|
231
|
+
* conservative back-compatible fallback. */
|
|
152
232
|
listRunningByCwd(cwd) {
|
|
233
|
+
return this.listByWorkspaceCwd(cwd).filter((e) => isActiveStatus(e.status));
|
|
234
|
+
}
|
|
235
|
+
/** Running and retained terminal jobs in the effective workspace containing
|
|
236
|
+
* cwd. Used by DriveAgentJobs' cross-session cwd filter. */
|
|
237
|
+
listByWorkspaceCwd(cwd) {
|
|
153
238
|
const normalized = normalizeCwdPath(cwd);
|
|
154
|
-
|
|
239
|
+
const queryIdentity = resolveEffectiveWorkspaceIdentity(normalized);
|
|
240
|
+
return [...this.jobs.values()].filter((e) => {
|
|
241
|
+
if (e.effectiveWorkspaceRoot === queryIdentity.root)
|
|
242
|
+
return true;
|
|
243
|
+
if (e.effectiveWorkspaceKind === "git-worktree" && queryIdentity.kind === "git-worktree") {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
// Mixed git-resolution states compare the declared effective cwd
|
|
247
|
+
// snapshot. Only entries created before that field existed fall back to
|
|
248
|
+
// the legacy launch cwd alias.
|
|
249
|
+
return (e.effectiveWorkspaceCwd ?? e.launchCwd ?? e.cwd) === normalized;
|
|
250
|
+
});
|
|
155
251
|
}
|
|
156
252
|
/** All jobs (running + retained terminal) for `sessionId`. Feeds the panel. */
|
|
157
253
|
listForSession(sessionId) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AsyncAgentStatus } from "./agent-registry.js";
|
|
2
|
-
import { type BackgroundJobStatus } from "./background-jobs.js";
|
|
2
|
+
import { type BackgroundJobKind, type BackgroundJobStatus, type ExternalCliKind } from "./background-jobs.js";
|
|
3
3
|
import { type BgShell } from "../../runtime/background-shell.js";
|
|
4
4
|
export type BackgroundWorkKind = "subagent" | "job" | "shell";
|
|
5
5
|
export interface BackgroundWorkItem {
|
|
@@ -51,6 +51,17 @@ export type BackgroundWorkEntry = WithSource<{
|
|
|
51
51
|
finalText?: string;
|
|
52
52
|
/** Files an external agent (DriveAgent) changed, parsed from its transcript. */
|
|
53
53
|
changedFiles?: string[];
|
|
54
|
+
/** Machine-readable job kind and external-session linkage for DriveAgent. */
|
|
55
|
+
jobKind?: BackgroundJobKind;
|
|
56
|
+
externalSessionId?: string;
|
|
57
|
+
cli?: ExternalCliKind;
|
|
58
|
+
cwd?: string;
|
|
59
|
+
isolation?: "current" | "worktree" | "none";
|
|
60
|
+
worktreePath?: string;
|
|
61
|
+
worktreeBranch?: string;
|
|
62
|
+
worktreeBaseRef?: string;
|
|
63
|
+
worktreeCleanup?: "auto" | "keep" | "detach" | "discard";
|
|
64
|
+
worktreeLifecycle?: "running" | "kept" | "detached" | "discarded" | "cleanup-failed";
|
|
54
65
|
}>;
|
|
55
66
|
/**
|
|
56
67
|
* Every background-work item spawned by `sessionId`, with per-kind detail, for
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import { readFileSync, statSync } from "node:fs";
|
|
15
15
|
import { join } from "node:path";
|
|
16
16
|
import { asyncAgentRegistry } from "./agent-registry.js";
|
|
17
|
-
import { backgroundJobRegistry } from "./background-jobs.js";
|
|
17
|
+
import { backgroundJobRegistry, } from "./background-jobs.js";
|
|
18
18
|
import { backgroundShellManager } from "../../runtime/background-shell.js";
|
|
19
19
|
import { codeShellHome } from "../../session/session-manager.js";
|
|
20
20
|
/** List every still-running background work item spawned by `sessionId`. */
|
|
@@ -116,6 +116,7 @@ export function listBackgroundWorkForUI(sessionId, opts = {}) {
|
|
|
116
116
|
? backgroundJobRegistry.list()
|
|
117
117
|
: backgroundJobRegistry.listForSession(sessionId);
|
|
118
118
|
for (const j of jobs) {
|
|
119
|
+
const launchCwd = j.launchCwd ?? j.cwd;
|
|
119
120
|
entries.push({
|
|
120
121
|
kind: "job",
|
|
121
122
|
jobId: j.jobId,
|
|
@@ -125,6 +126,16 @@ export function listBackgroundWorkForUI(sessionId, opts = {}) {
|
|
|
125
126
|
...(j.finishedAt != null ? { finishedAt: j.finishedAt } : {}),
|
|
126
127
|
...(j.finalText != null ? { finalText: j.finalText } : {}),
|
|
127
128
|
...(j.changedFiles && j.changedFiles.length ? { changedFiles: j.changedFiles } : {}),
|
|
129
|
+
...(j.kind ? { jobKind: j.kind } : {}),
|
|
130
|
+
...(j.ccSessionId ? { externalSessionId: j.ccSessionId } : {}),
|
|
131
|
+
...(j.cli === "claude" || j.cli === "codex" ? { cli: j.cli } : {}),
|
|
132
|
+
...(launchCwd ? { cwd: launchCwd } : {}),
|
|
133
|
+
...(j.isolation ? { isolation: j.isolation } : {}),
|
|
134
|
+
...(j.worktreePath ? { worktreePath: j.worktreePath } : {}),
|
|
135
|
+
...(j.worktreeBranch ? { worktreeBranch: j.worktreeBranch } : {}),
|
|
136
|
+
...(j.worktreeBaseRef ? { worktreeBaseRef: j.worktreeBaseRef } : {}),
|
|
137
|
+
...(j.worktreeCleanup ? { worktreeCleanup: j.worktreeCleanup } : {}),
|
|
138
|
+
...(j.worktreeLifecycle ? { worktreeLifecycle: j.worktreeLifecycle } : {}),
|
|
128
139
|
sourceSession: sourceSession(sessionId, j.sessionId),
|
|
129
140
|
});
|
|
130
141
|
}
|
|
@@ -16,9 +16,7 @@
|
|
|
16
16
|
* Killed by signal, the truncation message, sandbox denial hints).
|
|
17
17
|
*/
|
|
18
18
|
import type { ToolContext } from "../context.js";
|
|
19
|
-
import type { ToolDefinition
|
|
19
|
+
import type { ToolDefinition } from "../../types.js";
|
|
20
|
+
import type { ToolExecutionResult } from "./index.js";
|
|
20
21
|
export declare const bashToolDef: ToolDefinition;
|
|
21
|
-
export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string |
|
|
22
|
-
result: string;
|
|
23
|
-
sandbox: ToolResult["sandbox"];
|
|
24
|
-
}>;
|
|
22
|
+
export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | ToolExecutionResult>;
|
|
@@ -29,7 +29,7 @@ function sandboxMark(backend) {
|
|
|
29
29
|
export const bashToolDef = {
|
|
30
30
|
name: "Bash",
|
|
31
31
|
description: "Execute a shell command and return its output. " +
|
|
32
|
-
"Use for ordinary shell commands, system operations,
|
|
32
|
+
"Use for ordinary shell commands, system operations, version-control commands, " +
|
|
33
33
|
"package-manager commands, running tests, installing packages, etc. Prefer Bash " +
|
|
34
34
|
"over PowerShell unless the task needs PowerShell-specific syntax or APIs.",
|
|
35
35
|
inputSchema: {
|
|
@@ -82,7 +82,8 @@ export async function bashTool(args, ctx) {
|
|
|
82
82
|
const sandbox = sandboxMark(backend);
|
|
83
83
|
// Tag every textual return below with the sandbox mark so the UI badge
|
|
84
84
|
// shows up whether the command succeeded, failed, timed out, or aborted.
|
|
85
|
-
const mark = (result) => ({ result, sandbox });
|
|
85
|
+
const mark = (result) => ({ ok: true, result, sandbox });
|
|
86
|
+
const fail = (error, details = {}) => ({ ok: false, error, sandbox, ...details });
|
|
86
87
|
// Project localEnvironment.env (ctx.shellEnv) layers on top of either the
|
|
87
88
|
// full passthrough (off) or the hardened allowlist (sandboxed) — see
|
|
88
89
|
// mergeShellEnv. Background mode merges the same way inside the manager.
|
|
@@ -93,7 +94,11 @@ export async function bashTool(args, ctx) {
|
|
|
93
94
|
// blocked, and Engine.run's wait-for-background loop never waits on it
|
|
94
95
|
// (§难点5: that loop only looks at asyncAgentRegistry).
|
|
95
96
|
if (args.run_in_background === true) {
|
|
96
|
-
|
|
97
|
+
const backgroundResult = runInBackground(command, ctx);
|
|
98
|
+
if (backgroundResult.startsWith("Error:"))
|
|
99
|
+
return fail(backgroundResult);
|
|
100
|
+
ctx?.runYield?.request("background_notification");
|
|
101
|
+
return mark(backgroundResult);
|
|
97
102
|
}
|
|
98
103
|
// A6: lifecycle (spawn, kill cascade, IO drain, byte cap, abort/timeout)
|
|
99
104
|
// is centralized in safeSpawnShell. We still handle Bash's user-facing
|
|
@@ -112,13 +117,13 @@ export async function bashTool(args, ctx) {
|
|
|
112
117
|
signal: ctx?.signal,
|
|
113
118
|
});
|
|
114
119
|
if (result.aborted) {
|
|
115
|
-
return
|
|
120
|
+
return fail(wasAbortedBeforeStart ? "Bash aborted before starting." : "Bash aborted by signal.");
|
|
116
121
|
}
|
|
117
122
|
if (result.timedOut) {
|
|
118
|
-
return
|
|
123
|
+
return fail(`Command timed out after ${timeout}ms`);
|
|
119
124
|
}
|
|
120
125
|
if (result.spawnFailed) {
|
|
121
|
-
return
|
|
126
|
+
return fail(`Failed to spawn command: ${result.error ?? "unknown error"}`);
|
|
122
127
|
}
|
|
123
128
|
let body = "";
|
|
124
129
|
if (result.stdout)
|
|
@@ -150,6 +155,9 @@ export async function bashTool(args, ctx) {
|
|
|
150
155
|
const hint = backend.hintForBlockedOutput?.(result.stderr);
|
|
151
156
|
if (hint)
|
|
152
157
|
output += hint;
|
|
158
|
+
if ((code !== 0 && code !== null) || (code === null && sig)) {
|
|
159
|
+
return fail(output, { exitCode: code, signal: sig, stderr: result.stderr });
|
|
160
|
+
}
|
|
153
161
|
return mark(output);
|
|
154
162
|
}
|
|
155
163
|
/**
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Browser automation tools — drive
|
|
3
|
-
*
|
|
2
|
+
* Browser automation tools — drive a host-owned Browser Runtime through the
|
|
3
|
+
* BrowserBridge compatibility port. The default runtime owns a background tab
|
|
4
|
+
* in the in-app profile; user-opened tabs require an explicit claim. Collapsed
|
|
5
|
+
* into THREE semantic tools
|
|
6
|
+
* (was 9 flat tools)
|
|
4
7
|
* to keep the LLM's tool list lean:
|
|
5
8
|
*
|
|
6
9
|
* browser_observe — observe the page: snapshot (a11y elements) / read (text) /
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
* snapshot returns interactive elements as a compact ref-tagged list (a11y tree,
|
|
15
18
|
* token-economical, no screenshots); act references elements by the ref the
|
|
16
19
|
* latest snapshot assigned. All tools degrade with a clear error when no browser
|
|
17
|
-
* is wired. isConcurrencySafe:false —
|
|
20
|
+
* runtime is wired. isConcurrencySafe:false — one runtime tab is driven serially.
|
|
18
21
|
*
|
|
19
22
|
* Permission: browser_act is permissionDefault "allow"; the sensitive actions
|
|
20
23
|
* (click/type/select) are escalated to "ask" by a preset PermissionRule keyed on
|
|
@@ -22,9 +25,9 @@
|
|
|
22
25
|
*/
|
|
23
26
|
import type { ToolDefinition } from "../../types.js";
|
|
24
27
|
import type { ToolContext } from "../context.js";
|
|
25
|
-
import type {
|
|
28
|
+
import type { BuiltinToolReturn } from "./index.js";
|
|
26
29
|
export declare const browserObserveToolDef: ToolDefinition;
|
|
27
|
-
export declare function browserObserveTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<
|
|
30
|
+
export declare function browserObserveTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<BuiltinToolReturn>;
|
|
28
31
|
export declare const browserActToolDef: ToolDefinition;
|
|
29
32
|
export declare function browserActTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
30
33
|
export declare const browserNavigateToolDef: ToolDefinition;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Browser automation tools — drive
|
|
3
|
-
*
|
|
2
|
+
* Browser automation tools — drive a host-owned Browser Runtime through the
|
|
3
|
+
* BrowserBridge compatibility port. The default runtime owns a background tab
|
|
4
|
+
* in the in-app profile; user-opened tabs require an explicit claim. Collapsed
|
|
5
|
+
* into THREE semantic tools
|
|
6
|
+
* (was 9 flat tools)
|
|
4
7
|
* to keep the LLM's tool list lean:
|
|
5
8
|
*
|
|
6
9
|
* browser_observe — observe the page: snapshot (a11y elements) / read (text) /
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
* snapshot returns interactive elements as a compact ref-tagged list (a11y tree,
|
|
15
18
|
* token-economical, no screenshots); act references elements by the ref the
|
|
16
19
|
* latest snapshot assigned. All tools degrade with a clear error when no browser
|
|
17
|
-
* is wired. isConcurrencySafe:false —
|
|
20
|
+
* runtime is wired. isConcurrencySafe:false — one runtime tab is driven serially.
|
|
18
21
|
*
|
|
19
22
|
* Permission: browser_act is permissionDefault "allow"; the sensitive actions
|
|
20
23
|
* (click/type/select) are escalated to "ask" by a preset PermissionRule keyed on
|
|
@@ -22,8 +25,7 @@
|
|
|
22
25
|
*/
|
|
23
26
|
import { renderElementList } from "../browser-bridge.js";
|
|
24
27
|
import { capabilitiesFor } from "../../llm/capabilities/index.js";
|
|
25
|
-
const NO_BROWSER = "Error: browser automation is not available
|
|
26
|
-
"It requires the desktop app with an open browser panel.";
|
|
28
|
+
const NO_BROWSER = "Error: browser automation runtime is not available in this host session.";
|
|
27
29
|
function bridge(ctx) {
|
|
28
30
|
return ctx?.browser;
|
|
29
31
|
}
|
|
@@ -33,13 +35,15 @@ const STALE = (ref) => `Error: ref ${ref} is no longer valid (page changed). Re-
|
|
|
33
35
|
// ════════════════════════════════════════════════════════════════════════════
|
|
34
36
|
export const browserObserveToolDef = {
|
|
35
37
|
name: "browser_observe",
|
|
36
|
-
description: "Observe the
|
|
38
|
+
description: "Observe the task-owned page in the CodeShell Browser Runtime. It shares the " +
|
|
39
|
+
"in-app browser profile but never controls a user-opened tab without an " +
|
|
40
|
+
"explicit claim. Modes:\n" +
|
|
37
41
|
"- snapshot (default): URL/title + a compact list of interactive elements, each " +
|
|
38
42
|
"tagged [ref=eN] for browser_act. ALWAYS snapshot before acting, and re-snapshot " +
|
|
39
43
|
"after navigation/page changes (refs are only valid for the latest snapshot). " +
|
|
40
44
|
"Passwords show as [sensitive] with no value.\n" +
|
|
41
|
-
"- read: the page's
|
|
42
|
-
"
|
|
45
|
+
"- read: a cursor-paged chunk of the page's normalized readable text. Continue " +
|
|
46
|
+
"with the returned nextCursor until complete; scrolling is only for lazy/infinite loading.\n" +
|
|
43
47
|
"- extract: the real URLs on the page (hyperlink hrefs, image srcs, video srcs) " +
|
|
44
48
|
"that snapshot omits — each image/video is tagged [ref=imgN/vidN] for image mode.\n" +
|
|
45
49
|
"- image: SEE the actual pixels of page images (refs from extract, e.g. img3) — for " +
|
|
@@ -60,7 +64,18 @@ export const browserObserveToolDef = {
|
|
|
60
64
|
items: { type: "string" },
|
|
61
65
|
description: "image mode: image refs (imgN/vidN from extract) to see, one or more",
|
|
62
66
|
},
|
|
63
|
-
ref: {
|
|
67
|
+
ref: {
|
|
68
|
+
type: "string",
|
|
69
|
+
description: "vision mode (optional): screenshot just this element's region",
|
|
70
|
+
},
|
|
71
|
+
cursor: {
|
|
72
|
+
type: "string",
|
|
73
|
+
description: "read mode: opaque nextCursor returned by the previous read chunk",
|
|
74
|
+
},
|
|
75
|
+
max_chars: {
|
|
76
|
+
type: "number",
|
|
77
|
+
description: "read mode: requested chunk size (clamped by the runtime)",
|
|
78
|
+
},
|
|
64
79
|
},
|
|
65
80
|
},
|
|
66
81
|
};
|
|
@@ -86,17 +101,32 @@ export async function browserObserveTool(args, ctx) {
|
|
|
86
101
|
switch (mode) {
|
|
87
102
|
case "snapshot": {
|
|
88
103
|
const snap = await b.snapshot();
|
|
104
|
+
if (snap.detail)
|
|
105
|
+
return `Error: ${snap.detail}`;
|
|
89
106
|
const header = `URL: ${snap.url}${snap.title ? `\nTitle: ${snap.title}` : ""}`;
|
|
90
107
|
const human = snap.needsHuman
|
|
91
|
-
? `\n\n⚠ ${snap.needsHuman} — please complete it in the browser
|
|
108
|
+
? `\n\n⚠ ${snap.needsHuman} — please complete it in the browser window, then continue.`
|
|
92
109
|
: "";
|
|
93
110
|
return `${header}\n\n${renderElementList(snap.elements)}${human}`;
|
|
94
111
|
}
|
|
95
112
|
case "read": {
|
|
96
|
-
const c = await b.readContent(
|
|
113
|
+
const c = await b.readContent({
|
|
114
|
+
cursor: typeof args.cursor === "string" ? args.cursor : undefined,
|
|
115
|
+
maxChars: typeof args.max_chars === "number" ? args.max_chars : undefined,
|
|
116
|
+
});
|
|
97
117
|
if (!c.ok)
|
|
98
118
|
return `Error: ${c.detail ?? "could not read page content"}`;
|
|
99
|
-
const
|
|
119
|
+
const progress = c.done
|
|
120
|
+
? "\nRead: complete"
|
|
121
|
+
: c.nextCursor
|
|
122
|
+
? `\nRead: more available\nnextCursor: ${c.nextCursor}`
|
|
123
|
+
: c.truncated
|
|
124
|
+
? "\nRead: truncated"
|
|
125
|
+
: "";
|
|
126
|
+
const scroll = c.scroll
|
|
127
|
+
? `\nScroll: ${Math.round(c.scroll.y)}/${Math.round(c.scroll.maxY)}${c.scroll.atEnd ? " (end)" : ""}`
|
|
128
|
+
: "";
|
|
129
|
+
const head = `URL: ${c.url}${c.title ? `\nTitle: ${c.title}` : ""}${progress}${scroll}`;
|
|
100
130
|
return `${head}\n\n${c.text || "(no readable text)"}`;
|
|
101
131
|
}
|
|
102
132
|
case "extract": {
|
|
@@ -109,7 +139,9 @@ export async function browserObserveTool(args, ctx) {
|
|
|
109
139
|
: "Links: (none)";
|
|
110
140
|
const images = r.images.length > 0
|
|
111
141
|
? "Images (use the ref with browser_observe(image) to SEE one):\n" +
|
|
112
|
-
r.images
|
|
142
|
+
r.images
|
|
143
|
+
.map((im) => `- [${im.ref ?? "?"}] ${im.alt ? `${im.alt} → ` : ""}${im.url}`)
|
|
144
|
+
.join("\n")
|
|
113
145
|
: "Images: (none)";
|
|
114
146
|
const videos = r.videos && r.videos.length > 0
|
|
115
147
|
? "Videos:\n" + r.videos.map((v) => `- ${v.url}`).join("\n")
|
|
@@ -139,7 +171,10 @@ export async function browserObserveTool(args, ctx) {
|
|
|
139
171
|
}
|
|
140
172
|
if (blocks.length === 0)
|
|
141
173
|
return `Error: no images loaded — ${notes.join("; ")}`;
|
|
142
|
-
return {
|
|
174
|
+
return {
|
|
175
|
+
contentBlocks: blocks,
|
|
176
|
+
result: `[loaded ${blocks.length} image(s): ${notes.join("; ")}]`,
|
|
177
|
+
};
|
|
143
178
|
}
|
|
144
179
|
case "vision": {
|
|
145
180
|
if (!modelSupportsVision(ctx)) {
|
|
@@ -161,7 +196,9 @@ export async function browserObserveTool(args, ctx) {
|
|
|
161
196
|
// ════════════════════════════════════════════════════════════════════════════
|
|
162
197
|
export const browserActToolDef = {
|
|
163
198
|
name: "browser_act",
|
|
164
|
-
description: "Act on the
|
|
199
|
+
description: "Act on the task-owned tab in the CodeShell Browser Runtime. By default it " +
|
|
200
|
+
"shares the in-app browser profile but never controls a user-opened tab " +
|
|
201
|
+
"without an explicit claim. Use refs (eN) from the latest " +
|
|
165
202
|
"browser_observe(snapshot). Actions:\n" +
|
|
166
203
|
"- click {ref}: click an element.\n" +
|
|
167
204
|
"- type {ref, text}: type text into an input (focuses first).\n" +
|
|
@@ -181,7 +218,17 @@ export const browserActToolDef = {
|
|
|
181
218
|
properties: {
|
|
182
219
|
action: {
|
|
183
220
|
type: "string",
|
|
184
|
-
enum: [
|
|
221
|
+
enum: [
|
|
222
|
+
"click",
|
|
223
|
+
"type",
|
|
224
|
+
"select",
|
|
225
|
+
"press_key",
|
|
226
|
+
"hover",
|
|
227
|
+
"scroll",
|
|
228
|
+
"wait",
|
|
229
|
+
"list_tabs",
|
|
230
|
+
"switch_tab",
|
|
231
|
+
],
|
|
185
232
|
description: "The interaction to perform",
|
|
186
233
|
},
|
|
187
234
|
ref: { type: "string", description: "Element ref (eN) — click/type/select/hover/press_key" },
|
|
@@ -191,7 +238,10 @@ export const browserActToolDef = {
|
|
|
191
238
|
direction: { type: "string", enum: ["up", "down"], description: "Scroll direction — scroll" },
|
|
192
239
|
amount: { type: "number", description: "Pixels to scroll (default one viewport) — scroll" },
|
|
193
240
|
timeout_ms: { type: "number", description: "Max wait in ms (default 10000) — wait" },
|
|
194
|
-
tabId: {
|
|
241
|
+
tabId: {
|
|
242
|
+
type: "string",
|
|
243
|
+
description: "Target tab — required for switch_tab; optional on others (switches first)",
|
|
244
|
+
},
|
|
195
245
|
},
|
|
196
246
|
required: ["action"],
|
|
197
247
|
},
|
|
@@ -215,13 +265,17 @@ export async function browserActTool(args, ctx) {
|
|
|
215
265
|
if (tabs.length === 0)
|
|
216
266
|
return "(no open browser tabs)";
|
|
217
267
|
return ("Open tabs:\n" +
|
|
218
|
-
tabs
|
|
268
|
+
tabs
|
|
269
|
+
.map((t) => `- [${t.tabId}]${t.active ? " (active)" : ""} ${t.title || "(untitled)"} — ${t.url || "(blank)"}`)
|
|
270
|
+
.join("\n"));
|
|
219
271
|
}
|
|
220
272
|
case "switch_tab": {
|
|
221
273
|
if (!tabId)
|
|
222
274
|
return "Error: tabId is required for switch_tab (see list_tabs)";
|
|
223
275
|
const r = await b.switchTab(tabId);
|
|
224
|
-
return r.ok
|
|
276
|
+
return r.ok
|
|
277
|
+
? `Switched to tab ${tabId} — re-observe to see it`
|
|
278
|
+
: `Error: ${r.detail ?? "switch failed"}`;
|
|
225
279
|
}
|
|
226
280
|
case "click": {
|
|
227
281
|
if (!ref)
|
|
@@ -273,11 +327,20 @@ export async function browserActTool(args, ctx) {
|
|
|
273
327
|
if (dir !== "up" && dir !== "down")
|
|
274
328
|
return "Error: direction must be 'up' or 'down'";
|
|
275
329
|
const r = await b.scroll(dir, args.amount);
|
|
276
|
-
|
|
330
|
+
if (!r.ok) {
|
|
331
|
+
const code = r.code ? ` [${r.code}]` : "";
|
|
332
|
+
return `Error${code}: ${r.detail ?? "scroll failed"}`;
|
|
333
|
+
}
|
|
334
|
+
const state = r.scroll
|
|
335
|
+
? ` — position ${Math.round(r.scroll.y)}/${Math.round(r.scroll.maxY)}${r.scroll.atEnd ? " (end)" : ""}`
|
|
336
|
+
: "";
|
|
337
|
+
return `Scrolled ${dir}${state}`;
|
|
277
338
|
}
|
|
278
339
|
case "wait": {
|
|
279
340
|
const r = await b.waitForLoad(args.timeout_ms);
|
|
280
|
-
return r.ok
|
|
341
|
+
return r.ok
|
|
342
|
+
? `Page ready${r.detail ? ` (${r.detail})` : ""}`
|
|
343
|
+
: `Error: ${r.detail ?? "wait failed"}`;
|
|
281
344
|
}
|
|
282
345
|
default:
|
|
283
346
|
return `Error: unknown action "${action}"`;
|
|
@@ -288,8 +351,11 @@ export async function browserActTool(args, ctx) {
|
|
|
288
351
|
// ════════════════════════════════════════════════════════════════════════════
|
|
289
352
|
export const browserNavigateToolDef = {
|
|
290
353
|
name: "browser_navigate",
|
|
291
|
-
description: "Navigate the browser
|
|
292
|
-
"
|
|
354
|
+
description: "Navigate the CodeShell browser runtime to a URL. It does not control the " +
|
|
355
|
+
"user-facing built-in browser unless the user explicitly grants a future handoff. " +
|
|
356
|
+
"Navigation stays in the background; the runtime's own window appears only when login or a " +
|
|
357
|
+
"high-consequence action needs human control. Then call browser_act(wait) + " +
|
|
358
|
+
"browser_observe to inspect the page.",
|
|
293
359
|
inputSchema: {
|
|
294
360
|
type: "object",
|
|
295
361
|
properties: { url: { type: "string", description: "Absolute URL to open" } },
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import type { ToolDefinition } from "../../types.js";
|
|
2
|
+
/** Notifies process hosts after the user catalog has been persisted. Desktop
|
|
3
|
+
* uses this to refresh mounted settings/connection views without waiting for
|
|
4
|
+
* a parent turn_complete event (which may be absent for child/yielded runs). */
|
|
5
|
+
type ModelCatalogChangedSink = () => void;
|
|
6
|
+
export declare function setModelCatalogChangedSink(sink: ModelCatalogChangedSink | null): void;
|
|
2
7
|
export declare const editModelCatalogToolDef: ToolDefinition;
|
|
3
8
|
export declare function editModelCatalogTool(args: Record<string, unknown>): Promise<string>;
|
|
9
|
+
export {};
|