negotium 0.3.13 → 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.
Files changed (39) hide show
  1. package/README.md +2 -6
  2. package/dist/agent-helpers.js +328 -185
  3. package/dist/agent-helpers.js.map +9 -8
  4. package/dist/{chunk-0ynjwr50.js → chunk-zq2tcq4k.js} +12 -29
  5. package/dist/{chunk-0ynjwr50.js.map → chunk-zq2tcq4k.js.map} +4 -4
  6. package/dist/hosted-agent.js +207 -64
  7. package/dist/hosted-agent.js.map +8 -7
  8. package/dist/main.js +753 -886
  9. package/dist/main.js.map +13 -13
  10. package/dist/mcp-factories.js +300 -468
  11. package/dist/mcp-factories.js.map +9 -10
  12. package/dist/registry.js +3 -3
  13. package/dist/registry.js.map +2 -2
  14. package/dist/rollout.js +1 -1
  15. package/dist/runtime/src/agents/codex-provider.ts +33 -8
  16. package/dist/runtime/src/agents/codex-vault-hook-bridge.ts +192 -0
  17. package/dist/runtime/src/agents/codex-vault-hook.mjs +48 -0
  18. package/dist/runtime/src/agents/execution-host.ts +1 -14
  19. package/dist/runtime/src/agents/public-helpers.ts +0 -9
  20. package/dist/runtime/src/agents/vault-tool-policy.ts +9 -51
  21. package/dist/runtime/src/mcp/factories/index.ts +1 -8
  22. package/dist/runtime/src/mcp/factories/vault.ts +6 -104
  23. package/dist/runtime/src/mcp/vault-server.ts +4 -20
  24. package/dist/runtime/src/prompts/sessions/_shared-tools.md +1 -1
  25. package/dist/runtime/src/version.ts +1 -1
  26. package/dist/types/packages/core/src/agents/codex-vault-hook-bridge.d.ts +27 -0
  27. package/dist/types/packages/core/src/agents/execution-host.d.ts +0 -2
  28. package/dist/types/packages/core/src/agents/public-helpers.d.ts +0 -1
  29. package/dist/types/packages/core/src/agents/vault-tool-policy.d.ts +1 -14
  30. package/dist/types/packages/core/src/mcp/factories/index.d.ts +1 -3
  31. package/dist/types/packages/core/src/mcp/factories/vault.d.ts +4 -13
  32. package/dist/types/packages/core/src/version.d.ts +1 -1
  33. package/package.json +1 -1
  34. package/dist/runtime/src/mcp/factories/vault-host.ts +0 -8
  35. package/dist/runtime/src/mcp/vault-http.ts +0 -235
  36. package/dist/runtime/src/mcp/vault-run.ts +0 -154
  37. package/dist/types/packages/core/src/mcp/factories/vault-host.d.ts +0 -7
  38. package/dist/types/packages/core/src/mcp/vault-http.d.ts +0 -23
  39. package/dist/types/packages/core/src/mcp/vault-run.d.ts +0 -19
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../packages/core/src/agents/claude-provider.ts", "../../../packages/core/src/agents/rollout/shared.ts", "../../../packages/core/src/platform/config.ts", "../../../packages/core/src/platform/config-helpers.ts", "../../../packages/core/src/platform/logger.ts", "../../../packages/core/src/types.ts", "../../../packages/core/src/platform/jsonl.ts", "../../../packages/core/src/platform/file-utils.ts", "../../../packages/core/src/agents/claude-registry.ts", "../../../packages/core/src/agents/deep-map.ts", "../../../packages/core/src/agents/execution-host.ts", "../../../packages/core/src/security/sensitive-path.ts", "../../../packages/core/src/agents/vault-tool-policy.ts", "../../../packages/core/src/mcp/runtime-spec.ts", "../../../packages/core/src/mcp/session-comm/bridge-ipc-config.ts", "../../../packages/core/src/platform/background-bash/manager.ts", "../../../packages/core/src/platform/delay.ts", "../../../packages/core/src/platform/background-bash/context.ts", "../../../packages/core/src/platform/mcp-catalog-policy.ts", "../../../packages/core/src/platform/playwright/capability.ts", "../../../packages/core/src/platform/mcp-config.ts", "../../../packages/core/src/storage/vault.ts", "../../../packages/core/src/storage/sqlite.ts", "../../../packages/core/src/storage/storage-host.ts", "../../../packages/core/src/storage/vault-crypto-core.ts", "../../../packages/core/src/storage/vault-crypto.ts", "../../../packages/core/src/media/file-events.ts", "../../../packages/core/src/platform/error.ts", "../../../packages/core/src/runtime/context-warning.ts", "../../../packages/core/src/agents/codex-provider.ts", "../../../packages/core/src/agents/codex-native-multi-agent.ts", "../../../packages/core/src/version.ts", "../../../packages/core/src/agents/codex-tree-kill.ts", "../../../packages/core/src/agents/codex-tree-manager.ts", "../../../packages/core/src/agents/rollout/codex.ts", "../../../packages/core/src/agents/tool-format.ts", "../../../packages/core/src/platform/maestro-bootstrap-env.ts", "../../../packages/core/src/agents/maestro-provider.ts", "../../../packages/core/src/agents/claude-runtime-inspection.ts", "../../../packages/core/src/agents/hosted-agent.ts"],
3
+ "sources": ["../../../packages/core/src/agents/claude-provider.ts", "../../../packages/core/src/agents/rollout/shared.ts", "../../../packages/core/src/platform/config.ts", "../../../packages/core/src/platform/config-helpers.ts", "../../../packages/core/src/platform/logger.ts", "../../../packages/core/src/types.ts", "../../../packages/core/src/platform/jsonl.ts", "../../../packages/core/src/platform/file-utils.ts", "../../../packages/core/src/agents/claude-registry.ts", "../../../packages/core/src/agents/deep-map.ts", "../../../packages/core/src/agents/execution-host.ts", "../../../packages/core/src/security/sensitive-path.ts", "../../../packages/core/src/agents/vault-tool-policy.ts", "../../../packages/core/src/mcp/runtime-spec.ts", "../../../packages/core/src/mcp/session-comm/bridge-ipc-config.ts", "../../../packages/core/src/platform/background-bash/manager.ts", "../../../packages/core/src/platform/delay.ts", "../../../packages/core/src/platform/background-bash/context.ts", "../../../packages/core/src/platform/mcp-catalog-policy.ts", "../../../packages/core/src/platform/playwright/capability.ts", "../../../packages/core/src/platform/mcp-config.ts", "../../../packages/core/src/storage/vault.ts", "../../../packages/core/src/storage/sqlite.ts", "../../../packages/core/src/storage/storage-host.ts", "../../../packages/core/src/storage/vault-crypto-core.ts", "../../../packages/core/src/storage/vault-crypto.ts", "../../../packages/core/src/media/file-events.ts", "../../../packages/core/src/platform/error.ts", "../../../packages/core/src/runtime/context-warning.ts", "../../../packages/core/src/agents/codex-provider.ts", "../../../packages/core/src/agents/codex-native-multi-agent.ts", "../../../packages/core/src/version.ts", "../../../packages/core/src/agents/codex-tree-kill.ts", "../../../packages/core/src/agents/codex-tree-manager.ts", "../../../packages/core/src/agents/codex-vault-hook-bridge.ts", "../../../packages/core/src/agents/rollout/codex.ts", "../../../packages/core/src/agents/tool-format.ts", "../../../packages/core/src/platform/maestro-bootstrap-env.ts", "../../../packages/core/src/agents/maestro-provider.ts", "../../../packages/core/src/agents/claude-runtime-inspection.ts", "../../../packages/core/src/agents/hosted-agent.ts"],
4
4
  "sourcesContent": [
5
5
  "import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type {\n HookInput,\n Options,\n PostToolUseHookInput,\n PreToolUseHookInput,\n SDKAssistantMessage,\n SDKPartialAssistantMessage,\n SDKResultMessage,\n SDKSystemMessage,\n SDKToolProgressMessage,\n SDKToolUseSummaryMessage,\n SDKUserMessage,\n SDKUserMessageReplay,\n} from \"@anthropic-ai/claude-agent-sdk\";\nimport { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport type {\n ContentBlockParam,\n ImageBlockParam,\n} from \"@anthropic-ai/sdk/resources/messages/messages.mjs\";\nimport { claudeRegistry } from \"#agents/claude-registry\";\nimport { deepMapStrings } from \"#agents/deep-map\";\nimport {\n hostedClaudeCodeExecutablePath,\n hostedMcpServers,\n redactHostedSecrets,\n referencesHostedSecretStorage,\n substituteHostedSecrets,\n} from \"#agents/execution-host\";\nimport { shouldSubstituteVaultToolInput } from \"#agents/vault-tool-policy\";\nimport { extractFileEvents } from \"#media/file-events\";\nimport { errMsg } from \"#platform/error\";\nimport { logger } from \"#platform/logger\";\nimport { claudeRequestContextTokens } from \"#runtime/context-warning\";\nimport type { AgentInputAttachment, AgentQueryOptions, EffortLevel, UnifiedEvent } from \"#types\";\n\nconst CLAUDE_DEFAULT_DISALLOWED_TOOLS = [\n \"AskUserQuestion\",\n \"Workflow\",\n \"TodoWrite\",\n \"TaskCreate\",\n \"TaskUpdate\",\n \"TaskList\",\n \"TaskGet\",\n // Native scheduling/cron tools duplicate Negotium's own runtime MCP surface\n // (`mcp__runtime__schedule_self`, the `cron-manager` server) and bypass its\n // persistence/host wiring if used directly.\n \"ScheduleWakeup\",\n \"CronCreate\",\n \"CronList\",\n \"CronDelete\",\n] as const;\n\nconst CLAUDE_NATIVE_AGENT_TOOLS = [\"Task\", \"Agent\", \"TaskOutput\", \"TaskStop\"] as const;\n\nexport function claudeBuiltInTools(\n opts: Pick<AgentQueryOptions, \"toolPolicy\">,\n): string[] | undefined {\n return opts.toolPolicy ? [] : undefined;\n}\n\nexport function substituteClaudeToolInput(\n userId: string,\n toolName: string,\n input: unknown,\n): unknown {\n if (!shouldSubstituteVaultToolInput(toolName)) return input;\n return deepMapStrings(input, (value) => substituteHostedSecrets(userId, value));\n}\n\nexport function buildClaudeDisallowedTools(\n extra: readonly string[] | undefined = undefined,\n): string[] {\n return [\n ...new Set([\n ...CLAUDE_DEFAULT_DISALLOWED_TOOLS,\n ...CLAUDE_NATIVE_AGENT_TOOLS,\n ...(extra ?? []),\n ]),\n ];\n}\n\n/**\n * Narrow our shared `EffortLevel` to the subset claude-agent-sdk accepts.\n * Claude SDK rejects \"minimal\" (codex-only); we drop it silently rather than\n * coercing, matching our policy for unrecognized model strings.\n */\ntype ClaudeEffort = Exclude<EffortLevel, \"minimal\">;\nfunction toClaudeEffort(e: EffortLevel | undefined): ClaudeEffort | undefined {\n if (!e || !claudeRegistry.validateEffort(e)) return undefined;\n return e as ClaudeEffort;\n}\n\ntype ClaudeImageMimeType = \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n\nconst CLAUDE_IMAGE_MAX_BYTES = 10 * 1024 * 1024;\nconst CLAUDE_IMAGE_MIME_TYPES = new Set<string>([\n \"image/jpeg\",\n \"image/png\",\n \"image/gif\",\n \"image/webp\",\n]);\n\nfunction isClaudeImageAttachment(\n attachment: AgentInputAttachment,\n): attachment is AgentInputAttachment & { mimeType: ClaudeImageMimeType } {\n return attachment.type === \"image\" && CLAUDE_IMAGE_MIME_TYPES.has(attachment.mimeType);\n}\n\nasync function* singleUserMessage(message: SDKUserMessage): AsyncGenerator<SDKUserMessage> {\n yield message;\n}\n\nfunction buildClaudePrompt(opts: AgentQueryOptions): string | AsyncIterable<SDKUserMessage> {\n const attachments = opts.attachments ?? [];\n if (attachments.length === 0) return opts.prompt;\n\n const imageBlocks: ImageBlockParam[] = [];\n for (const attachment of attachments) {\n if (!isClaudeImageAttachment(attachment)) continue;\n if (attachment.sizeBytes > CLAUDE_IMAGE_MAX_BYTES) {\n logger.info(\n {\n path: attachment.path,\n mimeType: attachment.mimeType,\n sizeBytes: attachment.sizeBytes,\n maxBytes: CLAUDE_IMAGE_MAX_BYTES,\n },\n \"claudeProvider: skipping oversized image attachment content block\",\n );\n continue;\n }\n\n try {\n imageBlocks.push({\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: attachment.mimeType,\n data: readFileSync(attachment.path).toString(\"base64\"),\n },\n });\n } catch (err) {\n logger.warn(\n {\n path: attachment.path,\n mimeType: attachment.mimeType,\n err,\n },\n \"claudeProvider: failed to read image attachment for content block\",\n );\n }\n }\n\n if (imageBlocks.length === 0) return opts.prompt;\n\n const content: ContentBlockParam[] = [{ type: \"text\", text: opts.prompt }, ...imageBlocks];\n return singleUserMessage({\n type: \"user\",\n message: {\n role: \"user\",\n content,\n },\n parent_tool_use_id: null,\n });\n}\n\n// --- Stream event sub-types (from @anthropic-ai/sdk, not directly importable) ---\ninterface ContentBlockDelta {\n type: \"content_block_delta\";\n delta: { type: string; partial_json?: string; text?: string };\n}\ntype StreamEvent = ContentBlockDelta | { type: string };\n\n// --- Assistant message content block types (from BetaMessage.content) ---\ninterface TextBlock {\n type: \"text\";\n text: string;\n}\ninterface ToolUseBlock {\n type: \"tool_use\";\n id: string;\n name: string;\n input: Record<string, unknown>;\n}\ninterface ToolResultBlock {\n type: \"tool_result\";\n tool_use_id: string;\n content: string | unknown;\n is_error?: boolean;\n}\ntype ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | { type: string };\n\n// --- Process tree kill on abort ---\n//\n// The Claude Agent SDK spawns a `claude` CLI subprocess, which in turn spawns\n// MCP servers (playwright-mcp, background workers, …) which themselves spawn\n// browsers / interpreters. The SDK's default abort path only signals the\n// direct child, leaving grandchildren orphaned — over time they accumulate as\n// zombies, holding ports (Playwright DevTools 9222) and leaking memory\n// (Chrome ~hundreds of MB per orphan). Single-user Mac deployments notice\n// this within a day of repeated /abort.\n//\n// We override `spawnClaudeCodeProcess` to:\n// 1. spawn with `detached: true` → child becomes the leader of a new\n// process group with the same pgid as its pid;\n// 2. on abort, send the signal to `-pid` (the whole group) instead of the\n// single pid, so all transitive descendants receive it;\n// 3. escalate to SIGKILL after a 2.5s grace if SIGTERM didn't take.\n\ntype SpawnClaudeCodeProcess = NonNullable<Options[\"spawnClaudeCodeProcess\"]>;\ntype SpawnClaudeCodeOptions = Parameters<SpawnClaudeCodeProcess>[0];\ntype SpawnClaudeCodeResult = ReturnType<SpawnClaudeCodeProcess>;\n\nconst CLAUDE_ABORT_SIGKILL_DELAY_MS = 2500;\n\nfunction signalProcessTree(pid: number, signal: NodeJS.Signals): boolean {\n // Negative pid = \"signal every process in this process group\". Falls back\n // to single-pid signaling if the group call fails (e.g. on platforms where\n // `detached` didn't materialize a new group).\n try {\n process.kill(-pid, signal);\n return true;\n } catch (groupErr) {\n try {\n process.kill(pid, signal);\n return true;\n } catch (pidErr) {\n logger.debug({ groupErr, pidErr, pid, signal }, \"Failed to signal Claude process tree\");\n return false;\n }\n }\n}\n\nexport function spawnClaudeCodeProcessWithTreeKill(\n options: SpawnClaudeCodeOptions,\n): SpawnClaudeCodeResult {\n const child = spawn(options.command, options.args, {\n cwd: options.cwd,\n detached: true,\n env: options.env as NodeJS.ProcessEnv,\n stdio: [\"pipe\", \"pipe\", \"inherit\"],\n });\n if (!child.stdin || !child.stdout) {\n child.kill(\"SIGKILL\");\n throw new Error(\"Failed to spawn Claude Code process with piped stdin/stdout\");\n }\n\n let exited = false;\n let killTimer: NodeJS.Timeout | undefined;\n const clearKillTimer = () => {\n if (killTimer) clearTimeout(killTimer);\n killTimer = undefined;\n };\n\n const kill = (signal: NodeJS.Signals): boolean => {\n if (!child.pid) return child.kill(signal);\n const ok = signalProcessTree(child.pid, signal);\n if (signal !== \"SIGKILL\") {\n // Soft signal: schedule a SIGKILL fallback so a stuck process tree\n // can't survive abort indefinitely.\n clearKillTimer();\n killTimer = setTimeout(() => {\n if (!exited && child.pid) {\n logger.warn({ pid: child.pid }, \"Claude process tree still alive after SIGTERM; SIGKILL\");\n signalProcessTree(child.pid, \"SIGKILL\");\n }\n }, CLAUDE_ABORT_SIGKILL_DELAY_MS);\n killTimer.unref?.();\n }\n return ok;\n };\n\n const onAbort = () => {\n logger.warn({ pid: child.pid, command: options.command }, \"Aborting Claude Code process tree\");\n kill(\"SIGTERM\");\n };\n\n if (options.signal.aborted) onAbort();\n else options.signal.addEventListener(\"abort\", onAbort, { once: true });\n\n child.once(\"exit\", (code, signal) => {\n exited = true;\n clearKillTimer();\n options.signal.removeEventListener(\"abort\", onAbort);\n logger.debug({ pid: child.pid, code, signal }, \"Claude Code process exited\");\n });\n\n // Consume the child's 'error' event. Without a listener, a spawn-level error\n // propagates into the SDK's readline-over-stdout teardown and crashes the\n // whole process with \"this.input.pause is not a function\" (node:readline\n // close→pause on a stream that never initialized). Handling it here keeps the\n // failure local and surfaces a clean diagnostic.\n child.once(\"error\", (err) => {\n exited = true;\n clearKillTimer();\n options.signal.removeEventListener(\"abort\", onAbort);\n logger.error(\n {\n pid: child.pid,\n command: options.command,\n err: err instanceof Error ? err.message : String(err),\n },\n \"Claude Code process error event\",\n );\n });\n\n return {\n stdin: child.stdin,\n stdout: child.stdout,\n get killed() {\n return child.killed || exited;\n },\n get exitCode() {\n return child.exitCode;\n },\n kill,\n on(event, listener) {\n child.on(event, listener);\n },\n once(event, listener) {\n child.once(event, listener);\n },\n off(event, listener) {\n child.off(event, listener);\n },\n };\n}\n\n/**\n * Recognize the multiple shapes Node + WHATWG fetch use when a request is\n * cancelled via `AbortController`. Mirrors `isAbortError` in maestro/provider\n * — both files keep their own copy so neither has to import the other (the\n * agent providers are deliberately siblings, no shared error helpers).\n */\nfunction isAbortError(err: unknown): boolean {\n if (!err || typeof err !== \"object\") return false;\n const e = err as { name?: unknown; code?: unknown };\n if (e.name === \"AbortError\") return true;\n if (e.code === 20 || e.code === \"ABORT_ERR\") return true;\n return false;\n}\n\n/**\n * Core Claude provider.\n * Wraps the @anthropic-ai/claude-agent-sdk into a UnifiedEvent stream so any\n * caller can consume it identically to other providers such as codexProvider.\n * The dispatch entry point is `runAgent` in agents/index.ts.\n *\n * Failure handling: any throw escaping the SDK iteration (missing Claude CLI\n * binary, OAuth not configured, transient network) is caught and yielded as\n * a `{type:\"error\"}` UnifiedEvent so the dispatcher never sees a synthetic\n * crash and event-processor's `error` case classifies it with the right\n * provider name. Matches the graceful pattern maestroProvider already uses.\n * Abort signals are swallowed silently (the user moved on) so they don't\n * surface as ghost error messages.\n */\nexport async function* claudeProvider(opts: AgentQueryOptions): AsyncGenerator<UnifiedEvent> {\n const claudeExecutable = hostedClaudeCodeExecutablePath();\n // The default host returns undefined so the Agent SDK selects its bundled,\n // version-matched Claude Code binary. If a host explicitly overrides the\n // executable, validate it up front and return an actionable error instead\n // of letting process spawn fail mid-stream with an opaque ENOENT.\n if (claudeExecutable && !existsSync(claudeExecutable)) {\n yield {\n type: \"error\",\n content: `Claude CLI not found at ${claudeExecutable}. Install Claude Code or configure the executable path.`,\n };\n return;\n }\n\n const cleanEnv = { ...process.env };\n delete cleanEnv.NEGOTIUM_PEER_SESSION_BRIDGE_URL;\n delete cleanEnv.NEGOTIUM_PEER_SESSION_BRIDGE_TOKEN;\n delete cleanEnv.CLAUDECODE;\n cleanEnv.CLAUDE_CODE_STREAM_CLOSE_TIMEOUT ??= \"300000\";\n // Workflow is a feature flag, not a disallowedTools-addressable tool name.\n // The env var is the version-robust kill switch (works on any CLI the SDK\n // spawns); the `settings` flag layer below covers it a second time.\n cleanEnv.CLAUDE_CODE_DISABLE_WORKFLOWS = \"1\";\n\n const queryOptions: Options = {\n ...(claudeExecutable ? { pathToClaudeCodeExecutable: claudeExecutable } : {}),\n spawnClaudeCodeProcess: spawnClaudeCodeProcessWithTreeKill,\n cwd: opts.cwd,\n permissionMode: \"bypassPermissions\",\n allowDangerouslySkipPermissions: true,\n includePartialMessages: true,\n env: cleanEnv,\n mcpServers: hostedMcpServers(opts) as Options[\"mcpServers\"],\n ...(claudeBuiltInTools(opts) ? { tools: claudeBuiltInTools(opts) } : {}),\n abortController: opts.abortController,\n // `AskUserQuestion` is Claude Code's built-in clarification tool, but it\n // expects the SDK CLI to render a TUI prompt and read stdin for the\n // answer — neither exists in this headless Telegram bridge. Without\n // disallowing it, the model would call AskUserQuestion, the SDK would\n // wait for a TUI response that never comes, and the turn would hang\n // until abort. Forbidding the tool nudges the model to ask the same\n // clarification as plain text (see topic-system prompt), which routes\n // through the normal next-user-message path and the user just answers\n // in the topic.\n //\n // Claude Code's private task store, Workflow, and native subagent tools are\n // not Negotium state. They stay disabled even when a caller supplies custom\n // agent definitions: delegation must go through runtime.spawn_subagent and\n // task state must go through the required shared task MCP.\n disallowedTools: buildClaudeDisallowedTools(opts.disallowedTools),\n ...(opts.model ? { model: opts.model } : {}),\n ...(opts.maxBudgetUsd ? { maxBudgetUsd: opts.maxBudgetUsd } : {}),\n ...(opts.agents\n ? {\n agents: Object.fromEntries(\n Object.entries(opts.agents).map(([name, def]) => {\n const { effort, ...rest } = def;\n const narrowed = typeof effort === \"string\" ? toClaudeEffort(effort) : effort;\n return [name, narrowed !== undefined ? { ...rest, effort: narrowed } : rest];\n }),\n ),\n }\n : {}),\n ...(toClaudeEffort(opts.effort) ? { effort: toClaudeEffort(opts.effort) } : {}),\n hooks: {\n PreToolUse: [\n {\n hooks: [\n async (input: HookInput) => {\n const { tool_name, tool_input } = input as PreToolUseHookInput;\n if (referencesHostedSecretStorage(tool_input)) {\n return {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\" as const,\n permissionDecision: \"deny\" as const,\n permissionDecisionReason: \"Runtime secret storage access is not permitted\",\n },\n };\n }\n\n // Block built-in run_in_background: the bash runs inside the CLI\n // subprocess and dies when the turn ends (SIGTERM on IPC close).\n // Direct the model to the MCP tool that survives across turns and\n // auto-injects a completion notification via session-inbox.\n if (\n tool_name === \"Bash\" &&\n (tool_input as Record<string, unknown>)?.run_in_background === true\n ) {\n return {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\" as const,\n permissionDecision: \"deny\" as const,\n permissionDecisionReason:\n \"run_in_background is not supported in headless mode — the bash process dies when the agent turn ends. Use mcp__background-bash__background_bash_run instead: it survives across turns and automatically injects the result into the session when done.\",\n },\n };\n }\n\n // Resolve Vault placeholders only for explicitly allowlisted\n // transient execution tools. Messaging and persistence tools\n // must retain {{KEY}} verbatim.\n const userId = opts.vaultUserId ?? opts.userId ?? \"\";\n const withVault = substituteClaudeToolInput(userId, tool_name, tool_input);\n if (JSON.stringify(withVault) === JSON.stringify(tool_input)) {\n return { continue: true };\n }\n return {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\" as const,\n updatedInput: withVault as Record<string, unknown>,\n },\n };\n },\n ],\n },\n ],\n PostToolUse: [\n {\n hooks: [\n async (input: HookInput) => {\n const { tool_response } = input as PostToolUseHookInput;\n const userId = opts.vaultUserId ?? opts.userId ?? \"\";\n const redacted = deepMapStrings(tool_response, (value) =>\n redactHostedSecrets(userId, value),\n );\n if (JSON.stringify(redacted) === JSON.stringify(tool_response)) {\n return { continue: true };\n }\n return {\n hookSpecificOutput: {\n hookEventName: \"PostToolUse\" as const,\n updatedToolOutput: redacted,\n },\n };\n },\n ],\n },\n ],\n },\n settingSources: [\"project\"] as Options[\"settingSources\"],\n // Disable the multi-agent Workflow feature: a headless backend query has\n // no business fanning out orchestration subagents, and the \"ultracode\"\n // keyword trigger would let user-authored message text opt into it.\n settings: {\n disableWorkflows: true,\n workflowKeywordTriggerEnabled: false,\n },\n systemPrompt: opts.systemPrompt,\n };\n\n if (opts.sessionId) {\n queryOptions.resume = opts.sessionId;\n }\n\n // Wrap the SDK iteration so init failures (missing claude CLI, OAuth not\n // configured, transient network errors before the first event) surface as\n // a normal error UnifiedEvent. Without this, an unconfigured Claude\n // install would crash the dispatcher with a synthetic exception and the\n // user-facing classifyError would still fire — but only via the handler\n // catch path, which means cleanup ordering differed from maestro/codex.\n // Keeping the failure shape consistent across providers simplifies the\n // upstream error code.\n // Thinking heartbeat: long extended-thinking stretches (minutes on fable /\n // high effort) emit no text or tool events, so the room UI goes silent and\n // the user can't tell whether the turn is still alive. The SDK does stream\n // thinking signals (`thinking_delta` content deltas, `system/thinking_tokens`\n // pings during redacted thinking) — digest them into a throttled\n // `tool_progress` heartbeat that the client already renders as a live status\n // chip (its handler also re-asserts the typing indicator).\n const THINKING_BEAT_MS = 5000;\n let thinkingStart: number | null = null;\n let lastThinkingBeat = 0;\n let lastContextTokens: number | undefined;\n let lastContextModel: string | undefined;\n const thinkingBeat = (): { type: \"tool_progress\"; toolName: string; elapsed: number } | null => {\n const now = Date.now();\n if (thinkingStart === null) {\n thinkingStart = now;\n lastThinkingBeat = now;\n return { type: \"tool_progress\", toolName: \"thinking\", elapsed: 0 };\n }\n if (now - lastThinkingBeat < THINKING_BEAT_MS) return null;\n lastThinkingBeat = now;\n return { type: \"tool_progress\", toolName: \"thinking\", elapsed: (now - thinkingStart) / 1000 };\n };\n\n try {\n const prompt = buildClaudePrompt(opts);\n for await (const message of query({\n prompt,\n options: queryOptions,\n })) {\n // --- Thinking heartbeat (see above) ---\n // A thinking \"stretch\" ends at the first non-thinking signal so elapsed\n // restarts cleanly on the next thinking phase within the same turn.\n if (\n message.type === \"system\" &&\n (message as { subtype?: string }).subtype === \"thinking_tokens\"\n ) {\n const beat = thinkingBeat();\n if (beat) yield beat;\n continue;\n }\n\n // --- Stream events (token-by-token) ---\n // tool_use is NOT emitted from the stream path: the completed assistant\n // message below carries the same block with its input already parsed,\n // and tools only start executing after the message completes — so the\n // stream copy added no timeliness, only a duplicate tool_use per turn\n // in the unified log (doubling `<!-- Tool: ... -->` comments when\n // bridging to another agent).\n if (message.type === \"stream_event\") {\n const streamMsg = message as SDKPartialAssistantMessage;\n const evt = (streamMsg as { event?: StreamEvent }).event;\n if (!evt) continue;\n\n if (evt.type === \"content_block_delta\") {\n const delta = evt as ContentBlockDelta;\n if (delta.delta.type === \"thinking_delta\") {\n const beat = thinkingBeat();\n if (beat) yield beat;\n } else if (delta.delta.type === \"text_delta\" && delta.delta.text) {\n // Claude only exposes tool_use blocks on the completed assistant\n // message below. Forwarding text deltas here would place all text\n // before those tools, making the original block order impossible\n // for consumers to reconstruct. The completed message emits text\n // and tool blocks in their canonical order.\n thinkingStart = null;\n } else {\n // Tool-args streaming (partial_json) etc. — thinking stretch over.\n thinkingStart = null;\n }\n }\n\n continue;\n }\n\n // Any completed message (assistant text, tool events, results) ends the\n // current thinking stretch.\n thinkingStart = null;\n\n // --- Tool progress ---\n if (message.type === \"tool_progress\") {\n const m = message as SDKToolProgressMessage;\n yield {\n type: \"tool_progress\",\n toolName: m.tool_name,\n elapsed: m.elapsed_time_seconds,\n };\n continue;\n }\n\n // --- Tool use summary ---\n if (message.type === \"tool_use_summary\") {\n const m = message as SDKToolUseSummaryMessage;\n yield { type: \"tool_use_summary\", summary: m.summary };\n continue;\n }\n\n // --- System init ---\n if (message.type === \"system\") {\n const m = message as SDKSystemMessage;\n if (m.subtype === \"init\") {\n yield { type: \"session\", sessionId: m.session_id };\n } else {\n // Log all other system messages (task_updated, task_progress,\n // task_notification, etc.) so we can observe lifecycle events.\n logger.debug(\n { subtype: m.subtype, msg: m },\n \"claudeProvider: system message (unhandled subtype)\",\n );\n }\n continue;\n }\n\n // --- Result (terminal) ---\n // SDK occasionally yields stray messages after a `result`; consuming them\n // surfaces as ghost messages in the topic (\"어? 뭐가 더 나오네?\"). Close\n // the generator immediately on terminal so the SDK stream is dropped and\n // any trailing payloads can't leak through.\n if (message.type === \"result\") {\n const m = message as SDKResultMessage;\n if (m.subtype === \"success\") {\n const contextWindow =\n (lastContextModel ? m.modelUsage?.[lastContextModel]?.contextWindow : undefined) ??\n Object.values(m.modelUsage ?? {})[0]?.contextWindow;\n yield {\n type: \"result\",\n content: m.result,\n stopReason: m.stop_reason ?? \"end_turn\",\n usage: m.usage\n ? {\n inputTokens: m.usage.input_tokens,\n outputTokens: m.usage.output_tokens,\n cacheCreationInputTokens: m.usage.cache_creation_input_tokens ?? undefined,\n cacheReadInputTokens: m.usage.cache_read_input_tokens ?? undefined,\n costUsd: m.total_cost_usd,\n ...(lastContextTokens !== undefined && contextWindow\n ? { contextTokens: lastContextTokens, contextWindow }\n : {}),\n }\n : undefined,\n };\n yield* extractFileEvents(m.result, \"result\");\n return;\n }\n // Error result\n const budgetExceeded = m.subtype === \"error_max_budget_usd\";\n const errorMsg = budgetExceeded\n ? \"The job reached its cost limit\"\n : m.errors?.join(\"; \") || \"Unknown error\";\n yield {\n type: \"error\",\n content: errorMsg,\n ...(budgetExceeded ? { code: \"budget_exceeded\" as const } : {}),\n ...(m.usage\n ? {\n usage: {\n inputTokens: m.usage.input_tokens,\n outputTokens: m.usage.output_tokens,\n cacheCreationInputTokens: m.usage.cache_creation_input_tokens ?? undefined,\n cacheReadInputTokens: m.usage.cache_read_input_tokens ?? undefined,\n costUsd: m.total_cost_usd,\n },\n }\n : {}),\n };\n return;\n }\n\n // --- Assistant message ---\n if (message.type === \"assistant\") {\n const m = message as SDKAssistantMessage;\n const content = (m.message?.content ?? []) as ContentBlock[];\n const usage = m.message?.usage;\n if (usage) {\n lastContextTokens = claudeRequestContextTokens(usage) ?? undefined;\n lastContextModel = m.message.model;\n }\n\n for (const block of content) {\n if (block.type === \"text\") {\n const textBlock = block as TextBlock;\n yield { type: \"text\", content: textBlock.text };\n // Surface mid-turn [FILE:/abs/path] tags right away, matching codex/\n // maestro providers — without this, a model that narrates a file\n // before its next tool call (rather than emitting the tag in the\n // final `result` text) wouldn't trigger send-file at all. The file\n // event handler dedups on normalized path so the same tag appearing\n // again in `result` won't double-send.\n yield* extractFileEvents(textBlock.text, \"text\");\n } else if (block.type === \"tool_use\") {\n const tb = block as ToolUseBlock;\n yield {\n type: \"tool_use\",\n name: tb.name,\n input: tb.input || {},\n toolUseId: tb.id,\n };\n }\n }\n continue;\n }\n\n // --- User message (tool results ride on user-role messages) ---\n // The Anthropic message protocol puts tool_result blocks in USER\n // messages, never assistant ones — without this branch the unified log\n // records tool calls but no results, losing information codex topics\n // keep (visible when bridging a claude topic to another agent).\n if (message.type === \"user\") {\n const um = message as SDKUserMessage | SDKUserMessageReplay;\n // Replays re-deliver transcript history on resume; mapping them would\n // duplicate every past tool_result into the unified log.\n if (\"isReplay\" in um && um.isReplay) continue;\n const content = um.message?.content;\n if (!Array.isArray(content)) continue;\n for (const block of content as ContentBlock[]) {\n if (block.type !== \"tool_result\") continue;\n const trBlock = block as ToolResultBlock;\n const trContent =\n typeof trBlock.content === \"string\" ? trBlock.content.slice(0, 200) : \"\";\n yield {\n type: \"tool_result\",\n toolUseId: trBlock.tool_use_id || \"\",\n content: trContent,\n ...(trBlock.is_error ? { isError: true } : {}),\n };\n }\n }\n }\n } catch (e) {\n // Abort = user moved on; don't surface as an error message. The handler\n // catches the abort signal separately via abortReason, so swallowing\n // here matches both maestro and codex behavior.\n if (isAbortError(e) || opts.abortController?.signal.aborted) return;\n logger.error({ err: e }, \"claudeProvider: SDK iteration failed\");\n yield { type: \"error\", content: errMsg(e) };\n }\n}\n",
6
6
  "/**\n * Helpers shared by every agent's rollout encoder.\n *\n * Each rollout file under `agents/rollout/<agent>.ts` materializes a\n * synthetic SDK-native JSONL from a provider-agnostic `ConversationEntry`\n * stream. The cwd validation, UUID shape check, and chat-pair extraction\n * are identical regardless of agent, so they live here.\n */\n\nimport { mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport {\n DM_WORKSPACE_DIR,\n PROJECT_ROOT,\n SESSION_WORKSPACE_DIR,\n TOPIC_WORKSPACE_DIR,\n WORKSPACE_DIR,\n} from \"#platform/config\";\nimport { logger } from \"#platform/logger\";\nimport { renderUserPromptBatch } from \"#runtime/user-turn-envelope\";\nimport type { ConversationEntry } from \"#storage/conversations\";\n\nexport interface RolloutHostOptions {\n /** Absolute workspace roots under which synthetic provider sessions may be written. */\n workspaceRoots?: readonly string[];\n /** Directory containing the provider rollout fixture JSONL files. */\n fixturesDir?: string;\n}\n\nlet trustedWorkspaceRoots = [\n WORKSPACE_DIR,\n DM_WORKSPACE_DIR,\n SESSION_WORKSPACE_DIR,\n TOPIC_WORKSPACE_DIR,\n].map((root) => resolve(root));\n\n/** Configure the embedding host's trusted workspace roots. */\nexport function configureRolloutHost(options: RolloutHostOptions): () => void {\n if (!options.workspaceRoots && !options.fixturesDir) {\n throw new Error(\"configureRolloutHost requires workspaceRoots or fixturesDir\");\n }\n if (options.workspaceRoots?.length === 0) {\n throw new Error(\"configureRolloutHost requires at least one workspace root\");\n }\n const previousRoots = trustedWorkspaceRoots;\n const previousFixturesDir = FIXTURES_DIR;\n if (options.workspaceRoots) {\n trustedWorkspaceRoots = options.workspaceRoots.map((root) => resolve(root));\n }\n if (options.fixturesDir) FIXTURES_DIR = resolve(options.fixturesDir);\n let disposed = false;\n return () => {\n if (disposed) return;\n disposed = true;\n trustedWorkspaceRoots = previousRoots;\n FIXTURES_DIR = previousFixturesDir;\n };\n}\n\n/**\n * Captured fixture snapshots — `claude-attachments.jsonl`, `codex-shell.jsonl`,\n * etc. — live one level above the per-agent rollout files (under\n * `agents/fixtures/`) so each agent can pull from the same directory without\n * duplicating fixtures.\n *\n * To refresh fixtures: run any live Codex/Claude session, copy the first few\n * non-conversational entries from the resulting rollout file, and update\n * `src/agents/fixtures/{codex-shell,claude-attachments}.jsonl`.\n */\nexport let FIXTURES_DIR = resolve(PROJECT_ROOT, \"src\", \"agents\", \"fixtures\");\n\n/** Deep-clone to avoid mutating cached fixture objects. */\nexport function clone<T>(obj: T): T {\n return structuredClone(obj);\n}\n\n/**\n * UUID v4/v7 shape — both 36 chars with the standard 8-4-4-4-12 hex layout.\n * We do not enforce the version nibble because randomUUID (v4) and uuidv7\n * coexist; the only requirement for our caller is that the value is safe to\n * embed in a path component and that the SDK accepts it as a session/thread\n * identifier.\n */\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function assertUuidLike(label: string, value: string): void {\n if (!UUID_RE.test(value)) {\n throw new Error(`rollout: ${label} is not a UUID-shaped string: ${value}`);\n }\n}\n\n/**\n * Reject cwds that escape Otium-managed workspace roots. We use `path.resolve`\n * to normalize `..` traversal; symlink-based escapes are out of scope (the\n * workspace roots are not expected to contain attacker-controlled symlinks).\n */\nfunction assertCwdInWorkspace(cwd: string): void {\n const abs = resolve(cwd);\n // Synthetic rollouts for spawn/fork must be written under the same root as\n // live topic turns or provider resume looks in a different cwd hash than the\n // one we generated.\n const ok = trustedWorkspaceRoots.some((root) => abs === root || abs.startsWith(`${root}/`));\n if (!ok) {\n throw new Error(`rollout: cwd outside trusted workspace roots: ${cwd} (resolved=${abs})`);\n }\n}\n\n/** Best-effort guarantee that the resumed cwd will exist when the SDK stats it. */\nexport function ensureCwdExists(cwd: string): void {\n assertCwdInWorkspace(cwd);\n try {\n mkdirSync(cwd, { recursive: true });\n } catch (err) {\n logger.warn({ err, cwd }, \"rollout: ensureCwdExists failed — caller should pre-create cwd\");\n }\n}\n\n/**\n * Length-bound a string by Unicode code points rather than UTF-16 units, so a\n * truncation never lands in the middle of a multi-byte sequence and produces\n * a malformed character. Used for in-line tool annotations where we only need\n * a rough preview, not the full payload.\n */\nfunction truncate(text: string, n: number): string {\n const cps = Array.from(text);\n return cps.length > n ? `${cps.slice(0, n).join(\"\")}…` : text;\n}\n\n/**\n * Reduce a UnifiedEvent stream to user/assistant message pairs. Tool calls and\n * tool results are inlined as bracketed annotations on the surrounding\n * assistant turn so the historical narrative is preserved when synthesizing a\n * native rollout for a different SDK. Streaming text deltas are folded into\n * their final consolidated `text` event to avoid double-counting partial\n * tokens.\n */\nexport type ChatPair = { userText: string; assistantText: string };\n\ninterface ExtractOptions {\n includeToolAnnotations: boolean;\n}\n\nexport function extractChatPairs(\n entries: ConversationEntry[],\n opts: ExtractOptions = { includeToolAnnotations: true },\n): ChatPair[] {\n const pairs: ChatPair[] = [];\n let pendingUsers: string[] = [];\n let pendingBatchSize: number | null = null;\n let pendingBatchNextIndex = 0;\n let pendingAssistantParts: string[] = [];\n let toolBuffer: string[] = [];\n\n const flushAssistant = () => {\n if (pendingUsers.length === 0) return;\n const tools =\n opts.includeToolAnnotations && toolBuffer.length > 0 ? `\\n\\n${toolBuffer.join(\"\\n\")}` : \"\";\n const assistantText = pendingAssistantParts.join(\"\").trim() + tools;\n if (assistantText.trim()) {\n pairs.push({ userText: renderUserPromptBatch(pendingUsers), assistantText });\n }\n pendingUsers = [];\n pendingBatchSize = null;\n pendingBatchNextIndex = 0;\n pendingAssistantParts = [];\n toolBuffer = [];\n };\n\n for (const entry of entries) {\n const ev = entry.event;\n switch (ev.type) {\n case \"user_message\": {\n const userEvent = ev as {\n content: string;\n consecutiveBatchSize?: number;\n consecutiveBatchIndex?: number;\n };\n if (pendingAssistantParts.length > 0 || toolBuffer.length > 0) {\n flushAssistant();\n }\n const batchSize = userEvent.consecutiveBatchSize;\n const batchIndex = userEvent.consecutiveBatchIndex;\n const marked =\n Number.isInteger(batchSize) &&\n Number.isInteger(batchIndex) &&\n (batchSize ?? 0) > 1 &&\n (batchIndex ?? -1) >= 0 &&\n (batchIndex ?? 0) < (batchSize ?? 0);\n if (!marked) {\n if (pendingUsers.length > 0) flushAssistant();\n pendingUsers.push(userEvent.content);\n pendingBatchSize = null;\n pendingBatchNextIndex = 0;\n break;\n }\n if (batchIndex === 0) {\n if (pendingUsers.length > 0) flushAssistant();\n pendingBatchSize = batchSize ?? null;\n pendingBatchNextIndex = 0;\n } else if (\n !(\n (pendingBatchSize !== null &&\n (batchSize ?? 0) >= pendingBatchSize &&\n pendingBatchNextIndex === batchIndex) ||\n (pendingBatchSize === null && pendingUsers.length === batchIndex)\n )\n ) {\n flushAssistant();\n }\n pendingUsers.push(userEvent.content);\n pendingBatchSize = batchSize ?? null;\n pendingBatchNextIndex = (batchIndex ?? 0) + 1;\n break;\n }\n case \"session\":\n // Session-id metadata. Provider sessions can change mid-conversation\n // (e.g. agent flip after rollout reconstruction), but the SDK normally\n // emits this *during* a turn — after the user prompt was already\n // recorded, before the assistant text arrives. Only flush when there\n // is actual assistant content in flight; otherwise we'd discard the\n // staged user prompt and the next text event would synthesize a bogus\n // \"(continued)\" pair.\n if (pendingAssistantParts.length > 0 || toolBuffer.length > 0) {\n flushAssistant();\n }\n break;\n case \"text\": {\n // Per-block assistant text. claudeProvider emits one of these per text\n // content block, so a single turn can yield multiple `text` events\n // interleaved with tool_use. Accumulate (do NOT flush yet) — the\n // turn's `result` event below carries the final concatenation and\n // is the proper boundary.\n if (pendingUsers.length === 0) {\n pendingUsers = [\"(continued)\"];\n }\n pendingAssistantParts.push((ev as { content: string }).content);\n break;\n }\n case \"result\": {\n // End-of-turn marker. `result.content` is the canonical final answer\n // produced by the provider, so prefer it over the accumulated `text`\n // chunks (which may be partial or out of order across SDKs).\n if (pendingUsers.length === 0) {\n pendingUsers = [\"(continued)\"];\n }\n pendingAssistantParts = [(ev as { content: string }).content];\n flushAssistant();\n break;\n }\n case \"text_delta\":\n // Skip — final `text`/`result` event carries the complete content.\n break;\n case \"tool_use\": {\n const u = ev as { name: string; input: Record<string, unknown> };\n toolBuffer.push(`<!-- Tool: ${u.name} ${truncate(JSON.stringify(u.input), 200)} -->`);\n break;\n }\n case \"tool_result\": {\n const u = ev as { content: string };\n toolBuffer.push(`<!-- Tool result: ${truncate(u.content, 200)} -->`);\n break;\n }\n case \"error\": {\n const u = ev as { content: string };\n toolBuffer.push(`[Error: ${truncate(u.content, 200)}]`);\n break;\n }\n // Other UnifiedEvent variants (`tool_progress`, `tool_use_summary`,\n // `file`, `text_delta` already handled above) carry no conversational\n // content, so they do not contribute to a chat pair. We intentionally\n // omit a default branch — the explicit user_message variant introduced\n // by the recorder makes the previous \"treat unrecognized as user\" hack\n // unnecessary, and adding new UnifiedEvent variants in the future\n // should require an explicit decision here, not silent inheritance.\n case \"tool_progress\":\n case \"tool_use_summary\":\n case \"file\":\n case \"status\":\n break;\n }\n }\n flushAssistant();\n return pairs;\n}\n",
@@ -12,9 +12,9 @@
12
12
  "import { unlinkSync } from \"node:fs\";\nimport { logger } from \"#platform/logger\";\n\nexport interface SafeUnlinkHost {\n unlink(path: string): void;\n warn(context: { err: unknown; path: string }, message: string): void;\n}\n\nexport type SafeUnlink = (path: string, warnLabel?: string) => void;\n\n/** Create an isolated best-effort unlink helper using caller-owned I/O and logging. */\nexport function createSafeUnlink(host: SafeUnlinkHost): SafeUnlink {\n return (path, warnLabel) => {\n try {\n host.unlink(path);\n } catch (e) {\n if ((e as NodeJS.ErrnoException)?.code === \"ENOENT\") return;\n if (warnLabel) host.warn({ err: e, path }, warnLabel);\n }\n };\n}\n\nconst defaultSafeUnlink = createSafeUnlink({\n unlink: unlinkSync,\n warn: (context, message) => logger.warn(context, message),\n});\n\n/**\n * Best-effort unlink. ENOENT is always swallowed (the file is already gone).\n * Other errors are silent unless `warnLabel` is provided, in which case they\n * are logged at warn level with `{ err, path }` context.\n */\nexport function safeUnlink(path: string, warnLabel?: string): void {\n defaultSafeUnlink(path, warnLabel);\n}\n",
13
13
  "import { existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentRegistry, AgentRegistryOperations } from \"#agents/contracts\";\nimport { encodeClaudeCwd, writeClaudeRollout } from \"#agents/rollout/claude\";\nimport { MODEL_FABLE, MODEL_OPUS, MODEL_SONNET } from \"#platform/config\";\nimport { logger } from \"#platform/logger\";\nimport { CLAUDE_EFFORT_VALUES, type EffortLevel } from \"#types\";\n\nconst ALIAS_MAP: Record<string, string> = {\n sonnet: MODEL_SONNET,\n opus: MODEL_OPUS,\n fable: MODEL_FABLE,\n};\n\nconst VALID_ALIASES = new Set(Object.keys(ALIAS_MAP));\nconst VALID_EFFORTS = new Set<EffortLevel>(CLAUDE_EFFORT_VALUES);\n\nexport const claudeRegistry: AgentRegistry = {\n kind: \"claude\",\n defaultModel: \"sonnet\",\n defaultEffort: \"high\",\n\n expandModelAlias(s) {\n return ALIAS_MAP[s] ?? s;\n },\n\n validateModel(s) {\n return VALID_ALIASES.has(s);\n },\n\n validEfforts: CLAUDE_EFFORT_VALUES,\n validateEffort(s) {\n return VALID_EFFORTS.has(s);\n },\n\n footerLabel(model, effort) {\n return effort ? `${model} · ${effort}` : model;\n },\n};\n\nexport const claudeRegistryOperations: AgentRegistryOperations = {\n writeRollout(opts) {\n // `reuseSessionId` (if any) becomes the SDK resume key + path component,\n // so claude→codex→claude lands at the original `~/.claude/projects/<dir>/<id>.jsonl`\n // instead of orphaning a fresh UUID every switch.\n const { sessionId, rolloutPath } = writeClaudeRollout({\n cwd: opts.cwd,\n entries: opts.entries,\n model: claudeRegistry.expandModelAlias(opts.model ?? claudeRegistry.defaultModel),\n ...(opts.reuseSessionId ? { sessionId: opts.reuseSessionId } : {}),\n });\n return { sessionId, rolloutPath };\n },\n\n // Claude has a native fork API in @anthropic-ai/claude-agent-sdk that produces\n // a byte-equivalent copy of the parent rollout. Preserves tool history\n // structurally, so the fork is indistinguishable from the parent on resume.\n //\n // SDK ≥0.3.19x semantics: `dir` is where to FIND the parent session (lookup\n // scope), NOT the destination — passing the derived topic's cwd made lookup\n // fail (\"Session … not found in project directory\"). The fork file is always\n // written NEXT TO the parent rollout, so after forking we move it into the\n // derived cwd's project dir where a resume from that cwd expects it.\n async forkSession({ parentSessionId, cwd, title }) {\n const { forkSession } = await import(\"@anthropic-ai/claude-agent-sdk\");\n // Omit `dir`: the parent session lives under the SOURCE topic's project\n // dir, which this registry never receives — global search finds it.\n const result = await forkSession(parentSessionId, {\n ...(title ? { title } : {}),\n });\n const projectsRoot = join(homedir(), \".claude\", \"projects\");\n const destDir = join(projectsRoot, encodeClaudeCwd(cwd));\n const destPath = join(destDir, `${result.sessionId}.jsonl`);\n if (!existsSync(destPath)) {\n const sourcePath = readdirSync(projectsRoot)\n .map((d) => join(projectsRoot, d, `${result.sessionId}.jsonl`))\n .find((p) => existsSync(p));\n if (!sourcePath) {\n throw new Error(\n `claude forkSession: fork rollout ${result.sessionId}.jsonl not found under ${projectsRoot}`,\n );\n }\n mkdirSync(destDir, { recursive: true });\n renameSync(sourcePath, destPath);\n }\n return {\n forkId: result.sessionId,\n // Same project-dir layout as cleanupRollouts below — NOT under\n // `cwd/.claude/sessions/`. A wrong path here makes cleanupAgentFork's\n // existsSync always false, so silent-fork rollouts accumulate forever.\n rolloutPath: destPath,\n };\n },\n\n // Each Claude rollout lives at `~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl`.\n // The encoded-cwd is deterministic so we can compute the path directly\n // without globbing — fast and robust against the SDK changing date layout.\n async cleanupRollouts({ cwd, sessionIds }) {\n const projectsDir = join(homedir(), \".claude\", \"projects\", encodeClaudeCwd(cwd));\n const failures: unknown[] = [];\n for (const sid of sessionIds) {\n const path = join(projectsDir, `${sid}.jsonl`);\n try {\n unlinkSync(path);\n } catch (e) {\n if ((e as NodeJS.ErrnoException)?.code !== \"ENOENT\") {\n logger.warn({ err: e, path }, \"claude cleanupRollouts: unlink failed\");\n failures.push(e);\n }\n }\n }\n if (failures.length > 0) {\n throw new AggregateError(failures, \"claude cleanupRollouts failed\");\n }\n },\n};\n",
14
14
  "/** Recursively apply fn to every string value in a nested object/array. */\nexport function deepMapStrings(value: unknown, fn: (s: string) => string): unknown {\n if (typeof value === \"string\") return fn(value);\n if (Array.isArray(value)) return value.map((v) => deepMapStrings(v, fn));\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = deepMapStrings(v, fn);\n }\n return out;\n }\n return value;\n}\n",
15
- "import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { dirname } from \"node:path\";\nimport {\n referencesRuntimeSecretStorage as defaultReferencesRuntimeSecretStorage,\n shouldRedirectVaultTool as defaultShouldRedirectVaultTool,\n} from \"#agents/vault-tool-policy\";\nimport { CLAUDE_EXECUTABLE, codexAuthFilePath } from \"#platform/config\";\nimport { getMcpServersForQuery as defaultGetMcpServersForQuery } from \"#platform/mcp-config\";\nimport {\n redactVaultSecrets as defaultRedactVaultSecrets,\n vaultSubstituteDetailed as defaultVaultSubstituteDetailed,\n} from \"#storage/vault\";\nimport type { AgentQueryOptions } from \"#types\";\n\n/**\n * Host-owned services used by the provider execution layer.\n *\n * The default implementation preserves standalone Negotium behaviour. An\n * embedding host may replace these callbacks once during process bootstrap so\n * providers use that host's MCP catalog and device-local secret store without\n * importing any host-specific runtime code into Negotium.\n */\nexport interface AgentExecutionHost {\n getMcpServersForQuery(opts: AgentQueryOptions): Record<string, unknown>;\n redactVaultSecrets(userId: string, value: string): string;\n substituteVaultSecrets(userId: string, value: string): string;\n referencesRuntimeSecretStorage(value: unknown): boolean;\n shouldRedirectVaultTool(userId: string, toolName: string, input: unknown): boolean;\n claudeCodeExecutablePath(): string | undefined;\n codexAuthFilePath(): string;\n transformQueryOptions?(opts: AgentQueryOptions): AgentQueryOptions;\n}\n\nconst defaultHost: AgentExecutionHost = {\n getMcpServersForQuery: defaultGetMcpServersForQuery,\n redactVaultSecrets: defaultRedactVaultSecrets,\n substituteVaultSecrets: (userId, value) => defaultVaultSubstituteDetailed(userId, value).text,\n referencesRuntimeSecretStorage: defaultReferencesRuntimeSecretStorage,\n shouldRedirectVaultTool: defaultShouldRedirectVaultTool,\n claudeCodeExecutablePath: () => CLAUDE_EXECUTABLE,\n codexAuthFilePath,\n};\n\nconst hostRegistrations: Array<{\n id: symbol;\n overrides: Partial<AgentExecutionHost>;\n}> = [];\n\nconst scopedHost = new AsyncLocalStorage<AgentExecutionHost>();\n\nfunction activeHost(): AgentExecutionHost {\n const scoped = scopedHost.getStore();\n if (scoped) return scoped;\n const host = { ...defaultHost };\n for (const registration of hostRegistrations) Object.assign(host, registration.overrides);\n return host;\n}\n\n/** Resolve call-local overrides against the currently configured process host. */\nexport function resolveAgentExecutionHost(\n overrides: Partial<AgentExecutionHost> = {},\n): AgentExecutionHost {\n return { ...activeHost(), ...overrides };\n}\n\n/** Run one async provider operation with an isolated call-local host. */\nexport function withAgentExecutionHost<T>(\n host: AgentExecutionHost,\n operation: () => Promise<T>,\n): Promise<T> {\n return scopedHost.run(host, operation);\n}\n\n/** Configure provider host services. Returns a disposer useful for tests. */\nexport function configureAgentExecutionHost(overrides: Partial<AgentExecutionHost>): () => void {\n const registration = { id: Symbol(\"agent-execution-host\"), overrides };\n hostRegistrations.push(registration);\n let disposed = false;\n return () => {\n if (disposed) return;\n disposed = true;\n const index = hostRegistrations.findIndex((entry) => entry.id === registration.id);\n if (index >= 0) hostRegistrations.splice(index, 1);\n };\n}\n\nexport function hostedMcpServers(opts: AgentQueryOptions): Record<string, unknown> {\n if (opts.toolPolicy === \"none\") return {};\n if (opts.toolPolicy === \"compaction-log\") {\n const compactLog = opts.mcpExtra?.compact_log;\n return compactLog ? { compact_log: compactLog } : {};\n }\n return activeHost().getMcpServersForQuery(opts);\n}\n\nexport function redactHostedSecrets(userId: string, value: string): string {\n return activeHost().redactVaultSecrets(userId, value);\n}\n\nexport function substituteHostedSecrets(userId: string, value: string): string {\n return activeHost().substituteVaultSecrets(userId, value);\n}\n\nexport function referencesHostedSecretStorage(value: unknown): boolean {\n return activeHost().referencesRuntimeSecretStorage(value);\n}\n\nexport function shouldRedirectHostedVaultTool(\n userId: string,\n toolName: string,\n input: unknown,\n): boolean {\n return activeHost().shouldRedirectVaultTool(userId, toolName, input);\n}\n\nexport function transformHostedQueryOptions(opts: AgentQueryOptions): AgentQueryOptions {\n return activeHost().transformQueryOptions?.(opts) ?? opts;\n}\n\nexport function hostedClaudeCodeExecutablePath(): string | undefined {\n return activeHost().claudeCodeExecutablePath();\n}\n\nexport function hostedCodexAuthFilePath(): string {\n return activeHost().codexAuthFilePath();\n}\n\n/** The one Codex state root used by auth, rollouts, native forks, and SDK resume. */\nexport function hostedCodexHomePath(): string {\n return dirname(hostedCodexAuthFilePath());\n}\n",
15
+ "import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { dirname } from \"node:path\";\nimport { referencesRuntimeSecretStorage as defaultReferencesRuntimeSecretStorage } from \"#agents/vault-tool-policy\";\nimport { CLAUDE_EXECUTABLE, codexAuthFilePath } from \"#platform/config\";\nimport { getMcpServersForQuery as defaultGetMcpServersForQuery } from \"#platform/mcp-config\";\nimport {\n redactVaultSecrets as defaultRedactVaultSecrets,\n vaultSubstituteDetailed as defaultVaultSubstituteDetailed,\n} from \"#storage/vault\";\nimport type { AgentQueryOptions } from \"#types\";\n\n/**\n * Host-owned services used by the provider execution layer.\n *\n * The default implementation preserves standalone Negotium behaviour. An\n * embedding host may replace these callbacks once during process bootstrap so\n * providers use that host's MCP catalog and device-local secret store without\n * importing any host-specific runtime code into Negotium.\n */\nexport interface AgentExecutionHost {\n getMcpServersForQuery(opts: AgentQueryOptions): Record<string, unknown>;\n redactVaultSecrets(userId: string, value: string): string;\n substituteVaultSecrets(userId: string, value: string): string;\n referencesRuntimeSecretStorage(value: unknown): boolean;\n claudeCodeExecutablePath(): string | undefined;\n codexAuthFilePath(): string;\n transformQueryOptions?(opts: AgentQueryOptions): AgentQueryOptions;\n}\n\nconst defaultHost: AgentExecutionHost = {\n getMcpServersForQuery: defaultGetMcpServersForQuery,\n redactVaultSecrets: defaultRedactVaultSecrets,\n substituteVaultSecrets: (userId, value) => defaultVaultSubstituteDetailed(userId, value).text,\n referencesRuntimeSecretStorage: defaultReferencesRuntimeSecretStorage,\n claudeCodeExecutablePath: () => CLAUDE_EXECUTABLE,\n codexAuthFilePath,\n};\n\nconst hostRegistrations: Array<{\n id: symbol;\n overrides: Partial<AgentExecutionHost>;\n}> = [];\n\nconst scopedHost = new AsyncLocalStorage<AgentExecutionHost>();\n\nfunction activeHost(): AgentExecutionHost {\n const scoped = scopedHost.getStore();\n if (scoped) return scoped;\n const host = { ...defaultHost };\n for (const registration of hostRegistrations) Object.assign(host, registration.overrides);\n return host;\n}\n\n/** Resolve call-local overrides against the currently configured process host. */\nexport function resolveAgentExecutionHost(\n overrides: Partial<AgentExecutionHost> = {},\n): AgentExecutionHost {\n return { ...activeHost(), ...overrides };\n}\n\n/** Run one async provider operation with an isolated call-local host. */\nexport function withAgentExecutionHost<T>(\n host: AgentExecutionHost,\n operation: () => Promise<T>,\n): Promise<T> {\n return scopedHost.run(host, operation);\n}\n\n/** Configure provider host services. Returns a disposer useful for tests. */\nexport function configureAgentExecutionHost(overrides: Partial<AgentExecutionHost>): () => void {\n const registration = { id: Symbol(\"agent-execution-host\"), overrides };\n hostRegistrations.push(registration);\n let disposed = false;\n return () => {\n if (disposed) return;\n disposed = true;\n const index = hostRegistrations.findIndex((entry) => entry.id === registration.id);\n if (index >= 0) hostRegistrations.splice(index, 1);\n };\n}\n\nexport function hostedMcpServers(opts: AgentQueryOptions): Record<string, unknown> {\n if (opts.toolPolicy === \"none\") return {};\n if (opts.toolPolicy === \"compaction-log\") {\n const compactLog = opts.mcpExtra?.compact_log;\n return compactLog ? { compact_log: compactLog } : {};\n }\n return activeHost().getMcpServersForQuery(opts);\n}\n\nexport function redactHostedSecrets(userId: string, value: string): string {\n return activeHost().redactVaultSecrets(userId, value);\n}\n\nexport function substituteHostedSecrets(userId: string, value: string): string {\n return activeHost().substituteVaultSecrets(userId, value);\n}\n\nexport function referencesHostedSecretStorage(value: unknown): boolean {\n return activeHost().referencesRuntimeSecretStorage(value);\n}\n\nexport function transformHostedQueryOptions(opts: AgentQueryOptions): AgentQueryOptions {\n return activeHost().transformQueryOptions?.(opts) ?? opts;\n}\n\nexport function hostedClaudeCodeExecutablePath(): string | undefined {\n return activeHost().claudeCodeExecutablePath();\n}\n\nexport function hostedCodexAuthFilePath(): string {\n return activeHost().codexAuthFilePath();\n}\n\n/** The one Codex state root used by auth, rollouts, native forks, and SDK resume. */\nexport function hostedCodexHomePath(): string {\n return dirname(hostedCodexAuthFilePath());\n}\n",
16
16
  "import { realpathSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\n// --- Sensitive path blacklist ---\n\nconst SENSITIVE_PATH_PATTERNS = [\n /\\/\\.env(\\.|$)/i,\n /\\/\\.ssh\\//i,\n /\\/\\.aws\\//i,\n /\\/\\.gnupg\\//i,\n /\\/\\.netrc$/i,\n /\\/\\.npmrc$/i,\n /\\/(id_rsa|id_ed25519|id_ecdsa|id_dsa)(\\.pub)?$/i,\n /\\.(pem|key|p12|pfx|cer|crt)$/i,\n /\\/Library\\/Keychains\\//i,\n // Runtime-owned stores and key material. Vault values are encrypted, but\n // exposing ciphertext or its master key to an agent defeats that boundary.\n /\\/vault\\.db(-wal|-shm|-journal)?$/i,\n /\\/vault-master-key$/i,\n /\\/runtime-mcp-secret$/i,\n /\\/sessions\\.db(-wal|-shm|-journal)?$/i,\n];\n\nexport function isSensitivePath(filePath: string): boolean {\n const normalized = resolve(filePath);\n if (SENSITIVE_PATH_PATTERNS.some((p) => p.test(normalized))) return true;\n try {\n const real = realpathSync(normalized);\n if (real !== normalized) return SENSITIVE_PATH_PATTERNS.some((p) => p.test(real));\n } catch {\n // File doesn't exist — no symlink concern\n }\n return false;\n}\n",
17
- "import { isSensitivePath } from \"#security/sensitive-path\";\n\nconst SENSITIVE_RUNTIME_NAMES = [\n \"vault.db\",\n \"vault-master-key\",\n \"runtime-mcp-secret\",\n \"sessions.db\",\n] as const;\n\n// Direct substitution is deliberately default-deny. These provider-owned\n// execution tools consume credentials transiently; persistence and messaging\n// tools must keep placeholders unresolved.\nconst DIRECT_VAULT_EXECUTION_TOOLS = new Set([\"Bash\", \"WebFetch\"]);\n\nfunction leafToolName(toolName: string): string {\n const parts = toolName.split(\"__\");\n return parts.at(-1) ?? toolName;\n}\n\nexport function shouldSubstituteVaultToolInput(toolName: string): boolean {\n const leaf = leafToolName(toolName);\n return leaf.startsWith(\"browser_\") || DIRECT_VAULT_EXECUTION_TOOLS.has(leaf);\n}\n\nexport const VAULT_BROKER_REDIRECT_ERROR =\n \"Vault broker redirection is disabled; use {{KEY}} directly in normal tool inputs.\";\n\nexport interface VaultToolPolicyHost {\n isSensitivePath(path: string): boolean;\n valueReferencesVaultKey(userId: string, value: unknown): boolean;\n}\n\nexport interface VaultToolPolicy {\n isVaultBrokerTool(toolName: string): boolean;\n referencesRuntimeSecretStorage(value: unknown): boolean;\n shouldRedirectVaultTool(userId: string, toolName: string, input: unknown): boolean;\n}\n\nexport function createVaultToolPolicy(host: VaultToolPolicyHost): VaultToolPolicy {\n function isVaultBrokerTool(toolName: string): boolean {\n return toolName.includes(\"vault_run\") || toolName.includes(\"vault_http_request\");\n }\n\n function referencesRuntimeSecretStorage(value: unknown): boolean {\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (SENSITIVE_RUNTIME_NAMES.some((name) => lower.includes(name))) return true;\n return value.startsWith(\"/\") && host.isSensitivePath(value);\n }\n if (Array.isArray(value)) return value.some(referencesRuntimeSecretStorage);\n if (value && typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).some(referencesRuntimeSecretStorage);\n }\n return false;\n }\n\n function shouldRedirectVaultTool(userId: string, toolName: string, input: unknown): boolean {\n // Kept as a compatibility surface for embedding hosts that implemented the\n // pre-0.1.20 broker-only policy. Normal tools now receive Vault values from\n // the execution-time substitution hook, so redirecting a {{KEY}} call\n // would only make browser form filling and other interactive tools fail.\n void userId;\n void toolName;\n void input;\n return false;\n }\n\n return { isVaultBrokerTool, referencesRuntimeSecretStorage, shouldRedirectVaultTool };\n}\n\nconst defaultVaultToolPolicy = createVaultToolPolicy({\n isSensitivePath,\n valueReferencesVaultKey: () => false,\n});\n\nexport const isVaultBrokerTool = defaultVaultToolPolicy.isVaultBrokerTool;\nexport const referencesRuntimeSecretStorage = defaultVaultToolPolicy.referencesRuntimeSecretStorage;\nexport const shouldRedirectVaultTool = defaultVaultToolPolicy.shouldRedirectVaultTool;\n",
17
+ "import { isSensitivePath } from \"#security/sensitive-path\";\n\nconst SENSITIVE_RUNTIME_NAMES = [\n \"vault.db\",\n \"vault-master-key\",\n \"runtime-mcp-secret\",\n \"sessions.db\",\n] as const;\n\n// Direct substitution is deliberately default-deny. These provider-owned\n// execution tools consume credentials transiently; persistence and messaging\n// tools must keep placeholders unresolved.\nconst DIRECT_VAULT_EXECUTION_TOOLS = new Set([\"Bash\", \"WebFetch\"]);\n\nfunction leafToolName(toolName: string): string {\n const parts = toolName.split(\"__\");\n return parts.at(-1) ?? toolName;\n}\n\nexport function shouldSubstituteVaultToolInput(toolName: string): boolean {\n const leaf = leafToolName(toolName);\n return leaf.startsWith(\"browser_\") || DIRECT_VAULT_EXECUTION_TOOLS.has(leaf);\n}\n\nexport function referencesRuntimeSecretStorage(value: unknown): boolean {\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (SENSITIVE_RUNTIME_NAMES.some((name) => lower.includes(name))) return true;\n return value.startsWith(\"/\") && isSensitivePath(value);\n }\n if (Array.isArray(value)) return value.some(referencesRuntimeSecretStorage);\n if (value && typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).some(referencesRuntimeSecretStorage);\n }\n return false;\n}\n",
18
18
  "/**\n * Runtime-MCP wiring shared between core (which injects the MCP into agent\n * sessions) and @negotium/mcp (which serves the endpoint).\n *\n * The runtime process exposes one HTTP MCP endpoint; every agent turn gets a\n * per-turn signed token carrying its full execution context, so the MCP layer\n * never trusts the agent to say who it is. Ported from otium runtime-api\n * `mcp/runtime-server.ts` (transport-agnostic parts only).\n */\n\nimport { createHash, createHmac, timingSafeEqual } from \"node:crypto\";\nimport { NEGOTIUM_PORT, RUNTIME_MCP_SECRET } from \"#platform/config\";\nimport { type AgentKind, isAgentKind, type PeerRuntimeBridgeContext } from \"#types\";\n\nexport const RUNTIME_MCP_KEY = \"runtime\";\n\nexport const RUNTIME_MCP_BASE_PATH = \"/mcp/runtime\";\nexport const HOSTED_MCP_SURFACES = [\n \"task\",\n \"decision\",\n \"token-stats\",\n \"system-health\",\n \"vault\",\n \"wiki\",\n \"skills\",\n \"session-comm\",\n \"agent-health\",\n] as const;\nexport type HostedMcpSurface = (typeof HOSTED_MCP_SURFACES)[number];\nconst TOKEN_TTL_MS = 4 * 60 * 60 * 1000;\nconst CLAUDE_MCP_TOOL_TIMEOUT_MS = 600_000;\n\nexport interface RuntimeMcpContext {\n userId: string;\n topicId: string;\n topicTitle: string;\n queryId?: string;\n cwd: string;\n agent: AgentKind;\n model?: string;\n currentUserPrompt?: string;\n autoContinue?: boolean;\n /** Capability minted by the adapter. Visual tools are absent unless true. */\n visualTools?: boolean;\n /** Capability minted by the adapter. File-delivery tools are absent unless true. */\n fileDeliveryTools?: boolean;\n peerBridge?: PeerRuntimeBridgeContext;\n}\n\n/** Signed identity/capability context shared by hosted built-in MCP surfaces. */\nexport interface HostedMcpContext {\n userId: string;\n topicTitle: string;\n topicId?: string;\n queryId?: string;\n wikiTopicId?: string;\n subagentParentTopicId?: string;\n cwd: string;\n agent: AgentKind;\n model?: string;\n depth?: number;\n silent?: boolean;\n peerBridge?: PeerRuntimeBridgeContext;\n}\n\ntype RuntimeTokenPayload = {\n v: 1;\n exp: number;\n ctx: RuntimeMcpContext;\n};\n\ntype HostedTokenPayload = {\n v: 2;\n exp: number;\n aud: HostedMcpSurface;\n ctx: HostedMcpContext;\n};\n\nlet runtimePort = NEGOTIUM_PORT;\n\n/** The runtime host calls this once it knows which port it actually bound. */\nexport function setRuntimeMcpPort(port: number): void {\n runtimePort = port;\n}\n\nexport function getRuntimeMcpPort(): number {\n return runtimePort;\n}\n\nfunction encodeTokenPart(value: unknown): string {\n return Buffer.from(JSON.stringify(value), \"utf-8\").toString(\"base64url\");\n}\n\nfunction decodeTokenPart(part: string): unknown {\n return JSON.parse(Buffer.from(part, \"base64url\").toString(\"utf-8\")) as unknown;\n}\n\nfunction signTokenPayload(payloadPart: string): string {\n return createHmac(\"sha256\", RUNTIME_MCP_SECRET).update(payloadPart).digest(\"base64url\");\n}\n\nfunction safeEqual(a: string, b: string): boolean {\n const aa = Buffer.from(a);\n const bb = Buffer.from(b);\n return aa.length === bb.length && timingSafeEqual(aa, bb);\n}\n\nfunction isRuntimeMcpContext(value: unknown): value is RuntimeMcpContext {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const ctx = value as Partial<RuntimeMcpContext>;\n return (\n typeof ctx.userId === \"string\" &&\n typeof ctx.topicId === \"string\" &&\n typeof ctx.topicTitle === \"string\" &&\n typeof ctx.cwd === \"string\" &&\n typeof ctx.agent === \"string\" &&\n isAgentKind(ctx.agent) &&\n (ctx.queryId === undefined || typeof ctx.queryId === \"string\") &&\n (ctx.model === undefined || typeof ctx.model === \"string\") &&\n (ctx.currentUserPrompt === undefined || typeof ctx.currentUserPrompt === \"string\") &&\n (ctx.autoContinue === undefined || typeof ctx.autoContinue === \"boolean\") &&\n (ctx.visualTools === undefined || typeof ctx.visualTools === \"boolean\") &&\n (ctx.fileDeliveryTools === undefined || typeof ctx.fileDeliveryTools === \"boolean\") &&\n (ctx.peerBridge === undefined ||\n (typeof ctx.peerBridge.hubCellId === \"string\" &&\n typeof ctx.peerBridge.hostTopicId === \"string\" &&\n typeof ctx.peerBridge.hostQueryId === \"string\" &&\n typeof ctx.peerBridge.canSpawnSubagents === \"boolean\"))\n );\n}\n\nexport function isHostedMcpSurface(value: string): value is HostedMcpSurface {\n return (HOSTED_MCP_SURFACES as readonly string[]).includes(value);\n}\n\nfunction isHostedMcpContext(value: unknown): value is HostedMcpContext {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const ctx = value as Partial<HostedMcpContext>;\n return (\n typeof ctx.userId === \"string\" &&\n typeof ctx.topicTitle === \"string\" &&\n typeof ctx.cwd === \"string\" &&\n typeof ctx.agent === \"string\" &&\n isAgentKind(ctx.agent) &&\n (ctx.topicId === undefined || typeof ctx.topicId === \"string\") &&\n (ctx.queryId === undefined || typeof ctx.queryId === \"string\") &&\n (ctx.wikiTopicId === undefined || typeof ctx.wikiTopicId === \"string\") &&\n (ctx.subagentParentTopicId === undefined || typeof ctx.subagentParentTopicId === \"string\") &&\n (ctx.model === undefined || typeof ctx.model === \"string\") &&\n (ctx.depth === undefined || (Number.isInteger(ctx.depth) && ctx.depth >= 0)) &&\n (ctx.silent === undefined || typeof ctx.silent === \"boolean\") &&\n (ctx.peerBridge === undefined ||\n (typeof ctx.peerBridge.hubCellId === \"string\" &&\n typeof ctx.peerBridge.hostTopicId === \"string\" &&\n typeof ctx.peerBridge.hostQueryId === \"string\" &&\n typeof ctx.peerBridge.canSpawnSubagents === \"boolean\"))\n );\n}\n\nexport function issueRuntimeMcpToken(ctx: RuntimeMcpContext): string {\n const payloadPart = encodeTokenPart({\n v: 1,\n exp: Date.now() + TOKEN_TTL_MS,\n ctx,\n } satisfies RuntimeTokenPayload);\n return `${payloadPart}.${signTokenPayload(payloadPart)}`;\n}\n\nexport function resolveRuntimeMcpToken(token: string | null): RuntimeMcpContext | null {\n if (!token) return null;\n const [payloadPart, signature, extra] = token.split(\".\");\n if (!payloadPart || !signature || extra !== undefined) return null;\n if (!safeEqual(signature, signTokenPayload(payloadPart))) return null;\n\n try {\n const payload = decodeTokenPart(payloadPart) as Partial<RuntimeTokenPayload>;\n if (payload.v !== 1 || typeof payload.exp !== \"number\" || payload.exp <= Date.now())\n return null;\n if (!isRuntimeMcpContext(payload.ctx)) return null;\n return payload.ctx;\n } catch {\n return null;\n }\n}\n\nexport function issueHostedMcpToken(surface: HostedMcpSurface, ctx: HostedMcpContext): string {\n const payloadPart = encodeTokenPart({\n v: 2,\n exp: Date.now() + TOKEN_TTL_MS,\n aud: surface,\n ctx,\n } satisfies HostedTokenPayload);\n return `${payloadPart}.${signTokenPayload(payloadPart)}`;\n}\n\nexport function resolveHostedMcpToken(\n token: string | null,\n surface: HostedMcpSurface,\n): HostedMcpContext | null {\n if (!token) return null;\n const [payloadPart, signature, extra] = token.split(\".\");\n if (!payloadPart || !signature || extra !== undefined) return null;\n if (!safeEqual(signature, signTokenPayload(payloadPart))) return null;\n\n try {\n const payload = decodeTokenPart(payloadPart) as Partial<HostedTokenPayload>;\n if (\n payload.v !== 2 ||\n payload.aud !== surface ||\n typeof payload.exp !== \"number\" ||\n payload.exp <= Date.now()\n ) {\n return null;\n }\n return isHostedMcpContext(payload.ctx) ? payload.ctx : null;\n } catch {\n return null;\n }\n}\n\n/**\n * MCP server spec injected into an agent session's MCP config so the agent\n * connects back to this node's runtime endpoint with its per-turn token.\n */\nexport function buildRuntimeMcpSpec(\n agent: AgentKind,\n ctx: RuntimeMcpContext,\n): Record<string, unknown> {\n const token = issueRuntimeMcpToken(ctx);\n const base = `http://127.0.0.1:${runtimePort}${RUNTIME_MCP_BASE_PATH}`;\n const query = `token=${encodeURIComponent(token)}`;\n if (agent === \"codex\") return { url: `${base}/mcp?${query}` };\n return {\n type: \"sse\" as const,\n url: `${base}/sse?${query}`,\n timeout: CLAUDE_MCP_TOOL_TIMEOUT_MS,\n ...(agent === \"maestro\" ? { lifecycle: \"turn\" as const } : {}),\n };\n}\n\nfunction hostedMcpCacheIdentity(surface: HostedMcpSurface, ctx: HostedMcpContext): string {\n let semanticContext: unknown;\n switch (surface) {\n case \"system-health\":\n semanticContext = {};\n break;\n case \"token-stats\":\n case \"agent-health\":\n semanticContext = { userId: ctx.userId };\n break;\n case \"task\":\n semanticContext = {\n userId: ctx.userId,\n topicTitle: ctx.topicTitle,\n topicId: ctx.topicId ?? null,\n };\n break;\n case \"wiki\":\n case \"skills\":\n semanticContext = {\n userId: ctx.userId,\n topicId: ctx.wikiTopicId ?? ctx.topicId ?? null,\n };\n break;\n case \"vault\":\n semanticContext = { userId: ctx.userId, cwd: ctx.cwd, agent: ctx.agent };\n break;\n case \"session-comm\":\n semanticContext = {\n userId: ctx.userId,\n topicTitle: ctx.topicTitle,\n topicId: ctx.topicId ?? null,\n subagentParentTopicId: ctx.subagentParentTopicId ?? null,\n depth: ctx.depth ?? 0,\n silent: ctx.silent ?? false,\n agent: ctx.agent,\n peerBridge: ctx.peerBridge ?? null,\n };\n break;\n }\n const digest = createHash(\"sha256\")\n .update(JSON.stringify([surface, semanticContext]))\n .digest(\"hex\")\n .slice(0, 24);\n return `hosted:${surface}:${digest}`;\n}\n\n/** Build an agent transport spec for one logical MCP surface on the shared runtime process. */\nexport function buildHostedMcpSpec(\n agent: AgentKind,\n surface: HostedMcpSurface,\n ctx: HostedMcpContext,\n): Record<string, unknown> {\n const token = issueHostedMcpToken(surface, ctx);\n const base = `http://127.0.0.1:${runtimePort}${RUNTIME_MCP_BASE_PATH}/${surface}`;\n const query = `token=${encodeURIComponent(token)}`;\n if (agent === \"codex\") return { url: `${base}/mcp?${query}` };\n const queryBound =\n surface === \"session-comm\" && (ctx.silent === true || ctx.peerBridge !== undefined);\n const lifecycle = queryBound ? \"turn\" : surface === \"session-comm\" ? \"session\" : \"process\";\n return {\n type: \"sse\" as const,\n url: `${base}/sse?${query}`,\n timeout: CLAUDE_MCP_TOOL_TIMEOUT_MS,\n ...(agent === \"maestro\"\n ? {\n lifecycle,\n cacheKey: hostedMcpCacheIdentity(surface, ctx),\n }\n : {}),\n };\n}\n",
19
19
  "export interface PeerSessionBridgeIpcConfig {\n url: string;\n token: string;\n}\n\nconst registrations: Array<{ id: symbol; config: PeerSessionBridgeIpcConfig }> = [];\n\nexport function registerPeerSessionBridgeIpcConfig(config: PeerSessionBridgeIpcConfig): () => void {\n const registration = { id: Symbol(\"peer-session-bridge-ipc\"), config: { ...config } };\n registrations.push(registration);\n let disposed = false;\n return () => {\n if (disposed) return;\n disposed = true;\n const index = registrations.findIndex((entry) => entry.id === registration.id);\n if (index >= 0) registrations.splice(index, 1);\n };\n}\n\nexport function peerSessionBridgeIpcEnv(): Record<string, string> | undefined {\n const active = registrations.at(-1)?.config;\n if (!active) return undefined;\n return {\n NEGOTIUM_PEER_SESSION_BRIDGE_URL: active.url,\n NEGOTIUM_PEER_SESSION_BRIDGE_TOKEN: active.token,\n };\n}\n",
20
20
  "import { type ChildProcess, execFileSync, spawn } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport {\n BASH_RS_BIN,\n BASH_RS_VERSION,\n BASHRS_SPILL_ROOT,\n BG_BASH_BASE_PORT,\n BG_BASH_MAX_PORT,\n} from \"#platform/config\";\nimport { delay } from \"#platform/delay\";\nimport { logger } from \"#platform/logger\";\nimport { deriveBgBashContextCapability } from \"./context\";\n\nexport function makeBgBashKey(_userId: string, _topic: string): string {\n return \"runtime\";\n}\n\ninterface BgBashInstance {\n process: ChildProcess;\n port: number;\n startedAt: number;\n lastUsedAt: number;\n}\n\nexport interface BackgroundBashManager {\n contextCapability(userId: string, topic: string): string;\n ensure(userId: string, topic: string): Promise<number>;\n clear(userId: string, topic: string): void;\n clearUser(userId: string): void;\n killAll(): Promise<void>;\n}\n\nexport interface BackgroundBashManagerOptions {\n /**\n * bash-rs executable. Defaults to the installed binary; injectable so a test\n * can drive the manager's bookkeeping with a fake `spawn` on a host that has\n * no binary at all.\n */\n bashRsBin?: string;\n basePort?: number;\n maxPort?: number;\n capability?: string;\n serverId?: string;\n env?: NodeJS.ProcessEnv;\n fetch?: typeof globalThis.fetch;\n now?: () => number;\n delay?: (milliseconds: number) => Promise<void>;\n portPids?: (port: number) => readonly number[];\n spawn?: (\n command: string,\n args: readonly string[],\n options: Parameters<typeof spawn>[2],\n ) => ChildProcess;\n}\n\nfunction defaultPortPids(port: number): number[] {\n try {\n return execFileSync(\"lsof\", [\"-i\", `:${port}`, \"-t\"], { stdio: \"pipe\" })\n .toString()\n .trim()\n .split(\"\\n\")\n .map((pid) => Number.parseInt(pid, 10))\n .filter((pid) => !Number.isNaN(pid));\n } catch {\n return [];\n }\n}\n\n/** Create a fully isolated manager. All mutable process/port/context state belongs to the caller. */\nexport function createBackgroundBashManager(\n options: BackgroundBashManagerOptions = {},\n): BackgroundBashManager {\n const instances = new Map<string, BgBashInstance>();\n const usedPorts = new Set<number>();\n const spawning = new Map<string, Promise<number>>();\n const knownContexts = new Map<string, { userId: string; topic: string }>();\n const runtimeCapability = options.capability ?? randomBytes(32).toString(\"hex\");\n const runtimeServerId = options.serverId ?? randomBytes(16).toString(\"hex\");\n const bashRsBin = options.bashRsBin ?? BASH_RS_BIN;\n const basePort = options.basePort ?? BG_BASH_BASE_PORT;\n const maxPort = options.maxPort ?? BG_BASH_MAX_PORT;\n const fetchImpl = options.fetch ?? globalThis.fetch;\n const now = options.now ?? Date.now;\n const wait = options.delay ?? delay;\n const portPids = options.portPids ?? defaultPortPids;\n const spawnImpl =\n options.spawn ?? ((command, args, spawnOptions) => spawn(command, [...args], spawnOptions));\n\n function contextKey(userId: string, topic: string): string {\n return `${userId}\\0${topic}`;\n }\n\n function contextCapability(userId: string, topic: string): string {\n return deriveBgBashContextCapability(runtimeCapability, userId, topic);\n }\n\n async function allocatePort(excludedPorts: ReadonlySet<number> = new Set()): Promise<number> {\n for (let port = basePort; port <= maxPort; port++) {\n if (usedPorts.has(port) || excludedPorts.has(port)) continue;\n usedPorts.add(port);\n if (portPids(port).length > 0) {\n usedPorts.delete(port);\n continue;\n }\n return port;\n }\n throw new Error(\n `No available ports for background-bash (range ${basePort}-${maxPort}, ${instances.size} active)`,\n );\n }\n\n async function isHealthy(port: number): Promise<boolean> {\n try {\n const response = await fetchImpl(`http://127.0.0.1:${port}/health`, {\n signal: AbortSignal.timeout(2000),\n });\n if (!response.ok) return false;\n // Confirm this port answers for *our* spawned process rather than a\n // stale one left behind by a previous manager instance.\n const body = await response.text();\n try {\n const parsed = JSON.parse(body);\n return (\n Boolean(parsed) && typeof parsed === \"object\" && parsed.instance_id === runtimeServerId\n );\n } catch {\n return false;\n }\n } catch {\n return false;\n }\n }\n\n function killRuntime(): void {\n const key = \"runtime\";\n const instance = instances.get(key);\n if (!instance) return;\n try {\n instance.process.kill(\"SIGTERM\");\n } catch {}\n usedPorts.delete(instance.port);\n instances.delete(key);\n logger.info({ key, port: instance.port }, \"background-bash server killed\");\n }\n\n async function spawnServer(\n key: string,\n reservedPort?: number,\n excludedPorts: ReadonlySet<number> = new Set(),\n ): Promise<number> {\n // bash-rs is the only implementation. A TS server used to stand in when the\n // binary was absent, but the two agreed on the HTTP protocol while exposing\n // different MCP tool names (bash_run vs background_bash_run), so which one\n // spawned silently changed the tool surface an agent saw. Failing loudly\n // beats serving a different API than the caller was told to expect.\n //\n // Checked before allocating: the caller retries once per turn, and a port\n // reserved by a throw is never released, so allocating first leaked one\n // port per attempt until the range was exhausted and the real cause was\n // buried under \"No available ports\".\n if (!bashRsBin) {\n throw new Error(\n `background-bash requires the bash-rs ${BASH_RS_VERSION} binary; run install-bash-rs.mjs (or set NEGOTIUM_BASH_RS_BIN)`,\n );\n }\n const port = reservedPort ?? (await allocatePort(excludedPorts));\n const process = spawnImpl(bashRsBin, [String(port)], {\n stdio: \"ignore\",\n detached: false,\n env: {\n ...(options.env ?? globalThis.process.env),\n NEGOTIUM_BG_BASH_CAPABILITY: runtimeCapability,\n NEGOTIUM_BG_BASH_SERVER_ID: runtimeServerId,\n BASHRS_HTTP_CAPABILITY: runtimeCapability,\n BASHRS_INSTANCE_ID: runtimeServerId,\n BASHRS_SPILL_ROOT,\n },\n });\n\n process.once(\"error\", (error) => {\n logger.error({ err: error, key }, \"background-bash server error\");\n if (instances.get(key)?.process === process) {\n usedPorts.delete(port);\n instances.delete(key);\n }\n });\n process.once(\"exit\", (code) => {\n logger.info({ key, code }, \"background-bash server exited\");\n if (instances.get(key)?.process === process) {\n usedPorts.delete(port);\n instances.delete(key);\n }\n });\n\n const timestamp = now();\n instances.set(key, { process, port, startedAt: timestamp, lastUsedAt: timestamp });\n const started = now();\n while (now() - started < 8_000) {\n if (process.exitCode !== null) {\n const nextExcluded = new Set(excludedPorts);\n nextExcluded.add(port);\n return spawnServer(key, undefined, nextExcluded);\n }\n if (await isHealthy(port)) return port;\n await wait(200);\n }\n killRuntime();\n throw new Error(`background-bash server failed health check after spawn on port ${port}`);\n }\n\n async function ensure(userId: string, topic: string): Promise<number> {\n const key = makeBgBashKey(userId, topic);\n knownContexts.set(contextKey(userId, topic), { userId, topic });\n const inProgress = spawning.get(key);\n if (inProgress) return inProgress;\n\n const promise = (async () => {\n const existing = instances.get(key);\n if (existing && !existing.process.killed && existing.process.exitCode === null) {\n if (await isHealthy(existing.port)) {\n existing.lastUsedAt = now();\n return existing.port;\n }\n killRuntime();\n } else if (existing) {\n usedPorts.delete(existing.port);\n instances.delete(key);\n }\n return spawnServer(key);\n })().finally(() => spawning.delete(key));\n spawning.set(key, promise);\n return promise;\n }\n\n function clear(userId: string, topic: string): void {\n knownContexts.delete(contextKey(userId, topic));\n const instance = instances.get(\"runtime\");\n if (!instance) return;\n const query = new URLSearchParams({\n user: userId,\n topic,\n capability: contextCapability(userId, topic),\n });\n void fetchImpl(`http://127.0.0.1:${instance.port}/contexts?${query}`, {\n method: \"DELETE\",\n }).catch(() => {});\n }\n\n function clearUser(userId: string): void {\n for (const context of [...knownContexts.values()]) {\n if (context.userId === userId) clear(context.userId, context.topic);\n }\n }\n\n async function killAll(): Promise<void> {\n const entries = [...instances.values()];\n for (const instance of entries) {\n try {\n instance.process.kill(\"SIGTERM\");\n } catch {}\n }\n instances.clear();\n usedPorts.clear();\n knownContexts.clear();\n const deadline = now() + 3000;\n await Promise.all(\n entries.map(\n (instance) =>\n new Promise<void>((resolve) => {\n if (instance.process.exitCode !== null || instance.process.killed) return resolve();\n instance.process.once(\"exit\", resolve);\n instance.process.once(\"error\", resolve);\n const timer = setTimeout(resolve, Math.max(0, deadline - now()));\n timer.unref?.();\n }),\n ),\n );\n }\n\n return { contextCapability, ensure, clear, clearUser, killAll };\n}\n\nconst defaultManager = createBackgroundBashManager();\n\nexport const bgBashContextCapability = defaultManager.contextCapability;\nexport const ensureBgBash = defaultManager.ensure;\nexport const killBgBash = defaultManager.clear;\nexport const killBgBashForUser = defaultManager.clearUser;\nexport const killAllBgBash = defaultManager.killAll;\n",
@@ -31,11 +31,12 @@
31
31
  "import { FILE_TAG_REGEX } from \"#platform/config\";\nimport type { UnifiedEvent } from \"#types\";\n\n/**\n * Yield `file` events for explicit [FILE:...] tags in `text`.\n * Shared between provider implementations (claude.ts, codex.ts, maestro) so the\n * fallback tag recognition rule stays in one place.\n */\nexport function* extractFileEvents(text: string, source: string): Generator<UnifiedEvent> {\n const tagRegex = new RegExp(FILE_TAG_REGEX.source, \"gi\");\n let match: RegExpExecArray | null = tagRegex.exec(text);\n while (match !== null) {\n yield { type: \"file\", path: match[1], source, origin: \"tag\" };\n match = tagRegex.exec(text);\n }\n}\n\n/** Absolute paths referenced by explicit `[FILE:/abs/path]` tags, deduped,\n * in order of first appearance. Channel adapters use this to send produced\n * files alongside the text. */\nexport function extractFileTagPaths(text: string): string[] {\n const seen = new Set<string>();\n for (const event of extractFileEvents(text, \"tag\")) {\n if (event.type === \"file\") seen.add(event.path);\n }\n return [...seen];\n}\n\n/** Remove `[FILE:...]` tags from outbound text — the files are delivered as\n * real attachments by the channel, so the raw tags are just noise. */\nexport function stripFileTags(text: string): string {\n return text.replace(new RegExp(FILE_TAG_REGEX.source, \"gi\"), \"\").trim();\n}\n",
32
32
  "/**\n * Stringify an unknown thrown value for logging or user-visible messages.\n * Default fallback is `String(e)`. Pass an explicit fallback (e.g. \"unknown\")\n * to override what non-Error throws turn into.\n */\nexport function errMsg(e: unknown, fallback?: string): string {\n if (e instanceof Error) return e.message;\n return fallback ?? String(e);\n}\n",
33
33
  "/** Default latest-request context occupancy that triggers a warning. */\nexport const DEFAULT_CONTEXT_WARNING_RATIO = 0.8;\n\n/** Provider-neutral context occupancy input for public consumers. */\nexport interface ContextOccupancy {\n contextTokens?: number | null;\n contextWindow?: number | null;\n}\n\n/** Minimal Claude request usage shape; intentionally independent of the Anthropic SDK types. */\nexport interface ClaudeRequestTokenUsage {\n input_tokens?: number | null;\n output_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n cache_read_input_tokens?: number | null;\n}\n\nexport interface ContextWarningTextOptions {\n topicTitle: string;\n usage: ContextOccupancy;\n /** Whether this consumer implements the compact command. Defaults to true. */\n supportsCompact?: boolean;\n compactCommand?: string;\n newCommand?: string;\n}\n\nexport interface ContextWarningOptions extends ContextWarningTextOptions {\n /** Caller-owned dedupe key, normally scoped to one user/topic session. */\n key: string;\n thresholdRatio?: number;\n}\n\n/** Caller-owned state. Create one per runtime/store boundary to avoid global key collisions. */\nexport interface ContextWarningState {\n readonly warnedKeys: Set<string>;\n}\n\nexport function createContextWarningState(\n warnedKeys: Set<string> = new Set(),\n): ContextWarningState {\n return { warnedKeys };\n}\n\n/** Latest-request context occupancy, or null when the provider did not report valid values. */\nexport function contextUsageRatio(usage: ContextOccupancy): number | null {\n const used = usage.contextTokens;\n const window = usage.contextWindow;\n if (\n used === undefined ||\n used === null ||\n window === undefined ||\n window === null ||\n !Number.isFinite(used) ||\n !Number.isFinite(window) ||\n used < 0 ||\n window <= 0\n ) {\n return null;\n }\n return used / window;\n}\n\nexport function shouldWarnForContext(\n usage: ContextOccupancy,\n thresholdRatio = DEFAULT_CONTEXT_WARNING_RATIO,\n): boolean {\n if (!Number.isFinite(thresholdRatio) || thresholdRatio < 0) return false;\n const ratio = contextUsageRatio(usage);\n return ratio !== null && ratio >= thresholdRatio;\n}\n\nexport function formatContextTokenCount(value: number): string {\n if (!Number.isFinite(value) || value < 0) return \"0K\";\n return value >= 1_000_000 ? `${(value / 1_000_000).toFixed(1)}M` : `${Math.round(value / 1000)}K`;\n}\n\n/** Build the shared warning copy while adapting command guidance to consumer capabilities. */\nexport function buildContextWarningText(options: ContextWarningTextOptions): string {\n const ratio = contextUsageRatio(options.usage) ?? 0;\n const used = options.usage.contextTokens ?? 0;\n const window = options.usage.contextWindow ?? 0;\n const compactCommand = options.compactCommand ?? \"/compact\";\n const newCommand = options.newCommand ?? \"/new\";\n const supportsCompact = options.supportsCompact ?? true;\n const guidance = supportsCompact\n ? `이 토픽에서 ${compactCommand} 를 입력하면 핵심 맥락을 요약해 이어가면서 context를 줄입니다. 완전히 새로 시작하려면 ${newCommand} 를 사용하세요.\\n\\n두 명령 모두 지금까지 주고받은 보이는 대화 내역은 그대로 유지합니다.`\n : `완전히 새 context로 시작하려면 ${newCommand} 를 사용하세요. 지금까지 주고받은 보이는 대화 내역은 그대로 유지합니다.`;\n\n return (\n `⚠️ \"${options.topicTitle}\" context가 ${Math.round(ratio * 100)}% 찼어요 ` +\n `(${formatContextTokenCount(used)} / ${formatContextTokenCount(window)} 토큰)\\n\\n` +\n guidance\n );\n}\n\n/**\n * Return and dedupe the next warning using state owned by the caller.\n * The key is marked only when the threshold is actually reached.\n */\nexport function nextContextWarning(\n state: ContextWarningState,\n options: ContextWarningOptions,\n): string | null {\n if (!shouldWarnForContext(options.usage, options.thresholdRatio)) return null;\n if (state.warnedKeys.has(options.key)) return null;\n state.warnedKeys.add(options.key);\n return buildContextWarningText(options);\n}\n\nexport function clearContextWarning(state: ContextWarningState, key: string): void {\n state.warnedKeys.delete(key);\n}\n\n/** Latest Claude request context tokens using the same fields Negotium providers receive. */\nexport function claudeRequestContextTokens(usage: ClaudeRequestTokenUsage): number | null {\n const values = [\n usage.input_tokens,\n usage.cache_creation_input_tokens,\n usage.cache_read_input_tokens,\n usage.output_tokens,\n ];\n if (values.every((value) => value === undefined || value === null)) return null;\n if (\n values.some(\n (value) => value !== undefined && value !== null && (!Number.isFinite(value) || value < 0),\n )\n ) {\n return null;\n }\n return values.reduce<number>((sum, value) => sum + (value ?? 0), 0);\n}\n",
34
- "import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, realpathSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport type {\n FileChangeItem,\n McpToolCallItem,\n ModelReasoningEffort,\n SandboxMode,\n ThreadOptions,\n} from \"@openai/codex-sdk\";\nimport { Codex } from \"@openai/codex-sdk\";\nimport {\n ensureCodexModelCache,\n writeCodexCatalogWithNativeMultiAgentDisabled,\n} from \"#agents/codex-native-multi-agent\";\nimport {\n acquireCodexSpawnLock,\n findNewCodexChildren,\n killCodexTrees,\n registerOwnedCodexPids,\n snapshotCodexChildren,\n unregisterOwnedCodexPids,\n} from \"#agents/codex-tree-kill\";\nimport {\n hostedCodexAuthFilePath,\n hostedCodexHomePath,\n hostedMcpServers,\n} from \"#agents/execution-host\";\nimport {\n type CodexTokenTotals,\n migrateCodexRolloutNativeMultiAgentMetadata,\n readCodexPatchCallIds,\n readLatestCodexContextUsage,\n readLatestCodexPatchPreview,\n readLatestCodexTokenTotals,\n} from \"#agents/rollout/codex\";\nimport { buildNumberedDiffSummary } from \"#agents/tool-format\";\nimport { extractFileEvents } from \"#media/file-events\";\nimport { errMsg } from \"#platform/error\";\nimport { logger } from \"#platform/logger\";\nimport {\n browserOwnerCapability,\n browserOwnerForContext,\n CODEX_BROWSER_CAPABILITY_ENV,\n} from \"#platform/mcp-config\";\nimport type { AgentQueryOptions, EffortLevel, UnifiedEvent } from \"#types\";\n\ntype CodexEventUsage = {\n input_tokens: number;\n output_tokens: number;\n cached_input_tokens?: number;\n cache_write_input_tokens?: number;\n};\n\nfunction sameCodexUsage(usage: CodexEventUsage, total: CodexTokenTotals): boolean {\n return (\n usage.input_tokens === total.inputTokens &&\n usage.output_tokens === total.outputTokens &&\n (usage.cached_input_tokens ?? 0) === total.cachedInputTokens &&\n (usage.cache_write_input_tokens ?? 0) === total.cacheWriteInputTokens\n );\n}\n\n/**\n * Some Codex CLI builds expose the thread-lifetime counter on turn.completed\n * despite the SDK declaring turn-local usage. Only subtract a rollout baseline\n * when the event exactly matches the rollout's cumulative counter.\n */\nexport function normalizeCodexTurnUsage(\n usage: CodexEventUsage,\n baseline: CodexTokenTotals | undefined,\n rolloutTotal: CodexTokenTotals | undefined,\n): CodexEventUsage {\n if (!baseline || !rolloutTotal || !sameCodexUsage(usage, rolloutTotal)) return usage;\n const delta = (current: number, previous: number) =>\n current >= previous ? current - previous : current;\n return {\n input_tokens: delta(rolloutTotal.inputTokens, baseline.inputTokens),\n output_tokens: delta(rolloutTotal.outputTokens, baseline.outputTokens),\n cached_input_tokens: delta(rolloutTotal.cachedInputTokens, baseline.cachedInputTokens),\n cache_write_input_tokens: delta(\n rolloutTotal.cacheWriteInputTokens,\n baseline.cacheWriteInputTokens,\n ),\n };\n}\n\n/**\n * Pass Otium's EffortLevel through to Codex's ModelReasoningEffort.\n *\n * Storage validation (`getRegistry(\"codex\").validateEffort` in the repository\n * setters) guarantees that any effort persisted on a codex topic is one of\n * codex's accepted set (`low | medium | high | xhigh`), so the SDK shape and\n * the stored shape are identical for codex topics. A `max` or `minimal`\n * reaching this function means storage validation was bypassed — we throw\n * instead of silently demoting so the bug surfaces rather than masking itself.\n */\nfunction mapEffort(effort?: EffortLevel): ModelReasoningEffort | undefined {\n if (!effort) return undefined;\n if (effort === \"max\" || (effort as string) === \"minimal\") {\n throw new Error(\n `codexProvider received effort='${effort}', which codex does not support — storage validation was bypassed`,\n );\n }\n return effort as ModelReasoningEffort;\n}\n\n/**\n * Convert Otium's mcp-config output (Claude SDK shape) to Codex's\n * `config.mcp_servers` shape. Codex supports two transports:\n * - stdio: `{ command, args?, env? }`\n * - streamable HTTP: `{ url }` (verified via `codex mcp add --url`)\n *\n * Entries with the SSE transport shape (`{ type: \"sse\", url }`) are dropped:\n * codex doesn't speak SSE. Callers must produce the streamable HTTP shape\n * for codex by passing `agent: \"codex\"` into the `playwright.build()` arm\n * in `mcp-config.ts` (which switches `/sse` → `/mcp`).\n */\ntype CodexMcpTimeouts = {\n enabled?: boolean;\n startup_timeout_sec?: number;\n tool_timeout_sec?: number;\n};\ntype CodexStdioServer = {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n} & CodexMcpTimeouts;\ntype CodexHttpServer = {\n url: string;\n http_headers?: Record<string, string>;\n env_http_headers?: Record<string, string>;\n} & CodexMcpTimeouts;\ntype CodexMcpServer = CodexStdioServer | CodexHttpServer;\n\nconst CODEX_MCP_SERVER_NAME_OVERRIDES: Record<string, string> = {\n // Codex merges per-turn `--config mcp_servers.<name>.*` overrides with the\n // user's global ~/.codex/config.toml. `playwright` is a common global stdio\n // server name, and adding Otium's per-topic HTTP `url` to that same table\n // makes Codex fail config parsing with \"url is not supported for stdio\".\n playwright: \"otium_playwright\",\n};\n\nfunction codexMcpServerName(name: string): string {\n return CODEX_MCP_SERVER_NAME_OVERRIDES[name] ?? name;\n}\n\nfunction globalCodexMcpServerNames(authFilePath: string): string[] {\n const configPath = join(dirname(authFilePath), \"config.toml\");\n if (!existsSync(configPath)) return [];\n try {\n const names = new Set<string>();\n for (const line of readFileSync(configPath, \"utf8\").split(\"\\n\")) {\n const match = line.match(\n /^\\s*\\[\\s*mcp_servers\\.((?:\"(?:\\\\.|[^\"])*\")|(?:'[^']*')|[^.\\]\\s]+)(?:[.\\]])/,\n );\n const raw = match?.[1];\n if (!raw) continue;\n if (raw.startsWith('\"')) {\n try {\n names.add(JSON.parse(raw));\n } catch {\n // Ignore malformed TOML; Codex itself will report the config error.\n }\n } else if (raw.startsWith(\"'\")) {\n names.add(raw.slice(1, -1));\n } else {\n names.add(raw);\n }\n }\n return [...names];\n } catch (error) {\n logger.warn({ err: error, configPath }, \"codexProvider: failed to inspect global MCP config\");\n return [];\n }\n}\n\nfunction parsePositiveInt(value: string | undefined, fallback: number): number {\n if (!value) return fallback;\n const parsed = Number.parseInt(value, 10);\n return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction withCodexMcpServerOverrides(_name: string, server: CodexMcpServer): CodexMcpServer {\n // For codex, Otium launches MCP servers via node + tsx (see serverLaunch in\n // mcp-config.ts), which transpiles the .ts on the fly — cold start is slower\n // than `bun run`, so give the handshake a generous startup window. codex's\n // default startup timeout is short enough that a heavier server can miss it.\n return {\n startup_timeout_sec: parsePositiveInt(process.env.CODEX_MCP_STARTUP_TIMEOUT_SEC, 30),\n ...server,\n };\n}\n\nexport function toCodexMcpServers(\n claudeShape: Record<string, unknown>,\n): Record<string, CodexMcpServer> {\n // Codex merges turn config with ~/.codex/config.toml instead of replacing it.\n // Disable common global browser stdio servers so browser state can only flow\n // through Negotium's long-lived, owner-scoped HTTP server.\n const disabledBrowserStdio = (): CodexStdioServer => ({\n command: process.execPath,\n args: [\"-e\", \"process.exit(0)\"],\n enabled: false,\n });\n const out: Record<string, CodexMcpServer> = {\n playwright: disabledBrowserStdio(),\n \"browser-rs\": disabledBrowserStdio(),\n patchright: disabledBrowserStdio(),\n };\n for (const [name, srv] of Object.entries(claudeShape)) {\n if (!srv || typeof srv !== \"object\") continue;\n const s = srv as Record<string, unknown>;\n const codexName = codexMcpServerName(name);\n if (typeof s.command === \"string\") {\n out[codexName] = withCodexMcpServerOverrides(name, {\n command: s.command,\n ...(Array.isArray(s.args) ? { args: s.args as string[] } : {}),\n ...(s.env && typeof s.env === \"object\" ? { env: s.env as Record<string, string> } : {}),\n });\n continue;\n }\n if (typeof s.url === \"string\" && s.type !== \"sse\") {\n out[codexName] = withCodexMcpServerOverrides(name, {\n url: s.url,\n ...(s.http_headers && typeof s.http_headers === \"object\"\n ? { http_headers: s.http_headers as Record<string, string> }\n : {}),\n ...(s.env_http_headers && typeof s.env_http_headers === \"object\"\n ? { env_http_headers: s.env_http_headers as Record<string, string> }\n : {}),\n });\n }\n }\n return out;\n}\n\nfunction isMissingCodexRolloutError(err: unknown): boolean {\n const msg = errMsg(err);\n return /no rollout found|thread\\/resume failed/i.test(msg);\n}\n\n/**\n * Render an `mcp_tool_call` item's terminal payload into a short string for\n * the unified `tool_result` event. The SDK shape is\n * `result?: { content: ContentBlock[]; structured_content: unknown }` on\n * success, or `error?: { message: string }` on failure — neither is a raw\n * string, which is why the previous `typeof result === \"string\"` branch was\n * unreachable. Truncate to 200 chars to match command_execution behavior.\n */\nfunction summarizeMcpToolCallResult(item: McpToolCallItem): string {\n if (item.error) return item.error.message.slice(0, 200);\n if (!item.result) return \"\";\n const blocks = Array.isArray(item.result.content) ? item.result.content : [];\n const text = blocks\n .map((b) => {\n if (b && typeof b === \"object\" && \"type\" in b && b.type === \"text\" && \"text\" in b) {\n return String((b as { text?: unknown }).text ?? \"\");\n }\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\");\n if (text) return text.slice(0, 200);\n // Fall back to a JSON dump of structured_content for non-text content blocks.\n return JSON.stringify(item.result.structured_content ?? \"\").slice(0, 200);\n}\n\nconst CODEX_DIFF_FILE_LIMIT = 512 * 1024;\nconst CODEX_DIFF_BASELINE_FILE_LIMIT = 200;\nconst CODEX_DIFF_BASELINE_BYTE_LIMIT = 16 * 1024 * 1024;\n\nfunction canonicalPath(path: string): string {\n try {\n return realpathSync(resolve(path));\n } catch {\n return resolve(path);\n }\n}\n\nfunction textFile(path: string, maxBytes = CODEX_DIFF_FILE_LIMIT): string | null | undefined {\n if (!existsSync(path)) return null;\n try {\n const byteLimit = Math.min(CODEX_DIFF_FILE_LIMIT, Math.max(0, maxBytes));\n if (statSync(path).size > byteLimit) return undefined;\n const content = readFileSync(path);\n if (content.byteLength > byteLimit || content.includes(0)) return undefined;\n return content.toString(\"utf8\");\n } catch {\n return undefined;\n }\n}\n\ninterface CodexFilePreview {\n before?: string;\n after?: string;\n diff_preview?: string;\n}\n\n/**\n * Codex's SDK exposes only path + change kind, not the patch body. Capture the\n * dirty worktree at turn start and compare each completed file_change against\n * that moving baseline. This preserves user edits that already existed before\n * the turn and gives repeated edits to the same file their own +/- preview.\n */\nclass CodexFilePreviewTracker {\n readonly #cwd: string;\n readonly #root: string | null;\n readonly #baseline = new Map<string, string | null | undefined>();\n #baselineAvailable = false;\n\n constructor(cwd: string) {\n this.#cwd = canonicalPath(cwd);\n const root = this.#git([\"rev-parse\", \"--show-toplevel\"], this.#cwd)?.trim();\n this.#root = root ? canonicalPath(root) : null;\n if (!this.#root) return;\n const status = this.#git([\"status\", \"--porcelain=v1\", \"-z\", \"--untracked-files=all\"]);\n if (status === undefined) return;\n this.#baselineAvailable = true;\n let loadedFiles = 0;\n let loadedBytes = 0;\n const records = status.split(\"\\0\");\n for (let index = 0; index < records.length; index += 1) {\n const record = records[index];\n if (!record || record.length < 4) continue;\n const code = record.slice(0, 2);\n const path = record.slice(3);\n const remainingBytes = CODEX_DIFF_BASELINE_BYTE_LIMIT - loadedBytes;\n const content =\n loadedFiles < CODEX_DIFF_BASELINE_FILE_LIMIT && remainingBytes > 0\n ? textFile(resolve(this.#root, path), remainingBytes)\n : undefined;\n this.#baseline.set(path, content);\n if (typeof content === \"string\") {\n loadedFiles += 1;\n loadedBytes += Buffer.byteLength(content);\n }\n if (/[RC]/.test(code)) index += 1;\n }\n }\n\n preview(path: string, succeeded: boolean): CodexFilePreview {\n if (!this.#root || !this.#baselineAvailable || !succeeded) return {};\n const absolute = canonicalPath(isAbsolute(path) ? path : resolve(this.#cwd, path));\n const relativePath = relative(this.#root, absolute);\n if (!relativePath || relativePath.startsWith(\"..\") || isAbsolute(relativePath)) return {};\n\n const before = this.#baseline.has(relativePath)\n ? this.#baseline.get(relativePath)\n : this.#headFile(relativePath);\n const after = textFile(absolute);\n this.#baseline.set(relativePath, after);\n if (before === undefined || after === undefined) return {};\n\n const diff = buildNumberedDiffSummary(before ?? \"\", after ?? \"\");\n return {\n ...(diff.before !== undefined ? { before: diff.before } : {}),\n ...(diff.after !== undefined ? { after: diff.after } : {}),\n ...(diff.diffPreview !== undefined ? { diff_preview: diff.diffPreview } : {}),\n };\n }\n\n #headFile(path: string): string | null | undefined {\n const content = this.#git([\"show\", `HEAD:${path}`]);\n if (content === undefined) return null;\n return Buffer.byteLength(content) > CODEX_DIFF_FILE_LIMIT || content.includes(\"\\0\")\n ? undefined\n : content;\n }\n\n #git(args: string[], cwd = this.#root ?? undefined): string | undefined {\n try {\n return execFileSync(\"git\", [\"-C\", cwd ?? \".\", ...args], {\n encoding: \"utf8\",\n maxBuffer: CODEX_DIFF_FILE_LIMIT * 4,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n } catch {\n return undefined;\n }\n }\n}\n\n// Codex emits file_change only after the patch finishes, so surface the\n// completed changes immediately as paired tool_use/tool_result events.\nasync function fileChangeEvents(\n item: FileChangeItem,\n previews: CodexFilePreviewTracker,\n cwd: string,\n threadId: string | null | undefined,\n consumedPatchCallIds: Set<string>,\n): Promise<UnifiedEvent[]> {\n const expectedPaths = item.changes.map((change) =>\n isAbsolute(change.path) ? change.path : resolve(cwd, change.path),\n );\n let nativePreview: ReturnType<typeof readLatestCodexPatchPreview>;\n // The SDK can emit item.completed a few milliseconds before Codex flushes\n // patch_apply_end to its rollout. Give that write a brief head start before\n // the first lookup, which also avoids matching an older patch for the same\n // path on resumed threads.\n if (threadId && item.status === \"completed\") {\n await new Promise((resolveDelay) => setTimeout(resolveDelay, 20));\n nativePreview = readLatestCodexPatchPreview(threadId, expectedPaths, consumedPatchCallIds);\n }\n for (const delayMs of [20, 40, 80, 120]) {\n if (nativePreview || !threadId || item.status !== \"completed\") break;\n await new Promise((resolveDelay) => setTimeout(resolveDelay, delayMs));\n nativePreview = readLatestCodexPatchPreview(threadId, expectedPaths, consumedPatchCallIds);\n }\n if (nativePreview) consumedPatchCallIds.add(nativePreview.callId);\n\n return item.changes.flatMap((change, index) => {\n const name = change.kind === \"add\" ? \"Write\" : change.kind === \"delete\" ? \"Delete\" : \"Edit\";\n const toolUseId = `${item.id}:${index}`;\n const success = item.status === \"completed\";\n const nativeChange = nativePreview?.changes[index];\n // Keep the moving filesystem baseline current even when the native patch\n // supplies the display preview. A later edit to the same file may need the\n // filesystem fallback, which must compare against this edit—not turn start.\n const fallbackPreview = previews.preview(change.path, success);\n const preview =\n success && nativeChange\n ? {\n ...(nativeChange.before !== undefined ? { before: nativeChange.before } : {}),\n ...(nativeChange.after !== undefined ? { after: nativeChange.after } : {}),\n ...(nativeChange.diffPreview !== undefined\n ? { diff_preview: nativeChange.diffPreview }\n : {}),\n }\n : fallbackPreview;\n return [\n {\n type: \"tool_use\" as const,\n name,\n input: { file_path: change.path, change_kind: change.kind, ...preview },\n toolUseId,\n },\n {\n type: \"tool_result\" as const,\n toolUseId,\n content: success\n ? `${change.kind} applied: ${change.path}`\n : `${change.kind} failed: ${change.path}`,\n // Explicit failure flag so clients don't have to parse the content\n // string to tell a failed file change from an applied one.\n ...(success ? {} : { isError: true as const }),\n },\n ];\n });\n}\n\nfunction promptForThread(opts: AgentQueryOptions, includeSystemPrompt: boolean): string {\n return includeSystemPrompt && opts.systemPrompt\n ? `[System Instructions]\\n${opts.systemPrompt}\\n\\n${opts.prompt}`\n : opts.prompt;\n}\n\n/**\n * Start a streamed turn and identify the codex PIDs we spawned, holding the\n * global spawn lock across the full window from baseline → first event.\n *\n * Why hold the lock across iteration: `@openai/codex-sdk`'s `runStreamed()`\n * returns a lazy async generator object. The actual `child_process.spawn()`\n * call happens on the first `iterator.next()`, not when `runStreamed()` is\n * awaited (see `node_modules/@openai/codex-sdk/dist/index.js:51-93,238`).\n * If we released the lock after `await runStreamed(...)`, a concurrent\n * codex caller's baseline would race against our actual spawn and one\n * caller would mis-attribute the other's PID.\n *\n * Returns the iterator (positioned just past the first event) plus the\n * first event itself, so the streaming loop can re-emit it before\n * resuming `iterator.next()`.\n */\ntype StartResult = {\n iter: AsyncIterator<unknown>;\n firstEvent: unknown;\n done: boolean;\n};\n\nasync function closeIterator(iter: AsyncIterator<unknown>): Promise<void> {\n try {\n await iter.return?.();\n } catch (err) {\n logger.warn({ err }, \"codexProvider: failed to close codex event iterator\");\n }\n}\n\n/**\n * Bound the spawn→first-event window. `thread.started` normally arrives within\n * a few seconds, so if NOTHING comes back in this window the codex turn is\n * genuinely stuck at startup (the bare-`/codex` hang symptom). We surface a\n * clear error fast instead of waiting out the much longer mid-stream heartbeat\n * (8 min) — a stuck startup never recovers, and retrying it is futile. Once the\n * first event arrives, the normal heartbeat governs long-running work.\n */\nconst CODEX_STARTUP_TIMEOUT_MS = 90_000;\n\nasync function startStreamedWithTracking(\n thread: ReturnType<Codex[\"startThread\"]>,\n prompt: string,\n abortSignal: AbortSignal | undefined,\n trackedPids: { pids: number[] },\n): Promise<StartResult> {\n const release = await acquireCodexSpawnLock();\n try {\n const baseline = snapshotCodexChildren();\n const runResult = await thread.runStreamed(prompt, {\n ...(abortSignal ? { signal: abortSignal } : {}),\n });\n const iter = (runResult.events as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n // Force the first iterator step — this is when the SDK actually\n // child_process.spawn()s codex. After this awaits, the codex PID is\n // visible to pgrep as a child of our process.\n let first: IteratorResult<unknown>;\n // Startup watchdog: race the first event against CODEX_STARTUP_TIMEOUT_MS so\n // a codex that spawns but never emits anything can't hang the turn. On\n // timeout the iter.next() promise loses the race and we fall into the catch\n // below, which kills the spawned tree, closes the iterator, and rethrows the\n // clear error — surfaced to the user as an `error` event (no infinite wait).\n let startupTimer: ReturnType<typeof setTimeout> | undefined;\n try {\n const startupTimeout = new Promise<never>((_, reject) => {\n startupTimer = setTimeout(\n () =>\n reject(\n new Error(\n `Codex가 ${CODEX_STARTUP_TIMEOUT_MS / 1000}초 내 응답을 시작하지 않아 중단했습니다. 다시 시도해주세요.`,\n ),\n ),\n CODEX_STARTUP_TIMEOUT_MS,\n );\n });\n // Swallow a late rejection from the losing promise: if the startup\n // timeout wins the race, this dangling next() may settle later with\n // nobody awaiting it (would surface as an unhandledRejection).\n const nextP = iter.next();\n nextP.catch(() => {});\n first = await Promise.race([nextP, startupTimeout]);\n } catch (err) {\n // Abort OR startup-timeout after the SDK spawned codex but before the\n // first event resolves: the normal abort listener still sees no tracked\n // PID, so diff the baseline here and kill anything attributable before\n // propagating.\n const novel = findNewCodexChildren(baseline);\n if (novel.length > 0) {\n killCodexTrees(novel);\n }\n await closeIterator(iter);\n throw err;\n } finally {\n if (startupTimer) clearTimeout(startupTimer);\n }\n const novel = findNewCodexChildren(baseline);\n trackedPids.pids = novel;\n registerOwnedCodexPids(novel);\n return { iter, firstEvent: first.value, done: !!first.done };\n } finally {\n release();\n }\n}\n\n/**\n * Wrap an iterator into an AsyncIterable that first yields a pre-captured\n * `firstEvent` and then drains the underlying iterator. Lets the streaming\n * `for await` loop keep its existing switch over events without special-casing\n * the first iteration we already consumed during PID tracking.\n */\nfunction prependFirstEvent(\n iter: AsyncIterator<unknown>,\n firstEvent: unknown,\n alreadyDone: boolean,\n): AsyncIterable<unknown> {\n return {\n [Symbol.asyncIterator]() {\n let emittedFirst = false;\n let exhausted = alreadyDone;\n return {\n async next(): Promise<IteratorResult<unknown>> {\n if (!emittedFirst) {\n emittedFirst = true;\n if (alreadyDone) return { value: undefined, done: true };\n return { value: firstEvent, done: false };\n }\n if (exhausted) return { value: undefined, done: true };\n const r = await iter.next();\n if (r.done) exhausted = true;\n return r;\n },\n async return(value?: unknown): Promise<IteratorResult<unknown>> {\n exhausted = true;\n if (iter.return) return iter.return(value);\n return { value, done: true };\n },\n };\n },\n };\n}\n\n/**\n * Core Codex provider.\n * Same UnifiedEvent contract as claudeProvider. Uses @openai/codex-sdk.\n *\n * Notes:\n * - Codex has no `systemPrompt` option; prepend the current topic/system\n * instructions on every invocation, including resumed synthetic threads.\n * - Per-turn MCP isolation is achieved via CodexOptions.config.mcp_servers,\n * so the global ~/.codex/config.toml stays untouched.\n * - Streaming token-by-token text deltas are not exposed by the SDK; only\n * final agent_message and per-item updates. Callers that rely on\n * text_delta should still work because we yield a single text/result\n * event when the assistant message completes.\n */\nexport async function* codexProvider(opts: AgentQueryOptions): AsyncGenerator<UnifiedEvent> {\n const filePreviews = new CodexFilePreviewTracker(opts.cwd);\n // A resumed rollout may already contain patches for the same file. Mark\n // those calls consumed before this turn starts so a delayed new flush can\n // never be mistaken for the previous turn's edit.\n const consumedPatchCallIds = new Set(opts.sessionId ? readCodexPatchCallIds(opts.sessionId) : []);\n // Up-front auth file check — gives the user an actionable message\n // (\"`codex login` 으로 다시 로그인해주세요\") immediately instead of waiting\n // for the @openai/codex-sdk to spawn the codex binary and surface an\n // opaque OAuth failure on the first turn. Path is the default codex\n // location unless NEGOTIUM_CODEX_AUTH_FILE relocates it for this host.\n const codexAuthPath = hostedCodexAuthFilePath();\n if (!existsSync(codexAuthPath)) {\n yield {\n type: \"error\",\n content: `Codex auth file not found at ${codexAuthPath}. Run \\`codex login\\` to authenticate.`,\n };\n return;\n }\n\n let codexModelCatalogPath: string;\n try {\n const codexModelCachePath = await ensureCodexModelCache(codexAuthPath);\n codexModelCatalogPath = writeCodexCatalogWithNativeMultiAgentDisabled(\n codexAuthPath,\n codexModelCachePath,\n );\n if (opts.sessionId) migrateCodexRolloutNativeMultiAgentMetadata(opts.sessionId);\n } catch (err) {\n yield {\n type: \"error\",\n content: `Failed to enforce the Codex native multi-agent policy: ${errMsg(err)}`,\n };\n return;\n }\n\n const codexMcpServers = toCodexMcpServers(hostedMcpServers(opts));\n if (opts.toolPolicy) {\n const allowed = new Set(Object.keys(codexMcpServers));\n for (const name of globalCodexMcpServerNames(codexAuthPath)) {\n if (allowed.has(name)) continue;\n codexMcpServers[name] = {\n command: process.execPath,\n args: [\"-e\", \"process.exit(0)\"],\n enabled: false,\n };\n }\n }\n const browserOwner = browserOwnerForContext(opts);\n const scopedBrowserCapability =\n opts.playwrightCapability && browserOwner\n ? browserOwnerCapability(opts.playwrightCapability, browserOwner)\n : undefined;\n\n // Startup trace: codexProvider was otherwise silent until its first error or\n // heartbeat (8 min), so a stuck turn left \"0 lines of codex\" in the logs and\n // was impossible to localize (bug B). Record the resolved model/effort/cwd +\n // whether this is a fresh thread or a resume, so a future hang is pinpointed\n // to setup vs. the first stream step.\n logger.info(\n {\n model: opts.model ?? \"(sdk default)\",\n effort: opts.effort ?? \"(off)\",\n cwd: opts.cwd,\n cwdExists: existsSync(opts.cwd),\n resume: Boolean(opts.sessionId),\n mcpServerCount: Object.keys(codexMcpServers).length,\n },\n \"codexProvider: starting turn\",\n );\n\n const hostedCodexHome = hostedCodexHomePath();\n const inheritedCodexHome = process.env.CODEX_HOME || join(homedir(), \".codex\");\n const codexEnvironment =\n scopedBrowserCapability || resolve(hostedCodexHome) !== resolve(inheritedCodexHome)\n ? {\n ...Object.fromEntries(\n Object.entries(process.env).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n ),\n ),\n CODEX_HOME: hostedCodexHome,\n ...(scopedBrowserCapability\n ? { [CODEX_BROWSER_CAPABILITY_ENV]: scopedBrowserCapability }\n : {}),\n }\n : undefined;\n const codex = new Codex({\n ...(codexEnvironment ? { env: codexEnvironment } : {}),\n config: {\n // Otium exposes delegation through runtime.spawn_subagent so child work\n // gets its own room/card and its result is routed back to the parent.\n // Codex enables its provider-native collaboration tools from the user's\n // global config by default; explicitly turn that feature off so tools\n // such as spawn_agent/send_message cannot bypass Otium's orchestration\n // and so subagent rooms cannot recursively fan out through Codex.\n // Codex model metadata can override these flags. The authoritative\n // catalog above sets multi_agent_version=disabled as the hard stop; keep\n // all feature switches off as a second layer and for future CLI versions.\n features: { multi_agent: false, multi_agent_v2: false, enable_fanout: false },\n model_catalog_json: codexModelCatalogPath,\n mcp_servers: codexMcpServers,\n ...(opts.toolPolicy ? { sandbox_permissions: [] } : {}),\n },\n });\n\n const threadOptions: ThreadOptions = {\n workingDirectory: opts.cwd,\n skipGitRepoCheck: true,\n // Codex sandbox is intentionally disabled: Otium already assigns a managed\n // workspace cwd for the turn, and the bot is expected to act on it freely on\n // the user's behalf. SDK-level sandboxing would only constrain reach inside\n // that already-owned directory, which is not the threat model.\n sandboxMode: (opts.toolPolicy ? \"read-only\" : \"danger-full-access\") as SandboxMode,\n approvalPolicy: \"never\",\n ...(opts.toolPolicy\n ? {\n networkAccessEnabled: false,\n webSearchMode: \"disabled\" as const,\n webSearchEnabled: false,\n }\n : {}),\n ...(opts.model ? { model: opts.model } : {}),\n ...(opts.effort ? { modelReasoningEffort: mapEffort(opts.effort) } : {}),\n };\n\n let currentSessionId = opts.sessionId;\n let usageBaseline = currentSessionId ? readLatestCodexTokenTotals(currentSessionId) : undefined;\n\n // Codex SDK has no systemPrompt option. A resumed thread may have been\n // synthesized from a captured shell, so always refresh the current runtime\n // instructions instead of trusting historical developer/environment data.\n let thread = currentSessionId\n ? codex.resumeThread(currentSessionId, threadOptions)\n : codex.startThread(threadOptions);\n let prompt = promptForThread(opts, true);\n\n let agentTextSoFar = \"\";\n let currentAgentMessageId: string | undefined;\n let finalText = \"\";\n let stopReason = \"end_turn\";\n\n // Tree-kill instrumentation. The codex SDK spawns the `codex` binary as a\n // direct child of our process but does not expose the PID or place it in\n // its own process group. We identify our PIDs by diffing pgrep snapshots\n // around the SDK's first iterator step (when codex is actually spawned),\n // and SIGTERM the whole tree on abort with SIGKILL fallback inside\n // killCodexTrees().\n const trackedPids: { pids: number[] } = { pids: [] };\n const abortSignal = opts.abortController?.signal;\n const onAbortKill = () => {\n if (trackedPids.pids.length > 0) {\n killCodexTrees(trackedPids.pids);\n }\n };\n abortSignal?.addEventListener(\"abort\", onAbortKill, { once: true });\n\n // Heartbeat: if the Codex API emits no events within the window, abort the\n // current stream and resume the thread with a short continuation prompt.\n // The interval doubles each attempt (up to HEARTBEAT_MAX_MS) to avoid\n // interrupting genuinely long-running work on the first timeout.\n let heartbeatMs = 8 * 60 * 1000;\n let heartbeatAttempts = 0;\n const HEARTBEAT_MAX_MS = 16 * 60 * 1000;\n const HEARTBEAT_MAX_ATTEMPTS = 2;\n const HEARTBEAT_CONTINUATION = \"계속 진행해줘.\";\n\n try {\n while (true) {\n if (abortSignal?.aborted) return;\n\n // Per-attempt abort controller: lets the heartbeat timer abort only\n // this attempt's stream without touching the user-facing outer signal.\n const attemptAbort = new AbortController();\n const propagateOuter = () => attemptAbort.abort();\n abortSignal?.addEventListener(\"abort\", propagateOuter, { once: true });\n\n trackedPids.pids = [];\n let heartbeatTriggered = false;\n let attemptCompleted = false;\n let heartbeatTimer: ReturnType<typeof setTimeout> | null = null;\n\n const scheduleHeartbeat = () => {\n if (heartbeatTimer !== null) clearTimeout(heartbeatTimer);\n if (abortSignal?.aborted || attemptAbort.signal.aborted) return;\n heartbeatTimer = setTimeout(() => {\n heartbeatTriggered = true;\n if (trackedPids.pids.length > 0) killCodexTrees(trackedPids.pids);\n attemptAbort.abort();\n }, heartbeatMs);\n };\n\n try {\n scheduleHeartbeat();\n\n let startResult!: StartResult;\n try {\n startResult = await startStreamedWithTracking(\n thread,\n prompt,\n attemptAbort.signal,\n trackedPids,\n );\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") throw err;\n if (!currentSessionId || !isMissingCodexRolloutError(err)) throw err;\n if (opts.userId && opts.session) throw err;\n logger.warn(\n { staleSessionId: currentSessionId, err: errMsg(err) },\n \"codexProvider: stale/missing rollout, restarting fresh thread\",\n );\n thread = codex.startThread(threadOptions);\n prompt = promptForThread(opts, true);\n currentSessionId = undefined;\n usageBaseline = undefined;\n startResult = await startStreamedWithTracking(\n thread,\n prompt,\n attemptAbort.signal,\n trackedPids,\n );\n }\n\n // Cover the narrow window where abort fired between PID registration\n // and the abort listener actually running.\n if (attemptAbort.signal.aborted) {\n killCodexTrees(trackedPids.pids);\n await closeIterator(startResult.iter);\n throw Object.assign(new Error(\"heartbeat abort\"), { name: \"AbortError\" });\n }\n\n const eventStream = prependFirstEvent(\n startResult.iter,\n startResult.firstEvent,\n startResult.done,\n );\n\n for await (const rawEvent of eventStream) {\n scheduleHeartbeat();\n\n const event = rawEvent as {\n type: string;\n thread_id?: string;\n item?: {\n type: string;\n command?: string;\n tool?: string;\n arguments?: unknown;\n text?: string;\n id?: string;\n aggregated_output?: string;\n exit_code?: number;\n message?: string;\n status?: \"in_progress\" | \"completed\" | \"failed\";\n error?: { message?: string };\n };\n usage?: {\n input_tokens: number;\n output_tokens: number;\n cached_input_tokens?: number;\n cache_write_input_tokens?: number;\n };\n error?: { message?: string };\n };\n\n switch (event.type) {\n case \"thread.started\": {\n if (event.thread_id) {\n currentSessionId = event.thread_id;\n yield { type: \"session\", sessionId: event.thread_id };\n }\n break;\n }\n\n case \"item.started\": {\n const item = event.item;\n if (!item) break;\n if (item.type === \"command_execution\") {\n const command = String(item.command ?? \"\");\n yield {\n type: \"tool_use\",\n name: \"Bash\",\n input: { command },\n toolUseId: String(item.id ?? \"\"),\n };\n } else if (item.type === \"mcp_tool_call\") {\n yield {\n type: \"tool_use\",\n name: String(item.tool ?? \"unknown\"),\n input:\n item.arguments && typeof item.arguments === \"object\"\n ? (item.arguments as Record<string, unknown>)\n : {},\n toolUseId: String(item.id ?? \"\"),\n };\n }\n break;\n }\n\n case \"item.updated\": {\n const item = event.item;\n if (!item) break;\n if (item.type === \"agent_message\") {\n const messageId = item.id != null ? String(item.id) : undefined;\n if (messageId !== currentAgentMessageId) {\n currentAgentMessageId = messageId;\n agentTextSoFar = \"\";\n }\n const text = String(item.text ?? \"\");\n const newChars = text.slice(agentTextSoFar.length);\n if (newChars) {\n yield { type: \"text_delta\", content: newChars };\n agentTextSoFar = text;\n }\n }\n break;\n }\n\n case \"item.completed\": {\n const item = event.item;\n if (!item) break;\n if (item.type === \"agent_message\") {\n finalText = String(item.text ?? \"\");\n agentTextSoFar = finalText;\n yield { type: \"text\", content: finalText };\n yield* extractFileEvents(finalText, \"text\");\n } else if (item.type === \"reasoning\") {\n const reasoning = String(item.text ?? \"\").trim();\n if (reasoning) yield { type: \"reasoning\", content: reasoning };\n } else if (item.type === \"mcp_tool_call\") {\n const isError = item.status === \"failed\" || Boolean(item.error);\n yield {\n type: \"tool_result\",\n toolUseId: String(item.id ?? \"\"),\n content: summarizeMcpToolCallResult(item as unknown as McpToolCallItem),\n ...(isError ? { isError: true } : {}),\n };\n } else if (item.type === \"command_execution\") {\n const isError =\n item.status === \"failed\" ||\n (typeof item.exit_code === \"number\" && item.exit_code !== 0);\n yield {\n type: \"tool_result\",\n toolUseId: String(item.id ?? \"\"),\n content: String(item.aggregated_output ?? \"\").slice(0, 200),\n ...(isError ? { isError: true } : {}),\n };\n } else if (item.type === \"file_change\") {\n const fileEvents = await fileChangeEvents(\n item as unknown as FileChangeItem,\n filePreviews,\n opts.cwd,\n currentSessionId,\n consumedPatchCallIds,\n );\n for (const fileEvent of fileEvents) {\n yield fileEvent;\n }\n } else if (item.type === \"error\") {\n yield { type: \"error\", content: String(item.message ?? \"\") };\n }\n break;\n }\n\n case \"turn.completed\": {\n const rawUsage = event.usage;\n if (!rawUsage) break;\n attemptCompleted = true;\n const usage = normalizeCodexTurnUsage(\n rawUsage,\n usageBaseline,\n currentSessionId ? readLatestCodexTokenTotals(currentSessionId) : undefined,\n );\n const contextUsage = currentSessionId\n ? readLatestCodexContextUsage(currentSessionId)\n : undefined;\n yield {\n type: \"result\",\n content: finalText,\n stopReason,\n usage: {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheCreationInputTokens: usage.cache_write_input_tokens,\n cacheReadInputTokens: usage.cached_input_tokens,\n ...contextUsage,\n },\n };\n if (finalText) yield* extractFileEvents(finalText, \"result\");\n break;\n }\n\n case \"turn.failed\": {\n stopReason = \"error\";\n yield {\n type: \"error\",\n content: event.error?.message || \"Codex turn failed\",\n };\n break;\n }\n\n default:\n break;\n }\n }\n } catch (err) {\n if (abortSignal?.aborted) return;\n if (err instanceof Error && err.name === \"AbortError\") {\n if (!heartbeatTriggered) return;\n // Heartbeat abort — fall through to retry logic below\n } else {\n logger.error({ err }, \"codexProvider: attempt failed\");\n yield { type: \"error\", content: errMsg(err) };\n break;\n }\n } finally {\n if (heartbeatTimer !== null) clearTimeout(heartbeatTimer);\n abortSignal?.removeEventListener(\"abort\", propagateOuter);\n if (trackedPids.pids.length > 0) unregisterOwnedCodexPids(trackedPids.pids);\n }\n\n if (attemptCompleted || abortSignal?.aborted) break;\n if (!heartbeatTriggered) break;\n\n heartbeatAttempts++;\n if (heartbeatAttempts > HEARTBEAT_MAX_ATTEMPTS) {\n logger.warn(\n { attempts: heartbeatAttempts },\n \"codexProvider: max heartbeat attempts reached\",\n );\n yield {\n type: \"error\",\n content: `Codex가 ${HEARTBEAT_MAX_ATTEMPTS}회 재시도 후에도 응답하지 않았습니다.`,\n };\n break;\n }\n\n heartbeatMs = Math.min(heartbeatMs * 2, HEARTBEAT_MAX_MS);\n logger.info(\n { attempt: heartbeatAttempts, nextIntervalMs: heartbeatMs },\n \"codexProvider: heartbeat fired, resuming thread with continuation prompt\",\n );\n\n // The resumed turn's agent_message grows from \"\" again. Stale lengths\n // from the aborted attempt would mis-slice deltas (silence until the new\n // text outgrows the old, then an arbitrary mid-string fragment), and a\n // resumed turn that ends without an agent_message would ship the\n // previous attempt's finalText as its result.\n agentTextSoFar = \"\";\n finalText = \"\";\n\n thread = currentSessionId\n ? codex.resumeThread(currentSessionId, threadOptions)\n : codex.startThread(threadOptions);\n prompt = currentSessionId ? HEARTBEAT_CONTINUATION : promptForThread(opts, true);\n }\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") return;\n if (abortSignal?.aborted) return;\n logger.error({ err }, \"codexProvider: setup failed\");\n yield { type: \"error\", content: errMsg(err) };\n } finally {\n abortSignal?.removeEventListener(\"abort\", onAbortKill);\n if (trackedPids.pids.length > 0) unregisterOwnedCodexPids(trackedPids.pids);\n }\n}\n",
34
+ "import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, realpathSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport type {\n FileChangeItem,\n McpToolCallItem,\n ModelReasoningEffort,\n SandboxMode,\n ThreadOptions,\n} from \"@openai/codex-sdk\";\nimport { Codex } from \"@openai/codex-sdk\";\nimport {\n ensureCodexModelCache,\n writeCodexCatalogWithNativeMultiAgentDisabled,\n} from \"#agents/codex-native-multi-agent\";\nimport {\n acquireCodexSpawnLock,\n findNewCodexChildren,\n killCodexTrees,\n registerOwnedCodexPids,\n snapshotCodexChildren,\n unregisterOwnedCodexPids,\n} from \"#agents/codex-tree-kill\";\nimport { createCodexVaultHookBridge } from \"#agents/codex-vault-hook-bridge\";\nimport { deepMapStrings } from \"#agents/deep-map\";\nimport {\n hostedCodexAuthFilePath,\n hostedCodexHomePath,\n hostedMcpServers,\n redactHostedSecrets,\n} from \"#agents/execution-host\";\nimport {\n type CodexTokenTotals,\n migrateCodexRolloutNativeMultiAgentMetadata,\n readCodexPatchCallIds,\n readLatestCodexContextUsage,\n readLatestCodexPatchPreview,\n readLatestCodexTokenTotals,\n} from \"#agents/rollout/codex\";\nimport { buildNumberedDiffSummary } from \"#agents/tool-format\";\nimport { extractFileEvents } from \"#media/file-events\";\nimport { errMsg } from \"#platform/error\";\nimport { logger } from \"#platform/logger\";\nimport {\n browserOwnerCapability,\n browserOwnerForContext,\n CODEX_BROWSER_CAPABILITY_ENV,\n} from \"#platform/mcp-config\";\nimport type { AgentQueryOptions, EffortLevel, UnifiedEvent } from \"#types\";\n\ntype CodexEventUsage = {\n input_tokens: number;\n output_tokens: number;\n cached_input_tokens?: number;\n cache_write_input_tokens?: number;\n};\n\nfunction sameCodexUsage(usage: CodexEventUsage, total: CodexTokenTotals): boolean {\n return (\n usage.input_tokens === total.inputTokens &&\n usage.output_tokens === total.outputTokens &&\n (usage.cached_input_tokens ?? 0) === total.cachedInputTokens &&\n (usage.cache_write_input_tokens ?? 0) === total.cacheWriteInputTokens\n );\n}\n\n/**\n * Some Codex CLI builds expose the thread-lifetime counter on turn.completed\n * despite the SDK declaring turn-local usage. Only subtract a rollout baseline\n * when the event exactly matches the rollout's cumulative counter.\n */\nexport function normalizeCodexTurnUsage(\n usage: CodexEventUsage,\n baseline: CodexTokenTotals | undefined,\n rolloutTotal: CodexTokenTotals | undefined,\n): CodexEventUsage {\n if (!baseline || !rolloutTotal || !sameCodexUsage(usage, rolloutTotal)) return usage;\n const delta = (current: number, previous: number) =>\n current >= previous ? current - previous : current;\n return {\n input_tokens: delta(rolloutTotal.inputTokens, baseline.inputTokens),\n output_tokens: delta(rolloutTotal.outputTokens, baseline.outputTokens),\n cached_input_tokens: delta(rolloutTotal.cachedInputTokens, baseline.cachedInputTokens),\n cache_write_input_tokens: delta(\n rolloutTotal.cacheWriteInputTokens,\n baseline.cacheWriteInputTokens,\n ),\n };\n}\n\n/**\n * Pass Otium's EffortLevel through to Codex's ModelReasoningEffort.\n *\n * Storage validation (`getRegistry(\"codex\").validateEffort` in the repository\n * setters) guarantees that any effort persisted on a codex topic is one of\n * codex's accepted set (`low | medium | high | xhigh`), so the SDK shape and\n * the stored shape are identical for codex topics. A `max` or `minimal`\n * reaching this function means storage validation was bypassed — we throw\n * instead of silently demoting so the bug surfaces rather than masking itself.\n */\nfunction mapEffort(effort?: EffortLevel): ModelReasoningEffort | undefined {\n if (!effort) return undefined;\n if (effort === \"max\" || (effort as string) === \"minimal\") {\n throw new Error(\n `codexProvider received effort='${effort}', which codex does not support — storage validation was bypassed`,\n );\n }\n return effort as ModelReasoningEffort;\n}\n\n/**\n * Convert Otium's mcp-config output (Claude SDK shape) to Codex's\n * `config.mcp_servers` shape. Codex supports two transports:\n * - stdio: `{ command, args?, env? }`\n * - streamable HTTP: `{ url }` (verified via `codex mcp add --url`)\n *\n * Entries with the SSE transport shape (`{ type: \"sse\", url }`) are dropped:\n * codex doesn't speak SSE. Callers must produce the streamable HTTP shape\n * for codex by passing `agent: \"codex\"` into the `playwright.build()` arm\n * in `mcp-config.ts` (which switches `/sse` → `/mcp`).\n */\ntype CodexMcpTimeouts = {\n enabled?: boolean;\n startup_timeout_sec?: number;\n tool_timeout_sec?: number;\n};\ntype CodexStdioServer = {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n} & CodexMcpTimeouts;\ntype CodexHttpServer = {\n url: string;\n http_headers?: Record<string, string>;\n env_http_headers?: Record<string, string>;\n} & CodexMcpTimeouts;\ntype CodexMcpServer = CodexStdioServer | CodexHttpServer;\n\nconst CODEX_MCP_SERVER_NAME_OVERRIDES: Record<string, string> = {\n // Codex merges per-turn `--config mcp_servers.<name>.*` overrides with the\n // user's global ~/.codex/config.toml. `playwright` is a common global stdio\n // server name, and adding Otium's per-topic HTTP `url` to that same table\n // makes Codex fail config parsing with \"url is not supported for stdio\".\n playwright: \"otium_playwright\",\n};\n\nfunction codexMcpServerName(name: string): string {\n return CODEX_MCP_SERVER_NAME_OVERRIDES[name] ?? name;\n}\n\nfunction globalCodexMcpServerNames(authFilePath: string): string[] {\n const configPath = join(dirname(authFilePath), \"config.toml\");\n if (!existsSync(configPath)) return [];\n try {\n const names = new Set<string>();\n for (const line of readFileSync(configPath, \"utf8\").split(\"\\n\")) {\n const match = line.match(\n /^\\s*\\[\\s*mcp_servers\\.((?:\"(?:\\\\.|[^\"])*\")|(?:'[^']*')|[^.\\]\\s]+)(?:[.\\]])/,\n );\n const raw = match?.[1];\n if (!raw) continue;\n if (raw.startsWith('\"')) {\n try {\n names.add(JSON.parse(raw));\n } catch {\n // Ignore malformed TOML; Codex itself will report the config error.\n }\n } else if (raw.startsWith(\"'\")) {\n names.add(raw.slice(1, -1));\n } else {\n names.add(raw);\n }\n }\n return [...names];\n } catch (error) {\n logger.warn({ err: error, configPath }, \"codexProvider: failed to inspect global MCP config\");\n return [];\n }\n}\n\nfunction parsePositiveInt(value: string | undefined, fallback: number): number {\n if (!value) return fallback;\n const parsed = Number.parseInt(value, 10);\n return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction withCodexMcpServerOverrides(_name: string, server: CodexMcpServer): CodexMcpServer {\n // For codex, Otium launches MCP servers via node + tsx (see serverLaunch in\n // mcp-config.ts), which transpiles the .ts on the fly — cold start is slower\n // than `bun run`, so give the handshake a generous startup window. codex's\n // default startup timeout is short enough that a heavier server can miss it.\n return {\n startup_timeout_sec: parsePositiveInt(process.env.CODEX_MCP_STARTUP_TIMEOUT_SEC, 30),\n ...server,\n };\n}\n\nexport function toCodexMcpServers(\n claudeShape: Record<string, unknown>,\n): Record<string, CodexMcpServer> {\n // Codex merges turn config with ~/.codex/config.toml instead of replacing it.\n // Disable common global browser stdio servers so browser state can only flow\n // through Negotium's long-lived, owner-scoped HTTP server.\n const disabledBrowserStdio = (): CodexStdioServer => ({\n command: process.execPath,\n args: [\"-e\", \"process.exit(0)\"],\n enabled: false,\n });\n const out: Record<string, CodexMcpServer> = {\n playwright: disabledBrowserStdio(),\n \"browser-rs\": disabledBrowserStdio(),\n patchright: disabledBrowserStdio(),\n };\n for (const [name, srv] of Object.entries(claudeShape)) {\n if (!srv || typeof srv !== \"object\") continue;\n const s = srv as Record<string, unknown>;\n const codexName = codexMcpServerName(name);\n if (typeof s.command === \"string\") {\n out[codexName] = withCodexMcpServerOverrides(name, {\n command: s.command,\n ...(Array.isArray(s.args) ? { args: s.args as string[] } : {}),\n ...(s.env && typeof s.env === \"object\" ? { env: s.env as Record<string, string> } : {}),\n });\n continue;\n }\n if (typeof s.url === \"string\" && s.type !== \"sse\") {\n out[codexName] = withCodexMcpServerOverrides(name, {\n url: s.url,\n ...(s.http_headers && typeof s.http_headers === \"object\"\n ? { http_headers: s.http_headers as Record<string, string> }\n : {}),\n ...(s.env_http_headers && typeof s.env_http_headers === \"object\"\n ? { env_http_headers: s.env_http_headers as Record<string, string> }\n : {}),\n });\n }\n }\n return out;\n}\n\nfunction isMissingCodexRolloutError(err: unknown): boolean {\n const msg = errMsg(err);\n return /no rollout found|thread\\/resume failed/i.test(msg);\n}\n\n/**\n * Render an `mcp_tool_call` item's terminal payload into a short string for\n * the unified `tool_result` event. The SDK shape is\n * `result?: { content: ContentBlock[]; structured_content: unknown }` on\n * success, or `error?: { message: string }` on failure — neither is a raw\n * string, which is why the previous `typeof result === \"string\"` branch was\n * unreachable. Truncate to 200 chars to match command_execution behavior.\n */\nfunction summarizeMcpToolCallResult(item: McpToolCallItem): string {\n if (item.error) return item.error.message.slice(0, 200);\n if (!item.result) return \"\";\n const blocks = Array.isArray(item.result.content) ? item.result.content : [];\n const text = blocks\n .map((b) => {\n if (b && typeof b === \"object\" && \"type\" in b && b.type === \"text\" && \"text\" in b) {\n return String((b as { text?: unknown }).text ?? \"\");\n }\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\");\n if (text) return text.slice(0, 200);\n // Fall back to a JSON dump of structured_content for non-text content blocks.\n return JSON.stringify(item.result.structured_content ?? \"\").slice(0, 200);\n}\n\nconst CODEX_DIFF_FILE_LIMIT = 512 * 1024;\nconst CODEX_DIFF_BASELINE_FILE_LIMIT = 200;\nconst CODEX_DIFF_BASELINE_BYTE_LIMIT = 16 * 1024 * 1024;\n\nfunction canonicalPath(path: string): string {\n try {\n return realpathSync(resolve(path));\n } catch {\n return resolve(path);\n }\n}\n\nfunction textFile(path: string, maxBytes = CODEX_DIFF_FILE_LIMIT): string | null | undefined {\n if (!existsSync(path)) return null;\n try {\n const byteLimit = Math.min(CODEX_DIFF_FILE_LIMIT, Math.max(0, maxBytes));\n if (statSync(path).size > byteLimit) return undefined;\n const content = readFileSync(path);\n if (content.byteLength > byteLimit || content.includes(0)) return undefined;\n return content.toString(\"utf8\");\n } catch {\n return undefined;\n }\n}\n\ninterface CodexFilePreview {\n before?: string;\n after?: string;\n diff_preview?: string;\n}\n\n/**\n * Codex's SDK exposes only path + change kind, not the patch body. Capture the\n * dirty worktree at turn start and compare each completed file_change against\n * that moving baseline. This preserves user edits that already existed before\n * the turn and gives repeated edits to the same file their own +/- preview.\n */\nclass CodexFilePreviewTracker {\n readonly #cwd: string;\n readonly #root: string | null;\n readonly #baseline = new Map<string, string | null | undefined>();\n #baselineAvailable = false;\n\n constructor(cwd: string) {\n this.#cwd = canonicalPath(cwd);\n const root = this.#git([\"rev-parse\", \"--show-toplevel\"], this.#cwd)?.trim();\n this.#root = root ? canonicalPath(root) : null;\n if (!this.#root) return;\n const status = this.#git([\"status\", \"--porcelain=v1\", \"-z\", \"--untracked-files=all\"]);\n if (status === undefined) return;\n this.#baselineAvailable = true;\n let loadedFiles = 0;\n let loadedBytes = 0;\n const records = status.split(\"\\0\");\n for (let index = 0; index < records.length; index += 1) {\n const record = records[index];\n if (!record || record.length < 4) continue;\n const code = record.slice(0, 2);\n const path = record.slice(3);\n const remainingBytes = CODEX_DIFF_BASELINE_BYTE_LIMIT - loadedBytes;\n const content =\n loadedFiles < CODEX_DIFF_BASELINE_FILE_LIMIT && remainingBytes > 0\n ? textFile(resolve(this.#root, path), remainingBytes)\n : undefined;\n this.#baseline.set(path, content);\n if (typeof content === \"string\") {\n loadedFiles += 1;\n loadedBytes += Buffer.byteLength(content);\n }\n if (/[RC]/.test(code)) index += 1;\n }\n }\n\n preview(path: string, succeeded: boolean): CodexFilePreview {\n if (!this.#root || !this.#baselineAvailable || !succeeded) return {};\n const absolute = canonicalPath(isAbsolute(path) ? path : resolve(this.#cwd, path));\n const relativePath = relative(this.#root, absolute);\n if (!relativePath || relativePath.startsWith(\"..\") || isAbsolute(relativePath)) return {};\n\n const before = this.#baseline.has(relativePath)\n ? this.#baseline.get(relativePath)\n : this.#headFile(relativePath);\n const after = textFile(absolute);\n this.#baseline.set(relativePath, after);\n if (before === undefined || after === undefined) return {};\n\n const diff = buildNumberedDiffSummary(before ?? \"\", after ?? \"\");\n return {\n ...(diff.before !== undefined ? { before: diff.before } : {}),\n ...(diff.after !== undefined ? { after: diff.after } : {}),\n ...(diff.diffPreview !== undefined ? { diff_preview: diff.diffPreview } : {}),\n };\n }\n\n #headFile(path: string): string | null | undefined {\n const content = this.#git([\"show\", `HEAD:${path}`]);\n if (content === undefined) return null;\n return Buffer.byteLength(content) > CODEX_DIFF_FILE_LIMIT || content.includes(\"\\0\")\n ? undefined\n : content;\n }\n\n #git(args: string[], cwd = this.#root ?? undefined): string | undefined {\n try {\n return execFileSync(\"git\", [\"-C\", cwd ?? \".\", ...args], {\n encoding: \"utf8\",\n maxBuffer: CODEX_DIFF_FILE_LIMIT * 4,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n } catch {\n return undefined;\n }\n }\n}\n\n// Codex emits file_change only after the patch finishes, so surface the\n// completed changes immediately as paired tool_use/tool_result events.\nasync function fileChangeEvents(\n item: FileChangeItem,\n previews: CodexFilePreviewTracker,\n cwd: string,\n threadId: string | null | undefined,\n consumedPatchCallIds: Set<string>,\n): Promise<UnifiedEvent[]> {\n const expectedPaths = item.changes.map((change) =>\n isAbsolute(change.path) ? change.path : resolve(cwd, change.path),\n );\n let nativePreview: ReturnType<typeof readLatestCodexPatchPreview>;\n // The SDK can emit item.completed a few milliseconds before Codex flushes\n // patch_apply_end to its rollout. Give that write a brief head start before\n // the first lookup, which also avoids matching an older patch for the same\n // path on resumed threads.\n if (threadId && item.status === \"completed\") {\n await new Promise((resolveDelay) => setTimeout(resolveDelay, 20));\n nativePreview = readLatestCodexPatchPreview(threadId, expectedPaths, consumedPatchCallIds);\n }\n for (const delayMs of [20, 40, 80, 120]) {\n if (nativePreview || !threadId || item.status !== \"completed\") break;\n await new Promise((resolveDelay) => setTimeout(resolveDelay, delayMs));\n nativePreview = readLatestCodexPatchPreview(threadId, expectedPaths, consumedPatchCallIds);\n }\n if (nativePreview) consumedPatchCallIds.add(nativePreview.callId);\n\n return item.changes.flatMap((change, index) => {\n const name = change.kind === \"add\" ? \"Write\" : change.kind === \"delete\" ? \"Delete\" : \"Edit\";\n const toolUseId = `${item.id}:${index}`;\n const success = item.status === \"completed\";\n const nativeChange = nativePreview?.changes[index];\n // Keep the moving filesystem baseline current even when the native patch\n // supplies the display preview. A later edit to the same file may need the\n // filesystem fallback, which must compare against this edit—not turn start.\n const fallbackPreview = previews.preview(change.path, success);\n const preview =\n success && nativeChange\n ? {\n ...(nativeChange.before !== undefined ? { before: nativeChange.before } : {}),\n ...(nativeChange.after !== undefined ? { after: nativeChange.after } : {}),\n ...(nativeChange.diffPreview !== undefined\n ? { diff_preview: nativeChange.diffPreview }\n : {}),\n }\n : fallbackPreview;\n return [\n {\n type: \"tool_use\" as const,\n name,\n input: { file_path: change.path, change_kind: change.kind, ...preview },\n toolUseId,\n },\n {\n type: \"tool_result\" as const,\n toolUseId,\n content: success\n ? `${change.kind} applied: ${change.path}`\n : `${change.kind} failed: ${change.path}`,\n // Explicit failure flag so clients don't have to parse the content\n // string to tell a failed file change from an applied one.\n ...(success ? {} : { isError: true as const }),\n },\n ];\n });\n}\n\nfunction promptForThread(opts: AgentQueryOptions, includeSystemPrompt: boolean): string {\n return includeSystemPrompt && opts.systemPrompt\n ? `[System Instructions]\\n${opts.systemPrompt}\\n\\n${opts.prompt}`\n : opts.prompt;\n}\n\n/**\n * Start a streamed turn and identify the codex PIDs we spawned, holding the\n * global spawn lock across the full window from baseline → first event.\n *\n * Why hold the lock across iteration: `@openai/codex-sdk`'s `runStreamed()`\n * returns a lazy async generator object. The actual `child_process.spawn()`\n * call happens on the first `iterator.next()`, not when `runStreamed()` is\n * awaited (see `node_modules/@openai/codex-sdk/dist/index.js:51-93,238`).\n * If we released the lock after `await runStreamed(...)`, a concurrent\n * codex caller's baseline would race against our actual spawn and one\n * caller would mis-attribute the other's PID.\n *\n * Returns the iterator (positioned just past the first event) plus the\n * first event itself, so the streaming loop can re-emit it before\n * resuming `iterator.next()`.\n */\ntype StartResult = {\n iter: AsyncIterator<unknown>;\n firstEvent: unknown;\n done: boolean;\n};\n\nasync function closeIterator(iter: AsyncIterator<unknown>): Promise<void> {\n try {\n await iter.return?.();\n } catch (err) {\n logger.warn({ err }, \"codexProvider: failed to close codex event iterator\");\n }\n}\n\n/**\n * Bound the spawn→first-event window. `thread.started` normally arrives within\n * a few seconds, so if NOTHING comes back in this window the codex turn is\n * genuinely stuck at startup (the bare-`/codex` hang symptom). We surface a\n * clear error fast instead of waiting out the much longer mid-stream heartbeat\n * (8 min) — a stuck startup never recovers, and retrying it is futile. Once the\n * first event arrives, the normal heartbeat governs long-running work.\n */\nconst CODEX_STARTUP_TIMEOUT_MS = 90_000;\n\nasync function startStreamedWithTracking(\n thread: ReturnType<Codex[\"startThread\"]>,\n prompt: string,\n abortSignal: AbortSignal | undefined,\n trackedPids: { pids: number[] },\n): Promise<StartResult> {\n const release = await acquireCodexSpawnLock();\n try {\n const baseline = snapshotCodexChildren();\n const runResult = await thread.runStreamed(prompt, {\n ...(abortSignal ? { signal: abortSignal } : {}),\n });\n const iter = (runResult.events as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n // Force the first iterator step — this is when the SDK actually\n // child_process.spawn()s codex. After this awaits, the codex PID is\n // visible to pgrep as a child of our process.\n let first: IteratorResult<unknown>;\n // Startup watchdog: race the first event against CODEX_STARTUP_TIMEOUT_MS so\n // a codex that spawns but never emits anything can't hang the turn. On\n // timeout the iter.next() promise loses the race and we fall into the catch\n // below, which kills the spawned tree, closes the iterator, and rethrows the\n // clear error — surfaced to the user as an `error` event (no infinite wait).\n let startupTimer: ReturnType<typeof setTimeout> | undefined;\n try {\n const startupTimeout = new Promise<never>((_, reject) => {\n startupTimer = setTimeout(\n () =>\n reject(\n new Error(\n `Codex가 ${CODEX_STARTUP_TIMEOUT_MS / 1000}초 내 응답을 시작하지 않아 중단했습니다. 다시 시도해주세요.`,\n ),\n ),\n CODEX_STARTUP_TIMEOUT_MS,\n );\n });\n // Swallow a late rejection from the losing promise: if the startup\n // timeout wins the race, this dangling next() may settle later with\n // nobody awaiting it (would surface as an unhandledRejection).\n const nextP = iter.next();\n nextP.catch(() => {});\n first = await Promise.race([nextP, startupTimeout]);\n } catch (err) {\n // Abort OR startup-timeout after the SDK spawned codex but before the\n // first event resolves: the normal abort listener still sees no tracked\n // PID, so diff the baseline here and kill anything attributable before\n // propagating.\n const novel = findNewCodexChildren(baseline);\n if (novel.length > 0) {\n killCodexTrees(novel);\n }\n await closeIterator(iter);\n throw err;\n } finally {\n if (startupTimer) clearTimeout(startupTimer);\n }\n const novel = findNewCodexChildren(baseline);\n trackedPids.pids = novel;\n registerOwnedCodexPids(novel);\n return { iter, firstEvent: first.value, done: !!first.done };\n } finally {\n release();\n }\n}\n\n/**\n * Wrap an iterator into an AsyncIterable that first yields a pre-captured\n * `firstEvent` and then drains the underlying iterator. Lets the streaming\n * `for await` loop keep its existing switch over events without special-casing\n * the first iteration we already consumed during PID tracking.\n */\nfunction prependFirstEvent(\n iter: AsyncIterator<unknown>,\n firstEvent: unknown,\n alreadyDone: boolean,\n): AsyncIterable<unknown> {\n return {\n [Symbol.asyncIterator]() {\n let emittedFirst = false;\n let exhausted = alreadyDone;\n return {\n async next(): Promise<IteratorResult<unknown>> {\n if (!emittedFirst) {\n emittedFirst = true;\n if (alreadyDone) return { value: undefined, done: true };\n return { value: firstEvent, done: false };\n }\n if (exhausted) return { value: undefined, done: true };\n const r = await iter.next();\n if (r.done) exhausted = true;\n return r;\n },\n async return(value?: unknown): Promise<IteratorResult<unknown>> {\n exhausted = true;\n if (iter.return) return iter.return(value);\n return { value, done: true };\n },\n };\n },\n };\n}\n\n/**\n * Core Codex provider.\n * Same UnifiedEvent contract as claudeProvider. Uses @openai/codex-sdk.\n *\n * Notes:\n * - Codex has no `systemPrompt` option; prepend the current topic/system\n * instructions on every invocation, including resumed synthetic threads.\n * - Per-turn MCP isolation is achieved via CodexOptions.config.mcp_servers,\n * so the global ~/.codex/config.toml stays untouched.\n * - Streaming token-by-token text deltas are not exposed by the SDK; only\n * final agent_message and per-item updates. Callers that rely on\n * text_delta should still work because we yield a single text/result\n * event when the assistant message completes.\n */\nexport async function* codexProvider(opts: AgentQueryOptions): AsyncGenerator<UnifiedEvent> {\n const filePreviews = new CodexFilePreviewTracker(opts.cwd);\n // A resumed rollout may already contain patches for the same file. Mark\n // those calls consumed before this turn starts so a delayed new flush can\n // never be mistaken for the previous turn's edit.\n const consumedPatchCallIds = new Set(opts.sessionId ? readCodexPatchCallIds(opts.sessionId) : []);\n // Up-front auth file check — gives the user an actionable message\n // (\"`codex login` 으로 다시 로그인해주세요\") immediately instead of waiting\n // for the @openai/codex-sdk to spawn the codex binary and surface an\n // opaque OAuth failure on the first turn. Path is the default codex\n // location unless NEGOTIUM_CODEX_AUTH_FILE relocates it for this host.\n const codexAuthPath = hostedCodexAuthFilePath();\n if (!existsSync(codexAuthPath)) {\n yield {\n type: \"error\",\n content: `Codex auth file not found at ${codexAuthPath}. Run \\`codex login\\` to authenticate.`,\n };\n return;\n }\n\n let codexModelCatalogPath: string;\n try {\n const codexModelCachePath = await ensureCodexModelCache(codexAuthPath);\n codexModelCatalogPath = writeCodexCatalogWithNativeMultiAgentDisabled(\n codexAuthPath,\n codexModelCachePath,\n );\n if (opts.sessionId) migrateCodexRolloutNativeMultiAgentMetadata(opts.sessionId);\n } catch (err) {\n yield {\n type: \"error\",\n content: `Failed to enforce the Codex native multi-agent policy: ${errMsg(err)}`,\n };\n return;\n }\n\n const codexMcpServers = toCodexMcpServers(hostedMcpServers(opts));\n if (opts.toolPolicy) {\n const allowed = new Set(Object.keys(codexMcpServers));\n for (const name of globalCodexMcpServerNames(codexAuthPath)) {\n if (allowed.has(name)) continue;\n codexMcpServers[name] = {\n command: process.execPath,\n args: [\"-e\", \"process.exit(0)\"],\n enabled: false,\n };\n }\n }\n const browserOwner = browserOwnerForContext(opts);\n const scopedBrowserCapability =\n opts.playwrightCapability && browserOwner\n ? browserOwnerCapability(opts.playwrightCapability, browserOwner)\n : undefined;\n\n // Startup trace: codexProvider was otherwise silent until its first error or\n // heartbeat (8 min), so a stuck turn left \"0 lines of codex\" in the logs and\n // was impossible to localize (bug B). Record the resolved model/effort/cwd +\n // whether this is a fresh thread or a resume, so a future hang is pinpointed\n // to setup vs. the first stream step.\n logger.info(\n {\n model: opts.model ?? \"(sdk default)\",\n effort: opts.effort ?? \"(off)\",\n cwd: opts.cwd,\n cwdExists: existsSync(opts.cwd),\n resume: Boolean(opts.sessionId),\n mcpServerCount: Object.keys(codexMcpServers).length,\n },\n \"codexProvider: starting turn\",\n );\n\n const hostedCodexHome = hostedCodexHomePath();\n const inheritedCodexHome = process.env.CODEX_HOME || join(homedir(), \".codex\");\n const codexEnvironment =\n scopedBrowserCapability || resolve(hostedCodexHome) !== resolve(inheritedCodexHome)\n ? {\n ...Object.fromEntries(\n Object.entries(process.env).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n ),\n ),\n CODEX_HOME: hostedCodexHome,\n ...(scopedBrowserCapability\n ? { [CODEX_BROWSER_CAPABILITY_ENV]: scopedBrowserCapability }\n : {}),\n }\n : undefined;\n let vaultHook: Awaited<ReturnType<typeof createCodexVaultHookBridge>>;\n try {\n vaultHook = await createCodexVaultHookBridge(opts.vaultUserId ?? opts.userId ?? \"\");\n } catch (err) {\n yield { type: \"error\", content: `Failed to initialize Codex Vault hooks: ${errMsg(err)}` };\n return;\n }\n const codex = new Codex({\n codexPathOverride: vaultHook.codexPathOverride,\n ...(codexEnvironment ? { env: codexEnvironment } : {}),\n config: {\n // Otium exposes delegation through runtime.spawn_subagent so child work\n // gets its own room/card and its result is routed back to the parent.\n // Codex enables its provider-native collaboration tools from the user's\n // global config by default; explicitly turn that feature off so tools\n // such as spawn_agent/send_message cannot bypass Otium's orchestration\n // and so subagent rooms cannot recursively fan out through Codex.\n // Codex model metadata can override these flags. The authoritative\n // catalog above sets multi_agent_version=disabled as the hard stop; keep\n // all feature switches off as a second layer and for future CLI versions.\n features: { hooks: true, multi_agent: false, multi_agent_v2: false, enable_fanout: false },\n hooks: vaultHook.hooks,\n model_catalog_json: codexModelCatalogPath,\n mcp_servers: codexMcpServers,\n ...(opts.toolPolicy ? { sandbox_permissions: [] } : {}),\n },\n });\n\n const threadOptions: ThreadOptions = {\n workingDirectory: opts.cwd,\n skipGitRepoCheck: true,\n // Codex sandbox is intentionally disabled: Otium already assigns a managed\n // workspace cwd for the turn, and the bot is expected to act on it freely on\n // the user's behalf. SDK-level sandboxing would only constrain reach inside\n // that already-owned directory, which is not the threat model.\n sandboxMode: (opts.toolPolicy ? \"read-only\" : \"danger-full-access\") as SandboxMode,\n approvalPolicy: \"never\",\n ...(opts.toolPolicy\n ? {\n networkAccessEnabled: false,\n webSearchMode: \"disabled\" as const,\n webSearchEnabled: false,\n }\n : {}),\n ...(opts.model ? { model: opts.model } : {}),\n ...(opts.effort ? { modelReasoningEffort: mapEffort(opts.effort) } : {}),\n };\n\n let currentSessionId = opts.sessionId;\n let usageBaseline = currentSessionId ? readLatestCodexTokenTotals(currentSessionId) : undefined;\n\n // Codex SDK has no systemPrompt option. A resumed thread may have been\n // synthesized from a captured shell, so always refresh the current runtime\n // instructions instead of trusting historical developer/environment data.\n let thread = currentSessionId\n ? codex.resumeThread(currentSessionId, threadOptions)\n : codex.startThread(threadOptions);\n let prompt = promptForThread(opts, true);\n\n let agentTextSoFar = \"\";\n let currentAgentMessageId: string | undefined;\n let finalText = \"\";\n let stopReason = \"end_turn\";\n\n // Tree-kill instrumentation. The codex SDK spawns the `codex` binary as a\n // direct child of our process but does not expose the PID or place it in\n // its own process group. We identify our PIDs by diffing pgrep snapshots\n // around the SDK's first iterator step (when codex is actually spawned),\n // and SIGTERM the whole tree on abort with SIGKILL fallback inside\n // killCodexTrees().\n const trackedPids: { pids: number[] } = { pids: [] };\n const abortSignal = opts.abortController?.signal;\n const onAbortKill = () => {\n if (trackedPids.pids.length > 0) {\n killCodexTrees(trackedPids.pids);\n }\n };\n abortSignal?.addEventListener(\"abort\", onAbortKill, { once: true });\n\n // Heartbeat: if the Codex API emits no events within the window, abort the\n // current stream and resume the thread with a short continuation prompt.\n // The interval doubles each attempt (up to HEARTBEAT_MAX_MS) to avoid\n // interrupting genuinely long-running work on the first timeout.\n let heartbeatMs = 8 * 60 * 1000;\n let heartbeatAttempts = 0;\n const HEARTBEAT_MAX_MS = 16 * 60 * 1000;\n const HEARTBEAT_MAX_ATTEMPTS = 2;\n const HEARTBEAT_CONTINUATION = \"계속 진행해줘.\";\n\n try {\n while (true) {\n if (abortSignal?.aborted) return;\n\n // Per-attempt abort controller: lets the heartbeat timer abort only\n // this attempt's stream without touching the user-facing outer signal.\n const attemptAbort = new AbortController();\n const propagateOuter = () => attemptAbort.abort();\n abortSignal?.addEventListener(\"abort\", propagateOuter, { once: true });\n\n trackedPids.pids = [];\n let heartbeatTriggered = false;\n let attemptCompleted = false;\n let heartbeatTimer: ReturnType<typeof setTimeout> | null = null;\n\n const scheduleHeartbeat = () => {\n if (heartbeatTimer !== null) clearTimeout(heartbeatTimer);\n if (abortSignal?.aborted || attemptAbort.signal.aborted) return;\n heartbeatTimer = setTimeout(() => {\n heartbeatTriggered = true;\n if (trackedPids.pids.length > 0) killCodexTrees(trackedPids.pids);\n attemptAbort.abort();\n }, heartbeatMs);\n };\n\n try {\n scheduleHeartbeat();\n\n let startResult!: StartResult;\n try {\n startResult = await startStreamedWithTracking(\n thread,\n prompt,\n attemptAbort.signal,\n trackedPids,\n );\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") throw err;\n if (!currentSessionId || !isMissingCodexRolloutError(err)) throw err;\n if (opts.userId && opts.session) throw err;\n logger.warn(\n { staleSessionId: currentSessionId, err: errMsg(err) },\n \"codexProvider: stale/missing rollout, restarting fresh thread\",\n );\n thread = codex.startThread(threadOptions);\n prompt = promptForThread(opts, true);\n currentSessionId = undefined;\n usageBaseline = undefined;\n startResult = await startStreamedWithTracking(\n thread,\n prompt,\n attemptAbort.signal,\n trackedPids,\n );\n }\n\n // Cover the narrow window where abort fired between PID registration\n // and the abort listener actually running.\n if (attemptAbort.signal.aborted) {\n killCodexTrees(trackedPids.pids);\n await closeIterator(startResult.iter);\n throw Object.assign(new Error(\"heartbeat abort\"), { name: \"AbortError\" });\n }\n\n const eventStream = prependFirstEvent(\n startResult.iter,\n startResult.firstEvent,\n startResult.done,\n );\n\n for await (const rawEvent of eventStream) {\n scheduleHeartbeat();\n\n const event = rawEvent as {\n type: string;\n thread_id?: string;\n item?: {\n type: string;\n command?: string;\n tool?: string;\n arguments?: unknown;\n text?: string;\n id?: string;\n aggregated_output?: string;\n exit_code?: number;\n message?: string;\n status?: \"in_progress\" | \"completed\" | \"failed\";\n error?: { message?: string };\n };\n usage?: {\n input_tokens: number;\n output_tokens: number;\n cached_input_tokens?: number;\n cache_write_input_tokens?: number;\n };\n error?: { message?: string };\n };\n\n switch (event.type) {\n case \"thread.started\": {\n if (event.thread_id) {\n currentSessionId = event.thread_id;\n yield { type: \"session\", sessionId: event.thread_id };\n }\n break;\n }\n\n case \"item.started\": {\n const item = event.item;\n if (!item) break;\n if (item.type === \"command_execution\") {\n const command = redactHostedSecrets(\n opts.vaultUserId ?? opts.userId ?? \"\",\n String(item.command ?? \"\"),\n );\n yield {\n type: \"tool_use\",\n name: \"Bash\",\n input: { command },\n toolUseId: String(item.id ?? \"\"),\n };\n } else if (item.type === \"mcp_tool_call\") {\n const input =\n item.arguments && typeof item.arguments === \"object\"\n ? (item.arguments as Record<string, unknown>)\n : {};\n yield {\n type: \"tool_use\",\n name: String(item.tool ?? \"unknown\"),\n input: deepMapStrings(input, (value) =>\n redactHostedSecrets(opts.vaultUserId ?? opts.userId ?? \"\", value),\n ) as Record<string, unknown>,\n toolUseId: String(item.id ?? \"\"),\n };\n }\n break;\n }\n\n case \"item.updated\": {\n const item = event.item;\n if (!item) break;\n if (item.type === \"agent_message\") {\n const messageId = item.id != null ? String(item.id) : undefined;\n if (messageId !== currentAgentMessageId) {\n currentAgentMessageId = messageId;\n agentTextSoFar = \"\";\n }\n const text = String(item.text ?? \"\");\n const newChars = text.slice(agentTextSoFar.length);\n if (newChars) {\n yield { type: \"text_delta\", content: newChars };\n agentTextSoFar = text;\n }\n }\n break;\n }\n\n case \"item.completed\": {\n const item = event.item;\n if (!item) break;\n if (item.type === \"agent_message\") {\n finalText = String(item.text ?? \"\");\n agentTextSoFar = finalText;\n yield { type: \"text\", content: finalText };\n yield* extractFileEvents(finalText, \"text\");\n } else if (item.type === \"reasoning\") {\n const reasoning = String(item.text ?? \"\").trim();\n if (reasoning) yield { type: \"reasoning\", content: reasoning };\n } else if (item.type === \"mcp_tool_call\") {\n const isError = item.status === \"failed\" || Boolean(item.error);\n yield {\n type: \"tool_result\",\n toolUseId: String(item.id ?? \"\"),\n content: redactHostedSecrets(\n opts.vaultUserId ?? opts.userId ?? \"\",\n summarizeMcpToolCallResult(item as unknown as McpToolCallItem),\n ),\n ...(isError ? { isError: true } : {}),\n };\n } else if (item.type === \"command_execution\") {\n const isError =\n item.status === \"failed\" ||\n (typeof item.exit_code === \"number\" && item.exit_code !== 0);\n yield {\n type: \"tool_result\",\n toolUseId: String(item.id ?? \"\"),\n content: redactHostedSecrets(\n opts.vaultUserId ?? opts.userId ?? \"\",\n String(item.aggregated_output ?? \"\").slice(0, 200),\n ),\n ...(isError ? { isError: true } : {}),\n };\n } else if (item.type === \"file_change\") {\n const fileEvents = await fileChangeEvents(\n item as unknown as FileChangeItem,\n filePreviews,\n opts.cwd,\n currentSessionId,\n consumedPatchCallIds,\n );\n for (const fileEvent of fileEvents) {\n yield fileEvent;\n }\n } else if (item.type === \"error\") {\n yield { type: \"error\", content: String(item.message ?? \"\") };\n }\n break;\n }\n\n case \"turn.completed\": {\n const rawUsage = event.usage;\n if (!rawUsage) break;\n attemptCompleted = true;\n const usage = normalizeCodexTurnUsage(\n rawUsage,\n usageBaseline,\n currentSessionId ? readLatestCodexTokenTotals(currentSessionId) : undefined,\n );\n const contextUsage = currentSessionId\n ? readLatestCodexContextUsage(currentSessionId)\n : undefined;\n yield {\n type: \"result\",\n content: finalText,\n stopReason,\n usage: {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheCreationInputTokens: usage.cache_write_input_tokens,\n cacheReadInputTokens: usage.cached_input_tokens,\n ...contextUsage,\n },\n };\n if (finalText) yield* extractFileEvents(finalText, \"result\");\n break;\n }\n\n case \"turn.failed\": {\n stopReason = \"error\";\n yield {\n type: \"error\",\n content: event.error?.message || \"Codex turn failed\",\n };\n break;\n }\n\n default:\n break;\n }\n }\n } catch (err) {\n if (abortSignal?.aborted) return;\n if (err instanceof Error && err.name === \"AbortError\") {\n if (!heartbeatTriggered) return;\n // Heartbeat abort — fall through to retry logic below\n } else {\n logger.error({ err }, \"codexProvider: attempt failed\");\n yield { type: \"error\", content: errMsg(err) };\n break;\n }\n } finally {\n if (heartbeatTimer !== null) clearTimeout(heartbeatTimer);\n abortSignal?.removeEventListener(\"abort\", propagateOuter);\n if (trackedPids.pids.length > 0) unregisterOwnedCodexPids(trackedPids.pids);\n }\n\n if (attemptCompleted || abortSignal?.aborted) break;\n if (!heartbeatTriggered) break;\n\n heartbeatAttempts++;\n if (heartbeatAttempts > HEARTBEAT_MAX_ATTEMPTS) {\n logger.warn(\n { attempts: heartbeatAttempts },\n \"codexProvider: max heartbeat attempts reached\",\n );\n yield {\n type: \"error\",\n content: `Codex가 ${HEARTBEAT_MAX_ATTEMPTS}회 재시도 후에도 응답하지 않았습니다.`,\n };\n break;\n }\n\n heartbeatMs = Math.min(heartbeatMs * 2, HEARTBEAT_MAX_MS);\n logger.info(\n { attempt: heartbeatAttempts, nextIntervalMs: heartbeatMs },\n \"codexProvider: heartbeat fired, resuming thread with continuation prompt\",\n );\n\n // The resumed turn's agent_message grows from \"\" again. Stale lengths\n // from the aborted attempt would mis-slice deltas (silence until the new\n // text outgrows the old, then an arbitrary mid-string fragment), and a\n // resumed turn that ends without an agent_message would ship the\n // previous attempt's finalText as its result.\n agentTextSoFar = \"\";\n finalText = \"\";\n\n thread = currentSessionId\n ? codex.resumeThread(currentSessionId, threadOptions)\n : codex.startThread(threadOptions);\n prompt = currentSessionId ? HEARTBEAT_CONTINUATION : promptForThread(opts, true);\n }\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") return;\n if (abortSignal?.aborted) return;\n logger.error({ err }, \"codexProvider: setup failed\");\n yield { type: \"error\", content: errMsg(err) };\n } finally {\n abortSignal?.removeEventListener(\"abort\", onAbortKill);\n if (trackedPids.pids.length > 0) unregisterOwnedCodexPids(trackedPids.pids);\n await vaultHook.close();\n }\n}\n",
35
35
  "import { spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport {\n chmodSync,\n copyFileSync,\n existsSync,\n mkdtempSync,\n readFileSync,\n renameSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { NEGOTIUM_VERSION } from \"#version\";\n\ntype CodexModel = Record<string, unknown>;\ntype CodexModelCache = {\n client_version?: unknown;\n models?: unknown;\n};\n\nconst moduleRequire = createRequire(import.meta.url);\nconst codexSdkPackagePath = moduleRequire.resolve(\"@openai/codex-sdk/package.json\");\nconst codexSdkRequire = createRequire(codexSdkPackagePath);\nconst bundledCodexPackagePath = codexSdkRequire.resolve(\"@openai/codex/package.json\");\n\nfunction readPackageVersion(packageJsonPath: string): string {\n const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: unknown };\n if (typeof parsed.version !== \"string\" || !parsed.version.trim()) {\n throw new Error(`Codex package has no valid version: ${packageJsonPath}`);\n }\n return parsed.version;\n}\n\nexport const BUNDLED_CODEX_VERSION = readPackageVersion(bundledCodexPackagePath);\nconst SAFE_BUNDLED_CODEX_VERSION = BUNDLED_CODEX_VERSION.replace(/[^a-zA-Z0-9._-]/g, \"_\");\nconst NEGOTIUM_MODEL_CACHE = `negotium-models-cache-${SAFE_BUNDLED_CODEX_VERSION}.json`;\nconst NEGOTIUM_MODEL_CATALOG = `negotium-model-catalog-${SAFE_BUNDLED_CODEX_VERSION}.json`;\n\nexport function codexCliScriptPath(): string {\n return join(dirname(bundledCodexPackagePath), \"bin\", \"codex.js\");\n}\n\nfunction parseCodexModelCache(contents: string, sourcePath: string): CodexModelCache {\n let parsed: CodexModelCache;\n try {\n parsed = JSON.parse(contents) as CodexModelCache;\n } catch (error) {\n throw new Error(`Codex model cache is invalid JSON: ${sourcePath}`, { cause: error });\n }\n if (!Array.isArray(parsed.models) || parsed.models.length === 0) {\n throw new Error(`Codex model cache has no models: ${sourcePath}`);\n }\n return parsed;\n}\n\nfunction readCodexModelCache(cachePath: string): {\n contents: string;\n parsed: CodexModelCache;\n} {\n const contents = readFileSync(cachePath, \"utf8\");\n return { contents, parsed: parseCodexModelCache(contents, cachePath) };\n}\n\nfunction readCompatibleCodexModelCache(cachePath: string): {\n contents: string;\n parsed: CodexModelCache;\n} {\n const cache = readCodexModelCache(cachePath);\n if (cache.parsed.client_version !== BUNDLED_CODEX_VERSION) {\n const found =\n typeof cache.parsed.client_version === \"string\"\n ? cache.parsed.client_version\n : \"missing or invalid\";\n throw new Error(\n `Codex model cache version ${found} does not match Negotium's bundled Codex ${BUNDLED_CODEX_VERSION}: ${cachePath}`,\n );\n }\n return cache;\n}\n\nfunction writePrivateFileAtomic(path: string, contents: string): void {\n if (existsSync(path) && readFileSync(path, \"utf8\") === contents) return;\n\n const tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n try {\n writeFileSync(tempPath, contents, { encoding: \"utf8\", mode: 0o600 });\n renameSync(tempPath, path);\n chmodSync(path, 0o600);\n } finally {\n try {\n unlinkSync(tempPath);\n } catch {\n // renameSync normally consumed the temporary file.\n }\n }\n}\n\nexport function bundledCodexModelCachePath(authFilePath: string): string {\n return join(dirname(authFilePath), NEGOTIUM_MODEL_CACHE);\n}\n\nasync function bootstrapCodexModelCache(codexHome: string, cachePath: string): Promise<void> {\n const child = spawn(process.execPath, [codexCliScriptPath(), \"app-server\", \"--stdio\"], {\n env: { ...process.env, CODEX_HOME: codexHome },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n let stdoutBuffer = \"\";\n let stderr = \"\";\n const timer = setTimeout(\n () => finish(new Error(\"timed out while refreshing the Codex model catalog\")),\n 15_000,\n );\n\n const finish = (error?: Error) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n try {\n child.stdin.end();\n child.kill();\n } catch {\n // The app server may already have exited after stdin closed.\n }\n if (error) reject(error);\n else if (!existsSync(cachePath)) reject(new Error(\"Codex did not create its model cache\"));\n else resolve();\n };\n\n const send = (message: Record<string, unknown>) => {\n child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n child.stderr.on(\"data\", (chunk) => {\n if (stderr.length < 4_096) stderr += String(chunk);\n });\n child.on(\"error\", (error) => finish(error));\n child.on(\"exit\", (code, signal) => {\n if (!settled) {\n finish(\n new Error(\n `Codex model catalog refresh exited with ${signal ? `signal ${signal}` : `code ${code ?? 1}`}${stderr.trim() ? `: ${stderr.trim()}` : \"\"}`,\n ),\n );\n }\n });\n child.stdout.on(\"data\", (chunk) => {\n stdoutBuffer += String(chunk);\n for (;;) {\n const newline = stdoutBuffer.indexOf(\"\\n\");\n if (newline < 0) break;\n const line = stdoutBuffer.slice(0, newline);\n stdoutBuffer = stdoutBuffer.slice(newline + 1);\n let message: { id?: number; error?: { message?: string } };\n try {\n message = JSON.parse(line) as typeof message;\n } catch {\n continue;\n }\n if (message.id === 1) {\n if (message.error) {\n finish(new Error(message.error.message || \"Codex initialization failed\"));\n return;\n }\n send({ method: \"initialized\" });\n send({ id: 2, method: \"model/list\", params: { includeHidden: true } });\n } else if (message.id === 2) {\n if (message.error) {\n finish(new Error(message.error.message || \"Codex model listing failed\"));\n } else {\n finish();\n }\n return;\n }\n }\n });\n\n send({\n id: 1,\n method: \"initialize\",\n params: {\n clientInfo: { name: \"negotium\", version: NEGOTIUM_VERSION },\n capabilities: { experimentalApi: true },\n },\n });\n });\n}\n\nasync function bootstrapIsolatedCodexModelCache(\n authFilePath: string,\n bootstrap: (codexHome: string, cachePath: string) => Promise<void>,\n): Promise<string> {\n const sourceHome = dirname(authFilePath);\n const isolatedHome = mkdtempSync(join(tmpdir(), \"negotium-codex-models-\"));\n const isolatedCachePath = join(isolatedHome, \"models_cache.json\");\n\n try {\n const isolatedAuthPath = join(isolatedHome, \"auth.json\");\n copyFileSync(authFilePath, isolatedAuthPath);\n chmodSync(isolatedAuthPath, 0o600);\n\n // Preserve custom provider configuration while keeping the bundled CLI's\n // cache write completely outside the user's shared CODEX_HOME.\n const sourceConfigPath = join(sourceHome, \"config.toml\");\n if (existsSync(sourceConfigPath)) {\n const isolatedConfigPath = join(isolatedHome, \"config.toml\");\n copyFileSync(sourceConfigPath, isolatedConfigPath);\n chmodSync(isolatedConfigPath, 0o600);\n }\n\n await bootstrap(isolatedHome, isolatedCachePath);\n return readCompatibleCodexModelCache(isolatedCachePath).contents;\n } finally {\n rmSync(isolatedHome, { recursive: true, force: true });\n }\n}\n\nexport async function ensureCodexModelCache(\n authFilePath: string,\n bootstrap: (codexHome: string, cachePath: string) => Promise<void> = bootstrapCodexModelCache,\n): Promise<string> {\n const codexHome = dirname(authFilePath);\n const configuredCachePath = process.env.NEGOTIUM_CODEX_MODELS_CACHE_FILE;\n if (configuredCachePath) {\n if (!existsSync(configuredCachePath)) {\n throw new Error(`Configured Codex model cache does not exist: ${configuredCachePath}`);\n }\n readCompatibleCodexModelCache(configuredCachePath);\n return configuredCachePath;\n }\n\n // The global Codex CLI owns models_cache.json and may update it to a schema\n // newer than the SDK bundled by Negotium. Snapshot a cache generated for our\n // exact bundled version so later global CLI updates cannot break turns.\n const bundledCachePath = bundledCodexModelCachePath(authFilePath);\n const sharedCachePath = join(codexHome, \"models_cache.json\");\n if (existsSync(sharedCachePath)) {\n try {\n const shared = readCompatibleCodexModelCache(sharedCachePath);\n // Keep model metadata fresh while the global CLI remains compatible.\n writePrivateFileAtomic(bundledCachePath, shared.contents);\n return bundledCachePath;\n } catch {\n // A compatible private snapshot is safer than failing because another\n // process briefly exposed an incomplete shared-cache write.\n }\n }\n\n if (existsSync(bundledCachePath)) {\n try {\n readCompatibleCodexModelCache(bundledCachePath);\n return bundledCachePath;\n } catch {\n // Re-bootstrap below instead of passing a corrupt or version-mismatched\n // private snapshot into this SDK version.\n }\n }\n\n const refreshedContents = await bootstrapIsolatedCodexModelCache(authFilePath, bootstrap);\n writePrivateFileAtomic(bundledCachePath, refreshedContents);\n return bundledCachePath;\n}\n\n/**\n * Codex can resolve model metadata before `features.multi_agent=false`, so a\n * model-advertised v1/v2 value may still register native collaboration tools.\n * Feed Codex an authoritative copy of its own catalog with only that field\n * disabled. Runtime MCP delegation remains available independently.\n */\nexport function writeCodexCatalogWithNativeMultiAgentDisabled(\n authFilePath: string,\n sourcePath: string,\n): string {\n const codexHome = dirname(authFilePath);\n const outputPath = join(codexHome, NEGOTIUM_MODEL_CATALOG);\n\n const parsed = readCodexModelCache(sourcePath).parsed;\n\n const models = (parsed.models as unknown[]).map((model, index): CodexModel => {\n if (!model || typeof model !== \"object\" || Array.isArray(model)) {\n throw new Error(`Codex model cache entry ${index} is invalid: ${sourcePath}`);\n }\n return { ...(model as CodexModel), multi_agent_version: \"disabled\" };\n });\n const contents = `${JSON.stringify({ models }, null, 2)}\\n`;\n writePrivateFileAtomic(outputPath, contents);\n return outputPath;\n}\n",
36
- "export const NEGOTIUM_VERSION = \"0.3.13\";\n",
36
+ "export const NEGOTIUM_VERSION = \"0.4.0\";\n",
37
37
  "import { execFileSync } from \"node:child_process\";\nimport { type CodexTreeHost, createCodexTreeManager } from \"#agents/codex-tree-manager\";\nimport { logger } from \"#platform/logger\";\n\nfunction execText(command: string, args: string[]): string {\n try {\n return execFileSync(command, args, {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n } catch {\n return \"\";\n }\n}\n\nconst posixHost: CodexTreeHost = {\n parentPid: process.pid,\n getDirectChildren(parentPid) {\n const output = execText(\"pgrep\", [\"-P\", String(parentPid)]);\n if (!output) return [];\n return output\n .split(\"\\n\")\n .map(Number)\n .filter((pid) => Number.isFinite(pid) && pid > 0);\n },\n getProcessName: (pid) => execText(\"ps\", [\"-p\", String(pid), \"-o\", \"comm=\"]),\n getProcessStart: (pid) => execText(\"ps\", [\"-p\", String(pid), \"-o\", \"lstart=\"]),\n kill: (pid, signal) => process.kill(pid, signal),\n logger,\n};\n\nconst manager = createCodexTreeManager(posixHost);\n\nexport type CodexProcStamp = { pid: number; lstart: string };\n\nexport const snapshotCodexChildren = manager.snapshotChildren;\nexport const findNewCodexChildren = manager.findNewChildren;\nexport const registerOwnedCodexPids = manager.registerOwnedPids;\nexport const unregisterOwnedCodexPids = manager.unregisterOwnedPids;\nexport const acquireCodexSpawnLock = manager.acquireSpawnLock;\nexport const withCodexSpawnSerial = manager.withSpawnSerial;\nexport const killCodexTrees = manager.killTrees;\nexport const killOwnedCodexTreesForShutdown = manager.killOwnedTreesForShutdown;\n\nexport {\n type CodexTreeHost,\n type CodexTreeLogger,\n type CodexTreeManager,\n type CodexTreeManagerOptions,\n createCodexTreeManager,\n} from \"#agents/codex-tree-manager\";\n",
38
38
  "export interface CodexTreeLogger {\n warn(fields: Record<string, unknown>, message: string): void;\n}\n\nexport interface CodexTreeHost {\n parentPid: number;\n getDirectChildren(parentPid: number): number[];\n getProcessName(pid: number): string;\n getProcessStart(pid: number): string;\n kill(pid: number, signal: 0 | \"SIGTERM\" | \"SIGKILL\"): void;\n logger: CodexTreeLogger;\n}\n\nexport interface CodexTreeManagerOptions {\n sigkillDelayMs?: number;\n treeDepthCap?: number;\n processNamePattern?: RegExp;\n}\n\nexport interface CodexTreeManager {\n snapshotChildren(): Map<number, string>;\n findNewChildren(baseline: Map<number, string>): number[];\n registerOwnedPids(pids: Iterable<number>): void;\n unregisterOwnedPids(pids: Iterable<number>): void;\n acquireSpawnLock(): Promise<() => void>;\n withSpawnSerial<T>(fn: () => Promise<T>): Promise<T>;\n killTrees(rootPids: number[]): void;\n killOwnedTreesForShutdown(graceMs?: number): Promise<void>;\n}\n\ntype KillPlan = {\n rootPids: number[];\n targets: Map<number, string>;\n};\n\n/** Caller-owned Codex process tracker and tree reaper. */\nexport function createCodexTreeManager(\n host: CodexTreeHost,\n options: CodexTreeManagerOptions = {},\n): CodexTreeManager {\n const sigkillDelayMs = options.sigkillDelayMs ?? 5_000;\n const treeDepthCap = options.treeDepthCap ?? 16;\n const processNamePattern = options.processNamePattern ?? /codex/i;\n const ownedPids = new Set<number>();\n let spawnChain: Promise<void> = Promise.resolve();\n\n function collectTree(rootPid: number, out = new Set<number>(), depth = 0): Set<number> {\n if (out.has(rootPid)) return out;\n out.add(rootPid);\n if (depth >= treeDepthCap) {\n host.logger.warn(\n { rootPid, depth, cap: treeDepthCap },\n \"codex-tree-kill: tree depth cap reached, descendants beyond this point not collected\",\n );\n return out;\n }\n for (const child of host.getDirectChildren(rootPid)) {\n collectTree(child, out, depth + 1);\n }\n return out;\n }\n\n function snapshotChildren(): Map<number, string> {\n const snapshot = new Map<number, string>();\n for (const pid of host.getDirectChildren(host.parentPid)) {\n const name = host.getProcessName(pid);\n if (!name || !processNamePattern.test(name)) continue;\n snapshot.set(pid, host.getProcessStart(pid));\n }\n return snapshot;\n }\n\n function registerOwnedPids(pids: Iterable<number>): void {\n for (const pid of pids) ownedPids.add(pid);\n }\n\n function unregisterOwnedPids(pids: Iterable<number>): void {\n for (const pid of pids) ownedPids.delete(pid);\n }\n\n function findNewChildren(baseline: Map<number, string>): number[] {\n const novel: number[] = [];\n for (const [pid, start] of snapshotChildren()) {\n const previousStart = baseline.get(pid);\n if (previousStart !== undefined && previousStart === start) continue;\n if (!ownedPids.has(pid)) novel.push(pid);\n }\n return novel;\n }\n\n async function acquireSpawnLock(): Promise<() => void> {\n const previous = spawnChain;\n let release!: () => void;\n let released = false;\n spawnChain = new Promise<void>((resolve) => {\n release = () => {\n if (released) return;\n released = true;\n resolve();\n };\n });\n await previous;\n return release;\n }\n\n async function withSpawnSerial<T>(fn: () => Promise<T>): Promise<T> {\n const release = await acquireSpawnLock();\n try {\n return await fn();\n } finally {\n release();\n }\n }\n\n function isAlive(pid: number): boolean {\n try {\n host.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n }\n\n function isSameProcess(pid: number, start: string): boolean {\n return start !== \"\" && isAlive(pid) && host.getProcessStart(pid) === start;\n }\n\n function signalTrees(rootPids: number[]): KillPlan | null {\n if (rootPids.length === 0) return null;\n const targets = new Map<number, string>();\n for (const rootPid of rootPids) {\n for (const pid of collectTree(rootPid)) {\n if (!targets.has(pid)) targets.set(pid, host.getProcessStart(pid));\n }\n }\n host.logger.warn(\n { rootPids, totalPids: targets.size },\n \"codex-tree-kill: SIGTERM process tree\",\n );\n for (const pid of targets.keys()) {\n try {\n host.kill(pid, \"SIGTERM\");\n } catch {\n // The process already exited or is no longer signalable.\n }\n }\n return { rootPids, targets };\n }\n\n function hasSurvivors(targets: Map<number, string>): boolean {\n for (const [pid, start] of targets) {\n if (isSameProcess(pid, start)) return true;\n }\n return false;\n }\n\n function killStragglers(plan: KillPlan): void {\n const aliveTargets: number[] = [];\n let droppedAsPossibleReuse = 0;\n for (const [pid, start] of plan.targets) {\n if (isSameProcess(pid, start)) aliveTargets.push(pid);\n else if (isAlive(pid)) droppedAsPossibleReuse++;\n }\n if (aliveTargets.length === 0) return;\n\n const reachable = new Set(aliveTargets);\n for (const rootPid of plan.rootPids) {\n const start = plan.targets.get(rootPid);\n if (start && isSameProcess(rootPid, start)) {\n for (const pid of collectTree(rootPid)) reachable.add(pid);\n }\n }\n const stragglers: number[] = [];\n for (const pid of reachable) {\n const start = plan.targets.get(pid);\n if (start && isSameProcess(pid, start)) stragglers.push(pid);\n else if (isAlive(pid)) droppedAsPossibleReuse++;\n }\n host.logger.warn(\n {\n aliveRoots: plan.rootPids.filter((pid) => {\n const start = plan.targets.get(pid);\n return start ? isSameProcess(pid, start) : false;\n }),\n totalStragglers: stragglers.length,\n droppedAsPossibleReuse,\n },\n \"codex-tree-kill: SIGKILL fallback after SIGTERM timeout\",\n );\n for (const pid of stragglers) {\n try {\n host.kill(pid, \"SIGKILL\");\n } catch {\n // The process exited during the survivor check.\n }\n }\n }\n\n function killTrees(rootPids: number[]): void {\n const plan = signalTrees(rootPids);\n if (!plan) return;\n const timer = setTimeout(() => killStragglers(plan), sigkillDelayMs);\n timer.unref?.();\n }\n\n async function killOwnedTreesForShutdown(graceMs = 3_000): Promise<void> {\n const roots = new Set(ownedPids);\n for (const pid of snapshotChildren().keys()) roots.add(pid);\n const plan = signalTrees([...roots]);\n if (!plan) return;\n const deadline = Date.now() + Math.max(0, graceMs);\n while (Date.now() < deadline && hasSurvivors(plan.targets)) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, Math.min(100, Math.max(1, deadline - Date.now()))),\n );\n }\n killStragglers(plan);\n }\n\n return {\n snapshotChildren,\n findNewChildren,\n registerOwnedPids,\n unregisterOwnedPids,\n acquireSpawnLock,\n withSpawnSerial,\n killTrees,\n killOwnedTreesForShutdown,\n };\n}\n",
39
+ "import { randomBytes } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { chmod, mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport type { Socket } from \"node:net\";\nimport { createServer } from \"node:net\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { codexCliScriptPath } from \"#agents/codex-native-multi-agent\";\nimport { deepMapStrings } from \"#agents/deep-map\";\nimport { referencesHostedSecretStorage, substituteHostedSecrets } from \"#agents/execution-host\";\nimport { shouldSubstituteVaultToolInput } from \"#agents/vault-tool-policy\";\n\nconst MAX_HOOK_REQUEST_BYTES = 1024 * 1024;\nconst SENSITIVE_STORAGE_DENIAL = \"Runtime secret storage access is not permitted\";\n\nexport interface CodexPreToolUseInput {\n hook_event_name?: string;\n tool_name: string;\n tool_input: unknown;\n}\n\nexport type CodexPreToolUseOutput = Record<string, unknown>;\n\nexport interface CodexVaultHookOperations {\n referencesSensitiveStorage(value: unknown): boolean;\n substitute(userId: string, value: string): string;\n}\n\nexport function evaluateCodexVaultPreToolUse(\n input: CodexPreToolUseInput,\n userId: string,\n operations: CodexVaultHookOperations,\n): CodexPreToolUseOutput {\n if (operations.referencesSensitiveStorage(input.tool_input)) {\n return {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\",\n permissionDecision: \"deny\",\n permissionDecisionReason: SENSITIVE_STORAGE_DENIAL,\n },\n };\n }\n\n if (!shouldSubstituteVaultToolInput(input.tool_name)) return {};\n const updatedInput = deepMapStrings(input.tool_input, (value) =>\n operations.substitute(userId, value),\n );\n if (JSON.stringify(updatedInput) === JSON.stringify(input.tool_input)) return {};\n return {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\",\n permissionDecision: \"allow\",\n updatedInput,\n },\n };\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", `'\"'\"'`)}'`;\n}\n\nfunction hookClientPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const adjacent = resolve(moduleDir, \"codex-vault-hook.mjs\");\n if (existsSync(adjacent)) return adjacent;\n const packaged = resolve(moduleDir, \"runtime/src/agents/codex-vault-hook.mjs\");\n if (existsSync(packaged)) return packaged;\n throw new Error(\"Codex Vault hook client is missing from this installation\");\n}\n\nfunction privateCodexWrapper(codexScript: string): string {\n return [\n \"#!/bin/sh\",\n 'if [ \"$1\" = \"exec\" ]; then',\n \" shift\",\n ` exec ${shellQuote(process.execPath)} ${shellQuote(codexScript)} exec --dangerously-bypass-hook-trust \"$@\"`,\n \"fi\",\n `exec ${shellQuote(process.execPath)} ${shellQuote(codexScript)} \"$@\"`,\n \"\",\n ].join(\"\\n\");\n}\n\nexport interface CodexVaultHookBridge {\n codexPathOverride: string;\n hooks: {\n PreToolUse: Array<{\n matcher: string;\n hooks: Array<{\n type: string;\n command: string;\n timeout: number;\n statusMessage: string;\n }>;\n }>;\n };\n close(): Promise<void>;\n}\n\nexport async function createCodexVaultHookBridge(userId: string): Promise<CodexVaultHookBridge> {\n const root = await mkdtemp(join(tmpdir(), \"negotium-codex-vault-\"));\n await chmod(root, 0o700);\n const socketPath = join(root, \"hook.sock\");\n const wrapperPath = join(root, \"codex-with-hooks\");\n const token = randomBytes(32).toString(\"hex\");\n const connections = new Set<Socket>();\n const server = createServer((socket) => {\n connections.add(socket);\n socket.once(\"close\", () => connections.delete(socket));\n socket.setEncoding(\"utf8\");\n let request = \"\";\n let handled = false;\n const handleRequest = () => {\n if (handled) return;\n handled = true;\n try {\n const parsed = JSON.parse(request.trimEnd()) as {\n token?: unknown;\n input?: CodexPreToolUseInput;\n };\n if (parsed.token !== token) throw new Error(\"invalid hook capability\");\n if (\n !parsed.input ||\n typeof parsed.input !== \"object\" ||\n typeof parsed.input.tool_name !== \"string\"\n ) {\n throw new Error(\"invalid PreToolUse payload\");\n }\n const output = evaluateCodexVaultPreToolUse(parsed.input, userId, {\n referencesSensitiveStorage: referencesHostedSecretStorage,\n substitute: substituteHostedSecrets,\n });\n socket.end(JSON.stringify({ ok: true, output }));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n socket.end(JSON.stringify({ ok: false, error: message }));\n }\n };\n socket.on(\"data\", (chunk: string) => {\n request += chunk;\n if (Buffer.byteLength(request) > MAX_HOOK_REQUEST_BYTES) socket.destroy();\n else if (request.endsWith(\"\\n\")) handleRequest();\n });\n socket.on(\"end\", handleRequest);\n });\n\n try {\n await new Promise<void>((resolveListen, reject) => {\n server.once(\"error\", reject);\n server.listen(socketPath, () => {\n server.off(\"error\", reject);\n resolveListen();\n });\n });\n await chmod(socketPath, 0o600);\n await writeFile(wrapperPath, privateCodexWrapper(codexCliScriptPath()), { mode: 0o700 });\n\n const command = [\n shellQuote(process.execPath),\n shellQuote(hookClientPath()),\n shellQuote(socketPath),\n shellQuote(token),\n ].join(\" \");\n return {\n codexPathOverride: wrapperPath,\n hooks: {\n PreToolUse: [\n {\n matcher: \"*\",\n hooks: [\n {\n type: \"command\",\n command,\n timeout: 30,\n statusMessage: \"Resolving Vault placeholders\",\n },\n ],\n },\n ],\n },\n async close() {\n for (const socket of connections) socket.destroy();\n await new Promise<void>((resolveClose) => server.close(() => resolveClose()));\n await rm(root, { recursive: true, force: true });\n },\n };\n } catch (error) {\n server.close();\n await rm(root, { recursive: true, force: true });\n throw error;\n }\n}\n",
39
40
  "/**\n * Codex rollout encoder.\n *\n * Materializes a synthetic JSONL at\n * `~/.codex/sessions/<yyyy>/<mm>/<dd>/rollout-<ts>-<threadId>.jsonl` so a\n * subsequent `codex.resumeThread(threadId)` continues the cross-agent\n * conversation as if it had always been native. Verified by sandbox PoC\n * test-7c: the SDK accepts these without checksum gating, requiring only the\n * captured 5-entry SDK shell (`agents/fixtures/codex-shell.jsonl`) plus\n * synthesized `response_item`/`event_msg` pairs per turn.\n *\n * Tool history is folded into assistant text as `[Tool: ...]` annotations\n * (see shared.ts:extractChatPairs). Native same-agent forks use App Server's\n * `thread/fork`; this encoder remains the fallback and cross-agent bridge,\n * where synthetic tool_use IDs are too fragile to reconstruct structurally.\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { existsSync, readFileSync, realpathSync, statSync, unlinkSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { hostedCodexHomePath } from \"#agents/execution-host\";\nimport {\n assertUuidLike,\n type ChatPair,\n clone,\n ensureCwdExists,\n extractChatPairs,\n FIXTURES_DIR,\n} from \"#agents/rollout/shared\";\nimport { parseJsonlText, writeJsonlFile } from \"#platform/jsonl\";\nimport { logger } from \"#platform/logger\";\nimport type { ConversationEntry } from \"#storage/conversations\";\nimport type { EffortLevel } from \"#types\";\n\ninterface CodexShell {\n sessionMeta: Record<string, unknown>;\n taskStarted: Record<string, unknown>;\n developerSetup: Record<string, unknown>;\n envContext: Record<string, unknown>;\n turnContext: Record<string, unknown>;\n}\n\nfunction codexSessionsDir(): string {\n return join(hostedCodexHomePath(), \"sessions\");\n}\n\nlet _shellCache: CodexShell | null = null;\nfunction loadCodexShell(): CodexShell {\n if (_shellCache) return _shellCache;\n const raw = readFileSync(join(FIXTURES_DIR, \"codex-shell.jsonl\"), \"utf8\");\n const lines = parseJsonlText<Record<string, unknown>>(raw);\n if (lines.length < 5) {\n throw new Error(\n `loadCodexShell: expected >=5 entries in codex-shell.jsonl, got ${lines.length}`,\n );\n }\n _shellCache = {\n sessionMeta: lines[0],\n taskStarted: lines[1],\n developerSetup: lines[2],\n envContext: lines[3],\n turnContext: lines[4],\n };\n return _shellCache;\n}\n\n/** UUIDv7 (Codex thread_id format). */\nfunction uuidv7(): string {\n const ts = Date.now();\n const tsHex = ts.toString(16).padStart(12, \"0\");\n const rand = randomBytes(10);\n rand[0] = (rand[0] & 0x0f) | 0x70; // version 7\n rand[2] = (rand[2] & 0x3f) | 0x80; // variant\n return [\n tsHex.slice(0, 8),\n tsHex.slice(8, 12),\n rand.slice(0, 2).toString(\"hex\"),\n rand.slice(2, 4).toString(\"hex\"),\n rand.slice(4, 10).toString(\"hex\"),\n ].join(\"-\");\n}\n\n/** Replace captured developer metadata with the policy used for resumed turns. */\nfunction patchDeveloperSetup(developerSetup: Record<string, unknown>): void {\n const payload = developerSetup.payload as Record<string, unknown> | undefined;\n if (!payload) return;\n payload.content = [\n {\n type: \"input_text\",\n text: [\n \"<permissions instructions>\",\n \"Filesystem sandboxing is disabled for this runtime turn (`danger-full-access`).\",\n \"Approval policy is `never`.\",\n \"</permissions instructions>\",\n ].join(\"\\n\"),\n },\n ];\n}\n\n/** Mutate captured `<environment_context>` fields to the current runtime. */\nfunction patchEnvContext(\n envContext: Record<string, unknown>,\n cwd: string,\n currentDate: string,\n timezone: string,\n): void {\n const payload = envContext.payload as Record<string, unknown> | undefined;\n if (!payload) return;\n const content = payload.content as Array<Record<string, unknown>> | undefined;\n if (!Array.isArray(content)) return;\n for (const block of content) {\n if (block.type === \"input_text\" && typeof block.text === \"string\") {\n block.text = block.text\n .replace(/<cwd>[^<]*<\\/cwd>/, `<cwd>${cwd}</cwd>`)\n .replace(\n /<current_date>[^<]*<\\/current_date>/,\n `<current_date>${currentDate}</current_date>`,\n )\n .replace(/<timezone>[^<]*<\\/timezone>/, `<timezone>${timezone}</timezone>`);\n }\n }\n}\n\nexport interface CodexRolloutOptions {\n /** Working directory the resumed Codex thread will report. */\n cwd: string;\n /** Optional override; default = freshly generated UUIDv7. */\n threadId?: string;\n /** Override extracted pairs. */\n pairs?: ChatPair[];\n /** Source UnifiedEvent log when `pairs` is omitted. */\n entries?: ConversationEntry[];\n /** Effective model/effort that Codex will use when this thread is resumed. */\n model?: string;\n effort?: EffortLevel;\n}\n\nexport interface CodexRolloutResult {\n threadId: string;\n rolloutPath: string;\n}\n\nexport interface CodexContextUsage {\n contextTokens: number;\n contextWindow: number;\n}\n\nexport interface CodexTokenTotals {\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens: number;\n cacheWriteInputTokens: number;\n}\n\nexport interface CodexPatchChangePreview {\n path: string;\n before?: string;\n after?: string;\n diffPreview?: string;\n}\n\nexport interface CodexPatchPreview {\n callId: string;\n changes: CodexPatchChangePreview[];\n}\n\nfunction codexRolloutPath(threadId: string, fallback: Date): string {\n const threadCreatedAt = decodeUuidV7Timestamp(threadId);\n const createdAt = threadCreatedAt === null ? fallback : new Date(threadCreatedAt);\n const yyyy = String(createdAt.getFullYear());\n const mm = String(createdAt.getMonth() + 1).padStart(2, \"0\");\n const dd = String(createdAt.getDate()).padStart(2, \"0\");\n const hh = String(createdAt.getHours()).padStart(2, \"0\");\n const min = String(createdAt.getMinutes()).padStart(2, \"0\");\n const ss = String(createdAt.getSeconds()).padStart(2, \"0\");\n const dir = join(codexSessionsDir(), yyyy, mm, dd);\n return join(dir, `rollout-${yyyy}-${mm}-${dd}T${hh}-${min}-${ss}-${threadId}.jsonl`);\n}\n\nfunction canonicalFilePath(path: string): string {\n const absolute = resolve(path);\n try {\n return realpathSync(absolute);\n } catch {\n try {\n return join(realpathSync(dirname(absolute)), basename(absolute));\n } catch {\n return absolute;\n }\n }\n}\n\nfunction changedPatchLines(value: string): Omit<CodexPatchChangePreview, \"path\"> {\n const removed: string[] = [];\n const added: string[] = [];\n const diffPreview: string[] = [];\n let oldLine = 0;\n let newLine = 0;\n let sawHunk = false;\n for (const line of value.split(\"\\n\")) {\n const hunk = /^@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/.exec(line);\n if (hunk) {\n if (sawHunk) diffPreview.push(\"…\");\n sawHunk = true;\n oldLine = Number.parseInt(hunk[1] ?? \"0\", 10);\n newLine = Number.parseInt(hunk[2] ?? \"0\", 10);\n continue;\n }\n if (!sawHunk && (line.startsWith(\"--- \") || line.startsWith(\"+++ \"))) continue;\n if (line.startsWith(\"\\\\ No newline\")) continue;\n if (line.startsWith(\"-\")) {\n removed.push(line.slice(1));\n diffPreview.push(`${oldLine} -${line.slice(1)}`);\n oldLine += 1;\n continue;\n }\n if (line.startsWith(\"+\")) {\n added.push(line.slice(1));\n diffPreview.push(`${newLine} +${line.slice(1)}`);\n newLine += 1;\n continue;\n }\n if (line.startsWith(\" \")) {\n diffPreview.push(`${newLine} ${line.slice(1)}`);\n oldLine += 1;\n newLine += 1;\n }\n }\n return {\n ...(removed.length > 0 ? { before: removed.join(\"\\n\") } : {}),\n ...(added.length > 0 ? { after: added.join(\"\\n\") } : {}),\n ...(diffPreview.length > 0 ? { diffPreview: diffPreview.join(\"\\n\") } : {}),\n };\n}\n\n/**\n * Extract the newest native apply_patch result matching a Codex file_change.\n *\n * The public SDK intentionally reduces file changes to path + kind, while the\n * native rollout keeps the exact unified diff in patch_apply_end. Reading that\n * payload preserves the real per-edit +/- lines even when the topic cwd itself\n * is not a Git repository.\n */\nexport function extractLatestCodexPatchPreview(\n jsonl: string,\n expectedPaths: string[],\n consumedCallIds: ReadonlySet<string> = new Set(),\n expectedCallId?: string,\n): CodexPatchPreview | undefined {\n const expected = expectedPaths.map(canonicalFilePath);\n const lines = jsonl.trimEnd().split(\"\\n\");\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n try {\n const entry = JSON.parse(lines[index] ?? \"\") as {\n type?: string;\n payload?: {\n type?: string;\n call_id?: string;\n changes?: Record<\n string,\n { type?: string; unified_diff?: string; content?: string; move_path?: string | null }\n >;\n };\n };\n if (entry.type !== \"event_msg\" || entry.payload?.type !== \"patch_apply_end\") continue;\n const callId = entry.payload.call_id;\n const rawChanges = entry.payload.changes;\n if (\n !callId ||\n consumedCallIds.has(callId) ||\n (expectedCallId !== undefined && callId !== expectedCallId) ||\n !rawChanges\n ) {\n continue;\n }\n\n const entries = Object.entries(rawChanges);\n const matched = expected.map((path) =>\n entries.find(([candidate]) => canonicalFilePath(candidate) === path),\n );\n const complete = matched.filter(\n (change): change is NonNullable<typeof change> => change !== undefined,\n );\n if (complete.length !== expected.length) continue;\n\n return {\n callId,\n changes: complete.map(([path, change]) => {\n if (typeof change.unified_diff === \"string\") {\n return { path, ...changedPatchLines(change.unified_diff) };\n }\n const content =\n typeof change.content === \"string\" ? change.content.replace(/\\n$/, \"\") : undefined;\n return {\n path,\n ...(change.type === \"delete\" && content !== undefined ? { before: content } : {}),\n ...(change.type === \"add\" && content !== undefined ? { after: content } : {}),\n };\n }),\n };\n } catch {\n // A concurrently appended final line may be incomplete; keep scanning.\n }\n }\n return undefined;\n}\n\nexport function extractCodexPatchCallIds(jsonl: string): string[] {\n const callIds: string[] = [];\n for (const line of jsonl.trimEnd().split(\"\\n\")) {\n try {\n const entry = JSON.parse(line) as {\n type?: string;\n payload?: { type?: string; call_id?: string };\n };\n if (\n entry.type === \"event_msg\" &&\n entry.payload?.type === \"patch_apply_end\" &&\n typeof entry.payload.call_id === \"string\"\n ) {\n callIds.push(entry.payload.call_id);\n }\n } catch {\n // A concurrently appended final line may be incomplete.\n }\n }\n return callIds;\n}\n\n/** List native patch calls that already existed before a resumed turn. */\nexport function readCodexPatchCallIds(threadId: string): string[] {\n const path = latestCodexRolloutPath(threadId);\n if (!path) return [];\n try {\n return extractCodexPatchCallIds(readFileSync(path, \"utf8\"));\n } catch (error) {\n logger.debug({ error, threadId }, \"codex patch ids: rollout read failed\");\n return [];\n }\n}\n\n/** Resolve a thread's newest native apply_patch preview. */\nexport function readLatestCodexPatchPreview(\n threadId: string,\n expectedPaths: string[],\n consumedCallIds: ReadonlySet<string> = new Set(),\n expectedCallId?: string,\n): CodexPatchPreview | undefined {\n const path = latestCodexRolloutPath(threadId);\n if (!path) return undefined;\n try {\n return extractLatestCodexPatchPreview(\n readFileSync(path, \"utf8\"),\n expectedPaths,\n consumedCallIds,\n expectedCallId,\n );\n } catch (error) {\n logger.debug({ error, threadId }, \"codex patch preview: rollout read failed\");\n return undefined;\n }\n}\n\n/** Read the latest per-request context measurement from a Codex rollout. */\nexport function extractLatestCodexContextUsage(jsonl: string): CodexContextUsage | undefined {\n const lines = jsonl.trimEnd().split(\"\\n\");\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n try {\n const entry = JSON.parse(lines[index] ?? \"\") as {\n type?: string;\n payload?: {\n type?: string;\n info?: {\n last_token_usage?: { total_tokens?: number };\n model_context_window?: number;\n };\n };\n };\n if (entry.type !== \"event_msg\" || entry.payload?.type !== \"token_count\") continue;\n const contextTokens = entry.payload.info?.last_token_usage?.total_tokens;\n const contextWindow = entry.payload.info?.model_context_window;\n if (\n typeof contextTokens === \"number\" &&\n Number.isFinite(contextTokens) &&\n contextTokens >= 0 &&\n typeof contextWindow === \"number\" &&\n Number.isFinite(contextWindow) &&\n contextWindow > 0\n ) {\n return { contextTokens, contextWindow };\n }\n } catch {\n // A concurrently appended final line may be incomplete; keep scanning.\n }\n }\n return undefined;\n}\n\n/** Latest cumulative token counter persisted in a native Codex rollout. */\nexport function extractLatestCodexTokenTotals(jsonl: string): CodexTokenTotals | undefined {\n const lines = jsonl.trimEnd().split(\"\\n\");\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n try {\n const entry = JSON.parse(lines[index] ?? \"\") as {\n type?: string;\n payload?: {\n type?: string;\n info?: {\n total_token_usage?: {\n input_tokens?: number;\n output_tokens?: number;\n cached_input_tokens?: number;\n cache_write_input_tokens?: number;\n };\n };\n };\n };\n if (entry.type !== \"event_msg\" || entry.payload?.type !== \"token_count\") continue;\n const usage = entry.payload.info?.total_token_usage;\n if (!usage) continue;\n const values = [\n usage.input_tokens,\n usage.output_tokens,\n usage.cached_input_tokens,\n usage.cache_write_input_tokens,\n ];\n if (values.some((value) => value !== undefined && (!Number.isFinite(value) || value < 0))) {\n continue;\n }\n return {\n inputTokens: usage.input_tokens ?? 0,\n outputTokens: usage.output_tokens ?? 0,\n cachedInputTokens: usage.cached_input_tokens ?? 0,\n cacheWriteInputTokens: usage.cache_write_input_tokens ?? 0,\n };\n } catch {\n // A concurrently appended final line may be incomplete; keep scanning.\n }\n }\n return undefined;\n}\n\n/** Resolve a thread's current rollout and return its latest context measurement. */\nexport function readLatestCodexContextUsage(threadId: string): CodexContextUsage | undefined {\n const path = latestCodexRolloutPath(threadId);\n if (!path) return undefined;\n try {\n return extractLatestCodexContextUsage(readFileSync(path, \"utf8\"));\n } catch (error) {\n logger.debug({ error, threadId }, \"codex context usage: rollout read failed\");\n return undefined;\n }\n}\n\nexport function readLatestCodexTokenTotals(threadId: string): CodexTokenTotals | undefined {\n const path = latestCodexRolloutPath(threadId);\n if (!path) return undefined;\n try {\n return extractLatestCodexTokenTotals(readFileSync(path, \"utf8\"));\n } catch (error) {\n logger.debug({ error, threadId }, \"codex token totals: rollout read failed\");\n return undefined;\n }\n}\n\n/**\n * Old and metadata-free Codex rollouts resume as native multi-agent v1 even\n * when the feature flag is false. Rewrite their runtime metadata in place so\n * the same thread can resume without losing provider conversation history.\n */\nexport function migrateCodexRolloutNativeMultiAgentMetadata(threadId: string): boolean {\n const path = latestCodexRolloutPath(threadId);\n if (!path) return false;\n try {\n const entries = parseJsonlText<{\n type?: string;\n payload?: Record<string, unknown>;\n }>(readFileSync(path, \"utf8\"));\n let changed = false;\n for (const entry of entries) {\n if (entry.type !== \"session_meta\" && entry.type !== \"turn_context\") continue;\n if (!entry.payload) entry.payload = {};\n if (entry.payload.multi_agent_version !== \"disabled\") {\n entry.payload.multi_agent_version = \"disabled\";\n changed = true;\n }\n }\n if (changed) {\n writeJsonlFile(path, entries);\n logger.info({ threadId, path }, \"codex rollout native multi-agent metadata disabled\");\n }\n return changed;\n } catch (error) {\n logger.error({ error, threadId, path }, \"codex rollout native multi-agent migration failed\");\n throw new Error(`Failed to migrate Codex rollout '${threadId}'`, { cause: error });\n }\n}\n\nexport function latestCodexRolloutPath(threadId: string): string | undefined {\n const sessionsDir = codexSessionsDir();\n const candidates: string[] = [];\n const buckets = candidateDateBuckets(threadId);\n try {\n if (buckets) {\n for (const bucket of buckets) {\n const dir = join(sessionsDir, bucket);\n if (!existsSync(dir)) continue;\n const glob = new Bun.Glob(`rollout-*-${threadId}.jsonl`);\n for (const rel of glob.scanSync({ cwd: dir, onlyFiles: true })) {\n candidates.push(join(dir, rel));\n }\n }\n }\n // The UUIDv7 timestamp is UTC, but Codex names session directories by the\n // local date, so a session opened in the evening of a negative-offset\n // timezone lands in the previous day's bucket. When the date-derived\n // buckets miss (or none were computed), fall back to a whole-tree scan so\n // that skew never silently drops the rollout.\n if (candidates.length === 0) {\n const glob = new Bun.Glob(`**/rollout-*-${threadId}.jsonl`);\n for (const rel of glob.scanSync({ cwd: sessionsDir, onlyFiles: true })) {\n candidates.push(join(sessionsDir, rel));\n }\n }\n return candidates.sort((a, b) => statSync(b).mtimeMs - statSync(a).mtimeMs)[0];\n } catch (error) {\n logger.debug({ error, threadId }, \"codex rollout lookup failed\");\n return undefined;\n }\n}\n\n/**\n * Materialize a Codex rollout JSONL with the provided dialogue and place it\n * at `~/.codex/sessions/<yyyy>/<mm>/<dd>/rollout-<ts>-<threadId>.jsonl` so a\n * subsequent `codex.resumeThread(threadId)` continues the conversation.\n */\nexport function writeCodexRollout(opts: CodexRolloutOptions): CodexRolloutResult {\n const threadId = opts.threadId ?? uuidv7();\n assertUuidLike(\"threadId\", threadId);\n ensureCwdExists(opts.cwd);\n const pairs = opts.pairs ?? extractChatPairs(opts.entries ?? []);\n const now = new Date();\n const tsIso = now.toISOString();\n const currentDate = [\n now.getFullYear(),\n String(now.getMonth() + 1).padStart(2, \"0\"),\n String(now.getDate()).padStart(2, \"0\"),\n ].join(\"-\");\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone || process.env.TZ || \"UTC\";\n\n // Captured 5-entry SDK shell (session_meta, task_started, developer setup,\n // environment_context, turn_context). Cloned per call so the cached\n // fixture is never mutated; only id/timestamp/cwd are patched.\n const shell = loadCodexShell();\n const sessionMeta = clone(shell.sessionMeta);\n (sessionMeta.payload as Record<string, unknown>).id = threadId;\n (sessionMeta.payload as Record<string, unknown>).timestamp = tsIso;\n (sessionMeta.payload as Record<string, unknown>).cwd = opts.cwd;\n (sessionMeta.payload as Record<string, unknown>).multi_agent_version = \"disabled\";\n (sessionMeta as Record<string, unknown>).timestamp = tsIso;\n\n const taskStarted = clone(shell.taskStarted);\n (taskStarted as Record<string, unknown>).timestamp = tsIso;\n\n const developerSetup = clone(shell.developerSetup);\n (developerSetup as Record<string, unknown>).timestamp = tsIso;\n patchDeveloperSetup(developerSetup);\n\n const envContext = clone(shell.envContext);\n (envContext as Record<string, unknown>).timestamp = tsIso;\n patchEnvContext(envContext, opts.cwd, currentDate, timezone);\n\n const turnContext = clone(shell.turnContext);\n (turnContext as Record<string, unknown>).timestamp = tsIso;\n const turnPayload = turnContext.payload as Record<string, unknown>;\n turnPayload.cwd = opts.cwd;\n turnPayload.current_date = currentDate;\n turnPayload.timezone = timezone;\n turnPayload.approval_policy = \"never\";\n turnPayload.sandbox_policy = { type: \"danger-full-access\" };\n turnPayload.multi_agent_version = \"disabled\";\n delete turnPayload.permission_profile;\n if (opts.model) turnPayload.model = opts.model;\n const collaborationMode = turnPayload.collaboration_mode as Record<string, unknown> | undefined;\n const collaborationSettings = collaborationMode?.settings as Record<string, unknown> | undefined;\n if (collaborationSettings) {\n if (opts.model) collaborationSettings.model = opts.model;\n if (opts.effort !== undefined) collaborationSettings.reasoning_effort = opts.effort;\n }\n\n const lines: unknown[] = [sessionMeta, taskStarted, developerSetup, envContext, turnContext];\n\n for (const pair of pairs) {\n lines.push({\n timestamp: tsIso,\n type: \"response_item\",\n payload: {\n type: \"message\",\n role: \"user\",\n content: [{ type: \"input_text\", text: pair.userText }],\n },\n });\n lines.push({\n timestamp: tsIso,\n type: \"event_msg\",\n payload: {\n type: \"user_message\",\n message: pair.userText,\n images: [],\n local_images: [],\n text_elements: [],\n },\n });\n lines.push({\n timestamp: tsIso,\n type: \"event_msg\",\n payload: {\n type: \"agent_message\",\n message: pair.assistantText,\n phase: \"final_answer\",\n memory_citation: null,\n },\n });\n lines.push({\n timestamp: tsIso,\n type: \"response_item\",\n payload: {\n type: \"message\",\n role: \"assistant\",\n content: [{ type: \"output_text\", text: pair.assistantText }],\n phase: \"final_answer\",\n },\n });\n }\n\n lines.push({\n timestamp: tsIso,\n type: \"event_msg\",\n payload: { type: \"task_complete\" },\n });\n\n // Codex indexes a thread by the local wall-clock timestamp encoded in its\n // UUIDv7 creation time. A cross-agent round-trip may rewrite the rollout\n // much later, but the path must remain the original canonical path or\n // `thread/resume` rejects it as missing and the provider starts fresh.\n const path = codexRolloutPath(threadId, now);\n\n // Round-trip cleanup: when the caller reused a threadId (claude→codex→...\n // or maestro→codex→... cycles via `findLastSessionIdForAgent`), the SDK's\n // original rollout for that threadId still sits at its canonical path.\n // Sweep every prior file for this threadId BEFORE replacing that path so\n // legacy writers cannot leave ambiguous duplicates behind.\n //\n // Synchronous on purpose: writeCodexRollout's signature is sync (called\n // inside set_agent's DB transaction), and an async sweep would race with\n // the following `writeJsonlFile` — Bun.Glob would re-scan once the\n // microtask queue drains and could unlink the file we just wrote if today\n // and the original-write-date are the same. Sync glob/unlink completes\n // before the new file ever lands on disk.\n //\n // Only runs when `opts.threadId` was supplied; fresh-mint threadIds can't\n // have prior files. Errors are logged but non-fatal — losing the sweep on\n // a permission glitch is preferable to crashing the whole switch.\n if (opts.threadId) {\n sweepPriorRolloutsForThread(opts.threadId);\n }\n\n writeJsonlFile(path, lines);\n logger.info(\n { threadId, path, pairs: pairs.length },\n \"writeCodexRollout: synthetic rollout placed\",\n );\n return { threadId, rolloutPath: path };\n}\n\n/**\n * Synchronous unlink of every existing `rollout-*-<threadId>.jsonl` under\n * `~/.codex/sessions/**`. Same glob shape `codexRegistry.cleanupRollouts`\n * uses (kept duplicate rather than imported to avoid the registry → rollout\n * → registry cycle).\n */\nfunction sweepPriorRolloutsForThread(threadId: string): void {\n const sessionsDir = codexSessionsDir();\n const buckets = candidateDateBuckets(threadId);\n if (!buckets) {\n // Couldn't pin a date from the threadId — fall back to the safer (but\n // much slower) whole-tree scan so we still find every prior rollout.\n sweepPriorRolloutsFullTree(threadId, sessionsDir);\n return;\n }\n for (const bucket of buckets) {\n const dir = join(sessionsDir, bucket);\n if (!existsSync(dir)) continue;\n try {\n const glob = new Bun.Glob(`rollout-*-${threadId}.jsonl`);\n for (const rel of glob.scanSync({ cwd: dir, onlyFiles: true })) {\n const fullPath = join(dir, rel);\n try {\n unlinkSync(fullPath);\n } catch (e) {\n if ((e as NodeJS.ErrnoException)?.code !== \"ENOENT\") {\n logger.warn(\n { err: e, path: fullPath },\n \"writeCodexRollout: prior-rollout unlink failed (continuing)\",\n );\n }\n }\n }\n } catch (e) {\n logger.warn(\n { err: e, threadId, bucket },\n \"writeCodexRollout: prior-rollout bucket scan failed (continuing)\",\n );\n }\n }\n}\n\n/** Legacy whole-tree scan. Used only when `candidateDateBuckets` can't pin a\n * date set from the threadId (non-UUIDv7 ids, e.g. some test fixtures). */\nfunction sweepPriorRolloutsFullTree(threadId: string, sessionsDir: string): void {\n try {\n const glob = new Bun.Glob(`**/rollout-*-${threadId}.jsonl`);\n for (const rel of glob.scanSync({ cwd: sessionsDir, onlyFiles: true })) {\n const fullPath = join(sessionsDir, rel);\n try {\n unlinkSync(fullPath);\n } catch (e) {\n if ((e as NodeJS.ErrnoException)?.code !== \"ENOENT\") {\n logger.warn(\n { err: e, path: fullPath },\n \"writeCodexRollout: prior-rollout unlink failed (continuing)\",\n );\n }\n }\n }\n } catch (e) {\n logger.warn(\n { err: e, threadId },\n \"writeCodexRollout: full-tree prior-rollout sweep failed (continuing)\",\n );\n }\n}\n\n/**\n * UUIDv7 ids encode their creation time in the first 48 bits. Current writers\n * always use that canonical birth-date bucket, but older writers used the\n * rewrite date during cross-agent bridges. Enumerate the inclusive range from\n * birth date to today so cleanup also removes those legacy misplaced files.\n *\n * Returns null when:\n * - threadId isn't a parseable UUIDv7 (atypical fixture / future format)\n * - the day span exceeds MAX_DAY_SPAN (a month+-old re-bridge isn't worth\n * per-day enumeration; safer to scan the full tree than to enumerate\n * hundreds of dirs and still maybe miss something)\n * In both cases the caller falls back to the whole-tree sweep so safety\n * never degrades below the original implementation.\n */\nconst MAX_DAY_SPAN = 30;\nconst DAY_MS = 86_400_000;\nconst LOCAL_DATE_SKEW_DAYS = 1;\n\nfunction candidateDateBuckets(threadId: string): Set<string> | null {\n const tidMs = decodeUuidV7Timestamp(threadId);\n if (tidMs === null) return null;\n const nowMs = Date.now();\n // Day-floor each end so DST / minutes-of-day noise doesn't bloat the span.\n const tidDay = Math.floor(tidMs / DAY_MS);\n const todayDay = Math.floor(nowMs / DAY_MS);\n const minDay = Math.min(tidDay, todayDay);\n const maxDay = Math.max(tidDay, todayDay);\n const span = maxDay - minDay;\n if (span > MAX_DAY_SPAN) return null;\n const buckets = new Set<string>();\n // Codex buckets sessions by local calendar date while UUIDv7 timestamps are\n // UTC. Include one day on each edge so every date-bucketed caller (context\n // usage, migration, and prior-rollout cleanup) covers timezone skew without\n // falling back to a whole-tree scan.\n for (let d = minDay - LOCAL_DATE_SKEW_DAYS; d <= maxDay + LOCAL_DATE_SKEW_DAYS; d++) {\n buckets.add(formatDateBucket(new Date(d * DAY_MS)));\n }\n return buckets;\n}\n\n/**\n * Decode the 48-bit unix-ms timestamp out of a UUIDv7. The first 12 hex\n * chars of the dash-separated form are the timestamp. Returns null when the\n * input doesn't look like a UUIDv7 or the decoded value is outside a\n * plausibility window (defensive: a malformed id that fits the regex but\n * decodes to year 1972 would point the sweep at a non-existent bucket —\n * better to fall back to the whole-tree scan than to silently no-op).\n *\n * Exported for tests.\n */\nexport function decodeUuidV7Timestamp(threadId: string): number | null {\n if (typeof threadId !== \"string\") return null;\n const m =\n /^([0-9a-fA-F]{8})-([0-9a-fA-F]{4})-7[0-9a-fA-F]{3}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.exec(\n threadId,\n );\n if (!m) return null;\n const hex = `${m[1]}${m[2]}`;\n const ms = Number.parseInt(hex, 16);\n if (!Number.isFinite(ms)) return null;\n const MIN = 1577836800000; // 2020-01-01T00:00:00Z\n const MAX = 4102444800000; // 2100-01-01T00:00:00Z\n if (ms < MIN || ms > MAX) return null;\n return ms;\n}\n\nfunction formatDateBucket(d: Date): string {\n const yyyy = d.getUTCFullYear();\n const mm = String(d.getUTCMonth() + 1).padStart(2, \"0\");\n const dd = String(d.getUTCDate()).padStart(2, \"0\");\n return `${yyyy}/${mm}/${dd}`;\n}\n\n/** Internal export for tests. */\nexport const __candidateDateBuckets = candidateDateBuckets;\n",
40
41
  "/**\n * Format a tool_use event into a human-readable label.\n *\n * Agent-agnostic: the SDKs share the same convention of `(name, input record)`\n * for tool calls, so this lives next to the providers rather than inside any\n * one of them. Used by progress messages, fork relays, and the conversation\n * event processor.\n */\nimport { readFileSync, statSync } from \"node:fs\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport { diffLines as computeLineDiff } from \"diff\";\n\nexport type ToolCallSummaryValue =\n | string\n | number\n | boolean\n | Array<{ label: string; description?: string }>;\n\nexport type ToolCallSummaryInput = Record<string, ToolCallSummaryValue>;\n\nconst TOOL_SUMMARY_MAX_CHARS = 90;\nconst TOOL_SUMMARY_HEAD_CHARS = 52;\nconst TOOL_SUMMARY_TAIL_CHARS = 28;\nconst TOOL_DIFF_MAX_CHARS = 4_000;\nconst TOOL_DIFF_SOURCE_MAX_BYTES = 2_000_000;\nconst SHELL_SUMMARY_MAX_PARTS = 3;\nconst SSH_OPTIONS_WITH_VALUE = new Set([\n \"-B\",\n \"-b\",\n \"-c\",\n \"-D\",\n \"-E\",\n \"-e\",\n \"-F\",\n \"-I\",\n \"-i\",\n \"-J\",\n \"-L\",\n \"-l\",\n \"-m\",\n \"-O\",\n \"-o\",\n \"-p\",\n \"-Q\",\n \"-R\",\n \"-S\",\n \"-W\",\n \"-w\",\n]);\n\nconst SUMMARY_KEYS = [\n \"command\",\n \"cmd\",\n \"file_path\",\n \"file_id\",\n \"path\",\n \"image_path\",\n \"url\",\n \"query\",\n \"pattern\",\n \"question\",\n \"task\",\n \"description\",\n \"title\",\n \"change_kind\",\n \"theme\",\n \"alt\",\n \"to\",\n] as const;\n\nexport function summarizeDisplayText(value: string): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (!normalized) return \"\";\n if (normalized.length <= TOOL_SUMMARY_MAX_CHARS) return normalized;\n return `${normalized.slice(0, TOOL_SUMMARY_HEAD_CHARS).trimEnd()}...${normalized\n .slice(-TOOL_SUMMARY_TAIL_CHARS)\n .trimStart()}`;\n}\n\nfunction unwrapShellCommand(value: string): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n const match = normalized.match(/^(?:\\/[^\\s]+\\/)?(?:zsh|bash|sh)\\s+-[a-z]*c\\s+(.+)$/i);\n if (!match?.[1]) return normalized;\n const payload = match[1].trim();\n const quote = payload[0];\n return (quote === '\"' || quote === \"'\") && payload.at(-1) === quote\n ? payload.slice(1, -1).trim()\n : payload;\n}\n\nfunction splitShellCommands(value: string): string[] {\n const commands: string[] = [];\n let current = \"\";\n let quote = \"\";\n let escaped = false;\n const flush = () => {\n const command = current.trim();\n if (command) commands.push(command);\n current = \"\";\n };\n\n for (let i = 0; i < value.length; i++) {\n const char = value[i] ?? \"\";\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\" && quote !== \"'\") {\n current += char;\n escaped = true;\n continue;\n }\n if (quote) {\n current += char;\n if (char === quote) quote = \"\";\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n current += char;\n continue;\n }\n const pair = value.slice(i, i + 2);\n if (pair === \"&&\" || pair === \"||\") {\n flush();\n i += 1;\n continue;\n }\n if (char === \";\") {\n flush();\n continue;\n }\n current += char;\n }\n flush();\n return commands;\n}\n\nfunction shellWords(value: string): string[] {\n const words: string[] = [];\n let current = \"\";\n let quote = \"\";\n let escaped = false;\n const flush = () => {\n if (current) words.push(current);\n current = \"\";\n };\n\n for (const char of value) {\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\" && quote !== \"'\") {\n escaped = true;\n continue;\n }\n if (quote) {\n if (char === quote) quote = \"\";\n else current += char;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (/\\s/.test(char)) {\n flush();\n continue;\n }\n current += char;\n }\n flush();\n return words;\n}\n\nfunction commandName(value: string): string {\n return value.replace(/\\\\/g, \"/\").split(\"/\").at(-1) || value;\n}\n\nfunction compactPath(value: string): string {\n const normalized = value.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\");\n return normalized.split(\"/\").at(-1) || normalized;\n}\n\nfunction looksLikePath(value: string): boolean {\n return (\n value.includes(\"/\") ||\n /^\\.?[A-Za-z0-9_-]+\\.(?:[A-Za-z0-9_-]+)$/.test(value) ||\n /^(?:CLAUDE|AGENTS|README|STYLE)(?:\\.[A-Za-z0-9_-]+)?$/i.test(value)\n );\n}\n\nfunction summarizeTargets(values: string[]): string {\n const targets = values.filter((value) => value && !value.startsWith(\"-\")).map(compactPath);\n if (targets.length === 0) return \"\";\n if (targets.length === 1) return targets[0] ?? \"\";\n return `${targets[0]} +${targets.length - 1}`;\n}\n\nfunction summarizeSsh(words: string[]): string {\n let destination = \"\";\n let index = 0;\n while (index < words.length) {\n const word = words[index] ?? \"\";\n if (word === \"--\") {\n destination = words[index + 1] ?? \"\";\n index += 2;\n break;\n }\n if (!word.startsWith(\"-\")) {\n destination = word;\n index += 1;\n break;\n }\n index += SSH_OPTIONS_WITH_VALUE.has(word) ? 2 : 1;\n }\n\n if (!destination) return \"ssh\";\n const remoteCommand = words.slice(index).join(\" \");\n const remoteSummary = remoteCommand ? summarizeShellCommand(remoteCommand) : \"\";\n return [\"ssh\", destination, remoteSummary].filter(Boolean).join(\" · \");\n}\n\nfunction summarizeShellPart(value: string): string {\n const words = shellWords(value).filter((word) => !/^\\d*>/.test(word));\n while (words[0] === \"sudo\") words.shift();\n if (words[0] === \"env\") {\n words.shift();\n while (words[0] && (/^[A-Za-z_][A-Za-z0-9_]*=/.test(words[0]) || words[0].startsWith(\"-\"))) {\n words.shift();\n }\n }\n const executable = commandName(words.shift() ?? \"\");\n if (!executable || executable === \"true\" || executable === \"printf\" || executable === \"echo\") {\n return \"\";\n }\n\n if (executable === \"pwd\") return \"pwd\";\n if (executable === \"command\" && words[0] === \"-v\") {\n return words[1] ? `find ${commandName(words[1])}` : \"find command\";\n }\n if (executable === \"ssh\") return summarizeSsh(words);\n if (executable === \"git\") {\n while (words[0]?.startsWith(\"-\")) {\n const option = words.shift();\n if (\n option === \"-C\" ||\n option === \"-c\" ||\n option === \"--git-dir\" ||\n option === \"--work-tree\"\n ) {\n words.shift();\n }\n }\n const operation = words.shift();\n const targets = words.filter((word) => looksLikePath(word));\n const target = summarizeTargets(targets);\n return [\"git\", operation, target].filter(Boolean).join(\" \");\n }\n if (executable === \"sed\") {\n const target = summarizeTargets(words.filter(looksLikePath));\n return target ? `sed ${target}` : \"sed\";\n }\n if (executable === \"rg\") {\n const filesOnly = words.includes(\"--files\");\n const values = words.filter((word) => !word.startsWith(\"-\"));\n const target = summarizeTargets(values);\n return filesOnly ? [\"rg files\", target].filter(Boolean).join(\" \") : `rg ${target || \"search\"}`;\n }\n if (\n executable === \"bun\" ||\n executable === \"npm\" ||\n executable === \"pnpm\" ||\n executable === \"yarn\"\n ) {\n const operation = words[0];\n if (operation === \"test\") {\n const targets = words.slice(1).filter((word) => !word.startsWith(\"-\"));\n return targets.length > 0\n ? `${executable} test ${targets.length} files`\n : `${executable} test`;\n }\n return [executable, operation].filter(Boolean).join(\" \");\n }\n if (executable === \"ls\" || executable === \"cat\" || executable === \"node\") {\n const target = summarizeTargets(words.filter(looksLikePath));\n return [executable, target].filter(Boolean).join(\" \");\n }\n\n const detail = words.find((word) => !word.startsWith(\"-\"));\n return [executable, detail ? compactPath(detail) : \"\"].filter(Boolean).join(\" \");\n}\n\n/** Convert a raw Codex/Claude shell invocation into a bounded display label. */\nexport function summarizeShellCommand(value: string): string {\n const payload = unwrapShellCommand(value);\n const parts = splitShellCommands(payload).map(summarizeShellPart).filter(Boolean);\n if (parts.length === 0) return summarizeDisplayText(payload);\n const visible = parts.slice(0, SHELL_SUMMARY_MAX_PARTS);\n const remainder = parts.length - visible.length;\n return summarizeDisplayText(`${visible.join(\" · \")}${remainder > 0 ? ` · +${remainder}` : \"\"}`);\n}\n\n/**\n * Give simple, demonstrably read-only shell commands a more meaningful\n * timeline name. This is shared display metadata only; every provider still\n * executes the original shell tool unchanged.\n */\nexport function classifyShellToolName(value: string): \"Bash\" | \"Read\" | \"Search\" {\n // unwrapShellCommand() normalizes whitespace for display, so reject scripts\n // with physical line breaks before that normalization can hide composition.\n if (/[\\r\\n]/.test(value)) return \"Bash\";\n const payload = unwrapShellCommand(value);\n // Composition, redirection, substitution, and multi-line scripts can turn\n // a read-only executable into a mutating command, so keep those as Bash.\n if (/[|;&><`]/.test(payload) || payload.includes(\"$(\")) return \"Bash\";\n\n const words = shellWords(payload);\n while (words[0] === \"sudo\") words.shift();\n if (words[0] === \"env\") {\n words.shift();\n while (words[0] && (/^[A-Za-z_][A-Za-z0-9_]*=/.test(words[0]) || words[0].startsWith(\"-\"))) {\n words.shift();\n }\n }\n const executable = commandName(words.shift() ?? \"\");\n if (\n executable === \"cat\" ||\n executable === \"head\" ||\n executable === \"tail\" ||\n executable === \"wc\"\n ) {\n return \"Read\";\n }\n if (executable === \"sed\") {\n const mutatingOption = words.some(\n (word) =>\n word === \"-i\" ||\n word.startsWith(\"-i\") ||\n word === \"--in-place\" ||\n word.startsWith(\"--in-place=\"),\n );\n const scriptWrites = words.some(\n (word) =>\n /(?:^|[;}\\n])\\s*(?:w|W|e)\\b/.test(word) ||\n /s(.)(?:\\\\.|(?!\\1).)*\\1(?:\\\\.|(?!\\1).)*\\1[gpimsxyM]*w\\b/.test(word),\n );\n if (!mutatingOption && !scriptWrites) return \"Read\";\n }\n if (executable === \"rg\" || executable === \"grep\" || executable === \"ls\") return \"Search\";\n if (\n executable === \"find\" &&\n !words.some((word) =>\n [\n \"-delete\",\n \"-exec\",\n \"-execdir\",\n \"-ok\",\n \"-okdir\",\n \"-fprint\",\n \"-fprint0\",\n \"-fprintf\",\n \"-fls\",\n ].includes(word),\n )\n ) {\n return \"Search\";\n }\n return \"Bash\";\n}\n\nfunction summarizePrimitive(value: unknown): string | number | boolean | undefined {\n if (typeof value === \"number\" || typeof value === \"boolean\") return value;\n if (typeof value !== \"string\") return undefined;\n return summarizeDisplayText(value) || undefined;\n}\n\nfunction summarizeDiffText(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const normalized = value.replace(/\\r\\n?/g, \"\\n\");\n if (!normalized.trim()) return undefined;\n if (normalized.length <= TOOL_DIFF_MAX_CHARS) return normalized;\n return `${normalized.slice(0, TOOL_DIFF_MAX_CHARS - 2)}\\n…`;\n}\n\nfunction changedDiffLines(value: string): string[] {\n const lines = value.split(\"\\n\");\n if (lines.at(-1) === \"\") lines.pop();\n return lines;\n}\n\nexport interface NumberedDiffSummary {\n before?: string;\n after?: string;\n diffPreview?: string;\n}\n\n/** Build one Git-style numbered diff used by every provider and adapter. */\nexport function buildNumberedDiffSummary(\n before: string,\n after: string,\n startLine = 1,\n): NumberedDiffSummary {\n const removed: string[] = [];\n const added: string[] = [];\n const preview: string[] = [];\n let oldLine = startLine;\n let newLine = startLine;\n for (const part of computeLineDiff(before, after)) {\n const lines = changedDiffLines(part.value);\n if (part.removed) {\n for (const line of lines) {\n removed.push(line);\n preview.push(`${oldLine} -${line}`);\n oldLine += 1;\n }\n continue;\n }\n if (part.added) {\n for (const line of lines) {\n added.push(line);\n preview.push(`${newLine} +${line}`);\n newLine += 1;\n }\n continue;\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n return {\n ...(removed.length > 0 ? { before: removed.join(\"\\n\") } : {}),\n ...(added.length > 0 ? { after: added.join(\"\\n\") } : {}),\n ...(preview.length > 0 ? { diffPreview: preview.join(\"\\n\") } : {}),\n };\n}\n\nfunction sourceStartLine(\n input: Record<string, unknown>,\n before: string,\n after: string,\n cwd: string | undefined,\n): number {\n const rawPath = input.file_path ?? input.path;\n if (typeof rawPath !== \"string\" || !rawPath.trim()) return 1;\n const path = isAbsolute(rawPath) ? rawPath : resolve(cwd ?? process.cwd(), rawPath);\n try {\n if (statSync(path).size > TOOL_DIFF_SOURCE_MAX_BYTES) return 1;\n const source = readFileSync(path, \"utf8\").replace(/\\r\\n?/g, \"\\n\");\n for (const candidate of [before, after].filter(Boolean)) {\n const index = source.indexOf(candidate);\n if (index >= 0) return source.slice(0, index).split(\"\\n\").length;\n }\n } catch {\n // Deleted and remote-only files fall back to snippet-relative numbering.\n }\n return 1;\n}\n\nfunction logicalLineCount(value: string): number {\n const normalized = value.replace(/\\r\\n?/g, \"\\n\");\n if (!normalized) return 0;\n const withoutFinalTerminator = normalized.endsWith(\"\\n\") ? normalized.slice(0, -1) : normalized;\n return withoutFinalTerminator.split(\"\\n\").length;\n}\n\nfunction summarizeAskChoices(\n value: unknown,\n): Array<{ label: string; description?: string }> | undefined {\n if (!Array.isArray(value)) return undefined;\n const choices = value\n .map((choice) => {\n if (!choice || typeof choice !== \"object\") return null;\n const record = choice as Record<string, unknown>;\n const label = summarizePrimitive(record.label);\n if (typeof label !== \"string\") return null;\n const description = summarizePrimitive(record.description);\n return {\n label,\n ...(typeof description === \"string\" ? { description } : {}),\n };\n })\n .filter((choice): choice is { label: string; description?: string } => choice !== null)\n .slice(0, 6);\n return choices.length > 0 ? choices : undefined;\n}\n\nexport function summarizeToolInput(\n name: string,\n input: Record<string, unknown>,\n options: { cwd?: string } = {},\n): ToolCallSummaryInput | undefined {\n const summary: ToolCallSummaryInput = {};\n const shortName = name.split(\"__\").at(-1)?.toLowerCase() ?? name.toLowerCase();\n\n if (name === \"AskUserQuestion\") {\n const question = summarizePrimitive(input.question);\n if (typeof question === \"string\") summary.question = question;\n const choices = summarizeAskChoices(input.choices);\n if (choices) summary.choices = choices;\n return Object.keys(summary).length > 0 ? summary : undefined;\n }\n\n for (const key of SUMMARY_KEYS) {\n const raw = input[key];\n const value =\n (key === \"command\" || key === \"cmd\") && typeof raw === \"string\"\n ? summarizeShellCommand(raw)\n : summarizePrimitive(raw);\n if (value !== undefined) summary[key] = value;\n }\n\n if (shortName === \"ask_session\" || shortName === \"tell_session\") {\n const message = summarizePrimitive(input.message);\n if (typeof message === \"string\") summary.message = message;\n }\n\n if (shortName === \"edit\" || shortName === \"delete\") {\n const rawBefore = input.before ?? input.old_string;\n const rawAfter = input.after ?? input.new_string;\n const before = summarizeDiffText(rawBefore);\n if (before !== undefined) summary.before = before;\n if (shortName === \"edit\") {\n const after = summarizeDiffText(rawAfter);\n if (after !== undefined) summary.after = after;\n }\n const normalizedBefore =\n typeof rawBefore === \"string\" ? rawBefore.replace(/\\r\\n?/g, \"\\n\") : undefined;\n const normalizedAfter =\n typeof rawAfter === \"string\" ? rawAfter.replace(/\\r\\n?/g, \"\\n\") : undefined;\n const generatedPreview =\n options.cwd &&\n normalizedBefore !== undefined &&\n (shortName === \"delete\" || normalizedAfter !== undefined)\n ? buildNumberedDiffSummary(\n normalizedBefore,\n shortName === \"edit\" ? (normalizedAfter ?? \"\") : \"\",\n sourceStartLine(\n input,\n normalizedBefore,\n shortName === \"edit\" ? (normalizedAfter ?? \"\") : \"\",\n options.cwd,\n ),\n ).diffPreview\n : undefined;\n const diffPreview = summarizeDiffText(input.diff_preview ?? generatedPreview);\n if (diffPreview !== undefined) summary.diff_preview = diffPreview;\n }\n if (shortName === \"write\") {\n const content =\n typeof input.content === \"string\"\n ? input.content\n : typeof input.after === \"string\"\n ? input.after\n : undefined;\n const preview = summarizeDiffText(content);\n if (preview !== undefined) summary.preview = preview;\n if (content !== undefined) summary.lines = logicalLineCount(content);\n const normalizedContent = content?.replace(/\\r\\n?/g, \"\\n\");\n const generatedPreview =\n options.cwd && normalizedContent !== undefined\n ? buildNumberedDiffSummary(\n \"\",\n normalizedContent,\n sourceStartLine(input, \"\", normalizedContent, options.cwd),\n ).diffPreview\n : undefined;\n const diffPreview = summarizeDiffText(input.diff_preview ?? generatedPreview);\n if (diffPreview !== undefined) summary.diff_preview = diffPreview;\n }\n\n return Object.keys(summary).length > 0 ? summary : undefined;\n}\n\nexport function formatToolUse(name: string, input: Record<string, unknown>): string {\n const rawCommand = input.command || input.cmd;\n const shortName = name.split(\"__\").at(-1)?.toLowerCase() ?? name.toLowerCase();\n const displayName =\n shortName === \"bash\" && rawCommand ? classifyShellToolName(String(rawCommand)) : name;\n let detail = \"\";\n if (displayName === \"View\" && input.question) {\n const file = input.image_path || input.file_path || input.path;\n const fileName = typeof file === \"string\" ? file.split(\"/\").pop() : \"\";\n const suffix = fileName ? ` [${fileName}]` : \"\";\n detail = `${String(input.question)}${suffix}`;\n } else if ((displayName === \"Agent\" || displayName === \"Task\") && input.subagent_type) {\n const type = String(input.subagent_type);\n const desc = input.description ? ` ${String(input.description).slice(0, 60)}` : \"\";\n detail = `[${type}]${desc}`;\n } else if (rawCommand) {\n const command = summarizeShellCommand(String(rawCommand));\n detail =\n (displayName === \"Read\" || displayName === \"Search\") && command.includes(\" \")\n ? command.slice(command.indexOf(\" \") + 1)\n : command;\n } else if (input.file_path || input.path) detail = String(input.file_path || input.path);\n else if (input.file_id) detail = String(input.file_id);\n else if (input.url) detail = String(input.url);\n else if (input.pattern) detail = String(input.pattern);\n else if (input.query || input.text) detail = String(input.query || input.text);\n else if (input.task) detail = String(input.task);\n else if (input.title) detail = String(input.title);\n else if (input.to) detail = String(input.to);\n else if (input.message) detail = String(input.message).slice(0, 80);\n else if (input.content) detail = String(input.content).slice(0, 80);\n\n if (detail) {\n return `${displayName}(${detail.length > 100 ? `${detail.slice(0, 100)}...` : detail})`;\n }\n return displayName;\n}\n",
41
42
  "// The SDK's login-PATH bootstrap is expected host setup, not actionable\n// runtime output. Keep it enabled while suppressing its module-load chatter.\nprocess.env.MAESTRO_SDK_SILENT_BOOTSTRAP ??= \"1\";\n",
@@ -43,7 +44,7 @@
43
44
  "import { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nexport type BundledClaudeRuntime =\n | { ok: true; sdkVersion: string; claudeCodeVersion: string }\n | { ok: false; error: string };\n\nlet cached: BundledClaudeRuntime | undefined;\n\nexport function inspectBundledClaudeRuntime(): BundledClaudeRuntime {\n if (cached) return cached;\n try {\n const require = createRequire(import.meta.url);\n const sdkDir = dirname(require.resolve(\"@anthropic-ai/claude-agent-sdk\"));\n const sdkPackage = JSON.parse(readFileSync(join(sdkDir, \"package.json\"), \"utf8\")) as {\n version?: unknown;\n };\n const manifest = JSON.parse(readFileSync(join(sdkDir, \"manifest.json\"), \"utf8\")) as {\n version?: unknown;\n };\n const sdkVersion = typeof sdkPackage.version === \"string\" ? sdkPackage.version : \"\";\n const claudeCodeVersion = typeof manifest.version === \"string\" ? manifest.version : \"\";\n if (!sdkVersion || !claudeCodeVersion) {\n cached = { ok: false, error: \"Claude Agent SDK runtime version metadata is incomplete\" };\n } else if (sdkVersion.split(\".\").at(-1) !== claudeCodeVersion.split(\".\").at(-1)) {\n cached = {\n ok: false,\n error: `Claude Agent SDK ${sdkVersion} does not match bundled Claude Code ${claudeCodeVersion}`,\n };\n } else {\n cached = { ok: true, sdkVersion, claudeCodeVersion };\n }\n } catch (error) {\n cached = {\n ok: false,\n error: `Failed to inspect bundled Claude runtime: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n return cached;\n}\n",
44
45
  "import { claudeProvider } from \"#agents/claude-provider\";\nimport { codexProvider } from \"#agents/codex-provider\";\nimport {\n type AgentExecutionHost,\n configureAgentExecutionHost,\n resolveAgentExecutionHost,\n transformHostedQueryOptions,\n withAgentExecutionHost,\n} from \"#agents/execution-host\";\nimport { maestroProvider } from \"#agents/maestro-provider\";\nimport { revokeCanonicalMcpBridgeTurn } from \"#mcp/canonical-bridge-config\";\nimport type { AgentQueryOptions, UnifiedEvent } from \"#types\";\n\nexport {\n buildClaudeDisallowedTools,\n claudeProvider,\n spawnClaudeCodeProcessWithTreeKill,\n} from \"#agents/claude-provider\";\nexport {\n type BundledClaudeRuntime,\n inspectBundledClaudeRuntime,\n} from \"#agents/claude-runtime-inspection\";\nexport { codexProvider, toCodexMcpServers } from \"#agents/codex-provider\";\nexport {\n buildMaestroDisallowedTools,\n buildMaestroToolHooks,\n maestroProvider,\n} from \"#agents/maestro-provider\";\nexport type { AgentQueryOptions, UnifiedEvent };\nexport { type AgentExecutionHost, configureAgentExecutionHost };\n\n/**\n * Provider-only execution entry point for embedding hosts.\n *\n * Conversation persistence, authorization, placement, and topic lifecycle are\n * deliberately not handled here; those remain the embedding host's concern.\n */\nexport async function* runHostedAgent(\n input: AgentQueryOptions,\n host?: Partial<AgentExecutionHost>,\n): AsyncGenerator<UnifiedEvent> {\n const executionHost = resolveAgentExecutionHost(host);\n const opts = await withAgentExecutionHost(executionHost, async () =>\n transformHostedQueryOptions({ ...input }),\n );\n try {\n let events: AsyncGenerator<UnifiedEvent>;\n switch (opts.agent) {\n case \"claude\":\n events = claudeProvider(opts);\n break;\n case \"codex\":\n events = codexProvider(opts);\n break;\n case \"maestro\":\n events = maestroProvider(opts);\n break;\n default: {\n const exhaustive: never = opts.agent;\n throw new Error(`runHostedAgent: unknown agent '${exhaustive}'`);\n }\n }\n while (true) {\n const next = await withAgentExecutionHost(executionHost, () => events.next());\n if (next.done) return;\n yield next.value;\n }\n } finally {\n if (opts.userId && opts.topicId && opts.queryId && opts.peerBridge) {\n revokeCanonicalMcpBridgeTurn({\n userId: opts.userId,\n topicId: opts.topicId,\n queryId: opts.queryId,\n peerBridge: opts.peerBridge,\n });\n }\n }\n}\n"
45
46
  ],
46
- "mappings": "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",
47
- "debugId": "54F17DBD3295D53D64756E2164756E21",
47
+ "mappings": "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",
48
+ "debugId": "5CF9F07311E89AE364756E2164756E21",
48
49
  "names": []
49
50
  }