diff --git a/src/agents/cli-runner.test-support.ts b/src/agents/cli-runner.test-support.ts index 218a682486c..28c82698555 100644 --- a/src/agents/cli-runner.test-support.ts +++ b/src/agents/cli-runner.test-support.ts @@ -2,15 +2,7 @@ import type { Mock } from "vitest"; import { beforeEach, vi } from "vitest"; import type { requestHeartbeatNow } from "../infra/heartbeat-wake.js"; import type { enqueueSystemEvent } from "../infra/system-events.js"; -import type { CliBackendPlugin } from "../plugin-sdk/cli-backend.js"; -import { - CLI_FRESH_WATCHDOG_DEFAULTS, - CLI_RESUME_WATCHDOG_DEFAULTS, -} from "../plugin-sdk/cli-backend.js"; -import { createEmptyPluginRegistry } from "../plugins/registry.js"; -import { setActivePluginRegistry } from "../plugins/runtime.js"; import type { getProcessSupervisor } from "../process/supervisor/index.js"; -import { setCliAuthEpochTestDeps } from "./cli-auth-epoch.js"; import { setCliRunnerExecuteTestDeps } from "./cli-runner/execute.js"; import { setCliRunnerPrepareTestDeps } from "./cli-runner/prepare.js"; import type { EmbeddedContextFile } from "./pi-embedded-helpers.js"; @@ -93,184 +85,6 @@ type ManagedRunMock = { cancel: Mock<() => void>; }; -function buildOpenAICodexCliBackendFixture(): CliBackendPlugin { - return { - id: "codex-cli", - bundleMcp: true, - bundleMcpMode: "codex-config-overrides", - config: { - command: "codex", - args: [ - "exec", - "--json", - "--color", - "never", - "--sandbox", - "workspace-write", - "--skip-git-repo-check", - ], - resumeArgs: [ - "exec", - "resume", - "{sessionId}", - "-c", - 'sandbox_mode="workspace-write"', - "--skip-git-repo-check", - ], - output: "jsonl", - resumeOutput: "text", - input: "arg", - modelArg: "--model", - sessionIdFields: ["thread_id"], - sessionMode: "existing", - systemPromptFileConfigArg: "-c", - systemPromptFileConfigKey: "model_instructions_file", - systemPromptWhen: "first", - imageArg: "--image", - imageMode: "repeat", - reliability: { - watchdog: { - fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS }, - resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS }, - }, - }, - serialize: true, - }, - }; -} - -function buildAnthropicCliBackendFixture(): CliBackendPlugin { - const clearEnv = [ - "ANTHROPIC_API_KEY", - "ANTHROPIC_API_KEY_OLD", - "ANTHROPIC_API_TOKEN", - "ANTHROPIC_AUTH_TOKEN", - "ANTHROPIC_BASE_URL", - "ANTHROPIC_CUSTOM_HEADERS", - "ANTHROPIC_OAUTH_TOKEN", - "ANTHROPIC_UNIX_SOCKET", - "CLAUDE_CONFIG_DIR", - "CLAUDE_CODE_API_KEY_FILE_DESCRIPTOR", - "CLAUDE_CODE_ENTRYPOINT", - "CLAUDE_CODE_OAUTH_REFRESH_TOKEN", - "CLAUDE_CODE_OAUTH_SCOPES", - "CLAUDE_CODE_OAUTH_TOKEN", - "CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR", - "CLAUDE_CODE_PLUGIN_CACHE_DIR", - "CLAUDE_CODE_PLUGIN_SEED_DIR", - "CLAUDE_CODE_REMOTE", - "CLAUDE_CODE_USE_COWORK_PLUGINS", - "CLAUDE_CODE_USE_BEDROCK", - "CLAUDE_CODE_USE_FOUNDRY", - "CLAUDE_CODE_USE_VERTEX", - "OTEL_EXPORTER_OTLP_ENDPOINT", - "OTEL_EXPORTER_OTLP_HEADERS", - "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT", - "OTEL_EXPORTER_OTLP_LOGS_HEADERS", - "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL", - "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", - "OTEL_EXPORTER_OTLP_METRICS_HEADERS", - "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL", - "OTEL_EXPORTER_OTLP_PROTOCOL", - "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", - "OTEL_EXPORTER_OTLP_TRACES_HEADERS", - "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL", - "OTEL_LOGS_EXPORTER", - "OTEL_METRICS_EXPORTER", - "OTEL_SDK_DISABLED", - "OTEL_TRACES_EXPORTER", - ] as const; - return { - id: "claude-cli", - bundleMcp: true, - bundleMcpMode: "claude-config-file", - config: { - command: "claude", - args: [ - "-p", - "--output-format", - "stream-json", - "--include-partial-messages", - "--verbose", - "--setting-sources", - "user", - "--permission-mode", - "bypassPermissions", - ], - resumeArgs: [ - "-p", - "--output-format", - "stream-json", - "--include-partial-messages", - "--verbose", - "--setting-sources", - "user", - "--permission-mode", - "bypassPermissions", - "--resume", - "{sessionId}", - ], - output: "jsonl", - input: "stdin", - modelArg: "--model", - modelAliases: { - opus: "opus", - "claude-opus-4-6": "opus", - sonnet: "sonnet", - "claude-sonnet-4-6": "sonnet", - "claude-sonnet-4-5": "sonnet", - haiku: "haiku", - }, - sessionArg: "--session-id", - sessionMode: "always", - sessionIdFields: ["session_id", "sessionId", "conversation_id", "conversationId"], - systemPromptArg: "--append-system-prompt", - systemPromptMode: "append", - systemPromptWhen: "first", - clearEnv: [...clearEnv], - reliability: { - watchdog: { - fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS }, - resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS }, - }, - }, - serialize: true, - }, - }; -} - -function buildGoogleGeminiCliBackendFixture(): CliBackendPlugin { - return { - id: "google-gemini-cli", - bundleMcp: true, - bundleMcpMode: "gemini-system-settings", - config: { - command: "gemini", - args: ["--output-format", "json", "--prompt", "{prompt}"], - resumeArgs: ["--resume", "{sessionId}", "--output-format", "json", "--prompt", "{prompt}"], - output: "json", - input: "arg", - imageArg: "@", - imagePathScope: "workspace", - modelArg: "--model", - modelAliases: { - pro: "gemini-3.1-pro-preview", - flash: "gemini-3.1-flash-preview", - "flash-lite": "gemini-3.1-flash-lite-preview", - }, - sessionMode: "existing", - sessionIdFields: ["session_id", "sessionId"], - reliability: { - watchdog: { - fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS }, - resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS }, - }, - }, - serialize: true, - }, - }; -} - export function createManagedRun( exit: MockRunExit, pid = 1234, @@ -300,40 +114,6 @@ export function mockSuccessfulCliRun() { ); } -export function setupCliRunnerTestRegistry() { - setCliAuthEpochTestDeps({ - readClaudeCliCredentialsCached: () => null, - readCodexCliCredentialsCached: () => null, - loadAuthProfileStoreForRuntime: () => ({ version: 1, profiles: {} }), - }); - const registry = createEmptyPluginRegistry(); - registry.cliBackends = [ - { - pluginId: "anthropic", - backend: buildAnthropicCliBackendFixture(), - source: "test", - }, - { - pluginId: "openai", - backend: buildOpenAICodexCliBackendFixture(), - source: "test", - }, - { - pluginId: "google", - backend: buildGoogleGeminiCliBackendFixture(), - source: "test", - }, - ]; - setActivePluginRegistry(registry); - supervisorSpawnMock.mockClear(); - enqueueSystemEventMock.mockClear(); - requestHeartbeatNowMock.mockClear(); - hoisted.resolveBootstrapContextForRunMock.mockReset().mockResolvedValue({ - bootstrapFiles: [], - contextFiles: [], - }); -} - export function restoreCliRunnerPrepareTestDeps() { setCliRunnerPrepareTestDeps({ makeBootstrapWarn: () => () => {},