@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isAbortError } from "../llm/client-base.js";
|
|
2
|
+
import { isSameGoalInstance } from "../goal/lifecycle.js";
|
|
2
3
|
/**
|
|
3
4
|
* One ChatSession per UI chat tab. Owns a single Engine, an AbortController
|
|
4
5
|
* for the active turn, and a FIFO queue so a fast second send waits for the
|
|
@@ -8,16 +9,16 @@ export class ChatSession {
|
|
|
8
9
|
id;
|
|
9
10
|
engine;
|
|
10
11
|
/**
|
|
11
|
-
* Per-session approval callbacks indexed by
|
|
12
|
+
* Per-session approval callbacks and resolver-free metadata indexed by requestId.
|
|
12
13
|
* `readonly` guards the Map reference (preventing reassignment); the
|
|
13
14
|
* contents are mutated by `.set()` / `.delete()` as approvals come and go.
|
|
14
|
-
*
|
|
15
|
-
* request and clean them up on response.
|
|
15
|
+
* The resolver stays process-local; only metadata is eligible for Pet snapshots.
|
|
16
16
|
*/
|
|
17
17
|
pendingApprovals = new Map();
|
|
18
18
|
lastActivityAt = Date.now();
|
|
19
19
|
queue = [];
|
|
20
20
|
active = null;
|
|
21
|
+
exclusiveOperation = false;
|
|
21
22
|
controller = null;
|
|
22
23
|
defaultOnStream;
|
|
23
24
|
/**
|
|
@@ -44,6 +45,8 @@ export class ChatSession {
|
|
|
44
45
|
* (the user is engaging again) so normal wakeups resume working afterward.
|
|
45
46
|
*/
|
|
46
47
|
cancelledSinceLastTurn = false;
|
|
48
|
+
settlePromise = Promise.resolve();
|
|
49
|
+
resolveSettled = null;
|
|
47
50
|
constructor(opts) {
|
|
48
51
|
this.id = opts.id;
|
|
49
52
|
this.engine = opts.engine;
|
|
@@ -60,6 +63,36 @@ export class ChatSession {
|
|
|
60
63
|
this.pump();
|
|
61
64
|
});
|
|
62
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Run session maintenance (for example context-package summarization) under
|
|
68
|
+
* the same per-session mutex as turns. Existing activity fails fast; turns
|
|
69
|
+
* arriving after the lock is acquired remain queued until maintenance has
|
|
70
|
+
* persisted its final usage/state update.
|
|
71
|
+
*/
|
|
72
|
+
async runExclusive(operation) {
|
|
73
|
+
if (this.active || this.exclusiveOperation || this.queue.length > 0) {
|
|
74
|
+
throw new Error("source session is still producing or has queued turns");
|
|
75
|
+
}
|
|
76
|
+
this.lastActivityAt = Date.now();
|
|
77
|
+
this.exclusiveOperation = true;
|
|
78
|
+
this.settlePromise = new Promise((resolve) => {
|
|
79
|
+
this.resolveSettled = resolve;
|
|
80
|
+
});
|
|
81
|
+
this.controller = new AbortController();
|
|
82
|
+
try {
|
|
83
|
+
return await operation(this.controller.signal);
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
this.lastActivityAt = Date.now();
|
|
87
|
+
this.resolveSettled?.();
|
|
88
|
+
this.resolveSettled = null;
|
|
89
|
+
this.controller = null;
|
|
90
|
+
this.exclusiveOperation = false;
|
|
91
|
+
this.applyPendingModelSwitchAtRunBoundary();
|
|
92
|
+
if (this.queue.length > 0)
|
|
93
|
+
void this.pump();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
63
96
|
/**
|
|
64
97
|
* True when the user hit Stop and hasn't started a new turn since. The server
|
|
65
98
|
* consults this before auto-waking an idle session on a background-job
|
|
@@ -92,7 +125,11 @@ export class ChatSession {
|
|
|
92
125
|
}
|
|
93
126
|
}
|
|
94
127
|
isBusy() {
|
|
95
|
-
return this.active !== null;
|
|
128
|
+
return this.active !== null || this.exclusiveOperation;
|
|
129
|
+
}
|
|
130
|
+
/** Resolves after the active engine.run() has completed its pump finally. */
|
|
131
|
+
get settled() {
|
|
132
|
+
return this.settlePromise;
|
|
96
133
|
}
|
|
97
134
|
/**
|
|
98
135
|
* Extend the in-flight goal run's turn/budget ceilings (TODO 3.1). Delegates
|
|
@@ -104,7 +141,7 @@ export class ChatSession {
|
|
|
104
141
|
return this.engine.extendGoalRun(opts);
|
|
105
142
|
}
|
|
106
143
|
/**
|
|
107
|
-
* Read this session's persisted active goal (state.
|
|
144
|
+
* Read this session's persisted active goal (state.goalLifecycle), or undefined
|
|
108
145
|
* when none. Cheap — reads only state.json. The host calls this on session
|
|
109
146
|
* load to re-surface the goal block + Cancel button after a reload.
|
|
110
147
|
*/
|
|
@@ -115,8 +152,56 @@ export class ChatSession {
|
|
|
115
152
|
* Clear this session's persisted active goal (CC /goal clear). Works idle or
|
|
116
153
|
* mid-run. Returns true if a goal was actually cleared.
|
|
117
154
|
*/
|
|
118
|
-
clearGoal() {
|
|
119
|
-
return this.engine.clearGoal(this.id);
|
|
155
|
+
clearGoal(expected) {
|
|
156
|
+
return this.engine.clearGoal(this.id, expected);
|
|
157
|
+
}
|
|
158
|
+
/** Edit or pause/resume this session's persistent goal. */
|
|
159
|
+
updateGoal(patch) {
|
|
160
|
+
return this.engine.updateGoal(this.id, patch);
|
|
161
|
+
}
|
|
162
|
+
/** Whether a paused Goal can reuse this run's already Goal-capable prompt/tools. */
|
|
163
|
+
canResumeGoalInPlace() {
|
|
164
|
+
return this.engine.canResumeGoalInPlace(this.id);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Queue the synthetic turn which actually drives an idle/dormant Goal after
|
|
168
|
+
* Resume. The version guard is checked at queue head, so a later edit/delete
|
|
169
|
+
* cannot leave a stale "resume" turn behind another user turn.
|
|
170
|
+
*/
|
|
171
|
+
enqueueGoalResumeTurn(goal, opts = {}) {
|
|
172
|
+
this.lastActivityAt = Date.now();
|
|
173
|
+
this.cancelledSinceLastTurn = false;
|
|
174
|
+
return new Promise((resolve, reject) => {
|
|
175
|
+
// Resume is level-triggered, not an instruction that should accumulate.
|
|
176
|
+
// While another turn owns the session, pause -> resume can otherwise
|
|
177
|
+
// leave multiple continuation turns for the same Goal instance queued.
|
|
178
|
+
// Supersede only pending entries; an already-active resume is governed by
|
|
179
|
+
// the live TurnLoop control path.
|
|
180
|
+
if (goal.goalId) {
|
|
181
|
+
for (let index = this.queue.length - 1; index >= 0; index--) {
|
|
182
|
+
const pending = this.queue[index];
|
|
183
|
+
if (pending?.goalResumeId !== goal.goalId)
|
|
184
|
+
continue;
|
|
185
|
+
this.queue.splice(index, 1);
|
|
186
|
+
pending.onSkipped?.();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
this.queue.push({
|
|
190
|
+
task: "<system-reminder>\n用户已恢复持久目标。请读取当前持久目标并继续执行。\n</system-reminder>",
|
|
191
|
+
opts: { ...opts, injected: true },
|
|
192
|
+
...(goal.goalId ? { goalResumeId: goal.goalId } : {}),
|
|
193
|
+
guard: () => {
|
|
194
|
+
const current = this.engine.getGoal(this.id);
|
|
195
|
+
// Edits retain the same user-owned goalId and should update the
|
|
196
|
+
// queued resume, not cancel it. Pause/delete/replacement must skip.
|
|
197
|
+
return current?.paused !== true && isSameGoalInstance(current, goal);
|
|
198
|
+
},
|
|
199
|
+
onSkipped: () => resolve(false),
|
|
200
|
+
resolve: () => resolve(true),
|
|
201
|
+
reject,
|
|
202
|
+
});
|
|
203
|
+
void this.pump();
|
|
204
|
+
});
|
|
120
205
|
}
|
|
121
206
|
/**
|
|
122
207
|
* Switch this session's active model (per-session, not worker-global).
|
|
@@ -144,20 +229,54 @@ export class ChatSession {
|
|
|
144
229
|
* path and the deferred run-boundary path.
|
|
145
230
|
*/
|
|
146
231
|
applyModelSwitch(key) {
|
|
147
|
-
|
|
232
|
+
// persist: false — a per-session switch must not become the global boot
|
|
233
|
+
// default (settings.defaults.text); only explicit default-model changes
|
|
234
|
+
// (legacy single-engine path, TUI /model) persist.
|
|
235
|
+
const entry = this.engine.switchModel(key, { persist: false });
|
|
148
236
|
this.engine.resetSessionUsage(this.id);
|
|
149
237
|
return entry;
|
|
150
238
|
}
|
|
239
|
+
/** Apply and clear a deferred switch before another run may start. */
|
|
240
|
+
applyPendingModelSwitchAtRunBoundary() {
|
|
241
|
+
const key = this.pendingModel;
|
|
242
|
+
this.pendingModel = null;
|
|
243
|
+
if (key === null)
|
|
244
|
+
return;
|
|
245
|
+
try {
|
|
246
|
+
this.applyModelSwitch(key);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// requestModelSwitch already returned when the switch was queued. A
|
|
250
|
+
// run-boundary persistence failure must not become an unhandled pump
|
|
251
|
+
// rejection or prevent the session from settling/continuing.
|
|
252
|
+
}
|
|
253
|
+
}
|
|
151
254
|
queueDepth() {
|
|
152
255
|
return this.queue.length;
|
|
153
256
|
}
|
|
154
257
|
async pump() {
|
|
155
|
-
if (this.active)
|
|
258
|
+
if (this.active || this.exclusiveOperation)
|
|
156
259
|
return;
|
|
157
|
-
|
|
260
|
+
let next;
|
|
261
|
+
while ((next = this.queue.shift())) {
|
|
262
|
+
let allowed = true;
|
|
263
|
+
try {
|
|
264
|
+
allowed = next.guard?.() ?? true;
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
allowed = false;
|
|
268
|
+
}
|
|
269
|
+
if (allowed)
|
|
270
|
+
break;
|
|
271
|
+
next.onSkipped?.();
|
|
272
|
+
next = undefined;
|
|
273
|
+
}
|
|
158
274
|
if (!next)
|
|
159
275
|
return;
|
|
160
276
|
this.active = next;
|
|
277
|
+
this.settlePromise = new Promise((resolve) => {
|
|
278
|
+
this.resolveSettled = resolve;
|
|
279
|
+
});
|
|
161
280
|
this.cancelledActive = false;
|
|
162
281
|
this.controller = new AbortController();
|
|
163
282
|
try {
|
|
@@ -165,12 +284,23 @@ export class ChatSession {
|
|
|
165
284
|
const result = await this.engine.run(next.task, {
|
|
166
285
|
cwd: next.opts.cwd,
|
|
167
286
|
sessionId: this.id,
|
|
287
|
+
displayText: next.opts.displayText,
|
|
168
288
|
signal: this.controller.signal,
|
|
169
289
|
onStream,
|
|
170
290
|
goal: next.opts.goal,
|
|
171
291
|
injected: next.opts.injected,
|
|
172
292
|
clientMessageId: next.opts.clientMessageId,
|
|
173
293
|
attachments: next.opts.attachments,
|
|
294
|
+
permissionMode: next.opts.permissionMode,
|
|
295
|
+
planMode: next.opts.planMode,
|
|
296
|
+
behaviorMode: next.opts.behaviorMode,
|
|
297
|
+
profileParams: next.opts.profileParams,
|
|
298
|
+
workspaceProfile: next.opts.workspaceProfile,
|
|
299
|
+
sessionMessageTargets: next.opts.sessionMessageTargets,
|
|
300
|
+
petRuntimeContext: next.opts.petRuntimeContext,
|
|
301
|
+
petWorkspaces: next.opts.petWorkspaces,
|
|
302
|
+
kind: next.opts.kind,
|
|
303
|
+
approvalRouter: next.opts.approvalRouter,
|
|
174
304
|
});
|
|
175
305
|
this.lastActivityAt = Date.now();
|
|
176
306
|
next.resolve(result);
|
|
@@ -195,19 +325,24 @@ export class ChatSession {
|
|
|
195
325
|
}
|
|
196
326
|
}
|
|
197
327
|
finally {
|
|
328
|
+
// close() must never be held hostage by run-boundary cleanup. Resolve
|
|
329
|
+
// before model switching or any other operation that may throw.
|
|
330
|
+
this.resolveSettled?.();
|
|
331
|
+
this.resolveSettled = null;
|
|
198
332
|
this.active = null;
|
|
199
333
|
this.controller = null;
|
|
200
334
|
this.cancelledActive = false;
|
|
201
335
|
// Run boundary: apply any model switch that was deferred because it was
|
|
202
336
|
// requested mid-run. Done here (not in pump) so it still applies when
|
|
203
337
|
// no further turn is queued.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
338
|
+
this.applyPendingModelSwitchAtRunBoundary();
|
|
339
|
+
// Drain the next turn even if deferred model switching failed.
|
|
340
|
+
if (this.queue.length > 0) {
|
|
341
|
+
// Let the just-settled turn's resolve/reject handlers publish their
|
|
342
|
+
// terminal lifecycle before a queued turn can synchronously emit its
|
|
343
|
+
// session_started event. This preserves external QueryGuard ordering.
|
|
344
|
+
queueMicrotask(() => void this.pump());
|
|
207
345
|
}
|
|
208
|
-
// Drain the next turn if one is waiting.
|
|
209
|
-
if (this.queue.length > 0)
|
|
210
|
-
void this.pump();
|
|
211
346
|
}
|
|
212
347
|
}
|
|
213
348
|
}
|
|
@@ -11,9 +11,11 @@
|
|
|
11
11
|
* const result = await client.run("fix the bug");
|
|
12
12
|
*/
|
|
13
13
|
import type { Transport } from "./transport.js";
|
|
14
|
-
import { type RunParams, type RunResult, type AgentStreamEventNotification, type ConfigureParams, type QueryParams, type QueryResult, type ApprovalRequestNotification, type ApprovalResolvedNotification } from "./types.js";
|
|
15
|
-
import type { ApprovalRequest, ApprovalResult, PermissionMode, BackgroundAgentCompletedEvent } from "../types.js";
|
|
16
|
-
|
|
14
|
+
import { type RunParams, type RunResult, type ForkSessionParams, type ForkSessionResult, type AgentStreamEventNotification, type ConfigureParams, type QueryParams, type QueryResult, type PluginCommandsListResult, type PluginCommandExpandResult, type ApprovalRequestNotification, type ApprovalResolvedNotification } from "./types.js";
|
|
15
|
+
import type { ApprovalRequest, ApprovalResult, PermissionMode, BackgroundAgentCompletedEvent, SessionKind } from "../types.js";
|
|
16
|
+
import type { RunBehaviorMode } from "../engine/run-types.js";
|
|
17
|
+
import type { GoalConfig } from "../goal/lifecycle.js";
|
|
18
|
+
export type ApprovalRequestMeta = Pick<ApprovalRequestNotification, "connectionId" | "sessionId" | "generation">;
|
|
17
19
|
export type ApprovalResolvedEvent = ApprovalResolvedNotification;
|
|
18
20
|
export interface AgentClientEvents {
|
|
19
21
|
/** Multi-session envelope: carries sessionId + event. */
|
|
@@ -28,12 +30,16 @@ export interface AgentRunOptions {
|
|
|
28
30
|
permissionMode?: PermissionMode;
|
|
29
31
|
model?: string;
|
|
30
32
|
planMode?: boolean;
|
|
33
|
+
behaviorMode?: RunBehaviorMode;
|
|
34
|
+
kind?: SessionKind;
|
|
31
35
|
}
|
|
32
36
|
export type BackgroundAgentCompletedHandler = (sessionId: string, event: BackgroundAgentCompletedEvent) => void;
|
|
33
37
|
export declare class AgentClient {
|
|
34
38
|
private transport;
|
|
35
39
|
private emitter;
|
|
36
40
|
private pendingRequests;
|
|
41
|
+
/** Routing tuple captured from approval notifications and echoed on approve. */
|
|
42
|
+
private approvalRoutes;
|
|
37
43
|
/**
|
|
38
44
|
* Map from a user-supplied `BackgroundAgentCompletedHandler` to the
|
|
39
45
|
* internal envelope-filtering wrapper actually registered on the
|
|
@@ -52,7 +58,7 @@ export declare class AgentClient {
|
|
|
52
58
|
* for multi-session servers) or the legacy string form `(task, sessionId?)`
|
|
53
59
|
* for backward compatibility with createInProcessClient callers.
|
|
54
60
|
*/
|
|
55
|
-
run(taskOrParams: string | RunParams, sessionIdOrOptions?: string | AgentRunOptions): Promise<RunResult>;
|
|
61
|
+
run(taskOrParams: string | RunParams, sessionIdOrOptions?: string | AgentRunOptions, onTransportResponse?: () => void): Promise<RunResult>;
|
|
56
62
|
/**
|
|
57
63
|
* Respond to an approval request from the server.
|
|
58
64
|
*
|
|
@@ -68,11 +74,26 @@ export declare class AgentClient {
|
|
|
68
74
|
* Legacy form: cancel(reason?)
|
|
69
75
|
*/
|
|
70
76
|
cancel(sessionId?: string, reason?: string): Promise<void>;
|
|
77
|
+
forkSession(params: ForkSessionParams): Promise<ForkSessionResult>;
|
|
71
78
|
/**
|
|
72
79
|
* Clear a session's persisted active goal (CC `/goal clear`). Returns whether
|
|
73
80
|
* a goal was actually cleared (false = there was none).
|
|
74
81
|
*/
|
|
75
82
|
goalClear(sessionId?: string): Promise<boolean>;
|
|
83
|
+
/** Delete a persisted goal. Kept separate from goalClear for UI semantics. */
|
|
84
|
+
goalDelete(sessionId: string, expected: {
|
|
85
|
+
goalId: string;
|
|
86
|
+
revision: number;
|
|
87
|
+
}): Promise<boolean>;
|
|
88
|
+
/** Edit or pause/resume a goal while preserving its goalId. */
|
|
89
|
+
goalUpdate(sessionId: string, patch: {
|
|
90
|
+
objective?: string;
|
|
91
|
+
paused?: boolean;
|
|
92
|
+
expectedGoalId: string;
|
|
93
|
+
expectedRevision: number;
|
|
94
|
+
}): Promise<GoalConfig | null>;
|
|
95
|
+
/** Read the full persisted goal control state. */
|
|
96
|
+
goalGetState(sessionId: string): Promise<GoalConfig | null>;
|
|
76
97
|
/**
|
|
77
98
|
* Read a session's persisted active goal objective, or null when there's
|
|
78
99
|
* none. The host calls this on session load to re-surface the goal block +
|
|
@@ -106,6 +127,13 @@ export declare class AgentClient {
|
|
|
106
127
|
* Query server state.
|
|
107
128
|
*/
|
|
108
129
|
query(type: QueryParams["type"], arg?: string | Record<string, unknown>, ...extra: unknown[]): Promise<QueryResult>;
|
|
130
|
+
/** Discover enabled installed plugin commands for one workspace. */
|
|
131
|
+
listPluginCommands(cwd: string): Promise<PluginCommandsListResult>;
|
|
132
|
+
/**
|
|
133
|
+
* Expand one plugin command inside the trusted server. The command source
|
|
134
|
+
* body and install path never cross the protocol boundary.
|
|
135
|
+
*/
|
|
136
|
+
expandPluginCommand(cwd: string, name: string, rawArguments?: string): Promise<PluginCommandExpandResult>;
|
|
109
137
|
/**
|
|
110
138
|
* Inject context into the session transcript without triggering a LLM turn.
|
|
111
139
|
* Used to make arena results, tool outputs, etc. visible to subsequent LLM calls.
|
|
@@ -136,5 +164,10 @@ export declare class AgentClient {
|
|
|
136
164
|
private request;
|
|
137
165
|
private handleResponse;
|
|
138
166
|
private handleNotification;
|
|
167
|
+
/** Subscribe to an extension-owned server notification method. */
|
|
168
|
+
onExtensionNotification(method: string, handler: (params: Record<string, unknown>) => void): void;
|
|
169
|
+
offExtensionNotification(method: string, handler: (params: Record<string, unknown>) => void): void;
|
|
170
|
+
/** Issue a request to an extension-registered protocol method. */
|
|
171
|
+
requestExtension(method: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
139
172
|
close(): void;
|
|
140
173
|
}
|
package/dist/protocol/client.js
CHANGED
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
* client.onApprovalRequest((reqId, request) => { ... });
|
|
11
11
|
* const result = await client.run("fix the bug");
|
|
12
12
|
*/
|
|
13
|
-
import { Methods, createRequest, isResponse, isNotification, } from "./types.js";
|
|
13
|
+
import { Methods, createRequest, isResponse, isNotification, ErrorCodes, } from "./types.js";
|
|
14
14
|
import { EventEmitter } from "node:events";
|
|
15
15
|
import { logger } from "../logging/logger.js";
|
|
16
16
|
export class AgentClient {
|
|
17
17
|
transport;
|
|
18
18
|
emitter = new EventEmitter();
|
|
19
19
|
pendingRequests = new Map();
|
|
20
|
+
/** Routing tuple captured from approval notifications and echoed on approve. */
|
|
21
|
+
approvalRoutes = new Map();
|
|
20
22
|
/**
|
|
21
23
|
* Map from a user-supplied `BackgroundAgentCompletedHandler` to the
|
|
22
24
|
* internal envelope-filtering wrapper actually registered on the
|
|
@@ -44,7 +46,7 @@ export class AgentClient {
|
|
|
44
46
|
* for multi-session servers) or the legacy string form `(task, sessionId?)`
|
|
45
47
|
* for backward compatibility with createInProcessClient callers.
|
|
46
48
|
*/
|
|
47
|
-
async run(taskOrParams, sessionIdOrOptions) {
|
|
49
|
+
async run(taskOrParams, sessionIdOrOptions, onTransportResponse) {
|
|
48
50
|
let params;
|
|
49
51
|
if (typeof taskOrParams === "string") {
|
|
50
52
|
// Form: run(task, sessionId | options?)
|
|
@@ -70,7 +72,7 @@ export class AgentClient {
|
|
|
70
72
|
// first call of a brand-new session, when sessionId is undefined.
|
|
71
73
|
if (params.sessionId)
|
|
72
74
|
logger.setSid(params.sessionId);
|
|
73
|
-
const result = (await this.request(Methods.Run, params));
|
|
75
|
+
const result = (await this.request(Methods.Run, params, onTransportResponse));
|
|
74
76
|
if (result.sessionId)
|
|
75
77
|
logger.setSid(result.sessionId);
|
|
76
78
|
return result;
|
|
@@ -78,16 +80,24 @@ export class AgentClient {
|
|
|
78
80
|
approve(...args) {
|
|
79
81
|
if (args.length === 3) {
|
|
80
82
|
const [sessionId, requestId, decision] = args;
|
|
83
|
+
const route = this.approvalRoutes.get(requestId);
|
|
81
84
|
return this.request(Methods.Approve, {
|
|
85
|
+
...route,
|
|
82
86
|
sessionId,
|
|
83
87
|
requestId,
|
|
84
88
|
decision,
|
|
89
|
+
}).finally(() => {
|
|
90
|
+
this.approvalRoutes.delete(requestId);
|
|
85
91
|
});
|
|
86
92
|
}
|
|
87
93
|
const [requestId, decision] = args;
|
|
94
|
+
const route = this.approvalRoutes.get(requestId);
|
|
88
95
|
return this.request(Methods.Approve, {
|
|
96
|
+
...route,
|
|
89
97
|
requestId,
|
|
90
98
|
decision,
|
|
99
|
+
}).finally(() => {
|
|
100
|
+
this.approvalRoutes.delete(requestId);
|
|
91
101
|
});
|
|
92
102
|
}
|
|
93
103
|
/**
|
|
@@ -99,6 +109,9 @@ export class AgentClient {
|
|
|
99
109
|
async cancel(sessionId, reason) {
|
|
100
110
|
await this.request(Methods.Cancel, { sessionId, reason });
|
|
101
111
|
}
|
|
112
|
+
async forkSession(params) {
|
|
113
|
+
return this.request(Methods.ForkSession, params);
|
|
114
|
+
}
|
|
102
115
|
/**
|
|
103
116
|
* Clear a session's persisted active goal (CC `/goal clear`). Returns whether
|
|
104
117
|
* a goal was actually cleared (false = there was none).
|
|
@@ -107,6 +120,51 @@ export class AgentClient {
|
|
|
107
120
|
const res = (await this.request(Methods.GoalClear, { sessionId }));
|
|
108
121
|
return res?.cleared === true;
|
|
109
122
|
}
|
|
123
|
+
/** Delete a persisted goal. Kept separate from goalClear for UI semantics. */
|
|
124
|
+
async goalDelete(sessionId, expected) {
|
|
125
|
+
try {
|
|
126
|
+
const res = (await this.request(Methods.GoalDelete, {
|
|
127
|
+
sessionId,
|
|
128
|
+
expectedGoalId: expected.goalId,
|
|
129
|
+
expectedRevision: expected.revision,
|
|
130
|
+
}));
|
|
131
|
+
return res?.deleted === true;
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
// Compatibility only: old servers do not know GoalDelete and expose the
|
|
135
|
+
// unfenced GoalClear method. Never downgrade on a stale/validation error.
|
|
136
|
+
if (err.code !== ErrorCodes.MethodNotFound)
|
|
137
|
+
throw err;
|
|
138
|
+
return this.goalClear(sessionId);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Edit or pause/resume a goal while preserving its goalId. */
|
|
142
|
+
async goalUpdate(sessionId, patch) {
|
|
143
|
+
const res = (await this.request(Methods.GoalUpdate, {
|
|
144
|
+
sessionId,
|
|
145
|
+
...patch,
|
|
146
|
+
}));
|
|
147
|
+
if (res?.updated !== true || !res.goal)
|
|
148
|
+
return null;
|
|
149
|
+
return {
|
|
150
|
+
objective: res.goal,
|
|
151
|
+
...(res.goalId ? { goalId: res.goalId } : {}),
|
|
152
|
+
...(res.revision ? { revision: res.revision } : {}),
|
|
153
|
+
...(res.paused === true ? { paused: true } : {}),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/** Read the full persisted goal control state. */
|
|
157
|
+
async goalGetState(sessionId) {
|
|
158
|
+
const res = (await this.request(Methods.GoalGet, { sessionId }));
|
|
159
|
+
if (!res?.goal)
|
|
160
|
+
return null;
|
|
161
|
+
return {
|
|
162
|
+
objective: res.goal,
|
|
163
|
+
...(res.goalId ? { goalId: res.goalId } : {}),
|
|
164
|
+
...(res.revision ? { revision: res.revision } : {}),
|
|
165
|
+
...(res.paused === true ? { paused: true } : {}),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
110
168
|
/**
|
|
111
169
|
* Read a session's persisted active goal objective, or null when there's
|
|
112
170
|
* none. The host calls this on session load to re-surface the goal block +
|
|
@@ -186,6 +244,21 @@ export class AgentClient {
|
|
|
186
244
|
}
|
|
187
245
|
return this.request(Methods.Query, params);
|
|
188
246
|
}
|
|
247
|
+
/** Discover enabled installed plugin commands for one workspace. */
|
|
248
|
+
async listPluginCommands(cwd) {
|
|
249
|
+
return this.request(Methods.PluginCommandsList, { cwd });
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Expand one plugin command inside the trusted server. The command source
|
|
253
|
+
* body and install path never cross the protocol boundary.
|
|
254
|
+
*/
|
|
255
|
+
async expandPluginCommand(cwd, name, rawArguments = "") {
|
|
256
|
+
return this.request(Methods.PluginCommandExpand, {
|
|
257
|
+
cwd,
|
|
258
|
+
name,
|
|
259
|
+
rawArguments,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
189
262
|
/**
|
|
190
263
|
* Inject context into the session transcript without triggering a LLM turn.
|
|
191
264
|
* Used to make arena results, tool outputs, etc. visible to subsequent LLM calls.
|
|
@@ -247,10 +320,10 @@ export class AgentClient {
|
|
|
247
320
|
this.emitter.off("stream", wrapper);
|
|
248
321
|
}
|
|
249
322
|
// ─── Internals ──────────────────────────────────────────────────
|
|
250
|
-
request(method, params) {
|
|
323
|
+
request(method, params, onResponse) {
|
|
251
324
|
return new Promise((resolve, reject) => {
|
|
252
325
|
const req = createRequest(method, params);
|
|
253
|
-
this.pendingRequests.set(req.id, { resolve, reject });
|
|
326
|
+
this.pendingRequests.set(req.id, { onResponse, resolve, reject });
|
|
254
327
|
this.transport.send(req);
|
|
255
328
|
});
|
|
256
329
|
}
|
|
@@ -259,6 +332,19 @@ export class AgentClient {
|
|
|
259
332
|
if (!pending)
|
|
260
333
|
return;
|
|
261
334
|
this.pendingRequests.delete(res.id);
|
|
335
|
+
// Emit before resolving/rejecting: Promise continuations run in a later
|
|
336
|
+
// microtask, while the transport may synchronously parse the next queued
|
|
337
|
+
// session_started notification in the same chunk.
|
|
338
|
+
if (pending.onResponse) {
|
|
339
|
+
try {
|
|
340
|
+
pending.onResponse();
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
logger.warn("client.run_response_handler_failed", {
|
|
344
|
+
error: error instanceof Error ? error.message : String(error),
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
262
348
|
if (res.error) {
|
|
263
349
|
// Attach both message and code so callers can do toMatchObject({ code }).
|
|
264
350
|
const err = new Error(`[${res.error.code}] ${res.error.message}`);
|
|
@@ -286,7 +372,14 @@ export class AgentClient {
|
|
|
286
372
|
const request = params.request;
|
|
287
373
|
if (requestId && request) {
|
|
288
374
|
const sessionId = typeof params.sessionId === "string" ? params.sessionId : undefined;
|
|
289
|
-
const
|
|
375
|
+
const connectionId = typeof params.connectionId === "string" ? params.connectionId : undefined;
|
|
376
|
+
const generation = typeof params.generation === "number" ? params.generation : undefined;
|
|
377
|
+
const meta = {
|
|
378
|
+
...(connectionId === undefined ? {} : { connectionId }),
|
|
379
|
+
...(sessionId === undefined ? {} : { sessionId }),
|
|
380
|
+
...(generation === undefined ? {} : { generation }),
|
|
381
|
+
};
|
|
382
|
+
this.approvalRoutes.set(requestId, meta);
|
|
290
383
|
this.emitter.emit("approvalRequest", requestId, request, meta);
|
|
291
384
|
}
|
|
292
385
|
break;
|
|
@@ -294,6 +387,7 @@ export class AgentClient {
|
|
|
294
387
|
case Methods.ApprovalResolved: {
|
|
295
388
|
const requestId = params.requestId;
|
|
296
389
|
if (requestId) {
|
|
390
|
+
this.approvalRoutes.delete(requestId);
|
|
297
391
|
const sessionId = typeof params.sessionId === "string" ? params.sessionId : undefined;
|
|
298
392
|
const event = sessionId === undefined ? { requestId } : { sessionId, requestId };
|
|
299
393
|
this.emitter.emit("approvalResolved", event);
|
|
@@ -306,8 +400,26 @@ export class AgentClient {
|
|
|
306
400
|
this.emitter.emit("status", status, message);
|
|
307
401
|
break;
|
|
308
402
|
}
|
|
403
|
+
default: {
|
|
404
|
+
// Extension-owned notification methods (e.g. projection deltas pushed
|
|
405
|
+
// by a ProtocolObserver via host.notify) surface through a generic
|
|
406
|
+
// per-method channel; core knows nothing about their payloads.
|
|
407
|
+
this.emitter.emit(`notification:${notif.method}`, params);
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
309
410
|
}
|
|
310
411
|
}
|
|
412
|
+
/** Subscribe to an extension-owned server notification method. */
|
|
413
|
+
onExtensionNotification(method, handler) {
|
|
414
|
+
this.emitter.on(`notification:${method}`, handler);
|
|
415
|
+
}
|
|
416
|
+
offExtensionNotification(method, handler) {
|
|
417
|
+
this.emitter.off(`notification:${method}`, handler);
|
|
418
|
+
}
|
|
419
|
+
/** Issue a request to an extension-registered protocol method. */
|
|
420
|
+
async requestExtension(method, params) {
|
|
421
|
+
return this.request(method, params);
|
|
422
|
+
}
|
|
311
423
|
close() {
|
|
312
424
|
// Reject all pending requests
|
|
313
425
|
for (const [, pending] of this.pendingRequests) {
|
package/dist/protocol/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { AgentServer, type AgentServerOptions } from "./server.js";
|
|
2
2
|
export { AgentClient } from "./client.js";
|
|
3
|
-
export { createInProcessTransport, StdioTransport, type Transport
|
|
4
|
-
export { Methods, ErrorCodes, type RpcMessage, type RunResult } from "./types.js";
|
|
3
|
+
export { createInProcessTransport, StdioTransport, type Transport } from "./transport.js";
|
|
4
|
+
export { Methods, ErrorCodes, type RpcMessage, type RunResult, type PluginCommandsListParams, type PluginCommandsListResult, type ProtocolPluginCommandDescriptor, type PluginCommandExpandParams, type PluginCommandExpandResult, } from "./types.js";
|
package/dist/protocol/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { AgentServer } from "./server.js";
|
|
2
2
|
export { AgentClient } from "./client.js";
|
|
3
|
-
export { createInProcessTransport, StdioTransport
|
|
4
|
-
export { Methods, ErrorCodes } from "./types.js";
|
|
3
|
+
export { createInProcessTransport, StdioTransport } from "./transport.js";
|
|
4
|
+
export { Methods, ErrorCodes, } from "./types.js";
|