@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
package/dist/session/memory.js
CHANGED
|
@@ -27,6 +27,7 @@ import { mkdirSync, existsSync, readFileSync, writeFileSync, readdirSync, rename
|
|
|
27
27
|
import { join } from "node:path";
|
|
28
28
|
import { homedir } from "node:os";
|
|
29
29
|
import { createHash, randomUUID } from "node:crypto";
|
|
30
|
+
import { acquireFileLock, writeFileAtomic } from "../utils/file-mutex.js";
|
|
30
31
|
function frontmatterLine(key, value) {
|
|
31
32
|
return `${key}: ${JSON.stringify(value)}\n`;
|
|
32
33
|
}
|
|
@@ -178,8 +179,9 @@ export class MemoryManager {
|
|
|
178
179
|
// save by paying one loadAll() — every save after that just
|
|
179
180
|
// mutates the cache and rewrites MEMORY.md.
|
|
180
181
|
const cache = this.ensureIndexCache();
|
|
181
|
-
|
|
182
|
-
|
|
182
|
+
const meta = { name: entry.name, description: entry.description };
|
|
183
|
+
cache.set(fileName, meta);
|
|
184
|
+
this.writeIndex(cache, { kind: "save", fileName, meta });
|
|
183
185
|
return fileName;
|
|
184
186
|
}
|
|
185
187
|
/**
|
|
@@ -386,7 +388,7 @@ export class MemoryManager {
|
|
|
386
388
|
renameSync(join(this.memoryDir, entry.fileName), join(trashDir, entry.fileName));
|
|
387
389
|
const cache = this.ensureIndexCache();
|
|
388
390
|
cache.delete(entry.fileName);
|
|
389
|
-
this.writeIndex(cache);
|
|
391
|
+
this.writeIndex(cache, { kind: "delete", fileName: entry.fileName });
|
|
390
392
|
return true;
|
|
391
393
|
}
|
|
392
394
|
catch {
|
|
@@ -627,47 +629,64 @@ export class MemoryManager {
|
|
|
627
629
|
`\n\nTo read a specific memory, look under ${this.memoryRoot}/{user,dream}/`);
|
|
628
630
|
}
|
|
629
631
|
/**
|
|
630
|
-
*
|
|
631
|
-
* experience) +
|
|
632
|
-
*
|
|
633
|
-
*
|
|
634
|
-
* recall → drives TTL + UI visibility).
|
|
632
|
+
* Three-layer injection index (用户拍板). Merges GLOBAL (cross-project
|
|
633
|
+
* experience) + DIGITAL-HUMAN (portable profile experience) + PROJECT
|
|
634
|
+
* (this repo's facts) memories into a compact index — one line per entry,
|
|
635
|
+
* name + description only, NO body.
|
|
635
636
|
*
|
|
636
637
|
* This is what fixes "global memory never shows up": global memories are now
|
|
637
638
|
* injected alongside project ones, every session, regardless of cwd.
|
|
638
639
|
*
|
|
639
|
-
* Static because it must construct
|
|
640
|
-
*
|
|
640
|
+
* Static because it must construct the managers for each configured layer.
|
|
641
|
+
* `projectDir` undefined → no project layer; `profileDir` undefined → no
|
|
642
|
+
* digital-human layer.
|
|
641
643
|
*/
|
|
642
644
|
static buildInjectionIndex(opts) {
|
|
643
645
|
const global = new MemoryManager({ baseDir: opts.baseDir });
|
|
644
646
|
const project = opts.projectDir
|
|
645
647
|
? new MemoryManager({ baseDir: opts.baseDir, projectDir: opts.projectDir })
|
|
646
648
|
: null;
|
|
649
|
+
// 数字人层:baseDir 直接指向 profiles/<name>(其 memory/ 子目录随
|
|
650
|
+
// MemoryManager 的常规布局落盘)。跟着 Profile 走、跨 workspace 复用。
|
|
651
|
+
const profile = opts.profileDir ? new MemoryManager({ baseDir: opts.profileDir }) : null;
|
|
647
652
|
const pinnedFirst = (a, b) => Number(b.pinned ?? false) - Number(a.pinned ?? false);
|
|
648
653
|
const collect = (mm) => filterByAge([...mm.loadScope("user"), ...mm.loadScope("dream")], opts.maxAgeDays, opts.now).sort(pinnedFirst);
|
|
649
654
|
const globalEntries = collect(global);
|
|
655
|
+
const profileEntries = profile ? collect(profile) : [];
|
|
650
656
|
const projectEntries = project ? collect(project) : [];
|
|
651
|
-
if (globalEntries.length === 0 && projectEntries.length === 0)
|
|
657
|
+
if (globalEntries.length === 0 && profileEntries.length === 0 && projectEntries.length === 0) {
|
|
652
658
|
return "";
|
|
653
|
-
|
|
659
|
+
}
|
|
660
|
+
const fmt = (e, location) => `- ${e.pinned ? "[pinned] " : ""}[scope="${e.scope}" location="${location}" type="${e.type}"] ${e.name}: ${e.description}`;
|
|
661
|
+
const readableLocations = profile ? "global, profile, or project" : "global or project";
|
|
654
662
|
const lines = [];
|
|
655
663
|
if (globalEntries.length > 0) {
|
|
656
664
|
lines.push("## Global memories (apply across all projects)");
|
|
657
665
|
for (const e of globalEntries)
|
|
658
|
-
lines.push(fmt(e));
|
|
666
|
+
lines.push(fmt(e, "global"));
|
|
667
|
+
}
|
|
668
|
+
if (profileEntries.length > 0) {
|
|
669
|
+
if (lines.length > 0)
|
|
670
|
+
lines.push("");
|
|
671
|
+
lines.push("## Digital-human memories (travel with the active profile)");
|
|
672
|
+
for (const e of profileEntries)
|
|
673
|
+
lines.push(fmt(e, "profile"));
|
|
659
674
|
}
|
|
660
675
|
if (projectEntries.length > 0) {
|
|
661
676
|
if (lines.length > 0)
|
|
662
677
|
lines.push("");
|
|
663
678
|
lines.push("## Project memories (this repo)");
|
|
664
679
|
for (const e of projectEntries)
|
|
665
|
-
lines.push(fmt(e));
|
|
680
|
+
lines.push(fmt(e, "project"));
|
|
666
681
|
}
|
|
667
682
|
return (`# Persistent Memory (index)\n\n` +
|
|
668
683
|
`These are summaries of memories from previous sessions. Only the summary is shown here.\n` +
|
|
669
684
|
`When a memory looks relevant to the current task, read its full content with the ` +
|
|
670
|
-
`MemoryRead tool
|
|
685
|
+
`MemoryRead tool before relying on it. Every entry includes its exact scope and location; ` +
|
|
686
|
+
`copy both values exactly and never infer them from the memory name or type. ` +
|
|
687
|
+
`Readable locations for this run: ${readableLocations}.\n` +
|
|
688
|
+
`If MemoryRead reports that an entry is missing, do not repeat the same call. ` +
|
|
689
|
+
`Use MemoryList once to refresh that exact store, or continue without the memory.\n\n` +
|
|
671
690
|
lines.join("\n"));
|
|
672
691
|
}
|
|
673
692
|
/**
|
|
@@ -750,13 +769,52 @@ export class MemoryManager {
|
|
|
750
769
|
this.indexCache = cache;
|
|
751
770
|
return cache;
|
|
752
771
|
}
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
772
|
+
/**
|
|
773
|
+
* Rewrite MEMORY.md from the CURRENT set of memory files on disk, under a
|
|
774
|
+
* cross-process lock.
|
|
775
|
+
*
|
|
776
|
+
* The in-memory `indexCache` is a per-instance optimisation, and several
|
|
777
|
+
* managers exist for the same directory (desktop main, agent worker, TUI, a
|
|
778
|
+
* second desktop instance). Writing the cache out verbatim meant a stale
|
|
779
|
+
* snapshot clobbered whatever another writer had added:
|
|
780
|
+
*
|
|
781
|
+
* A saves a → B loads {a}, saves b → A still holds {a}, saves c
|
|
782
|
+
* → files a, b, c all exist, but MEMORY.md lists only a and c.
|
|
783
|
+
*
|
|
784
|
+
* The individual `<name>.md` files are the source of truth; MEMORY.md is a
|
|
785
|
+
* derived index. So rather than trusting any cache, re-derive it from disk
|
|
786
|
+
* inside the lock. `pending` carries this writer's own change, which may not
|
|
787
|
+
* be visible on disk yet (a delete moves the file to trash first, a save
|
|
788
|
+
* writes it first) — it is applied on top of the freshly scanned set.
|
|
789
|
+
*/
|
|
790
|
+
writeIndex(cache, pending) {
|
|
791
|
+
const release = acquireFileLock(this.indexPath);
|
|
792
|
+
try {
|
|
793
|
+
// Re-scan under the lock: picks up entries written by other processes
|
|
794
|
+
// since this instance's cache was built.
|
|
795
|
+
const merged = new Map();
|
|
796
|
+
for (const entry of this.loadAll()) {
|
|
797
|
+
merged.set(entry.fileName, { name: entry.name, description: entry.description });
|
|
798
|
+
}
|
|
799
|
+
if (pending?.kind === "save")
|
|
800
|
+
merged.set(pending.fileName, pending.meta);
|
|
801
|
+
if (pending?.kind === "delete")
|
|
802
|
+
merged.delete(pending.fileName);
|
|
803
|
+
// Keep this instance's cache consistent with what we are about to write,
|
|
804
|
+
// so the next incremental update starts from the merged truth.
|
|
805
|
+
cache.clear();
|
|
806
|
+
for (const [fileName, meta] of merged)
|
|
807
|
+
cache.set(fileName, meta);
|
|
808
|
+
const lines = [];
|
|
809
|
+
for (const [fileName, meta] of merged) {
|
|
810
|
+
lines.push(`- [${meta.name}](${fileName}) — ${meta.description}`);
|
|
811
|
+
}
|
|
812
|
+
const content = lines.length > 0 ? lines.join("\n") + "\n" : "(no memories stored)\n";
|
|
813
|
+
writeFileAtomic(this.indexPath, content);
|
|
814
|
+
}
|
|
815
|
+
finally {
|
|
816
|
+
release();
|
|
757
817
|
}
|
|
758
|
-
const content = lines.length > 0 ? lines.join("\n") + "\n" : "(no memories stored)\n";
|
|
759
|
-
writeFileSync(this.indexPath, content, "utf-8");
|
|
760
818
|
}
|
|
761
819
|
generateId() {
|
|
762
820
|
return `mem_${randomUUID().replace(/-/g, "")}`;
|
|
@@ -1,12 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session lifecycle manager.
|
|
3
3
|
*/
|
|
4
|
-
import type { SessionState, SessionWorkspace } from "../types.js";
|
|
4
|
+
import type { SessionForkLineage, SessionState, SessionKind, SessionWorkspace, TokenUsage, TranscriptEvent } from "../types.js";
|
|
5
5
|
import { Transcript } from "./transcript.js";
|
|
6
|
+
import { type GoalConfig, type PersistedGoalTerminationReason } from "../goal/lifecycle.js";
|
|
7
|
+
import { type SessionWorkspaceCapability } from "../capabilities/index.js";
|
|
8
|
+
/** Non-Goal fields accepted by the generic latest-state merge path. */
|
|
9
|
+
export type SessionStateFieldPatch = Readonly<Partial<Omit<SessionState, "sessionId" | "goalLifecycle" | "activeGoal" | "goalTerminal" | "goalTerminals">>>;
|
|
10
|
+
export type GoalTerminalSaveOutcome = "persisted" | "obsolete" | "failed";
|
|
6
11
|
export interface SessionBundle {
|
|
7
12
|
state: SessionState;
|
|
8
13
|
transcript: Transcript;
|
|
9
14
|
}
|
|
15
|
+
export interface ForkSessionOptions {
|
|
16
|
+
targetSessionId?: string;
|
|
17
|
+
/** Inclusive source event cursor; omitted means the frozen transcript tail. */
|
|
18
|
+
throughEventId?: string;
|
|
19
|
+
/** `completed` is the interrupted snapshot used by ephemeral side chats. */
|
|
20
|
+
snapshotMode?: "tail" | "completed";
|
|
21
|
+
/** Hide this temporary fork from ordinary session lists and resume pickers. */
|
|
22
|
+
ephemeral?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ForkSessionResult {
|
|
25
|
+
bundle: SessionBundle;
|
|
26
|
+
lineage: SessionForkLineage;
|
|
27
|
+
copiedEventCount: number;
|
|
28
|
+
}
|
|
29
|
+
export interface SummaryForkOptions {
|
|
30
|
+
targetSessionId?: string;
|
|
31
|
+
fromEventId: string;
|
|
32
|
+
toEventId: string;
|
|
33
|
+
summary: string;
|
|
34
|
+
sourceEventCount: number;
|
|
35
|
+
estimatedTokens: number;
|
|
36
|
+
}
|
|
10
37
|
export type SessionWorkspaceResumeResolution = {
|
|
11
38
|
ok: true;
|
|
12
39
|
cwd: string;
|
|
@@ -18,7 +45,7 @@ export type SessionWorkspaceResumeResolution = {
|
|
|
18
45
|
cwd: string;
|
|
19
46
|
workspace: SessionWorkspace;
|
|
20
47
|
message: string;
|
|
21
|
-
reason: "worktree_missing_branch_exists";
|
|
48
|
+
reason: "worktree_missing_branch_exists" | "workspace_capability_unavailable";
|
|
22
49
|
};
|
|
23
50
|
/**
|
|
24
51
|
* Validate a session ID before it is joined into a filesystem path.
|
|
@@ -34,6 +61,13 @@ export type SessionWorkspaceResumeResolution = {
|
|
|
34
61
|
* Exported for direct unit testing.
|
|
35
62
|
*/
|
|
36
63
|
export declare function assertSafeSessionId(sessionId: unknown): asserts sessionId is string;
|
|
64
|
+
/**
|
|
65
|
+
* Runtime source of truth for sessions whose state must not outlive their UI
|
|
66
|
+
* lifecycle. The explicit marker covers modern side forks; the qchat namespace
|
|
67
|
+
* keeps historical/blank quick chats fail-closed if their older state file did
|
|
68
|
+
* not contain the marker yet.
|
|
69
|
+
*/
|
|
70
|
+
export declare function isEphemeralSessionState(state: Pick<SessionState, "sessionId" | "ephemeral">): boolean;
|
|
37
71
|
/**
|
|
38
72
|
* Resolve the `.code-shell` home dir. `CODE_SHELL_HOME` overrides the default
|
|
39
73
|
* `~/.code-shell` — mirrors Codex's `CODEX_HOME`. Tests set it to a temp dir
|
|
@@ -42,9 +76,29 @@ export declare function assertSafeSessionId(sessionId: unknown): asserts session
|
|
|
42
76
|
* with throwaway test sessions (the rm-usage/test-model sidebar junk).
|
|
43
77
|
*/
|
|
44
78
|
export declare function codeShellHome(): string;
|
|
79
|
+
/**
|
|
80
|
+
* Canonical root for every persisted CodeShell session. An explicit `home`
|
|
81
|
+
* (a `~/.code-shell`-equivalent data root) overrides the default resolution;
|
|
82
|
+
* absent → `codeShellHome()` exactly as before.
|
|
83
|
+
*/
|
|
84
|
+
export declare function sessionsRoot(home?: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* Read the session's persisted main-project root from the legacy `state.cwd`
|
|
87
|
+
* field. The field name is part of the state.json compatibility contract and
|
|
88
|
+
* must not be rewritten to `projectRoot`; `state.workspace.root` separately
|
|
89
|
+
* identifies the current main/worktree execution root used on resume.
|
|
90
|
+
*/
|
|
91
|
+
export declare function sessionMainRoot(state: Pick<SessionState, "cwd">): string | undefined;
|
|
45
92
|
export declare class SessionManager {
|
|
46
93
|
private readonly sessionsDir;
|
|
47
|
-
|
|
94
|
+
private readonly registeredCloseEpochs;
|
|
95
|
+
private readonly workspaceCapability?;
|
|
96
|
+
constructor(storageDir?: string, workspaceCapability?: SessionWorkspaceCapability);
|
|
97
|
+
private cleanupStaleForkStaging;
|
|
98
|
+
/** Bind one Engine/session pair to the current close epoch without advancing it. */
|
|
99
|
+
registerSessionGeneration(sessionId: string): number;
|
|
100
|
+
/** Advance the close epoch once before close waits for the old run to settle. */
|
|
101
|
+
incrementSessionGeneration(sessionId: string): number;
|
|
48
102
|
/**
|
|
49
103
|
* Create a new on-disk session. If `explicitSessionId` is passed, use
|
|
50
104
|
* it verbatim (ChatSessionManager-driven hosts choose a logical sid like
|
|
@@ -52,7 +106,7 @@ export declare class SessionManager {
|
|
|
52
106
|
* nanoid. Either way the on-disk directory is materialized and the
|
|
53
107
|
* state.json + transcript.jsonl files are written before return.
|
|
54
108
|
*/
|
|
55
|
-
create(cwd: string, model: string, provider: string, explicitSessionId?: string, parentSessionId?: string | null, origin?: import("../types.js").SessionOrigin): SessionBundle;
|
|
109
|
+
create(cwd: string, model: string, provider: string, explicitSessionId?: string, parentSessionId?: string | null, origin?: import("../types.js").SessionOrigin, kind?: SessionKind): SessionBundle;
|
|
56
110
|
/**
|
|
57
111
|
* Whether a session directory exists on disk. Used by ChatSession-driven
|
|
58
112
|
* cold starts to decide between resume vs create-with-explicit-sid
|
|
@@ -60,16 +114,36 @@ export declare class SessionManager {
|
|
|
60
114
|
*/
|
|
61
115
|
exists(sessionId: string): boolean;
|
|
62
116
|
/**
|
|
63
|
-
* Cheap
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* so a project-bound session keeps loading its own agents/settings/memory
|
|
68
|
-
* instead of falling back to process.cwd(). Returns undefined for an
|
|
69
|
-
* unknown, malformed, or traversal-shaped id rather than throwing — the
|
|
70
|
-
* caller treats "no recoverable cwd" the same as "not given".
|
|
117
|
+
* Cheap persisted-main-root probe — reads only state.json, NOT the transcript
|
|
118
|
+
* (unlike resume()). This deliberately reads legacy `state.cwd`, not the
|
|
119
|
+
* current `state.workspace.root`; callers use it as the stable main-project
|
|
120
|
+
* fallback when a worktree is unavailable or is being released.
|
|
71
121
|
*/
|
|
122
|
+
readSessionMainRoot(sessionId: string): string | undefined;
|
|
123
|
+
/** Cheap durable classification read. Legacy sessions are ordinary work sessions. */
|
|
124
|
+
readSessionKind(sessionId: string): SessionKind | undefined;
|
|
125
|
+
/** Cheap durable digital-human binding read. */
|
|
126
|
+
readSessionWorkspaceProfile(sessionId: string): string | undefined;
|
|
127
|
+
/**
|
|
128
|
+
* Find durable Sessions currently bound to one digital-human profile without loading
|
|
129
|
+
* transcripts. Used by profile deletion guards so a reusable/historical
|
|
130
|
+
* Session cannot be left permanently unresumable.
|
|
131
|
+
*/
|
|
132
|
+
/**
|
|
133
|
+
* Sessions whose state pins this digital human.
|
|
134
|
+
*
|
|
135
|
+
* `includeArchived: false` drops archived Sessions: they are closed history,
|
|
136
|
+
* not a live binding, so they should not block deleting the profile. A
|
|
137
|
+
* dangling name is already handled downstream — resolveActiveWorkspaceProfile
|
|
138
|
+
* logs `profile.active_missing_from_library` and returns undefined.
|
|
139
|
+
*/
|
|
140
|
+
findSessionIdsByWorkspaceProfile(profileName: string, limit?: number, options?: {
|
|
141
|
+
includeArchived?: boolean;
|
|
142
|
+
}): string[];
|
|
143
|
+
/** @deprecated Use readSessionMainRoot; retained for public API compatibility. */
|
|
72
144
|
readCwd(sessionId: string): string | undefined;
|
|
145
|
+
/** Disk-only direct-parent ACL metadata. Undefined means unprovable/corrupt. */
|
|
146
|
+
readParentSessionId(sessionId: string): string | null | undefined;
|
|
73
147
|
/**
|
|
74
148
|
* Disk-only workspace pointer reader. Legacy sessions written before
|
|
75
149
|
* `workspace` existed are treated as main-workspace sessions rooted at
|
|
@@ -81,7 +155,11 @@ export declare class SessionManager {
|
|
|
81
155
|
* `cwd`. P1 will teach ToolContext to resolve cwd from this field; for P0 it
|
|
82
156
|
* is a safety pointer and resume breadcrumb.
|
|
83
157
|
*/
|
|
84
|
-
setSessionWorkspace(sessionId: string, workspace: SessionWorkspace):
|
|
158
|
+
setSessionWorkspace(sessionId: string, workspace: SessionWorkspace): number;
|
|
159
|
+
/** Read the durable archival timestamp; undefined = not archived / unprovable. */
|
|
160
|
+
readSessionArchivedAt(sessionId: string): number | undefined;
|
|
161
|
+
/** Set (number) or clear (undefined) the durable archival marker. */
|
|
162
|
+
setSessionArchived(sessionId: string, archivedAt: number | undefined): number;
|
|
85
163
|
recordWorkspaceHandoff(sessionId: string, from: SessionWorkspace | undefined, to: SessionWorkspace): void;
|
|
86
164
|
/**
|
|
87
165
|
* Resolve the cwd a resumed session must run in from its persisted workspace
|
|
@@ -93,8 +171,8 @@ export declare class SessionManager {
|
|
|
93
171
|
resolveSessionWorkspaceForResume(sessionId: string): Promise<SessionWorkspaceResumeResolution>;
|
|
94
172
|
/**
|
|
95
173
|
* Cheap "does this session have a persisted goal?" probe — reads only
|
|
96
|
-
* state.json, NOT the transcript (like
|
|
97
|
-
*
|
|
174
|
+
* state.json, NOT the transcript (like readSessionMainRoot). A persistent goal lives in
|
|
175
|
+
* the canonical goalLifecycle union; it is never appended to the transcript as an event, so
|
|
98
176
|
* a session rebuilt from disk (e.g. localStorage wiped) can't recover the
|
|
99
177
|
* goal from its messages. The desktop host calls this on session load to
|
|
100
178
|
* re-surface the active-goal block + its Cancel button, which would otherwise
|
|
@@ -102,11 +180,12 @@ export declare class SessionManager {
|
|
|
102
180
|
* run. Returns undefined for an unknown / malformed / traversal-shaped id, or
|
|
103
181
|
* a session with no active goal — never throws.
|
|
104
182
|
*/
|
|
105
|
-
readActiveGoal(sessionId: string): import("../
|
|
183
|
+
readActiveGoal(sessionId: string): import("../goal/lifecycle.js").GoalConfig | undefined;
|
|
106
184
|
/**
|
|
107
185
|
* Disk-only "wipe this session's persistent goal" — the counterpart to
|
|
108
|
-
* readActiveGoal. Reads state.json,
|
|
109
|
-
*
|
|
186
|
+
* readActiveGoal. Reads state.json, transitions the matching goalLifecycle
|
|
187
|
+
* to terminal(user_cleared), and rewrites it through the field-level CAS.
|
|
188
|
+
* Returns true only if a goal was actually
|
|
110
189
|
* present (idempotent — clearing a session with no goal is a no-op returning
|
|
111
190
|
* false). Never throws on an unknown / malformed / traversal-shaped id
|
|
112
191
|
* (returns false), matching readActiveGoal's tolerance.
|
|
@@ -119,17 +198,121 @@ export declare class SessionManager {
|
|
|
119
198
|
* Engine.clearGoal also delegates its disk write here so the wipe logic lives
|
|
120
199
|
* in exactly one place.
|
|
121
200
|
*/
|
|
122
|
-
clearActiveGoal(sessionId: string
|
|
201
|
+
clearActiveGoal(sessionId: string, expected?: {
|
|
202
|
+
goalId?: string;
|
|
203
|
+
revision?: number;
|
|
204
|
+
}): boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Edit or pause/resume the currently active goal with an identity-checked,
|
|
207
|
+
* field-level CAS. The goalId is preserved: editing the objective changes
|
|
208
|
+
* the same user-owned goal rather than terminally cancelling it and arming a
|
|
209
|
+
* replacement. A changed objective receives a fresh deadline anchor.
|
|
210
|
+
*
|
|
211
|
+
* Returns undefined when the session/goal is absent or the patch is invalid.
|
|
212
|
+
* The returned state lets a live Engine rebase its in-memory bundle after
|
|
213
|
+
* this control operation.
|
|
214
|
+
*/
|
|
215
|
+
updateActiveGoal(sessionId: string, patch: {
|
|
216
|
+
objective?: string;
|
|
217
|
+
paused?: boolean;
|
|
218
|
+
expectedGoalId?: string;
|
|
219
|
+
expectedRevision?: number;
|
|
220
|
+
}): {
|
|
221
|
+
goal: GoalConfig;
|
|
222
|
+
stateRevision: number;
|
|
223
|
+
state: SessionState;
|
|
224
|
+
} | undefined;
|
|
123
225
|
resume(sessionId: string): SessionBundle;
|
|
124
|
-
saveState(state: SessionState): void;
|
|
125
226
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
227
|
+
* Return the exact persistence directory owned by this manager.
|
|
228
|
+
*
|
|
229
|
+
* Cross-session sidecars (for example versioned handoffs) use this to stay
|
|
230
|
+
* inside an identity/custom-data-root boundary instead of falling back to
|
|
231
|
+
* the process-global default sessions directory.
|
|
232
|
+
*/
|
|
233
|
+
getStorageDir(): string;
|
|
234
|
+
/**
|
|
235
|
+
* Read one durable session state without changing its lifecycle status.
|
|
236
|
+
* `resume()` intentionally marks the returned in-memory state active; host
|
|
237
|
+
* coordination code needs a read-only snapshot for completed cursors and
|
|
238
|
+
* workspace/profile metadata.
|
|
239
|
+
*/
|
|
240
|
+
readSessionState(sessionId: string): SessionState | undefined;
|
|
241
|
+
/**
|
|
242
|
+
* Merge a field-level state update into the latest persisted snapshot.
|
|
243
|
+
*
|
|
244
|
+
* Unlike saveState(), callers do not supply a potentially stale whole-state
|
|
245
|
+
* object. saveState serializes the read/revision-check/write section with the
|
|
246
|
+
* per-session lock and returns the new persisted revision to the caller.
|
|
247
|
+
*/
|
|
248
|
+
updateSessionState(sessionId: string, partial: SessionStateFieldPatch): number;
|
|
249
|
+
/**
|
|
250
|
+
* Atomically add one billed auxiliary request to the latest source state.
|
|
251
|
+
* This field-level read/add/write avoids publishing a detached stale state
|
|
252
|
+
* snapshot and accounts prompt, completion, total, cache, and cost together.
|
|
253
|
+
*/
|
|
254
|
+
recordAuxiliaryUsage(sessionId: string, usage: TokenUsage, costState?: Record<string, unknown>): void;
|
|
255
|
+
/** @deprecated Compatibility fixture writer; runtime code must use domain updates. */
|
|
256
|
+
saveState(state: SessionState, generation?: number): boolean;
|
|
257
|
+
/**
|
|
258
|
+
* Persist one goal terminal transition without allowing a revision race to
|
|
259
|
+
* resurrect that goal. This is always a Goal-domain update: read the newest
|
|
260
|
+
* snapshot, transition only the matching lifecycle identity, then commit. A detached run
|
|
261
|
+
* snapshot is never used as the write candidate,
|
|
262
|
+
* so a successful terminal transition cannot publish stale summary/workspace
|
|
263
|
+
* or accounting fields. Lock/generation conflicts remain distinct failures.
|
|
264
|
+
*/
|
|
265
|
+
saveGoalTerminal(state: SessionState, goal: GoalConfig | undefined, reason: PersistedGoalTerminationReason): boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Persist a terminal transition and distinguish a durable commit from a stale
|
|
268
|
+
* run whose Goal identity has already been replaced. Callers may publish a
|
|
269
|
+
* terminal event only for `persisted`.
|
|
270
|
+
*/
|
|
271
|
+
saveGoalTerminalOutcome(state: SessionState, goal: GoalConfig | undefined, reason: PersistedGoalTerminationReason): GoalTerminalSaveOutcome;
|
|
272
|
+
/**
|
|
273
|
+
* Arm or migrate one active goal as a Goal-domain update. The newest state is
|
|
274
|
+
* always the write base, so unrelated fields written by another host survive.
|
|
275
|
+
* Replacement is explicit and terminally closes the latest active identity;
|
|
276
|
+
* a non-replacement write may only normalize the same legacy/current goal.
|
|
277
|
+
*/
|
|
278
|
+
saveActiveGoal(state: SessionState, goal: GoalConfig, options?: {
|
|
279
|
+
replaceCurrent?: boolean;
|
|
280
|
+
}): boolean;
|
|
281
|
+
/** Persist active → waiting only for the expected concrete Goal version. */
|
|
282
|
+
markGoalWaiting(state: SessionState, goal: GoalConfig): boolean;
|
|
283
|
+
/** Drop a matching active goal only when its terminal identity is durable. */
|
|
284
|
+
clearTerminatedActiveGoal(state: SessionState, goal: GoalConfig): boolean;
|
|
285
|
+
/**
|
|
286
|
+
* Commit only the fields owned by a live run. The detached `state` object is
|
|
287
|
+
* used solely as a live-view target for the returned revision; it is never
|
|
288
|
+
* serialized wholesale. This prevents a Goal/workspace/title domain write
|
|
289
|
+
* from authorizing a later stale metadata overwrite.
|
|
129
290
|
*/
|
|
130
|
-
|
|
131
|
-
|
|
291
|
+
saveStateOrUpdateFields(state: SessionState, partial: SessionStateFieldPatch): boolean;
|
|
292
|
+
private saveStateAttempt;
|
|
293
|
+
private acquireStateLock;
|
|
294
|
+
/** Recover only the old implementation's regular-file orphan lock. */
|
|
295
|
+
private prepareLegacyStateLock;
|
|
296
|
+
private readPersistedState;
|
|
297
|
+
private rebaseLiveState;
|
|
298
|
+
private generationKey;
|
|
299
|
+
/** Create an independent, top-level session from a frozen event cursor. */
|
|
300
|
+
fork(sourceSessionId: string, options?: ForkSessionOptions): ForkSessionResult;
|
|
301
|
+
/** Freeze and validate an inclusive source range before any model call. */
|
|
302
|
+
selectContextPackage(sourceSessionId: string, range: {
|
|
303
|
+
fromEventId: string;
|
|
304
|
+
toEventId: string;
|
|
305
|
+
}): ReturnType<typeof Transcript.selectContextRange>;
|
|
306
|
+
/** Publish a summary-only top-level fork after summarization has succeeded. */
|
|
307
|
+
createSummaryFork(sourceSessionId: string, options: SummaryForkOptions): ForkSessionResult;
|
|
308
|
+
private readForkSnapshot;
|
|
309
|
+
private publishSessionAtomically;
|
|
310
|
+
list(limit?: number, opts?: {
|
|
311
|
+
excludeKinds?: readonly string[];
|
|
312
|
+
}): SessionListEntry[];
|
|
132
313
|
}
|
|
314
|
+
export declare function buildForkState(source: SessionState, targetSessionId: string, lineage: SessionForkLineage, startedAt?: number): SessionState;
|
|
315
|
+
export declare function buildForkTranscript(sourceEvents: readonly TranscriptEvent[], state: SessionState): TranscriptEvent[];
|
|
133
316
|
export type SessionListEntry = SessionState & {
|
|
134
317
|
preview?: string;
|
|
135
318
|
/** Last activity time — transcript mtime, falling back to startedAt. */
|