@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/run/RunManager.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { nanoid } from "nanoid";
|
|
14
14
|
import { logger } from "../logging/logger.js";
|
|
15
15
|
import { RunQueue } from "./RunQueue.js";
|
|
16
|
-
import { EngineRunner } from "./EngineRunner.js";
|
|
16
|
+
import { EngineRunner, } from "./EngineRunner.js";
|
|
17
17
|
import { CheckpointWriter } from "./CheckpointWriter.js";
|
|
18
18
|
import { ArtifactTracker } from "./ArtifactTracker.js";
|
|
19
19
|
import { RunLock } from "./RunLock.js";
|
|
@@ -21,6 +21,8 @@ import { Heartbeat } from "./Heartbeat.js";
|
|
|
21
21
|
import { NoopEvaluator } from "./Evaluator.js";
|
|
22
22
|
import { assertSafeRunFileId, assertSafeRunId } from "./ids.js";
|
|
23
23
|
import { VALID_TRANSITIONS } from "./types.js";
|
|
24
|
+
import { composeArtifactDetectors, resolveCapabilities, } from "../capabilities/index.js";
|
|
25
|
+
import { resolveAgentPreset } from "../preset/index.js";
|
|
24
26
|
function hasOwnString(value, key) {
|
|
25
27
|
return (value !== undefined &&
|
|
26
28
|
Object.prototype.hasOwnProperty.call(value, key) &&
|
|
@@ -32,9 +34,19 @@ export class RunManager {
|
|
|
32
34
|
runner;
|
|
33
35
|
lock;
|
|
34
36
|
heartbeat;
|
|
37
|
+
/**
|
|
38
|
+
* Page size for crash-recovery scans (see listAllByStatus).
|
|
39
|
+
*
|
|
40
|
+
* Deliberately NOT a constructor option: hosts have no reason to tune it, and
|
|
41
|
+
* exposing it would invite a caller to re-introduce the UI's 50-row default.
|
|
42
|
+
* Tests override it to exercise the multi-page loop cheaply.
|
|
43
|
+
*/
|
|
44
|
+
recoverPageSize = 200;
|
|
35
45
|
evaluator;
|
|
36
46
|
defaultTags;
|
|
37
47
|
defaultMetadata;
|
|
48
|
+
defaultPreset;
|
|
49
|
+
artifactDetectors;
|
|
38
50
|
subscribers = new Map();
|
|
39
51
|
abortControllers = new Map();
|
|
40
52
|
/** Active execution handles — used to resolve pending approvals/input while Engine is suspended */
|
|
@@ -53,10 +65,13 @@ export class RunManager {
|
|
|
53
65
|
constructor(config) {
|
|
54
66
|
this.store = config.store;
|
|
55
67
|
this.queue = new RunQueue({ concurrency: config.concurrency ?? 1 });
|
|
68
|
+
const localCapabilities = config.capabilities ??
|
|
69
|
+
(isRunExecutor(config.executor) ? [] : (config.executor.capabilities ?? []));
|
|
70
|
+
const capabilities = resolveCapabilities(localCapabilities);
|
|
56
71
|
// Accept either a RunExecutor instance or an EngineRunnerConfig
|
|
57
72
|
this.runner = isRunExecutor(config.executor)
|
|
58
73
|
? config.executor
|
|
59
|
-
: new EngineRunner(config.executor);
|
|
74
|
+
: new EngineRunner({ ...config.executor, capabilities });
|
|
60
75
|
this.lock = new RunLock({
|
|
61
76
|
runsDir: config.runsDir,
|
|
62
77
|
staleMs: config.staleLockMs,
|
|
@@ -68,6 +83,8 @@ export class RunManager {
|
|
|
68
83
|
this.evaluator = config.evaluator ?? new NoopEvaluator();
|
|
69
84
|
this.defaultTags = config.defaultTags ?? [];
|
|
70
85
|
this.defaultMetadata = config.defaultMetadata ?? {};
|
|
86
|
+
this.defaultPreset = resolveAgentPreset(undefined, capabilities).name;
|
|
87
|
+
this.artifactDetectors = composeArtifactDetectors(capabilities);
|
|
71
88
|
// Wire queue executor
|
|
72
89
|
this.queue.setExecutor((runId) => this.executeRun(runId));
|
|
73
90
|
}
|
|
@@ -81,7 +98,7 @@ export class RunManager {
|
|
|
81
98
|
const snapshot = {
|
|
82
99
|
runId,
|
|
83
100
|
objective: input.objective,
|
|
84
|
-
preset: input.preset ??
|
|
101
|
+
preset: input.preset ?? this.defaultPreset,
|
|
85
102
|
cwd: input.cwd ?? process.cwd(),
|
|
86
103
|
status: "queued",
|
|
87
104
|
createdAt: now,
|
|
@@ -280,14 +297,26 @@ export class RunManager {
|
|
|
280
297
|
* Returns the IDs of recovered runs.
|
|
281
298
|
*/
|
|
282
299
|
async recover() {
|
|
283
|
-
const runs = await this.
|
|
300
|
+
const runs = await this.listAllByStatus("running");
|
|
284
301
|
const recovered = [];
|
|
285
302
|
for (const run of runs) {
|
|
286
303
|
const processAlive = this.heartbeat.isProcessAlive(run.runId);
|
|
287
304
|
const stale = this.heartbeat.isStale(run.runId);
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
305
|
+
// Process liveness has VETO power: never recover a run whose owning
|
|
306
|
+
// process is still alive. A live process can miss a heartbeat window for
|
|
307
|
+
// benign reasons (a long synchronous tool call, GC pause, a suspended
|
|
308
|
+
// laptop), and recovering it force-unlocks the lock and re-queues work
|
|
309
|
+
// that is still executing — the same run then runs twice.
|
|
310
|
+
//
|
|
311
|
+
// This matches the documented contract above ("stale AND dead → recover").
|
|
312
|
+
// The old condition (`processAlive && !stale`) recovered a live-but-stale
|
|
313
|
+
// run, which was reproducible with a run owning the current PID and a
|
|
314
|
+
// 60s-old heartbeat.
|
|
315
|
+
if (processAlive || !stale) {
|
|
316
|
+
logger.info("run.recover.skip", {
|
|
317
|
+
runId: run.runId,
|
|
318
|
+
reason: processAlive ? "process alive" : "heartbeat recent",
|
|
319
|
+
});
|
|
291
320
|
continue;
|
|
292
321
|
}
|
|
293
322
|
// Process is dead or heartbeat is stale — recover
|
|
@@ -324,7 +353,7 @@ export class RunManager {
|
|
|
324
353
|
}
|
|
325
354
|
// Also check waiting runs with stale heartbeats (process died while waiting)
|
|
326
355
|
for (const status of ["waiting_input", "waiting_approval"]) {
|
|
327
|
-
const waitingRuns = await this.
|
|
356
|
+
const waitingRuns = await this.listAllByStatus(status);
|
|
328
357
|
for (const run of waitingRuns) {
|
|
329
358
|
const stale = this.heartbeat.isStale(run.runId);
|
|
330
359
|
if (stale && !this.heartbeat.isProcessAlive(run.runId)) {
|
|
@@ -337,6 +366,45 @@ export class RunManager {
|
|
|
337
366
|
}
|
|
338
367
|
return recovered;
|
|
339
368
|
}
|
|
369
|
+
/**
|
|
370
|
+
* Drain EVERY run with the given status, page by page.
|
|
371
|
+
*
|
|
372
|
+
* `store.list()` defaults to `limit: 50` because it backs a UI list. Crash
|
|
373
|
+
* recovery must not inherit a UI page size: with 55 stale running runs, the
|
|
374
|
+
* bare `list({ status })` call recovered the first 50 and left the remaining 5
|
|
375
|
+
* pinned in "running" forever (no later pass would revisit them, because
|
|
376
|
+
* recovery only runs at startup).
|
|
377
|
+
*
|
|
378
|
+
* Pages until a short page arrives. `maxPages` is a runaway guard for a store
|
|
379
|
+
* that ignores `offset` — without it a buggy store would loop forever.
|
|
380
|
+
*/
|
|
381
|
+
async listAllByStatus(status) {
|
|
382
|
+
// Overridable so a test can force the multi-page path without creating more
|
|
383
|
+
// rows than the production page size (which cost ~30s under load).
|
|
384
|
+
const pageSize = this.recoverPageSize;
|
|
385
|
+
const maxPages = 10_000;
|
|
386
|
+
const all = [];
|
|
387
|
+
const seen = new Set();
|
|
388
|
+
for (let page = 0; page < maxPages; page += 1) {
|
|
389
|
+
const batch = await this.store.list({
|
|
390
|
+
status,
|
|
391
|
+
limit: pageSize,
|
|
392
|
+
offset: page * pageSize,
|
|
393
|
+
});
|
|
394
|
+
for (const run of batch) {
|
|
395
|
+
// Dedupe defensively: concurrent writes can shift the offset window and
|
|
396
|
+
// surface the same run twice, which would double-recover it.
|
|
397
|
+
if (seen.has(run.runId))
|
|
398
|
+
continue;
|
|
399
|
+
seen.add(run.runId);
|
|
400
|
+
all.push(run);
|
|
401
|
+
}
|
|
402
|
+
if (batch.length < pageSize)
|
|
403
|
+
return all;
|
|
404
|
+
}
|
|
405
|
+
logger.warn("run.recover.page_limit", { status, scanned: all.length });
|
|
406
|
+
return all;
|
|
407
|
+
}
|
|
340
408
|
/**
|
|
341
409
|
* Graceful shutdown — stop all heartbeats and release all locks.
|
|
342
410
|
*/
|
|
@@ -388,7 +456,11 @@ export class RunManager {
|
|
|
388
456
|
objective: run.objective,
|
|
389
457
|
store: this.store,
|
|
390
458
|
});
|
|
391
|
-
const artifactTracker = new ArtifactTracker({
|
|
459
|
+
const artifactTracker = new ArtifactTracker({
|
|
460
|
+
runId,
|
|
461
|
+
store: this.store,
|
|
462
|
+
detectors: this.artifactDetectors,
|
|
463
|
+
});
|
|
392
464
|
// Build lifecycle hooks so Engine can notify us about approval/input needs
|
|
393
465
|
const lifecycleHooks = {
|
|
394
466
|
onApprovalNeeded: async (request) => {
|
|
@@ -413,8 +485,7 @@ export class RunManager {
|
|
|
413
485
|
// suppresses sub-agent session_started upstream (engine.ts:830-835),
|
|
414
486
|
// but a custom RunExecutor could forward sub-agent events — and only
|
|
415
487
|
// the MAIN run's session should identify the run, never a sub-agent's.
|
|
416
|
-
if (event.type === "session_started" &&
|
|
417
|
-
!event.agentId) {
|
|
488
|
+
if (event.type === "session_started" && !event.agentId) {
|
|
418
489
|
try {
|
|
419
490
|
const run = await this.getOrThrow(runId);
|
|
420
491
|
if (run.sessionId !== event.sessionId) {
|
package/dist/run/factory.d.ts
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
import type { LLMConfig, PermissionMode } from "../types.js";
|
|
21
21
|
import type { EngineConfig, EngineHookConfig } from "../engine/types.js";
|
|
22
22
|
import type { Evaluator } from "./Evaluator.js";
|
|
23
|
+
import type { CapabilityModule } from "../capabilities/index.js";
|
|
23
24
|
import { RunManager } from "./RunManager.js";
|
|
24
25
|
export interface CreateRunManagerOptions {
|
|
25
26
|
/** LLM configuration (required). */
|
|
@@ -63,6 +64,8 @@ export interface CreateRunManagerOptions {
|
|
|
63
64
|
* the interactive run-aware backend.
|
|
64
65
|
*/
|
|
65
66
|
approvalBackend?: import("../tool-system/permission.js").ApprovalBackend;
|
|
67
|
+
/** Product/domain capabilities installed into each Engine. */
|
|
68
|
+
capabilities?: readonly CapabilityModule[];
|
|
66
69
|
}
|
|
67
70
|
/**
|
|
68
71
|
* Create a fully configured RunManager with one call.
|
package/dist/run/factory.js
CHANGED
|
@@ -41,6 +41,7 @@ export function createRunManager(options) {
|
|
|
41
41
|
customSystemPrompt: options.customSystemPrompt,
|
|
42
42
|
appendSystemPrompt: options.appendSystemPrompt,
|
|
43
43
|
hooks: options.hooks,
|
|
44
|
+
capabilities: options.capabilities,
|
|
44
45
|
...(options.approvalBackend ? { approvalBackend: options.approvalBackend } : {}),
|
|
45
46
|
},
|
|
46
47
|
concurrency: options.concurrency ?? 1,
|
|
@@ -48,5 +49,6 @@ export function createRunManager(options) {
|
|
|
48
49
|
evaluator: options.evaluator,
|
|
49
50
|
defaultTags: options.defaultTags,
|
|
50
51
|
defaultMetadata: options.defaultMetadata,
|
|
52
|
+
capabilities: options.capabilities,
|
|
51
53
|
});
|
|
52
54
|
}
|
|
@@ -52,6 +52,12 @@ export interface SafeSpawnOptions {
|
|
|
52
52
|
ioDrainGraceMs?: number;
|
|
53
53
|
/** Optional cancellation signal. If already aborted, SafeSpawn resolves immediately without spawning. */
|
|
54
54
|
signal?: AbortSignal;
|
|
55
|
+
/**
|
|
56
|
+
* POSIX only: launch the direct child as a process-group leader so timeout
|
|
57
|
+
* and abort terminate helpers such as git-remote-https as well. Windows
|
|
58
|
+
* already uses taskkill /T for direct children.
|
|
59
|
+
*/
|
|
60
|
+
processGroup?: boolean;
|
|
55
61
|
}
|
|
56
62
|
export interface SafeSpawnShellOptions extends SafeSpawnOptions {
|
|
57
63
|
/** Optional sandbox to wrap the command through. Required for shell-mode. If omitted, the command runs through `shell ?? /bin/bash -c`. */
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
*/
|
|
36
36
|
import { spawn } from "node:child_process";
|
|
37
37
|
import { StringDecoder } from "node:string_decoder";
|
|
38
|
-
import { resolveSpawnTarget, defaultShellBinary, killChildTree, killProcessGroup } from "./spawn-common.js";
|
|
38
|
+
import { resolveSpawnTarget, defaultShellBinary, killChildTree, killProcessGroup, } from "./spawn-common.js";
|
|
39
39
|
export const DEFAULT_MAX_OUTPUT_BYTES = 1_000_000;
|
|
40
40
|
export const DEFAULT_IO_DRAIN_GRACE_MS = 100;
|
|
41
41
|
const TIMEOUT_SIGKILL_GRACE_MS = 2000;
|
|
@@ -51,6 +51,7 @@ export function safeSpawn(file, args, opts) {
|
|
|
51
51
|
opts,
|
|
52
52
|
cleanup: undefined,
|
|
53
53
|
resolveMs: undefined,
|
|
54
|
+
detached: opts.processGroup === true && process.platform !== "win32",
|
|
54
55
|
});
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
@@ -85,7 +86,7 @@ export function safeSpawnShell(command, opts) {
|
|
|
85
86
|
detached: true,
|
|
86
87
|
});
|
|
87
88
|
}
|
|
88
|
-
function runLifecycle({ file, args, opts, cleanup, resolveMs, detached }) {
|
|
89
|
+
function runLifecycle({ file, args, opts, cleanup, resolveMs, detached, }) {
|
|
89
90
|
const maxBytes = opts.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
90
91
|
const abortGrace = opts.ioDrainGraceMs ?? DEFAULT_IO_DRAIN_GRACE_MS;
|
|
91
92
|
const lifecycleStartedAt = spawnProfileEnabled() ? performance.now() : 0;
|
|
@@ -225,11 +226,7 @@ function runLifecycle({ file, args, opts, cleanup, resolveMs, detached }) {
|
|
|
225
226
|
// throw above, so we surface the same reason. If timeout or abort
|
|
226
227
|
// fired concurrently, give those precedence — the user-facing cause
|
|
227
228
|
// is the cancel/timeout, not the resulting process death.
|
|
228
|
-
const reason = timedOut
|
|
229
|
-
? "timeout"
|
|
230
|
-
: aborted
|
|
231
|
-
? "aborted"
|
|
232
|
-
: "spawn_failed";
|
|
229
|
+
const reason = timedOut ? "timeout" : aborted ? "aborted" : "spawn_failed";
|
|
233
230
|
finish({
|
|
234
231
|
reason,
|
|
235
232
|
stdout,
|
|
@@ -268,11 +265,7 @@ function runLifecycle({ file, args, opts, cleanup, resolveMs, detached }) {
|
|
|
268
265
|
stderr += tailErr;
|
|
269
266
|
}
|
|
270
267
|
}
|
|
271
|
-
const reason = timedOut
|
|
272
|
-
? "timeout"
|
|
273
|
-
: aborted
|
|
274
|
-
? "aborted"
|
|
275
|
-
: "ok";
|
|
268
|
+
const reason = timedOut ? "timeout" : aborted ? "aborted" : "ok";
|
|
276
269
|
finish({
|
|
277
270
|
reason,
|
|
278
271
|
stdout,
|
|
@@ -305,7 +298,9 @@ function safeCleanup(cleanup) {
|
|
|
305
298
|
try {
|
|
306
299
|
cleanup();
|
|
307
300
|
}
|
|
308
|
-
catch {
|
|
301
|
+
catch {
|
|
302
|
+
/* best-effort */
|
|
303
|
+
}
|
|
309
304
|
}
|
|
310
305
|
function emptyResult(overrides) {
|
|
311
306
|
return {
|
|
@@ -19,11 +19,23 @@ export declare function shouldAutoDream(config?: AutoDreamConfig): boolean;
|
|
|
19
19
|
/**
|
|
20
20
|
* Record that a session was completed (increment counter).
|
|
21
21
|
*/
|
|
22
|
+
/**
|
|
23
|
+
* Sessions counted since the last consolidation.
|
|
24
|
+
*
|
|
25
|
+
* Callers snapshot this BEFORE starting an async dream run and pass it back to
|
|
26
|
+
* `recordDreamComplete`, so sessions finishing mid-run are not swallowed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function sessionsSinceLastDream(): number;
|
|
22
29
|
export declare function recordSession(): void;
|
|
23
30
|
/**
|
|
24
31
|
* Record that a dream run completed.
|
|
32
|
+
*
|
|
33
|
+
* `consumed` is how many sessions the finished run accounted for — captured
|
|
34
|
+
* BEFORE it started. Subtracting it (instead of zeroing) preserves sessions that
|
|
35
|
+
* completed while the run was in flight: `runDream()` is async, so blindly
|
|
36
|
+
* resetting to 0 threw away increments that belonged to the next cycle.
|
|
25
37
|
*/
|
|
26
|
-
export declare function recordDreamComplete(): void;
|
|
38
|
+
export declare function recordDreamComplete(consumed?: number): void;
|
|
27
39
|
/**
|
|
28
40
|
* System prompt for the auto-dream tool-call loop.
|
|
29
41
|
*
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { resolveMemoryBaseDir } from "../session/memory.js";
|
|
10
|
+
import { mutateJsonFile } from "../utils/file-mutex.js";
|
|
10
11
|
const DEFAULT_CONFIG = {
|
|
11
12
|
minSessionsBetween: 5,
|
|
12
13
|
minTimeBetween: 24 * 60 * 60 * 1000, // 24 hours
|
|
@@ -33,6 +34,33 @@ function saveState(state) {
|
|
|
33
34
|
mkdirSync(resolveMemoryBaseDir(), { recursive: true });
|
|
34
35
|
writeFileSync(stateFile, JSON.stringify(state, null, 2), "utf-8");
|
|
35
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Read-modify-write the cadence state under a cross-process lock.
|
|
39
|
+
*
|
|
40
|
+
* The reload happens inside the lock, so a writer that lost the race still sees
|
|
41
|
+
* the winner's value and applies its own change on top instead of overwriting it.
|
|
42
|
+
*/
|
|
43
|
+
function mutateState(change) {
|
|
44
|
+
mkdirSync(resolveMemoryBaseDir(), { recursive: true });
|
|
45
|
+
mutateJsonFile(getStateFile(), {
|
|
46
|
+
parse: (raw) => {
|
|
47
|
+
if (raw === undefined)
|
|
48
|
+
return { lastDreamAt: null, sessionsSinceLastDream: 0 };
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(raw);
|
|
51
|
+
return {
|
|
52
|
+
lastDreamAt: parsed.lastDreamAt ?? null,
|
|
53
|
+
sessionsSinceLastDream: Number(parsed.sessionsSinceLastDream) || 0,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return { lastDreamAt: null, sessionsSinceLastDream: 0 };
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
serialize: (state) => JSON.stringify(state, null, 2),
|
|
61
|
+
mutation: (current) => ({ value: change(current) }),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
36
64
|
/**
|
|
37
65
|
* Check if auto-dream should run.
|
|
38
66
|
*/
|
|
@@ -54,19 +82,39 @@ export function shouldAutoDream(config = DEFAULT_CONFIG) {
|
|
|
54
82
|
/**
|
|
55
83
|
* Record that a session was completed (increment counter).
|
|
56
84
|
*/
|
|
85
|
+
/**
|
|
86
|
+
* Sessions counted since the last consolidation.
|
|
87
|
+
*
|
|
88
|
+
* Callers snapshot this BEFORE starting an async dream run and pass it back to
|
|
89
|
+
* `recordDreamComplete`, so sessions finishing mid-run are not swallowed.
|
|
90
|
+
*/
|
|
91
|
+
export function sessionsSinceLastDream() {
|
|
92
|
+
return loadState().sessionsSinceLastDream;
|
|
93
|
+
}
|
|
57
94
|
export function recordSession() {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
95
|
+
// Cross-process increment. Desktop worker, Desktop main/automation, TUI and a
|
|
96
|
+
// standalone agent server can share one CODE_SHELL_HOME, so this was a real
|
|
97
|
+
// multi-writer path: an unlocked read → +1 → write dropped nearly everything
|
|
98
|
+
// (48 concurrent processes recorded 1–2 increments). The cadence then never
|
|
99
|
+
// reached its threshold and auto-consolidation silently stopped happening.
|
|
100
|
+
mutateState((state) => ({
|
|
101
|
+
...state,
|
|
102
|
+
sessionsSinceLastDream: state.sessionsSinceLastDream + 1,
|
|
103
|
+
}));
|
|
61
104
|
}
|
|
62
105
|
/**
|
|
63
106
|
* Record that a dream run completed.
|
|
107
|
+
*
|
|
108
|
+
* `consumed` is how many sessions the finished run accounted for — captured
|
|
109
|
+
* BEFORE it started. Subtracting it (instead of zeroing) preserves sessions that
|
|
110
|
+
* completed while the run was in flight: `runDream()` is async, so blindly
|
|
111
|
+
* resetting to 0 threw away increments that belonged to the next cycle.
|
|
64
112
|
*/
|
|
65
|
-
export function recordDreamComplete() {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
113
|
+
export function recordDreamComplete(consumed) {
|
|
114
|
+
mutateState((state) => ({
|
|
115
|
+
lastDreamAt: new Date().toISOString(),
|
|
116
|
+
sessionsSinceLastDream: consumed === undefined ? 0 : Math.max(0, state.sessionsSinceLastDream - consumed),
|
|
117
|
+
}));
|
|
70
118
|
}
|
|
71
119
|
/**
|
|
72
120
|
* System prompt for the auto-dream tool-call loop.
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
import type { LLMClientBase } from "../llm/client-base.js";
|
|
22
22
|
import type { ToolRegistry } from "../tool-system/registry.js";
|
|
23
23
|
import type { ToolContext } from "../tool-system/context.js";
|
|
24
|
+
import type { TokenUsage } from "../types.js";
|
|
24
25
|
export interface DreamConsolidationInput {
|
|
25
26
|
/** LLM client for the consolidation calls. */
|
|
26
27
|
llmClient: LLMClientBase;
|
|
@@ -36,6 +37,8 @@ export interface DreamConsolidationInput {
|
|
|
36
37
|
projectDir?: string;
|
|
37
38
|
/** For log attribution. */
|
|
38
39
|
sessionId?: string;
|
|
40
|
+
/** Owning Engine session/Goal recorder; process billing already happened. */
|
|
41
|
+
onUsage?: (usage: TokenUsage) => void;
|
|
39
42
|
}
|
|
40
43
|
export interface DreamConsolidationResult {
|
|
41
44
|
/** True if the loop ran (with or without writes); false if it bailed early. */
|
|
@@ -71,9 +71,12 @@ export async function runDreamConsolidation(input) {
|
|
|
71
71
|
messages,
|
|
72
72
|
tools: toolDefs,
|
|
73
73
|
maxTokens: 2048,
|
|
74
|
-
|
|
74
|
+
billingEnabled: true,
|
|
75
|
+
requestVisible: false,
|
|
75
76
|
reasoning: { mode: "off" },
|
|
76
77
|
});
|
|
78
|
+
if (resp.usage)
|
|
79
|
+
input.onUsage?.(resp.usage);
|
|
77
80
|
if (resp.toolCalls.length === 0) {
|
|
78
81
|
logger.info("memory.dream_finished", {
|
|
79
82
|
sessionId,
|
|
@@ -138,7 +141,10 @@ async function dispatchDreamTool(tc, toolRegistry, ctx, consumeWriteBudget) {
|
|
|
138
141
|
}
|
|
139
142
|
}
|
|
140
143
|
try {
|
|
141
|
-
|
|
144
|
+
// Portable profile memory is intentionally not part of automatic dream
|
|
145
|
+
// routing. Normal profile-bound runs may manage it explicitly, but the
|
|
146
|
+
// consolidation loop remains limited to its existing global/project stores.
|
|
147
|
+
const dreamCtx = { ...ctx, profileMemoryDir: undefined, __dreamLoop: true };
|
|
142
148
|
const result = await toolRegistry.executeTool(tc.toolName, tc.args, { ctx: dreamCtx });
|
|
143
149
|
if (result.isError)
|
|
144
150
|
return result.error ?? `Error executing ${tc.toolName}`;
|
|
@@ -156,6 +162,12 @@ function checkDreamWriteGuard(tc, ctx) {
|
|
|
156
162
|
error: `Error: dream loop may only write to scope "dream" or "user", got "${scope}".`,
|
|
157
163
|
};
|
|
158
164
|
}
|
|
165
|
+
if (tc.args?.location === "profile") {
|
|
166
|
+
return {
|
|
167
|
+
ok: false,
|
|
168
|
+
error: "Error: dream loop does not manage portable profile memory.",
|
|
169
|
+
};
|
|
170
|
+
}
|
|
159
171
|
const location = tc.args?.location === "global" ? "global" : "project";
|
|
160
172
|
const mm = new MemoryManager({
|
|
161
173
|
projectDir: location === "project" ? ctx.cwd : undefined,
|
package/dist/services/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Services index — re-exports all service modules.
|
|
3
3
|
*/
|
|
4
4
|
export { analytics, trackEvent } from "./analytics.js";
|
|
5
|
-
export { authorize, refreshToken, type OAuthConfig, type OAuthTokens } from "./oauth.js";
|
|
5
|
+
export { authorize, refreshToken, generatePKCE, createHardenedOAuthFetch, type OAuthConfig, type OAuthTokens, type OAuthAuthorizeOptions, type OAuthRefreshOptions, type HardenedOAuthFetchOptions, } from "./oauth.js";
|
|
6
6
|
export { notify, notifyComplete, notifyError } from "./notifier.js";
|
|
7
7
|
export { diagnostics } from "./diagnostics.js";
|
|
8
8
|
export { buildExtractionPrompt, parseExtractionResponse, type ExtractedMemory, } from "./extract-memories.js";
|
package/dist/services/index.js
CHANGED
|
@@ -8,7 +8,7 @@ export { analytics, trackEvent } from "./analytics.js";
|
|
|
8
8
|
// `microCompact` that truncated long *messages* by char count, unrelated
|
|
9
9
|
// to the tool_result-based microcompact in ContextManager). Removed to end
|
|
10
10
|
// the "which microcompact?" ambiguity — the source of truth is ContextManager.
|
|
11
|
-
export { authorize, refreshToken } from "./oauth.js";
|
|
11
|
+
export { authorize, refreshToken, generatePKCE, createHardenedOAuthFetch, } from "./oauth.js";
|
|
12
12
|
export { notify, notifyComplete, notifyError } from "./notifier.js";
|
|
13
13
|
export { diagnostics } from "./diagnostics.js";
|
|
14
14
|
export { buildExtractionPrompt, parseExtractionResponse, } from "./extract-memories.js";
|
|
@@ -17,7 +17,7 @@ import { buildExtractionPrompt, parseExtractionResponse, } from "./extract-memor
|
|
|
17
17
|
import { saveSessionMemory, buildSessionMemoryPrompt } from "./session-memory.js";
|
|
18
18
|
import { extractJSON } from "../utils/json.js";
|
|
19
19
|
import { redactSecrets } from "../logging/sanitize-messages.js";
|
|
20
|
-
import { shouldAutoDream, recordSession, recordDreamComplete, buildDreamSystemPrompt, buildDreamUserPrompt, } from "./auto-dream.js";
|
|
20
|
+
import { shouldAutoDream, recordSession, recordDreamComplete, sessionsSinceLastDream, buildDreamSystemPrompt, buildDreamUserPrompt, } from "./auto-dream.js";
|
|
21
21
|
import { applyGlobalDreamPromotionGate, detectUserDirectGlobalPreference, } from "./global-dream-promotion.js";
|
|
22
22
|
import { logger } from "../logging/logger.js";
|
|
23
23
|
export class MemoryOrchestrator {
|
|
@@ -259,13 +259,17 @@ export class MemoryOrchestrator {
|
|
|
259
259
|
? new MemoryManager({ scope: "dream" }).loadScope("dream")
|
|
260
260
|
: [];
|
|
261
261
|
if (userMems.length + dreamMems.length + globalDreamMems.length > 0) {
|
|
262
|
+
// Snapshot the cadence counter BEFORE the (async) run so sessions that
|
|
263
|
+
// finish while it is in flight are carried into the next cycle rather
|
|
264
|
+
// than being zeroed away on completion.
|
|
265
|
+
const consumed = sessionsSinceLastDream();
|
|
262
266
|
const ran = await this.options.runDream({
|
|
263
267
|
systemPrompt: buildDreamSystemPrompt(),
|
|
264
268
|
userPrompt: buildDreamUserPrompt(userMems, dreamMems, globalDreamMems),
|
|
265
269
|
projectDir: this.options.projectDir,
|
|
266
270
|
});
|
|
267
271
|
if (ran) {
|
|
268
|
-
recordDreamComplete();
|
|
272
|
+
recordDreamComplete(consumed);
|
|
269
273
|
dreamTriggered = true;
|
|
270
274
|
logger.info("memory.auto_dream_done", {
|
|
271
275
|
sessionId,
|
package/dist/services/oauth.d.ts
CHANGED
|
@@ -1,27 +1,51 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OAuth service — OAuth 2.0 authorization code flow with PKCE.
|
|
3
|
-
*
|
|
4
|
-
* Supports browser-based login flow for API authentication.
|
|
5
|
-
*/
|
|
1
|
+
/** OAuth 2.0 authorization-code + PKCE primitives for host applications. */
|
|
6
2
|
export interface OAuthConfig {
|
|
7
3
|
clientId: string;
|
|
4
|
+
clientSecret?: string;
|
|
8
5
|
authorizationEndpoint: string;
|
|
9
6
|
tokenEndpoint: string;
|
|
10
7
|
redirectUri?: string;
|
|
11
8
|
scopes?: string[];
|
|
9
|
+
resource?: string;
|
|
12
10
|
}
|
|
13
11
|
export interface OAuthTokens {
|
|
14
12
|
accessToken: string;
|
|
15
13
|
refreshToken?: string;
|
|
16
14
|
expiresAt?: number;
|
|
17
15
|
tokenType: string;
|
|
16
|
+
scope?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface OAuthAuthorizeOptions {
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
timeoutMs?: number;
|
|
21
|
+
openExternal?: (url: string) => Promise<void> | void;
|
|
22
|
+
fetch?: typeof fetch;
|
|
23
|
+
callbackHost?: "127.0.0.1";
|
|
24
|
+
/** Zero asks the OS for an ephemeral port. */
|
|
25
|
+
callbackPort?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface OAuthRefreshOptions {
|
|
28
|
+
fetch?: typeof fetch;
|
|
29
|
+
now?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface HardenedOAuthFetchOptions {
|
|
32
|
+
/** Maximum redirects followed after the initial request. */
|
|
33
|
+
maxRedirects?: number;
|
|
18
34
|
}
|
|
19
35
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
36
|
+
* Wrap fetch with OAuth-specific redirect handling. Every hop is validated;
|
|
37
|
+
* POST/Authorization requests never cross origins, so authorization codes,
|
|
38
|
+
* verifiers, refresh tokens, client secrets, and revocation tokens cannot be
|
|
39
|
+
* forwarded by an upstream 30x response.
|
|
22
40
|
*/
|
|
23
|
-
export declare function
|
|
41
|
+
export declare function createHardenedOAuthFetch(baseFetch?: typeof fetch, options?: HardenedOAuthFetchOptions): typeof fetch;
|
|
42
|
+
export declare function generatePKCE(): {
|
|
43
|
+
verifier: string;
|
|
44
|
+
challenge: string;
|
|
45
|
+
};
|
|
24
46
|
/**
|
|
25
|
-
*
|
|
47
|
+
* Run an OAuth authorization-code flow. The host owns browser launching and
|
|
48
|
+
* injects `openExternal`; core only listens on an ephemeral loopback port.
|
|
26
49
|
*/
|
|
27
|
-
export declare function
|
|
50
|
+
export declare function authorize(config: OAuthConfig, options?: OAuthAuthorizeOptions): Promise<OAuthTokens>;
|
|
51
|
+
export declare function refreshToken(config: OAuthConfig, refreshTokenValue: string, options?: OAuthRefreshOptions): Promise<OAuthTokens>;
|