@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,6 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
1
2
|
import { ChatSession } from "./chat-session.js";
|
|
3
|
+
import { codeShellHome } from "../session/session-manager.js";
|
|
2
4
|
import { backgroundShellManager } from "../runtime/background-shell.js";
|
|
3
5
|
import { clearAgentOutputFiles } from "../tool-system/builtin/agent-output-file.js";
|
|
4
6
|
import { backgroundJobRegistry } from "../tool-system/builtin/background-jobs.js";
|
|
@@ -7,35 +9,113 @@ import { clearInjectCredentialSessionAllow } from "../credentials/inject-credent
|
|
|
7
9
|
import { logger } from "../logging/logger.js";
|
|
8
10
|
import { clearSessionPathApprovals, openSessionPathApprovals } from "../tool-system/path-policy.js";
|
|
9
11
|
import { clearInteractiveApprovalSession, openInteractiveApprovalSession, } from "../tool-system/permission.js";
|
|
12
|
+
/** Identity scope every ChatSessionManager belongs to when none is injected. */
|
|
13
|
+
export const LOCAL_CHAT_IDENTITY = "local";
|
|
14
|
+
/**
|
|
15
|
+
* An identity becomes an on-disk path segment (`<root>/identities/<id>`), so
|
|
16
|
+
* it gets the same conservative validation as session ids: no separators, no
|
|
17
|
+
* parent-dir tokens, short, and a strict character allow-list.
|
|
18
|
+
*/
|
|
19
|
+
function assertSafeIdentity(identity) {
|
|
20
|
+
if (typeof identity !== "string" || identity.length === 0 || identity.length > 64) {
|
|
21
|
+
throw new Error(`invalid identity: must be a non-empty string of at most 64 chars`);
|
|
22
|
+
}
|
|
23
|
+
if (identity.includes("/") ||
|
|
24
|
+
identity.includes("\\") ||
|
|
25
|
+
identity === "." ||
|
|
26
|
+
identity.includes("..") ||
|
|
27
|
+
!/^[A-Za-z0-9_.-]+$/.test(identity)) {
|
|
28
|
+
throw new Error(`invalid identity: unexpected characters: ${identity}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export const CLOSED_CHAT_SESSION_TOMBSTONE_LIMIT = 4096;
|
|
10
32
|
export class ChatSessionManager {
|
|
11
33
|
sessions = new Map();
|
|
34
|
+
closingSessions = new Map();
|
|
35
|
+
closedSessions = new Set();
|
|
36
|
+
sessionGeneration = new Map();
|
|
12
37
|
runtime;
|
|
38
|
+
/** Identity scope this manager serves ("local" unless injected). */
|
|
39
|
+
identity;
|
|
13
40
|
factory;
|
|
14
41
|
maxSessions;
|
|
15
42
|
idleTtlMs;
|
|
43
|
+
projectionGeneration;
|
|
44
|
+
/** Construction options retained so forIdentity() can derive siblings. */
|
|
45
|
+
baseOptions;
|
|
16
46
|
sweeper = null;
|
|
17
47
|
constructor(opts) {
|
|
18
48
|
this.runtime = opts.runtime;
|
|
49
|
+
this.identity = opts.identity ?? LOCAL_CHAT_IDENTITY;
|
|
50
|
+
if (opts.identity !== undefined)
|
|
51
|
+
assertSafeIdentity(opts.identity);
|
|
19
52
|
this.factory = opts.engineFactory;
|
|
20
53
|
this.maxSessions = opts.maxSessions ?? 16;
|
|
21
54
|
this.idleTtlMs = opts.idleTtlMs ?? 30 * 60 * 1000;
|
|
55
|
+
this.projectionGeneration = opts.projectionGeneration ?? 1;
|
|
56
|
+
this.baseOptions = opts;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Derive a manager scoped to another identity. The derived manager shares
|
|
60
|
+
* this manager's runtime/limits but persists its sessions under
|
|
61
|
+
* `<dataRoot>/identities/<identity>/sessions` by injecting
|
|
62
|
+
* `sessionStorageDir` into every engineFactory slice (Task 1's SessionManager
|
|
63
|
+
* storageDir seam). Asking for this manager's own identity returns `this`
|
|
64
|
+
* unchanged, so the default single-identity ("local") path is byte-for-byte
|
|
65
|
+
* today's behavior. Callers (AgentServer) cache derived managers per
|
|
66
|
+
* identity; each call here builds a fresh instance.
|
|
67
|
+
*/
|
|
68
|
+
forIdentity(identity) {
|
|
69
|
+
assertSafeIdentity(identity);
|
|
70
|
+
if (identity === this.identity)
|
|
71
|
+
return this;
|
|
72
|
+
const sessionStorageDir = join(this.baseOptions.dataRoot ?? codeShellHome(), "identities", identity, "sessions");
|
|
73
|
+
const baseFactory = this.baseOptions.engineFactory;
|
|
74
|
+
return new ChatSessionManager({
|
|
75
|
+
...this.baseOptions,
|
|
76
|
+
identity,
|
|
77
|
+
engineFactory: (slice) => baseFactory({ ...slice, sessionStorageDir }),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async getOrCreate(sessionId, slice) {
|
|
81
|
+
const closing = this.closingSessions.get(sessionId);
|
|
82
|
+
if (closing) {
|
|
83
|
+
await closing;
|
|
84
|
+
}
|
|
85
|
+
return this.getOrCreateNow(sessionId, slice);
|
|
22
86
|
}
|
|
23
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Cold-resume a persisted session using its own cwd. The first detached
|
|
89
|
+
* Engine is only a storage probe; all actual work runs on the second Engine
|
|
90
|
+
* built from the recovered project slice.
|
|
91
|
+
*/
|
|
92
|
+
async getOrCreatePersisted(sessionId, slice = {}, restorePersistedModel = true) {
|
|
93
|
+
const existing = this.sessions.get(sessionId);
|
|
94
|
+
if (existing)
|
|
95
|
+
return existing;
|
|
96
|
+
const probe = this.factory(slice);
|
|
97
|
+
if (!probe.sessionExistsOnDisk(sessionId))
|
|
98
|
+
return null;
|
|
99
|
+
const cwd = probe.getSessionManager().readSessionMainRoot(sessionId);
|
|
100
|
+
if (!cwd)
|
|
101
|
+
return null;
|
|
102
|
+
const session = await this.getOrCreate(sessionId, {
|
|
103
|
+
...slice,
|
|
104
|
+
cwd,
|
|
105
|
+
projectTrusted: slice.projectTrusted ?? false,
|
|
106
|
+
});
|
|
107
|
+
if (restorePersistedModel)
|
|
108
|
+
session.engine.restoreSessionModel(sessionId);
|
|
109
|
+
return session;
|
|
110
|
+
}
|
|
111
|
+
getOrCreateNow(sessionId, slice) {
|
|
24
112
|
openSessionPathApprovals(sessionId);
|
|
25
113
|
openInteractiveApprovalSession(sessionId);
|
|
26
114
|
const existing = this.sessions.get(sessionId);
|
|
27
115
|
if (existing) {
|
|
28
116
|
existing.lastActivityAt = Date.now();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// engine kept whatever mode it was first created with — changing the pill
|
|
32
|
-
// on a resumed session was silently ignored at enforcement time (#11
|
|
33
|
-
// secondary: "档位 doesn't take effect after first send"). setPermissionMode
|
|
34
|
-
// reconfigures the live permission backend, so it's safe between turns.
|
|
35
|
-
if (slice.permissionMode &&
|
|
36
|
-
typeof existing.engine.getPermissionMode === "function" &&
|
|
37
|
-
existing.engine.getPermissionMode() !== slice.permissionMode) {
|
|
38
|
-
existing.engine.setPermissionMode(slice.permissionMode);
|
|
117
|
+
if (slice.permissionMode && existing.engine.getPermissionMode?.() !== slice.permissionMode) {
|
|
118
|
+
existing.engine.setPermissionMode?.(slice.permissionMode);
|
|
39
119
|
}
|
|
40
120
|
return existing;
|
|
41
121
|
}
|
|
@@ -46,12 +126,27 @@ export class ChatSessionManager {
|
|
|
46
126
|
}
|
|
47
127
|
const engine = this.factory(slice);
|
|
48
128
|
const session = new ChatSession({ id: sessionId, engine });
|
|
129
|
+
const sessionManager = this.engineSessionManager(engine);
|
|
130
|
+
const generation = sessionManager?.registerSessionGeneration(sessionId) ?? 1;
|
|
131
|
+
this.sessionGeneration.set(sessionId, generation);
|
|
49
132
|
this.sessions.set(sessionId, session);
|
|
133
|
+
// A direct user run is an explicit resume/open and may clear the tombstone.
|
|
134
|
+
// Background wakeups must check isUnavailable() before reaching this path.
|
|
135
|
+
this.closedSessions.delete(sessionId);
|
|
50
136
|
return session;
|
|
51
137
|
}
|
|
52
138
|
get(sessionId) {
|
|
53
139
|
return this.sessions.get(sessionId);
|
|
54
140
|
}
|
|
141
|
+
isClosing(sessionId) {
|
|
142
|
+
return this.closingSessions.has(sessionId);
|
|
143
|
+
}
|
|
144
|
+
isClosed(sessionId) {
|
|
145
|
+
return this.closedSessions.has(sessionId);
|
|
146
|
+
}
|
|
147
|
+
isUnavailable(sessionId) {
|
|
148
|
+
return this.isClosing(sessionId) || this.isClosed(sessionId);
|
|
149
|
+
}
|
|
55
150
|
sessionExistsOnDisk(sessionId, slice) {
|
|
56
151
|
const existing = this.sessions.get(sessionId);
|
|
57
152
|
if (existing)
|
|
@@ -69,17 +164,80 @@ export class ChatSessionManager {
|
|
|
69
164
|
for (const s of [...this.sessions.values()])
|
|
70
165
|
fn(s);
|
|
71
166
|
}
|
|
167
|
+
/** Snapshot-safe, read-only source shared by query("sessions") and Pet projection. */
|
|
168
|
+
getLiveSessionSnapshot() {
|
|
169
|
+
const sessions = [];
|
|
170
|
+
this.forEachSession((session) => {
|
|
171
|
+
sessions.push({
|
|
172
|
+
sessionId: session.id,
|
|
173
|
+
busy: session.isBusy(),
|
|
174
|
+
queueDepth: session.queueDepth(),
|
|
175
|
+
lastActivityAt: session.lastActivityAt,
|
|
176
|
+
kind: session.engine
|
|
177
|
+
.getSessionManager?.()
|
|
178
|
+
.readSessionKind?.(session.id) ?? "work",
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
sessions.sort((a, b) => a.sessionId.localeCompare(b.sessionId));
|
|
182
|
+
return { generation: this.projectionGeneration, identity: this.identity, sessions };
|
|
183
|
+
}
|
|
72
184
|
close(sessionId) {
|
|
185
|
+
return this.closeSession(sessionId, true);
|
|
186
|
+
}
|
|
187
|
+
closeSession(sessionId, markClosed) {
|
|
188
|
+
const alreadyClosing = this.closingSessions.get(sessionId);
|
|
189
|
+
if (alreadyClosing)
|
|
190
|
+
return alreadyClosing;
|
|
73
191
|
const s = this.sessions.get(sessionId);
|
|
74
|
-
if (!s)
|
|
75
|
-
|
|
192
|
+
if (!s) {
|
|
193
|
+
if (markClosed)
|
|
194
|
+
this.rememberClosedSession(sessionId);
|
|
195
|
+
return Promise.resolve();
|
|
196
|
+
}
|
|
197
|
+
const sessionManager = this.engineSessionManager(s.engine);
|
|
198
|
+
const generation = this.sessionGeneration.get(sessionId) ?? 0;
|
|
199
|
+
const invalidated = sessionManager?.incrementSessionGeneration(sessionId) ?? generation + 1;
|
|
200
|
+
this.sessionGeneration.set(sessionId, invalidated);
|
|
76
201
|
s.cancel();
|
|
77
202
|
clearSessionPathApprovals(sessionId);
|
|
78
203
|
clearInteractiveApprovalSession(sessionId);
|
|
79
204
|
clearCredentialSessionAllow(sessionId);
|
|
80
205
|
clearInjectCredentialSessionAllow(sessionId);
|
|
81
|
-
|
|
82
|
-
|
|
206
|
+
const finishClose = () => {
|
|
207
|
+
this.unregisterMcpOwner(s);
|
|
208
|
+
if (this.sessions.get(sessionId) === s)
|
|
209
|
+
this.sessions.delete(sessionId);
|
|
210
|
+
if (markClosed)
|
|
211
|
+
this.rememberClosedSession(sessionId);
|
|
212
|
+
else
|
|
213
|
+
this.closedSessions.delete(sessionId);
|
|
214
|
+
this.sessionGeneration.delete(sessionId);
|
|
215
|
+
};
|
|
216
|
+
if (!s.isBusy()) {
|
|
217
|
+
finishClose();
|
|
218
|
+
return Promise.resolve();
|
|
219
|
+
}
|
|
220
|
+
const closing = (async () => {
|
|
221
|
+
try {
|
|
222
|
+
await s.settled;
|
|
223
|
+
finishClose();
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
this.closingSessions.delete(sessionId);
|
|
227
|
+
}
|
|
228
|
+
})();
|
|
229
|
+
this.closingSessions.set(sessionId, closing);
|
|
230
|
+
return closing;
|
|
231
|
+
}
|
|
232
|
+
rememberClosedSession(sessionId) {
|
|
233
|
+
this.closedSessions.delete(sessionId);
|
|
234
|
+
this.closedSessions.add(sessionId);
|
|
235
|
+
while (this.closedSessions.size > CLOSED_CHAT_SESSION_TOMBSTONE_LIMIT) {
|
|
236
|
+
const oldest = this.closedSessions.values().next().value;
|
|
237
|
+
if (oldest === undefined)
|
|
238
|
+
break;
|
|
239
|
+
this.closedSessions.delete(oldest);
|
|
240
|
+
}
|
|
83
241
|
}
|
|
84
242
|
closeAll() {
|
|
85
243
|
// Fire-and-forget variant for callers that can't await (e.g. AgentServer
|
|
@@ -95,8 +253,7 @@ export class ChatSessionManager {
|
|
|
95
253
|
* immediately afterward (the TUI REPL) doesn't orphan detached dev servers.
|
|
96
254
|
*/
|
|
97
255
|
async closeAllAsync() {
|
|
98
|
-
|
|
99
|
-
this.close(id);
|
|
256
|
+
await Promise.all([...this.sessions.keys()].map((id) => this.close(id)));
|
|
100
257
|
// App/worker shutdown — reap every background shell so a detached
|
|
101
258
|
// `npm run dev` doesn't outlive the process as an orphan holding a port
|
|
102
259
|
// (design §6 / §难点1). NOTE: deliberately NOT in close()/sweepIdle() —
|
|
@@ -120,7 +277,7 @@ export class ChatSessionManager {
|
|
|
120
277
|
continue;
|
|
121
278
|
if (backgroundJobRegistry.hasRunningForSession(id))
|
|
122
279
|
continue;
|
|
123
|
-
this.
|
|
280
|
+
void this.closeSession(id, false);
|
|
124
281
|
}
|
|
125
282
|
}
|
|
126
283
|
startIdleSweeper(intervalMs = 60_000) {
|
|
@@ -142,8 +299,27 @@ export class ChatSessionManager {
|
|
|
142
299
|
void mcpPool.unregisterOwner(session.engine).catch((err) => {
|
|
143
300
|
logger.warn("chat_session.mcp_owner_unregister_failed", {
|
|
144
301
|
sessionId: session.id,
|
|
302
|
+
identity: this.identity,
|
|
145
303
|
error: err instanceof Error ? err.message : String(err),
|
|
146
304
|
});
|
|
147
305
|
});
|
|
148
306
|
}
|
|
307
|
+
engineSessionManager(engine) {
|
|
308
|
+
const candidate = engine;
|
|
309
|
+
const manager = candidate.getSessionManager?.();
|
|
310
|
+
if (typeof manager?.registerSessionGeneration !== "function" ||
|
|
311
|
+
typeof manager.incrementSessionGeneration !== "function") {
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
return manager;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Factory counterpart of `new ChatSessionManager(opts)` for identity/dataRoot
|
|
319
|
+
* aware hosts (identity dimension foundations, Task 2). Identity defaults to
|
|
320
|
+
* "local" and dataRoot to `codeShellHome()`, so omitting both is exactly the
|
|
321
|
+
* constructor every existing host already calls.
|
|
322
|
+
*/
|
|
323
|
+
export function createChatSessionManager(opts) {
|
|
324
|
+
return new ChatSessionManager(opts);
|
|
149
325
|
}
|
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
import type { Engine, EngineResult } from "../engine/engine.js";
|
|
2
2
|
import type { ModelEntry } from "../llm/model-pool.js";
|
|
3
3
|
import type { StreamEvent } from "../types.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { PermissionMode, SessionKind } from "../types.js";
|
|
5
|
+
import type { InputAttachmentMeta, PendingApprovalMetadata } from "./types.js";
|
|
6
|
+
import type { ApprovalRouter } from "../tool-system/permission.js";
|
|
7
|
+
import type { RunBehaviorMode } from "../engine/run-types.js";
|
|
8
|
+
import type { SessionMessageTarget } from "../session/session-message.js";
|
|
9
|
+
import type { LegacyPetWorkspaceOption } from "../types.js";
|
|
10
|
+
import { type GoalConfig } from "../goal/lifecycle.js";
|
|
5
11
|
export interface ChatSessionOptions {
|
|
6
12
|
id: string;
|
|
7
13
|
engine: Engine;
|
|
8
14
|
onStream?: (event: StreamEvent) => void;
|
|
9
15
|
}
|
|
16
|
+
export interface PendingApprovalEntry {
|
|
17
|
+
resolve: (decision: unknown) => void;
|
|
18
|
+
metadata: PendingApprovalMetadata;
|
|
19
|
+
}
|
|
10
20
|
export interface TurnOpts {
|
|
11
21
|
/** Working directory override for this turn. If omitted, Engine uses its
|
|
12
22
|
* configured cwd. */
|
|
13
23
|
cwd?: string;
|
|
14
24
|
onStream?: (event: StreamEvent) => void;
|
|
25
|
+
/** User-facing text persisted beside the full model-facing task. */
|
|
26
|
+
displayText?: string;
|
|
15
27
|
/** Goal mode for this turn — forwarded to engine.run (loop-until-done).
|
|
16
28
|
* String objective or full GoalConfig (objective + optional budgets). */
|
|
17
|
-
goal?: string | import("../
|
|
29
|
+
goal?: string | import("../goal/lifecycle.js").GoalConfig;
|
|
18
30
|
/** Marks this turn as a synthetic system-reminder injection (background-job
|
|
19
31
|
* completion notification) rather than the user's own input — persisted so
|
|
20
32
|
* the disk reader skips it as a user bubble on replay. See Engine.run. */
|
|
@@ -23,6 +35,26 @@ export interface TurnOpts {
|
|
|
23
35
|
clientMessageId?: string;
|
|
24
36
|
/** Structured input attachments for this turn. */
|
|
25
37
|
attachments?: InputAttachmentMeta[];
|
|
38
|
+
/** Permission mode snapshot for this queued turn only. */
|
|
39
|
+
permissionMode?: PermissionMode;
|
|
40
|
+
/** Plan-mode snapshot for this queued turn only. */
|
|
41
|
+
planMode?: boolean;
|
|
42
|
+
/** Named behavior profile snapshot for this queued turn only. */
|
|
43
|
+
behaviorMode?: RunBehaviorMode;
|
|
44
|
+
/** Generic per-run parameters consumed by the active behavior profile. */
|
|
45
|
+
profileParams?: Record<string, unknown>;
|
|
46
|
+
/** Digital human to bind durably to this Work Session. */
|
|
47
|
+
workspaceProfile?: string;
|
|
48
|
+
/** Closed same-project Session catalog available to SendMessageToSession. */
|
|
49
|
+
sessionMessageTargets?: readonly SessionMessageTarget[];
|
|
50
|
+
/** @deprecated Compat alias for `profileParams.runtimeContext`. */
|
|
51
|
+
petRuntimeContext?: string;
|
|
52
|
+
/** @deprecated Compat alias for `profileParams.workspaces`. */
|
|
53
|
+
petWorkspaces?: LegacyPetWorkspaceOption[];
|
|
54
|
+
/** Durable classification used only when the Engine creates the session. */
|
|
55
|
+
kind?: SessionKind;
|
|
56
|
+
/** Connection owner router for permission prompts in this turn. */
|
|
57
|
+
approvalRouter?: ApprovalRouter;
|
|
26
58
|
}
|
|
27
59
|
/**
|
|
28
60
|
* One ChatSession per UI chat tab. Owns a single Engine, an AbortController
|
|
@@ -33,16 +65,16 @@ export declare class ChatSession {
|
|
|
33
65
|
readonly id: string;
|
|
34
66
|
readonly engine: Engine;
|
|
35
67
|
/**
|
|
36
|
-
* Per-session approval callbacks indexed by
|
|
68
|
+
* Per-session approval callbacks and resolver-free metadata indexed by requestId.
|
|
37
69
|
* `readonly` guards the Map reference (preventing reassignment); the
|
|
38
70
|
* contents are mutated by `.set()` / `.delete()` as approvals come and go.
|
|
39
|
-
*
|
|
40
|
-
* request and clean them up on response.
|
|
71
|
+
* The resolver stays process-local; only metadata is eligible for Pet snapshots.
|
|
41
72
|
*/
|
|
42
|
-
readonly pendingApprovals: Map<string,
|
|
73
|
+
readonly pendingApprovals: Map<string, PendingApprovalEntry>;
|
|
43
74
|
lastActivityAt: number;
|
|
44
75
|
private queue;
|
|
45
76
|
private active;
|
|
77
|
+
private exclusiveOperation;
|
|
46
78
|
private controller;
|
|
47
79
|
private readonly defaultOnStream?;
|
|
48
80
|
/**
|
|
@@ -69,8 +101,17 @@ export declare class ChatSession {
|
|
|
69
101
|
* (the user is engaging again) so normal wakeups resume working afterward.
|
|
70
102
|
*/
|
|
71
103
|
private cancelledSinceLastTurn;
|
|
104
|
+
private settlePromise;
|
|
105
|
+
private resolveSettled;
|
|
72
106
|
constructor(opts: ChatSessionOptions);
|
|
73
107
|
enqueueTurn(task: string, opts: TurnOpts): Promise<EngineResult>;
|
|
108
|
+
/**
|
|
109
|
+
* Run session maintenance (for example context-package summarization) under
|
|
110
|
+
* the same per-session mutex as turns. Existing activity fails fast; turns
|
|
111
|
+
* arriving after the lock is acquired remain queued until maintenance has
|
|
112
|
+
* persisted its final usage/state update.
|
|
113
|
+
*/
|
|
114
|
+
runExclusive<T>(operation: (signal: AbortSignal) => Promise<T>): Promise<T>;
|
|
74
115
|
/**
|
|
75
116
|
* True when the user hit Stop and hasn't started a new turn since. The server
|
|
76
117
|
* consults this before auto-waking an idle session on a background-job
|
|
@@ -88,6 +129,8 @@ export declare class ChatSession {
|
|
|
88
129
|
*/
|
|
89
130
|
cancel(): void;
|
|
90
131
|
isBusy(): boolean;
|
|
132
|
+
/** Resolves after the active engine.run() has completed its pump finally. */
|
|
133
|
+
get settled(): Promise<void>;
|
|
91
134
|
/**
|
|
92
135
|
* Extend the in-flight goal run's turn/budget ceilings (TODO 3.1). Delegates
|
|
93
136
|
* to the engine, which forwards to the active TurnLoop. Returns null when no
|
|
@@ -106,16 +149,34 @@ export declare class ChatSession {
|
|
|
106
149
|
maxStopBlocks: number;
|
|
107
150
|
} | null;
|
|
108
151
|
/**
|
|
109
|
-
* Read this session's persisted active goal (state.
|
|
152
|
+
* Read this session's persisted active goal (state.goalLifecycle), or undefined
|
|
110
153
|
* when none. Cheap — reads only state.json. The host calls this on session
|
|
111
154
|
* load to re-surface the goal block + Cancel button after a reload.
|
|
112
155
|
*/
|
|
113
|
-
getGoal(): import("../
|
|
156
|
+
getGoal(): import("../goal/lifecycle.js").GoalConfig | undefined;
|
|
114
157
|
/**
|
|
115
158
|
* Clear this session's persisted active goal (CC /goal clear). Works idle or
|
|
116
159
|
* mid-run. Returns true if a goal was actually cleared.
|
|
117
160
|
*/
|
|
118
|
-
clearGoal(
|
|
161
|
+
clearGoal(expected?: {
|
|
162
|
+
goalId?: string;
|
|
163
|
+
revision?: number;
|
|
164
|
+
}): boolean;
|
|
165
|
+
/** Edit or pause/resume this session's persistent goal. */
|
|
166
|
+
updateGoal(patch: {
|
|
167
|
+
objective?: string;
|
|
168
|
+
paused?: boolean;
|
|
169
|
+
expectedGoalId?: string;
|
|
170
|
+
expectedRevision?: number;
|
|
171
|
+
}): import("../goal/lifecycle.js").GoalConfig | undefined;
|
|
172
|
+
/** Whether a paused Goal can reuse this run's already Goal-capable prompt/tools. */
|
|
173
|
+
canResumeGoalInPlace(): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* Queue the synthetic turn which actually drives an idle/dormant Goal after
|
|
176
|
+
* Resume. The version guard is checked at queue head, so a later edit/delete
|
|
177
|
+
* cannot leave a stale "resume" turn behind another user turn.
|
|
178
|
+
*/
|
|
179
|
+
enqueueGoalResumeTurn(goal: GoalConfig, opts?: Omit<TurnOpts, "goal">): Promise<boolean>;
|
|
119
180
|
/**
|
|
120
181
|
* Switch this session's active model (per-session, not worker-global).
|
|
121
182
|
* Applies immediately when idle; defers to the next run boundary when a
|
|
@@ -132,6 +193,8 @@ export declare class ChatSession {
|
|
|
132
193
|
* path and the deferred run-boundary path.
|
|
133
194
|
*/
|
|
134
195
|
private applyModelSwitch;
|
|
196
|
+
/** Apply and clear a deferred switch before another run may start. */
|
|
197
|
+
private applyPendingModelSwitchAtRunBoundary;
|
|
135
198
|
queueDepth(): number;
|
|
136
199
|
private pump;
|
|
137
200
|
}
|