@titan-design/agent 0.2.0 → 0.4.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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/run.ts","../src/env.ts","../src/failures.ts","../src/harness-contracts.ts","../src/preflight.ts","../src/codex-exec.ts","../src/codex-exec-session.ts","../src/codex-process.ts","../src/durable-dispatcher.ts","../src/durable-result.ts","../src/durable-dispatcher-support.ts","../src/durable-reconcile.ts","../src/claude-code-adapter.ts","../src/claude-code-result.ts"],"sourcesContent":["import { query, type Options, type Query, type SDKMessage, type SDKResultMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport { toJSONSchema } from \"zod\";\nimport { AuthMisconfiguredError, assertApiKeySourceAllowed, assertAuthEnvOk, prepareEnv } from \"./env.js\";\nimport { classifyResult, usageFromResult } from \"./failures.js\";\nimport type { AgentFailure, AgentInit, AgentRunConfig, AgentRunResult } from \"./types.js\";\n\nexport const DEFAULT_INACTIVITY_MS = 600_000;\n\nexport interface AgentRunDeps {\n /** Injection seam for tests; defaults to the SDK's own `query`. */\n query?: typeof query;\n /** Base environment to scrub; defaults to `process.env`. */\n env?: NodeJS.ProcessEnv;\n now?: () => number;\n}\n\n/**\n * Run one headless Claude Code session to completion and return either its\n * answer or a typed failure. Never throws for anything the agent does; the only\n * throws are caller mistakes caught before the session starts.\n */\nexport async function runAgent<T = string>(\n config: AgentRunConfig<T>,\n deps: AgentRunDeps = {},\n): Promise<AgentRunResult<T>> {\n assertBudgets(config);\n const now = deps.now ?? Date.now;\n const startedAt = now();\n\n const env = prepareEnv(deps.env ?? process.env, { allowApiKeyBilling: config.allowApiKeyBilling });\n try {\n assertAuthEnvOk(env, { allowApiKeyBilling: config.allowApiKeyBilling });\n } catch (error) {\n return { ok: false, failure: authFailure(error) };\n }\n\n const session = new Session(config, env, deps);\n try {\n return await session.run(startedAt);\n } finally {\n session.dispose();\n }\n}\n\n/** The SDK leaves both circuit breakers unlimited, so a missing one is a bug, not a default. */\nfunction assertBudgets(config: AgentRunConfig<unknown>): void {\n requirePositive(\"maxTurns\", config.maxTurns);\n requirePositive(\"maxBudgetUsd\", config.maxBudgetUsd);\n}\n\nfunction requirePositive(field: string, value: number): void {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new TypeError(`${field} is required and must be a positive finite number (received ${String(value)})`);\n }\n}\n\nfunction authFailure(error: unknown): AgentFailure {\n const failure: AgentFailure = { kind: \"auth_misconfigured\", reason: messageOf(error) };\n if (error instanceof AuthMisconfiguredError && error.hint) failure.hint = error.hint;\n return failure;\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\ntype EndReason = { kind: \"aborted\"; reason: string } | { kind: \"inactivity_timeout\"; timeoutMs: number };\n\n/** One `query()` call plus the watchdog, abort wiring and stream state it owns. */\nclass Session<T> {\n private readonly controller = new AbortController();\n private readonly inactivityMs: number;\n private watchdog: ReturnType<typeof setTimeout> | undefined;\n private stream: Query | undefined;\n private endReason: EndReason | undefined;\n private init: AgentInit | undefined;\n private sessionId: string | undefined;\n private result: SDKResultMessage | undefined;\n private rateLimitResetsAt: number | undefined;\n private authError: AuthMisconfiguredError | undefined;\n private readonly onExternalAbort = () => {\n this.end({ kind: \"aborted\", reason: String(this.config.signal?.reason ?? \"aborted by caller\") });\n };\n\n constructor(\n private readonly config: AgentRunConfig<T>,\n private readonly env: Record<string, string>,\n private readonly deps: AgentRunDeps,\n ) {\n this.inactivityMs = config.inactivityTimeoutMs ?? DEFAULT_INACTIVITY_MS;\n }\n\n async run(startedAt: number): Promise<AgentRunResult<T>> {\n const signal = this.config.signal;\n if (signal?.aborted) this.onExternalAbort();\n else signal?.addEventListener(\"abort\", this.onExternalAbort);\n\n this.resetWatchdog();\n const run = this.deps.query ?? query;\n const elapsed = () => (this.deps.now ?? Date.now)() - startedAt;\n\n try {\n this.stream = run({ prompt: this.config.prompt, options: this.buildOptions() });\n for await (const message of this.stream) {\n this.resetWatchdog();\n this.config.onMessage?.(message);\n this.absorb(message);\n if (this.endReason || this.authError) break;\n }\n } catch (error) {\n if (!this.endReason) return this.fail({ kind: \"runtime_error\", reason: messageOf(error), raw: error }, elapsed());\n }\n return this.settle(elapsed());\n }\n\n dispose(): void {\n if (this.watchdog) clearTimeout(this.watchdog);\n this.config.signal?.removeEventListener(\"abort\", this.onExternalAbort);\n // `close()` tears down the CLI subprocess; guarded because older SDKs lack it.\n if (typeof this.stream?.close === \"function\") this.stream.close();\n }\n\n private buildOptions(): Options {\n const c = this.config;\n const options: Options = {\n cwd: c.cwd,\n env: this.env,\n abortController: this.controller,\n maxTurns: c.maxTurns,\n maxBudgetUsd: c.maxBudgetUsd,\n permissionMode: c.permissionMode ?? \"dontAsk\",\n settingSources: c.settingSources ?? [],\n };\n if (c.model) options.model = c.model;\n if (c.allowedTools) options.allowedTools = c.allowedTools;\n if (c.disallowedTools) options.disallowedTools = c.disallowedTools;\n if (c.resumeSessionId) options.resume = c.resumeSessionId;\n if (c.agents) options.agents = c.agents;\n if (c.mcpServers) options.mcpServers = c.mcpServers;\n if (c.hooks) options.hooks = c.hooks;\n if (c.outputSchema) {\n options.outputFormat = { type: \"json_schema\", schema: toJSONSchema(c.outputSchema) as Record<string, unknown> };\n }\n return options;\n }\n\n private absorb(message: SDKMessage): void {\n if (\"session_id\" in message && typeof message.session_id === \"string\") this.sessionId = message.session_id;\n if (message.type === \"system\" && message.subtype === \"init\") {\n this.init = {\n apiKeySource: message.apiKeySource,\n model: message.model,\n tools: message.tools ?? [],\n permissionMode: message.permissionMode,\n claudeCodeVersion: message.claude_code_version,\n };\n if (!this.config.allowApiKeyBilling) this.checkApiKeySource(message.apiKeySource);\n return;\n }\n if (message.type === \"rate_limit_event\") this.rateLimitResetsAt = message.rate_limit_info.resetsAt;\n if (message.type === \"result\") this.result = message;\n }\n\n private checkApiKeySource(observed: string | undefined): void {\n try {\n assertApiKeySourceAllowed(observed);\n } catch (error) {\n // Stop the session here rather than let a mis-billed run continue spending.\n this.authError = error instanceof AuthMisconfiguredError ? error : new AuthMisconfiguredError(messageOf(error));\n this.controller.abort(this.authError);\n }\n }\n\n private end(reason: EndReason): void {\n this.endReason ??= reason;\n this.controller.abort(new Error(describeEnd(reason)));\n }\n\n private resetWatchdog(): void {\n if (this.watchdog) clearTimeout(this.watchdog);\n this.watchdog = setTimeout(() => {\n this.end({ kind: \"inactivity_timeout\", timeoutMs: this.inactivityMs });\n }, this.inactivityMs);\n this.watchdog.unref?.();\n }\n\n private settle(durationMs: number): AgentRunResult<T> {\n if (this.authError) return this.fail(authFailure(this.authError), durationMs);\n if (this.endReason) return this.fail(endFailure(this.endReason), durationMs);\n if (!this.result) {\n const reason = \"the session ended without emitting a result message\";\n return this.fail({ kind: \"runtime_error\", reason }, durationMs);\n }\n\n const options: { now?: number; rateLimitResetsAt?: number } = {};\n if (this.deps.now) options.now = this.deps.now();\n if (this.rateLimitResetsAt !== undefined) options.rateLimitResetsAt = this.rateLimitResetsAt;\n const failure = classifyResult(this.result, options);\n if (failure) return this.fail(failure, durationMs);\n\n return this.succeed(this.result, durationMs);\n }\n\n private succeed(result: SDKResultMessage, durationMs: number): AgentRunResult<T> {\n const usage = usageFromResult(result, durationMs);\n if (!this.init || !this.sessionId) {\n const reason = \"the session produced a result but never emitted an init message\";\n return { ok: false, failure: { kind: \"runtime_error\", reason, raw: result }, usage };\n }\n const output = this.readOutput(result);\n if (\"failure\" in output) return { ok: false, failure: output.failure, sessionId: this.sessionId, usage };\n return { ok: true, output: output.value, sessionId: this.sessionId, usage, init: this.init };\n }\n\n /**\n * The SDK already validated `structured_output` against the same schema; we\n * re-parse so the value the caller receives is the one TypeScript promises.\n */\n private readOutput(result: SDKResultMessage): { value: T } | { failure: AgentFailure } {\n const schema = this.config.outputSchema;\n if (!schema) return { value: (result.subtype === \"success\" ? result.result : \"\") as T };\n const raw = result.subtype === \"success\" ? result.structured_output : undefined;\n const parsed = schema.safeParse(raw);\n if (parsed.success) return { value: parsed.data };\n return {\n failure: {\n kind: \"schema_invalid\",\n reason: \"structured output did not match the supplied schema\",\n error: parsed.error,\n raw,\n },\n };\n }\n\n private fail(failure: AgentFailure, durationMs: number): AgentRunResult<T> {\n const out: AgentRunResult<T> = { ok: false, failure };\n if (this.sessionId) out.sessionId = this.sessionId;\n if (this.result) out.usage = usageFromResult(this.result, durationMs);\n return out;\n }\n}\n\nfunction endFailure(reason: EndReason): AgentFailure {\n if (reason.kind === \"aborted\") return { kind: \"aborted\", reason: reason.reason };\n return { kind: \"inactivity_timeout\", reason: describeEnd(reason), timeoutMs: reason.timeoutMs };\n}\n\nfunction describeEnd(reason: EndReason): string {\n return reason.kind === \"aborted\" ? reason.reason : `no message for ${reason.timeoutMs}ms`;\n}\n","/**\n * The only module in this package that reads `process.env`. A stray\n * `ANTHROPIC_API_KEY` silently outranks `CLAUDE_CODE_OAUTH_TOKEN` and routes a\n * headless run onto metered API billing; the invariants here exist because that\n * cost real money once.\n */\n\n/** Set by a parent Claude Code session; the child CLI refuses to start when it inherits them. */\nexport const ANTI_NESTING_VARS = [\"CLAUDECODE\", \"CLAUDE_CODE_SSE_PORT\", \"CLAUDE_CODE_ENTRYPOINT\"] as const;\n\n/** Metered-billing credentials, stripped unless the caller opts in explicitly. */\nexport const STRIPPED_AUTH_VARS = [\"ANTHROPIC_API_KEY\", \"ANTHROPIC_AUTH_TOKEN\"] as const;\n\n/**\n * The only `CLAUDE_CODE_*` variables a child may inherit. Everything else in\n * that namespace describes the *parent* session (exec path, terminal, entry\n * point) and confuses the child's credential and config inference.\n */\nexport const CLAUDE_CODE_PASSTHROUGH_VARS = [\n \"CLAUDE_CODE_OAUTH_TOKEN\",\n \"CLAUDE_CODE_MAX_RETRIES\",\n \"CLAUDE_CODE_USE_BEDROCK\",\n \"CLAUDE_CODE_USE_VERTEX\",\n \"CLAUDE_CODE_USE_FOUNDRY\",\n \"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS\",\n] as const;\n\n/** Proxy settings leak from the parent shell and silently re-route the child's API traffic. */\nexport const STRIPPED_PROXY_VARS = [\n \"HTTP_PROXY\",\n \"http_proxy\",\n \"HTTPS_PROXY\",\n \"https_proxy\",\n \"ALL_PROXY\",\n \"all_proxy\",\n] as const;\n\n/** The CLI retries 10 times by default, which turns an outage into a long silent hang. */\nexport const DEFAULT_MAX_RETRIES = \"3\";\n\nexport interface PrepareEnvOptions {\n /** Leave `ANTHROPIC_API_KEY` / `ANTHROPIC_AUTH_TOKEN` in place and bill the API account. */\n allowApiKeyBilling?: boolean;\n}\n\nexport class AuthMisconfiguredError extends Error {\n readonly hint: string | undefined;\n\n constructor(message: string, hint?: string) {\n super(message);\n this.name = \"AuthMisconfiguredError\";\n this.hint = hint;\n }\n}\n\n/**\n * Copy `env` and scrub it into something safe to hand a child Claude Code\n * process. Never mutates its argument, so the result can go straight to\n * `options.env`.\n */\nexport function prepareEnv(\n env: NodeJS.ProcessEnv = process.env,\n options: PrepareEnvOptions = {},\n): Record<string, string> {\n const out: Record<string, string> = {};\n const passthrough = new Set<string>(CLAUDE_CODE_PASSTHROUGH_VARS);\n\n for (const [key, value] of Object.entries(env)) {\n if (value === undefined) continue;\n if (isClaudeCodeVar(key) && !passthrough.has(key)) continue;\n out[key] = value;\n }\n\n for (const key of ANTI_NESTING_VARS) delete out[key];\n for (const key of STRIPPED_PROXY_VARS) delete out[key];\n if (!options.allowApiKeyBilling) {\n for (const key of STRIPPED_AUTH_VARS) delete out[key];\n }\n\n out.CLAUDE_CODE_MAX_RETRIES ??= DEFAULT_MAX_RETRIES;\n return out;\n}\n\nfunction isClaudeCodeVar(key: string): boolean {\n return key === \"CLAUDECODE\" || key.startsWith(\"CLAUDE_CODE_\");\n}\n\n/**\n * Pre-flight the scrubbed env so a misrouted run fails before it spends\n * anything, rather than mid-stream with a surprise billing source.\n */\nexport function assertAuthEnvOk(env: Record<string, string>, options: PrepareEnvOptions = {}): void {\n if (options.allowApiKeyBilling) {\n if (!env.ANTHROPIC_API_KEY && !env.ANTHROPIC_AUTH_TOKEN) {\n throw new AuthMisconfiguredError(\n \"allowApiKeyBilling is set but neither ANTHROPIC_API_KEY nor ANTHROPIC_AUTH_TOKEN is present\",\n );\n }\n return;\n }\n\n if (env.ANTHROPIC_API_KEY || env.ANTHROPIC_AUTH_TOKEN) {\n throw new AuthMisconfiguredError(\n \"ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN survived the scrub\",\n \"pass the env through prepareEnv, or set allowApiKeyBilling to bill the API account on purpose\",\n );\n }\n\n if (!env.CLAUDE_CODE_OAUTH_TOKEN) {\n throw new AuthMisconfiguredError(\n \"CLAUDE_CODE_OAUTH_TOKEN is not set; subscription auth will fail\",\n \"run `claude setup-token` once and export the printed token\",\n );\n }\n}\n\n/**\n * Credential sources that mean the run went to metered API billing. A blacklist,\n * not a whitelist: the SDK's `ApiKeySource` union grows, and an unrecognised new\n * member is far more likely to be another benign OAuth-ish route than a billing\n * one. `\"env\"` is the pre-0.3 spelling of `\"ANTHROPIC_API_KEY\"`, kept so an\n * older CLI on the PATH still trips the guard.\n */\nexport const FORBIDDEN_API_KEY_SOURCES: ReadonlySet<string> = new Set([\"env\", \"ANTHROPIC_API_KEY\"]);\n\n/** Post-flight on the first `system/init`, the earliest point the real auth route is observable. */\nexport function assertApiKeySourceAllowed(observed: string | undefined): void {\n if (observed === undefined) {\n throw new AuthMisconfiguredError(\"the init message carried no apiKeySource; the auth route cannot be verified\");\n }\n if (FORBIDDEN_API_KEY_SOURCES.has(observed)) {\n throw new AuthMisconfiguredError(\n `apiKeySource '${observed}' means the run is on env-based API-key billing`,\n \"a stray ANTHROPIC_API_KEY most likely overrode CLAUDE_CODE_OAUTH_TOKEN\",\n );\n }\n}\n","import type { ModelUsage, SDKResultMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { AgentFailure, AgentUsage } from \"./types.js\";\n\n/**\n * Rate limiting reaches the caller as prose, not as a subtype, so the phrasing\n * is the only signal. Matching too eagerly would relabel ordinary runtime errors\n * as retryable, so each pattern is anchored on wording the CLI actually emits.\n */\nconst RATE_LIMIT_PATTERNS = [\n /you'?ve hit your (session|weekly|opus|sonnet) limit/i,\n /not your usage limit/i,\n /\\brate[ _-]?limit(ed|ing)?\\b/i,\n /\\b429\\b/,\n /usage limit reached/i,\n];\n\nconst RETRY_AFTER_SECONDS = /retry(?:ing)?[- ](?:after|in)[ :]*(\\d+)\\s*(?:s|sec|secs|seconds)?\\b/i;\nconst ISO_TIMESTAMP = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})/;\n\nexport interface ClassifyOptions {\n /** Epoch millis used to turn a relative \"retry after Ns\" hint into an absolute date. */\n now?: number;\n /** Epoch millis from the stream's last `rate_limit_event`, which beats anything parsed from prose. */\n rateLimitResetsAt?: number;\n}\n\n/**\n * Map a terminal `result` message onto the failure taxonomy, or `undefined` when\n * the run succeeded and the caller should read the output.\n */\nexport function classifyResult(result: SDKResultMessage, options: ClassifyOptions = {}): AgentFailure | undefined {\n const text = errorText(result);\n\n if (result.subtype === \"success\") {\n if (result.stop_reason === \"refusal\") {\n return { kind: \"refusal\", reason: text || \"the model refused the request\", raw: result };\n }\n // A success subtype still carries `is_error` when the turn died on an API error.\n return result.is_error ? rateLimitedOrRuntime(text, result, options) : undefined;\n }\n\n switch (result.subtype) {\n case \"error_max_budget_usd\":\n return { kind: \"budget_exceeded\", reason: text || \"max budget reached\", raw: result };\n case \"error_max_turns\":\n return { kind: \"max_turns\", reason: text || \"max turns reached\", raw: result };\n case \"error_max_structured_output_retries\":\n return { kind: \"schema_invalid\", reason: text || \"structured-output retries exhausted\", raw: result };\n case \"error_during_execution\":\n return rateLimitedOrRuntime(text, result, options);\n default:\n // Unreachable per the SDK's union, but a newer CLI may add a subtype.\n return { kind: \"runtime_error\", reason: `unknown result subtype: ${String(result[\"subtype\"])}`, raw: result };\n }\n}\n\nfunction rateLimitedOrRuntime(text: string, raw: SDKResultMessage, options: ClassifyOptions): AgentFailure {\n if (!RATE_LIMIT_PATTERNS.some((p) => p.test(text))) {\n return { kind: \"runtime_error\", reason: text || \"the session ended with an unexplained error\", raw };\n }\n const failure: AgentFailure = { kind: \"rate_limited\", reason: text, raw };\n const retryAt = parseRetryAt(text, options);\n if (retryAt) failure.retryAt = retryAt;\n return failure;\n}\n\nfunction parseRetryAt(text: string, options: ClassifyOptions): Date | undefined {\n if (options.rateLimitResetsAt !== undefined) return new Date(options.rateLimitResetsAt);\n const seconds = RETRY_AFTER_SECONDS.exec(text);\n if (seconds?.[1]) return new Date((options.now ?? Date.now()) + Number(seconds[1]) * 1000);\n const iso = ISO_TIMESTAMP.exec(text);\n if (iso) return new Date(iso[0]);\n return undefined;\n}\n\n/** `result` carries the text on a success message, `errors` on every failure subtype. */\nfunction errorText(result: SDKResultMessage): string {\n if (result.subtype === \"success\") return result.result ?? \"\";\n return (result.errors ?? []).filter((e) => typeof e === \"string\" && e.length > 0).join(\"\\n\");\n}\n\n/**\n * The SDK's cost fields are already cumulative across a `query()` call, so the\n * latest result carries the running total and summing them would double-count.\n * `modelUsage` is the fallback because a crash result can arrive with\n * `total_cost_usd` zeroed while the per-model breakdown survives.\n */\nexport function usageFromResult(result: SDKResultMessage | undefined, durationMs: number): AgentUsage {\n const modelUsage = result?.modelUsage ?? {};\n const reported = result?.total_cost_usd;\n const totalCostUsd = typeof reported === \"number\" && reported > 0 ? reported : sumModelCost(modelUsage);\n return { totalCostUsd, modelUsage, turns: result?.num_turns ?? 0, durationMs };\n}\n\nexport function sumModelCost(modelUsage: Record<string, ModelUsage>): number {\n return Object.values(modelUsage).reduce((total, m) => total + (m.costUSD ?? 0), 0);\n}\n","import type {\n AgentDefinition,\n HookCallbackMatcher,\n HookEvent,\n McpServerConfig,\n PermissionMode,\n SettingSource,\n} from \"@anthropic-ai/claude-agent-sdk\";\nimport type { ConversationIdentity, ExecutionIdentity, UsageMeasurement } from \"@titan-design/agent-protocol\";\nimport type { ZodType } from \"zod\";\n\nexport type Harness = \"claude-code\" | \"codex\";\n\nexport const CODEX_SANDBOXES = [\"read-only\", \"workspace-write\", \"danger-full-access\"] as const;\nexport const CODEX_APPROVAL_POLICIES = [\"untrusted\", \"on-failure\", \"on-request\", \"never\"] as const;\nexport type CodexSandbox = (typeof CODEX_SANDBOXES)[number];\nexport type CodexApprovalPolicy = (typeof CODEX_APPROVAL_POLICIES)[number];\n\nexport const EXECUTION_CAPABILITIES = [\n \"fresh_run\",\n \"resume\",\n \"fork\",\n \"structured_output\",\n \"interactive_approvals\",\n \"external_cancellation\",\n \"semantic_interrupt\",\n \"active_turn_steering\",\n \"idle_turn_submission\",\n \"persisted_transcript\",\n \"process_reattachment\",\n \"token_reporting\",\n] as const;\n\nexport type ExecutionCapability = (typeof EXECUTION_CAPABILITIES)[number];\nexport type CapabilityAssessment =\n | { status: \"supported\"; evidence: string }\n | { status: \"unsupported\" | \"unverified\"; reason: string };\n\nexport type LimitUnit = \"milliseconds\" | \"usd\" | \"model_requests\" | \"agent_iterations\" | \"tokens\";\nexport type OptionalLimitUnit = Exclude<LimitUnit, \"milliseconds\">;\nexport type LimitScope = \"execution\" | \"conversation\";\nexport type LimitEnforcement = \"hard\" | \"advisory\";\n\nexport interface ExecutionLimit {\n unit: OptionalLimitUnit;\n value: number;\n scope: LimitScope;\n enforcement: LimitEnforcement;\n}\n\nexport interface LimitCapability {\n unit: LimitUnit;\n scope: LimitScope;\n enforcement: LimitEnforcement;\n assessment: CapabilityAssessment;\n}\n\n/** A factual report supplied by an adapter implementation, not a promise made by the core. */\nexport interface HarnessCapabilityDescriptor<H extends Harness = Harness> {\n harness: H;\n adapter: { name: string; version: string };\n capabilities: Record<ExecutionCapability, CapabilityAssessment>;\n limits: readonly LimitCapability[];\n}\n\nexport type RunTarget =\n | { kind: \"fresh\"; namespace: string }\n | { kind: \"resume\"; conversation: ConversationIdentity };\n\nexport interface BoundedRunBase {\n prompt: string;\n cwd: string;\n target: RunTarget;\n /** Required hard deadline for this execution. Must be positive and finite. */\n wallTimeMs: number;\n limits?: readonly ExecutionLimit[];\n requires?: readonly ExecutionCapability[];\n signal?: AbortSignal;\n onProgress?: (progress: HarnessRunProgress) => void;\n}\n\n/** Anthropic SDK configuration remains confined to the Claude Code branch. */\nexport interface ClaudeCodeNativeOptions<T> {\n model?: string;\n outputSchema?: ZodType<T>;\n allowedTools?: string[];\n disallowedTools?: string[];\n permissionMode?: PermissionMode;\n agents?: Record<string, AgentDefinition>;\n mcpServers?: Record<string, McpServerConfig>;\n hooks?: Partial<Record<HookEvent, HookCallbackMatcher[]>>;\n settingSources?: SettingSource[];\n allowApiKeyBilling?: boolean;\n}\n\nexport interface CodexOutputSchema<T> {\n jsonSchema: Record<string, unknown>;\n /** Second validation boundary after Codex applies the native JSON Schema. */\n parse(value: unknown): T;\n}\n\nexport interface CodexNativeOptions<T> {\n model?: string;\n /** Adapter validates model/version-specific values; core only requires a nonempty string. */\n reasoningEffort?: string;\n sandbox?: CodexSandbox;\n approvalPolicy?: CodexApprovalPolicy;\n outputSchema?: CodexOutputSchema<T>;\n}\n\nexport interface ClaudeCodeRunRequest<T = string> extends BoundedRunBase {\n harness: \"claude-code\";\n native?: ClaudeCodeNativeOptions<T>;\n}\n\nexport interface CodexRunRequest<T = string> extends BoundedRunBase {\n harness: \"codex\";\n native?: CodexNativeOptions<T>;\n}\n\nexport type HarnessRunRequest<T = string> = ClaudeCodeRunRequest<T> | CodexRunRequest<T>;\nexport type HarnessRunRequestFor<H extends Harness, T = string> = H extends \"claude-code\"\n ? ClaudeCodeRunRequest<T>\n : CodexRunRequest<T>;\n\nexport type HarnessRunProgress = { harness: Harness; atMs: number } & (\n | { kind: \"execution_started\"; execution: ExecutionIdentity }\n | { kind: \"conversation_identified\"; executionId: string; conversation: ConversationIdentity }\n | { kind: \"assistant_output\"; executionId: string; text: string }\n | { kind: \"usage\"; executionId: string; measurement: UsageMeasurement }\n | { kind: \"execution_finished\"; executionId: string; outcome: \"succeeded\" | \"failed\" | \"cancelled\" }\n);\n\nexport type HarnessRunOutput<T> = { kind: \"text\"; text: string } | { kind: \"structured\"; value: T };\n\nexport interface TranscriptSourceHint {\n format: string;\n namespace: string;\n path?: string;\n}\n\nexport type HarnessRunFailure =\n | { kind: \"invalid_request\"; reason: string }\n | { kind: \"harness_mismatch\"; reason: string }\n | {\n kind: \"unsupported_requirement\";\n reason: string;\n requirement: { kind: \"capability\"; capability: ExecutionCapability } | { kind: \"limit\"; limit: LimitCapability };\n status: \"unsupported\" | \"unverified\";\n }\n | { kind: \"rate_limited\"; reason: string; retryAtMs?: number; native?: unknown }\n | { kind: \"limit_exceeded\"; reason: string; unit: LimitUnit; native?: unknown }\n | { kind: \"output_invalid\"; reason: string; native?: unknown }\n | { kind: \"auth_misconfigured\"; reason: string; native?: unknown }\n | { kind: \"aborted\"; reason: string }\n | { kind: \"wall_time_exceeded\"; reason: string; wallTimeMs: number }\n | { kind: \"cancelled_unknown\"; reason: string; native?: unknown }\n | { kind: \"runtime_error\"; reason: string; native?: unknown };\n\nexport type HarnessRunResult<T = string, H extends Harness = Harness> =\n | {\n ok: true;\n harness: H;\n execution: ExecutionIdentity;\n conversation: ConversationIdentity;\n output: HarnessRunOutput<T>;\n usage: readonly UsageMeasurement[];\n transcript?: TranscriptSourceHint;\n }\n | {\n ok: false;\n harness: H;\n execution?: ExecutionIdentity;\n conversation?: ConversationIdentity;\n failure: HarnessRunFailure;\n usage: readonly UsageMeasurement[];\n };\n\nexport interface HarnessAdapter<H extends Harness> {\n descriptor: HarnessCapabilityDescriptor<H>;\n run<T>(request: HarnessRunRequestFor<H, T>): Promise<HarnessRunResult<T, H>>;\n}\n","import { conversationRef } from \"@titan-design/agent-protocol\";\nimport type {\n BoundedRunBase,\n CapabilityAssessment,\n ExecutionCapability,\n ExecutionLimit,\n Harness,\n HarnessAdapter,\n HarnessCapabilityDescriptor,\n HarnessRunFailure,\n HarnessRunRequestFor,\n HarnessRunResult,\n LimitCapability,\n LimitUnit,\n} from \"./harness-contracts.js\";\nimport { CODEX_APPROVAL_POLICIES, CODEX_SANDBOXES } from \"./harness-contracts.js\";\n\nexport function preflightHarnessRun<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n descriptor: HarnessCapabilityDescriptor<H>,\n): HarnessRunFailure | undefined {\n if (request.harness !== descriptor.harness) {\n return mismatch(`request harness ${request.harness} does not match adapter harness ${descriptor.harness}`);\n }\n if (request.target.kind === \"resume\" && request.target.conversation.harness !== request.harness) {\n return mismatch(`resume conversation harness ${request.target.conversation.harness} does not match ${request.harness}`);\n }\n const identityFailure = invalidIdentity(request);\n if (identityFailure) return identityFailure;\n const invalid = invalidNumbers(request);\n if (invalid) return invalid;\n const nativeFailure = invalidNativeOptions(request);\n if (nativeFailure) return nativeFailure;\n if (request.signal?.aborted) return { kind: \"aborted\", reason: String(request.signal.reason ?? \"aborted by caller\") };\n const capabilityFailure = checkCapabilities(request, descriptor);\n if (capabilityFailure) return capabilityFailure;\n return checkLimits(request, descriptor);\n}\n\nfunction invalidIdentity(request: BoundedRunBase): HarnessRunFailure | undefined {\n if (request.target.kind === \"fresh\") {\n return nonempty(request.target.namespace) ? undefined : invalid(\"fresh target namespace must be a nonempty string\");\n }\n try {\n conversationRef(request.target.conversation);\n return undefined;\n } catch {\n return invalid(\"resume conversation identity components must be nonempty strings\");\n }\n}\n\nconst CLAUDE_ONLY = [\"allowedTools\", \"disallowedTools\", \"permissionMode\", \"agents\", \"mcpServers\", \"hooks\", \"settingSources\", \"allowApiKeyBilling\"];\nconst CODEX_ONLY = [\"reasoningEffort\", \"sandbox\", \"approvalPolicy\"];\nconst CLAUDE_PERMISSION_MODES = [\"default\", \"acceptEdits\", \"bypassPermissions\", \"plan\", \"dontAsk\", \"auto\"];\nconst CLAUDE_SETTING_SOURCES = [\"user\", \"project\", \"local\"];\n\nfunction invalidNativeOptions(request: { harness: Harness; native?: unknown }): HarnessRunFailure | undefined {\n if (request.native === undefined) return undefined;\n if (!record(request.native)) return invalid(\"native options must be an object\");\n const native: object = request.native;\n const forbidden = request.harness === \"codex\" ? CLAUDE_ONLY : CODEX_ONLY;\n const field = forbidden.find((name) => name in native);\n if (field) return invalid(`${field} is not a ${request.harness} native option`);\n const options = native as Record<string, unknown>;\n return request.harness === \"codex\" ? invalidCodexOptions(options) : invalidClaudeOptions(options);\n}\n\nfunction invalidCodexOptions(options: Record<string, unknown>): HarnessRunFailure | undefined {\n const invalidModel = optionalNonempty(\"model\", options.model);\n if (invalidModel) return invalidModel;\n const invalidEffort = optionalNonempty(\"reasoningEffort\", options.reasoningEffort);\n if (invalidEffort) return invalidEffort;\n const enums = [\n [\"sandbox\", options.sandbox, CODEX_SANDBOXES],\n [\"approvalPolicy\", options.approvalPolicy, CODEX_APPROVAL_POLICIES],\n ] as const;\n for (const [name, value, allowed] of enums) {\n if (value !== undefined && !allowed.includes(value as never)) return invalid(`${name} is not a recognized Codex value`);\n }\n if (options.outputSchema === undefined) return undefined;\n if (!record(options.outputSchema)) return invalid(\"Codex outputSchema must be an object\");\n if (!record(options.outputSchema.jsonSchema)) return invalid(\"Codex outputSchema.jsonSchema must be an object\");\n return typeof options.outputSchema.parse === \"function\" ? undefined : invalid(\"Codex outputSchema.parse must be callable\");\n}\n\nfunction invalidClaudeOptions(options: Record<string, unknown>): HarnessRunFailure | undefined {\n const invalidModel = optionalNonempty(\"model\", options.model);\n if (invalidModel) return invalidModel;\n if (options.permissionMode !== undefined && !CLAUDE_PERMISSION_MODES.includes(options.permissionMode as never)) {\n return invalid(\"permissionMode is not a recognized Claude Code value\");\n }\n for (const name of [\"allowedTools\", \"disallowedTools\"] as const) {\n if (options[name] !== undefined && !stringArray(options[name])) return invalid(`${name} must be an array of strings`);\n }\n if (options.settingSources !== undefined && !enumArray(options.settingSources, CLAUDE_SETTING_SOURCES)) {\n return invalid(\"settingSources must contain recognized Claude Code values\");\n }\n if (options.allowApiKeyBilling !== undefined && typeof options.allowApiKeyBilling !== \"boolean\") {\n return invalid(\"allowApiKeyBilling must be boolean\");\n }\n if (options.outputSchema !== undefined && (!record(options.outputSchema) || typeof options.outputSchema.safeParse !== \"function\")) {\n return invalid(\"Claude Code outputSchema must be a Zod schema\");\n }\n return undefined;\n}\n\nexport async function dispatchHarnessRun<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n adapter: HarnessAdapter<H>,\n): Promise<HarnessRunResult<T, H>> {\n const failure = preflightHarnessRun(request, adapter.descriptor);\n if (failure) return { ok: false, harness: request.harness as H, failure, usage: [] };\n try {\n return await adapter.run(request);\n } catch (error) {\n return {\n ok: false,\n harness: request.harness as H,\n failure: { kind: \"runtime_error\", reason: messageOf(error), native: error },\n usage: [],\n };\n }\n}\n\nfunction invalidNumbers(request: BoundedRunBase): HarnessRunFailure | undefined {\n if (!positiveFinite(request.wallTimeMs)) return invalid(\"wallTimeMs must be a positive finite number\");\n for (const limit of request.limits ?? []) {\n if (!positiveFinite(limit.value)) return invalid(`${limit.unit} limit must be a positive finite number`);\n if (limit.unit !== \"usd\" && !Number.isInteger(limit.value)) {\n return invalid(`${limit.unit} limit must be a positive integer`);\n }\n }\n return undefined;\n}\n\nfunction checkCapabilities<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n descriptor: HarnessCapabilityDescriptor<H>,\n): HarnessRunFailure | undefined {\n for (const capability of requiredCapabilities(request)) {\n const assessment = descriptor.capabilities[capability] ?? {\n status: \"unverified\",\n reason: \"adapter did not declare this capability\",\n };\n const failure = rejectAssessment(assessment, { kind: \"capability\", capability });\n if (failure) return failure;\n }\n return undefined;\n}\n\nfunction requiredCapabilities(request: BoundedRunBase & { native?: { outputSchema?: unknown } }): ExecutionCapability[] {\n const required = new Set<ExecutionCapability>(request.requires ?? []);\n required.add(request.target.kind === \"fresh\" ? \"fresh_run\" : \"resume\");\n if (request.native?.outputSchema !== undefined) required.add(\"structured_output\");\n if (request.signal) required.add(\"external_cancellation\");\n return [...required];\n}\n\nfunction checkLimits<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n descriptor: HarnessCapabilityDescriptor<H>,\n): HarnessRunFailure | undefined {\n const wallTime: ExecutionLimitRecord = {\n unit: \"milliseconds\",\n value: request.wallTimeMs,\n scope: \"execution\",\n enforcement: \"hard\",\n };\n for (const limit of [wallTime, ...(request.limits ?? [])]) {\n const declared = descriptor.limits.find((candidate) => sameLimit(candidate, limit));\n const assessment = declared?.assessment ?? { status: \"unverified\", reason: \"adapter did not declare this limit\" };\n const requirement = { kind: \"limit\" as const, limit: { ...limit, assessment } };\n const failure = rejectAssessment(assessment, requirement);\n if (failure) return failure;\n }\n return undefined;\n}\n\ntype ExecutionLimitRecord = ExecutionLimit | {\n unit: \"milliseconds\";\n value: number;\n scope: \"execution\";\n enforcement: \"hard\";\n};\n\nfunction sameLimit(capability: LimitCapability, limit: ExecutionLimitRecord): boolean {\n return capability.unit === limit.unit && capability.scope === limit.scope && capability.enforcement === limit.enforcement;\n}\n\nfunction rejectAssessment(\n assessment: CapabilityAssessment,\n requirement: Extract<HarnessRunFailure, { kind: \"unsupported_requirement\" }>[\"requirement\"],\n): HarnessRunFailure | undefined {\n if (assessment.status === \"supported\") return undefined;\n const name = requirement.kind === \"capability\" ? requirement.capability : describeLimit(requirement.limit);\n return { kind: \"unsupported_requirement\", reason: `${name} is ${assessment.status}: ${assessment.reason}`, requirement, status: assessment.status };\n}\n\nfunction describeLimit(limit: { unit: LimitUnit; scope: string; enforcement: string }): string {\n return `${limit.enforcement} ${limit.scope} limit in ${limit.unit}`;\n}\n\nfunction positiveFinite(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction nonempty(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction optionalNonempty(name: string, value: unknown): HarnessRunFailure | undefined {\n return value === undefined || nonempty(value) ? undefined : invalid(`${name} must be a nonempty string`);\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nfunction enumArray(value: unknown, allowed: readonly string[]): boolean {\n return stringArray(value) && value.every((item) => allowed.includes(item));\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction invalid(reason: string): HarnessRunFailure {\n return { kind: \"invalid_request\", reason };\n}\n\nfunction mismatch(reason: string): HarnessRunFailure {\n return { kind: \"harness_mismatch\", reason };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { isAbsolute } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { runCodexExecSession } from \"./codex-exec-session.js\";\nimport {\n createCodexSchemaFile,\n inspectCodexVersion,\n startCodexProcess,\n type CodexProcessInput,\n type CodexSchemaFile,\n type SupervisedCodexProcess,\n type CodexVersionInspectionOptions,\n} from \"./codex-process.js\";\nimport { EXECUTION_CAPABILITIES } from \"./harness-contracts.js\";\nimport type {\n CapabilityAssessment,\n CodexRunRequest,\n HarnessAdapter,\n HarnessCapabilityDescriptor,\n HarnessRunFailure,\n HarnessRunResult,\n LimitCapability,\n} from \"./harness-contracts.js\";\nimport { preflightHarnessRun } from \"./preflight.js\";\n\nexport const DEFAULT_CODEX_EXECUTABLE = \"/Applications/ChatGPT.app/Contents/Resources/codex\";\nexport const SUPPORTED_CODEX_EXEC_VERSION = \"0.154.0-alpha.6.1\";\nexport const STRIPPED_CODEX_AUTH_VARS = [\"CODEX_API_KEY\", \"OPENAI_API_KEY\", \"OPENAI_ACCESS_TOKEN\"] as const;\n\nexport interface CodexExecAdapterOptions {\n auth: \"cached-cli\";\n executablePath?: string;\n env?: NodeJS.ProcessEnv;\n killGraceMs?: number;\n}\n\nexport interface CodexExecDeps {\n inspectVersion?: (\n executablePath: string,\n env: Record<string, string>,\n options: CodexVersionInspectionOptions,\n ) => Promise<string>;\n start?: (input: CodexProcessInput) => SupervisedCodexProcess;\n createSchemaFile?: (schema: Record<string, unknown>) => Promise<CodexSchemaFile>;\n executionId?: () => string;\n now?: () => number;\n deadlineNow?: () => number;\n}\n\nexport function createCodexExecAdapter(\n options: CodexExecAdapterOptions,\n deps: CodexExecDeps = {},\n): HarnessAdapter<\"codex\"> {\n validateOptions(options);\n const executablePath = options.executablePath ?? DEFAULT_CODEX_EXECUTABLE;\n const env = prepareCodexEnv(options.env ?? process.env);\n const descriptor = codexExecCapabilities();\n return {\n descriptor,\n async run<T>(request: CodexRunRequest<T>): Promise<HarnessRunResult<T, \"codex\">> {\n const preflight = preflightHarnessRun(request, descriptor);\n if (preflight) return failed(preflight);\n const invalid = validateAdapterRequest(request);\n if (invalid) return failed(invalid);\n try {\n return await runSupervised(request, { executablePath, env, killGraceMs: options.killGraceMs }, deps);\n } catch (error) {\n return failed({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n }\n },\n };\n}\n\nexport function prepareCodexEnv(env: NodeJS.ProcessEnv): Record<string, string> {\n const prepared: Record<string, string> = {};\n for (const [name, value] of Object.entries(env)) {\n if (value !== undefined && !(STRIPPED_CODEX_AUTH_VARS as readonly string[]).includes(name)) prepared[name] = value;\n }\n return prepared;\n}\n\nexport function codexExecCapabilities(): HarnessCapabilityDescriptor<\"codex\"> {\n const supported = (evidence: string): CapabilityAssessment => ({ status: \"supported\", evidence });\n const unsupported = (reason: string): CapabilityAssessment => ({ status: \"unsupported\", reason });\n const capabilities = Object.fromEntries(\n EXECUTION_CAPABILITIES.map((capability) => [\n capability,\n unsupported(\"not implemented by the supervised exec adapter\"),\n ]),\n ) as HarnessCapabilityDescriptor<\"codex\">[\"capabilities\"];\n capabilities.fresh_run = supported(\"codex exec starts a persisted thread\");\n capabilities.resume = supported(\"codex exec resume uses an explicit native thread ID\");\n capabilities.structured_output = supported(\"native output schema plus caller parser validation\");\n capabilities.external_cancellation = supported(\"owned local process group receives termination signals\");\n capabilities.persisted_transcript = supported(\"adapter never passes --ephemeral\");\n capabilities.token_reporting = supported(\"turn.completed usage is normalized with source provenance\");\n const limits = limitCapabilities(supported, unsupported);\n return {\n harness: \"codex\",\n adapter: { name: \"codex-exec-json\", version: SUPPORTED_CODEX_EXEC_VERSION },\n capabilities,\n limits,\n };\n}\n\nfunction limitCapabilities(\n supported: (evidence: string) => CapabilityAssessment,\n unsupported: (reason: string) => CapabilityAssessment,\n): LimitCapability[] {\n const limits: LimitCapability[] = [\n {\n unit: \"milliseconds\",\n scope: \"execution\",\n enforcement: \"hard\",\n assessment: supported(\"local process deadline\"),\n },\n ];\n for (const unit of [\"usd\", \"model_requests\", \"agent_iterations\", \"tokens\"] as const) {\n for (const scope of [\"execution\", \"conversation\"] as const) {\n limits.push({\n unit,\n scope,\n enforcement: \"hard\",\n assessment: unsupported(\"codex exec has no verified hard cap in this unit\"),\n });\n }\n }\n return limits;\n}\n\nfunction validateOptions(options: CodexExecAdapterOptions): void {\n if (options.auth !== \"cached-cli\") throw new TypeError(\"Codex exec adapter supports only cached-cli authentication\");\n if (options.executablePath !== undefined) {\n if (options.executablePath.trim().length === 0) throw new TypeError(\"executablePath must be a nonempty string\");\n if (!isAbsolute(options.executablePath)) throw new TypeError(\"executablePath must be absolute\");\n }\n if (options.killGraceMs !== undefined && (!Number.isFinite(options.killGraceMs) || options.killGraceMs < 0)) {\n throw new TypeError(\"killGraceMs must be a finite nonnegative number\");\n }\n}\n\nfunction validateAdapterRequest<T>(request: CodexRunRequest<T>): HarnessRunFailure | undefined {\n if (!request.prompt.trim()) return { kind: \"invalid_request\", reason: \"Codex exec requires a nonempty prompt\" };\n if (!isAbsolute(request.cwd)) return { kind: \"invalid_request\", reason: \"Codex exec requires an absolute cwd\" };\n if (!request.native?.model) return { kind: \"invalid_request\", reason: \"Codex exec requires an explicit model\" };\n if (request.native.approvalPolicy && request.native.approvalPolicy !== \"never\") {\n return { kind: \"invalid_request\", reason: \"Codex exec supports only the noninteractive never approval policy\" };\n }\n return undefined;\n}\n\nasync function checkVersion(\n inspect: () => Promise<string>,\n expected: string,\n): Promise<HarnessRunFailure | undefined> {\n try {\n const actual = parseVersion(await inspect());\n if (actual === expected) return undefined;\n return { kind: \"runtime_error\", reason: `unsupported Codex CLI version ${actual}; expected ${expected}` };\n } catch (error) {\n const reason = `could not verify Codex CLI version: ${messageOf(error)}`;\n return { kind: \"runtime_error\", reason, native: error };\n }\n}\n\nfunction parseVersion(output: string): string {\n const match = /^codex-cli\\s+(\\S+)/m.exec(output.trim());\n if (!match?.[1]) throw new Error(`unrecognized version output: ${output.trim()}`);\n return match[1];\n}\n\nasync function runSupervised<T>(\n request: CodexRunRequest<T>,\n config: {\n executablePath: string;\n env: Record<string, string>;\n killGraceMs?: number;\n },\n deps: CodexExecDeps,\n): Promise<HarnessRunResult<T, \"codex\">> {\n const deadlineNow = deps.deadlineNow ?? performance.now.bind(performance);\n const startedAt = deadlineNow();\n const remaining = () => Math.max(0, request.wallTimeMs - (deadlineNow() - startedAt));\n let schemaFile: CodexSchemaFile | undefined;\n try {\n const versionOutput = await setupStep(\n (deps.inspectVersion ?? inspectCodexVersion)(config.executablePath, config.env, {\n signal: request.signal,\n timeoutMs: remaining(),\n }),\n request.signal,\n remaining(),\n );\n const versionFailure = await checkVersion(async () => versionOutput, SUPPORTED_CODEX_EXEC_VERSION);\n if (versionFailure) return failed(versionFailure);\n\n if (request.native?.outputSchema) {\n schemaFile = await setupStep(\n (deps.createSchemaFile ?? createCodexSchemaFile)(request.native.outputSchema.jsonSchema),\n request.signal,\n remaining(),\n (lateFile) => lateFile.dispose(),\n );\n }\n\n if (request.signal?.aborted) return failed(abortFailure(request.signal));\n const processWallTimeMs = remaining();\n if (processWallTimeMs <= 0) return failed(timeoutFailure(request.wallTimeMs));\n const input = {\n executablePath: config.executablePath,\n args: buildCodexExecArgs(request, schemaFile?.path),\n cwd: request.cwd,\n env: config.env,\n };\n const executionId = (deps.executionId ?? randomUUID)();\n const processHandle = (deps.start ?? startCodexProcess)(input);\n const cleanup = async () => {\n const file = schemaFile;\n schemaFile = undefined;\n await file?.dispose();\n };\n return await runCodexExecSession(\n request,\n processHandle,\n executionId,\n deps.now ?? Date.now,\n config.killGraceMs,\n processWallTimeMs,\n cleanup,\n );\n } catch (error) {\n if (request.signal?.aborted) return failed(abortFailure(request.signal));\n if (error instanceof SetupTimeoutError || isProcessTimeout(error)) {\n return failed(timeoutFailure(request.wallTimeMs));\n }\n return failed({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n } finally {\n await schemaFile?.dispose();\n }\n}\n\nexport function buildCodexExecArgs<T>(request: CodexRunRequest<T>, schemaPath?: string): string[] {\n const native = request.native!;\n const args = [\"exec\"];\n if (request.target.kind === \"resume\") args.push(\"resume\");\n args.push(\"--json\", \"--strict-config\", \"--ignore-user-config\", \"--model\", native.model!);\n args.push(\"--config\", `approval_policy=${JSON.stringify(native.approvalPolicy ?? \"never\")}`);\n args.push(\"--config\", `sandbox_mode=${JSON.stringify(native.sandbox ?? \"read-only\")}`);\n if (native.reasoningEffort) {\n args.push(\"--config\", `model_reasoning_effort=${JSON.stringify(native.reasoningEffort)}`);\n }\n if (request.target.kind === \"fresh\") args.push(\"--cd\", request.cwd);\n if (schemaPath) args.push(\"--output-schema\", schemaPath);\n if (request.target.kind === \"resume\") args.push(request.target.conversation.nativeId);\n args.push(\"--\", request.prompt);\n return args;\n}\n\nfunction failed<T>(failure: HarnessRunFailure): HarnessRunResult<T, \"codex\"> {\n return { ok: false, harness: \"codex\", failure, usage: [] };\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction timeoutFailure(wallTimeMs: number): HarnessRunFailure {\n return { kind: \"wall_time_exceeded\", reason: \"Codex execution exceeded its wall deadline\", wallTimeMs };\n}\n\nfunction abortFailure(signal: AbortSignal): HarnessRunFailure {\n return { kind: \"aborted\", reason: String(signal.reason ?? \"aborted by caller\") };\n}\n\nclass SetupTimeoutError extends Error {}\n\nfunction setupStep<T>(\n work: Promise<T>,\n signal: AbortSignal | undefined,\n timeoutMs: number,\n disposeLateValue?: (value: T) => void | Promise<void>,\n): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n const finish = (callback: () => void) => {\n if (settled) return false;\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n callback();\n return true;\n };\n const onAbort = () => finish(() => reject(signal?.reason ?? new Error(\"aborted by caller\")));\n const timer = setTimeout(\n () => finish(() => reject(new SetupTimeoutError(\"Codex setup exceeded its wall deadline\"))),\n Math.max(0, timeoutMs),\n );\n timer.unref?.();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (signal?.aborted) onAbort();\n work.then(\n (value) => {\n if (!finish(() => resolve(value)) && disposeLateValue) {\n void Promise.resolve(disposeLateValue(value)).catch(() => undefined);\n }\n },\n (error: unknown) => finish(() => reject(error)),\n );\n });\n}\n\nfunction isProcessTimeout(error: unknown): boolean {\n if (typeof error !== \"object\" || error === null) return false;\n const value = error as { code?: unknown; killed?: unknown; signal?: unknown };\n return value.code === \"ETIMEDOUT\" || (value.killed === true && value.signal === \"SIGKILL\");\n}\n","import { conversationItemRef } from \"@titan-design/agent-protocol\";\nimport type { ConversationIdentity, ExecutionIdentity, TokenCounts, UsageMeasurement } from \"@titan-design/agent-protocol\";\nimport type { CodexProcessExit, SupervisedCodexProcess } from \"./codex-process.js\";\nimport type { CodexRunRequest, HarnessRunFailure, HarnessRunProgress, HarnessRunResult } from \"./harness-contracts.js\";\n\nexport const DEFAULT_CODEX_KILL_GRACE_MS = 2_000;\n\nexport async function runCodexExecSession<T>(\n request: CodexRunRequest<T>,\n processHandle: SupervisedCodexProcess,\n executionId: string,\n now: () => number,\n killGraceMs = DEFAULT_CODEX_KILL_GRACE_MS,\n processWallTimeMs = request.wallTimeMs,\n cleanup?: () => Promise<void>,\n): Promise<HarnessRunResult<T, \"codex\">> {\n return new CodexExecSession(request, processHandle, executionId, now, killGraceMs, processWallTimeMs, cleanup).run();\n}\n\nclass CodexExecSession<T> {\n private conversation: ConversationIdentity | undefined;\n private finalText: string | undefined;\n private usageRaw: unknown;\n private nativeTurnId: string | undefined;\n private turnCompleted = false;\n private nativeTerminalObserved = false;\n private streamError: HarnessRunFailure | undefined;\n private stderr = \"\";\n private stopReason: \"abort\" | \"timeout\" | undefined;\n private timer: ReturnType<typeof setTimeout> | undefined;\n private forceTimer: ReturnType<typeof setTimeout> | undefined;\n private readonly onAbort = () => this.stop(\"abort\");\n\n constructor(\n private readonly request: CodexRunRequest<T>,\n private readonly processHandle: SupervisedCodexProcess,\n private readonly executionId: string,\n private readonly now: () => number,\n private readonly killGraceMs: number,\n private readonly processWallTimeMs: number,\n private readonly cleanup: (() => Promise<void>) | undefined,\n ) {}\n\n async run(): Promise<HarnessRunResult<T, \"codex\">> {\n try {\n this.request.signal?.addEventListener(\"abort\", this.onAbort);\n this.timer = setTimeout(() => this.stop(\"timeout\"), this.processWallTimeMs);\n this.timer.unref?.();\n this.emit({ kind: \"execution_started\", execution: { executionId: this.executionId } });\n const [, , exit] = await Promise.all([this.readStdout(), this.readStderr(), this.processHandle.completed]);\n let result = this.settle(exit);\n result = await this.finishCleanup(result);\n return this.finish(result);\n } catch (error) {\n this.terminate();\n await this.ignoreExitFailure();\n let result = this.failure({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n result = await this.finishCleanup(result);\n return this.finish(result);\n } finally {\n this.dispose();\n }\n }\n\n private async readStdout(): Promise<void> {\n for await (const line of this.processHandle.stdout) {\n if (!line.trim()) continue;\n let event: unknown;\n try {\n event = JSON.parse(line);\n } catch {\n this.streamError = { kind: \"runtime_error\", reason: \"Codex emitted malformed JSONL\", native: { line } };\n this.terminate();\n return;\n }\n this.absorb(event);\n }\n }\n\n private async readStderr(): Promise<void> {\n for await (const line of this.processHandle.stderr) this.stderr = `${this.stderr}${line}\\n`.slice(-65_536);\n }\n\n private absorb(value: unknown): void {\n if (!record(value) || typeof value.type !== \"string\") return;\n if (value.type === \"thread.started\" && typeof value.thread_id === \"string\") this.identify(value.thread_id);\n if (value.type === \"turn.started\") this.nativeTurnId = turnId(value) ?? this.nativeTurnId;\n if (isAgentMessage(value)) {\n this.finalText = value.item.text;\n this.emit({ kind: \"assistant_output\", executionId: this.executionId, text: value.item.text });\n }\n if (value.type === \"turn.completed\") {\n this.turnCompleted = true;\n this.nativeTerminalObserved = true;\n this.nativeTurnId = turnId(value) ?? this.nativeTurnId;\n this.usageRaw = value.usage;\n }\n if (value.type === \"turn.failed\") this.nativeTerminalObserved = true;\n if (value.type === \"turn.failed\" || value.type === \"error\") {\n this.streamError = { kind: \"runtime_error\", reason: eventMessage(value), native: value };\n }\n }\n\n private identify(nativeId: string): void {\n if (!nativeId.trim()) return this.failStream(\"Codex emitted an empty native thread ID\");\n if (this.request.target.kind === \"resume\" && nativeId !== this.request.target.conversation.nativeId) {\n return this.failStream(\"Codex resumed a different native conversation\");\n }\n const namespace =\n this.request.target.kind === \"fresh\" ? this.request.target.namespace : this.request.target.conversation.namespace;\n this.conversation = { harness: \"codex\", namespace, nativeId };\n this.emit({ kind: \"conversation_identified\", executionId: this.executionId, conversation: this.conversation });\n }\n\n private failStream(reason: string): void {\n this.streamError = { kind: \"runtime_error\", reason };\n this.terminate();\n }\n\n private settle(exit: CodexProcessExit): HarnessRunResult<T, \"codex\"> {\n if (this.stopReason && !this.nativeTerminalObserved) return this.failure(cancelledUnknown(this.stopReason, this.request, exit));\n if (this.stopReason === \"timeout\") return this.failure(timeoutFailure(this.request.wallTimeMs));\n if (this.stopReason === \"abort\") return this.failure(abortFailure(this.request.signal));\n if (this.streamError) return this.failure(this.streamError);\n if (exit.exitCode !== 0) return this.failure(exitFailure(exit, this.stderr));\n return this.success();\n }\n\n private success(): HarnessRunResult<T, \"codex\"> {\n if (!this.conversation) return this.failure({ kind: \"runtime_error\", reason: \"Codex completed without a thread.started event\" });\n if (!this.turnCompleted) return this.failure({ kind: \"runtime_error\", reason: \"Codex completed without a turn.completed event\" });\n if (this.finalText === undefined) return this.failure({ kind: \"runtime_error\", reason: \"Codex completed without a final agent message\" });\n const output = parseOutput(this.request, this.finalText);\n if (\"failure\" in output) return this.failure(output.failure);\n return {\n ok: true,\n harness: \"codex\",\n execution: { executionId: this.executionId, conversation: this.conversation },\n conversation: this.conversation,\n output: output.output,\n usage: this.usage(),\n transcript: { format: \"codex-rollout-jsonl\", namespace: this.conversation.namespace },\n };\n }\n\n private usage(): readonly UsageMeasurement[] {\n if (!this.conversation || !record(this.usageRaw)) return [];\n const measurement: UsageMeasurement = {\n kind: \"snapshot\",\n scope: \"turn\",\n scopeId: this.turnScopeId(),\n epoch: this.executionId,\n sequence: 0,\n model: this.request.native?.model ?? null,\n tokens: tokenCounts(this.usageRaw),\n cost: null,\n source: \"codex-exec.turn.completed.usage\",\n };\n return [measurement];\n }\n\n private turnScopeId(): string {\n if (this.conversation && this.nativeTurnId) return conversationItemRef(this.conversation, \"turn\", this.nativeTurnId);\n // Codex exec does not currently report a turn ID. Keep the snapshot scoped to\n // this invocation rather than mislabeling it as a conversation total.\n return `execution:${encodeURIComponent(this.executionId)}:turn`;\n }\n\n private failure(failure: HarnessRunFailure): HarnessRunResult<T, \"codex\"> {\n const execution: ExecutionIdentity = {\n executionId: this.executionId,\n ...(this.conversation ? { conversation: this.conversation } : {}),\n };\n const result: HarnessRunResult<T, \"codex\"> = {\n ok: false,\n harness: \"codex\",\n execution,\n failure,\n usage: this.usage(),\n };\n if (this.conversation) result.conversation = this.conversation;\n return result;\n }\n\n private stop(reason: \"abort\" | \"timeout\"): void {\n if (this.stopReason) return;\n this.stopReason = reason;\n this.terminate();\n }\n\n private terminate(): void {\n this.processHandle.terminate(\"SIGTERM\");\n if (this.forceTimer) return;\n this.forceTimer = setTimeout(() => this.processHandle.terminate(\"SIGKILL\"), this.killGraceMs);\n this.forceTimer.unref?.();\n }\n\n private async ignoreExitFailure(): Promise<void> {\n try {\n await this.processHandle.completed;\n } catch {\n // The original process/stream error is the useful failure.\n }\n }\n\n private finish(result: HarnessRunResult<T, \"codex\">): HarnessRunResult<T, \"codex\"> {\n for (const measurement of result.usage) {\n this.emit({ kind: \"usage\", executionId: this.executionId, measurement });\n }\n if (this.streamError && result.ok) result = this.failure(this.streamError);\n const cancelled = !result.ok && (result.failure.kind === \"aborted\" || result.failure.kind === \"cancelled_unknown\");\n const outcome = result.ok ? \"succeeded\" : cancelled ? \"cancelled\" : \"failed\";\n this.emit({ kind: \"execution_finished\", executionId: this.executionId, outcome });\n return this.streamError && result.ok ? this.failure(this.streamError) : result;\n }\n\n private emit(progress: ProgressPayload): void {\n if (!this.request.onProgress || this.streamError) return;\n try {\n this.request.onProgress({ ...progress, harness: \"codex\", atMs: this.now() } as HarnessRunProgress);\n } catch (error) {\n this.streamError = { kind: \"runtime_error\", reason: `Codex progress callback failed: ${messageOf(error)}`, native: error };\n this.terminate();\n }\n }\n\n private async finishCleanup(result: HarnessRunResult<T, \"codex\">): Promise<HarnessRunResult<T, \"codex\">> {\n if (!this.cleanup) return result;\n try {\n await this.cleanup();\n return result;\n } catch (error) {\n return this.failure({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n }\n }\n\n private dispose(): void {\n if (this.timer) clearTimeout(this.timer);\n if (this.forceTimer) clearTimeout(this.forceTimer);\n this.request.signal?.removeEventListener(\"abort\", this.onAbort);\n }\n}\n\ntype ParsedOutput<T> =\n | { output: { kind: \"text\"; text: string } | { kind: \"structured\"; value: T } }\n | { failure: HarnessRunFailure };\n\nfunction parseOutput<T>(request: CodexRunRequest<T>, text: string): ParsedOutput<T> {\n const schema = request.native?.outputSchema;\n if (!schema) return { output: { kind: \"text\", text } };\n try {\n return { output: { kind: \"structured\", value: schema.parse(JSON.parse(text)) } };\n } catch (error) {\n const reason = `structured output validation failed: ${messageOf(error)}`;\n return { failure: { kind: \"output_invalid\", reason, native: { text, error } } };\n }\n}\n\ntype ProgressPayload =\n | { kind: \"execution_started\"; execution: ExecutionIdentity }\n | { kind: \"conversation_identified\"; executionId: string; conversation: ConversationIdentity }\n | { kind: \"assistant_output\"; executionId: string; text: string }\n | { kind: \"usage\"; executionId: string; measurement: UsageMeasurement }\n | { kind: \"execution_finished\"; executionId: string; outcome: \"succeeded\" | \"failed\" | \"cancelled\" };\n\nfunction tokenCounts(usage: Record<string, unknown>): TokenCounts {\n const input = count(usage.input_tokens);\n const output = count(usage.output_tokens);\n return {\n input,\n output,\n cachedInput: count(usage.cached_input_tokens),\n cacheWriteInput: null,\n reasoningOutput: count(usage.reasoning_output_tokens),\n total: input === null || output === null ? null : input + output,\n };\n}\n\nfunction count(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : null;\n}\n\nfunction isAgentMessage(event: Record<string, unknown>): event is Record<string, unknown> & {\n item: { type: \"agent_message\"; text: string };\n} {\n return event.type === \"item.completed\" && record(event.item) && event.item.type === \"agent_message\" && typeof event.item.text === \"string\";\n}\n\nfunction turnId(event: Record<string, unknown>): string | undefined {\n if (typeof event.turn_id === \"string\" && event.turn_id.trim()) return event.turn_id;\n if (record(event.turn) && typeof event.turn.id === \"string\" && event.turn.id.trim()) return event.turn.id;\n return undefined;\n}\n\nfunction timeoutFailure(wallTimeMs: number): HarnessRunFailure {\n return { kind: \"wall_time_exceeded\", reason: \"Codex execution exceeded its wall deadline\", wallTimeMs };\n}\n\nfunction abortFailure(signal: AbortSignal | undefined): HarnessRunFailure {\n return { kind: \"aborted\", reason: String(signal?.reason ?? \"aborted by caller\") };\n}\n\nfunction cancelledUnknown(\n cause: \"abort\" | \"timeout\",\n request: CodexRunRequest<unknown>,\n exit: CodexProcessExit,\n): HarnessRunFailure {\n const requested = cause === \"timeout\"\n ? { kind: \"wall_time_exceeded\", wallTimeMs: request.wallTimeMs }\n : { kind: \"external_abort\", reason: String(request.signal?.reason ?? \"aborted by caller\") };\n return {\n kind: \"cancelled_unknown\",\n reason: `Codex process stopped after ${cause} without a native terminal turn event`,\n native: { cause, requested, processExit: exit },\n };\n}\n\nfunction exitFailure(exit: CodexProcessExit, stderr: string): HarnessRunFailure {\n return {\n kind: \"runtime_error\",\n reason: stderr.trim() || `Codex exited with status ${String(exit.exitCode)}`,\n native: exit,\n };\n}\n\nfunction eventMessage(event: Record<string, unknown>): string {\n if (typeof event.message === \"string\") return event.message;\n if (record(event.error) && typeof event.error.message === \"string\") return event.error.message;\n return `Codex emitted ${String(event.type)}`;\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { execFile, spawn, type ChildProcessByStdio } from \"node:child_process\";\nimport { mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { Readable } from \"node:stream\";\n\nexport interface CodexProcessExit {\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n}\n\nexport interface SupervisedCodexProcess {\n stdout: AsyncIterable<string>;\n stderr: AsyncIterable<string>;\n completed: Promise<CodexProcessExit>;\n terminate(signal: \"SIGTERM\" | \"SIGKILL\"): void;\n}\n\nexport interface CodexSchemaFile {\n path: string;\n dispose(): Promise<void>;\n}\n\nexport interface CodexProcessInput {\n executablePath: string;\n args: readonly string[];\n cwd: string;\n env: Record<string, string>;\n}\n\nexport interface CodexVersionInspectionOptions {\n signal?: AbortSignal;\n timeoutMs: number;\n}\n\nexport async function inspectCodexVersion(\n executablePath: string,\n env: Record<string, string>,\n options: CodexVersionInspectionOptions,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n execFile(\n executablePath,\n [\"--version\"],\n {\n env,\n encoding: \"utf8\",\n signal: options.signal,\n timeout: Math.max(1, Math.ceil(options.timeoutMs)),\n killSignal: \"SIGKILL\",\n },\n (error, stdout) => {\n if (error) reject(error);\n else resolve(stdout);\n },\n );\n });\n}\n\nexport function startCodexProcess(input: CodexProcessInput): SupervisedCodexProcess {\n const child = spawn(input.executablePath, input.args, {\n cwd: input.cwd,\n env: input.env,\n detached: process.platform !== \"win32\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n return {\n stdout: lines(child.stdout),\n stderr: lines(child.stderr),\n completed: completionOf(child),\n terminate: (signal) => terminateProcessGroup(child, signal),\n };\n}\n\nexport async function createCodexSchemaFile(schema: Record<string, unknown>): Promise<CodexSchemaFile> {\n const directory = await mkdtemp(join(tmpdir(), \"titan-codex-schema-\"));\n const path = join(directory, \"output-schema.json\");\n try {\n await writeFile(path, JSON.stringify(schema), { encoding: \"utf8\", mode: 0o600 });\n return { path, dispose: () => rm(directory, { recursive: true, force: true }) };\n } catch (error) {\n await rm(directory, { recursive: true, force: true });\n throw error;\n }\n}\n\nasync function* lines(stream: Readable): AsyncIterable<string> {\n const reader = createInterface({ input: stream });\n for await (const line of reader) yield line;\n}\n\ntype SpawnedCodexProcess = ChildProcessByStdio<null, Readable, Readable>;\n\nfunction completionOf(child: SpawnedCodexProcess): Promise<CodexProcessExit> {\n return new Promise((resolve, reject) => {\n child.once(\"error\", reject);\n child.once(\"close\", (exitCode, signal) => resolve({ exitCode, signal }));\n });\n}\n\nfunction terminateProcessGroup(child: SpawnedCodexProcess, signal: NodeJS.Signals): void {\n if (child.pid && process.platform !== \"win32\") {\n try {\n process.kill(-child.pid, signal);\n return;\n } catch {\n // A failed group signal still gets a direct-child fallback.\n }\n }\n try {\n child.kill(signal);\n } catch {\n // Cleanup is idempotent; the child may already have exited.\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n isTerminalExecutionPhase,\n type ExecutionOwnerFence,\n type ExecutionRecord,\n type ExecutionTerminal,\n type ExecutionTransition,\n} from \"@titan-design/agent-protocol\";\nimport type { Harness, HarnessRunProgress, HarnessRunResult } from \"./harness-contracts.js\";\nimport { terminalFromHarnessResult } from \"./durable-result.js\";\nimport type {\n DurableCancelResult,\n DurableDispatchAck,\n DurableDispatchInput,\n DurableHarnessDispatcher,\n DurableHarnessDispatcherDeps,\n DurableHarnessDispatcherOptions,\n DurableHarnessRecord,\n DurableHarnessSuccess,\n DurableReconcileOutcome,\n DurableSettlement,\n} from \"./durable-types.js\";\nimport {\n failureKind,\n message,\n nonempty,\n ownsLiveFence,\n positive,\n raceLiveResult,\n readLedgerRecord,\n recordFence,\n startLiveExecution,\n type LiveExecution,\n type StoredSuccess,\n type TransitionFields,\n validateDispatchInput,\n} from \"./durable-dispatcher-support.js\";\nimport { claimForRecovery, closePrepared, reconcileLive, requireRecovery } from \"./durable-reconcile.js\";\n\nexport function createDurableHarnessDispatcher<H extends Harness>(\n adapter: DurableHarnessDispatcher<H>[\"adapter\"],\n options: DurableHarnessDispatcherOptions<H>,\n deps: DurableHarnessDispatcherDeps = {},\n): DurableHarnessDispatcher<H> {\n return new Dispatcher(adapter, options, deps);\n}\nclass Dispatcher<H extends Harness> implements DurableHarnessDispatcher<H> {\n private readonly live = new Map<string, LiveExecution<H>>();\n private readonly eventId: () => string;\n private readonly now: () => number;\n private readonly schedule: typeof globalThis.setInterval;\n private readonly unschedule: typeof globalThis.clearInterval;\n private readonly renewEveryMs: number;\n\n constructor(\n readonly adapter: DurableHarnessDispatcher<H>[\"adapter\"],\n private readonly options: DurableHarnessDispatcherOptions<H>,\n deps: DurableHarnessDispatcherDeps,\n ) {\n nonempty(\"supervisorId\", options.supervisorId);\n positive(\"leaseMs\", options.leaseMs);\n this.renewEveryMs = options.renewEveryMs ?? Math.max(1, Math.floor(options.leaseMs / 3));\n positive(\"renewEveryMs\", this.renewEveryMs);\n if (this.renewEveryMs >= options.leaseMs) throw new TypeError(\"renewEveryMs must be less than leaseMs\");\n this.eventId = deps.eventId ?? randomUUID;\n this.now = deps.now ?? Date.now;\n this.schedule = deps.setInterval ?? globalThis.setInterval;\n this.unschedule = deps.clearInterval ?? globalThis.clearInterval;\n }\n async dispatch<T>(input: DurableDispatchInput<H, T>): Promise<DurableDispatchAck<T, H>> {\n validateDispatchInput(input, this.adapter.descriptor.harness);\n const prepared = this.prepare(input);\n if (input.request.signal?.aborted) return this.preCancelled(input, prepared);\n this.apply(input.executionId, {\n kind: \"begin_dispatch\",\n fence: recordFence(prepared),\n });\n\n const controller = new AbortController();\n const live = this.startLive(input.executionId, recordFence(prepared), controller, input.request.signal);\n this.live.set(input.executionId, live);\n const completion = this.runAdapter(input, live);\n live.completion = completion as Promise<DurableSettlement<unknown, H>>;\n completion.catch(() => undefined);\n return { executionId: input.executionId, requestKey: input.requestKey, runnerRef: input.executionId, completion };\n }\n async reconcile(executionId: string): Promise<DurableReconcileOutcome<H>> {\n nonempty(\"executionId\", executionId);\n const active = this.live.get(executionId);\n if (active) return reconcileLive(this.options.ledger, executionId, active, this.now(), (evidence) => this.failLive(active, \"ownership_lost\", evidence));\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) return { kind: \"ownership_lost\", evidence: read.evidence };\n const current = read.record;\n if (!current) return { kind: \"unknown\", evidence: \"execution ledger has no durable receipt; native submission cannot be excluded\" };\n if (current.terminal) return { kind: \"terminal\", terminal: current.terminal, evidence: \"terminal execution ledger receipt\" };\n\n const claimed = claimForRecovery(\n current,\n { now: this.now(), supervisorId: this.options.supervisorId, leaseUntil: this.leaseUntil() },\n (record, fields) => this.tryApply(record, fields),\n );\n if (!claimed.ok) return { kind: \"ownership_lost\", evidence: claimed.evidence };\n if (claimed.record.phase === \"prepared\") {\n return closePrepared(claimed.record, (record, fields) => this.tryApply(record, fields));\n }\n if (claimed.record.phase !== \"recovery_required\") {\n const recovered = requireRecovery(claimed.record, recordFence(claimed.record), \"dispatcher restarted without a transport attachment handle\", (record, fields) => this.tryApply(record, fields));\n if (recovered.kind === \"ownership_lost\") return recovered;\n if (recovered.kind === \"terminal\") return { kind: \"terminal\", terminal: recovered.terminal, evidence: \"execution became terminal during reconciliation\" };\n }\n return { kind: \"unknown\", evidence: \"transport cannot prove liveness, terminal state, or safe absence after restart\" };\n }\n cancel(executionId: string, reason: string): DurableCancelResult<H> {\n nonempty(\"reason\", reason);\n const live = this.live.get(executionId);\n if (!live) return { kind: \"not_live\", evidence: \"this dispatcher has no owned live handle\" };\n let current: DurableHarnessRecord<H> | undefined;\n try { current = this.options.ledger.get(executionId); }\n catch (error) {\n this.failLive(live, \"ownership_lost\", `cancellation ownership could not be verified: ${message(error)}`);\n return { kind: \"ownership_lost\", evidence: message(error) };\n }\n if (!current) return { kind: \"ownership_lost\", evidence: \"execution record disappeared\" };\n if (current.phase === \"cancel_requested\" && current.cancellation?.reason === reason) {\n if (!ownsLiveFence(current, live.fence, this.now())) {\n this.failLive(live, \"ownership_lost\", \"cancellation owner lease changed or expired\");\n return { kind: \"ownership_lost\", record: current, evidence: \"cancellation owner lease changed or expired\" };\n }\n live.controller.abort(new Error(reason));\n return { kind: \"requested\", record: current };\n }\n let result: ReturnType<DurableHarnessDispatcherOptions<H>[\"ledger\"][\"apply\"]>;\n try { result = this.tryApply(current, { kind: \"request_cancellation\", fence: live.fence, reason }); }\n catch (error) {\n this.failLive(live, \"recovery_required\", `cancellation intent was not durable: ${message(error)}`);\n return { kind: \"ownership_lost\", record: current, evidence: message(error) };\n }\n if (!result.ok) {\n this.failLive(live, failureKind(result.kind), `cancellation intent was rejected: ${result.reason}`);\n return { kind: \"ownership_lost\", record: current, evidence: result.reason };\n }\n live.controller.abort(new Error(reason));\n return { kind: \"requested\", record: result.record };\n }\n private prepare<T>(input: DurableDispatchInput<H, T>): DurableHarnessRecord<H> {\n const conversation = input.request.target.kind === \"resume\" ? input.request.target.conversation : undefined;\n const result = this.options.ledger.apply({\n kind: \"prepare\",\n executionId: input.executionId,\n eventId: this.eventId(),\n expectedRevision: 0,\n occurredAt: this.iso(),\n execution: { executionId: input.executionId, ...(conversation ? { conversation } : {}) },\n ...(input.agent ? { agent: input.agent } : {}),\n harness: input.request.harness,\n requestKey: input.requestKey,\n target: input.request.target,\n owner: { supervisorId: this.options.supervisorId, generation: 1, leaseUntil: this.leaseUntil() },\n });\n if (!result.ok) throw new Error(`could not prepare execution: ${result.kind}: ${result.reason}`);\n if (!result.applied) throw new Error(\"dispatch requires a new execution identity\");\n return result.record;\n }\n\n private preCancelled<T>(input: DurableDispatchInput<H, T>, record: DurableHarnessRecord<H>): DurableDispatchAck<T, H> {\n const reason = String(input.request.signal?.reason ?? \"aborted before dispatch\");\n const result = this.apply(input.executionId, {\n kind: \"finish\",\n fence: recordFence(record),\n terminal: { outcome: \"cancelled\", reason },\n });\n const terminal = result.terminal as ExecutionTerminal<DurableHarnessSuccess<T, H>>;\n const completion = Promise.resolve({ kind: \"terminal\", record: result, terminal } as DurableSettlement<T, H>);\n return { executionId: input.executionId, requestKey: input.requestKey, runnerRef: input.executionId, completion };\n }\n\n private startLive(executionId: string, fence: ExecutionOwnerFence, controller: AbortController, externalSignal?: AbortSignal): LiveExecution<H> {\n return startLiveExecution({\n fence,\n controller,\n schedule: this.schedule,\n renewEveryMs: this.renewEveryMs,\n onRenew: () => this.renew(executionId),\n onExternalAbort: () => { this.cancel(executionId, String(externalSignal?.reason ?? \"aborted by caller\")); },\n ...(externalSignal ? { externalSignal } : {}),\n });\n }\n\n private async runAdapter<T>(input: DurableDispatchInput<H, T>, live: LiveExecution<H>): Promise<DurableSettlement<T, H>> {\n try {\n const raced = await raceLiveResult(this.adapter.run({\n ...input.request,\n signal: live.controller.signal,\n onProgress: (progress) => this.progress(input.executionId, live, progress, input.request.onProgress),\n }), live);\n if (raced.kind === \"problem\") {\n return this.problemSettlement(input.executionId, live, raced.problem) as DurableSettlement<T, H>;\n }\n const result = raced.result;\n if (!result.ok && result.failure.kind === \"runtime_error\") {\n return this.problemSettlement(input.executionId, live, {\n kind: \"recovery_required\",\n evidence: `adapter runtime state is ambiguous: ${result.failure.reason}`,\n }) as DurableSettlement<T, H>;\n }\n return this.persistResult(input.executionId, live, result);\n } catch (error) {\n return this.problemSettlement(input.executionId, live, {\n kind: \"recovery_required\",\n evidence: `adapter threw after durable dispatch: ${message(error)}`,\n }) as DurableSettlement<T, H>;\n } finally {\n this.stopLive(input.executionId, live);\n }\n }\n\n private progress(executionId: string, live: LiveExecution<H>, progress: HarnessRunProgress, forward?: (progress: HarnessRunProgress) => void): void {\n if (progress.kind === \"execution_started\") {\n if (live.adapterExecutionId && live.adapterExecutionId !== progress.execution.executionId) {\n this.failLive(live, \"recovery_required\", \"adapter execution identity changed during one dispatch\");\n } else {\n live.adapterExecutionId = progress.execution.executionId;\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok || !read.record) this.failLive(live, \"ownership_lost\", read.ok ? \"execution record disappeared\" : read.evidence);\n const current = read.ok ? read.record : undefined;\n if (current && (current.phase === \"dispatching\" || current.phase === \"recovery_required\")) {\n try {\n const result = this.tryApply(current, {\n kind: \"observe_running\",\n fence: live.fence,\n runnerRef: executionId,\n adapterExecution: progress.execution,\n evidence: \"adapter emitted execution_started\",\n });\n if (!result.ok) this.failLive(live, failureKind(result.kind), result.reason);\n } catch (error) {\n this.failLive(live, \"recovery_required\", `could not persist running observation: ${message(error)}`);\n }\n }\n }\n }\n if (progress.kind === \"conversation_identified\") this.observeConversation(executionId, live, progress);\n forward?.(progress);\n }\n\n private observeConversation(executionId: string, live: LiveExecution<H>, progress: Extract<HarnessRunProgress, { kind: \"conversation_identified\" }>): void {\n if (live.adapterExecutionId && live.adapterExecutionId !== progress.executionId) {\n this.failLive(live, \"recovery_required\", \"conversation referred to a different adapter execution\");\n return;\n }\n try {\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) {\n this.failLive(live, \"ownership_lost\", read.evidence);\n return;\n }\n const current = read.record;\n if (!current || isTerminalExecutionPhase(current.phase)) {\n this.failLive(live, \"ownership_lost\", \"execution record is unavailable or terminal while identifying conversation\");\n return;\n }\n const result = this.tryApply(current, { kind: \"identify_conversation\", fence: live.fence, conversation: progress.conversation });\n if (!result.ok) this.failLive(live, failureKind(result.kind), result.reason);\n } catch (error) {\n this.failLive(live, \"recovery_required\", `could not persist conversation identity: ${message(error)}`);\n }\n }\n\n private persistResult<T>(executionId: string, live: LiveExecution<H>, result: HarnessRunResult<T, H>): DurableSettlement<T, H> {\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) return { kind: \"ownership_lost\", evidence: read.evidence };\n const current = read.record;\n if (!current) return { kind: \"ownership_lost\", evidence: \"execution record disappeared before terminal persistence\" };\n const terminal = terminalFromHarnessResult(result);\n const applied = this.tryApply(current, {\n kind: \"finish\",\n fence: live.fence,\n terminal: terminal as ExecutionTerminal<StoredSuccess<H>>,\n ...(result.execution ? { adapterExecution: result.execution } : {}),\n ...(result.conversation ? { conversation: result.conversation } : {}),\n });\n if (!applied.ok) return requireRecovery(current, live.fence, `terminal result was not durable: ${applied.reason}`, (record, fields) => this.tryApply(record, fields)) as DurableSettlement<T, H>;\n return {\n kind: \"terminal\",\n record: applied.record as ExecutionRecord<DurableHarnessSuccess<T, H>>,\n terminal,\n };\n }\n\n private renew(executionId: string): void {\n const live = this.live.get(executionId);\n if (!live) return;\n try {\n const current = this.options.ledger.get(executionId);\n if (!current || isTerminalExecutionPhase(current.phase)) {\n this.failLive(live, \"ownership_lost\", \"execution record is unavailable or terminal during lease renewal\");\n return;\n }\n const result = this.tryApply(current, { kind: \"renew_owner\", fence: live.fence, leaseUntil: this.leaseUntil() });\n if (!result.ok) this.failLive(live, failureKind(result.kind), `lease renewal failed: ${result.reason}`);\n } catch (error) {\n this.failLive(live, \"ownership_lost\", `lease renewal threw: ${message(error)}`);\n }\n }\n\n private failLive(live: LiveExecution<H>, kind: \"ownership_lost\" | \"recovery_required\", evidence: string): void {\n if (!live.problem) {\n live.problem = { kind, evidence };\n live.resolveProblem(live.problem);\n }\n live.controller.abort(new Error(evidence));\n }\n\n private problemSettlement(executionId: string, live: LiveExecution<H>, problem: NonNullable<LiveExecution<H>[\"problem\"]>): DurableSettlement<unknown, H> {\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) return { kind: \"ownership_lost\", evidence: `${problem.evidence}; ${read.evidence}` };\n if (problem.kind === \"ownership_lost\") return { kind: \"ownership_lost\", record: read.record, evidence: problem.evidence };\n return requireRecovery(read.record, live.fence, problem.evidence, (record, fields) => this.tryApply(record, fields));\n }\n\n private tryApply(\n current: DurableHarnessRecord<H>,\n fields: TransitionFields<H>,\n ): ReturnType<DurableHarnessDispatcherOptions<H>[\"ledger\"][\"apply\"]> {\n return this.options.ledger.apply({\n ...fields,\n executionId: current.execution.executionId,\n eventId: this.eventId(),\n expectedRevision: current.revision,\n occurredAt: this.iso(),\n } as ExecutionTransition<StoredSuccess<H>>);\n }\n\n private apply(executionId: string, fields: TransitionFields<H>): DurableHarnessRecord<H> {\n const current = this.options.ledger.get(executionId);\n if (!current) throw new Error(`execution ${executionId} is missing`);\n const result = this.tryApply(current, fields);\n if (!result.ok) throw new Error(`${result.kind}: ${result.reason}`);\n return result.record;\n }\n\n private stopLive(executionId: string, live: LiveExecution<H>): void {\n this.unschedule(live.timer);\n live.externalSignal?.removeEventListener(\"abort\", live.onExternalAbort!);\n if (this.live.get(executionId) === live) this.live.delete(executionId);\n }\n\n private iso(): string { return new Date(this.now()).toISOString(); }\n private leaseUntil(): string { return new Date(this.now() + this.options.leaseMs).toISOString(); }\n}\n","import type { ExecutionTerminal } from \"@titan-design/agent-protocol\";\nimport type { Harness, HarnessRunFailure, HarnessRunResult } from \"./harness-contracts.js\";\nimport type { DurableHarnessSuccess } from \"./durable-types.js\";\n\nexport function terminalFromHarnessResult<T, H extends Harness>(\n result: HarnessRunResult<T, H>,\n): ExecutionTerminal<DurableHarnessSuccess<T, H>> {\n if (result.ok) {\n return {\n outcome: \"succeeded\",\n result: {\n harness: result.harness,\n adapterExecution: result.execution,\n conversation: result.conversation,\n output: result.output,\n usage: result.usage,\n ...(result.transcript ? { transcript: result.transcript } : {}),\n },\n };\n }\n const reason = `${result.failure.kind}: ${result.failure.reason}`;\n if (result.failure.kind === \"aborted\" || result.failure.kind === \"cancelled_unknown\" || result.failure.kind === \"wall_time_exceeded\") {\n return { outcome: \"cancellation_unknown\", reason, evidence: cancellationEvidence(result.failure) };\n }\n // The shared failure contract does not prove the native invocation was absent.\n return { outcome: \"failed\", reason, retryable: false };\n}\n\nfunction cancellationEvidence(failure: HarnessRunFailure): string {\n if (failure.kind === \"wall_time_exceeded\") return \"wall deadline elapsed after durable dispatch without a native terminal acknowledgement\";\n return failure.kind === \"cancelled_unknown\"\n ? \"adapter reported cancellation without a native terminal acknowledgement\"\n : \"adapter was aborted after durable dispatch without a native terminal acknowledgement\";\n}\n","import type { ExecutionLedger } from \"@titan-design/agent-lifecycle\";\nimport type { ExecutionOwnerFence, ExecutionRecord, ExecutionTransition } from \"@titan-design/agent-protocol\";\nimport type { Harness, HarnessRunResult } from \"./harness-contracts.js\";\nimport type { DurableDispatchInput, DurableHarnessSuccess, DurableSettlement } from \"./durable-types.js\";\n\nexport type StoredSuccess<H extends Harness> = DurableHarnessSuccess<unknown, H>;\n\nexport interface LiveExecution<H extends Harness> {\n fence: ExecutionOwnerFence;\n controller: AbortController;\n completion: Promise<DurableSettlement<unknown, H>>;\n timer: ReturnType<typeof globalThis.setInterval>;\n externalSignal?: AbortSignal;\n onExternalAbort?: () => void;\n adapterExecutionId?: string;\n problem?: { kind: \"ownership_lost\" | \"recovery_required\"; evidence: string };\n problemPromise: Promise<NonNullable<LiveExecution<H>[\"problem\"]>>;\n resolveProblem: (problem: NonNullable<LiveExecution<H>[\"problem\"]>) => void;\n}\n\ntype WithoutEnvelope<T> = T extends unknown\n ? Omit<T, \"executionId\" | \"eventId\" | \"expectedRevision\" | \"occurredAt\">\n : never;\n\nexport type TransitionFields<H extends Harness> = WithoutEnvelope<\n Exclude<ExecutionTransition<StoredSuccess<H>>, { kind: \"prepare\" }>\n>;\n\nexport function failureKind(kind: string): \"ownership_lost\" | \"recovery_required\" {\n return kind === \"ownership_lost\" || kind === \"revision_conflict\" ? \"ownership_lost\" : \"recovery_required\";\n}\n\nexport function positive(name: string, value: number): void {\n if (!Number.isFinite(value) || value <= 0) throw new TypeError(`${name} must be a positive finite number`);\n}\n\nexport function nonempty(name: string, value: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) throw new TypeError(`${name} must be a nonempty string`);\n}\n\nexport function recordFence(record: ExecutionRecord<unknown>): ExecutionOwnerFence {\n if (!record.owner) throw new Error(\"execution has no active owner\");\n return { supervisorId: record.owner.supervisorId, generation: record.owner.generation };\n}\n\nexport function ownsLiveFence(record: ExecutionRecord<unknown>, fence: ExecutionOwnerFence, now: number): boolean {\n return record.owner?.supervisorId === fence.supervisorId\n && record.owner.generation === fence.generation\n && Date.parse(record.owner.leaseUntil) > now;\n}\n\nexport function validateDispatchInput<H extends Harness>(\n input: DurableDispatchInput<H, unknown>,\n adapterHarness: H,\n): void {\n nonempty(\"executionId\", input.executionId);\n nonempty(\"requestKey\", input.requestKey);\n if (input.request.harness !== adapterHarness) throw new TypeError(\"request harness does not match adapter\");\n}\n\nexport function startLiveExecution<H extends Harness>(options: {\n fence: ExecutionOwnerFence;\n controller: AbortController;\n externalSignal?: AbortSignal;\n schedule: typeof globalThis.setInterval;\n renewEveryMs: number;\n onRenew: () => void;\n onExternalAbort: () => void;\n}): LiveExecution<H> {\n let resolveProblem!: LiveExecution<H>[\"resolveProblem\"];\n const problemPromise = new Promise<NonNullable<LiveExecution<H>[\"problem\"]>>((resolve) => { resolveProblem = resolve; });\n const timer = options.schedule(options.onRenew, options.renewEveryMs);\n if (typeof timer === \"object\") timer.unref?.();\n const live: LiveExecution<H> = {\n fence: options.fence,\n controller: options.controller,\n completion: Promise.resolve(undefined as never),\n problemPromise,\n resolveProblem,\n timer,\n ...(options.externalSignal ? { externalSignal: options.externalSignal, onExternalAbort: options.onExternalAbort } : {}),\n };\n options.externalSignal?.addEventListener(\"abort\", options.onExternalAbort, { once: true });\n return live;\n}\n\nexport async function raceLiveResult<T, H extends Harness>(\n result: Promise<HarnessRunResult<T, H>>,\n live: LiveExecution<H>,\n): Promise<{ kind: \"result\"; result: HarnessRunResult<T, H> } | { kind: \"problem\"; problem: NonNullable<LiveExecution<H>[\"problem\"]> }> {\n return Promise.race([\n result.then((value) => ({ kind: \"result\" as const, result: value })),\n live.problemPromise.then((problem) => ({ kind: \"problem\" as const, problem })),\n ]);\n}\n\nexport function readLedgerRecord<H extends Harness>(\n ledger: Pick<ExecutionLedger<StoredSuccess<H>>, \"get\">,\n executionId: string,\n): { ok: true; record: ExecutionRecord<StoredSuccess<H>> | undefined } | { ok: false; evidence: string } {\n try { return { ok: true, record: ledger.get(executionId) }; }\n catch (error) { return { ok: false, evidence: `execution ledger read failed: ${message(error)}` }; }\n}\n\nexport function message(error: unknown): string { return error instanceof Error ? error.message : String(error); }\n","import type { ExecutionLedger } from \"@titan-design/agent-lifecycle\";\nimport { isTerminalExecutionPhase, type ExecutionOwnerFence, type ExecutionTerminal } from \"@titan-design/agent-protocol\";\nimport {\n message,\n ownsLiveFence,\n readLedgerRecord,\n recordFence,\n type LiveExecution,\n type StoredSuccess,\n type TransitionFields,\n} from \"./durable-dispatcher-support.js\";\nimport type { DurableHarnessRecord, DurableReconcileOutcome, DurableSettlement } from \"./durable-types.js\";\nimport type { Harness } from \"./harness-contracts.js\";\n\ntype ApplyFields<H extends Harness> = (\n record: DurableHarnessRecord<H>,\n fields: TransitionFields<H>,\n) => ReturnType<ExecutionLedger<StoredSuccess<H>>[\"apply\"]>;\n\nexport function reconcileLive<H extends Harness>(\n ledger: ExecutionLedger<StoredSuccess<H>>,\n executionId: string,\n live: LiveExecution<H>,\n now: number,\n fail: (evidence: string) => void,\n): DurableReconcileOutcome<H> {\n const read = readLedgerRecord(ledger, executionId);\n const evidence = !read.ok\n ? `live ownership could not be verified: ${read.evidence}`\n : !read.record || !ownsLiveFence(read.record, live.fence, now)\n ? \"live execution no longer has its captured owner lease\"\n : undefined;\n if (evidence) {\n fail(evidence);\n return { kind: \"ownership_lost\", evidence };\n }\n return { kind: \"running\", running: { runnerRef: executionId, completion: live.completion }, evidence: \"same dispatcher owns the completion handle\" };\n}\n\nexport function claimForRecovery<H extends Harness>(\n record: DurableHarnessRecord<H>,\n options: { now: number; supervisorId: string; leaseUntil: string },\n apply: ApplyFields<H>,\n): { ok: true; record: DurableHarnessRecord<H> } | { ok: false; evidence: string } {\n if (record.owner && Date.parse(record.owner.leaseUntil) > options.now) return { ok: false, evidence: \"another live owner lease fences recovery\" };\n try {\n const result = apply(record, {\n kind: \"claim_owner\",\n owner: { supervisorId: options.supervisorId, generation: record.ownerGeneration + 1, leaseUntil: options.leaseUntil },\n });\n return result.ok ? { ok: true, record: result.record } : { ok: false, evidence: result.reason };\n } catch (error) {\n return { ok: false, evidence: `ownership claim failed: ${message(error)}` };\n }\n}\n\nexport function closePrepared<H extends Harness>(\n record: DurableHarnessRecord<H>,\n apply: ApplyFields<H>,\n): DurableReconcileOutcome<H> {\n const terminal: ExecutionTerminal<StoredSuccess<H>> = {\n outcome: \"failed\",\n reason: \"durable preparation exists but dispatch never began\",\n retryable: true,\n };\n try {\n const result = apply(record, { kind: \"finish\", fence: recordFence(record), terminal });\n return result.ok\n ? { kind: \"terminal\", terminal, evidence: \"prepared phase proves begin_dispatch was never committed\" }\n : { kind: \"ownership_lost\", evidence: result.reason };\n } catch (error) {\n return { kind: \"ownership_lost\", evidence: `prepared execution could not be closed: ${message(error)}` };\n }\n}\n\nexport function requireRecovery<H extends Harness>(\n record: DurableHarnessRecord<H> | undefined,\n fence: ExecutionOwnerFence,\n evidence: string,\n apply: ApplyFields<H>,\n): DurableSettlement<unknown, H> {\n if (!record) return { kind: \"ownership_lost\", evidence: \"execution record is unavailable\" };\n if (!record.owner || record.owner.supervisorId !== fence.supervisorId || record.owner.generation !== fence.generation) {\n return { kind: \"ownership_lost\", record, evidence: \"execution ownership changed before recovery evidence could be stored\" };\n }\n if (record.phase === \"recovery_required\") return { kind: \"recovery_required\", record, evidence };\n if (isTerminalExecutionPhase(record.phase)) return { kind: \"terminal\", record, terminal: record.terminal! };\n try {\n const result = apply(record, { kind: \"require_recovery\", fence, evidence });\n return result.ok ? { kind: \"recovery_required\", record: result.record, evidence } : { kind: \"ownership_lost\", record, evidence: result.reason };\n } catch (error) {\n return { kind: \"ownership_lost\", record, evidence: `recovery evidence was not durable: ${message(error)}` };\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { query, type Query, type SDKMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { ConversationIdentity, ExecutionIdentity } from \"@titan-design/agent-protocol\";\nimport { EXECUTION_CAPABILITIES, type ClaudeCodeRunRequest, type HarnessAdapter, type HarnessCapabilityDescriptor, type HarnessRunFailure, type HarnessRunProgress, type HarnessRunResult } from \"./harness-contracts.js\";\nimport { preflightHarnessRun } from \"./preflight.js\";\nimport { runAgent, type AgentRunDeps } from \"./run.js\";\nimport { claudeFailure, claudeUsage } from \"./claude-code-result.js\";\n\nexport interface ClaudeCodeAdapterOptions {\n maxTurns: number;\n maxBudgetUsd: number;\n inactivityTimeoutMs?: number;\n deps?: AgentRunDeps;\n}\n\n/** Existing Claude query circuit breakers remain mandatory; their native units stay explicit. */\nexport function createClaudeCodeAdapter(options: ClaudeCodeAdapterOptions): HarnessAdapter<\"claude-code\"> {\n for (const field of [\"maxTurns\", \"maxBudgetUsd\", \"inactivityTimeoutMs\"] as const) {\n const value = options[field];\n if (value === undefined && field === \"inactivityTimeoutMs\") continue;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) throw new TypeError(`${field} must be positive and finite`);\n }\n const descriptor = claudeCodeCapabilities();\n return {\n descriptor,\n async run<T>(request: ClaudeCodeRunRequest<T>): Promise<HarnessRunResult<T, \"claude-code\">> {\n const failure = preflightHarnessRun(request, descriptor);\n if (failure) return { ok: false, harness: \"claude-code\", failure, usage: [] };\n if (request.wallTimeMs > 2_147_483_647) return { ok: false, harness: \"claude-code\", failure: { kind: \"invalid_request\", reason: \"wallTimeMs exceeds the local timer range\" }, usage: [] };\n return new ClaudeInvocation(request, options).run();\n },\n };\n}\n\nexport function claudeCodeCapabilities(): HarnessCapabilityDescriptor<\"claude-code\"> {\n const capabilities = Object.fromEntries(EXECUTION_CAPABILITIES.map(capability => [capability, {\n status: \"unsupported\", reason: \"not exposed by this bounded Claude SDK adapter\",\n }])) as HarnessCapabilityDescriptor<\"claude-code\">[\"capabilities\"];\n for (const capability of [\"fresh_run\", \"resume\", \"structured_output\", \"external_cancellation\", \"token_reporting\"] as const) {\n capabilities[capability] = { status: \"supported\", evidence: \"bounded wrapper around the existing runAgent SDK query\" };\n }\n return {\n harness: \"claude-code\", adapter: { name: \"claude-sdk-bounded\", version: \"1\" }, capabilities,\n limits: [{ unit: \"milliseconds\", scope: \"execution\", enforcement: \"hard\", assessment: {\n status: \"supported\", evidence: \"local deadline aborts and closes the owned query; native cancellation remains unconfirmed\",\n } }],\n };\n}\n\ntype ProgressBody<T> = T extends unknown ? Omit<T, \"harness\" | \"atMs\"> : never;\n\nclass ClaudeInvocation<T> {\n private readonly controller = new AbortController();\n private readonly execution: ExecutionIdentity;\n private conversation?: ConversationIdentity;\n private stream?: Query;\n private active = true;\n private timer?: ReturnType<typeof setTimeout>;\n private stop!: (failure: HarnessRunFailure) => void;\n private readonly onAbort = () => this.stop({ kind: \"aborted\", reason: String(this.request.signal?.reason ?? \"caller aborted\") });\n\n constructor(private readonly request: ClaudeCodeRunRequest<T>, private readonly options: ClaudeCodeAdapterOptions) {\n this.conversation = request.target.kind === \"resume\" ? request.target.conversation : undefined;\n this.execution = { executionId: randomUUID(), ...(this.conversation ? { conversation: this.conversation } : {}) };\n }\n\n async run(): Promise<HarnessRunResult<T, \"claude-code\">> {\n try {\n const stopped = new Promise<HarnessRunResult<T, \"claude-code\">>(resolve => {\n this.stop = failure => {\n if (!this.active) return;\n this.active = false;\n this.controller.abort(new Error(failure.reason));\n this.close();\n resolve(this.failed(failure));\n };\n });\n this.timer = setTimeout(() => this.stop({ kind: \"wall_time_exceeded\", reason: \"Claude query exceeded local wall deadline\", wallTimeMs: this.request.wallTimeMs }), this.request.wallTimeMs);\n this.timer.unref?.();\n this.request.signal?.addEventListener(\"abort\", this.onAbort, { once: true });\n if (this.request.signal?.aborted) this.onAbort();\n this.emit({ kind: \"execution_started\", execution: this.execution });\n if (!this.active) return await stopped;\n const result = await Promise.race([this.invoke(), stopped]);\n this.active = false;\n this.emit({ kind: \"execution_finished\", executionId: this.execution.executionId,\n outcome: result.ok ? \"succeeded\" : result.failure.kind === \"aborted\" || result.failure.kind === \"wall_time_exceeded\" || result.failure.kind === \"cancelled_unknown\" ? \"cancelled\" : \"failed\" });\n return result;\n } catch (error) {\n this.controller.abort(error);\n return this.failed({ kind: \"runtime_error\", reason: error instanceof Error ? error.message : String(error) });\n } finally {\n this.active = false;\n if (this.timer) clearTimeout(this.timer);\n this.request.signal?.removeEventListener(\"abort\", this.onAbort);\n this.close();\n }\n }\n\n private async invoke(): Promise<HarnessRunResult<T, \"claude-code\">> {\n const result = await runAgent<T>({\n ...this.request.native, prompt: this.request.prompt, cwd: this.request.cwd,\n maxTurns: this.options.maxTurns, maxBudgetUsd: this.options.maxBudgetUsd,\n inactivityTimeoutMs: this.options.inactivityTimeoutMs, signal: this.controller.signal,\n resumeSessionId: this.request.target.kind === \"resume\" ? this.request.target.conversation.nativeId : undefined,\n onMessage: message => this.observe(message),\n }, { ...this.options.deps, query: args => {\n this.stream = (this.options.deps?.query ?? query)(args);\n return this.stream;\n } });\n if (!this.active) return this.failed({ kind: \"cancelled_unknown\", reason: \"query completed after local supervision ended\" });\n if (result.sessionId) this.identify(result.sessionId);\n const usage = claudeUsage(result.usage, this.execution.executionId);\n if (!result.ok) return { ...this.failed(claudeFailure(result.failure)), usage };\n if (!this.conversation) return this.failed({ kind: \"runtime_error\", reason: \"Claude query returned no conversation identity\" });\n return {\n ok: true, harness: \"claude-code\", execution: { ...this.execution, conversation: this.conversation }, conversation: this.conversation,\n output: this.request.native?.outputSchema ? { kind: \"structured\", value: result.output } : { kind: \"text\", text: String(result.output) }, usage,\n };\n }\n\n private observe(message: SDKMessage): void {\n if (!this.active) return;\n if (\"session_id\" in message && typeof message.session_id === \"string\") this.identify(message.session_id);\n if (message.type === \"assistant\") {\n for (const block of message.message.content) {\n if (block.type === \"text\") this.emit({ kind: \"assistant_output\", executionId: this.execution.executionId, text: block.text });\n }\n }\n }\n\n private identify(nativeId: string): void {\n if (this.conversation) {\n if (this.conversation.nativeId !== nativeId) throw new Error(\"Claude query changed conversation identity\");\n return;\n }\n this.conversation = { harness: \"claude-code\", namespace: this.request.target.kind === \"fresh\" ? this.request.target.namespace : this.request.target.conversation.namespace, nativeId };\n this.emit({ kind: \"conversation_identified\", executionId: this.execution.executionId, conversation: this.conversation });\n }\n\n private failed(failure: HarnessRunFailure): HarnessRunResult<T, \"claude-code\"> {\n return { ok: false, harness: \"claude-code\", execution: this.execution,\n ...(this.conversation ? { conversation: this.conversation } : {}), failure, usage: [] };\n }\n\n private emit(progress: ProgressBody<HarnessRunProgress>): void {\n this.request.onProgress?.({ ...progress, harness: \"claude-code\", atMs: (this.options.deps?.now ?? Date.now)() } as HarnessRunProgress);\n }\n\n private close(): void {\n try { this.stream?.close(); } catch { /* A failed close does not prove native cancellation. */ }\n }\n}\n","import type { UsageMeasurement } from \"@titan-design/agent-protocol\";\nimport type { HarnessRunFailure } from \"./harness-contracts.js\";\nimport type { AgentFailure, AgentUsage } from \"./types.js\";\n\nexport function claudeFailure(failure: AgentFailure): HarnessRunFailure {\n const reason = failure.reason;\n switch (failure.kind) {\n case \"rate_limited\": return { kind: \"rate_limited\", reason, retryAtMs: failure.retryAt?.getTime() };\n case \"budget_exceeded\": return { kind: \"limit_exceeded\", reason, unit: \"usd\" };\n case \"max_turns\": return { kind: \"runtime_error\", reason: `native maxTurns reached: ${reason}` };\n case \"schema_invalid\": return { kind: \"output_invalid\", reason };\n case \"inactivity_timeout\": return { kind: \"cancelled_unknown\", reason };\n case \"refusal\": return { kind: \"output_invalid\", reason: `native refusal: ${reason}` };\n case \"auth_misconfigured\": return { kind: \"auth_misconfigured\", reason };\n case \"aborted\": return { kind: \"aborted\", reason };\n case \"runtime_error\": return { kind: \"runtime_error\", reason };\n }\n}\n\nexport function claudeUsage(usage: AgentUsage | undefined, executionId: string): UsageMeasurement[] {\n if (!usage) return [];\n const models = Object.entries(usage.modelUsage);\n type Counts = AgentUsage[\"modelUsage\"][string];\n const sum = (field: keyof Counts): number | null => {\n const values = models.map(([, model]) => model[field]);\n if (values.length === 0) return null;\n let total = 0;\n for (const value of values) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return null;\n total += value;\n }\n return total;\n };\n const uncached = sum(\"inputTokens\");\n const cachedInput = sum(\"cacheReadInputTokens\");\n const cacheWriteInput = sum(\"cacheCreationInputTokens\");\n const input = uncached === null || cachedInput === null || cacheWriteInput === null\n ? null : uncached + cachedInput + cacheWriteInput;\n // A snapshot identity denotes the entire query; per-model snapshots would replace each other.\n return [{\n kind: \"snapshot\", scope: \"turn\", scopeId: executionId, epoch: executionId, sequence: 0,\n model: models.length === 1 ? models[0]![0] : null, source: \"claude-sdk:query-result\",\n tokens: { input, output: sum(\"outputTokens\"), cachedInput, cacheWriteInput, reasoningOutput: null, total: null },\n cost: { usd: usage.totalCostUsd, kind: \"estimate\" },\n }];\n}\n"],"mappings":"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","names":["message","message","invalid","messageOf","messageOf","record","invalid","messageOf","abortFailure","timeoutFailure","randomUUID","isTerminalExecutionPhase","nonempty","record","record","nonempty","randomUUID","record","isTerminalExecutionPhase","randomUUID","query","randomUUID","message","query"]}
1
+ {"version":3,"sources":["../src/run.ts","../src/env.ts","../src/claude-print.ts","../src/codex-process.ts","../src/failures.ts","../src/harness-contracts.ts","../src/preflight.ts","../src/codex-exec.ts","../src/codex-exec-session.ts","../src/durable-dispatcher.ts","../src/durable-result.ts","../src/durable-dispatcher-support.ts","../src/durable-reconcile.ts","../src/claude-code-adapter.ts","../src/claude-code-result.ts"],"sourcesContent":["import { query, type Options, type Query, type SDKMessage, type SDKResultMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport { toJSONSchema } from \"zod\";\nimport { AuthMisconfiguredError, assertApiKeySourceAllowed, assertAuthEnvOk, prepareEnv } from \"./env.js\";\nimport { assertClaudePrintConfig, runClaudePrint } from \"./claude-print.js\";\nimport { classifyResult, usageFromResult } from \"./failures.js\";\nimport type { AgentFailure, AgentInit, AgentRunConfig, AgentRunResult } from \"./types.js\";\n\nexport const DEFAULT_INACTIVITY_MS = 600_000;\n\nexport interface AgentRunDeps {\n /** Injection seam for tests; defaults to the SDK's own `query`. */\n query?: typeof query;\n /** Base environment to scrub; defaults to `process.env`. */\n env?: NodeJS.ProcessEnv;\n now?: () => number;\n}\n\n/**\n * Run one headless Claude Code session to completion and return either its\n * answer or a typed failure. Never throws for anything the agent does; the only\n * throws are caller mistakes caught before the session starts.\n */\nexport async function runAgent<T = string>(\n config: AgentRunConfig<T>,\n deps: AgentRunDeps = {},\n): Promise<AgentRunResult<T>> {\n assertBudgets(config);\n if (config.harness === \"claude-print\") assertClaudePrintConfig(config);\n const now = deps.now ?? Date.now;\n const startedAt = now();\n\n const print = config.harness === \"claude-print\";\n const env = prepareEnv(deps.env ?? process.env, { allowApiKeyBilling: config.allowApiKeyBilling });\n try {\n assertAuthEnvOk(env, { allowApiKeyBilling: config.allowApiKeyBilling, requireOAuthToken: !print });\n } catch (error) {\n return { ok: false, failure: authFailure(error) };\n }\n if (print) return runClaudePrint(config, env, { now, startedAt });\n\n const session = new Session(config, env, deps);\n try {\n return await session.run(startedAt);\n } finally {\n session.dispose();\n }\n}\n\n/** The SDK leaves both circuit breakers unlimited, so a missing one is a bug, not a default. */\nfunction assertBudgets(config: AgentRunConfig<unknown>): void {\n requirePositive(\"maxTurns\", config.maxTurns);\n requirePositive(\"maxBudgetUsd\", config.maxBudgetUsd);\n}\n\nfunction requirePositive(field: string, value: number): void {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new TypeError(`${field} is required and must be a positive finite number (received ${String(value)})`);\n }\n}\n\nfunction authFailure(error: unknown): AgentFailure {\n const failure: AgentFailure = { kind: \"auth_misconfigured\", reason: messageOf(error) };\n if (error instanceof AuthMisconfiguredError && error.hint) failure.hint = error.hint;\n return failure;\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\ntype EndReason = { kind: \"aborted\"; reason: string } | { kind: \"inactivity_timeout\"; timeoutMs: number };\n\n/** One `query()` call plus the watchdog, abort wiring and stream state it owns. */\nclass Session<T> {\n private readonly controller = new AbortController();\n private readonly inactivityMs: number;\n private watchdog: ReturnType<typeof setTimeout> | undefined;\n private stream: Query | undefined;\n private endReason: EndReason | undefined;\n private init: AgentInit | undefined;\n private sessionId: string | undefined;\n private result: SDKResultMessage | undefined;\n private rateLimitResetsAt: number | undefined;\n private authError: AuthMisconfiguredError | undefined;\n private readonly onExternalAbort = () => {\n this.end({ kind: \"aborted\", reason: String(this.config.signal?.reason ?? \"aborted by caller\") });\n };\n\n constructor(\n private readonly config: AgentRunConfig<T>,\n private readonly env: Record<string, string>,\n private readonly deps: AgentRunDeps,\n ) {\n this.inactivityMs = config.inactivityTimeoutMs ?? DEFAULT_INACTIVITY_MS;\n }\n\n async run(startedAt: number): Promise<AgentRunResult<T>> {\n const signal = this.config.signal;\n if (signal?.aborted) this.onExternalAbort();\n else signal?.addEventListener(\"abort\", this.onExternalAbort);\n\n this.resetWatchdog();\n const run = this.deps.query ?? query;\n const elapsed = () => (this.deps.now ?? Date.now)() - startedAt;\n\n try {\n this.stream = run({ prompt: this.config.prompt, options: this.buildOptions() });\n for await (const message of this.stream) {\n this.resetWatchdog();\n this.config.onMessage?.(message);\n this.absorb(message);\n if (this.endReason || this.authError) break;\n }\n } catch (error) {\n if (!this.endReason) return this.fail({ kind: \"runtime_error\", reason: messageOf(error), raw: error }, elapsed());\n }\n return this.settle(elapsed());\n }\n\n dispose(): void {\n if (this.watchdog) clearTimeout(this.watchdog);\n this.config.signal?.removeEventListener(\"abort\", this.onExternalAbort);\n // `close()` tears down the CLI subprocess; guarded because older SDKs lack it.\n if (typeof this.stream?.close === \"function\") this.stream.close();\n }\n\n private buildOptions(): Options {\n const c = this.config;\n const options: Options = {\n cwd: c.cwd,\n env: this.env,\n abortController: this.controller,\n maxTurns: c.maxTurns,\n maxBudgetUsd: c.maxBudgetUsd,\n permissionMode: c.permissionMode ?? \"dontAsk\",\n settingSources: c.settingSources ?? [],\n };\n if (c.model) options.model = c.model;\n if (c.tools) options.tools = c.tools;\n if (c.systemPrompt !== undefined) options.systemPrompt = c.systemPrompt;\n if (c.allowedTools) options.allowedTools = c.allowedTools;\n if (c.disallowedTools) options.disallowedTools = c.disallowedTools;\n if (c.resumeSessionId) options.resume = c.resumeSessionId;\n if (c.agents) options.agents = c.agents;\n if (c.mcpServers) options.mcpServers = c.mcpServers;\n if (c.hooks) options.hooks = c.hooks;\n if (c.outputSchema) {\n options.outputFormat = { type: \"json_schema\", schema: toJSONSchema(c.outputSchema) as Record<string, unknown> };\n }\n return options;\n }\n\n private absorb(message: SDKMessage): void {\n if (\"session_id\" in message && typeof message.session_id === \"string\") this.sessionId = message.session_id;\n if (message.type === \"system\" && message.subtype === \"init\") {\n this.init = {\n apiKeySource: message.apiKeySource,\n model: message.model,\n tools: message.tools ?? [],\n permissionMode: message.permissionMode,\n claudeCodeVersion: message.claude_code_version,\n };\n if (!this.config.allowApiKeyBilling) this.checkApiKeySource(message.apiKeySource);\n return;\n }\n if (message.type === \"rate_limit_event\") this.rateLimitResetsAt = message.rate_limit_info.resetsAt;\n if (message.type === \"result\") this.result = message;\n }\n\n private checkApiKeySource(observed: string | undefined): void {\n try {\n assertApiKeySourceAllowed(observed);\n } catch (error) {\n // Stop the session here rather than let a mis-billed run continue spending.\n this.authError = error instanceof AuthMisconfiguredError ? error : new AuthMisconfiguredError(messageOf(error));\n this.controller.abort(this.authError);\n }\n }\n\n private end(reason: EndReason): void {\n this.endReason ??= reason;\n this.controller.abort(new Error(describeEnd(reason)));\n }\n\n private resetWatchdog(): void {\n if (this.watchdog) clearTimeout(this.watchdog);\n this.watchdog = setTimeout(() => {\n this.end({ kind: \"inactivity_timeout\", timeoutMs: this.inactivityMs });\n }, this.inactivityMs);\n this.watchdog.unref?.();\n }\n\n private settle(durationMs: number): AgentRunResult<T> {\n if (this.authError) return this.fail(authFailure(this.authError), durationMs);\n if (this.endReason) return this.fail(endFailure(this.endReason), durationMs);\n if (!this.result) {\n const reason = \"the session ended without emitting a result message\";\n return this.fail({ kind: \"runtime_error\", reason }, durationMs);\n }\n\n const options: { now?: number; rateLimitResetsAt?: number } = {};\n if (this.deps.now) options.now = this.deps.now();\n if (this.rateLimitResetsAt !== undefined) options.rateLimitResetsAt = this.rateLimitResetsAt;\n const failure = classifyResult(this.result, options);\n if (failure) return this.fail(failure, durationMs);\n\n return this.succeed(this.result, durationMs);\n }\n\n private succeed(result: SDKResultMessage, durationMs: number): AgentRunResult<T> {\n const usage = usageFromResult(result, durationMs);\n if (!this.init || !this.sessionId) {\n const reason = \"the session produced a result but never emitted an init message\";\n return { ok: false, failure: { kind: \"runtime_error\", reason, raw: result }, usage };\n }\n const output = this.readOutput(result);\n if (\"failure\" in output) return { ok: false, failure: output.failure, sessionId: this.sessionId, usage };\n return { ok: true, output: output.value, sessionId: this.sessionId, usage, init: this.init };\n }\n\n /**\n * The SDK already validated `structured_output` against the same schema; we\n * re-parse so the value the caller receives is the one TypeScript promises.\n */\n private readOutput(result: SDKResultMessage): { value: T } | { failure: AgentFailure } {\n const schema = this.config.outputSchema;\n if (!schema) return { value: (result.subtype === \"success\" ? result.result : \"\") as T };\n const raw = result.subtype === \"success\" ? result.structured_output : undefined;\n const parsed = schema.safeParse(raw);\n if (parsed.success) return { value: parsed.data };\n return {\n failure: {\n kind: \"schema_invalid\",\n reason: \"structured output did not match the supplied schema\",\n error: parsed.error,\n raw,\n },\n };\n }\n\n private fail(failure: AgentFailure, durationMs: number): AgentRunResult<T> {\n const out: AgentRunResult<T> = { ok: false, failure };\n if (this.sessionId) out.sessionId = this.sessionId;\n if (this.result) out.usage = usageFromResult(this.result, durationMs);\n return out;\n }\n}\n\nfunction endFailure(reason: EndReason): AgentFailure {\n if (reason.kind === \"aborted\") return { kind: \"aborted\", reason: reason.reason };\n return { kind: \"inactivity_timeout\", reason: describeEnd(reason), timeoutMs: reason.timeoutMs };\n}\n\nfunction describeEnd(reason: EndReason): string {\n return reason.kind === \"aborted\" ? reason.reason : `no message for ${reason.timeoutMs}ms`;\n}\n","/**\n * The only module in this package that reads `process.env`. A stray\n * `ANTHROPIC_API_KEY` silently outranks `CLAUDE_CODE_OAUTH_TOKEN` and routes a\n * headless run onto metered API billing; the invariants here exist because that\n * cost real money once.\n */\n\n/** Set by a parent Claude Code session; the child CLI refuses to start when it inherits them. */\nexport const ANTI_NESTING_VARS = [\"CLAUDECODE\", \"CLAUDE_CODE_SSE_PORT\", \"CLAUDE_CODE_ENTRYPOINT\"] as const;\n\n/** Metered-billing credentials, stripped unless the caller opts in explicitly. */\nexport const STRIPPED_AUTH_VARS = [\"ANTHROPIC_API_KEY\", \"ANTHROPIC_AUTH_TOKEN\"] as const;\n\n/**\n * The only `CLAUDE_CODE_*` variables a child may inherit. Everything else in\n * that namespace describes the *parent* session (exec path, terminal, entry\n * point) and confuses the child's credential and config inference.\n */\nexport const CLAUDE_CODE_PASSTHROUGH_VARS = [\n \"CLAUDE_CODE_OAUTH_TOKEN\",\n \"CLAUDE_CODE_MAX_RETRIES\",\n \"CLAUDE_CODE_USE_BEDROCK\",\n \"CLAUDE_CODE_USE_VERTEX\",\n \"CLAUDE_CODE_USE_FOUNDRY\",\n \"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS\",\n] as const;\n\n/** Proxy settings leak from the parent shell and silently re-route the child's API traffic. */\nexport const STRIPPED_PROXY_VARS = [\n \"HTTP_PROXY\",\n \"http_proxy\",\n \"HTTPS_PROXY\",\n \"https_proxy\",\n \"ALL_PROXY\",\n \"all_proxy\",\n] as const;\n\n/** The CLI retries 10 times by default, which turns an outage into a long silent hang. */\nexport const DEFAULT_MAX_RETRIES = \"3\";\n\nexport interface PrepareEnvOptions {\n /** Leave `ANTHROPIC_API_KEY` / `ANTHROPIC_AUTH_TOKEN` in place and bill the API account. */\n allowApiKeyBilling?: boolean;\n}\n\nexport interface AuthEnvCheckOptions extends PrepareEnvOptions {\n /** Defaults to true. The claude-print harness sets it false: the CLI's own keychain login is its credential. */\n requireOAuthToken?: boolean;\n}\n\nexport class AuthMisconfiguredError extends Error {\n readonly hint: string | undefined;\n\n constructor(message: string, hint?: string) {\n super(message);\n this.name = \"AuthMisconfiguredError\";\n this.hint = hint;\n }\n}\n\n/**\n * Copy `env` and scrub it into something safe to hand a child Claude Code\n * process. Never mutates its argument, so the result can go straight to\n * `options.env`.\n */\nexport function prepareEnv(\n env: NodeJS.ProcessEnv = process.env,\n options: PrepareEnvOptions = {},\n): Record<string, string> {\n const out: Record<string, string> = {};\n const passthrough = new Set<string>(CLAUDE_CODE_PASSTHROUGH_VARS);\n\n for (const [key, value] of Object.entries(env)) {\n if (value === undefined) continue;\n if (isClaudeCodeVar(key) && !passthrough.has(key)) continue;\n out[key] = value;\n }\n\n for (const key of ANTI_NESTING_VARS) delete out[key];\n for (const key of STRIPPED_PROXY_VARS) delete out[key];\n if (!options.allowApiKeyBilling) {\n for (const key of STRIPPED_AUTH_VARS) delete out[key];\n }\n\n out.CLAUDE_CODE_MAX_RETRIES ??= DEFAULT_MAX_RETRIES;\n return out;\n}\n\nfunction isClaudeCodeVar(key: string): boolean {\n return key === \"CLAUDECODE\" || key.startsWith(\"CLAUDE_CODE_\");\n}\n\n/**\n * Pre-flight the scrubbed env so a misrouted run fails before it spends\n * anything, rather than mid-stream with a surprise billing source.\n */\nexport function assertAuthEnvOk(env: Record<string, string>, options: AuthEnvCheckOptions = {}): void {\n if (options.allowApiKeyBilling) {\n if (!env.ANTHROPIC_API_KEY && !env.ANTHROPIC_AUTH_TOKEN) {\n throw new AuthMisconfiguredError(\n \"allowApiKeyBilling is set but neither ANTHROPIC_API_KEY nor ANTHROPIC_AUTH_TOKEN is present\",\n );\n }\n return;\n }\n\n if (env.ANTHROPIC_API_KEY || env.ANTHROPIC_AUTH_TOKEN) {\n throw new AuthMisconfiguredError(\n \"ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN survived the scrub\",\n \"pass the env through prepareEnv, or set allowApiKeyBilling to bill the API account on purpose\",\n );\n }\n\n if (options.requireOAuthToken !== false && !env.CLAUDE_CODE_OAUTH_TOKEN) {\n throw new AuthMisconfiguredError(\n \"CLAUDE_CODE_OAUTH_TOKEN is not set; subscription auth will fail\",\n \"run `claude setup-token` once and export the printed token\",\n );\n }\n}\n\n/**\n * Credential sources that mean the run went to metered API billing. A blacklist,\n * not a whitelist: the SDK's `ApiKeySource` union grows, and an unrecognised new\n * member is far more likely to be another benign OAuth-ish route than a billing\n * one. `\"env\"` is the pre-0.3 spelling of `\"ANTHROPIC_API_KEY\"`, kept so an\n * older CLI on the PATH still trips the guard.\n */\nexport const FORBIDDEN_API_KEY_SOURCES: ReadonlySet<string> = new Set([\"env\", \"ANTHROPIC_API_KEY\"]);\n\n/** Post-flight on the first `system/init`, the earliest point the real auth route is observable. */\nexport function assertApiKeySourceAllowed(observed: string | undefined): void {\n if (observed === undefined) {\n throw new AuthMisconfiguredError(\"the init message carried no apiKeySource; the auth route cannot be verified\");\n }\n if (FORBIDDEN_API_KEY_SOURCES.has(observed)) {\n throw new AuthMisconfiguredError(\n `apiKeySource '${observed}' means the run is on env-based API-key billing`,\n \"a stray ANTHROPIC_API_KEY most likely overrode CLAUDE_CODE_OAUTH_TOKEN\",\n );\n }\n}\n","import { spawn, type ChildProcess } from \"node:child_process\";\nimport { accessSync, constants, statSync } from \"node:fs\";\nimport { delimiter, join } from \"node:path\";\nimport type { SDKResultMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport { toJSONSchema, type ZodType } from \"zod\";\nimport { terminateProcessGroup } from \"./codex-process.js\";\nimport { classifyResult, usageFromResult } from \"./failures.js\";\nimport { CLAUDE_PRINT_UNSUPPORTED_OPTIONS, EXECUTION_CAPABILITIES, type HarnessCapabilityDescriptor } from \"./harness-contracts.js\";\nimport type { AgentFailure, AgentInit, AgentRunConfig, AgentRunResult } from \"./types.js\";\n\n/** SIGTERM alone has been ignored by the CLI in the repo-review pipeline, so SIGKILL follows. */\nexport const CLAUDE_PRINT_KILL_GRACE_MS = 5_000;\nconst DEFAULT_TIMEOUT_MS = 600_000;\nconst EMPTY_MCP_CONFIG = '{\"mcpServers\":{}}';\nconst LOGIN_FAILURE = /not logged in|please run \\/login|invalid api key/i;\n\nexport function claudePrintCapabilities(): HarnessCapabilityDescriptor<\"claude-print\"> {\n const capabilities = Object.fromEntries(EXECUTION_CAPABILITIES.map(capability => [capability, {\n status: \"unsupported\", reason: \"claude -p runs one turn with no tools, hooks, MCP or resume\",\n }])) as HarnessCapabilityDescriptor<\"claude-print\">[\"capabilities\"];\n capabilities.fresh_run = { status: \"supported\", evidence: \"spawns claude -p --max-turns 1 per call\" };\n capabilities.structured_output = { status: \"supported\", evidence: \"--json-schema, then a local zod parse\" };\n capabilities.external_cancellation = { status: \"supported\", evidence: \"abort kills the child process group\" };\n capabilities.token_reporting = { status: \"supported\", evidence: \"usage and modelUsage from the JSON result\" };\n return {\n harness: \"claude-print\", adapter: { name: \"claude-print\", version: \"1\" }, capabilities,\n limits: [{ unit: \"milliseconds\", scope: \"execution\", enforcement: \"hard\", assessment: {\n status: \"supported\", evidence: \"inactivityTimeoutMs is a wall deadline that kills the child process group\",\n } }],\n };\n}\n\n/** A caller mistake, thrown before anything spawns, like a missing budget. */\nexport function assertClaudePrintConfig(config: AgentRunConfig<unknown>): void {\n const field = CLAUDE_PRINT_UNSUPPORTED_OPTIONS.find(name => config[name] !== undefined)\n ?? (config.tools?.length ? \"tools\" : undefined)\n ?? (config.settingSources?.length ? \"settingSources\" : undefined);\n if (field) throw new TypeError(`${field} is not supported by the claude-print harness (one turn, no tools, hooks or MCP)`);\n}\n\n/** The first executable file named `claude` on PATH, never a shell function or alias. `CLAUDE_BIN` wins. */\nexport function resolveClaudeBin(env: Record<string, string>): string | undefined {\n if (env.CLAUDE_BIN) return env.CLAUDE_BIN;\n for (const dir of (env.PATH ?? \"\").split(delimiter)) {\n if (dir && isExecutableFile(join(dir, \"claude\"))) return join(dir, \"claude\");\n }\n return undefined;\n}\n\nfunction isExecutableFile(path: string): boolean {\n try {\n accessSync(path, constants.X_OK);\n return statSync(path).isFile();\n } catch {\n return false;\n }\n}\n\nexport function buildClaudePrintArgs(config: AgentRunConfig<unknown>): string[] {\n const args = [\n \"-p\", \"--output-format\", \"json\", \"--tools\", \"\", \"--strict-mcp-config\", \"--mcp-config\", EMPTY_MCP_CONFIG,\n \"--setting-sources\", \"\", \"--max-turns\", \"1\", \"--max-budget-usd\", String(config.maxBudgetUsd),\n ];\n if (config.model) args.push(\"--model\", config.model);\n if (config.systemPrompt !== undefined) args.push(\"--system-prompt\", config.systemPrompt);\n if (config.outputSchema) args.push(\"--json-schema\", cliJsonSchema(config.outputSchema));\n return args;\n}\n\n/** The CLI's validator rejects zod's draft 2020-12 `$schema` URI, so the header is dropped. */\nfunction cliJsonSchema(schema: ZodType): string {\n const body = { ...toJSONSchema(schema) } as Record<string, unknown>;\n delete body.$schema;\n return JSON.stringify(body);\n}\n\ninterface Clock {\n now: () => number;\n startedAt: number;\n}\n\ninterface ChildOutcome {\n code: number | null;\n signal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n spawnError?: Error;\n ended?: AgentFailure;\n}\n\n/** Run one `claude -p` call; `env` must already be scrubbed and pre-flighted. */\nexport async function runClaudePrint<T>(\n config: AgentRunConfig<T>,\n env: Record<string, string>,\n clock: Clock,\n): Promise<AgentRunResult<T>> {\n if (config.signal?.aborted) return { ok: false, failure: aborted(config.signal) };\n const bin = resolveClaudeBin(env);\n if (!bin) return { ok: false, failure: { kind: \"runtime_error\", reason: \"claude binary not found on PATH; set CLAUDE_BIN\" } };\n const child = spawn(bin, buildClaudePrintArgs(config), {\n cwd: config.cwd, env, detached: process.platform !== \"win32\", stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n const outcome = await supervise(child, config);\n return settle(outcome, config, clock.now() - clock.startedAt);\n}\n\nfunction supervise(child: ChildProcess, config: AgentRunConfig<unknown>): Promise<ChildOutcome> {\n const timeoutMs = config.inactivityTimeoutMs ?? DEFAULT_TIMEOUT_MS;\n const output = collectOutput(child);\n let ended: AgentFailure | undefined;\n const stop = (failure: AgentFailure) => {\n ended ??= failure;\n terminateProcessGroup(child, \"SIGTERM\");\n setTimeout(() => terminateProcessGroup(child, \"SIGKILL\"), CLAUDE_PRINT_KILL_GRACE_MS).unref();\n };\n const timer = setTimeout(() => stop({ kind: \"inactivity_timeout\", reason: `claude -p ran past ${timeoutMs}ms`, timeoutMs }), timeoutMs);\n const onAbort = () => stop(aborted(config.signal));\n config.signal?.addEventListener(\"abort\", onAbort, { once: true });\n // A child killed before it reads the prompt closes stdin; that EPIPE is not the failure.\n child.stdin?.on(\"error\", () => {});\n child.stdin?.end(config.prompt);\n return new Promise(resolve => {\n const finish = (code: number | null, signal: NodeJS.Signals | null, spawnError?: Error) => {\n clearTimeout(timer);\n config.signal?.removeEventListener(\"abort\", onAbort);\n resolve({ code, signal, ...output(), ...(spawnError ? { spawnError } : {}), ...(ended ? { ended } : {}) });\n };\n child.once(\"error\", error => finish(null, null, error));\n child.once(\"close\", (code, signal) => finish(code, signal));\n });\n}\n\nfunction collectOutput(child: ChildProcess): () => { stdout: string; stderr: string } {\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n child.stdout?.on(\"data\", (chunk: Buffer) => stdout.push(chunk));\n child.stderr?.on(\"data\", (chunk: Buffer) => stderr.push(chunk));\n return () => ({ stdout: Buffer.concat(stdout).toString(\"utf8\"), stderr: Buffer.concat(stderr).toString(\"utf8\") });\n}\n\nfunction settle<T>(outcome: ChildOutcome, config: AgentRunConfig<T>, durationMs: number): AgentRunResult<T> {\n if (outcome.ended) return { ok: false, failure: outcome.ended };\n if (outcome.spawnError) return { ok: false, failure: { kind: \"runtime_error\", reason: `claude -p failed to start: ${outcome.spawnError.message}`, raw: outcome.spawnError } };\n const result = parseResult(outcome.stdout);\n if (!result) return { ok: false, failure: exitFailure(outcome, \"printed no JSON result\") };\n config.onMessage?.(result);\n const usage = usageFromResult(result, durationMs);\n const failure = loginFailure(result) ?? classifyResult(result) ?? (outcome.code === 0 ? undefined : exitFailure(outcome, \"reported success\"));\n const sessionId = typeof result.session_id === \"string\" ? result.session_id : undefined;\n if (failure) return { ok: false, failure, ...(sessionId ? { sessionId } : {}), usage };\n if (!sessionId) return { ok: false, failure: { kind: \"runtime_error\", reason: \"the JSON result carried no session_id\", raw: result }, usage };\n const output = readOutput(result, config);\n if (\"failure\" in output) return { ok: false, failure: output.failure, sessionId, usage };\n return { ok: true, output: output.value, sessionId, usage, init: initFrom(result) };\n}\n\nfunction parseResult(stdout: string): SDKResultMessage | undefined {\n try {\n const parsed: unknown = JSON.parse(stdout);\n const isResult = typeof parsed === \"object\" && parsed !== null && (parsed as { type?: unknown }).type === \"result\";\n return isResult ? parsed as SDKResultMessage : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction exitFailure(outcome: ChildOutcome, what: string): AgentFailure {\n const exit = outcome.signal ? `signal ${outcome.signal}` : `code ${String(outcome.code)}`;\n const stderr = outcome.stderr.trim();\n return { kind: \"runtime_error\", reason: `claude -p exited with ${exit} and ${what}${stderr ? `: ${stderr}` : \"\"}`, raw: outcome };\n}\n\nfunction loginFailure(result: SDKResultMessage): AgentFailure | undefined {\n const text = result.subtype === \"success\" ? result.result : (result.errors ?? []).join(\"\\n\");\n if (!result.is_error || !LOGIN_FAILURE.test(text)) return undefined;\n return { kind: \"auth_misconfigured\", reason: text, hint: \"run `claude` once interactively and /login\", raw: result };\n}\n\n/** The CLI validated against the JSON Schema already; the zod parse makes the value the one TypeScript promises. */\nfunction readOutput<T>(result: SDKResultMessage, config: AgentRunConfig<T>): { value: T } | { failure: AgentFailure } {\n const text = result.subtype === \"success\" ? result.result : \"\";\n if (!config.outputSchema) return { value: text as T };\n const raw: unknown = (result.subtype === \"success\" ? result.structured_output : undefined) ?? parseJson(text);\n const parsed = config.outputSchema.safeParse(raw);\n if (parsed.success) return { value: parsed.data };\n return { failure: { kind: \"schema_invalid\", reason: \"structured output did not match the supplied schema\", error: parsed.error, raw } };\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\n/** `--output-format json` carries no init message, so only the model is known, from `modelUsage`. */\nfunction initFrom(result: SDKResultMessage): AgentInit {\n const models = Object.keys(result.modelUsage ?? {});\n return { apiKeySource: undefined, model: models.length === 1 ? models[0] : undefined, tools: [], permissionMode: undefined, claudeCodeVersion: undefined };\n}\n\nfunction aborted(signal: AbortSignal | undefined): AgentFailure {\n return { kind: \"aborted\", reason: String(signal?.reason ?? \"aborted by caller\") };\n}\n","import { execFile, spawn, type ChildProcess, type ChildProcessByStdio } from \"node:child_process\";\nimport { mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { Readable } from \"node:stream\";\n\nexport interface CodexProcessExit {\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n}\n\nexport interface SupervisedCodexProcess {\n stdout: AsyncIterable<string>;\n stderr: AsyncIterable<string>;\n completed: Promise<CodexProcessExit>;\n terminate(signal: \"SIGTERM\" | \"SIGKILL\"): void;\n}\n\nexport interface CodexSchemaFile {\n path: string;\n dispose(): Promise<void>;\n}\n\nexport interface CodexProcessInput {\n executablePath: string;\n args: readonly string[];\n cwd: string;\n env: Record<string, string>;\n}\n\nexport interface CodexVersionInspectionOptions {\n signal?: AbortSignal;\n timeoutMs: number;\n}\n\nexport async function inspectCodexVersion(\n executablePath: string,\n env: Record<string, string>,\n options: CodexVersionInspectionOptions,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n execFile(\n executablePath,\n [\"--version\"],\n {\n env,\n encoding: \"utf8\",\n signal: options.signal,\n timeout: Math.max(1, Math.ceil(options.timeoutMs)),\n killSignal: \"SIGKILL\",\n },\n (error, stdout) => {\n if (error) reject(error);\n else resolve(stdout);\n },\n );\n });\n}\n\nexport function startCodexProcess(input: CodexProcessInput): SupervisedCodexProcess {\n const child = spawn(input.executablePath, input.args, {\n cwd: input.cwd,\n env: input.env,\n detached: process.platform !== \"win32\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n return {\n stdout: lines(child.stdout),\n stderr: lines(child.stderr),\n completed: completionOf(child),\n terminate: (signal) => terminateProcessGroup(child, signal),\n };\n}\n\nexport async function createCodexSchemaFile(schema: Record<string, unknown>): Promise<CodexSchemaFile> {\n const directory = await mkdtemp(join(tmpdir(), \"titan-codex-schema-\"));\n const path = join(directory, \"output-schema.json\");\n try {\n await writeFile(path, JSON.stringify(schema), { encoding: \"utf8\", mode: 0o600 });\n return { path, dispose: () => rm(directory, { recursive: true, force: true }) };\n } catch (error) {\n await rm(directory, { recursive: true, force: true });\n throw error;\n }\n}\n\nasync function* lines(stream: Readable): AsyncIterable<string> {\n const reader = createInterface({ input: stream });\n for await (const line of reader) yield line;\n}\n\ntype SpawnedCodexProcess = ChildProcessByStdio<null, Readable, Readable>;\n\nfunction completionOf(child: SpawnedCodexProcess): Promise<CodexProcessExit> {\n return new Promise((resolve, reject) => {\n child.once(\"error\", reject);\n child.once(\"close\", (exitCode, signal) => resolve({ exitCode, signal }));\n });\n}\n\n/** Signals the child's whole group so a grandchild cannot keep its pipes open. */\nexport function terminateProcessGroup(child: ChildProcess, signal: NodeJS.Signals): void {\n if (child.pid && process.platform !== \"win32\") {\n try {\n process.kill(-child.pid, signal);\n return;\n } catch {\n // A failed group signal still gets a direct-child fallback.\n }\n }\n try {\n child.kill(signal);\n } catch {\n // Cleanup is idempotent; the child may already have exited.\n }\n}\n","import type { ModelUsage, SDKResultMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { AgentFailure, AgentUsage } from \"./types.js\";\n\n/**\n * Rate limiting reaches the caller as prose, not as a subtype, so the phrasing\n * is the only signal. Matching too eagerly would relabel ordinary runtime errors\n * as retryable, so each pattern is anchored on wording the CLI actually emits.\n */\nconst RATE_LIMIT_PATTERNS = [\n /you'?ve hit your (session|weekly|opus|sonnet) limit/i,\n /not your usage limit/i,\n /\\brate[ _-]?limit(ed|ing)?\\b/i,\n /\\b429\\b/,\n /usage limit reached/i,\n];\n\nconst RETRY_AFTER_SECONDS = /retry(?:ing)?[- ](?:after|in)[ :]*(\\d+)\\s*(?:s|sec|secs|seconds)?\\b/i;\nconst ISO_TIMESTAMP = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})/;\n\nexport interface ClassifyOptions {\n /** Epoch millis used to turn a relative \"retry after Ns\" hint into an absolute date. */\n now?: number;\n /** Epoch millis from the stream's last `rate_limit_event`, which beats anything parsed from prose. */\n rateLimitResetsAt?: number;\n}\n\n/**\n * Map a terminal `result` message onto the failure taxonomy, or `undefined` when\n * the run succeeded and the caller should read the output.\n */\nexport function classifyResult(result: SDKResultMessage, options: ClassifyOptions = {}): AgentFailure | undefined {\n const text = errorText(result);\n\n if (result.subtype === \"success\") {\n if (result.stop_reason === \"refusal\") {\n return { kind: \"refusal\", reason: text || \"the model refused the request\", raw: result };\n }\n // A success subtype still carries `is_error` when the turn died on an API error.\n return result.is_error ? rateLimitedOrRuntime(text, result, options) : undefined;\n }\n\n switch (result.subtype) {\n case \"error_max_budget_usd\":\n return { kind: \"budget_exceeded\", reason: text || \"max budget reached\", raw: result };\n case \"error_max_turns\":\n return { kind: \"max_turns\", reason: text || \"max turns reached\", raw: result };\n case \"error_max_structured_output_retries\":\n return { kind: \"schema_invalid\", reason: text || \"structured-output retries exhausted\", raw: result };\n case \"error_during_execution\":\n return rateLimitedOrRuntime(text, result, options);\n default:\n // Unreachable per the SDK's union, but a newer CLI may add a subtype.\n return { kind: \"runtime_error\", reason: `unknown result subtype: ${String(result[\"subtype\"])}`, raw: result };\n }\n}\n\nfunction rateLimitedOrRuntime(text: string, raw: SDKResultMessage, options: ClassifyOptions): AgentFailure {\n if (!RATE_LIMIT_PATTERNS.some((p) => p.test(text))) {\n return { kind: \"runtime_error\", reason: text || \"the session ended with an unexplained error\", raw };\n }\n const failure: AgentFailure = { kind: \"rate_limited\", reason: text, raw };\n const retryAt = parseRetryAt(text, options);\n if (retryAt) failure.retryAt = retryAt;\n return failure;\n}\n\nfunction parseRetryAt(text: string, options: ClassifyOptions): Date | undefined {\n if (options.rateLimitResetsAt !== undefined) return new Date(options.rateLimitResetsAt);\n const seconds = RETRY_AFTER_SECONDS.exec(text);\n if (seconds?.[1]) return new Date((options.now ?? Date.now()) + Number(seconds[1]) * 1000);\n const iso = ISO_TIMESTAMP.exec(text);\n if (iso) return new Date(iso[0]);\n return undefined;\n}\n\n/** `result` carries the text on a success message, `errors` on every failure subtype. */\nfunction errorText(result: SDKResultMessage): string {\n if (result.subtype === \"success\") return result.result ?? \"\";\n return (result.errors ?? []).filter((e) => typeof e === \"string\" && e.length > 0).join(\"\\n\");\n}\n\n/**\n * The SDK's cost fields are already cumulative across a `query()` call, so the\n * latest result carries the running total and summing them would double-count.\n * `modelUsage` is the fallback because a crash result can arrive with\n * `total_cost_usd` zeroed while the per-model breakdown survives.\n */\nexport function usageFromResult(result: SDKResultMessage | undefined, durationMs: number): AgentUsage {\n const modelUsage = result?.modelUsage ?? {};\n const reported = result?.total_cost_usd;\n const totalCostUsd = typeof reported === \"number\" && reported > 0 ? reported : sumModelCost(modelUsage);\n return { totalCostUsd, modelUsage, turns: result?.num_turns ?? 0, durationMs };\n}\n\nexport function sumModelCost(modelUsage: Record<string, ModelUsage>): number {\n return Object.values(modelUsage).reduce((total, m) => total + (m.costUSD ?? 0), 0);\n}\n","import type {\n AgentDefinition,\n HookCallbackMatcher,\n HookEvent,\n McpServerConfig,\n PermissionMode,\n SettingSource,\n} from \"@anthropic-ai/claude-agent-sdk\";\nimport type { ConversationIdentity, ExecutionIdentity, UsageMeasurement } from \"@titan-design/agent-protocol\";\nimport type { ZodType } from \"zod\";\n\nexport type Harness = \"claude-code\" | \"codex\";\n\n/** Harnesses `runAgent` can drive. `claude-print` is headless `claude -p` on the CLI's own login. */\nexport type AgentRunHarness = \"claude-code\" | \"claude-print\";\n\n/** `AgentRunConfig` fields claude-print cannot honour: it runs one turn with no tools, hooks, MCP or resume. */\nexport const CLAUDE_PRINT_UNSUPPORTED_OPTIONS = [\n \"allowedTools\",\n \"disallowedTools\",\n \"permissionMode\",\n \"resumeSessionId\",\n \"agents\",\n \"mcpServers\",\n \"hooks\",\n] as const;\n\nexport const CODEX_SANDBOXES = [\"read-only\", \"workspace-write\", \"danger-full-access\"] as const;\nexport const CODEX_APPROVAL_POLICIES = [\"untrusted\", \"on-failure\", \"on-request\", \"never\"] as const;\nexport type CodexSandbox = (typeof CODEX_SANDBOXES)[number];\nexport type CodexApprovalPolicy = (typeof CODEX_APPROVAL_POLICIES)[number];\n\nexport const EXECUTION_CAPABILITIES = [\n \"fresh_run\",\n \"resume\",\n \"fork\",\n \"structured_output\",\n \"interactive_approvals\",\n \"external_cancellation\",\n \"semantic_interrupt\",\n \"active_turn_steering\",\n \"idle_turn_submission\",\n \"persisted_transcript\",\n \"process_reattachment\",\n \"token_reporting\",\n] as const;\n\nexport type ExecutionCapability = (typeof EXECUTION_CAPABILITIES)[number];\nexport type CapabilityAssessment =\n | { status: \"supported\"; evidence: string }\n | { status: \"unsupported\" | \"unverified\"; reason: string };\n\nexport type LimitUnit = \"milliseconds\" | \"usd\" | \"model_requests\" | \"agent_iterations\" | \"tokens\";\nexport type OptionalLimitUnit = Exclude<LimitUnit, \"milliseconds\">;\nexport type LimitScope = \"execution\" | \"conversation\";\nexport type LimitEnforcement = \"hard\" | \"advisory\";\n\nexport interface ExecutionLimit {\n unit: OptionalLimitUnit;\n value: number;\n scope: LimitScope;\n enforcement: LimitEnforcement;\n}\n\nexport interface LimitCapability {\n unit: LimitUnit;\n scope: LimitScope;\n enforcement: LimitEnforcement;\n assessment: CapabilityAssessment;\n}\n\n/** A factual report supplied by an adapter implementation, not a promise made by the core. */\nexport interface HarnessCapabilityDescriptor<H extends string = Harness> {\n harness: H;\n adapter: { name: string; version: string };\n capabilities: Record<ExecutionCapability, CapabilityAssessment>;\n limits: readonly LimitCapability[];\n}\n\nexport type RunTarget =\n | { kind: \"fresh\"; namespace: string }\n | { kind: \"resume\"; conversation: ConversationIdentity };\n\nexport interface BoundedRunBase {\n prompt: string;\n cwd: string;\n target: RunTarget;\n /** Required hard deadline for this execution. Must be positive and finite. */\n wallTimeMs: number;\n limits?: readonly ExecutionLimit[];\n requires?: readonly ExecutionCapability[];\n signal?: AbortSignal;\n onProgress?: (progress: HarnessRunProgress) => void;\n}\n\n/** Anthropic SDK configuration remains confined to the Claude Code branch. */\nexport interface ClaudeCodeNativeOptions<T> {\n model?: string;\n outputSchema?: ZodType<T>;\n allowedTools?: string[];\n disallowedTools?: string[];\n permissionMode?: PermissionMode;\n agents?: Record<string, AgentDefinition>;\n mcpServers?: Record<string, McpServerConfig>;\n hooks?: Partial<Record<HookEvent, HookCallbackMatcher[]>>;\n settingSources?: SettingSource[];\n allowApiKeyBilling?: boolean;\n}\n\nexport interface CodexOutputSchema<T> {\n jsonSchema: Record<string, unknown>;\n /** Second validation boundary after Codex applies the native JSON Schema. */\n parse(value: unknown): T;\n}\n\nexport interface CodexNativeOptions<T> {\n model?: string;\n /** Adapter validates model/version-specific values; core only requires a nonempty string. */\n reasoningEffort?: string;\n sandbox?: CodexSandbox;\n approvalPolicy?: CodexApprovalPolicy;\n outputSchema?: CodexOutputSchema<T>;\n}\n\nexport interface ClaudeCodeRunRequest<T = string> extends BoundedRunBase {\n harness: \"claude-code\";\n native?: ClaudeCodeNativeOptions<T>;\n}\n\nexport interface CodexRunRequest<T = string> extends BoundedRunBase {\n harness: \"codex\";\n native?: CodexNativeOptions<T>;\n}\n\nexport type HarnessRunRequest<T = string> = ClaudeCodeRunRequest<T> | CodexRunRequest<T>;\nexport type HarnessRunRequestFor<H extends Harness, T = string> = H extends \"claude-code\"\n ? ClaudeCodeRunRequest<T>\n : CodexRunRequest<T>;\n\nexport type HarnessRunProgress = { harness: Harness; atMs: number } & (\n | { kind: \"execution_started\"; execution: ExecutionIdentity }\n | { kind: \"conversation_identified\"; executionId: string; conversation: ConversationIdentity }\n | { kind: \"assistant_output\"; executionId: string; text: string }\n | { kind: \"usage\"; executionId: string; measurement: UsageMeasurement }\n | { kind: \"execution_finished\"; executionId: string; outcome: \"succeeded\" | \"failed\" | \"cancelled\" }\n);\n\nexport type HarnessRunOutput<T> = { kind: \"text\"; text: string } | { kind: \"structured\"; value: T };\n\nexport interface TranscriptSourceHint {\n format: string;\n namespace: string;\n path?: string;\n}\n\nexport type HarnessRunFailure =\n | { kind: \"invalid_request\"; reason: string }\n | { kind: \"harness_mismatch\"; reason: string }\n | {\n kind: \"unsupported_requirement\";\n reason: string;\n requirement: { kind: \"capability\"; capability: ExecutionCapability } | { kind: \"limit\"; limit: LimitCapability };\n status: \"unsupported\" | \"unverified\";\n }\n | { kind: \"rate_limited\"; reason: string; retryAtMs?: number; native?: unknown }\n | { kind: \"limit_exceeded\"; reason: string; unit: LimitUnit; native?: unknown }\n | { kind: \"output_invalid\"; reason: string; native?: unknown }\n | { kind: \"auth_misconfigured\"; reason: string; native?: unknown }\n | { kind: \"aborted\"; reason: string }\n | { kind: \"wall_time_exceeded\"; reason: string; wallTimeMs: number }\n | { kind: \"cancelled_unknown\"; reason: string; native?: unknown }\n | { kind: \"runtime_error\"; reason: string; native?: unknown };\n\nexport type HarnessRunResult<T = string, H extends Harness = Harness> =\n | {\n ok: true;\n harness: H;\n execution: ExecutionIdentity;\n conversation: ConversationIdentity;\n output: HarnessRunOutput<T>;\n usage: readonly UsageMeasurement[];\n transcript?: TranscriptSourceHint;\n }\n | {\n ok: false;\n harness: H;\n execution?: ExecutionIdentity;\n conversation?: ConversationIdentity;\n failure: HarnessRunFailure;\n usage: readonly UsageMeasurement[];\n };\n\nexport interface HarnessAdapter<H extends Harness> {\n descriptor: HarnessCapabilityDescriptor<H>;\n run<T>(request: HarnessRunRequestFor<H, T>): Promise<HarnessRunResult<T, H>>;\n}\n","import { conversationRef } from \"@titan-design/agent-protocol\";\nimport type {\n BoundedRunBase,\n CapabilityAssessment,\n ExecutionCapability,\n ExecutionLimit,\n Harness,\n HarnessAdapter,\n HarnessCapabilityDescriptor,\n HarnessRunFailure,\n HarnessRunRequestFor,\n HarnessRunResult,\n LimitCapability,\n LimitUnit,\n} from \"./harness-contracts.js\";\nimport { CODEX_APPROVAL_POLICIES, CODEX_SANDBOXES } from \"./harness-contracts.js\";\n\nexport function preflightHarnessRun<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n descriptor: HarnessCapabilityDescriptor<H>,\n): HarnessRunFailure | undefined {\n if (request.harness !== descriptor.harness) {\n return mismatch(`request harness ${request.harness} does not match adapter harness ${descriptor.harness}`);\n }\n if (request.target.kind === \"resume\" && request.target.conversation.harness !== request.harness) {\n return mismatch(`resume conversation harness ${request.target.conversation.harness} does not match ${request.harness}`);\n }\n const identityFailure = invalidIdentity(request);\n if (identityFailure) return identityFailure;\n const invalid = invalidNumbers(request);\n if (invalid) return invalid;\n const nativeFailure = invalidNativeOptions(request);\n if (nativeFailure) return nativeFailure;\n if (request.signal?.aborted) return { kind: \"aborted\", reason: String(request.signal.reason ?? \"aborted by caller\") };\n const capabilityFailure = checkCapabilities(request, descriptor);\n if (capabilityFailure) return capabilityFailure;\n return checkLimits(request, descriptor);\n}\n\nfunction invalidIdentity(request: BoundedRunBase): HarnessRunFailure | undefined {\n if (request.target.kind === \"fresh\") {\n return nonempty(request.target.namespace) ? undefined : invalid(\"fresh target namespace must be a nonempty string\");\n }\n try {\n conversationRef(request.target.conversation);\n return undefined;\n } catch {\n return invalid(\"resume conversation identity components must be nonempty strings\");\n }\n}\n\nconst CLAUDE_ONLY = [\"allowedTools\", \"disallowedTools\", \"permissionMode\", \"agents\", \"mcpServers\", \"hooks\", \"settingSources\", \"allowApiKeyBilling\"];\nconst CODEX_ONLY = [\"reasoningEffort\", \"sandbox\", \"approvalPolicy\"];\nconst CLAUDE_PERMISSION_MODES = [\"default\", \"acceptEdits\", \"bypassPermissions\", \"plan\", \"dontAsk\", \"auto\"];\nconst CLAUDE_SETTING_SOURCES = [\"user\", \"project\", \"local\"];\n\nfunction invalidNativeOptions(request: { harness: Harness; native?: unknown }): HarnessRunFailure | undefined {\n if (request.native === undefined) return undefined;\n if (!record(request.native)) return invalid(\"native options must be an object\");\n const native: object = request.native;\n const forbidden = request.harness === \"codex\" ? CLAUDE_ONLY : CODEX_ONLY;\n const field = forbidden.find((name) => name in native);\n if (field) return invalid(`${field} is not a ${request.harness} native option`);\n const options = native as Record<string, unknown>;\n return request.harness === \"codex\" ? invalidCodexOptions(options) : invalidClaudeOptions(options);\n}\n\nfunction invalidCodexOptions(options: Record<string, unknown>): HarnessRunFailure | undefined {\n const invalidModel = optionalNonempty(\"model\", options.model);\n if (invalidModel) return invalidModel;\n const invalidEffort = optionalNonempty(\"reasoningEffort\", options.reasoningEffort);\n if (invalidEffort) return invalidEffort;\n const enums = [\n [\"sandbox\", options.sandbox, CODEX_SANDBOXES],\n [\"approvalPolicy\", options.approvalPolicy, CODEX_APPROVAL_POLICIES],\n ] as const;\n for (const [name, value, allowed] of enums) {\n if (value !== undefined && !allowed.includes(value as never)) return invalid(`${name} is not a recognized Codex value`);\n }\n if (options.outputSchema === undefined) return undefined;\n if (!record(options.outputSchema)) return invalid(\"Codex outputSchema must be an object\");\n if (!record(options.outputSchema.jsonSchema)) return invalid(\"Codex outputSchema.jsonSchema must be an object\");\n return typeof options.outputSchema.parse === \"function\" ? undefined : invalid(\"Codex outputSchema.parse must be callable\");\n}\n\nfunction invalidClaudeOptions(options: Record<string, unknown>): HarnessRunFailure | undefined {\n const invalidModel = optionalNonempty(\"model\", options.model);\n if (invalidModel) return invalidModel;\n if (options.permissionMode !== undefined && !CLAUDE_PERMISSION_MODES.includes(options.permissionMode as never)) {\n return invalid(\"permissionMode is not a recognized Claude Code value\");\n }\n for (const name of [\"allowedTools\", \"disallowedTools\"] as const) {\n if (options[name] !== undefined && !stringArray(options[name])) return invalid(`${name} must be an array of strings`);\n }\n if (options.settingSources !== undefined && !enumArray(options.settingSources, CLAUDE_SETTING_SOURCES)) {\n return invalid(\"settingSources must contain recognized Claude Code values\");\n }\n if (options.allowApiKeyBilling !== undefined && typeof options.allowApiKeyBilling !== \"boolean\") {\n return invalid(\"allowApiKeyBilling must be boolean\");\n }\n if (options.outputSchema !== undefined && (!record(options.outputSchema) || typeof options.outputSchema.safeParse !== \"function\")) {\n return invalid(\"Claude Code outputSchema must be a Zod schema\");\n }\n return undefined;\n}\n\nexport async function dispatchHarnessRun<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n adapter: HarnessAdapter<H>,\n): Promise<HarnessRunResult<T, H>> {\n const failure = preflightHarnessRun(request, adapter.descriptor);\n if (failure) return { ok: false, harness: request.harness as H, failure, usage: [] };\n try {\n return await adapter.run(request);\n } catch (error) {\n return {\n ok: false,\n harness: request.harness as H,\n failure: { kind: \"runtime_error\", reason: messageOf(error), native: error },\n usage: [],\n };\n }\n}\n\nfunction invalidNumbers(request: BoundedRunBase): HarnessRunFailure | undefined {\n if (!positiveFinite(request.wallTimeMs)) return invalid(\"wallTimeMs must be a positive finite number\");\n for (const limit of request.limits ?? []) {\n if (!positiveFinite(limit.value)) return invalid(`${limit.unit} limit must be a positive finite number`);\n if (limit.unit !== \"usd\" && !Number.isInteger(limit.value)) {\n return invalid(`${limit.unit} limit must be a positive integer`);\n }\n }\n return undefined;\n}\n\nfunction checkCapabilities<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n descriptor: HarnessCapabilityDescriptor<H>,\n): HarnessRunFailure | undefined {\n for (const capability of requiredCapabilities(request)) {\n const assessment = descriptor.capabilities[capability] ?? {\n status: \"unverified\",\n reason: \"adapter did not declare this capability\",\n };\n const failure = rejectAssessment(assessment, { kind: \"capability\", capability });\n if (failure) return failure;\n }\n return undefined;\n}\n\nfunction requiredCapabilities(request: BoundedRunBase & { native?: { outputSchema?: unknown } }): ExecutionCapability[] {\n const required = new Set<ExecutionCapability>(request.requires ?? []);\n required.add(request.target.kind === \"fresh\" ? \"fresh_run\" : \"resume\");\n if (request.native?.outputSchema !== undefined) required.add(\"structured_output\");\n if (request.signal) required.add(\"external_cancellation\");\n return [...required];\n}\n\nfunction checkLimits<H extends Harness, T>(\n request: HarnessRunRequestFor<H, T>,\n descriptor: HarnessCapabilityDescriptor<H>,\n): HarnessRunFailure | undefined {\n const wallTime: ExecutionLimitRecord = {\n unit: \"milliseconds\",\n value: request.wallTimeMs,\n scope: \"execution\",\n enforcement: \"hard\",\n };\n for (const limit of [wallTime, ...(request.limits ?? [])]) {\n const declared = descriptor.limits.find((candidate) => sameLimit(candidate, limit));\n const assessment = declared?.assessment ?? { status: \"unverified\", reason: \"adapter did not declare this limit\" };\n const requirement = { kind: \"limit\" as const, limit: { ...limit, assessment } };\n const failure = rejectAssessment(assessment, requirement);\n if (failure) return failure;\n }\n return undefined;\n}\n\ntype ExecutionLimitRecord = ExecutionLimit | {\n unit: \"milliseconds\";\n value: number;\n scope: \"execution\";\n enforcement: \"hard\";\n};\n\nfunction sameLimit(capability: LimitCapability, limit: ExecutionLimitRecord): boolean {\n return capability.unit === limit.unit && capability.scope === limit.scope && capability.enforcement === limit.enforcement;\n}\n\nfunction rejectAssessment(\n assessment: CapabilityAssessment,\n requirement: Extract<HarnessRunFailure, { kind: \"unsupported_requirement\" }>[\"requirement\"],\n): HarnessRunFailure | undefined {\n if (assessment.status === \"supported\") return undefined;\n const name = requirement.kind === \"capability\" ? requirement.capability : describeLimit(requirement.limit);\n return { kind: \"unsupported_requirement\", reason: `${name} is ${assessment.status}: ${assessment.reason}`, requirement, status: assessment.status };\n}\n\nfunction describeLimit(limit: { unit: LimitUnit; scope: string; enforcement: string }): string {\n return `${limit.enforcement} ${limit.scope} limit in ${limit.unit}`;\n}\n\nfunction positiveFinite(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction nonempty(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction optionalNonempty(name: string, value: unknown): HarnessRunFailure | undefined {\n return value === undefined || nonempty(value) ? undefined : invalid(`${name} must be a nonempty string`);\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nfunction enumArray(value: unknown, allowed: readonly string[]): boolean {\n return stringArray(value) && value.every((item) => allowed.includes(item));\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction invalid(reason: string): HarnessRunFailure {\n return { kind: \"invalid_request\", reason };\n}\n\nfunction mismatch(reason: string): HarnessRunFailure {\n return { kind: \"harness_mismatch\", reason };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { isAbsolute } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { runCodexExecSession } from \"./codex-exec-session.js\";\nimport {\n createCodexSchemaFile,\n inspectCodexVersion,\n startCodexProcess,\n type CodexProcessInput,\n type CodexSchemaFile,\n type SupervisedCodexProcess,\n type CodexVersionInspectionOptions,\n} from \"./codex-process.js\";\nimport { EXECUTION_CAPABILITIES } from \"./harness-contracts.js\";\nimport type {\n CapabilityAssessment,\n CodexRunRequest,\n HarnessAdapter,\n HarnessCapabilityDescriptor,\n HarnessRunFailure,\n HarnessRunResult,\n LimitCapability,\n} from \"./harness-contracts.js\";\nimport { preflightHarnessRun } from \"./preflight.js\";\n\nexport const DEFAULT_CODEX_EXECUTABLE = \"/Applications/ChatGPT.app/Contents/Resources/codex\";\nexport const SUPPORTED_CODEX_EXEC_VERSION = \"0.154.0-alpha.6.1\";\nexport const STRIPPED_CODEX_AUTH_VARS = [\"CODEX_API_KEY\", \"OPENAI_API_KEY\", \"OPENAI_ACCESS_TOKEN\"] as const;\n\nexport interface CodexExecAdapterOptions {\n auth: \"cached-cli\";\n executablePath?: string;\n env?: NodeJS.ProcessEnv;\n killGraceMs?: number;\n}\n\nexport interface CodexExecDeps {\n inspectVersion?: (\n executablePath: string,\n env: Record<string, string>,\n options: CodexVersionInspectionOptions,\n ) => Promise<string>;\n start?: (input: CodexProcessInput) => SupervisedCodexProcess;\n createSchemaFile?: (schema: Record<string, unknown>) => Promise<CodexSchemaFile>;\n executionId?: () => string;\n now?: () => number;\n deadlineNow?: () => number;\n}\n\nexport function createCodexExecAdapter(\n options: CodexExecAdapterOptions,\n deps: CodexExecDeps = {},\n): HarnessAdapter<\"codex\"> {\n validateOptions(options);\n const executablePath = options.executablePath ?? DEFAULT_CODEX_EXECUTABLE;\n const env = prepareCodexEnv(options.env ?? process.env);\n const descriptor = codexExecCapabilities();\n return {\n descriptor,\n async run<T>(request: CodexRunRequest<T>): Promise<HarnessRunResult<T, \"codex\">> {\n const preflight = preflightHarnessRun(request, descriptor);\n if (preflight) return failed(preflight);\n const invalid = validateAdapterRequest(request);\n if (invalid) return failed(invalid);\n try {\n return await runSupervised(request, { executablePath, env, killGraceMs: options.killGraceMs }, deps);\n } catch (error) {\n return failed({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n }\n },\n };\n}\n\nexport function prepareCodexEnv(env: NodeJS.ProcessEnv): Record<string, string> {\n const prepared: Record<string, string> = {};\n for (const [name, value] of Object.entries(env)) {\n if (value !== undefined && !(STRIPPED_CODEX_AUTH_VARS as readonly string[]).includes(name)) prepared[name] = value;\n }\n return prepared;\n}\n\nexport function codexExecCapabilities(): HarnessCapabilityDescriptor<\"codex\"> {\n const supported = (evidence: string): CapabilityAssessment => ({ status: \"supported\", evidence });\n const unsupported = (reason: string): CapabilityAssessment => ({ status: \"unsupported\", reason });\n const capabilities = Object.fromEntries(\n EXECUTION_CAPABILITIES.map((capability) => [\n capability,\n unsupported(\"not implemented by the supervised exec adapter\"),\n ]),\n ) as HarnessCapabilityDescriptor<\"codex\">[\"capabilities\"];\n capabilities.fresh_run = supported(\"codex exec starts a persisted thread\");\n capabilities.resume = supported(\"codex exec resume uses an explicit native thread ID\");\n capabilities.structured_output = supported(\"native output schema plus caller parser validation\");\n capabilities.external_cancellation = supported(\"owned local process group receives termination signals\");\n capabilities.persisted_transcript = supported(\"adapter never passes --ephemeral\");\n capabilities.token_reporting = supported(\"turn.completed usage is normalized with source provenance\");\n const limits = limitCapabilities(supported, unsupported);\n return {\n harness: \"codex\",\n adapter: { name: \"codex-exec-json\", version: SUPPORTED_CODEX_EXEC_VERSION },\n capabilities,\n limits,\n };\n}\n\nfunction limitCapabilities(\n supported: (evidence: string) => CapabilityAssessment,\n unsupported: (reason: string) => CapabilityAssessment,\n): LimitCapability[] {\n const limits: LimitCapability[] = [\n {\n unit: \"milliseconds\",\n scope: \"execution\",\n enforcement: \"hard\",\n assessment: supported(\"local process deadline\"),\n },\n ];\n for (const unit of [\"usd\", \"model_requests\", \"agent_iterations\", \"tokens\"] as const) {\n for (const scope of [\"execution\", \"conversation\"] as const) {\n limits.push({\n unit,\n scope,\n enforcement: \"hard\",\n assessment: unsupported(\"codex exec has no verified hard cap in this unit\"),\n });\n }\n }\n return limits;\n}\n\nfunction validateOptions(options: CodexExecAdapterOptions): void {\n if (options.auth !== \"cached-cli\") throw new TypeError(\"Codex exec adapter supports only cached-cli authentication\");\n if (options.executablePath !== undefined) {\n if (options.executablePath.trim().length === 0) throw new TypeError(\"executablePath must be a nonempty string\");\n if (!isAbsolute(options.executablePath)) throw new TypeError(\"executablePath must be absolute\");\n }\n if (options.killGraceMs !== undefined && (!Number.isFinite(options.killGraceMs) || options.killGraceMs < 0)) {\n throw new TypeError(\"killGraceMs must be a finite nonnegative number\");\n }\n}\n\nfunction validateAdapterRequest<T>(request: CodexRunRequest<T>): HarnessRunFailure | undefined {\n if (!request.prompt.trim()) return { kind: \"invalid_request\", reason: \"Codex exec requires a nonempty prompt\" };\n if (!isAbsolute(request.cwd)) return { kind: \"invalid_request\", reason: \"Codex exec requires an absolute cwd\" };\n if (!request.native?.model) return { kind: \"invalid_request\", reason: \"Codex exec requires an explicit model\" };\n if (request.native.approvalPolicy && request.native.approvalPolicy !== \"never\") {\n return { kind: \"invalid_request\", reason: \"Codex exec supports only the noninteractive never approval policy\" };\n }\n return undefined;\n}\n\nasync function checkVersion(\n inspect: () => Promise<string>,\n expected: string,\n): Promise<HarnessRunFailure | undefined> {\n try {\n const actual = parseVersion(await inspect());\n if (actual === expected) return undefined;\n return { kind: \"runtime_error\", reason: `unsupported Codex CLI version ${actual}; expected ${expected}` };\n } catch (error) {\n const reason = `could not verify Codex CLI version: ${messageOf(error)}`;\n return { kind: \"runtime_error\", reason, native: error };\n }\n}\n\nfunction parseVersion(output: string): string {\n const match = /^codex-cli\\s+(\\S+)/m.exec(output.trim());\n if (!match?.[1]) throw new Error(`unrecognized version output: ${output.trim()}`);\n return match[1];\n}\n\nasync function runSupervised<T>(\n request: CodexRunRequest<T>,\n config: {\n executablePath: string;\n env: Record<string, string>;\n killGraceMs?: number;\n },\n deps: CodexExecDeps,\n): Promise<HarnessRunResult<T, \"codex\">> {\n const deadlineNow = deps.deadlineNow ?? performance.now.bind(performance);\n const startedAt = deadlineNow();\n const remaining = () => Math.max(0, request.wallTimeMs - (deadlineNow() - startedAt));\n let schemaFile: CodexSchemaFile | undefined;\n try {\n const versionOutput = await setupStep(\n (deps.inspectVersion ?? inspectCodexVersion)(config.executablePath, config.env, {\n signal: request.signal,\n timeoutMs: remaining(),\n }),\n request.signal,\n remaining(),\n );\n const versionFailure = await checkVersion(async () => versionOutput, SUPPORTED_CODEX_EXEC_VERSION);\n if (versionFailure) return failed(versionFailure);\n\n if (request.native?.outputSchema) {\n schemaFile = await setupStep(\n (deps.createSchemaFile ?? createCodexSchemaFile)(request.native.outputSchema.jsonSchema),\n request.signal,\n remaining(),\n (lateFile) => lateFile.dispose(),\n );\n }\n\n if (request.signal?.aborted) return failed(abortFailure(request.signal));\n const processWallTimeMs = remaining();\n if (processWallTimeMs <= 0) return failed(timeoutFailure(request.wallTimeMs));\n const input = {\n executablePath: config.executablePath,\n args: buildCodexExecArgs(request, schemaFile?.path),\n cwd: request.cwd,\n env: config.env,\n };\n const executionId = (deps.executionId ?? randomUUID)();\n const processHandle = (deps.start ?? startCodexProcess)(input);\n const cleanup = async () => {\n const file = schemaFile;\n schemaFile = undefined;\n await file?.dispose();\n };\n return await runCodexExecSession(\n request,\n processHandle,\n executionId,\n deps.now ?? Date.now,\n config.killGraceMs,\n processWallTimeMs,\n cleanup,\n );\n } catch (error) {\n if (request.signal?.aborted) return failed(abortFailure(request.signal));\n if (error instanceof SetupTimeoutError || isProcessTimeout(error)) {\n return failed(timeoutFailure(request.wallTimeMs));\n }\n return failed({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n } finally {\n await schemaFile?.dispose();\n }\n}\n\nexport function buildCodexExecArgs<T>(request: CodexRunRequest<T>, schemaPath?: string): string[] {\n const native = request.native!;\n const args = [\"exec\"];\n if (request.target.kind === \"resume\") args.push(\"resume\");\n args.push(\"--json\", \"--strict-config\", \"--ignore-user-config\", \"--model\", native.model!);\n args.push(\"--config\", `approval_policy=${JSON.stringify(native.approvalPolicy ?? \"never\")}`);\n args.push(\"--config\", `sandbox_mode=${JSON.stringify(native.sandbox ?? \"read-only\")}`);\n if (native.reasoningEffort) {\n args.push(\"--config\", `model_reasoning_effort=${JSON.stringify(native.reasoningEffort)}`);\n }\n if (request.target.kind === \"fresh\") args.push(\"--cd\", request.cwd);\n if (schemaPath) args.push(\"--output-schema\", schemaPath);\n if (request.target.kind === \"resume\") args.push(request.target.conversation.nativeId);\n args.push(\"--\", request.prompt);\n return args;\n}\n\nfunction failed<T>(failure: HarnessRunFailure): HarnessRunResult<T, \"codex\"> {\n return { ok: false, harness: \"codex\", failure, usage: [] };\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction timeoutFailure(wallTimeMs: number): HarnessRunFailure {\n return { kind: \"wall_time_exceeded\", reason: \"Codex execution exceeded its wall deadline\", wallTimeMs };\n}\n\nfunction abortFailure(signal: AbortSignal): HarnessRunFailure {\n return { kind: \"aborted\", reason: String(signal.reason ?? \"aborted by caller\") };\n}\n\nclass SetupTimeoutError extends Error {}\n\nfunction setupStep<T>(\n work: Promise<T>,\n signal: AbortSignal | undefined,\n timeoutMs: number,\n disposeLateValue?: (value: T) => void | Promise<void>,\n): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n const finish = (callback: () => void) => {\n if (settled) return false;\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n callback();\n return true;\n };\n const onAbort = () => finish(() => reject(signal?.reason ?? new Error(\"aborted by caller\")));\n const timer = setTimeout(\n () => finish(() => reject(new SetupTimeoutError(\"Codex setup exceeded its wall deadline\"))),\n Math.max(0, timeoutMs),\n );\n timer.unref?.();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (signal?.aborted) onAbort();\n work.then(\n (value) => {\n if (!finish(() => resolve(value)) && disposeLateValue) {\n void Promise.resolve(disposeLateValue(value)).catch(() => undefined);\n }\n },\n (error: unknown) => finish(() => reject(error)),\n );\n });\n}\n\nfunction isProcessTimeout(error: unknown): boolean {\n if (typeof error !== \"object\" || error === null) return false;\n const value = error as { code?: unknown; killed?: unknown; signal?: unknown };\n return value.code === \"ETIMEDOUT\" || (value.killed === true && value.signal === \"SIGKILL\");\n}\n","import { conversationItemRef } from \"@titan-design/agent-protocol\";\nimport type { ConversationIdentity, ExecutionIdentity, TokenCounts, UsageMeasurement } from \"@titan-design/agent-protocol\";\nimport type { CodexProcessExit, SupervisedCodexProcess } from \"./codex-process.js\";\nimport type { CodexRunRequest, HarnessRunFailure, HarnessRunProgress, HarnessRunResult } from \"./harness-contracts.js\";\n\nexport const DEFAULT_CODEX_KILL_GRACE_MS = 2_000;\n\nexport async function runCodexExecSession<T>(\n request: CodexRunRequest<T>,\n processHandle: SupervisedCodexProcess,\n executionId: string,\n now: () => number,\n killGraceMs = DEFAULT_CODEX_KILL_GRACE_MS,\n processWallTimeMs = request.wallTimeMs,\n cleanup?: () => Promise<void>,\n): Promise<HarnessRunResult<T, \"codex\">> {\n return new CodexExecSession(request, processHandle, executionId, now, killGraceMs, processWallTimeMs, cleanup).run();\n}\n\nclass CodexExecSession<T> {\n private conversation: ConversationIdentity | undefined;\n private finalText: string | undefined;\n private usageRaw: unknown;\n private nativeTurnId: string | undefined;\n private turnCompleted = false;\n private nativeTerminalObserved = false;\n private streamError: HarnessRunFailure | undefined;\n private stderr = \"\";\n private stopReason: \"abort\" | \"timeout\" | undefined;\n private timer: ReturnType<typeof setTimeout> | undefined;\n private forceTimer: ReturnType<typeof setTimeout> | undefined;\n private readonly onAbort = () => this.stop(\"abort\");\n\n constructor(\n private readonly request: CodexRunRequest<T>,\n private readonly processHandle: SupervisedCodexProcess,\n private readonly executionId: string,\n private readonly now: () => number,\n private readonly killGraceMs: number,\n private readonly processWallTimeMs: number,\n private readonly cleanup: (() => Promise<void>) | undefined,\n ) {}\n\n async run(): Promise<HarnessRunResult<T, \"codex\">> {\n try {\n this.request.signal?.addEventListener(\"abort\", this.onAbort);\n this.timer = setTimeout(() => this.stop(\"timeout\"), this.processWallTimeMs);\n this.timer.unref?.();\n this.emit({ kind: \"execution_started\", execution: { executionId: this.executionId } });\n const [, , exit] = await Promise.all([this.readStdout(), this.readStderr(), this.processHandle.completed]);\n let result = this.settle(exit);\n result = await this.finishCleanup(result);\n return this.finish(result);\n } catch (error) {\n this.terminate();\n await this.ignoreExitFailure();\n let result = this.failure({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n result = await this.finishCleanup(result);\n return this.finish(result);\n } finally {\n this.dispose();\n }\n }\n\n private async readStdout(): Promise<void> {\n for await (const line of this.processHandle.stdout) {\n if (!line.trim()) continue;\n let event: unknown;\n try {\n event = JSON.parse(line);\n } catch {\n this.streamError = { kind: \"runtime_error\", reason: \"Codex emitted malformed JSONL\", native: { line } };\n this.terminate();\n return;\n }\n this.absorb(event);\n }\n }\n\n private async readStderr(): Promise<void> {\n for await (const line of this.processHandle.stderr) this.stderr = `${this.stderr}${line}\\n`.slice(-65_536);\n }\n\n private absorb(value: unknown): void {\n if (!record(value) || typeof value.type !== \"string\") return;\n if (value.type === \"thread.started\" && typeof value.thread_id === \"string\") this.identify(value.thread_id);\n if (value.type === \"turn.started\") this.nativeTurnId = turnId(value) ?? this.nativeTurnId;\n if (isAgentMessage(value)) {\n this.finalText = value.item.text;\n this.emit({ kind: \"assistant_output\", executionId: this.executionId, text: value.item.text });\n }\n if (value.type === \"turn.completed\") {\n this.turnCompleted = true;\n this.nativeTerminalObserved = true;\n this.nativeTurnId = turnId(value) ?? this.nativeTurnId;\n this.usageRaw = value.usage;\n }\n if (value.type === \"turn.failed\") this.nativeTerminalObserved = true;\n if (value.type === \"turn.failed\" || value.type === \"error\") {\n this.streamError = { kind: \"runtime_error\", reason: eventMessage(value), native: value };\n }\n }\n\n private identify(nativeId: string): void {\n if (!nativeId.trim()) return this.failStream(\"Codex emitted an empty native thread ID\");\n if (this.request.target.kind === \"resume\" && nativeId !== this.request.target.conversation.nativeId) {\n return this.failStream(\"Codex resumed a different native conversation\");\n }\n const namespace =\n this.request.target.kind === \"fresh\" ? this.request.target.namespace : this.request.target.conversation.namespace;\n this.conversation = { harness: \"codex\", namespace, nativeId };\n this.emit({ kind: \"conversation_identified\", executionId: this.executionId, conversation: this.conversation });\n }\n\n private failStream(reason: string): void {\n this.streamError = { kind: \"runtime_error\", reason };\n this.terminate();\n }\n\n private settle(exit: CodexProcessExit): HarnessRunResult<T, \"codex\"> {\n if (this.stopReason && !this.nativeTerminalObserved) return this.failure(cancelledUnknown(this.stopReason, this.request, exit));\n if (this.stopReason === \"timeout\") return this.failure(timeoutFailure(this.request.wallTimeMs));\n if (this.stopReason === \"abort\") return this.failure(abortFailure(this.request.signal));\n if (this.streamError) return this.failure(this.streamError);\n if (exit.exitCode !== 0) return this.failure(exitFailure(exit, this.stderr));\n return this.success();\n }\n\n private success(): HarnessRunResult<T, \"codex\"> {\n if (!this.conversation) return this.failure({ kind: \"runtime_error\", reason: \"Codex completed without a thread.started event\" });\n if (!this.turnCompleted) return this.failure({ kind: \"runtime_error\", reason: \"Codex completed without a turn.completed event\" });\n if (this.finalText === undefined) return this.failure({ kind: \"runtime_error\", reason: \"Codex completed without a final agent message\" });\n const output = parseOutput(this.request, this.finalText);\n if (\"failure\" in output) return this.failure(output.failure);\n return {\n ok: true,\n harness: \"codex\",\n execution: { executionId: this.executionId, conversation: this.conversation },\n conversation: this.conversation,\n output: output.output,\n usage: this.usage(),\n transcript: { format: \"codex-rollout-jsonl\", namespace: this.conversation.namespace },\n };\n }\n\n private usage(): readonly UsageMeasurement[] {\n if (!this.conversation || !record(this.usageRaw)) return [];\n const measurement: UsageMeasurement = {\n kind: \"snapshot\",\n scope: \"turn\",\n scopeId: this.turnScopeId(),\n epoch: this.executionId,\n sequence: 0,\n model: this.request.native?.model ?? null,\n tokens: tokenCounts(this.usageRaw),\n cost: null,\n source: \"codex-exec.turn.completed.usage\",\n };\n return [measurement];\n }\n\n private turnScopeId(): string {\n if (this.conversation && this.nativeTurnId) return conversationItemRef(this.conversation, \"turn\", this.nativeTurnId);\n // Codex exec does not currently report a turn ID. Keep the snapshot scoped to\n // this invocation rather than mislabeling it as a conversation total.\n return `execution:${encodeURIComponent(this.executionId)}:turn`;\n }\n\n private failure(failure: HarnessRunFailure): HarnessRunResult<T, \"codex\"> {\n const execution: ExecutionIdentity = {\n executionId: this.executionId,\n ...(this.conversation ? { conversation: this.conversation } : {}),\n };\n const result: HarnessRunResult<T, \"codex\"> = {\n ok: false,\n harness: \"codex\",\n execution,\n failure,\n usage: this.usage(),\n };\n if (this.conversation) result.conversation = this.conversation;\n return result;\n }\n\n private stop(reason: \"abort\" | \"timeout\"): void {\n if (this.stopReason) return;\n this.stopReason = reason;\n this.terminate();\n }\n\n private terminate(): void {\n this.processHandle.terminate(\"SIGTERM\");\n if (this.forceTimer) return;\n this.forceTimer = setTimeout(() => this.processHandle.terminate(\"SIGKILL\"), this.killGraceMs);\n this.forceTimer.unref?.();\n }\n\n private async ignoreExitFailure(): Promise<void> {\n try {\n await this.processHandle.completed;\n } catch {\n // The original process/stream error is the useful failure.\n }\n }\n\n private finish(result: HarnessRunResult<T, \"codex\">): HarnessRunResult<T, \"codex\"> {\n for (const measurement of result.usage) {\n this.emit({ kind: \"usage\", executionId: this.executionId, measurement });\n }\n if (this.streamError && result.ok) result = this.failure(this.streamError);\n const cancelled = !result.ok && (result.failure.kind === \"aborted\" || result.failure.kind === \"cancelled_unknown\");\n const outcome = result.ok ? \"succeeded\" : cancelled ? \"cancelled\" : \"failed\";\n this.emit({ kind: \"execution_finished\", executionId: this.executionId, outcome });\n return this.streamError && result.ok ? this.failure(this.streamError) : result;\n }\n\n private emit(progress: ProgressPayload): void {\n if (!this.request.onProgress || this.streamError) return;\n try {\n this.request.onProgress({ ...progress, harness: \"codex\", atMs: this.now() } as HarnessRunProgress);\n } catch (error) {\n this.streamError = { kind: \"runtime_error\", reason: `Codex progress callback failed: ${messageOf(error)}`, native: error };\n this.terminate();\n }\n }\n\n private async finishCleanup(result: HarnessRunResult<T, \"codex\">): Promise<HarnessRunResult<T, \"codex\">> {\n if (!this.cleanup) return result;\n try {\n await this.cleanup();\n return result;\n } catch (error) {\n return this.failure({ kind: \"runtime_error\", reason: messageOf(error), native: error });\n }\n }\n\n private dispose(): void {\n if (this.timer) clearTimeout(this.timer);\n if (this.forceTimer) clearTimeout(this.forceTimer);\n this.request.signal?.removeEventListener(\"abort\", this.onAbort);\n }\n}\n\ntype ParsedOutput<T> =\n | { output: { kind: \"text\"; text: string } | { kind: \"structured\"; value: T } }\n | { failure: HarnessRunFailure };\n\nfunction parseOutput<T>(request: CodexRunRequest<T>, text: string): ParsedOutput<T> {\n const schema = request.native?.outputSchema;\n if (!schema) return { output: { kind: \"text\", text } };\n try {\n return { output: { kind: \"structured\", value: schema.parse(JSON.parse(text)) } };\n } catch (error) {\n const reason = `structured output validation failed: ${messageOf(error)}`;\n return { failure: { kind: \"output_invalid\", reason, native: { text, error } } };\n }\n}\n\ntype ProgressPayload =\n | { kind: \"execution_started\"; execution: ExecutionIdentity }\n | { kind: \"conversation_identified\"; executionId: string; conversation: ConversationIdentity }\n | { kind: \"assistant_output\"; executionId: string; text: string }\n | { kind: \"usage\"; executionId: string; measurement: UsageMeasurement }\n | { kind: \"execution_finished\"; executionId: string; outcome: \"succeeded\" | \"failed\" | \"cancelled\" };\n\nfunction tokenCounts(usage: Record<string, unknown>): TokenCounts {\n const input = count(usage.input_tokens);\n const output = count(usage.output_tokens);\n return {\n input,\n output,\n cachedInput: count(usage.cached_input_tokens),\n cacheWriteInput: null,\n reasoningOutput: count(usage.reasoning_output_tokens),\n total: input === null || output === null ? null : input + output,\n };\n}\n\nfunction count(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : null;\n}\n\nfunction isAgentMessage(event: Record<string, unknown>): event is Record<string, unknown> & {\n item: { type: \"agent_message\"; text: string };\n} {\n return event.type === \"item.completed\" && record(event.item) && event.item.type === \"agent_message\" && typeof event.item.text === \"string\";\n}\n\nfunction turnId(event: Record<string, unknown>): string | undefined {\n if (typeof event.turn_id === \"string\" && event.turn_id.trim()) return event.turn_id;\n if (record(event.turn) && typeof event.turn.id === \"string\" && event.turn.id.trim()) return event.turn.id;\n return undefined;\n}\n\nfunction timeoutFailure(wallTimeMs: number): HarnessRunFailure {\n return { kind: \"wall_time_exceeded\", reason: \"Codex execution exceeded its wall deadline\", wallTimeMs };\n}\n\nfunction abortFailure(signal: AbortSignal | undefined): HarnessRunFailure {\n return { kind: \"aborted\", reason: String(signal?.reason ?? \"aborted by caller\") };\n}\n\nfunction cancelledUnknown(\n cause: \"abort\" | \"timeout\",\n request: CodexRunRequest<unknown>,\n exit: CodexProcessExit,\n): HarnessRunFailure {\n const requested = cause === \"timeout\"\n ? { kind: \"wall_time_exceeded\", wallTimeMs: request.wallTimeMs }\n : { kind: \"external_abort\", reason: String(request.signal?.reason ?? \"aborted by caller\") };\n return {\n kind: \"cancelled_unknown\",\n reason: `Codex process stopped after ${cause} without a native terminal turn event`,\n native: { cause, requested, processExit: exit },\n };\n}\n\nfunction exitFailure(exit: CodexProcessExit, stderr: string): HarnessRunFailure {\n return {\n kind: \"runtime_error\",\n reason: stderr.trim() || `Codex exited with status ${String(exit.exitCode)}`,\n native: exit,\n };\n}\n\nfunction eventMessage(event: Record<string, unknown>): string {\n if (typeof event.message === \"string\") return event.message;\n if (record(event.error) && typeof event.error.message === \"string\") return event.error.message;\n return `Codex emitted ${String(event.type)}`;\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n isTerminalExecutionPhase,\n type ExecutionOwnerFence,\n type ExecutionRecord,\n type ExecutionTerminal,\n type ExecutionTransition,\n} from \"@titan-design/agent-protocol\";\nimport type { Harness, HarnessRunProgress, HarnessRunResult } from \"./harness-contracts.js\";\nimport { terminalFromHarnessResult } from \"./durable-result.js\";\nimport type {\n DurableCancelResult,\n DurableDispatchAck,\n DurableDispatchInput,\n DurableHarnessDispatcher,\n DurableHarnessDispatcherDeps,\n DurableHarnessDispatcherOptions,\n DurableHarnessRecord,\n DurableHarnessSuccess,\n DurableReconcileOutcome,\n DurableSettlement,\n} from \"./durable-types.js\";\nimport {\n failureKind,\n message,\n nonempty,\n ownsLiveFence,\n positive,\n raceLiveResult,\n readLedgerRecord,\n recordFence,\n startLiveExecution,\n type LiveExecution,\n type StoredSuccess,\n type TransitionFields,\n validateDispatchInput,\n} from \"./durable-dispatcher-support.js\";\nimport { claimForRecovery, closePrepared, reconcileLive, requireRecovery } from \"./durable-reconcile.js\";\n\nexport function createDurableHarnessDispatcher<H extends Harness>(\n adapter: DurableHarnessDispatcher<H>[\"adapter\"],\n options: DurableHarnessDispatcherOptions<H>,\n deps: DurableHarnessDispatcherDeps = {},\n): DurableHarnessDispatcher<H> {\n return new Dispatcher(adapter, options, deps);\n}\nclass Dispatcher<H extends Harness> implements DurableHarnessDispatcher<H> {\n private readonly live = new Map<string, LiveExecution<H>>();\n private readonly eventId: () => string;\n private readonly now: () => number;\n private readonly schedule: typeof globalThis.setInterval;\n private readonly unschedule: typeof globalThis.clearInterval;\n private readonly renewEveryMs: number;\n\n constructor(\n readonly adapter: DurableHarnessDispatcher<H>[\"adapter\"],\n private readonly options: DurableHarnessDispatcherOptions<H>,\n deps: DurableHarnessDispatcherDeps,\n ) {\n nonempty(\"supervisorId\", options.supervisorId);\n positive(\"leaseMs\", options.leaseMs);\n this.renewEveryMs = options.renewEveryMs ?? Math.max(1, Math.floor(options.leaseMs / 3));\n positive(\"renewEveryMs\", this.renewEveryMs);\n if (this.renewEveryMs >= options.leaseMs) throw new TypeError(\"renewEveryMs must be less than leaseMs\");\n this.eventId = deps.eventId ?? randomUUID;\n this.now = deps.now ?? Date.now;\n this.schedule = deps.setInterval ?? globalThis.setInterval;\n this.unschedule = deps.clearInterval ?? globalThis.clearInterval;\n }\n async dispatch<T>(input: DurableDispatchInput<H, T>): Promise<DurableDispatchAck<T, H>> {\n validateDispatchInput(input, this.adapter.descriptor.harness);\n const prepared = this.prepare(input);\n if (input.request.signal?.aborted) return this.preCancelled(input, prepared);\n this.apply(input.executionId, {\n kind: \"begin_dispatch\",\n fence: recordFence(prepared),\n });\n\n const controller = new AbortController();\n const live = this.startLive(input.executionId, recordFence(prepared), controller, input.request.signal);\n this.live.set(input.executionId, live);\n const completion = this.runAdapter(input, live);\n live.completion = completion as Promise<DurableSettlement<unknown, H>>;\n completion.catch(() => undefined);\n return { executionId: input.executionId, requestKey: input.requestKey, runnerRef: input.executionId, completion };\n }\n async reconcile(executionId: string): Promise<DurableReconcileOutcome<H>> {\n nonempty(\"executionId\", executionId);\n const active = this.live.get(executionId);\n if (active) return reconcileLive(this.options.ledger, executionId, active, this.now(), (evidence) => this.failLive(active, \"ownership_lost\", evidence));\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) return { kind: \"ownership_lost\", evidence: read.evidence };\n const current = read.record;\n if (!current) return { kind: \"unknown\", evidence: \"execution ledger has no durable receipt; native submission cannot be excluded\" };\n if (current.terminal) return { kind: \"terminal\", terminal: current.terminal, evidence: \"terminal execution ledger receipt\" };\n\n const claimed = claimForRecovery(\n current,\n { now: this.now(), supervisorId: this.options.supervisorId, leaseUntil: this.leaseUntil() },\n (record, fields) => this.tryApply(record, fields),\n );\n if (!claimed.ok) return { kind: \"ownership_lost\", evidence: claimed.evidence };\n if (claimed.record.phase === \"prepared\") {\n return closePrepared(claimed.record, (record, fields) => this.tryApply(record, fields));\n }\n if (claimed.record.phase !== \"recovery_required\") {\n const recovered = requireRecovery(claimed.record, recordFence(claimed.record), \"dispatcher restarted without a transport attachment handle\", (record, fields) => this.tryApply(record, fields));\n if (recovered.kind === \"ownership_lost\") return recovered;\n if (recovered.kind === \"terminal\") return { kind: \"terminal\", terminal: recovered.terminal, evidence: \"execution became terminal during reconciliation\" };\n }\n return { kind: \"unknown\", evidence: \"transport cannot prove liveness, terminal state, or safe absence after restart\" };\n }\n cancel(executionId: string, reason: string): DurableCancelResult<H> {\n nonempty(\"reason\", reason);\n const live = this.live.get(executionId);\n if (!live) return { kind: \"not_live\", evidence: \"this dispatcher has no owned live handle\" };\n let current: DurableHarnessRecord<H> | undefined;\n try { current = this.options.ledger.get(executionId); }\n catch (error) {\n this.failLive(live, \"ownership_lost\", `cancellation ownership could not be verified: ${message(error)}`);\n return { kind: \"ownership_lost\", evidence: message(error) };\n }\n if (!current) return { kind: \"ownership_lost\", evidence: \"execution record disappeared\" };\n if (current.phase === \"cancel_requested\" && current.cancellation?.reason === reason) {\n if (!ownsLiveFence(current, live.fence, this.now())) {\n this.failLive(live, \"ownership_lost\", \"cancellation owner lease changed or expired\");\n return { kind: \"ownership_lost\", record: current, evidence: \"cancellation owner lease changed or expired\" };\n }\n live.controller.abort(new Error(reason));\n return { kind: \"requested\", record: current };\n }\n let result: ReturnType<DurableHarnessDispatcherOptions<H>[\"ledger\"][\"apply\"]>;\n try { result = this.tryApply(current, { kind: \"request_cancellation\", fence: live.fence, reason }); }\n catch (error) {\n this.failLive(live, \"recovery_required\", `cancellation intent was not durable: ${message(error)}`);\n return { kind: \"ownership_lost\", record: current, evidence: message(error) };\n }\n if (!result.ok) {\n this.failLive(live, failureKind(result.kind), `cancellation intent was rejected: ${result.reason}`);\n return { kind: \"ownership_lost\", record: current, evidence: result.reason };\n }\n live.controller.abort(new Error(reason));\n return { kind: \"requested\", record: result.record };\n }\n private prepare<T>(input: DurableDispatchInput<H, T>): DurableHarnessRecord<H> {\n const conversation = input.request.target.kind === \"resume\" ? input.request.target.conversation : undefined;\n const result = this.options.ledger.apply({\n kind: \"prepare\",\n executionId: input.executionId,\n eventId: this.eventId(),\n expectedRevision: 0,\n occurredAt: this.iso(),\n execution: { executionId: input.executionId, ...(conversation ? { conversation } : {}) },\n ...(input.agent ? { agent: input.agent } : {}),\n harness: input.request.harness,\n requestKey: input.requestKey,\n target: input.request.target,\n owner: { supervisorId: this.options.supervisorId, generation: 1, leaseUntil: this.leaseUntil() },\n });\n if (!result.ok) throw new Error(`could not prepare execution: ${result.kind}: ${result.reason}`);\n if (!result.applied) throw new Error(\"dispatch requires a new execution identity\");\n return result.record;\n }\n\n private preCancelled<T>(input: DurableDispatchInput<H, T>, record: DurableHarnessRecord<H>): DurableDispatchAck<T, H> {\n const reason = String(input.request.signal?.reason ?? \"aborted before dispatch\");\n const result = this.apply(input.executionId, {\n kind: \"finish\",\n fence: recordFence(record),\n terminal: { outcome: \"cancelled\", reason },\n });\n const terminal = result.terminal as ExecutionTerminal<DurableHarnessSuccess<T, H>>;\n const completion = Promise.resolve({ kind: \"terminal\", record: result, terminal } as DurableSettlement<T, H>);\n return { executionId: input.executionId, requestKey: input.requestKey, runnerRef: input.executionId, completion };\n }\n\n private startLive(executionId: string, fence: ExecutionOwnerFence, controller: AbortController, externalSignal?: AbortSignal): LiveExecution<H> {\n return startLiveExecution({\n fence,\n controller,\n schedule: this.schedule,\n renewEveryMs: this.renewEveryMs,\n onRenew: () => this.renew(executionId),\n onExternalAbort: () => { this.cancel(executionId, String(externalSignal?.reason ?? \"aborted by caller\")); },\n ...(externalSignal ? { externalSignal } : {}),\n });\n }\n\n private async runAdapter<T>(input: DurableDispatchInput<H, T>, live: LiveExecution<H>): Promise<DurableSettlement<T, H>> {\n try {\n const raced = await raceLiveResult(this.adapter.run({\n ...input.request,\n signal: live.controller.signal,\n onProgress: (progress) => this.progress(input.executionId, live, progress, input.request.onProgress),\n }), live);\n if (raced.kind === \"problem\") {\n return this.problemSettlement(input.executionId, live, raced.problem) as DurableSettlement<T, H>;\n }\n const result = raced.result;\n if (!result.ok && result.failure.kind === \"runtime_error\") {\n return this.problemSettlement(input.executionId, live, {\n kind: \"recovery_required\",\n evidence: `adapter runtime state is ambiguous: ${result.failure.reason}`,\n }) as DurableSettlement<T, H>;\n }\n return this.persistResult(input.executionId, live, result);\n } catch (error) {\n return this.problemSettlement(input.executionId, live, {\n kind: \"recovery_required\",\n evidence: `adapter threw after durable dispatch: ${message(error)}`,\n }) as DurableSettlement<T, H>;\n } finally {\n this.stopLive(input.executionId, live);\n }\n }\n\n private progress(executionId: string, live: LiveExecution<H>, progress: HarnessRunProgress, forward?: (progress: HarnessRunProgress) => void): void {\n if (progress.kind === \"execution_started\") {\n if (live.adapterExecutionId && live.adapterExecutionId !== progress.execution.executionId) {\n this.failLive(live, \"recovery_required\", \"adapter execution identity changed during one dispatch\");\n } else {\n live.adapterExecutionId = progress.execution.executionId;\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok || !read.record) this.failLive(live, \"ownership_lost\", read.ok ? \"execution record disappeared\" : read.evidence);\n const current = read.ok ? read.record : undefined;\n if (current && (current.phase === \"dispatching\" || current.phase === \"recovery_required\")) {\n try {\n const result = this.tryApply(current, {\n kind: \"observe_running\",\n fence: live.fence,\n runnerRef: executionId,\n adapterExecution: progress.execution,\n evidence: \"adapter emitted execution_started\",\n });\n if (!result.ok) this.failLive(live, failureKind(result.kind), result.reason);\n } catch (error) {\n this.failLive(live, \"recovery_required\", `could not persist running observation: ${message(error)}`);\n }\n }\n }\n }\n if (progress.kind === \"conversation_identified\") this.observeConversation(executionId, live, progress);\n forward?.(progress);\n }\n\n private observeConversation(executionId: string, live: LiveExecution<H>, progress: Extract<HarnessRunProgress, { kind: \"conversation_identified\" }>): void {\n if (live.adapterExecutionId && live.adapterExecutionId !== progress.executionId) {\n this.failLive(live, \"recovery_required\", \"conversation referred to a different adapter execution\");\n return;\n }\n try {\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) {\n this.failLive(live, \"ownership_lost\", read.evidence);\n return;\n }\n const current = read.record;\n if (!current || isTerminalExecutionPhase(current.phase)) {\n this.failLive(live, \"ownership_lost\", \"execution record is unavailable or terminal while identifying conversation\");\n return;\n }\n const result = this.tryApply(current, { kind: \"identify_conversation\", fence: live.fence, conversation: progress.conversation });\n if (!result.ok) this.failLive(live, failureKind(result.kind), result.reason);\n } catch (error) {\n this.failLive(live, \"recovery_required\", `could not persist conversation identity: ${message(error)}`);\n }\n }\n\n private persistResult<T>(executionId: string, live: LiveExecution<H>, result: HarnessRunResult<T, H>): DurableSettlement<T, H> {\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) return { kind: \"ownership_lost\", evidence: read.evidence };\n const current = read.record;\n if (!current) return { kind: \"ownership_lost\", evidence: \"execution record disappeared before terminal persistence\" };\n const terminal = terminalFromHarnessResult(result);\n const applied = this.tryApply(current, {\n kind: \"finish\",\n fence: live.fence,\n terminal: terminal as ExecutionTerminal<StoredSuccess<H>>,\n ...(result.execution ? { adapterExecution: result.execution } : {}),\n ...(result.conversation ? { conversation: result.conversation } : {}),\n });\n if (!applied.ok) return requireRecovery(current, live.fence, `terminal result was not durable: ${applied.reason}`, (record, fields) => this.tryApply(record, fields)) as DurableSettlement<T, H>;\n return {\n kind: \"terminal\",\n record: applied.record as ExecutionRecord<DurableHarnessSuccess<T, H>>,\n terminal,\n };\n }\n\n private renew(executionId: string): void {\n const live = this.live.get(executionId);\n if (!live) return;\n try {\n const current = this.options.ledger.get(executionId);\n if (!current || isTerminalExecutionPhase(current.phase)) {\n this.failLive(live, \"ownership_lost\", \"execution record is unavailable or terminal during lease renewal\");\n return;\n }\n const result = this.tryApply(current, { kind: \"renew_owner\", fence: live.fence, leaseUntil: this.leaseUntil() });\n if (!result.ok) this.failLive(live, failureKind(result.kind), `lease renewal failed: ${result.reason}`);\n } catch (error) {\n this.failLive(live, \"ownership_lost\", `lease renewal threw: ${message(error)}`);\n }\n }\n\n private failLive(live: LiveExecution<H>, kind: \"ownership_lost\" | \"recovery_required\", evidence: string): void {\n if (!live.problem) {\n live.problem = { kind, evidence };\n live.resolveProblem(live.problem);\n }\n live.controller.abort(new Error(evidence));\n }\n\n private problemSettlement(executionId: string, live: LiveExecution<H>, problem: NonNullable<LiveExecution<H>[\"problem\"]>): DurableSettlement<unknown, H> {\n const read = readLedgerRecord(this.options.ledger, executionId);\n if (!read.ok) return { kind: \"ownership_lost\", evidence: `${problem.evidence}; ${read.evidence}` };\n if (problem.kind === \"ownership_lost\") return { kind: \"ownership_lost\", record: read.record, evidence: problem.evidence };\n return requireRecovery(read.record, live.fence, problem.evidence, (record, fields) => this.tryApply(record, fields));\n }\n\n private tryApply(\n current: DurableHarnessRecord<H>,\n fields: TransitionFields<H>,\n ): ReturnType<DurableHarnessDispatcherOptions<H>[\"ledger\"][\"apply\"]> {\n return this.options.ledger.apply({\n ...fields,\n executionId: current.execution.executionId,\n eventId: this.eventId(),\n expectedRevision: current.revision,\n occurredAt: this.iso(),\n } as ExecutionTransition<StoredSuccess<H>>);\n }\n\n private apply(executionId: string, fields: TransitionFields<H>): DurableHarnessRecord<H> {\n const current = this.options.ledger.get(executionId);\n if (!current) throw new Error(`execution ${executionId} is missing`);\n const result = this.tryApply(current, fields);\n if (!result.ok) throw new Error(`${result.kind}: ${result.reason}`);\n return result.record;\n }\n\n private stopLive(executionId: string, live: LiveExecution<H>): void {\n this.unschedule(live.timer);\n live.externalSignal?.removeEventListener(\"abort\", live.onExternalAbort!);\n if (this.live.get(executionId) === live) this.live.delete(executionId);\n }\n\n private iso(): string { return new Date(this.now()).toISOString(); }\n private leaseUntil(): string { return new Date(this.now() + this.options.leaseMs).toISOString(); }\n}\n","import type { ExecutionTerminal } from \"@titan-design/agent-protocol\";\nimport type { Harness, HarnessRunFailure, HarnessRunResult } from \"./harness-contracts.js\";\nimport type { DurableHarnessSuccess } from \"./durable-types.js\";\n\nexport function terminalFromHarnessResult<T, H extends Harness>(\n result: HarnessRunResult<T, H>,\n): ExecutionTerminal<DurableHarnessSuccess<T, H>> {\n if (result.ok) {\n return {\n outcome: \"succeeded\",\n result: {\n harness: result.harness,\n adapterExecution: result.execution,\n conversation: result.conversation,\n output: result.output,\n usage: result.usage,\n ...(result.transcript ? { transcript: result.transcript } : {}),\n },\n };\n }\n const reason = `${result.failure.kind}: ${result.failure.reason}`;\n if (result.failure.kind === \"aborted\" || result.failure.kind === \"cancelled_unknown\" || result.failure.kind === \"wall_time_exceeded\") {\n return { outcome: \"cancellation_unknown\", reason, evidence: cancellationEvidence(result.failure) };\n }\n // The shared failure contract does not prove the native invocation was absent.\n return { outcome: \"failed\", reason, retryable: false };\n}\n\nfunction cancellationEvidence(failure: HarnessRunFailure): string {\n if (failure.kind === \"wall_time_exceeded\") return \"wall deadline elapsed after durable dispatch without a native terminal acknowledgement\";\n return failure.kind === \"cancelled_unknown\"\n ? \"adapter reported cancellation without a native terminal acknowledgement\"\n : \"adapter was aborted after durable dispatch without a native terminal acknowledgement\";\n}\n","import type { ExecutionLedger } from \"@titan-design/agent-lifecycle\";\nimport type { ExecutionOwnerFence, ExecutionRecord, ExecutionTransition } from \"@titan-design/agent-protocol\";\nimport type { Harness, HarnessRunResult } from \"./harness-contracts.js\";\nimport type { DurableDispatchInput, DurableHarnessSuccess, DurableSettlement } from \"./durable-types.js\";\n\nexport type StoredSuccess<H extends Harness> = DurableHarnessSuccess<unknown, H>;\n\nexport interface LiveExecution<H extends Harness> {\n fence: ExecutionOwnerFence;\n controller: AbortController;\n completion: Promise<DurableSettlement<unknown, H>>;\n timer: ReturnType<typeof globalThis.setInterval>;\n externalSignal?: AbortSignal;\n onExternalAbort?: () => void;\n adapterExecutionId?: string;\n problem?: { kind: \"ownership_lost\" | \"recovery_required\"; evidence: string };\n problemPromise: Promise<NonNullable<LiveExecution<H>[\"problem\"]>>;\n resolveProblem: (problem: NonNullable<LiveExecution<H>[\"problem\"]>) => void;\n}\n\ntype WithoutEnvelope<T> = T extends unknown\n ? Omit<T, \"executionId\" | \"eventId\" | \"expectedRevision\" | \"occurredAt\">\n : never;\n\nexport type TransitionFields<H extends Harness> = WithoutEnvelope<\n Exclude<ExecutionTransition<StoredSuccess<H>>, { kind: \"prepare\" }>\n>;\n\nexport function failureKind(kind: string): \"ownership_lost\" | \"recovery_required\" {\n return kind === \"ownership_lost\" || kind === \"revision_conflict\" ? \"ownership_lost\" : \"recovery_required\";\n}\n\nexport function positive(name: string, value: number): void {\n if (!Number.isFinite(value) || value <= 0) throw new TypeError(`${name} must be a positive finite number`);\n}\n\nexport function nonempty(name: string, value: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) throw new TypeError(`${name} must be a nonempty string`);\n}\n\nexport function recordFence(record: ExecutionRecord<unknown>): ExecutionOwnerFence {\n if (!record.owner) throw new Error(\"execution has no active owner\");\n return { supervisorId: record.owner.supervisorId, generation: record.owner.generation };\n}\n\nexport function ownsLiveFence(record: ExecutionRecord<unknown>, fence: ExecutionOwnerFence, now: number): boolean {\n return record.owner?.supervisorId === fence.supervisorId\n && record.owner.generation === fence.generation\n && Date.parse(record.owner.leaseUntil) > now;\n}\n\nexport function validateDispatchInput<H extends Harness>(\n input: DurableDispatchInput<H, unknown>,\n adapterHarness: H,\n): void {\n nonempty(\"executionId\", input.executionId);\n nonempty(\"requestKey\", input.requestKey);\n if (input.request.harness !== adapterHarness) throw new TypeError(\"request harness does not match adapter\");\n}\n\nexport function startLiveExecution<H extends Harness>(options: {\n fence: ExecutionOwnerFence;\n controller: AbortController;\n externalSignal?: AbortSignal;\n schedule: typeof globalThis.setInterval;\n renewEveryMs: number;\n onRenew: () => void;\n onExternalAbort: () => void;\n}): LiveExecution<H> {\n let resolveProblem!: LiveExecution<H>[\"resolveProblem\"];\n const problemPromise = new Promise<NonNullable<LiveExecution<H>[\"problem\"]>>((resolve) => { resolveProblem = resolve; });\n const timer = options.schedule(options.onRenew, options.renewEveryMs);\n if (typeof timer === \"object\") timer.unref?.();\n const live: LiveExecution<H> = {\n fence: options.fence,\n controller: options.controller,\n completion: Promise.resolve(undefined as never),\n problemPromise,\n resolveProblem,\n timer,\n ...(options.externalSignal ? { externalSignal: options.externalSignal, onExternalAbort: options.onExternalAbort } : {}),\n };\n options.externalSignal?.addEventListener(\"abort\", options.onExternalAbort, { once: true });\n return live;\n}\n\nexport async function raceLiveResult<T, H extends Harness>(\n result: Promise<HarnessRunResult<T, H>>,\n live: LiveExecution<H>,\n): Promise<{ kind: \"result\"; result: HarnessRunResult<T, H> } | { kind: \"problem\"; problem: NonNullable<LiveExecution<H>[\"problem\"]> }> {\n return Promise.race([\n result.then((value) => ({ kind: \"result\" as const, result: value })),\n live.problemPromise.then((problem) => ({ kind: \"problem\" as const, problem })),\n ]);\n}\n\nexport function readLedgerRecord<H extends Harness>(\n ledger: Pick<ExecutionLedger<StoredSuccess<H>>, \"get\">,\n executionId: string,\n): { ok: true; record: ExecutionRecord<StoredSuccess<H>> | undefined } | { ok: false; evidence: string } {\n try { return { ok: true, record: ledger.get(executionId) }; }\n catch (error) { return { ok: false, evidence: `execution ledger read failed: ${message(error)}` }; }\n}\n\nexport function message(error: unknown): string { return error instanceof Error ? error.message : String(error); }\n","import type { ExecutionLedger } from \"@titan-design/agent-lifecycle\";\nimport { isTerminalExecutionPhase, type ExecutionOwnerFence, type ExecutionTerminal } from \"@titan-design/agent-protocol\";\nimport {\n message,\n ownsLiveFence,\n readLedgerRecord,\n recordFence,\n type LiveExecution,\n type StoredSuccess,\n type TransitionFields,\n} from \"./durable-dispatcher-support.js\";\nimport type { DurableHarnessRecord, DurableReconcileOutcome, DurableSettlement } from \"./durable-types.js\";\nimport type { Harness } from \"./harness-contracts.js\";\n\ntype ApplyFields<H extends Harness> = (\n record: DurableHarnessRecord<H>,\n fields: TransitionFields<H>,\n) => ReturnType<ExecutionLedger<StoredSuccess<H>>[\"apply\"]>;\n\nexport function reconcileLive<H extends Harness>(\n ledger: ExecutionLedger<StoredSuccess<H>>,\n executionId: string,\n live: LiveExecution<H>,\n now: number,\n fail: (evidence: string) => void,\n): DurableReconcileOutcome<H> {\n const read = readLedgerRecord(ledger, executionId);\n const evidence = !read.ok\n ? `live ownership could not be verified: ${read.evidence}`\n : !read.record || !ownsLiveFence(read.record, live.fence, now)\n ? \"live execution no longer has its captured owner lease\"\n : undefined;\n if (evidence) {\n fail(evidence);\n return { kind: \"ownership_lost\", evidence };\n }\n return { kind: \"running\", running: { runnerRef: executionId, completion: live.completion }, evidence: \"same dispatcher owns the completion handle\" };\n}\n\nexport function claimForRecovery<H extends Harness>(\n record: DurableHarnessRecord<H>,\n options: { now: number; supervisorId: string; leaseUntil: string },\n apply: ApplyFields<H>,\n): { ok: true; record: DurableHarnessRecord<H> } | { ok: false; evidence: string } {\n if (record.owner && Date.parse(record.owner.leaseUntil) > options.now) return { ok: false, evidence: \"another live owner lease fences recovery\" };\n try {\n const result = apply(record, {\n kind: \"claim_owner\",\n owner: { supervisorId: options.supervisorId, generation: record.ownerGeneration + 1, leaseUntil: options.leaseUntil },\n });\n return result.ok ? { ok: true, record: result.record } : { ok: false, evidence: result.reason };\n } catch (error) {\n return { ok: false, evidence: `ownership claim failed: ${message(error)}` };\n }\n}\n\nexport function closePrepared<H extends Harness>(\n record: DurableHarnessRecord<H>,\n apply: ApplyFields<H>,\n): DurableReconcileOutcome<H> {\n const terminal: ExecutionTerminal<StoredSuccess<H>> = {\n outcome: \"failed\",\n reason: \"durable preparation exists but dispatch never began\",\n retryable: true,\n };\n try {\n const result = apply(record, { kind: \"finish\", fence: recordFence(record), terminal });\n return result.ok\n ? { kind: \"terminal\", terminal, evidence: \"prepared phase proves begin_dispatch was never committed\" }\n : { kind: \"ownership_lost\", evidence: result.reason };\n } catch (error) {\n return { kind: \"ownership_lost\", evidence: `prepared execution could not be closed: ${message(error)}` };\n }\n}\n\nexport function requireRecovery<H extends Harness>(\n record: DurableHarnessRecord<H> | undefined,\n fence: ExecutionOwnerFence,\n evidence: string,\n apply: ApplyFields<H>,\n): DurableSettlement<unknown, H> {\n if (!record) return { kind: \"ownership_lost\", evidence: \"execution record is unavailable\" };\n if (!record.owner || record.owner.supervisorId !== fence.supervisorId || record.owner.generation !== fence.generation) {\n return { kind: \"ownership_lost\", record, evidence: \"execution ownership changed before recovery evidence could be stored\" };\n }\n if (record.phase === \"recovery_required\") return { kind: \"recovery_required\", record, evidence };\n if (isTerminalExecutionPhase(record.phase)) return { kind: \"terminal\", record, terminal: record.terminal! };\n try {\n const result = apply(record, { kind: \"require_recovery\", fence, evidence });\n return result.ok ? { kind: \"recovery_required\", record: result.record, evidence } : { kind: \"ownership_lost\", record, evidence: result.reason };\n } catch (error) {\n return { kind: \"ownership_lost\", record, evidence: `recovery evidence was not durable: ${message(error)}` };\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { query, type Query, type SDKMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { ConversationIdentity, ExecutionIdentity } from \"@titan-design/agent-protocol\";\nimport { EXECUTION_CAPABILITIES, type ClaudeCodeRunRequest, type HarnessAdapter, type HarnessCapabilityDescriptor, type HarnessRunFailure, type HarnessRunProgress, type HarnessRunResult } from \"./harness-contracts.js\";\nimport { preflightHarnessRun } from \"./preflight.js\";\nimport { runAgent, type AgentRunDeps } from \"./run.js\";\nimport { claudeFailure, claudeUsage } from \"./claude-code-result.js\";\n\nexport interface ClaudeCodeAdapterOptions {\n maxTurns: number;\n maxBudgetUsd: number;\n inactivityTimeoutMs?: number;\n deps?: AgentRunDeps;\n}\n\n/** Existing Claude query circuit breakers remain mandatory; their native units stay explicit. */\nexport function createClaudeCodeAdapter(options: ClaudeCodeAdapterOptions): HarnessAdapter<\"claude-code\"> {\n for (const field of [\"maxTurns\", \"maxBudgetUsd\", \"inactivityTimeoutMs\"] as const) {\n const value = options[field];\n if (value === undefined && field === \"inactivityTimeoutMs\") continue;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) throw new TypeError(`${field} must be positive and finite`);\n }\n const descriptor = claudeCodeCapabilities();\n return {\n descriptor,\n async run<T>(request: ClaudeCodeRunRequest<T>): Promise<HarnessRunResult<T, \"claude-code\">> {\n const failure = preflightHarnessRun(request, descriptor);\n if (failure) return { ok: false, harness: \"claude-code\", failure, usage: [] };\n if (request.wallTimeMs > 2_147_483_647) return { ok: false, harness: \"claude-code\", failure: { kind: \"invalid_request\", reason: \"wallTimeMs exceeds the local timer range\" }, usage: [] };\n return new ClaudeInvocation(request, options).run();\n },\n };\n}\n\nexport function claudeCodeCapabilities(): HarnessCapabilityDescriptor<\"claude-code\"> {\n const capabilities = Object.fromEntries(EXECUTION_CAPABILITIES.map(capability => [capability, {\n status: \"unsupported\", reason: \"not exposed by this bounded Claude SDK adapter\",\n }])) as HarnessCapabilityDescriptor<\"claude-code\">[\"capabilities\"];\n for (const capability of [\"fresh_run\", \"resume\", \"structured_output\", \"external_cancellation\", \"token_reporting\"] as const) {\n capabilities[capability] = { status: \"supported\", evidence: \"bounded wrapper around the existing runAgent SDK query\" };\n }\n return {\n harness: \"claude-code\", adapter: { name: \"claude-sdk-bounded\", version: \"1\" }, capabilities,\n limits: [{ unit: \"milliseconds\", scope: \"execution\", enforcement: \"hard\", assessment: {\n status: \"supported\", evidence: \"local deadline aborts and closes the owned query; native cancellation remains unconfirmed\",\n } }],\n };\n}\n\ntype ProgressBody<T> = T extends unknown ? Omit<T, \"harness\" | \"atMs\"> : never;\n\nclass ClaudeInvocation<T> {\n private readonly controller = new AbortController();\n private readonly execution: ExecutionIdentity;\n private conversation?: ConversationIdentity;\n private stream?: Query;\n private active = true;\n private timer?: ReturnType<typeof setTimeout>;\n private stop!: (failure: HarnessRunFailure) => void;\n private readonly onAbort = () => this.stop({ kind: \"aborted\", reason: String(this.request.signal?.reason ?? \"caller aborted\") });\n\n constructor(private readonly request: ClaudeCodeRunRequest<T>, private readonly options: ClaudeCodeAdapterOptions) {\n this.conversation = request.target.kind === \"resume\" ? request.target.conversation : undefined;\n this.execution = { executionId: randomUUID(), ...(this.conversation ? { conversation: this.conversation } : {}) };\n }\n\n async run(): Promise<HarnessRunResult<T, \"claude-code\">> {\n try {\n const stopped = new Promise<HarnessRunResult<T, \"claude-code\">>(resolve => {\n this.stop = failure => {\n if (!this.active) return;\n this.active = false;\n this.controller.abort(new Error(failure.reason));\n this.close();\n resolve(this.failed(failure));\n };\n });\n this.timer = setTimeout(() => this.stop({ kind: \"wall_time_exceeded\", reason: \"Claude query exceeded local wall deadline\", wallTimeMs: this.request.wallTimeMs }), this.request.wallTimeMs);\n this.timer.unref?.();\n this.request.signal?.addEventListener(\"abort\", this.onAbort, { once: true });\n if (this.request.signal?.aborted) this.onAbort();\n this.emit({ kind: \"execution_started\", execution: this.execution });\n if (!this.active) return await stopped;\n const result = await Promise.race([this.invoke(), stopped]);\n this.active = false;\n this.emit({ kind: \"execution_finished\", executionId: this.execution.executionId,\n outcome: result.ok ? \"succeeded\" : result.failure.kind === \"aborted\" || result.failure.kind === \"wall_time_exceeded\" || result.failure.kind === \"cancelled_unknown\" ? \"cancelled\" : \"failed\" });\n return result;\n } catch (error) {\n this.controller.abort(error);\n return this.failed({ kind: \"runtime_error\", reason: error instanceof Error ? error.message : String(error) });\n } finally {\n this.active = false;\n if (this.timer) clearTimeout(this.timer);\n this.request.signal?.removeEventListener(\"abort\", this.onAbort);\n this.close();\n }\n }\n\n private async invoke(): Promise<HarnessRunResult<T, \"claude-code\">> {\n const result = await runAgent<T>({\n ...this.request.native, prompt: this.request.prompt, cwd: this.request.cwd,\n maxTurns: this.options.maxTurns, maxBudgetUsd: this.options.maxBudgetUsd,\n inactivityTimeoutMs: this.options.inactivityTimeoutMs, signal: this.controller.signal,\n resumeSessionId: this.request.target.kind === \"resume\" ? this.request.target.conversation.nativeId : undefined,\n onMessage: message => this.observe(message),\n }, { ...this.options.deps, query: args => {\n this.stream = (this.options.deps?.query ?? query)(args);\n return this.stream;\n } });\n if (!this.active) return this.failed({ kind: \"cancelled_unknown\", reason: \"query completed after local supervision ended\" });\n if (result.sessionId) this.identify(result.sessionId);\n const usage = claudeUsage(result.usage, this.execution.executionId);\n if (!result.ok) return { ...this.failed(claudeFailure(result.failure)), usage };\n if (!this.conversation) return this.failed({ kind: \"runtime_error\", reason: \"Claude query returned no conversation identity\" });\n return {\n ok: true, harness: \"claude-code\", execution: { ...this.execution, conversation: this.conversation }, conversation: this.conversation,\n output: this.request.native?.outputSchema ? { kind: \"structured\", value: result.output } : { kind: \"text\", text: String(result.output) }, usage,\n };\n }\n\n private observe(message: SDKMessage): void {\n if (!this.active) return;\n if (\"session_id\" in message && typeof message.session_id === \"string\") this.identify(message.session_id);\n if (message.type === \"assistant\") {\n for (const block of message.message.content) {\n if (block.type === \"text\") this.emit({ kind: \"assistant_output\", executionId: this.execution.executionId, text: block.text });\n }\n }\n }\n\n private identify(nativeId: string): void {\n if (this.conversation) {\n if (this.conversation.nativeId !== nativeId) throw new Error(\"Claude query changed conversation identity\");\n return;\n }\n this.conversation = { harness: \"claude-code\", namespace: this.request.target.kind === \"fresh\" ? this.request.target.namespace : this.request.target.conversation.namespace, nativeId };\n this.emit({ kind: \"conversation_identified\", executionId: this.execution.executionId, conversation: this.conversation });\n }\n\n private failed(failure: HarnessRunFailure): HarnessRunResult<T, \"claude-code\"> {\n return { ok: false, harness: \"claude-code\", execution: this.execution,\n ...(this.conversation ? { conversation: this.conversation } : {}), failure, usage: [] };\n }\n\n private emit(progress: ProgressBody<HarnessRunProgress>): void {\n this.request.onProgress?.({ ...progress, harness: \"claude-code\", atMs: (this.options.deps?.now ?? Date.now)() } as HarnessRunProgress);\n }\n\n private close(): void {\n try { this.stream?.close(); } catch { /* A failed close does not prove native cancellation. */ }\n }\n}\n","import type { UsageMeasurement } from \"@titan-design/agent-protocol\";\nimport type { HarnessRunFailure } from \"./harness-contracts.js\";\nimport type { AgentFailure, AgentUsage } from \"./types.js\";\n\nexport function claudeFailure(failure: AgentFailure): HarnessRunFailure {\n const reason = failure.reason;\n switch (failure.kind) {\n case \"rate_limited\": return { kind: \"rate_limited\", reason, retryAtMs: failure.retryAt?.getTime() };\n case \"budget_exceeded\": return { kind: \"limit_exceeded\", reason, unit: \"usd\" };\n case \"max_turns\": return { kind: \"runtime_error\", reason: `native maxTurns reached: ${reason}` };\n case \"schema_invalid\": return { kind: \"output_invalid\", reason };\n case \"inactivity_timeout\": return { kind: \"cancelled_unknown\", reason };\n case \"refusal\": return { kind: \"output_invalid\", reason: `native refusal: ${reason}` };\n case \"auth_misconfigured\": return { kind: \"auth_misconfigured\", reason };\n case \"aborted\": return { kind: \"aborted\", reason };\n case \"runtime_error\": return { kind: \"runtime_error\", reason };\n }\n}\n\nexport function claudeUsage(usage: AgentUsage | undefined, executionId: string): UsageMeasurement[] {\n if (!usage) return [];\n const models = Object.entries(usage.modelUsage);\n type Counts = AgentUsage[\"modelUsage\"][string];\n const sum = (field: keyof Counts): number | null => {\n const values = models.map(([, model]) => model[field]);\n if (values.length === 0) return null;\n let total = 0;\n for (const value of values) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return null;\n total += value;\n }\n return total;\n };\n const uncached = sum(\"inputTokens\");\n const cachedInput = sum(\"cacheReadInputTokens\");\n const cacheWriteInput = sum(\"cacheCreationInputTokens\");\n const input = uncached === null || cachedInput === null || cacheWriteInput === null\n ? null : uncached + cachedInput + cacheWriteInput;\n // A snapshot identity denotes the entire query; per-model snapshots would replace each other.\n return [{\n kind: \"snapshot\", scope: \"turn\", scopeId: executionId, epoch: executionId, sequence: 0,\n model: models.length === 1 ? models[0]![0] : null, source: \"claude-sdk:query-result\",\n tokens: { input, output: sum(\"outputTokens\"), cachedInput, cacheWriteInput, reasoningOutput: null, total: null },\n cost: { usd: usage.totalCostUsd, kind: \"estimate\" },\n }];\n}\n"],"mappings":"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","names":["toJSONSchema","message","spawn","join","join","spawn","message","toJSONSchema","invalid","messageOf","messageOf","record","exitFailure","invalid","messageOf","abortFailure","timeoutFailure","randomUUID","isTerminalExecutionPhase","nonempty","record","record","nonempty","randomUUID","record","isTerminalExecutionPhase","randomUUID","query","randomUUID","message","query"]}