@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
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** A host-authorized project Session that may receive a model-sent message. */
|
|
2
|
+
export interface SessionMessageTarget {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
title: string;
|
|
5
|
+
workspaceRoot: string;
|
|
6
|
+
workspaceProfile?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RouteSessionMessageInput {
|
|
9
|
+
sourceSessionId: string;
|
|
10
|
+
target: SessionMessageTarget;
|
|
11
|
+
message: string;
|
|
12
|
+
/** Full same-project catalog so the target can send a later message onward. */
|
|
13
|
+
catalog: readonly SessionMessageTarget[];
|
|
14
|
+
}
|
|
15
|
+
export type SessionMessageRouter = (input: RouteSessionMessageInput) => Promise<void>;
|
|
16
|
+
export interface SessionMessageToolService {
|
|
17
|
+
targets: readonly SessionMessageTarget[];
|
|
18
|
+
send(input: {
|
|
19
|
+
targetSessionId: string;
|
|
20
|
+
message: string;
|
|
21
|
+
}): Promise<SessionMessageTarget>;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -3,12 +3,55 @@
|
|
|
3
3
|
* toMessages() derives Message[] from events for sending to LLM.
|
|
4
4
|
*/
|
|
5
5
|
import type { TranscriptEvent, TranscriptEventType, Message, ContentBlock } from "../types.js";
|
|
6
|
+
import type { EngineResult } from "../engine/types.js";
|
|
7
|
+
type TranscriptWriter = (filePath: string, data: string, encoding: "utf-8") => void;
|
|
8
|
+
type ParsedEvents = {
|
|
9
|
+
events: TranscriptEvent[];
|
|
10
|
+
malformedLineCount: number;
|
|
11
|
+
};
|
|
12
|
+
export interface TranscriptFlushFailure {
|
|
13
|
+
errno: string | number;
|
|
14
|
+
code?: string;
|
|
15
|
+
message: string;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
attempts: 2;
|
|
18
|
+
recoverable: false;
|
|
19
|
+
filePath: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ContextEventRange {
|
|
22
|
+
fromEventId: string;
|
|
23
|
+
toEventId: string;
|
|
24
|
+
}
|
|
25
|
+
export interface SelectedContextRange {
|
|
26
|
+
events: TranscriptEvent[];
|
|
27
|
+
messages: Message[];
|
|
28
|
+
sourceEventCount: number;
|
|
29
|
+
}
|
|
30
|
+
export type SummaryAppendMetadata = {
|
|
31
|
+
fromTurn: number;
|
|
32
|
+
toTurn: number;
|
|
33
|
+
eventCount: number;
|
|
34
|
+
} | {
|
|
35
|
+
trigger: "context_transfer";
|
|
36
|
+
sourceRange: {
|
|
37
|
+
sessionId: string;
|
|
38
|
+
fromEventId: string;
|
|
39
|
+
toEventId: string;
|
|
40
|
+
};
|
|
41
|
+
sourceEventCount: number;
|
|
42
|
+
estimatedTokens: number;
|
|
43
|
+
summaryVersion: number;
|
|
44
|
+
summaryHash: string;
|
|
45
|
+
};
|
|
6
46
|
export declare class Transcript {
|
|
7
47
|
private events;
|
|
8
48
|
private filePath;
|
|
9
49
|
private currentTurn;
|
|
50
|
+
private readonly writer;
|
|
51
|
+
private dirty;
|
|
52
|
+
private lastFlushFailure;
|
|
10
53
|
getFilePath(): string;
|
|
11
|
-
constructor(filePath: string);
|
|
54
|
+
constructor(filePath: string, writer?: TranscriptWriter);
|
|
12
55
|
append(type: TranscriptEventType, data: Record<string, unknown>): TranscriptEvent;
|
|
13
56
|
/**
|
|
14
57
|
* Append a chat message to the transcript.
|
|
@@ -24,8 +67,21 @@ export declare class Transcript {
|
|
|
24
67
|
injected?: boolean;
|
|
25
68
|
steerId?: string;
|
|
26
69
|
clientMessageId?: string;
|
|
70
|
+
displayText?: string;
|
|
71
|
+
authority?: "user" | "agent" | "system" | "policy";
|
|
72
|
+
source?: "agent-direction" | "goal-control";
|
|
73
|
+
envelopeIds?: string[];
|
|
74
|
+
correlationIds?: string[];
|
|
27
75
|
}): TranscriptEvent;
|
|
28
76
|
hasClientMessageId(clientMessageId: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Persist the exact response associated with one idempotent submit. The
|
|
79
|
+
* receipt stays outside toMessages(), so replay support does not change the
|
|
80
|
+
* model's conversation history.
|
|
81
|
+
*/
|
|
82
|
+
appendRunResult(clientMessageId: string, result: EngineResult): TranscriptEvent;
|
|
83
|
+
/** Return the newest valid durable response for an idempotent submit. */
|
|
84
|
+
findRunResultByClientMessageId(clientMessageId: string): EngineResult | undefined;
|
|
29
85
|
appendToolUse(toolName: string, toolCallId: string, args: Record<string, unknown>): TranscriptEvent;
|
|
30
86
|
appendToolResult(toolCallId: string, toolName: string, result?: string, error?: string, contentBlocks?: ContentBlock[]): TranscriptEvent;
|
|
31
87
|
/** Anchor for a spawned sub-agent (see TranscriptEventType "subagent").
|
|
@@ -41,11 +97,7 @@ export declare class Transcript {
|
|
|
41
97
|
* can hit more than one abort return for a single Stop).
|
|
42
98
|
*/
|
|
43
99
|
appendTurnStopped(): TranscriptEvent | undefined;
|
|
44
|
-
appendSummary(summary: string,
|
|
45
|
-
fromTurn: number;
|
|
46
|
-
toTurn: number;
|
|
47
|
-
eventCount: number;
|
|
48
|
-
}): TranscriptEvent;
|
|
100
|
+
appendSummary(summary: string, metadata: SummaryAppendMetadata): TranscriptEvent;
|
|
49
101
|
appendError(error: string, details?: Record<string, unknown>): TranscriptEvent;
|
|
50
102
|
/**
|
|
51
103
|
* Derive Message[] from transcript events for sending to the LLM.
|
|
@@ -55,13 +107,31 @@ export declare class Transcript {
|
|
|
55
107
|
getEvents(type?: TranscriptEventType): TranscriptEvent[];
|
|
56
108
|
get turnNumber(): number;
|
|
57
109
|
get eventCount(): number;
|
|
110
|
+
/** True once any event failed both persistence attempts. Sticky by design. */
|
|
111
|
+
flushFailed(): boolean;
|
|
112
|
+
/** Structured details for the most recent unrecoverable flush failure. */
|
|
113
|
+
getFlushFailure(): TranscriptFlushFailure | undefined;
|
|
58
114
|
private findMessageByClientId;
|
|
59
115
|
private flush;
|
|
116
|
+
private errorErrno;
|
|
117
|
+
private errorMessage;
|
|
60
118
|
/**
|
|
61
119
|
* Repair tool_result pairing issues:
|
|
62
120
|
* - Orphaned tool_results (no matching tool_use) get removed
|
|
63
121
|
* - Missing tool_results (tool_use with no result) get synthetic error results
|
|
64
122
|
*/
|
|
65
123
|
repairToolResultPairs(): void;
|
|
124
|
+
static readEvents(filePath: string): ParsedEvents;
|
|
125
|
+
static eventsToMessages(events: readonly TranscriptEvent[]): Array<{
|
|
126
|
+
role: string;
|
|
127
|
+
content: string | ContentBlock[];
|
|
128
|
+
}>;
|
|
129
|
+
/**
|
|
130
|
+
* Select one inclusive, stable event-id range and project only LLM-context
|
|
131
|
+
* events from it. Audit/UI events remain part of sourceEventCount but never
|
|
132
|
+
* enter the package prompt.
|
|
133
|
+
*/
|
|
134
|
+
static selectContextRange(events: readonly TranscriptEvent[], range: ContextEventRange): SelectedContextRange;
|
|
66
135
|
static loadFromFile(filePath: string): Transcript;
|
|
67
136
|
}
|
|
137
|
+
export {};
|
|
@@ -6,15 +6,26 @@ import { appendFileSync, readFileSync, existsSync, mkdirSync, writeFileSync } fr
|
|
|
6
6
|
import { dirname } from "node:path";
|
|
7
7
|
import { nanoid } from "nanoid";
|
|
8
8
|
import { logger } from "../logging/logger.js";
|
|
9
|
+
const CONTEXT_EVENT_TYPES = new Set([
|
|
10
|
+
"message",
|
|
11
|
+
"tool_use",
|
|
12
|
+
"tool_result",
|
|
13
|
+
"summary",
|
|
14
|
+
"context_transfer",
|
|
15
|
+
]);
|
|
9
16
|
export class Transcript {
|
|
10
17
|
events = [];
|
|
11
18
|
filePath;
|
|
12
19
|
currentTurn = 0;
|
|
20
|
+
writer;
|
|
21
|
+
dirty = false;
|
|
22
|
+
lastFlushFailure;
|
|
13
23
|
getFilePath() {
|
|
14
24
|
return this.filePath;
|
|
15
25
|
}
|
|
16
|
-
constructor(filePath) {
|
|
26
|
+
constructor(filePath, writer = appendFileSync) {
|
|
17
27
|
this.filePath = filePath;
|
|
28
|
+
this.writer = writer;
|
|
18
29
|
mkdirSync(dirname(filePath), { recursive: true });
|
|
19
30
|
if (!existsSync(filePath)) {
|
|
20
31
|
writeFileSync(filePath, "", "utf-8");
|
|
@@ -60,11 +71,37 @@ export class Transcript {
|
|
|
60
71
|
...(opts?.injected ? { injected: true } : {}),
|
|
61
72
|
...(opts?.steerId ? { steerId: opts.steerId } : {}),
|
|
62
73
|
...(opts?.clientMessageId ? { clientMessageId: opts.clientMessageId } : {}),
|
|
74
|
+
...(opts?.displayText ? { displayText: opts.displayText } : {}),
|
|
75
|
+
...(opts?.authority ? { authority: opts.authority } : {}),
|
|
76
|
+
...(opts?.source ? { source: opts.source } : {}),
|
|
77
|
+
...(opts?.envelopeIds ? { envelopeIds: opts.envelopeIds } : {}),
|
|
78
|
+
...(opts?.correlationIds ? { correlationIds: opts.correlationIds } : {}),
|
|
63
79
|
});
|
|
64
80
|
}
|
|
65
81
|
hasClientMessageId(clientMessageId) {
|
|
66
82
|
return this.findMessageByClientId(clientMessageId) !== undefined;
|
|
67
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Persist the exact response associated with one idempotent submit. The
|
|
86
|
+
* receipt stays outside toMessages(), so replay support does not change the
|
|
87
|
+
* model's conversation history.
|
|
88
|
+
*/
|
|
89
|
+
appendRunResult(clientMessageId, result) {
|
|
90
|
+
return this.append("run_result", { clientMessageId, result });
|
|
91
|
+
}
|
|
92
|
+
/** Return the newest valid durable response for an idempotent submit. */
|
|
93
|
+
findRunResultByClientMessageId(clientMessageId) {
|
|
94
|
+
for (let index = this.events.length - 1; index >= 0; index -= 1) {
|
|
95
|
+
const event = this.events[index];
|
|
96
|
+
if (event.type !== "run_result" || event.data.clientMessageId !== clientMessageId)
|
|
97
|
+
continue;
|
|
98
|
+
const result = event.data.result;
|
|
99
|
+
if (!isEngineResultReceipt(result))
|
|
100
|
+
return undefined;
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
68
105
|
appendToolUse(toolName, toolCallId, args) {
|
|
69
106
|
return this.append("tool_use", { toolName, toolCallId, args });
|
|
70
107
|
}
|
|
@@ -100,11 +137,15 @@ export class Transcript {
|
|
|
100
137
|
return undefined;
|
|
101
138
|
return this.append("turn_stopped", {});
|
|
102
139
|
}
|
|
103
|
-
appendSummary(summary,
|
|
140
|
+
appendSummary(summary, metadata) {
|
|
141
|
+
if ("trigger" in metadata) {
|
|
142
|
+
const { trigger: _trigger, ...provenance } = metadata;
|
|
143
|
+
return this.append("context_transfer", { summary, ...provenance });
|
|
144
|
+
}
|
|
104
145
|
return this.append("summary", {
|
|
105
146
|
summary,
|
|
106
147
|
trigger: "auto",
|
|
107
|
-
compactedRange,
|
|
148
|
+
compactedRange: metadata,
|
|
108
149
|
preservedSegment: {
|
|
109
150
|
headEventId: this.events[0]?.id,
|
|
110
151
|
tailEventId: this.events[this.events.length - 1]?.id,
|
|
@@ -162,7 +203,17 @@ export class Transcript {
|
|
|
162
203
|
});
|
|
163
204
|
break;
|
|
164
205
|
}
|
|
165
|
-
|
|
206
|
+
case "context_transfer": {
|
|
207
|
+
const { summary, handoffId } = event.data;
|
|
208
|
+
messages.push({
|
|
209
|
+
role: "user",
|
|
210
|
+
content: handoffId
|
|
211
|
+
? `<system-reminder>Session handoff received:\n${summary}</system-reminder>`
|
|
212
|
+
: `<system-reminder>Background context transferred from a selected conversation range:\n${summary}</system-reminder>`,
|
|
213
|
+
});
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
// turn_boundary, run_result, session_meta, file_history, plan_operation, error
|
|
166
217
|
// are not included in LLM messages
|
|
167
218
|
}
|
|
168
219
|
}
|
|
@@ -179,18 +230,65 @@ export class Transcript {
|
|
|
179
230
|
get eventCount() {
|
|
180
231
|
return this.events.length;
|
|
181
232
|
}
|
|
233
|
+
/** True once any event failed both persistence attempts. Sticky by design. */
|
|
234
|
+
flushFailed() {
|
|
235
|
+
return this.dirty;
|
|
236
|
+
}
|
|
237
|
+
/** Structured details for the most recent unrecoverable flush failure. */
|
|
238
|
+
getFlushFailure() {
|
|
239
|
+
return this.lastFlushFailure ? { ...this.lastFlushFailure } : undefined;
|
|
240
|
+
}
|
|
182
241
|
findMessageByClientId(clientMessageId) {
|
|
183
242
|
return this.events.find((event) => event.type === "message" &&
|
|
184
243
|
event.data.clientMessageId === clientMessageId);
|
|
185
244
|
}
|
|
186
245
|
flush(event) {
|
|
246
|
+
const line = JSON.stringify(event) + "\n";
|
|
187
247
|
try {
|
|
188
|
-
|
|
248
|
+
this.writer(this.filePath, line, "utf-8");
|
|
249
|
+
return true;
|
|
189
250
|
}
|
|
190
|
-
catch {
|
|
191
|
-
|
|
251
|
+
catch (firstError) {
|
|
252
|
+
try {
|
|
253
|
+
this.writer(this.filePath, line, "utf-8");
|
|
254
|
+
logger.warn("transcript.flush_retry_recovered", {
|
|
255
|
+
filePath: this.filePath,
|
|
256
|
+
errno: this.errorErrno(firstError),
|
|
257
|
+
message: this.errorMessage(firstError),
|
|
258
|
+
});
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
catch (retryError) {
|
|
262
|
+
const err = retryError;
|
|
263
|
+
const failure = {
|
|
264
|
+
errno: this.errorErrno(retryError),
|
|
265
|
+
...(typeof err?.code === "string" ? { code: err.code } : {}),
|
|
266
|
+
message: this.errorMessage(retryError),
|
|
267
|
+
timestamp: Date.now(),
|
|
268
|
+
attempts: 2,
|
|
269
|
+
recoverable: false,
|
|
270
|
+
filePath: this.filePath,
|
|
271
|
+
};
|
|
272
|
+
// Sticky: a later successful append cannot restore an earlier missing
|
|
273
|
+
// JSONL event, so the transcript remains degraded for this instance.
|
|
274
|
+
this.dirty = true;
|
|
275
|
+
this.lastFlushFailure = failure;
|
|
276
|
+
logger.error("transcript.flush_failed", { ...failure });
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
192
279
|
}
|
|
193
280
|
}
|
|
281
|
+
errorErrno(error) {
|
|
282
|
+
const err = error;
|
|
283
|
+
if (typeof err?.errno === "number" || typeof err?.errno === "string")
|
|
284
|
+
return err.errno;
|
|
285
|
+
if (typeof err?.code === "string")
|
|
286
|
+
return err.code;
|
|
287
|
+
return "UNKNOWN";
|
|
288
|
+
}
|
|
289
|
+
errorMessage(error) {
|
|
290
|
+
return error instanceof Error ? error.message : String(error);
|
|
291
|
+
}
|
|
194
292
|
/**
|
|
195
293
|
* Repair tool_result pairing issues:
|
|
196
294
|
* - Orphaned tool_results (no matching tool_use) get removed
|
|
@@ -227,6 +325,111 @@ export class Transcript {
|
|
|
227
325
|
return true;
|
|
228
326
|
});
|
|
229
327
|
}
|
|
328
|
+
static readEvents(filePath) {
|
|
329
|
+
let raw;
|
|
330
|
+
try {
|
|
331
|
+
raw = readFileSync(filePath, "utf-8");
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return { events: [], malformedLineCount: 0 };
|
|
335
|
+
}
|
|
336
|
+
const lines = raw.split("\n").filter((line) => line.trim().length > 0);
|
|
337
|
+
const events = [];
|
|
338
|
+
let malformedLineCount = 0;
|
|
339
|
+
for (const line of lines) {
|
|
340
|
+
try {
|
|
341
|
+
events.push(JSON.parse(line));
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
malformedLineCount++;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return { events, malformedLineCount };
|
|
348
|
+
}
|
|
349
|
+
static eventsToMessages(events) {
|
|
350
|
+
const messages = [];
|
|
351
|
+
for (const event of events) {
|
|
352
|
+
switch (event.type) {
|
|
353
|
+
case "message": {
|
|
354
|
+
const { role, content } = event.data;
|
|
355
|
+
messages.push({ role, content });
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
case "tool_use":
|
|
359
|
+
break;
|
|
360
|
+
case "tool_result": {
|
|
361
|
+
const { toolCallId, result, error, contentBlocks } = event.data;
|
|
362
|
+
const block = {
|
|
363
|
+
type: "tool_result",
|
|
364
|
+
tool_use_id: toolCallId,
|
|
365
|
+
content: error
|
|
366
|
+
? `Error: ${error}`
|
|
367
|
+
: Array.isArray(contentBlocks) && contentBlocks.length > 0
|
|
368
|
+
? contentBlocks
|
|
369
|
+
: (result ?? "(no output)"),
|
|
370
|
+
};
|
|
371
|
+
const last = messages[messages.length - 1];
|
|
372
|
+
if (last?.role === "user" && Array.isArray(last.content)) {
|
|
373
|
+
last.content.push(block);
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
messages.push({ role: "user", content: [block] });
|
|
377
|
+
}
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
case "summary": {
|
|
381
|
+
const { summary } = event.data;
|
|
382
|
+
messages.push({
|
|
383
|
+
role: "user",
|
|
384
|
+
content: `<system-reminder>Previous conversation was summarized:\n${summary}</system-reminder>`,
|
|
385
|
+
});
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
case "context_transfer": {
|
|
389
|
+
const { summary, handoffId } = event.data;
|
|
390
|
+
messages.push({
|
|
391
|
+
role: "user",
|
|
392
|
+
content: handoffId
|
|
393
|
+
? `<system-reminder>Session handoff received:\n${summary}</system-reminder>`
|
|
394
|
+
: `<system-reminder>Background context transferred from a selected conversation range:\n${summary}</system-reminder>`,
|
|
395
|
+
});
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return messages;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Select one inclusive, stable event-id range and project only LLM-context
|
|
404
|
+
* events from it. Audit/UI events remain part of sourceEventCount but never
|
|
405
|
+
* enter the package prompt.
|
|
406
|
+
*/
|
|
407
|
+
static selectContextRange(events, range) {
|
|
408
|
+
const fromMatches = events
|
|
409
|
+
.map((event, index) => (event.id === range.fromEventId ? index : -1))
|
|
410
|
+
.filter((index) => index >= 0);
|
|
411
|
+
const toMatches = events
|
|
412
|
+
.map((event, index) => (event.id === range.toEventId ? index : -1))
|
|
413
|
+
.filter((index) => index >= 0);
|
|
414
|
+
if (fromMatches.length !== 1 || toMatches.length !== 1) {
|
|
415
|
+
throw new Error("Context range endpoints must each identify exactly one source event");
|
|
416
|
+
}
|
|
417
|
+
const fromIndex = fromMatches[0];
|
|
418
|
+
const toIndex = toMatches[0];
|
|
419
|
+
if (fromIndex > toIndex)
|
|
420
|
+
throw new Error("Context range endpoints are out of order");
|
|
421
|
+
const frozen = structuredClone(events.slice(fromIndex, toIndex + 1));
|
|
422
|
+
if (frozen[0]?.type === "session_meta" || frozen.at(-1)?.type === "session_meta") {
|
|
423
|
+
throw new Error("Context range cannot use session metadata as a boundary");
|
|
424
|
+
}
|
|
425
|
+
const selected = frozen.filter((event) => CONTEXT_EVENT_TYPES.has(event.type));
|
|
426
|
+
validateSelectedToolPairs(selected);
|
|
427
|
+
return {
|
|
428
|
+
events: selected,
|
|
429
|
+
messages: Transcript.eventsToMessages(selected),
|
|
430
|
+
sourceEventCount: frozen.length,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
230
433
|
static loadFromFile(filePath) {
|
|
231
434
|
const transcript = new Transcript(filePath);
|
|
232
435
|
if (!existsSync(filePath))
|
|
@@ -250,3 +453,71 @@ export class Transcript {
|
|
|
250
453
|
return transcript;
|
|
251
454
|
}
|
|
252
455
|
}
|
|
456
|
+
function isEngineResultReceipt(value) {
|
|
457
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
458
|
+
return false;
|
|
459
|
+
const result = value;
|
|
460
|
+
const usage = result.usage;
|
|
461
|
+
return (typeof result.text === "string" &&
|
|
462
|
+
typeof result.reason === "string" &&
|
|
463
|
+
typeof result.sessionId === "string" &&
|
|
464
|
+
typeof result.turnCount === "number" &&
|
|
465
|
+
Number.isSafeInteger(result.turnCount) &&
|
|
466
|
+
Boolean(usage) &&
|
|
467
|
+
typeof usage?.promptTokens === "number" &&
|
|
468
|
+
typeof usage?.completionTokens === "number" &&
|
|
469
|
+
typeof usage?.totalTokens === "number");
|
|
470
|
+
}
|
|
471
|
+
function validateSelectedToolPairs(events) {
|
|
472
|
+
const providerUses = [];
|
|
473
|
+
const metadataUses = [];
|
|
474
|
+
const results = [];
|
|
475
|
+
for (const event of events) {
|
|
476
|
+
if (event.type === "message") {
|
|
477
|
+
const content = event.data.content;
|
|
478
|
+
if (!Array.isArray(content))
|
|
479
|
+
continue;
|
|
480
|
+
for (const block of content) {
|
|
481
|
+
if (block.type === "tool_use" && typeof block.id === "string")
|
|
482
|
+
providerUses.push(block.id);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
else if (event.type === "tool_use") {
|
|
486
|
+
if (typeof event.data.toolCallId === "string")
|
|
487
|
+
metadataUses.push(event.data.toolCallId);
|
|
488
|
+
}
|
|
489
|
+
else if (event.type === "tool_result") {
|
|
490
|
+
if (typeof event.data.toolCallId === "string")
|
|
491
|
+
results.push(event.data.toolCallId);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
if (new Set(providerUses).size !== providerUses.length) {
|
|
495
|
+
throw new Error("Context range contains duplicate provider tool metadata");
|
|
496
|
+
}
|
|
497
|
+
if (new Set(metadataUses).size !== metadataUses.length) {
|
|
498
|
+
throw new Error("Context range contains duplicate tool metadata");
|
|
499
|
+
}
|
|
500
|
+
if (new Set(results).size !== results.length) {
|
|
501
|
+
throw new Error("Context range contains duplicate tool results");
|
|
502
|
+
}
|
|
503
|
+
if (providerUses.length !== metadataUses.length ||
|
|
504
|
+
providerUses.some((id, index) => metadataUses[index] !== id)) {
|
|
505
|
+
throw new Error("Context range has orphaned or mismatched tool metadata");
|
|
506
|
+
}
|
|
507
|
+
const pending = new Set();
|
|
508
|
+
for (const event of events) {
|
|
509
|
+
if (event.type === "tool_use") {
|
|
510
|
+
const id = event.data.toolCallId;
|
|
511
|
+
if (typeof id === "string")
|
|
512
|
+
pending.add(id);
|
|
513
|
+
}
|
|
514
|
+
else if (event.type === "tool_result") {
|
|
515
|
+
const id = event.data.toolCallId;
|
|
516
|
+
if (typeof id !== "string" || !pending.delete(id)) {
|
|
517
|
+
throw new Error("Context range contains an orphaned or out-of-order tool result");
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
if (pending.size > 0)
|
|
522
|
+
throw new Error("Context range ends with an unfinished tool round");
|
|
523
|
+
}
|
|
@@ -43,6 +43,46 @@ export declare const FEATURE_FLAGS: {
|
|
|
43
43
|
readonly default: false;
|
|
44
44
|
readonly description: "Capture full command stdout/stderr snapshots";
|
|
45
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* Run a session on an EXTERNAL Agent Runtime (Codex / Claude Code) instead of
|
|
48
|
+
* the native Engine.
|
|
49
|
+
*
|
|
50
|
+
* Default ON, which reverses the original §20 decision. The reasoning behind
|
|
51
|
+
* "off" was that the native path must not depend on an external binary — that
|
|
52
|
+
* still holds, and is now enforced by a better mechanism than a flag: the
|
|
53
|
+
* picker only lists a runtime whose binary is actually installed
|
|
54
|
+
* (external-runtime-availability.ts), and every non-prefixed model key still
|
|
55
|
+
* routes to the native Engine. A machine without `codex` sees exactly what it
|
|
56
|
+
* saw before.
|
|
57
|
+
*
|
|
58
|
+
* What the flag actually did in practice was hide the feature from everyone,
|
|
59
|
+
* including the people who installed Codex on purpose: the entries never
|
|
60
|
+
* appeared, with no hint that a setting was responsible. An opt-in nobody can
|
|
61
|
+
* discover is indistinguishable from a missing feature.
|
|
62
|
+
*
|
|
63
|
+
* Turning it off remains the escape hatch — it hides the entries outright.
|
|
64
|
+
*/
|
|
65
|
+
readonly external_agent_runtime: {
|
|
66
|
+
readonly default: true;
|
|
67
|
+
readonly description: "Allow a session to run on Codex or Claude Code instead of the native engine";
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Expose CodeShell Host Tools to an external runtime. Separate from the flag
|
|
71
|
+
* above so the runtime can be trialled with NO tool surface at all — §20 asks
|
|
72
|
+
* for exactly that split, because the tool bridge is the part that carries the
|
|
73
|
+
* security burden.
|
|
74
|
+
*
|
|
75
|
+
* Also default ON now, for a blunt reason: with it off the runtime has an
|
|
76
|
+
* EMPTY tool surface — no skills, no memory, no file access — which is not a
|
|
77
|
+
* usable Agent Runtime, so shipping that as the default just means the
|
|
78
|
+
* feature appears broken. Every exposed tool still executes through
|
|
79
|
+
* ToolExecutor, so the user's permission rules and the approval dialog apply
|
|
80
|
+
* exactly as they do on the native path.
|
|
81
|
+
*/
|
|
82
|
+
readonly external_host_tools: {
|
|
83
|
+
readonly default: true;
|
|
84
|
+
readonly description: "Expose allowlisted CodeShell tools to an external Agent Runtime";
|
|
85
|
+
};
|
|
46
86
|
};
|
|
47
87
|
export type FeatureFlagName = keyof typeof FEATURE_FLAGS;
|
|
48
88
|
/** The settings overlay shape: a partial map of known flags → boolean. */
|
|
@@ -28,6 +28,46 @@ export const FEATURE_FLAGS = {
|
|
|
28
28
|
undo: { default: false, description: "Per-session file undo (/undo)" },
|
|
29
29
|
/** Shell snapshot: capture full stdout/stderr of commands. */
|
|
30
30
|
shell_snapshot: { default: false, description: "Capture full command stdout/stderr snapshots" },
|
|
31
|
+
/**
|
|
32
|
+
* Run a session on an EXTERNAL Agent Runtime (Codex / Claude Code) instead of
|
|
33
|
+
* the native Engine.
|
|
34
|
+
*
|
|
35
|
+
* Default ON, which reverses the original §20 decision. The reasoning behind
|
|
36
|
+
* "off" was that the native path must not depend on an external binary — that
|
|
37
|
+
* still holds, and is now enforced by a better mechanism than a flag: the
|
|
38
|
+
* picker only lists a runtime whose binary is actually installed
|
|
39
|
+
* (external-runtime-availability.ts), and every non-prefixed model key still
|
|
40
|
+
* routes to the native Engine. A machine without `codex` sees exactly what it
|
|
41
|
+
* saw before.
|
|
42
|
+
*
|
|
43
|
+
* What the flag actually did in practice was hide the feature from everyone,
|
|
44
|
+
* including the people who installed Codex on purpose: the entries never
|
|
45
|
+
* appeared, with no hint that a setting was responsible. An opt-in nobody can
|
|
46
|
+
* discover is indistinguishable from a missing feature.
|
|
47
|
+
*
|
|
48
|
+
* Turning it off remains the escape hatch — it hides the entries outright.
|
|
49
|
+
*/
|
|
50
|
+
external_agent_runtime: {
|
|
51
|
+
default: true,
|
|
52
|
+
description: "Allow a session to run on Codex or Claude Code instead of the native engine",
|
|
53
|
+
},
|
|
54
|
+
/**
|
|
55
|
+
* Expose CodeShell Host Tools to an external runtime. Separate from the flag
|
|
56
|
+
* above so the runtime can be trialled with NO tool surface at all — §20 asks
|
|
57
|
+
* for exactly that split, because the tool bridge is the part that carries the
|
|
58
|
+
* security burden.
|
|
59
|
+
*
|
|
60
|
+
* Also default ON now, for a blunt reason: with it off the runtime has an
|
|
61
|
+
* EMPTY tool surface — no skills, no memory, no file access — which is not a
|
|
62
|
+
* usable Agent Runtime, so shipping that as the default just means the
|
|
63
|
+
* feature appears broken. Every exposed tool still executes through
|
|
64
|
+
* ToolExecutor, so the user's permission rules and the approval dialog apply
|
|
65
|
+
* exactly as they do on the native path.
|
|
66
|
+
*/
|
|
67
|
+
external_host_tools: {
|
|
68
|
+
default: true,
|
|
69
|
+
description: "Expose allowlisted CodeShell tools to an external Agent Runtime",
|
|
70
|
+
},
|
|
31
71
|
};
|
|
32
72
|
/** All known flag names, for iteration (e.g. the /features listing). */
|
|
33
73
|
export function featureFlagNames() {
|
|
@@ -71,6 +71,15 @@ export declare class SettingsManager {
|
|
|
71
71
|
* host (desktop) passes the real trust decision from its trust-store.
|
|
72
72
|
*/
|
|
73
73
|
private readonly projectTrusted;
|
|
74
|
+
/**
|
|
75
|
+
* Override the user-level config directory (the `~/.code-shell` layer:
|
|
76
|
+
* settings.managed.json / settings.json live directly inside it). When
|
|
77
|
+
* absent the manager keeps today's behavior — `join(userHome(),
|
|
78
|
+
* ".code-shell")` resolved per call so `$HOME` overrides still work.
|
|
79
|
+
* Injection point for identity-scoped server deployments (a per-user
|
|
80
|
+
* worker passes `<dataRoot>` here instead of relocating `$HOME`).
|
|
81
|
+
*/
|
|
82
|
+
private readonly userConfigDirOverride?;
|
|
74
83
|
private sources;
|
|
75
84
|
private merged;
|
|
76
85
|
constructor(cwd?: string, scope?: SettingsScope,
|
|
@@ -86,7 +95,18 @@ export declare class SettingsManager {
|
|
|
86
95
|
* Defaults to `true` so existing embedders/tests keep their behavior; the
|
|
87
96
|
* host (desktop) passes the real trust decision from its trust-store.
|
|
88
97
|
*/
|
|
89
|
-
projectTrusted?: boolean
|
|
98
|
+
projectTrusted?: boolean,
|
|
99
|
+
/**
|
|
100
|
+
* Override the user-level config directory (the `~/.code-shell` layer:
|
|
101
|
+
* settings.managed.json / settings.json live directly inside it). When
|
|
102
|
+
* absent the manager keeps today's behavior — `join(userHome(),
|
|
103
|
+
* ".code-shell")` resolved per call so `$HOME` overrides still work.
|
|
104
|
+
* Injection point for identity-scoped server deployments (a per-user
|
|
105
|
+
* worker passes `<dataRoot>` here instead of relocating `$HOME`).
|
|
106
|
+
*/
|
|
107
|
+
userConfigDirOverride?: string | undefined);
|
|
108
|
+
/** User-layer config dir: explicit override wins, else `~/.code-shell`. */
|
|
109
|
+
private userConfigDir;
|
|
90
110
|
/**
|
|
91
111
|
* Load settings from all sources.
|
|
92
112
|
*/
|
|
@@ -143,6 +163,24 @@ export declare class SettingsManager {
|
|
|
143
163
|
private projectSettingsPath;
|
|
144
164
|
private readJsonObject;
|
|
145
165
|
private atomicWriteJson;
|
|
166
|
+
/**
|
|
167
|
+
* Read-modify-write a settings file under a cross-process lock.
|
|
168
|
+
*
|
|
169
|
+
* Atomic rename alone only prevents a half-written file; it does NOT prevent a
|
|
170
|
+
* lost update. Every writer here used to read its own snapshot outside any
|
|
171
|
+
* lock, so two processes changing DIFFERENT keys still clobbered each other:
|
|
172
|
+
* 48 concurrent writers each setting a distinct key left only 17 keys on disk.
|
|
173
|
+
*
|
|
174
|
+
* Real multi-writer paths, not a theoretical concern: the desktop settings
|
|
175
|
+
* page, the Agent `Config` tool, an automation worker, the TUI and a second
|
|
176
|
+
* desktop instance all write the same files. The desktop settings service
|
|
177
|
+
* already locked correctly; this brings Core's own writers onto the same
|
|
178
|
+
* protocol so they interlock rather than race past one another.
|
|
179
|
+
*
|
|
180
|
+
* `mutate` receives the CURRENT on-disk object (re-read inside the lock) and
|
|
181
|
+
* mutates it in place; returning false skips the write.
|
|
182
|
+
*/
|
|
183
|
+
private mutateSettingsFile;
|
|
146
184
|
private loadJsonFile;
|
|
147
185
|
private deepMerge;
|
|
148
186
|
}
|