@codex-native/sdk 0.0.18 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/cli.mjs.map +1 -1
- package/dist/index.cjs +12 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.mjs +9 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -17,7 +17,7 @@ import { fileURLToPath } from "url";
|
|
|
17
17
|
// package.json
|
|
18
18
|
var package_default = {
|
|
19
19
|
name: "@codex-native/sdk",
|
|
20
|
-
version: "0.0.
|
|
20
|
+
version: "0.0.20",
|
|
21
21
|
description: "Native NAPI-based Codex SDK - complete standalone implementation.",
|
|
22
22
|
main: "dist/index.cjs",
|
|
23
23
|
module: "dist/index.mjs",
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/index.ts","../package.json","../src/cli/config.ts","../src/cli/run.ts","../src/cli/optionParsers.ts","../src/cli/hooks.ts","../src/cli/elevatedDefaults.ts","../src/cli/lspBridge.ts","../src/cli/tui.ts","../src/cli/reverie.ts","../src/cli/runtime.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport process from \"node:process\";\nimport { parseArgs } from \"node:util\";\nimport { fileURLToPath } from \"node:url\";\n\nimport packageJson from \"../../package.json\";\nimport { loadCliConfig } from \"./config\";\nimport { executeRunCommand } from \"./run\";\nimport { executeTuiCommand } from \"./tui\";\nimport { executeReverieCommand } from \"./reverie\";\nimport { runApplyPatch } from \"../nativeBinding\";\nimport type {\n CliContext,\n ConfigLoaderOptions,\n GlobalOptions,\n RunCommandOptions,\n TuiCommandOptions,\n CommandName,\n} from \"./types\";\nimport { applyNativeRegistrations, buildCombinedConfig } from \"./runtime\";\n\nconst VERSION = packageJson.version;\nconst SANDBOX_CHOICES = [\"read-only\", \"workspace-write\", \"danger-full-access\"] as const;\nconst APPROVAL_CHOICES = [\"never\", \"on-request\", \"on-failure\", \"untrusted\"] as const;\nconst APPLY_PATCH_FLAG = \"--codex-run-as-apply-patch\";\nconst CLI_ENTRYPOINT_ENV = \"CODEX_NODE_CLI_ENTRYPOINT\";\n\ntry {\n const entrypoint = fileURLToPath(import.meta.url);\n process.env[CLI_ENTRYPOINT_ENV] = entrypoint;\n} catch {\n if (process.argv[1]) {\n process.env[CLI_ENTRYPOINT_ENV] = process.argv[1];\n }\n}\n\nconst GLOBAL_OPTION_DEFS = {\n config: { type: \"string\" } as const,\n \"no-config\": { type: \"boolean\" } as const,\n plugin: { type: \"string\", multiple: true } as const,\n};\n\nconst RUN_OPTION_DEFS = {\n model: { type: \"string\" } as const,\n oss: { type: \"boolean\" } as const,\n sandbox: { type: \"string\" } as const,\n approval: { type: \"string\" } as const,\n schema: { type: \"string\" } as const,\n \"thread-id\": { type: \"string\" } as const,\n \"base-url\": { type: \"string\" } as const,\n \"api-key\": { type: \"string\" } as const,\n \"linux-sandbox-path\": { type: \"string\" } as const,\n \"full-auto\": { type: \"boolean\" } as const,\n \"skip-git-repo-check\": { type: \"boolean\" } as const,\n cd: { type: \"string\" } as const,\n image: { type: \"string\", multiple: true } as const,\n \"review-mode\": { type: \"boolean\" } as const,\n \"review-hint\": { type: \"string\" } as const,\n};\n\nconst TUI_OPTION_DEFS = {\n model: { type: \"string\" } as const,\n oss: { type: \"boolean\" } as const,\n sandbox: { type: \"string\" } as const,\n approval: { type: \"string\" } as const,\n resume: { type: \"string\" } as const,\n \"resume-last\": { type: \"boolean\" } as const,\n \"resume-picker\": { type: \"boolean\" } as const,\n \"full-auto\": { type: \"boolean\" } as const,\n \"dangerously-bypass-approvals-and-sandbox\": { type: \"boolean\" } as const,\n cd: { type: \"string\" } as const,\n \"config-profile\": { type: \"string\" } as const,\n \"config-overrides\": { type: \"string\", multiple: true } as const,\n \"add-dir\": { type: \"string\", multiple: true } as const,\n image: { type: \"string\", multiple: true } as const,\n \"web-search\": { type: \"boolean\" } as const,\n \"linux-sandbox-path\": { type: \"string\" } as const,\n \"base-url\": { type: \"string\" } as const,\n \"api-key\": { type: \"string\" } as const,\n};\n\nasync function main(): Promise<void> {\n const rawArgs = process.argv.slice(2);\n\n if (maybeHandleApplyPatch(rawArgs)) {\n return;\n }\n\n if (hasFlag(rawArgs, \"--version\") || hasFlag(rawArgs, \"-v\")) {\n printVersion();\n return;\n }\n\n const generalHelpRequested = hasFlag(rawArgs, \"--help\") || hasFlag(rawArgs, \"-h\");\n\n if (generalHelpRequested && !hasExplicitCommand(rawArgs)) {\n printGeneralHelp();\n return;\n }\n\n const { command, args } = selectCommand(rawArgs);\n\n if (hasCommandHelpFlag(args)) {\n printCommandHelp(command);\n return;\n }\n\n if (command === \"reverie-index\") {\n await executeReverieCommand(args);\n return;\n }\n\n const options = command === \"tui\" ? parseTuiCommand(args) : parseRunCommand(args);\n\n validateOptionChoices(command, options);\n\n const context = await createContext(options);\n\n if (command === \"tui\") {\n await executeTuiCommand(options as TuiCommandOptions, context);\n } else {\n await executeRunCommand(options as RunCommandOptions, context);\n }\n}\n\nfunction maybeHandleApplyPatch(args: string[]): boolean {\n if (args.length === 0 || args[0] !== APPLY_PATCH_FLAG) {\n return false;\n }\n\n const patch = args[1];\n if (!patch) {\n console.error(`${APPLY_PATCH_FLAG} requires a patch argument.`);\n process.exitCode = 1;\n return true;\n }\n\n try {\n runApplyPatch(patch);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`apply_patch failed: ${message}`);\n process.exitCode = 1;\n }\n return true;\n}\n\nfunction selectCommand(argv: string[]): { command: CommandName; args: string[] } {\n // Handle explicit \"tui\" and \"run\" subcommands\n if (argv.length > 0) {\n const [first, ...rest] = argv;\n if (first === \"tui\") {\n return { command: \"tui\", args: rest };\n }\n if (first === \"run\") {\n return { command: \"run\", args: rest };\n }\n if (first === \"reverie\") {\n if (rest.length === 0) {\n return { command: \"reverie-index\", args: [] };\n }\n return { command: \"reverie-index\", args: rest };\n }\n // Unrecognized first arg: treat as prompt\n }\n\n // Default behavior when no arguments: start TUI only when a TTY is available\n // This matches codex-rs behavior for interactive shells; headless users can rely on\n // the run command without needing additional flags\n if (argv.length === 0) {\n const isInteractive = process.stdout.isTTY && process.stdin.isTTY;\n return { command: isInteractive ? \"tui\" : \"run\", args: [] };\n }\n\n // Non-empty argv without explicit command: treat as prompt\n // Smart default based on whether we're in an interactive terminal\n const isInteractive = process.stdout.isTTY && process.stdin.isTTY;\n return { command: isInteractive ? \"tui\" : \"run\", args: argv };\n}\n\nfunction hasExplicitCommand(argv: string[]): boolean {\n if (argv.length === 0) {\n return false;\n }\n const first = argv[0];\n return first === \"tui\" || first === \"run\" || first === \"reverie\";\n}\n\nfunction parseRunCommand(args: string[]): RunCommandOptions {\n const { values, positionals } = parseArgs({\n args,\n options: { ...GLOBAL_OPTION_DEFS, ...RUN_OPTION_DEFS },\n allowPositionals: true,\n strict: true,\n });\n const options = camelCaseKeys(values);\n const runOptions: RunCommandOptions = {\n ...(options as RunCommandOptions),\n };\n if (!runOptions.prompt && positionals.length > 0) {\n runOptions.prompt = positionals[0];\n }\n return runOptions;\n}\n\nfunction parseTuiCommand(args: string[]): TuiCommandOptions {\n const { values, positionals } = parseArgs({\n args,\n options: { ...GLOBAL_OPTION_DEFS, ...TUI_OPTION_DEFS },\n allowPositionals: true,\n strict: true,\n });\n const options = camelCaseKeys(values);\n const tuiOptions: TuiCommandOptions = {\n ...(options as TuiCommandOptions),\n };\n if (!tuiOptions.prompt && positionals.length > 0) {\n tuiOptions.prompt = positionals[0];\n }\n return tuiOptions;\n}\n\nasync function createContext(options: GlobalOptions): Promise<CliContext> {\n const cwd = process.cwd();\n const configOptions: ConfigLoaderOptions = {\n cwd,\n explicitConfigPath: options.config,\n noConfig: options.noConfig,\n pluginPaths: normalizeStringArray(options.plugin),\n };\n const config = await loadCliConfig(configOptions);\n const combinedConfig = await buildCombinedConfig({ cwd, config });\n applyNativeRegistrations(combinedConfig);\n return { cwd, config, combinedConfig };\n}\n\nfunction normalizeStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n if (typeof value === \"string\") {\n return [value];\n }\n return [];\n}\n\nfunction camelCaseKeys(record: Record<string, unknown>): Record<string, unknown> {\n return Object.entries(record).reduce<Record<string, unknown>>((acc, [key, value]) => {\n acc[toCamelCase(key)] = value;\n return acc;\n }, {});\n}\n\nfunction toCamelCase(value: string): string {\n return value.replace(/-([a-z])/g, (_, char) => char.toUpperCase());\n}\n\nfunction hasFlag(args: string[], flag: string): boolean {\n return args.includes(flag);\n}\n\nfunction hasCommandHelpFlag(args: string[]): boolean {\n return hasFlag(args, \"--help\") || hasFlag(args, \"-h\");\n}\n\nfunction printVersion(): void {\n console.log(VERSION);\n}\n\nfunction printGeneralHelp(): void {\n console.log(`codex-native v${VERSION}\n\nUsage:\n codex-native [options] [prompt]\n codex-native run [options] [prompt]\n codex-native tui [options] [prompt]\n\nDefault behavior:\n Running 'codex-native' without arguments launches the interactive TUI.\n Use 'codex-native run <prompt>' for non-interactive exec mode.\n\nCommands:\n (default) Launch the interactive TUI (with optional initial prompt)\n run Run Codex in non-interactive exec mode\n tui Explicitly launch the interactive TUI\n reverie index Pre-compute reverie embeddings for the current repo\n\nGlobal options:\n --config <path> Path to codex.config.js (or similar)\n --no-config Skip automatic config discovery\n --plugin <path> Additional plugin module (repeatable)\n\nRun options:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --schema <file> Path to final-output JSON schema\n --thread-id <id> Resume an existing thread\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --full-auto Enable workspace-write auto approvals\n --skip-git-repo-check Skip git repository validation\n --cd <path> Working directory for the run\n --image <path> Attach an image (repeatable)\n --review-mode Enable review mode\n --review-hint <text> Hint text for review mode\n\nTUI options:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --resume <id> Resume a saved session by id\n --resume-last Resume the most recent saved session\n --resume-picker Show the resume picker on startup\n --full-auto Enable workspace-write auto approvals\n --dangerously-bypass-approvals-and-sandbox\n Disable approvals and sandboxing (unsafe)\n --cd <path> Working directory for the session\n --config-profile <name> Config profile to activate\n --config-overrides <kv> Config overrides (key=value, repeatable)\n --add-dir <path> Additional writable directory (repeatable)\n --image <path> Attach an image (repeatable)\n --web-search Enable web search tool\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n`);\n}\n\nfunction printCommandHelp(command: CommandName): void {\n if (command === \"reverie-index\") {\n console.log(`codex-native reverie index [options]\n\nOptions:\n --codex-home <path> Override CODEX_HOME (defaults to ~/.codex)\n --project-root <path> Project root for scoping + embedding cache (default: cwd)\n --limit <n> Maximum conversations to index (default: 10)\n --max-candidates <n> Scan window before filtering (default: 80)\n --batch-size <n> Batch size forwarded to FastEmbed\n --normalize Force vector normalization (default: embed config)\n --no-normalize Disable normalization\n --cache / --no-cache Override embedding cache behavior\n --embed-model <name> FastEmbed model (default: BAAI/bge-large-en-v1.5)\n --embed-cache-dir <dir> Cache directory (defaults to $CODEX_EMBED_CACHE or system tmp)\n --embed-max-length <n> Override FastEmbed max token length\n --no-progress Hide FastEmbed download progress\n --skip-embed-init Assume fastEmbedInit was already called in this process\n`);\n return;\n }\n if (command === \"tui\") {\n console.log(`codex-native tui [options] [prompt]\n\nOptions:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --resume <id> Resume a saved session by id\n --resume-last Resume the most recent saved session\n --resume-picker Show the resume picker on startup\n --full-auto Enable workspace-write auto approvals\n --dangerously-bypass-approvals-and-sandbox\n Disable approvals and sandboxing (unsafe)\n --cd <path> Working directory for the session\n --config-profile <name> Config profile to activate\n --config-overrides <kv> Config overrides (key=value, repeatable)\n --add-dir <path> Additional writable directory (repeatable)\n --image <path> Attach an image (repeatable)\n --web-search Enable web search tool\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n`);\n } else {\n console.log(`codex-native run [options] [prompt]\n\nOptions:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --schema <file> Path to final-output JSON schema\n --thread-id <id> Resume an existing thread\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --full-auto Enable workspace-write auto approvals\n --skip-git-repo-check Skip git repository validation\n --cd <path> Working directory for the run\n --image <path> Attach an image (repeatable)\n --review-mode Enable review mode\n --review-hint <text> Hint text for review mode\n`);\n }\n}\n\nfunction validateOptionChoices(\n command: CommandName,\n options: RunCommandOptions | TuiCommandOptions,\n): void {\n const sandbox = options.sandbox;\n if (sandbox && !SANDBOX_CHOICES.includes(sandbox as (typeof SANDBOX_CHOICES)[number])) {\n throw new Error(\n `Invalid sandbox mode \"${sandbox}\". Valid modes: ${SANDBOX_CHOICES.join(\", \")}.`,\n );\n }\n const approval = options.approval;\n if (approval && !APPROVAL_CHOICES.includes(approval as (typeof APPROVAL_CHOICES)[number])) {\n throw new Error(\n `Invalid approval policy \"${approval}\". Valid policies: ${APPROVAL_CHOICES.join(\", \")}.`,\n );\n }\n}\n\nfunction logError(error: unknown): void {\n if (error instanceof Error) {\n console.error(error.message);\n if (process.env.CODEX_NATIVE_DEBUG) {\n console.error(error.stack);\n }\n } else {\n console.error(String(error));\n }\n}\n\nmain().catch((error) => {\n logError(error);\n process.exitCode = 1;\n});\n","{\n \"name\": \"@codex-native/sdk\",\n \"version\": \"0.0.18\",\n \"description\": \"Native NAPI-based Codex SDK - complete standalone implementation.\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"bin\": {\n \"codex-native\": \"dist/cli.cjs\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"artifacts\": \"napi artifacts\",\n \"build\": \"pnpm run build:ts && pnpm run build:napi\",\n \"build:ts\": \"tsup\",\n \"build:napi\": \"node -e \\\"const {execFileSync}=require('node:child_process');const {readFileSync,readdirSync,rmSync}=require('node:fs');const {platform,arch}=process;for(const entry of readdirSync(process.cwd())){if(entry.endsWith('.node')&&entry.startsWith('codex_native.')){try{rmSync(entry);}catch{}}}const isMusl=()=>{if(platform!=='linux')return false;try{if(readFileSync('/usr/bin/ldd','utf8').includes('musl'))return true;}catch{}if(typeof process.report?.getReport==='function'){const r=process.report.getReport();if(r?.header?.glibcVersionRuntime)return false;if(Array.isArray(r?.sharedObjects)&&r.sharedObjects.some((p)=>p.includes('libc.musl-')||p.includes('ld-musl-')))return true;}try{return require('node:child_process').execSync('ldd --version',{encoding:'utf8'}).includes('musl');}catch{}return false;};let dir=null;if(platform==='darwin'){dir=arch==='arm64'?'darwin-arm64':arch==='x64'?'darwin-x64':null;}else if(platform==='linux'){const suffix=isMusl()?'musl':'gnu';dir=arch==='arm64'?'linux-arm64-'+suffix:arch==='x64'?'linux-x64-'+suffix:null;}else if(platform==='win32'){dir=arch==='arm64'?'win32-arm64-msvc':arch==='x64'?'win32-x64-msvc':null;}if(!dir){throw new Error('Unsupported platform/arch: '+platform+' '+arch);}execFileSync('napi',['build','--platform','--release','--features','napi-bindings','--no-js','--output-dir','npm/'+dir],{stdio:'inherit'});\\\"\",\n \"build:napi:debug\": \"node -e \\\"const {execFileSync}=require('node:child_process');const {readFileSync}=require('node:fs');const {platform,arch}=process;const isMusl=()=>{if(platform!=='linux')return false;try{if(readFileSync('/usr/bin/ldd','utf8').includes('musl'))return true;}catch{}if(typeof process.report?.getReport==='function'){const r=process.report.getReport();if(r?.header?.glibcVersionRuntime)return false;if(Array.isArray(r?.sharedObjects)&&r.sharedObjects.some((p)=>p.includes('libc.musl-')||p.includes('ld-musl-')))return true;}try{return require('node:child_process').execSync('ldd --version',{encoding:'utf8'}).includes('musl');}catch{}return false;};let dir=null;if(platform==='darwin'){dir=arch==='arm64'?'darwin-arm64':arch==='x64'?'darwin-x64':null;}else if(platform==='linux'){const suffix=isMusl()?'musl':'gnu';dir=arch==='arm64'?'linux-arm64-'+suffix:arch==='x64'?'linux-x64-'+suffix:null;}else if(platform==='win32'){dir=arch==='arm64'?'win32-arm64-msvc':arch==='x64'?'win32-x64-msvc':null;}if(!dir){throw new Error('Unsupported platform/arch: '+platform+' '+arch);}execFileSync('napi',['build','--platform','--features','napi-bindings','--no-js','--output-dir','npm/'+dir],{stdio:'inherit'});\\\"\",\n \"release\": \"node scripts/publish.mjs\",\n \"test\": \"NODE_OPTIONS='--experimental-vm-modules' jest --runInBand\",\n \"version\": \"napi version\"\n },\n \"napi\": {\n \"binaryName\": \"codex_native\",\n \"targets\": [\n \"aarch64-apple-darwin\",\n \"x86_64-apple-darwin\",\n \"aarch64-unknown-linux-gnu\",\n \"x86_64-unknown-linux-gnu\",\n \"aarch64-unknown-linux-musl\",\n \"x86_64-unknown-linux-musl\",\n \"aarch64-pc-windows-msvc\",\n \"x86_64-pc-windows-msvc\"\n ]\n },\n \"optionalDependencies\": {\n \"@codex-native/sdk-darwin-arm64\": \"0.0.15\",\n \"@codex-native/sdk-darwin-x64\": \"0.0.15\",\n \"@codex-native/sdk-linux-arm64-gnu\": \"0.0.15\",\n \"@codex-native/sdk-linux-x64-gnu\": \"0.0.15\",\n \"@codex-native/sdk-linux-arm64-musl\": \"0.0.15\",\n \"@codex-native/sdk-linux-x64-musl\": \"0.0.15\",\n \"@codex-native/sdk-win32-arm64-msvc\": \"0.0.15\",\n \"@codex-native/sdk-win32-x64-msvc\": \"0.0.15\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.22.0\",\n \"@openai/agents\": \"^0.3.3\",\n \"@openai/agents-core\": \"^0.3.3\",\n \"@opencode-ai/sdk\": \"^1.0.164\",\n \"@toon-format/toon\": \"^1.0.0\",\n \"pyright\": \"^1.1.386\",\n \"typescript-language-server\": \"^4.3.3\",\n \"vscode-jsonrpc\": \"^8.2.1\",\n \"vscode-languageserver-types\": \"^3.17.5\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"7.25.2\",\n \"@babel/preset-env\": \"7.25.4\",\n \"@babel/preset-typescript\": \"7.28.5\",\n \"@jest/globals\": \"^29.7.0\",\n \"@napi-rs/cli\": \"^3.4.1\",\n \"@openai/agents\": \"^0.3.0\",\n \"@types/jest\": \"29.5.14\",\n \"@types/node\": \"^22.0.0\",\n \"babel-jest\": \"29.7.0\",\n \"jest\": \"^29.7.0\",\n \"ts-jest\": \"^29.1.1\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.7.2\",\n \"zod\": \"^3.25.76\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import fs from \"node:fs\";\nimport fsPromises from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type {\n CodexNativeConfig,\n ConfigLoaderOptions,\n LoadedConfigFile,\n LoadedPlugin,\n} from \"./types\";\n\nconst requireFromThisModule = createRequire(import.meta.url);\n\nconst CONFIG_CANDIDATES = [\n \"codex.config.js\",\n \"codex.config.cjs\",\n \"codex.config.mjs\",\n \"codex.config.ts\",\n \"codex.js\",\n \".codexrc.js\",\n \".codexrc.cjs\",\n \".codexrc.mjs\",\n \".codexrc.json\",\n] as const;\n\ntype ConfigDiscovery =\n | { path: string; type: \"file\" }\n | { path: string; type: \"package-json\"; field: string };\n\nexport async function loadCliConfig(options: ConfigLoaderOptions): Promise<LoadedConfigFile> {\n const warnings: string[] = [];\n\n const discovery = await resolveConfigPath(options);\n const configPath = discovery?.path ?? null;\n let config: CodexNativeConfig | null = null;\n\n if (discovery) {\n const loadResult = await loadConfig(discovery, warnings);\n config = loadResult ?? null;\n if (config && typeof config !== \"object\") {\n warnings.push(\n `Config at ${discovery.path} must export an object. Received ${typeof config}.`,\n );\n config = null;\n }\n }\n\n const plugins = await resolvePlugins({\n config,\n configPath,\n cliPluginPaths: options.pluginPaths ?? [],\n cwd: options.cwd,\n warnings,\n });\n\n return {\n configPath,\n config,\n plugins,\n warnings,\n };\n}\n\nasync function resolveConfigPath(options: ConfigLoaderOptions): Promise<ConfigDiscovery | null> {\n if (options.explicitConfigPath) {\n const explicitPath = path.resolve(options.cwd, options.explicitConfigPath);\n if (!fs.existsSync(explicitPath)) {\n throw new Error(`Config file not found at ${explicitPath}`);\n }\n return classifyPath(explicitPath);\n }\n\n if (options.noConfig) {\n return null;\n }\n\n let currentDir = path.resolve(options.cwd);\n const visited = new Set<string>();\n\n while (!visited.has(currentDir)) {\n visited.add(currentDir);\n\n for (const candidate of CONFIG_CANDIDATES) {\n const candidatePath = path.join(currentDir, candidate);\n if (fs.existsSync(candidatePath) && fs.statSync(candidatePath).isFile()) {\n return classifyPath(candidatePath);\n }\n }\n\n const packageJsonPath = path.join(currentDir, \"package.json\");\n if (fs.existsSync(packageJsonPath) && fs.statSync(packageJsonPath).isFile()) {\n const manifest = await readJson(packageJsonPath);\n if (manifest && manifest.codexNative != null) {\n return { path: packageJsonPath, type: \"package-json\", field: \"codexNative\" };\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n break;\n }\n currentDir = parentDir;\n }\n\n return null;\n}\n\nasync function loadConfig(discovery: ConfigDiscovery, warnings: string[]): Promise<CodexNativeConfig | null> {\n if (discovery.type === \"package-json\") {\n const manifest = await readJson(discovery.path);\n if (!manifest) {\n warnings.push(`Failed to parse ${discovery.path}; ignoring config.`);\n return null;\n }\n const raw = manifest[discovery.field];\n if (typeof raw === \"string\") {\n const baseDir = path.dirname(discovery.path);\n const nestedPath = path.resolve(baseDir, raw);\n if (!fs.existsSync(nestedPath)) {\n throw new Error(\n `Config path \"${raw}\" referenced by ${discovery.field} in ${discovery.path} was not found.`,\n );\n }\n return loadConfig({ path: nestedPath, type: \"file\" }, warnings);\n }\n if (typeof raw === \"object\" && raw !== null) {\n return raw as CodexNativeConfig;\n }\n warnings.push(\n `The ${discovery.field} field in ${discovery.path} must be an object or path string.`,\n );\n return null;\n }\n\n const ext = path.extname(discovery.path).toLowerCase();\n if (ext === \".json\") {\n const json = await readJson(discovery.path);\n if (json === null) {\n warnings.push(`Failed to parse JSON config at ${discovery.path}`);\n }\n return json as CodexNativeConfig | null;\n }\n\n if (ext === \".js\" || ext === \".cjs\") {\n return extractModuleDefault(await loadCommonJsModule(discovery.path)) as CodexNativeConfig | null;\n }\n\n if (ext === \".mjs\") {\n return extractModuleDefault(await importModule(discovery.path)) as CodexNativeConfig | null;\n }\n\n if (ext === \".ts\") {\n return extractModuleDefault(await loadTypeScriptModule(discovery.path, warnings)) as\n | CodexNativeConfig\n | null;\n }\n\n throw new Error(`Unsupported config extension \"${ext}\" at ${discovery.path}`);\n}\n\nasync function resolvePlugins(params: {\n config: CodexNativeConfig | null;\n configPath: string | null;\n cliPluginPaths: string[];\n cwd: string;\n warnings: string[];\n}): Promise<LoadedPlugin[]> {\n const plugins: LoadedPlugin[] = [];\n const { config, configPath, cliPluginPaths, cwd, warnings } = params;\n\n const configDir = configPath ? path.dirname(configPath) : cwd;\n\n const rawConfigPlugins = (config as { plugins?: unknown })?.plugins;\n const configPlugins = Array.isArray(rawConfigPlugins) ? (rawConfigPlugins as unknown[]) : [];\n for (const spec of configPlugins) {\n if (typeof spec === \"string\") {\n const loaded = await loadPlugin(spec, configDir, \"config\", warnings);\n if (loaded) {\n plugins.push(loaded);\n }\n } else if (spec != null) {\n plugins.push({\n source: \"config\",\n spec: \"<inline>\",\n plugin: spec,\n });\n }\n }\n\n for (const spec of cliPluginPaths) {\n const loaded = await loadPlugin(spec, cwd, \"cli\", warnings);\n if (loaded) {\n plugins.push(loaded);\n }\n }\n\n return plugins;\n}\n\nasync function loadPlugin(\n spec: string,\n baseDir: string,\n source: LoadedPlugin[\"source\"],\n warnings: string[],\n): Promise<LoadedPlugin | null> {\n try {\n const resolved = resolveModule(spec, baseDir);\n const moduleExports = await loadModuleForPath(resolved);\n return {\n source,\n spec,\n resolvedPath: resolved,\n plugin: extractModuleDefault(moduleExports),\n };\n } catch (err) {\n warnings.push(`Failed to load plugin \"${spec}\": ${(err as Error).message}`);\n return null;\n }\n}\n\nasync function loadModuleForPath(modulePath: string): Promise<unknown> {\n const ext = path.extname(modulePath).toLowerCase();\n if (ext === \".cjs\") {\n return loadCommonJsModule(modulePath);\n }\n if (ext === \".mjs\") {\n return importModule(modulePath);\n }\n if (ext === \".ts\") {\n return loadTypeScriptModule(modulePath);\n }\n if (ext === \".json\") {\n return readJson(modulePath);\n }\n if (ext === \".js\") {\n try {\n return loadCommonJsModule(modulePath);\n } catch (err) {\n if (err instanceof Error && err.message.includes(\"ERR_REQUIRE_ESM\")) {\n return importModule(modulePath);\n }\n throw err;\n }\n }\n return loadCommonJsModule(modulePath);\n}\n\nasync function loadCommonJsModule(modulePath: string): Promise<unknown> {\n return requireFromThisModule(modulePath);\n}\n\nasync function importModule(modulePath: string): Promise<unknown> {\n const href = pathToFileURL(modulePath).href;\n return import(href);\n}\n\nasync function loadTypeScriptModule(modulePath: string, warnings?: string[]): Promise<unknown> {\n try {\n const { register } = requireFromThisModule(\"tsx/cjs/api\");\n const unregister = register({ transpileOnly: true });\n try {\n return requireFromThisModule(modulePath);\n } finally {\n await maybeCall(unregister);\n }\n } catch (cjsError) {\n try {\n const tsxEsmSpecifier = \"tsx/esm/api\";\n // Use a dynamic specifier so type resolution doesn't require this module to exist at compile-time.\n const apiModule: any = await import(tsxEsmSpecifier as any);\n const unregister =\n typeof apiModule.register === \"function\"\n ? apiModule.register({ transpileOnly: true })\n : apiModule.default({ transpileOnly: true });\n try {\n return importModule(modulePath);\n } finally {\n await maybeCall(unregister);\n }\n } catch (esmError) {\n const message = [\n `Failed to load TypeScript module ${modulePath}.`,\n \"Install the \\\"tsx\\\" package or convert the config to JavaScript.\",\n ].join(\" \");\n if (warnings) {\n warnings.push(message);\n return null;\n }\n throw new Error(message);\n }\n }\n}\n\nasync function readJson(filePath: string): Promise<any> {\n try {\n const raw = await fsPromises.readFile(filePath, \"utf8\");\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\nfunction extractModuleDefault<T>(module: T): T | unknown {\n if (module && typeof module === \"object\" && \"default\" in (module as Record<string, unknown>)) {\n const value = (module as Record<string, unknown>).default;\n if (value !== undefined) {\n return value;\n }\n }\n return module;\n}\n\nfunction resolveModule(specifier: string, baseDir: string): string {\n if (path.isAbsolute(specifier)) {\n return specifier;\n }\n return requireFromThisModule.resolve(specifier, { paths: [baseDir] });\n}\n\nfunction classifyPath(filePath: string): ConfigDiscovery {\n if (path.basename(filePath) === \"package.json\") {\n return { path: filePath, type: \"package-json\", field: \"codexNative\" };\n }\n return { path: filePath, type: \"file\" };\n}\n\nasync function maybeCall(candidate: unknown): Promise<void> {\n if (typeof candidate === \"function\") {\n await Promise.resolve(candidate());\n }\n}\n\n","import fs from \"node:fs\";\nimport fsPromises from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\n\nimport { type NativeRunRequest, getNativeBinding } from \"../nativeBinding\";\nimport type { ThreadEvent } from \"../events\";\nimport { convertRustEventToThreadEvent } from \"../events/convert\";\nimport { parseApprovalModeFlag, parseSandboxModeFlag } from \"./optionParsers\";\nimport { emitWarnings, runBeforeStartHooks, runEventHooks } from \"./hooks\";\nimport { applyElevatedRunDefaults } from \"./elevatedDefaults\";\nimport type {\n CliContext,\n CommandName,\n RunCommandOptions,\n} from \"./types\";\nimport { createRunCommandLspBridge } from \"./lspBridge\";\n\nexport async function executeRunCommand(\n argv: RunCommandOptions,\n context: CliContext,\n): Promise<void> {\n const { combinedConfig } = context;\n emitWarnings(combinedConfig.warnings);\n const warningCount = combinedConfig.warnings.length;\n\n const prompt = await resolvePrompt(argv, combinedConfig.runDefaults.prompt, context.cwd);\n const request = await buildRunRequest({\n prompt,\n argv,\n combinedDefaults: combinedConfig.runDefaults,\n cwd: context.cwd,\n });\n\n if (!request.skipGitRepoCheck) {\n await assertTrustedDirectory(request.workingDirectory);\n }\n\n const hookContext = {\n command: \"run\" as CommandName,\n cwd: context.cwd,\n options: argv,\n };\n\n await runBeforeStartHooks(combinedConfig.beforeStartHooks, hookContext, combinedConfig.warnings);\n\n const binding = getNativeBinding();\n if (!binding) {\n throw new Error(\"Native N-API binding is not available.\");\n }\n\n const queue = new AsyncQueue<string>();\n let conversationId: string | null = null;\n const lspBridge = createRunCommandLspBridge({\n binding,\n workingDirectory: request.workingDirectory ?? context.cwd,\n initialThreadId: request.threadId,\n });\n\n const handleEvent = async (eventJson: string | null | undefined) => {\n if (!eventJson) {\n return;\n }\n process.stdout.write(eventJson);\n process.stdout.write(\"\\n\");\n\n let eventPayload: unknown = eventJson;\n try {\n eventPayload = JSON.parse(eventJson);\n } catch {\n // Leave as string if parsing fails.\n }\n\n conversationId ??= extractConversationId(eventPayload);\n const threadEvent = toThreadEvent(eventPayload);\n if (threadEvent && lspBridge) {\n lspBridge.handleEvent(threadEvent);\n }\n await runEventHooks(\n combinedConfig.onEventHooks,\n eventPayload,\n hookContext,\n combinedConfig.warnings,\n );\n };\n\n let runPromise: Promise<void> = Promise.resolve();\n runPromise = binding\n .runThreadStream(request, (err, eventJson) => {\n if (err) {\n queue.fail(err);\n return;\n }\n queue.push(eventJson ?? null);\n })\n .then(\n () => queue.end(),\n (error) => {\n queue.fail(error);\n },\n );\n\n let loopError: unknown;\n try {\n for await (const eventJson of queue) {\n try {\n await handleEvent(eventJson);\n } catch (error) {\n combinedConfig.warnings.push(\n `Event handler failed: ${(error as Error).message ?? String(error)}`,\n );\n }\n }\n await runPromise;\n } catch (error) {\n loopError = error;\n throw error;\n } finally {\n queue.end();\n if (loopError) {\n await runPromise.catch(() => {});\n }\n if (lspBridge) {\n lspBridge.dispose();\n }\n }\n\n if (conversationId) {\n process.stdout.write(`\\nTo resume, run: codex-native tui --resume ${conversationId}\\n`);\n }\n\n emitWarnings(combinedConfig.warnings, warningCount);\n}\n\nfunction toThreadEvent(payload: unknown): ThreadEvent | null {\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n try {\n return convertRustEventToThreadEvent(payload);\n } catch {\n return null;\n }\n}\n\nasync function resolvePrompt(\n argv: RunCommandOptions,\n defaultPrompt: string | undefined,\n cwd: string,\n): Promise<string> {\n if (argv.prompt && argv.prompt.trim().length > 0) {\n return argv.prompt;\n }\n if (defaultPrompt && defaultPrompt.trim().length > 0) {\n return defaultPrompt;\n }\n\n const stdinPrompt = await readPromptFromStdin();\n if (stdinPrompt && stdinPrompt.trim().length > 0) {\n return stdinPrompt;\n }\n\n if (argv.threadId) {\n // Resume runs without a prompt are permitted.\n return \"\";\n }\n\n const baseMessage = \"No prompt provided. Supply a prompt or pipe one via stdin.\";\n if (process.stdin.isTTY) {\n throw new Error(baseMessage);\n }\n throw new Error(baseMessage);\n}\n\nasync function buildRunRequest(params: {\n prompt: string;\n argv: RunCommandOptions;\n combinedDefaults: Partial<NativeRunRequest>;\n cwd: string;\n}): Promise<NativeRunRequest> {\n const { prompt, argv, combinedDefaults, cwd } = params;\n const request: NativeRunRequest = {\n ...(combinedDefaults as NativeRunRequest),\n prompt,\n };\n\n if (combinedDefaults.images) {\n request.images = [...combinedDefaults.images];\n }\n if (combinedDefaults.workspaceWriteOptions) {\n request.workspaceWriteOptions = { ...combinedDefaults.workspaceWriteOptions };\n }\n\n if (argv.model !== undefined) request.model = argv.model;\n if (argv.oss !== undefined) request.oss = argv.oss;\n const sandboxMode = parseSandboxModeFlag(argv.sandbox, \"--sandbox\");\n if (sandboxMode !== undefined) {\n request.sandboxMode = sandboxMode;\n }\n\n const approvalMode = parseApprovalModeFlag(argv.approval, \"--approval\");\n if (approvalMode !== undefined) {\n request.approvalMode = approvalMode;\n }\n if (argv.threadId !== undefined) request.threadId = argv.threadId;\n if (argv.baseUrl !== undefined) request.baseUrl = argv.baseUrl;\n if (argv.apiKey !== undefined) request.apiKey = argv.apiKey;\n if (argv.linuxSandboxPath !== undefined) request.linuxSandboxPath = argv.linuxSandboxPath;\n if (argv.fullAuto !== undefined) request.fullAuto = argv.fullAuto;\n if (argv.skipGitRepoCheck !== undefined) request.skipGitRepoCheck = argv.skipGitRepoCheck;\n if (argv.cd !== undefined) request.workingDirectory = argv.cd;\n if (argv.reviewMode !== undefined) request.reviewMode = argv.reviewMode;\n if (argv.reviewHint !== undefined) request.reviewHint = argv.reviewHint;\n\n const images = [\n ...(Array.isArray(request.images) ? request.images : []),\n ...(argv.image ?? []),\n ];\n request.images = images.length > 0 ? images : undefined;\n\n if (argv.schema) {\n request.outputSchema = await readJsonFile(argv.schema);\n }\n\n applyElevatedRunDefaults(request, cwd);\n return request;\n}\n\nasync function readJsonFile(filePath: string): Promise<unknown> {\n const absolute = path.resolve(process.cwd(), filePath);\n const data = await fsPromises.readFile(absolute, \"utf8\");\n try {\n return JSON.parse(data);\n } catch (error) {\n throw new Error(\n `Failed to parse JSON schema from ${absolute}: ${(error as Error).message ?? error}`,\n );\n }\n}\n\nasync function readPromptFromStdin(): Promise<string | null> {\n if (process.stdin.isTTY) {\n return null;\n }\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n if (chunks.length === 0) {\n return null;\n }\n return Buffer.concat(chunks).toString(\"utf8\").trimEnd();\n}\n\nfunction extractConversationId(eventPayload: unknown): string | null {\n if (!eventPayload || typeof eventPayload !== \"object\") {\n return null;\n }\n\n const record = eventPayload as Record<string, unknown>;\n\n if (typeof record.session_id === \"string\") {\n return record.session_id;\n }\n\n const sessionConfigured = record.SessionConfigured ?? record.sessionConfigured;\n if (sessionConfigured && typeof sessionConfigured === \"object\") {\n const configuredSessionId = (sessionConfigured as Record<string, unknown>).session_id;\n if (typeof configuredSessionId === \"string\") {\n return configuredSessionId;\n }\n }\n\n const nestedSession =\n typeof record.session === \"object\" && record.session\n ? (record.session as Record<string, unknown>).id\n : undefined;\n if (typeof nestedSession === \"string\") {\n return nestedSession;\n }\n\n return null;\n}\n\n\nasync function assertTrustedDirectory(workingDirectory?: string): Promise<void> {\n const directory = workingDirectory ? path.resolve(workingDirectory) : process.cwd();\n if (await findGitRoot(directory)) {\n return;\n }\n throw new Error(\n \"Not inside a trusted directory and --skip-git-repo-check was not specified.\",\n );\n}\n\nasync function findGitRoot(startDir: string): Promise<string | null> {\n let current = path.resolve(startDir);\n\n while (true) {\n const gitPath = path.join(current, \".git\");\n if (fs.existsSync(gitPath)) {\n try {\n const stats = await fsPromises.stat(gitPath);\n if (stats.isDirectory() || stats.isFile()) {\n return current;\n }\n } catch {\n // Ignore filesystem race conditions and keep searching upwards.\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return null;\n}\n\nclass AsyncQueue<T> implements AsyncIterable<T> {\n private readonly buffer: T[] = [];\n private waiters: Array<{ resolve: (value: IteratorResult<T>) => void; reject: (error: unknown) => void }> = [];\n private ended = false;\n private error: unknown;\n\n push(value: T | null) {\n if (this.ended) return;\n if (value === null) {\n return;\n }\n if (this.waiters.length > 0) {\n const waiter = this.waiters.shift()!;\n waiter.resolve({ value, done: false });\n return;\n }\n this.buffer.push(value);\n }\n\n end() {\n if (this.ended) return;\n this.ended = true;\n const waiters = this.waiters;\n this.waiters = [];\n for (const waiter of waiters) {\n waiter.resolve({ value: undefined as never, done: true });\n }\n }\n\n fail(error: unknown) {\n if (this.ended) return;\n this.error = error;\n this.ended = true;\n const waiters = this.waiters;\n this.waiters = [];\n for (const waiter of waiters) {\n waiter.reject(error);\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n if (this.buffer.length > 0) {\n const value = this.buffer.shift()!;\n return { value, done: false };\n }\n if (this.error) {\n return Promise.reject(this.error);\n }\n if (this.ended) {\n return { value: undefined as never, done: true };\n }\n return new Promise<IteratorResult<T>>((resolve, reject) => {\n this.waiters.push({ resolve, reject });\n });\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n }\n}\n","import type { ApprovalMode, SandboxMode } from \"../threadOptions\";\n\nconst SANDBOX_MODE_VALUES = [\"read-only\", \"workspace-write\", \"danger-full-access\"] as const;\nconst APPROVAL_MODE_VALUES = [\"never\", \"on-request\", \"on-failure\", \"untrusted\"] as const;\n\nfunction isSandboxMode(value: string): value is SandboxMode {\n return (SANDBOX_MODE_VALUES as readonly string[]).includes(value);\n}\n\nfunction isApprovalMode(value: string): value is ApprovalMode {\n return (APPROVAL_MODE_VALUES as readonly string[]).includes(value);\n}\n\nexport function parseSandboxModeFlag(\n value: string | undefined,\n origin: string,\n): SandboxMode | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (isSandboxMode(value)) {\n return value;\n }\n throw new Error(\n `Invalid sandbox mode \"${value}\" from ${origin}. Valid values: ${SANDBOX_MODE_VALUES.join(\n \", \",\n )}.`,\n );\n}\n\nexport function parseApprovalModeFlag(\n value: string | undefined,\n origin: string,\n): ApprovalMode | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (isApprovalMode(value)) {\n return value;\n }\n throw new Error(\n `Invalid approval mode \"${value}\" from ${origin}. Valid values: ${APPROVAL_MODE_VALUES.join(\n \", \",\n )}.`,\n );\n}\n\n","import type {\n BeforeStartHook,\n EventHook,\n HookContext,\n HookRegistration,\n} from \"./types\";\n\nexport function emitWarnings(warnings: string[], fromIndex = 0): void {\n for (let i = fromIndex; i < warnings.length; i += 1) {\n const message = warnings[i];\n process.stderr.write(`[codex-native] Warning: ${message}\\n`);\n }\n}\n\nexport async function runBeforeStartHooks(\n hooks: Array<HookRegistration<BeforeStartHook>>,\n context: HookContext,\n warnings: string[],\n): Promise<void> {\n for (const hook of hooks) {\n try {\n await hook.callback(context);\n } catch (error) {\n warnings.push(\n `beforeStart hook \"${hook.source}\" threw: ${(error as Error).message ?? String(error)}`,\n );\n }\n }\n}\n\nexport async function runEventHooks(\n hooks: Array<HookRegistration<EventHook>>,\n event: unknown,\n context: HookContext,\n warnings: string[],\n): Promise<void> {\n for (const hook of hooks) {\n try {\n await hook.callback(event, context);\n } catch (error) {\n warnings.push(`onEvent hook \"${hook.source}\" threw: ${(error as Error).message ?? String(error)}`);\n }\n }\n}\n\n","import path from \"node:path\";\n\nimport type { NativeRunRequest, NativeTuiRequest } from \"../nativeBinding\";\nimport type {\n ApprovalMode,\n SandboxMode,\n ThreadOptions,\n WorkspaceWriteOptions,\n} from \"../threadOptions\";\n\nconst FULL_ACCESS_SANDBOX: SandboxMode = \"workspace-write\";\nconst FULL_ACCESS_APPROVAL: ApprovalMode = \"never\";\n\ntype SandboxTarget = {\n sandboxMode?: SandboxMode;\n approvalMode?: ApprovalMode;\n};\n\nexport function applyElevatedRunDefaults(request: NativeRunRequest, cwd: string): void {\n const workingDirectory = resolveWorkingDirectory(request.workingDirectory, cwd);\n request.workingDirectory = workingDirectory;\n ensureSandboxModes(request);\n request.workspaceWriteOptions = ensureWorkspaceWriteOptions(\n request.workspaceWriteOptions,\n workingDirectory,\n );\n}\n\nexport function applyElevatedTuiDefaults(params: {\n request: NativeTuiRequest;\n thread: ThreadOptions;\n cwd: string;\n}): void {\n const { request, thread, cwd } = params;\n const workingDirectory = resolveWorkingDirectory(\n request.workingDirectory ?? thread.workingDirectory,\n cwd,\n );\n\n request.workingDirectory = workingDirectory;\n thread.workingDirectory = workingDirectory;\n\n ensureSandboxModes(request);\n thread.sandboxMode = request.sandboxMode ?? thread.sandboxMode ?? FULL_ACCESS_SANDBOX;\n thread.approvalMode = request.approvalMode ?? thread.approvalMode ?? FULL_ACCESS_APPROVAL;\n\n thread.workspaceWriteOptions = ensureWorkspaceWriteOptions(\n thread.workspaceWriteOptions,\n workingDirectory,\n );\n}\n\nfunction ensureSandboxModes(target: SandboxTarget): void {\n if (!target.sandboxMode) {\n target.sandboxMode = FULL_ACCESS_SANDBOX;\n }\n if (!target.approvalMode) {\n target.approvalMode = FULL_ACCESS_APPROVAL;\n }\n}\n\nfunction ensureWorkspaceWriteOptions(\n options: WorkspaceWriteOptions | undefined,\n workingDirectory: string,\n): WorkspaceWriteOptions {\n const resolved = path.resolve(workingDirectory);\n const writableRoots = new Set(options?.writableRoots ?? []);\n writableRoots.add(resolved);\n\n return {\n ...options,\n networkAccess: options?.networkAccess ?? true,\n writableRoots: Array.from(writableRoots),\n };\n}\n\nfunction resolveWorkingDirectory(candidate: string | undefined, cwd: string): string {\n if (!candidate || candidate.trim().length === 0) {\n return path.resolve(cwd);\n }\n return path.isAbsolute(candidate) ? candidate : path.resolve(cwd, candidate);\n}\n","import type { Thread } from \"../thread\";\nimport type { ThreadEvent } from \"../events\";\nimport type { NativeBinding } from \"../nativeBinding\";\nimport { attachLspDiagnostics } from \"../lsp\";\n\ntype EventListener = (event: ThreadEvent) => void;\n\nclass RunCommandThreadRelay implements Pick<Thread, \"onEvent\" | \"sendBackgroundEvent\"> {\n private readonly listeners = new Set<EventListener>();\n private threadId: string | null;\n\n constructor(private readonly binding: NativeBinding, initialThreadId?: string) {\n this.threadId = initialThreadId ?? null;\n }\n\n onEvent(listener: EventListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n async sendBackgroundEvent(message: string): Promise<void> {\n const trimmed = typeof message === \"string\" ? message.trim() : \"\";\n if (!trimmed) {\n throw new Error(\"Background event message must be a non-empty string\");\n }\n if (!this.threadId) {\n throw new Error(\"Cannot emit a background event before the thread has started\");\n }\n if (typeof this.binding.emitBackgroundEvent !== \"function\") {\n throw new Error(\"emitBackgroundEvent is not available in this build\");\n }\n await this.binding.emitBackgroundEvent({ threadId: this.threadId, message: trimmed });\n }\n\n handleEvent(event: ThreadEvent): void {\n if (event.type === \"thread.started\" && typeof event.thread_id === \"string\") {\n this.threadId = event.thread_id;\n }\n for (const listener of this.listeners) {\n try {\n listener(event);\n } catch (error) {\n console.warn(\"[codex-native] LSP listener failed\", error);\n }\n }\n }\n\n setThreadId(id: string | undefined): void {\n if (id) {\n this.threadId = id;\n }\n }\n}\n\nexport function createRunCommandLspBridge(params: {\n binding: NativeBinding;\n workingDirectory: string;\n initialThreadId?: string;\n}): {\n handleEvent: (event: ThreadEvent) => void;\n dispose: () => void;\n} | null {\n try {\n const relay = new RunCommandThreadRelay(params.binding, params.initialThreadId);\n const detach = attachLspDiagnostics(relay as unknown as Thread, {\n workingDirectory: params.workingDirectory,\n waitForDiagnostics: true,\n });\n relay.setThreadId(params.initialThreadId);\n return {\n handleEvent: (event: ThreadEvent) => relay.handleEvent(event),\n dispose: () => detach(),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[codex-native] Failed to initialize LSP diagnostics bridge: ${message}`);\n return null;\n }\n}\n","import process from \"node:process\";\n\nimport { Codex } from \"../codex\";\nimport type { ThreadOptions } from \"../threadOptions\";\nimport type { NativeTuiRequest } from \"../nativeBinding\";\nimport { emitWarnings, runBeforeStartHooks } from \"./hooks\";\nimport { parseApprovalModeFlag, parseSandboxModeFlag } from \"./optionParsers\";\nimport type { CliContext, CommandName, TuiCommandOptions } from \"./types\";\nimport { applyElevatedTuiDefaults } from \"./elevatedDefaults\";\n\nexport async function executeTuiCommand(\n argv: TuiCommandOptions,\n context: CliContext,\n): Promise<void> {\n if (!process.stdout.isTTY || !process.stdin.isTTY) {\n throw new Error(\"The interactive TUI requires an interactive terminal (TTY).\");\n }\n\n const { combinedConfig } = context;\n emitWarnings(combinedConfig.warnings);\n const warningCount = combinedConfig.warnings.length;\n\n const { request, thread: threadOptions } = buildTuiConfig({\n argv,\n defaults: combinedConfig.tuiDefaults,\n cwd: context.cwd,\n });\n\n applyElevatedTuiDefaults({ request, thread: threadOptions, cwd: context.cwd });\n\n const hookContext = {\n command: \"tui\" as CommandName,\n cwd: context.cwd,\n options: argv,\n };\n\n await runBeforeStartHooks(combinedConfig.beforeStartHooks, hookContext, combinedConfig.warnings);\n\n const codex = new Codex({\n baseUrl: request.baseUrl,\n apiKey: request.apiKey,\n preserveRegisteredTools: true,\n });\n const thread = codex.startThread(threadOptions);\n\n const exitInfo = await thread.tui(request);\n if (exitInfo.conversationId) {\n process.stdout.write(`\\nConversation ID: ${exitInfo.conversationId}\\n`);\n }\n if (exitInfo.updateAction) {\n process.stdout.write(\n `Update available (${exitInfo.updateAction.kind}): ${exitInfo.updateAction.command}\\n`,\n );\n }\n\n emitWarnings(combinedConfig.warnings, warningCount);\n}\n\nfunction buildTuiConfig(params: {\n argv: TuiCommandOptions;\n defaults: Partial<NativeTuiRequest>;\n cwd: string;\n}): { request: NativeTuiRequest; thread: ThreadOptions } {\n const { argv, defaults, cwd } = params;\n const request: NativeTuiRequest = {\n ...(defaults as NativeTuiRequest),\n };\n\n if (argv.prompt !== undefined) request.prompt = argv.prompt;\n if (argv.model !== undefined) request.model = argv.model;\n if (argv.oss !== undefined) request.oss = argv.oss;\n const sandboxMode = parseSandboxModeFlag(argv.sandbox, \"--sandbox\");\n if (sandboxMode !== undefined) {\n request.sandboxMode = sandboxMode;\n }\n\n const approvalMode = parseApprovalModeFlag(argv.approval, \"--approval\");\n if (approvalMode !== undefined) {\n request.approvalMode = approvalMode;\n }\n if (argv.resume !== undefined) request.resumeSessionId = argv.resume;\n if (argv.resumeLast !== undefined) request.resumeLast = argv.resumeLast;\n if (argv.resumePicker !== undefined) request.resumePicker = argv.resumePicker;\n if (argv.fullAuto !== undefined) request.fullAuto = argv.fullAuto;\n if (argv.dangerouslyBypassApprovalsAndSandbox !== undefined) {\n request.dangerouslyBypassApprovalsAndSandbox = argv.dangerouslyBypassApprovalsAndSandbox;\n }\n if (argv.cd !== undefined) request.workingDirectory = argv.cd;\n if (argv.configProfile !== undefined) request.configProfile = argv.configProfile;\n if (argv.webSearch !== undefined) request.webSearch = argv.webSearch;\n if (argv.linuxSandboxPath !== undefined) request.linuxSandboxPath = argv.linuxSandboxPath;\n if (argv.baseUrl !== undefined) request.baseUrl = argv.baseUrl;\n if (argv.apiKey !== undefined) request.apiKey = argv.apiKey;\n\n if (argv.configOverrides) {\n const defaultsOverrides = Array.isArray(request.configOverrides)\n ? [...request.configOverrides]\n : [];\n request.configOverrides = [...defaultsOverrides, ...argv.configOverrides];\n }\n\n if (argv.addDir) {\n const defaultsAddDir = Array.isArray(request.addDir) ? [...request.addDir] : [];\n request.addDir = [...defaultsAddDir, ...argv.addDir];\n }\n\n if (argv.image) {\n const defaultsImages = Array.isArray(request.images) ? [...request.images] : [];\n request.images = [...defaultsImages, ...argv.image];\n }\n\n const thread: ThreadOptions = {\n model: request.model,\n oss: request.oss,\n sandboxMode: request.sandboxMode,\n approvalMode: request.approvalMode,\n workingDirectory: request.workingDirectory ?? cwd,\n skipGitRepoCheck: false,\n };\n\n return { request, thread };\n}\n","import path from \"node:path\";\nimport os from \"node:os\";\nimport { parseArgs } from \"node:util\";\n\nimport { fastEmbedInit, reverieIndexSemantic, type ReverieSemanticSearchOptions } from \"../nativeBinding\";\n\nconst DEFAULT_MODEL = \"mixedbread-ai/mxbai-embed-large-v1\";\n\nconst INDEX_OPTION_DEFS = {\n \"codex-home\": { type: \"string\" } as const,\n \"project-root\": { type: \"string\" } as const,\n limit: { type: \"string\" } as const,\n \"max-candidates\": { type: \"string\" } as const,\n \"batch-size\": { type: \"string\" } as const,\n normalize: { type: \"boolean\" } as const,\n cache: { type: \"boolean\" } as const,\n \"embed-model\": { type: \"string\" } as const,\n \"embed-cache-dir\": { type: \"string\" } as const,\n \"embed-max-length\": { type: \"string\" } as const,\n \"no-progress\": { type: \"boolean\" } as const,\n \"skip-embed-init\": { type: \"boolean\" } as const,\n};\n\nexport async function executeReverieCommand(args: string[]): Promise<void> {\n const [first, ...rest] = args;\n const isFlag = first?.startsWith(\"-\");\n const command = !first || isFlag ? \"index\" : first;\n const tail = !first || isFlag ? args : rest;\n if (command !== \"index\") {\n throw new Error(`Unknown reverie command '${command}'. Supported subcommands: index`);\n }\n await runReverieIndex(tail);\n}\n\nasync function runReverieIndex(args: string[]): Promise<void> {\n const { values } = parseArgs({ args, options: INDEX_OPTION_DEFS, allowPositionals: false, strict: true });\n\n const codexHome = resolveCodexHome(values[\"codex-home\"]);\n const projectRoot = resolveProjectRoot(values[\"project-root\"]);\n const limit = parseOptionalInt(values.limit);\n const maxCandidates = parseOptionalInt(values[\"max-candidates\"]);\n const batchSize = parseOptionalInt(values[\"batch-size\"]);\n const embedMaxLength = parseOptionalInt(values[\"embed-max-length\"]);\n const normalize = typeof values.normalize === \"boolean\" ? values.normalize : undefined;\n const cache = typeof values.cache === \"boolean\" ? values.cache : undefined;\n const embedModel = typeof values[\"embed-model\"] === \"string\" ? values[\"embed-model\"] : DEFAULT_MODEL;\n const embedCacheDir = typeof values[\"embed-cache-dir\"] === \"string\" ? values[\"embed-cache-dir\"] : undefined;\n const showDownloadProgress = values[\"no-progress\"] ? false : true;\n const skipEmbedInit = values[\"skip-embed-init\"] === true;\n\n if (!skipEmbedInit) {\n await fastEmbedInit({\n model: embedModel,\n cacheDir: embedCacheDir ? path.resolve(embedCacheDir) : defaultCacheDir(),\n maxLength: embedMaxLength ?? undefined,\n showDownloadProgress,\n });\n }\n\n const options: ReverieSemanticSearchOptions = {\n limit,\n maxCandidates,\n projectRoot,\n batchSize,\n normalize,\n cache,\n };\n\n console.log(`📂 Codex home: ${codexHome}`);\n console.log(`📁 Project root: ${projectRoot}`);\n const stats = await reverieIndexSemantic(codexHome, options);\n console.log(\n `✅ Indexed ${stats.documentsEmbedded} conversation(s) across ${stats.batches} batch(es); cache warmed at ${projectRoot}`,\n );\n}\n\nfunction resolveCodexHome(explicit?: string): string {\n if (explicit) {\n return path.resolve(explicit);\n }\n if (process.env.CODEX_HOME) {\n return process.env.CODEX_HOME;\n }\n const home = os.homedir() || process.cwd();\n return path.join(home, \".codex\");\n}\n\nfunction resolveProjectRoot(explicit?: string): string {\n if (explicit) {\n return path.resolve(explicit);\n }\n return process.cwd();\n}\n\nfunction parseOptionalInt(value: unknown): number | undefined {\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (!Number.isNaN(parsed)) {\n return parsed;\n }\n }\n return undefined;\n}\n\nfunction defaultCacheDir(): string | undefined {\n if (process.env.CODEX_EMBED_CACHE) {\n return path.resolve(process.env.CODEX_EMBED_CACHE);\n }\n return path.join(os.tmpdir(), \"codex-embed-cache\");\n}\n","import { getNativeBinding } from \"../nativeBinding\";\nimport type {\n ApprovalHandler,\n ApprovalRegistration,\n CodexNativeConfig,\n CombinedConfig,\n HookConfig,\n HookRegistration,\n LoadedConfigFile,\n LoadedPlugin,\n PluginContext,\n ToolConfig,\n ToolInterceptorConfig,\n} from \"./types\";\n\nexport async function buildCombinedConfig(params: {\n cwd: string;\n config: LoadedConfigFile;\n}): Promise<CombinedConfig> {\n const { cwd, config } = params;\n const warnings = [...config.warnings];\n const combined: CombinedConfig = {\n runDefaults: {},\n tuiDefaults: {},\n tools: [],\n interceptors: [],\n approval: undefined,\n beforeStartHooks: [],\n onEventHooks: [],\n warnings,\n allowReservedInterceptors: false,\n };\n\n const pluginContext: PluginContext = { cwd, configPath: config.configPath };\n\n if (config.config) {\n accumulateConfig({\n combined,\n config: config.config,\n source: config.configPath ?? \"config\",\n warnings,\n });\n }\n\n for (const loaded of config.plugins) {\n const pluginConfig = await evaluatePlugin(loaded, pluginContext, warnings);\n if (pluginConfig) {\n accumulateConfig({\n combined,\n config: pluginConfig,\n source: loaded.spec,\n warnings,\n });\n }\n }\n\n combined.warnings = warnings;\n return combined;\n}\n\nexport function applyNativeRegistrations(combined: CombinedConfig): void {\n const binding = getNativeBinding();\n if (!binding) {\n throw new Error(\"Native binding is not available.\");\n }\n\n binding.clearRegisteredTools();\n\n // De‑dupe tools by name: first registration wins\n const seenTools = new Set<string>();\n for (const tool of combined.tools) {\n const { handler, ...info } = tool;\n const name = String((info as any).name);\n if (seenTools.has(name)) {\n combined.warnings.push(`Duplicate tool \"${name}\" ignored (first definition wins).`);\n continue;\n }\n seenTools.add(name);\n binding.registerTool(info as any, handler as any);\n }\n\n // Register approval callback first so its interceptors have priority\n if (combined.approval && typeof binding.registerApprovalCallback === \"function\") {\n binding.registerApprovalCallback(combined.approval.handler);\n }\n\n const RESERVED = new Set<string>([\"local_shell\", \"exec_command\", \"apply_patch\", \"web_search\"]);\n const seenInterceptors = new Set<string>();\n\n for (const interceptor of combined.interceptors) {\n const name = interceptor.toolName;\n if (RESERVED.has(name) && !combined.allowReservedInterceptors) {\n combined.warnings.push(\n `Interceptor for \"${name}\" ignored: reserved for approval gating. Use approvals() hook instead.`,\n );\n continue;\n }\n if (seenInterceptors.has(name)) {\n combined.warnings.push(\n `Multiple interceptors for \"${name}\" detected; only the first will be used.`,\n );\n continue;\n }\n seenInterceptors.add(name);\n binding.registerToolInterceptor(interceptor.toolName, interceptor.handler);\n }\n}\n\nasync function evaluatePlugin(\n loaded: LoadedPlugin,\n context: PluginContext,\n warnings: string[],\n): Promise<CodexNativeConfig | null> {\n const { plugin, spec } = loaded;\n\n try {\n if (typeof plugin === \"function\") {\n const result = await plugin(context);\n return coerceConfig(result, spec, warnings);\n }\n\n if (plugin && typeof plugin === \"object\") {\n const candidate = plugin as CodexNativeConfig & {\n setup?: (ctx: PluginContext) => unknown;\n config?: CodexNativeConfig | ((ctx: PluginContext) => unknown);\n };\n\n if (typeof candidate.setup === \"function\") {\n await candidate.setup(context);\n }\n\n if (typeof candidate.config === \"function\") {\n return coerceConfig(await candidate.config(context), spec, warnings);\n }\n\n if (candidate.config) {\n return coerceConfig(candidate.config, spec, warnings);\n }\n\n return coerceConfig(candidate, spec, warnings);\n }\n\n return coerceConfig(plugin, spec, warnings);\n } catch (error) {\n warnings.push(`Plugin \"${spec}\" threw an error: ${(error as Error).message}`);\n return null;\n }\n}\n\nfunction coerceConfig(\n value: unknown,\n source: string,\n warnings: string[],\n): CodexNativeConfig | null {\n if (!value) {\n return null;\n }\n\n if (typeof value === \"object\") {\n return value as CodexNativeConfig;\n }\n\n warnings.push(`Plugin \"${source}\" did not return a config object.`);\n return null;\n}\n\nfunction accumulateConfig(params: {\n combined: CombinedConfig;\n config: CodexNativeConfig;\n source: string;\n warnings: string[];\n}) {\n const { combined, config, source, warnings } = params;\n\n if (config.defaults?.run) {\n combined.runDefaults = { ...combined.runDefaults, ...config.defaults.run };\n }\n if (config.defaults?.tui) {\n combined.tuiDefaults = { ...combined.tuiDefaults, ...config.defaults.tui };\n }\n\n if (Array.isArray(config.tools)) {\n for (const tool of config.tools) {\n if (!tool || typeof tool !== \"object\" || typeof tool.handler !== \"function\") {\n warnings.push(`Invalid tool definition supplied by \"${source}\".`);\n continue;\n }\n combined.tools.push(tool);\n }\n }\n\n if (Array.isArray(config.interceptors)) {\n for (const interceptor of config.interceptors) {\n if (\n !interceptor ||\n typeof interceptor !== \"object\" ||\n typeof interceptor.toolName !== \"string\" ||\n typeof interceptor.handler !== \"function\"\n ) {\n warnings.push(`Invalid interceptor definition supplied by \"${source}\".`);\n continue;\n }\n combined.interceptors.push(interceptor);\n }\n }\n\n if (config.approvals) {\n if (typeof config.approvals !== \"function\") {\n warnings.push(`Approval callback from \"${source}\" must be a function.`);\n } else {\n if (combined.approval) {\n warnings.push(\n `Approval callback from \"${source}\" overrides handler from \"${combined.approval.source}\".`,\n );\n }\n combined.approval = { source, handler: config.approvals as ApprovalHandler };\n }\n }\n\n if (config.hooks) {\n addHooks(combined, config.hooks, source, warnings);\n }\n\n if (config.allowReservedInterceptors === true) {\n combined.allowReservedInterceptors = true;\n }\n}\n\nfunction addHooks(\n combined: CombinedConfig,\n hooks: HookConfig,\n source: string,\n warnings: string[],\n): void {\n if (hooks.beforeStart) {\n const beforeStartCallbacks = Array.isArray(hooks.beforeStart)\n ? hooks.beforeStart\n : [hooks.beforeStart];\n for (const callback of beforeStartCallbacks) {\n if (typeof callback !== \"function\") {\n warnings.push(`beforeStart hook from \"${source}\" must be a function.`);\n continue;\n }\n combined.beforeStartHooks.push({ source, callback });\n }\n }\n\n if (hooks.onEvent) {\n const eventCallbacks = Array.isArray(hooks.onEvent) ? hooks.onEvent : [hooks.onEvent];\n for (const callback of eventCallbacks) {\n if (typeof callback !== \"function\") {\n warnings.push(`onEvent hook from \"${source}\" must be a function.`);\n continue;\n }\n combined.onEventHooks.push({ source, callback });\n }\n }\n}\n\n"],"mappings":"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","names":["process","parseArgs","fs","fsPromises","path","process","path","process","path","fsPromises","fs","process","process","path","path","process","isInteractive","parseArgs"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/index.ts","../package.json","../src/cli/config.ts","../src/cli/run.ts","../src/cli/optionParsers.ts","../src/cli/hooks.ts","../src/cli/elevatedDefaults.ts","../src/cli/lspBridge.ts","../src/cli/tui.ts","../src/cli/reverie.ts","../src/cli/runtime.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport process from \"node:process\";\nimport { parseArgs } from \"node:util\";\nimport { fileURLToPath } from \"node:url\";\n\nimport packageJson from \"../../package.json\";\nimport { loadCliConfig } from \"./config\";\nimport { executeRunCommand } from \"./run\";\nimport { executeTuiCommand } from \"./tui\";\nimport { executeReverieCommand } from \"./reverie\";\nimport { runApplyPatch } from \"../nativeBinding\";\nimport type {\n CliContext,\n ConfigLoaderOptions,\n GlobalOptions,\n RunCommandOptions,\n TuiCommandOptions,\n CommandName,\n} from \"./types\";\nimport { applyNativeRegistrations, buildCombinedConfig } from \"./runtime\";\n\nconst VERSION = packageJson.version;\nconst SANDBOX_CHOICES = [\"read-only\", \"workspace-write\", \"danger-full-access\"] as const;\nconst APPROVAL_CHOICES = [\"never\", \"on-request\", \"on-failure\", \"untrusted\"] as const;\nconst APPLY_PATCH_FLAG = \"--codex-run-as-apply-patch\";\nconst CLI_ENTRYPOINT_ENV = \"CODEX_NODE_CLI_ENTRYPOINT\";\n\ntry {\n const entrypoint = fileURLToPath(import.meta.url);\n process.env[CLI_ENTRYPOINT_ENV] = entrypoint;\n} catch {\n if (process.argv[1]) {\n process.env[CLI_ENTRYPOINT_ENV] = process.argv[1];\n }\n}\n\nconst GLOBAL_OPTION_DEFS = {\n config: { type: \"string\" } as const,\n \"no-config\": { type: \"boolean\" } as const,\n plugin: { type: \"string\", multiple: true } as const,\n};\n\nconst RUN_OPTION_DEFS = {\n model: { type: \"string\" } as const,\n oss: { type: \"boolean\" } as const,\n sandbox: { type: \"string\" } as const,\n approval: { type: \"string\" } as const,\n schema: { type: \"string\" } as const,\n \"thread-id\": { type: \"string\" } as const,\n \"base-url\": { type: \"string\" } as const,\n \"api-key\": { type: \"string\" } as const,\n \"linux-sandbox-path\": { type: \"string\" } as const,\n \"full-auto\": { type: \"boolean\" } as const,\n \"skip-git-repo-check\": { type: \"boolean\" } as const,\n cd: { type: \"string\" } as const,\n image: { type: \"string\", multiple: true } as const,\n \"review-mode\": { type: \"boolean\" } as const,\n \"review-hint\": { type: \"string\" } as const,\n};\n\nconst TUI_OPTION_DEFS = {\n model: { type: \"string\" } as const,\n oss: { type: \"boolean\" } as const,\n sandbox: { type: \"string\" } as const,\n approval: { type: \"string\" } as const,\n resume: { type: \"string\" } as const,\n \"resume-last\": { type: \"boolean\" } as const,\n \"resume-picker\": { type: \"boolean\" } as const,\n \"full-auto\": { type: \"boolean\" } as const,\n \"dangerously-bypass-approvals-and-sandbox\": { type: \"boolean\" } as const,\n cd: { type: \"string\" } as const,\n \"config-profile\": { type: \"string\" } as const,\n \"config-overrides\": { type: \"string\", multiple: true } as const,\n \"add-dir\": { type: \"string\", multiple: true } as const,\n image: { type: \"string\", multiple: true } as const,\n \"web-search\": { type: \"boolean\" } as const,\n \"linux-sandbox-path\": { type: \"string\" } as const,\n \"base-url\": { type: \"string\" } as const,\n \"api-key\": { type: \"string\" } as const,\n};\n\nasync function main(): Promise<void> {\n const rawArgs = process.argv.slice(2);\n\n if (maybeHandleApplyPatch(rawArgs)) {\n return;\n }\n\n if (hasFlag(rawArgs, \"--version\") || hasFlag(rawArgs, \"-v\")) {\n printVersion();\n return;\n }\n\n const generalHelpRequested = hasFlag(rawArgs, \"--help\") || hasFlag(rawArgs, \"-h\");\n\n if (generalHelpRequested && !hasExplicitCommand(rawArgs)) {\n printGeneralHelp();\n return;\n }\n\n const { command, args } = selectCommand(rawArgs);\n\n if (hasCommandHelpFlag(args)) {\n printCommandHelp(command);\n return;\n }\n\n if (command === \"reverie-index\") {\n await executeReverieCommand(args);\n return;\n }\n\n const options = command === \"tui\" ? parseTuiCommand(args) : parseRunCommand(args);\n\n validateOptionChoices(command, options);\n\n const context = await createContext(options);\n\n if (command === \"tui\") {\n await executeTuiCommand(options as TuiCommandOptions, context);\n } else {\n await executeRunCommand(options as RunCommandOptions, context);\n }\n}\n\nfunction maybeHandleApplyPatch(args: string[]): boolean {\n if (args.length === 0 || args[0] !== APPLY_PATCH_FLAG) {\n return false;\n }\n\n const patch = args[1];\n if (!patch) {\n console.error(`${APPLY_PATCH_FLAG} requires a patch argument.`);\n process.exitCode = 1;\n return true;\n }\n\n try {\n runApplyPatch(patch);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`apply_patch failed: ${message}`);\n process.exitCode = 1;\n }\n return true;\n}\n\nfunction selectCommand(argv: string[]): { command: CommandName; args: string[] } {\n // Handle explicit \"tui\" and \"run\" subcommands\n if (argv.length > 0) {\n const [first, ...rest] = argv;\n if (first === \"tui\") {\n return { command: \"tui\", args: rest };\n }\n if (first === \"run\") {\n return { command: \"run\", args: rest };\n }\n if (first === \"reverie\") {\n if (rest.length === 0) {\n return { command: \"reverie-index\", args: [] };\n }\n return { command: \"reverie-index\", args: rest };\n }\n // Unrecognized first arg: treat as prompt\n }\n\n // Default behavior when no arguments: start TUI only when a TTY is available\n // This matches codex-rs behavior for interactive shells; headless users can rely on\n // the run command without needing additional flags\n if (argv.length === 0) {\n const isInteractive = process.stdout.isTTY && process.stdin.isTTY;\n return { command: isInteractive ? \"tui\" : \"run\", args: [] };\n }\n\n // Non-empty argv without explicit command: treat as prompt\n // Smart default based on whether we're in an interactive terminal\n const isInteractive = process.stdout.isTTY && process.stdin.isTTY;\n return { command: isInteractive ? \"tui\" : \"run\", args: argv };\n}\n\nfunction hasExplicitCommand(argv: string[]): boolean {\n if (argv.length === 0) {\n return false;\n }\n const first = argv[0];\n return first === \"tui\" || first === \"run\" || first === \"reverie\";\n}\n\nfunction parseRunCommand(args: string[]): RunCommandOptions {\n const { values, positionals } = parseArgs({\n args,\n options: { ...GLOBAL_OPTION_DEFS, ...RUN_OPTION_DEFS },\n allowPositionals: true,\n strict: true,\n });\n const options = camelCaseKeys(values);\n const runOptions: RunCommandOptions = {\n ...(options as RunCommandOptions),\n };\n if (!runOptions.prompt && positionals.length > 0) {\n runOptions.prompt = positionals[0];\n }\n return runOptions;\n}\n\nfunction parseTuiCommand(args: string[]): TuiCommandOptions {\n const { values, positionals } = parseArgs({\n args,\n options: { ...GLOBAL_OPTION_DEFS, ...TUI_OPTION_DEFS },\n allowPositionals: true,\n strict: true,\n });\n const options = camelCaseKeys(values);\n const tuiOptions: TuiCommandOptions = {\n ...(options as TuiCommandOptions),\n };\n if (!tuiOptions.prompt && positionals.length > 0) {\n tuiOptions.prompt = positionals[0];\n }\n return tuiOptions;\n}\n\nasync function createContext(options: GlobalOptions): Promise<CliContext> {\n const cwd = process.cwd();\n const configOptions: ConfigLoaderOptions = {\n cwd,\n explicitConfigPath: options.config,\n noConfig: options.noConfig,\n pluginPaths: normalizeStringArray(options.plugin),\n };\n const config = await loadCliConfig(configOptions);\n const combinedConfig = await buildCombinedConfig({ cwd, config });\n applyNativeRegistrations(combinedConfig);\n return { cwd, config, combinedConfig };\n}\n\nfunction normalizeStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n if (typeof value === \"string\") {\n return [value];\n }\n return [];\n}\n\nfunction camelCaseKeys(record: Record<string, unknown>): Record<string, unknown> {\n return Object.entries(record).reduce<Record<string, unknown>>((acc, [key, value]) => {\n acc[toCamelCase(key)] = value;\n return acc;\n }, {});\n}\n\nfunction toCamelCase(value: string): string {\n return value.replace(/-([a-z])/g, (_, char) => char.toUpperCase());\n}\n\nfunction hasFlag(args: string[], flag: string): boolean {\n return args.includes(flag);\n}\n\nfunction hasCommandHelpFlag(args: string[]): boolean {\n return hasFlag(args, \"--help\") || hasFlag(args, \"-h\");\n}\n\nfunction printVersion(): void {\n console.log(VERSION);\n}\n\nfunction printGeneralHelp(): void {\n console.log(`codex-native v${VERSION}\n\nUsage:\n codex-native [options] [prompt]\n codex-native run [options] [prompt]\n codex-native tui [options] [prompt]\n\nDefault behavior:\n Running 'codex-native' without arguments launches the interactive TUI.\n Use 'codex-native run <prompt>' for non-interactive exec mode.\n\nCommands:\n (default) Launch the interactive TUI (with optional initial prompt)\n run Run Codex in non-interactive exec mode\n tui Explicitly launch the interactive TUI\n reverie index Pre-compute reverie embeddings for the current repo\n\nGlobal options:\n --config <path> Path to codex.config.js (or similar)\n --no-config Skip automatic config discovery\n --plugin <path> Additional plugin module (repeatable)\n\nRun options:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --schema <file> Path to final-output JSON schema\n --thread-id <id> Resume an existing thread\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --full-auto Enable workspace-write auto approvals\n --skip-git-repo-check Skip git repository validation\n --cd <path> Working directory for the run\n --image <path> Attach an image (repeatable)\n --review-mode Enable review mode\n --review-hint <text> Hint text for review mode\n\nTUI options:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --resume <id> Resume a saved session by id\n --resume-last Resume the most recent saved session\n --resume-picker Show the resume picker on startup\n --full-auto Enable workspace-write auto approvals\n --dangerously-bypass-approvals-and-sandbox\n Disable approvals and sandboxing (unsafe)\n --cd <path> Working directory for the session\n --config-profile <name> Config profile to activate\n --config-overrides <kv> Config overrides (key=value, repeatable)\n --add-dir <path> Additional writable directory (repeatable)\n --image <path> Attach an image (repeatable)\n --web-search Enable web search tool\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n`);\n}\n\nfunction printCommandHelp(command: CommandName): void {\n if (command === \"reverie-index\") {\n console.log(`codex-native reverie index [options]\n\nOptions:\n --codex-home <path> Override CODEX_HOME (defaults to ~/.codex)\n --project-root <path> Project root for scoping + embedding cache (default: cwd)\n --limit <n> Maximum conversations to index (default: 10)\n --max-candidates <n> Scan window before filtering (default: 80)\n --batch-size <n> Batch size forwarded to FastEmbed\n --normalize Force vector normalization (default: embed config)\n --no-normalize Disable normalization\n --cache / --no-cache Override embedding cache behavior\n --embed-model <name> FastEmbed model (default: BAAI/bge-large-en-v1.5)\n --embed-cache-dir <dir> Cache directory (defaults to $CODEX_EMBED_CACHE or system tmp)\n --embed-max-length <n> Override FastEmbed max token length\n --no-progress Hide FastEmbed download progress\n --skip-embed-init Assume fastEmbedInit was already called in this process\n`);\n return;\n }\n if (command === \"tui\") {\n console.log(`codex-native tui [options] [prompt]\n\nOptions:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --resume <id> Resume a saved session by id\n --resume-last Resume the most recent saved session\n --resume-picker Show the resume picker on startup\n --full-auto Enable workspace-write auto approvals\n --dangerously-bypass-approvals-and-sandbox\n Disable approvals and sandboxing (unsafe)\n --cd <path> Working directory for the session\n --config-profile <name> Config profile to activate\n --config-overrides <kv> Config overrides (key=value, repeatable)\n --add-dir <path> Additional writable directory (repeatable)\n --image <path> Attach an image (repeatable)\n --web-search Enable web search tool\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n`);\n } else {\n console.log(`codex-native run [options] [prompt]\n\nOptions:\n --model <slug> Model slug to use\n --oss Use the built-in OSS provider\n --sandbox <mode> ${SANDBOX_CHOICES.join(\" | \")}\n --approval <policy> ${APPROVAL_CHOICES.join(\" | \")}\n --schema <file> Path to final-output JSON schema\n --thread-id <id> Resume an existing thread\n --base-url <url> Override the Codex API base URL\n --api-key <key> API key for Codex requests\n --linux-sandbox-path Path to codex-linux-sandbox binary\n --full-auto Enable workspace-write auto approvals\n --skip-git-repo-check Skip git repository validation\n --cd <path> Working directory for the run\n --image <path> Attach an image (repeatable)\n --review-mode Enable review mode\n --review-hint <text> Hint text for review mode\n`);\n }\n}\n\nfunction validateOptionChoices(\n command: CommandName,\n options: RunCommandOptions | TuiCommandOptions,\n): void {\n const sandbox = options.sandbox;\n if (sandbox && !SANDBOX_CHOICES.includes(sandbox as (typeof SANDBOX_CHOICES)[number])) {\n throw new Error(\n `Invalid sandbox mode \"${sandbox}\". Valid modes: ${SANDBOX_CHOICES.join(\", \")}.`,\n );\n }\n const approval = options.approval;\n if (approval && !APPROVAL_CHOICES.includes(approval as (typeof APPROVAL_CHOICES)[number])) {\n throw new Error(\n `Invalid approval policy \"${approval}\". Valid policies: ${APPROVAL_CHOICES.join(\", \")}.`,\n );\n }\n}\n\nfunction logError(error: unknown): void {\n if (error instanceof Error) {\n console.error(error.message);\n if (process.env.CODEX_NATIVE_DEBUG) {\n console.error(error.stack);\n }\n } else {\n console.error(String(error));\n }\n}\n\nmain().catch((error) => {\n logError(error);\n process.exitCode = 1;\n});\n","{\n \"name\": \"@codex-native/sdk\",\n \"version\": \"0.0.20\",\n \"description\": \"Native NAPI-based Codex SDK - complete standalone implementation.\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"bin\": {\n \"codex-native\": \"dist/cli.cjs\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"artifacts\": \"napi artifacts\",\n \"build\": \"pnpm run build:ts && pnpm run build:napi\",\n \"build:ts\": \"tsup\",\n \"build:napi\": \"node -e \\\"const {execFileSync}=require('node:child_process');const {readFileSync,readdirSync,rmSync}=require('node:fs');const {platform,arch}=process;for(const entry of readdirSync(process.cwd())){if(entry.endsWith('.node')&&entry.startsWith('codex_native.')){try{rmSync(entry);}catch{}}}const isMusl=()=>{if(platform!=='linux')return false;try{if(readFileSync('/usr/bin/ldd','utf8').includes('musl'))return true;}catch{}if(typeof process.report?.getReport==='function'){const r=process.report.getReport();if(r?.header?.glibcVersionRuntime)return false;if(Array.isArray(r?.sharedObjects)&&r.sharedObjects.some((p)=>p.includes('libc.musl-')||p.includes('ld-musl-')))return true;}try{return require('node:child_process').execSync('ldd --version',{encoding:'utf8'}).includes('musl');}catch{}return false;};let dir=null;if(platform==='darwin'){dir=arch==='arm64'?'darwin-arm64':arch==='x64'?'darwin-x64':null;}else if(platform==='linux'){const suffix=isMusl()?'musl':'gnu';dir=arch==='arm64'?'linux-arm64-'+suffix:arch==='x64'?'linux-x64-'+suffix:null;}else if(platform==='win32'){dir=arch==='arm64'?'win32-arm64-msvc':arch==='x64'?'win32-x64-msvc':null;}if(!dir){throw new Error('Unsupported platform/arch: '+platform+' '+arch);}execFileSync('napi',['build','--platform','--release','--features','napi-bindings','--no-js','--output-dir','npm/'+dir],{stdio:'inherit'});\\\"\",\n \"build:napi:debug\": \"node -e \\\"const {execFileSync}=require('node:child_process');const {readFileSync}=require('node:fs');const {platform,arch}=process;const isMusl=()=>{if(platform!=='linux')return false;try{if(readFileSync('/usr/bin/ldd','utf8').includes('musl'))return true;}catch{}if(typeof process.report?.getReport==='function'){const r=process.report.getReport();if(r?.header?.glibcVersionRuntime)return false;if(Array.isArray(r?.sharedObjects)&&r.sharedObjects.some((p)=>p.includes('libc.musl-')||p.includes('ld-musl-')))return true;}try{return require('node:child_process').execSync('ldd --version',{encoding:'utf8'}).includes('musl');}catch{}return false;};let dir=null;if(platform==='darwin'){dir=arch==='arm64'?'darwin-arm64':arch==='x64'?'darwin-x64':null;}else if(platform==='linux'){const suffix=isMusl()?'musl':'gnu';dir=arch==='arm64'?'linux-arm64-'+suffix:arch==='x64'?'linux-x64-'+suffix:null;}else if(platform==='win32'){dir=arch==='arm64'?'win32-arm64-msvc':arch==='x64'?'win32-x64-msvc':null;}if(!dir){throw new Error('Unsupported platform/arch: '+platform+' '+arch);}execFileSync('napi',['build','--platform','--features','napi-bindings','--no-js','--output-dir','npm/'+dir],{stdio:'inherit'});\\\"\",\n \"release\": \"node scripts/publish.mjs\",\n \"test\": \"NODE_OPTIONS='--experimental-vm-modules' jest --runInBand\",\n \"version\": \"napi version\"\n },\n \"napi\": {\n \"binaryName\": \"codex_native\",\n \"targets\": [\n \"aarch64-apple-darwin\",\n \"x86_64-apple-darwin\",\n \"aarch64-unknown-linux-gnu\",\n \"x86_64-unknown-linux-gnu\",\n \"aarch64-unknown-linux-musl\",\n \"x86_64-unknown-linux-musl\",\n \"aarch64-pc-windows-msvc\",\n \"x86_64-pc-windows-msvc\"\n ]\n },\n \"optionalDependencies\": {\n \"@codex-native/sdk-darwin-arm64\": \"0.0.15\",\n \"@codex-native/sdk-darwin-x64\": \"0.0.15\",\n \"@codex-native/sdk-linux-arm64-gnu\": \"0.0.15\",\n \"@codex-native/sdk-linux-x64-gnu\": \"0.0.15\",\n \"@codex-native/sdk-linux-arm64-musl\": \"0.0.15\",\n \"@codex-native/sdk-linux-x64-musl\": \"0.0.15\",\n \"@codex-native/sdk-win32-arm64-msvc\": \"0.0.15\",\n \"@codex-native/sdk-win32-x64-msvc\": \"0.0.15\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.22.0\",\n \"@openai/agents\": \"^0.3.3\",\n \"@openai/agents-core\": \"^0.3.3\",\n \"@opencode-ai/sdk\": \"^1.0.164\",\n \"@toon-format/toon\": \"^1.0.0\",\n \"pyright\": \"^1.1.386\",\n \"typescript-language-server\": \"^4.3.3\",\n \"vscode-jsonrpc\": \"^8.2.1\",\n \"vscode-languageserver-types\": \"^3.17.5\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"7.25.2\",\n \"@babel/preset-env\": \"7.25.4\",\n \"@babel/preset-typescript\": \"7.28.5\",\n \"@jest/globals\": \"^29.7.0\",\n \"@napi-rs/cli\": \"^3.4.1\",\n \"@openai/agents\": \"^0.3.0\",\n \"@types/jest\": \"29.5.14\",\n \"@types/node\": \"^22.0.0\",\n \"babel-jest\": \"29.7.0\",\n \"jest\": \"^29.7.0\",\n \"ts-jest\": \"^29.1.1\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.7.2\",\n \"zod\": \"^3.25.76\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import fs from \"node:fs\";\nimport fsPromises from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type {\n CodexNativeConfig,\n ConfigLoaderOptions,\n LoadedConfigFile,\n LoadedPlugin,\n} from \"./types\";\n\nconst requireFromThisModule = createRequire(import.meta.url);\n\nconst CONFIG_CANDIDATES = [\n \"codex.config.js\",\n \"codex.config.cjs\",\n \"codex.config.mjs\",\n \"codex.config.ts\",\n \"codex.js\",\n \".codexrc.js\",\n \".codexrc.cjs\",\n \".codexrc.mjs\",\n \".codexrc.json\",\n] as const;\n\ntype ConfigDiscovery =\n | { path: string; type: \"file\" }\n | { path: string; type: \"package-json\"; field: string };\n\nexport async function loadCliConfig(options: ConfigLoaderOptions): Promise<LoadedConfigFile> {\n const warnings: string[] = [];\n\n const discovery = await resolveConfigPath(options);\n const configPath = discovery?.path ?? null;\n let config: CodexNativeConfig | null = null;\n\n if (discovery) {\n const loadResult = await loadConfig(discovery, warnings);\n config = loadResult ?? null;\n if (config && typeof config !== \"object\") {\n warnings.push(\n `Config at ${discovery.path} must export an object. Received ${typeof config}.`,\n );\n config = null;\n }\n }\n\n const plugins = await resolvePlugins({\n config,\n configPath,\n cliPluginPaths: options.pluginPaths ?? [],\n cwd: options.cwd,\n warnings,\n });\n\n return {\n configPath,\n config,\n plugins,\n warnings,\n };\n}\n\nasync function resolveConfigPath(options: ConfigLoaderOptions): Promise<ConfigDiscovery | null> {\n if (options.explicitConfigPath) {\n const explicitPath = path.resolve(options.cwd, options.explicitConfigPath);\n if (!fs.existsSync(explicitPath)) {\n throw new Error(`Config file not found at ${explicitPath}`);\n }\n return classifyPath(explicitPath);\n }\n\n if (options.noConfig) {\n return null;\n }\n\n let currentDir = path.resolve(options.cwd);\n const visited = new Set<string>();\n\n while (!visited.has(currentDir)) {\n visited.add(currentDir);\n\n for (const candidate of CONFIG_CANDIDATES) {\n const candidatePath = path.join(currentDir, candidate);\n if (fs.existsSync(candidatePath) && fs.statSync(candidatePath).isFile()) {\n return classifyPath(candidatePath);\n }\n }\n\n const packageJsonPath = path.join(currentDir, \"package.json\");\n if (fs.existsSync(packageJsonPath) && fs.statSync(packageJsonPath).isFile()) {\n const manifest = await readJson(packageJsonPath);\n if (manifest && manifest.codexNative != null) {\n return { path: packageJsonPath, type: \"package-json\", field: \"codexNative\" };\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n break;\n }\n currentDir = parentDir;\n }\n\n return null;\n}\n\nasync function loadConfig(discovery: ConfigDiscovery, warnings: string[]): Promise<CodexNativeConfig | null> {\n if (discovery.type === \"package-json\") {\n const manifest = await readJson(discovery.path);\n if (!manifest) {\n warnings.push(`Failed to parse ${discovery.path}; ignoring config.`);\n return null;\n }\n const raw = manifest[discovery.field];\n if (typeof raw === \"string\") {\n const baseDir = path.dirname(discovery.path);\n const nestedPath = path.resolve(baseDir, raw);\n if (!fs.existsSync(nestedPath)) {\n throw new Error(\n `Config path \"${raw}\" referenced by ${discovery.field} in ${discovery.path} was not found.`,\n );\n }\n return loadConfig({ path: nestedPath, type: \"file\" }, warnings);\n }\n if (typeof raw === \"object\" && raw !== null) {\n return raw as CodexNativeConfig;\n }\n warnings.push(\n `The ${discovery.field} field in ${discovery.path} must be an object or path string.`,\n );\n return null;\n }\n\n const ext = path.extname(discovery.path).toLowerCase();\n if (ext === \".json\") {\n const json = await readJson(discovery.path);\n if (json === null) {\n warnings.push(`Failed to parse JSON config at ${discovery.path}`);\n }\n return json as CodexNativeConfig | null;\n }\n\n if (ext === \".js\" || ext === \".cjs\") {\n return extractModuleDefault(await loadCommonJsModule(discovery.path)) as CodexNativeConfig | null;\n }\n\n if (ext === \".mjs\") {\n return extractModuleDefault(await importModule(discovery.path)) as CodexNativeConfig | null;\n }\n\n if (ext === \".ts\") {\n return extractModuleDefault(await loadTypeScriptModule(discovery.path, warnings)) as\n | CodexNativeConfig\n | null;\n }\n\n throw new Error(`Unsupported config extension \"${ext}\" at ${discovery.path}`);\n}\n\nasync function resolvePlugins(params: {\n config: CodexNativeConfig | null;\n configPath: string | null;\n cliPluginPaths: string[];\n cwd: string;\n warnings: string[];\n}): Promise<LoadedPlugin[]> {\n const plugins: LoadedPlugin[] = [];\n const { config, configPath, cliPluginPaths, cwd, warnings } = params;\n\n const configDir = configPath ? path.dirname(configPath) : cwd;\n\n const rawConfigPlugins = (config as { plugins?: unknown })?.plugins;\n const configPlugins = Array.isArray(rawConfigPlugins) ? (rawConfigPlugins as unknown[]) : [];\n for (const spec of configPlugins) {\n if (typeof spec === \"string\") {\n const loaded = await loadPlugin(spec, configDir, \"config\", warnings);\n if (loaded) {\n plugins.push(loaded);\n }\n } else if (spec != null) {\n plugins.push({\n source: \"config\",\n spec: \"<inline>\",\n plugin: spec,\n });\n }\n }\n\n for (const spec of cliPluginPaths) {\n const loaded = await loadPlugin(spec, cwd, \"cli\", warnings);\n if (loaded) {\n plugins.push(loaded);\n }\n }\n\n return plugins;\n}\n\nasync function loadPlugin(\n spec: string,\n baseDir: string,\n source: LoadedPlugin[\"source\"],\n warnings: string[],\n): Promise<LoadedPlugin | null> {\n try {\n const resolved = resolveModule(spec, baseDir);\n const moduleExports = await loadModuleForPath(resolved);\n return {\n source,\n spec,\n resolvedPath: resolved,\n plugin: extractModuleDefault(moduleExports),\n };\n } catch (err) {\n warnings.push(`Failed to load plugin \"${spec}\": ${(err as Error).message}`);\n return null;\n }\n}\n\nasync function loadModuleForPath(modulePath: string): Promise<unknown> {\n const ext = path.extname(modulePath).toLowerCase();\n if (ext === \".cjs\") {\n return loadCommonJsModule(modulePath);\n }\n if (ext === \".mjs\") {\n return importModule(modulePath);\n }\n if (ext === \".ts\") {\n return loadTypeScriptModule(modulePath);\n }\n if (ext === \".json\") {\n return readJson(modulePath);\n }\n if (ext === \".js\") {\n try {\n return loadCommonJsModule(modulePath);\n } catch (err) {\n if (err instanceof Error && err.message.includes(\"ERR_REQUIRE_ESM\")) {\n return importModule(modulePath);\n }\n throw err;\n }\n }\n return loadCommonJsModule(modulePath);\n}\n\nasync function loadCommonJsModule(modulePath: string): Promise<unknown> {\n return requireFromThisModule(modulePath);\n}\n\nasync function importModule(modulePath: string): Promise<unknown> {\n const href = pathToFileURL(modulePath).href;\n return import(href);\n}\n\nasync function loadTypeScriptModule(modulePath: string, warnings?: string[]): Promise<unknown> {\n try {\n const { register } = requireFromThisModule(\"tsx/cjs/api\");\n const unregister = register({ transpileOnly: true });\n try {\n return requireFromThisModule(modulePath);\n } finally {\n await maybeCall(unregister);\n }\n } catch (cjsError) {\n try {\n const tsxEsmSpecifier = \"tsx/esm/api\";\n // Use a dynamic specifier so type resolution doesn't require this module to exist at compile-time.\n const apiModule: any = await import(tsxEsmSpecifier as any);\n const unregister =\n typeof apiModule.register === \"function\"\n ? apiModule.register({ transpileOnly: true })\n : apiModule.default({ transpileOnly: true });\n try {\n return importModule(modulePath);\n } finally {\n await maybeCall(unregister);\n }\n } catch (esmError) {\n const message = [\n `Failed to load TypeScript module ${modulePath}.`,\n \"Install the \\\"tsx\\\" package or convert the config to JavaScript.\",\n ].join(\" \");\n if (warnings) {\n warnings.push(message);\n return null;\n }\n throw new Error(message);\n }\n }\n}\n\nasync function readJson(filePath: string): Promise<any> {\n try {\n const raw = await fsPromises.readFile(filePath, \"utf8\");\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\nfunction extractModuleDefault<T>(module: T): T | unknown {\n if (module && typeof module === \"object\" && \"default\" in (module as Record<string, unknown>)) {\n const value = (module as Record<string, unknown>).default;\n if (value !== undefined) {\n return value;\n }\n }\n return module;\n}\n\nfunction resolveModule(specifier: string, baseDir: string): string {\n if (path.isAbsolute(specifier)) {\n return specifier;\n }\n return requireFromThisModule.resolve(specifier, { paths: [baseDir] });\n}\n\nfunction classifyPath(filePath: string): ConfigDiscovery {\n if (path.basename(filePath) === \"package.json\") {\n return { path: filePath, type: \"package-json\", field: \"codexNative\" };\n }\n return { path: filePath, type: \"file\" };\n}\n\nasync function maybeCall(candidate: unknown): Promise<void> {\n if (typeof candidate === \"function\") {\n await Promise.resolve(candidate());\n }\n}\n\n","import fs from \"node:fs\";\nimport fsPromises from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\n\nimport { type NativeRunRequest, getNativeBinding } from \"../nativeBinding\";\nimport type { ThreadEvent } from \"../events\";\nimport { convertRustEventToThreadEvent } from \"../events/convert\";\nimport { parseApprovalModeFlag, parseSandboxModeFlag } from \"./optionParsers\";\nimport { emitWarnings, runBeforeStartHooks, runEventHooks } from \"./hooks\";\nimport { applyElevatedRunDefaults } from \"./elevatedDefaults\";\nimport type {\n CliContext,\n CommandName,\n RunCommandOptions,\n} from \"./types\";\nimport { createRunCommandLspBridge } from \"./lspBridge\";\n\nexport async function executeRunCommand(\n argv: RunCommandOptions,\n context: CliContext,\n): Promise<void> {\n const { combinedConfig } = context;\n emitWarnings(combinedConfig.warnings);\n const warningCount = combinedConfig.warnings.length;\n\n const prompt = await resolvePrompt(argv, combinedConfig.runDefaults.prompt, context.cwd);\n const request = await buildRunRequest({\n prompt,\n argv,\n combinedDefaults: combinedConfig.runDefaults,\n cwd: context.cwd,\n });\n\n if (!request.skipGitRepoCheck) {\n await assertTrustedDirectory(request.workingDirectory);\n }\n\n const hookContext = {\n command: \"run\" as CommandName,\n cwd: context.cwd,\n options: argv,\n };\n\n await runBeforeStartHooks(combinedConfig.beforeStartHooks, hookContext, combinedConfig.warnings);\n\n const binding = getNativeBinding();\n if (!binding) {\n throw new Error(\"Native N-API binding is not available.\");\n }\n\n const queue = new AsyncQueue<string>();\n let conversationId: string | null = null;\n const lspBridge = createRunCommandLspBridge({\n binding,\n workingDirectory: request.workingDirectory ?? context.cwd,\n initialThreadId: request.threadId,\n });\n\n const handleEvent = async (eventJson: string | null | undefined) => {\n if (!eventJson) {\n return;\n }\n process.stdout.write(eventJson);\n process.stdout.write(\"\\n\");\n\n let eventPayload: unknown = eventJson;\n try {\n eventPayload = JSON.parse(eventJson);\n } catch {\n // Leave as string if parsing fails.\n }\n\n conversationId ??= extractConversationId(eventPayload);\n const threadEvent = toThreadEvent(eventPayload);\n if (threadEvent && lspBridge) {\n lspBridge.handleEvent(threadEvent);\n }\n await runEventHooks(\n combinedConfig.onEventHooks,\n eventPayload,\n hookContext,\n combinedConfig.warnings,\n );\n };\n\n let runPromise: Promise<void> = Promise.resolve();\n runPromise = binding\n .runThreadStream(request, (err, eventJson) => {\n if (err) {\n queue.fail(err);\n return;\n }\n queue.push(eventJson ?? null);\n })\n .then(\n () => queue.end(),\n (error) => {\n queue.fail(error);\n },\n );\n\n let loopError: unknown;\n try {\n for await (const eventJson of queue) {\n try {\n await handleEvent(eventJson);\n } catch (error) {\n combinedConfig.warnings.push(\n `Event handler failed: ${(error as Error).message ?? String(error)}`,\n );\n }\n }\n await runPromise;\n } catch (error) {\n loopError = error;\n throw error;\n } finally {\n queue.end();\n if (loopError) {\n await runPromise.catch(() => {});\n }\n if (lspBridge) {\n lspBridge.dispose();\n }\n }\n\n if (conversationId) {\n process.stdout.write(`\\nTo resume, run: codex-native tui --resume ${conversationId}\\n`);\n }\n\n emitWarnings(combinedConfig.warnings, warningCount);\n}\n\nfunction toThreadEvent(payload: unknown): ThreadEvent | null {\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n try {\n return convertRustEventToThreadEvent(payload);\n } catch {\n return null;\n }\n}\n\nasync function resolvePrompt(\n argv: RunCommandOptions,\n defaultPrompt: string | undefined,\n cwd: string,\n): Promise<string> {\n if (argv.prompt && argv.prompt.trim().length > 0) {\n return argv.prompt;\n }\n if (defaultPrompt && defaultPrompt.trim().length > 0) {\n return defaultPrompt;\n }\n\n const stdinPrompt = await readPromptFromStdin();\n if (stdinPrompt && stdinPrompt.trim().length > 0) {\n return stdinPrompt;\n }\n\n if (argv.threadId) {\n // Resume runs without a prompt are permitted.\n return \"\";\n }\n\n const baseMessage = \"No prompt provided. Supply a prompt or pipe one via stdin.\";\n if (process.stdin.isTTY) {\n throw new Error(baseMessage);\n }\n throw new Error(baseMessage);\n}\n\nasync function buildRunRequest(params: {\n prompt: string;\n argv: RunCommandOptions;\n combinedDefaults: Partial<NativeRunRequest>;\n cwd: string;\n}): Promise<NativeRunRequest> {\n const { prompt, argv, combinedDefaults, cwd } = params;\n const request: NativeRunRequest = {\n ...(combinedDefaults as NativeRunRequest),\n prompt,\n };\n\n if (combinedDefaults.images) {\n request.images = [...combinedDefaults.images];\n }\n if (combinedDefaults.workspaceWriteOptions) {\n request.workspaceWriteOptions = { ...combinedDefaults.workspaceWriteOptions };\n }\n\n if (argv.model !== undefined) request.model = argv.model;\n if (argv.oss !== undefined) request.oss = argv.oss;\n const sandboxMode = parseSandboxModeFlag(argv.sandbox, \"--sandbox\");\n if (sandboxMode !== undefined) {\n request.sandboxMode = sandboxMode;\n }\n\n const approvalMode = parseApprovalModeFlag(argv.approval, \"--approval\");\n if (approvalMode !== undefined) {\n request.approvalMode = approvalMode;\n }\n if (argv.threadId !== undefined) request.threadId = argv.threadId;\n if (argv.baseUrl !== undefined) request.baseUrl = argv.baseUrl;\n if (argv.apiKey !== undefined) request.apiKey = argv.apiKey;\n if (argv.linuxSandboxPath !== undefined) request.linuxSandboxPath = argv.linuxSandboxPath;\n if (argv.fullAuto !== undefined) request.fullAuto = argv.fullAuto;\n if (argv.skipGitRepoCheck !== undefined) request.skipGitRepoCheck = argv.skipGitRepoCheck;\n if (argv.cd !== undefined) request.workingDirectory = argv.cd;\n if (argv.reviewMode !== undefined) request.reviewMode = argv.reviewMode;\n if (argv.reviewHint !== undefined) request.reviewHint = argv.reviewHint;\n\n const images = [\n ...(Array.isArray(request.images) ? request.images : []),\n ...(argv.image ?? []),\n ];\n request.images = images.length > 0 ? images : undefined;\n\n if (argv.schema) {\n request.outputSchema = await readJsonFile(argv.schema);\n }\n\n applyElevatedRunDefaults(request, cwd);\n return request;\n}\n\nasync function readJsonFile(filePath: string): Promise<unknown> {\n const absolute = path.resolve(process.cwd(), filePath);\n const data = await fsPromises.readFile(absolute, \"utf8\");\n try {\n return JSON.parse(data);\n } catch (error) {\n throw new Error(\n `Failed to parse JSON schema from ${absolute}: ${(error as Error).message ?? error}`,\n );\n }\n}\n\nasync function readPromptFromStdin(): Promise<string | null> {\n if (process.stdin.isTTY) {\n return null;\n }\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n if (chunks.length === 0) {\n return null;\n }\n return Buffer.concat(chunks).toString(\"utf8\").trimEnd();\n}\n\nfunction extractConversationId(eventPayload: unknown): string | null {\n if (!eventPayload || typeof eventPayload !== \"object\") {\n return null;\n }\n\n const record = eventPayload as Record<string, unknown>;\n\n if (typeof record.session_id === \"string\") {\n return record.session_id;\n }\n\n const sessionConfigured = record.SessionConfigured ?? record.sessionConfigured;\n if (sessionConfigured && typeof sessionConfigured === \"object\") {\n const configuredSessionId = (sessionConfigured as Record<string, unknown>).session_id;\n if (typeof configuredSessionId === \"string\") {\n return configuredSessionId;\n }\n }\n\n const nestedSession =\n typeof record.session === \"object\" && record.session\n ? (record.session as Record<string, unknown>).id\n : undefined;\n if (typeof nestedSession === \"string\") {\n return nestedSession;\n }\n\n return null;\n}\n\n\nasync function assertTrustedDirectory(workingDirectory?: string): Promise<void> {\n const directory = workingDirectory ? path.resolve(workingDirectory) : process.cwd();\n if (await findGitRoot(directory)) {\n return;\n }\n throw new Error(\n \"Not inside a trusted directory and --skip-git-repo-check was not specified.\",\n );\n}\n\nasync function findGitRoot(startDir: string): Promise<string | null> {\n let current = path.resolve(startDir);\n\n while (true) {\n const gitPath = path.join(current, \".git\");\n if (fs.existsSync(gitPath)) {\n try {\n const stats = await fsPromises.stat(gitPath);\n if (stats.isDirectory() || stats.isFile()) {\n return current;\n }\n } catch {\n // Ignore filesystem race conditions and keep searching upwards.\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return null;\n}\n\nclass AsyncQueue<T> implements AsyncIterable<T> {\n private readonly buffer: T[] = [];\n private waiters: Array<{ resolve: (value: IteratorResult<T>) => void; reject: (error: unknown) => void }> = [];\n private ended = false;\n private error: unknown;\n\n push(value: T | null) {\n if (this.ended) return;\n if (value === null) {\n return;\n }\n if (this.waiters.length > 0) {\n const waiter = this.waiters.shift()!;\n waiter.resolve({ value, done: false });\n return;\n }\n this.buffer.push(value);\n }\n\n end() {\n if (this.ended) return;\n this.ended = true;\n const waiters = this.waiters;\n this.waiters = [];\n for (const waiter of waiters) {\n waiter.resolve({ value: undefined as never, done: true });\n }\n }\n\n fail(error: unknown) {\n if (this.ended) return;\n this.error = error;\n this.ended = true;\n const waiters = this.waiters;\n this.waiters = [];\n for (const waiter of waiters) {\n waiter.reject(error);\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n if (this.buffer.length > 0) {\n const value = this.buffer.shift()!;\n return { value, done: false };\n }\n if (this.error) {\n return Promise.reject(this.error);\n }\n if (this.ended) {\n return { value: undefined as never, done: true };\n }\n return new Promise<IteratorResult<T>>((resolve, reject) => {\n this.waiters.push({ resolve, reject });\n });\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n }\n}\n","import type { ApprovalMode, SandboxMode } from \"../threadOptions\";\n\nconst SANDBOX_MODE_VALUES = [\"read-only\", \"workspace-write\", \"danger-full-access\"] as const;\nconst APPROVAL_MODE_VALUES = [\"never\", \"on-request\", \"on-failure\", \"untrusted\"] as const;\n\nfunction isSandboxMode(value: string): value is SandboxMode {\n return (SANDBOX_MODE_VALUES as readonly string[]).includes(value);\n}\n\nfunction isApprovalMode(value: string): value is ApprovalMode {\n return (APPROVAL_MODE_VALUES as readonly string[]).includes(value);\n}\n\nexport function parseSandboxModeFlag(\n value: string | undefined,\n origin: string,\n): SandboxMode | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (isSandboxMode(value)) {\n return value;\n }\n throw new Error(\n `Invalid sandbox mode \"${value}\" from ${origin}. Valid values: ${SANDBOX_MODE_VALUES.join(\n \", \",\n )}.`,\n );\n}\n\nexport function parseApprovalModeFlag(\n value: string | undefined,\n origin: string,\n): ApprovalMode | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (isApprovalMode(value)) {\n return value;\n }\n throw new Error(\n `Invalid approval mode \"${value}\" from ${origin}. Valid values: ${APPROVAL_MODE_VALUES.join(\n \", \",\n )}.`,\n );\n}\n\n","import type {\n BeforeStartHook,\n EventHook,\n HookContext,\n HookRegistration,\n} from \"./types\";\n\nexport function emitWarnings(warnings: string[], fromIndex = 0): void {\n for (let i = fromIndex; i < warnings.length; i += 1) {\n const message = warnings[i];\n process.stderr.write(`[codex-native] Warning: ${message}\\n`);\n }\n}\n\nexport async function runBeforeStartHooks(\n hooks: Array<HookRegistration<BeforeStartHook>>,\n context: HookContext,\n warnings: string[],\n): Promise<void> {\n for (const hook of hooks) {\n try {\n await hook.callback(context);\n } catch (error) {\n warnings.push(\n `beforeStart hook \"${hook.source}\" threw: ${(error as Error).message ?? String(error)}`,\n );\n }\n }\n}\n\nexport async function runEventHooks(\n hooks: Array<HookRegistration<EventHook>>,\n event: unknown,\n context: HookContext,\n warnings: string[],\n): Promise<void> {\n for (const hook of hooks) {\n try {\n await hook.callback(event, context);\n } catch (error) {\n warnings.push(`onEvent hook \"${hook.source}\" threw: ${(error as Error).message ?? String(error)}`);\n }\n }\n}\n\n","import path from \"node:path\";\n\nimport type { NativeRunRequest, NativeTuiRequest } from \"../nativeBinding\";\nimport type {\n ApprovalMode,\n SandboxMode,\n ThreadOptions,\n WorkspaceWriteOptions,\n} from \"../threadOptions\";\n\nconst FULL_ACCESS_SANDBOX: SandboxMode = \"workspace-write\";\nconst FULL_ACCESS_APPROVAL: ApprovalMode = \"never\";\n\ntype SandboxTarget = {\n sandboxMode?: SandboxMode;\n approvalMode?: ApprovalMode;\n};\n\nexport function applyElevatedRunDefaults(request: NativeRunRequest, cwd: string): void {\n const workingDirectory = resolveWorkingDirectory(request.workingDirectory, cwd);\n request.workingDirectory = workingDirectory;\n ensureSandboxModes(request);\n request.workspaceWriteOptions = ensureWorkspaceWriteOptions(\n request.workspaceWriteOptions,\n workingDirectory,\n );\n}\n\nexport function applyElevatedTuiDefaults(params: {\n request: NativeTuiRequest;\n thread: ThreadOptions;\n cwd: string;\n}): void {\n const { request, thread, cwd } = params;\n const workingDirectory = resolveWorkingDirectory(\n request.workingDirectory ?? thread.workingDirectory,\n cwd,\n );\n\n request.workingDirectory = workingDirectory;\n thread.workingDirectory = workingDirectory;\n\n ensureSandboxModes(request);\n thread.sandboxMode = request.sandboxMode ?? thread.sandboxMode ?? FULL_ACCESS_SANDBOX;\n thread.approvalMode = request.approvalMode ?? thread.approvalMode ?? FULL_ACCESS_APPROVAL;\n\n thread.workspaceWriteOptions = ensureWorkspaceWriteOptions(\n thread.workspaceWriteOptions,\n workingDirectory,\n );\n}\n\nfunction ensureSandboxModes(target: SandboxTarget): void {\n if (!target.sandboxMode) {\n target.sandboxMode = FULL_ACCESS_SANDBOX;\n }\n if (!target.approvalMode) {\n target.approvalMode = FULL_ACCESS_APPROVAL;\n }\n}\n\nfunction ensureWorkspaceWriteOptions(\n options: WorkspaceWriteOptions | undefined,\n workingDirectory: string,\n): WorkspaceWriteOptions {\n const resolved = path.resolve(workingDirectory);\n const writableRoots = new Set(options?.writableRoots ?? []);\n writableRoots.add(resolved);\n\n return {\n ...options,\n networkAccess: options?.networkAccess ?? true,\n writableRoots: Array.from(writableRoots),\n };\n}\n\nfunction resolveWorkingDirectory(candidate: string | undefined, cwd: string): string {\n if (!candidate || candidate.trim().length === 0) {\n return path.resolve(cwd);\n }\n return path.isAbsolute(candidate) ? candidate : path.resolve(cwd, candidate);\n}\n","import type { Thread } from \"../thread\";\nimport type { ThreadEvent } from \"../events\";\nimport type { NativeBinding } from \"../nativeBinding\";\nimport { attachLspDiagnostics } from \"../lsp\";\n\ntype EventListener = (event: ThreadEvent) => void;\n\nclass RunCommandThreadRelay implements Pick<Thread, \"onEvent\" | \"sendBackgroundEvent\"> {\n private readonly listeners = new Set<EventListener>();\n private threadId: string | null;\n\n constructor(private readonly binding: NativeBinding, initialThreadId?: string) {\n this.threadId = initialThreadId ?? null;\n }\n\n onEvent(listener: EventListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n async sendBackgroundEvent(message: string): Promise<void> {\n const trimmed = typeof message === \"string\" ? message.trim() : \"\";\n if (!trimmed) {\n throw new Error(\"Background event message must be a non-empty string\");\n }\n if (!this.threadId) {\n throw new Error(\"Cannot emit a background event before the thread has started\");\n }\n if (typeof this.binding.emitBackgroundEvent !== \"function\") {\n throw new Error(\"emitBackgroundEvent is not available in this build\");\n }\n await this.binding.emitBackgroundEvent({ threadId: this.threadId, message: trimmed });\n }\n\n handleEvent(event: ThreadEvent): void {\n if (event.type === \"thread.started\" && typeof event.thread_id === \"string\") {\n this.threadId = event.thread_id;\n }\n for (const listener of this.listeners) {\n try {\n listener(event);\n } catch (error) {\n console.warn(\"[codex-native] LSP listener failed\", error);\n }\n }\n }\n\n setThreadId(id: string | undefined): void {\n if (id) {\n this.threadId = id;\n }\n }\n}\n\nexport function createRunCommandLspBridge(params: {\n binding: NativeBinding;\n workingDirectory: string;\n initialThreadId?: string;\n}): {\n handleEvent: (event: ThreadEvent) => void;\n dispose: () => void;\n} | null {\n try {\n const relay = new RunCommandThreadRelay(params.binding, params.initialThreadId);\n const detach = attachLspDiagnostics(relay as unknown as Thread, {\n workingDirectory: params.workingDirectory,\n waitForDiagnostics: true,\n });\n relay.setThreadId(params.initialThreadId);\n return {\n handleEvent: (event: ThreadEvent) => relay.handleEvent(event),\n dispose: () => detach(),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[codex-native] Failed to initialize LSP diagnostics bridge: ${message}`);\n return null;\n }\n}\n","import process from \"node:process\";\n\nimport { Codex } from \"../codex\";\nimport type { ThreadOptions } from \"../threadOptions\";\nimport type { NativeTuiRequest } from \"../nativeBinding\";\nimport { emitWarnings, runBeforeStartHooks } from \"./hooks\";\nimport { parseApprovalModeFlag, parseSandboxModeFlag } from \"./optionParsers\";\nimport type { CliContext, CommandName, TuiCommandOptions } from \"./types\";\nimport { applyElevatedTuiDefaults } from \"./elevatedDefaults\";\n\nexport async function executeTuiCommand(\n argv: TuiCommandOptions,\n context: CliContext,\n): Promise<void> {\n if (!process.stdout.isTTY || !process.stdin.isTTY) {\n throw new Error(\"The interactive TUI requires an interactive terminal (TTY).\");\n }\n\n const { combinedConfig } = context;\n emitWarnings(combinedConfig.warnings);\n const warningCount = combinedConfig.warnings.length;\n\n const { request, thread: threadOptions } = buildTuiConfig({\n argv,\n defaults: combinedConfig.tuiDefaults,\n cwd: context.cwd,\n });\n\n applyElevatedTuiDefaults({ request, thread: threadOptions, cwd: context.cwd });\n\n const hookContext = {\n command: \"tui\" as CommandName,\n cwd: context.cwd,\n options: argv,\n };\n\n await runBeforeStartHooks(combinedConfig.beforeStartHooks, hookContext, combinedConfig.warnings);\n\n const codex = new Codex({\n baseUrl: request.baseUrl,\n apiKey: request.apiKey,\n preserveRegisteredTools: true,\n });\n const thread = codex.startThread(threadOptions);\n\n const exitInfo = await thread.tui(request);\n if (exitInfo.conversationId) {\n process.stdout.write(`\\nConversation ID: ${exitInfo.conversationId}\\n`);\n }\n if (exitInfo.updateAction) {\n process.stdout.write(\n `Update available (${exitInfo.updateAction.kind}): ${exitInfo.updateAction.command}\\n`,\n );\n }\n\n emitWarnings(combinedConfig.warnings, warningCount);\n}\n\nfunction buildTuiConfig(params: {\n argv: TuiCommandOptions;\n defaults: Partial<NativeTuiRequest>;\n cwd: string;\n}): { request: NativeTuiRequest; thread: ThreadOptions } {\n const { argv, defaults, cwd } = params;\n const request: NativeTuiRequest = {\n ...(defaults as NativeTuiRequest),\n };\n\n if (argv.prompt !== undefined) request.prompt = argv.prompt;\n if (argv.model !== undefined) request.model = argv.model;\n if (argv.oss !== undefined) request.oss = argv.oss;\n const sandboxMode = parseSandboxModeFlag(argv.sandbox, \"--sandbox\");\n if (sandboxMode !== undefined) {\n request.sandboxMode = sandboxMode;\n }\n\n const approvalMode = parseApprovalModeFlag(argv.approval, \"--approval\");\n if (approvalMode !== undefined) {\n request.approvalMode = approvalMode;\n }\n if (argv.resume !== undefined) request.resumeSessionId = argv.resume;\n if (argv.resumeLast !== undefined) request.resumeLast = argv.resumeLast;\n if (argv.resumePicker !== undefined) request.resumePicker = argv.resumePicker;\n if (argv.fullAuto !== undefined) request.fullAuto = argv.fullAuto;\n if (argv.dangerouslyBypassApprovalsAndSandbox !== undefined) {\n request.dangerouslyBypassApprovalsAndSandbox = argv.dangerouslyBypassApprovalsAndSandbox;\n }\n if (argv.cd !== undefined) request.workingDirectory = argv.cd;\n if (argv.configProfile !== undefined) request.configProfile = argv.configProfile;\n if (argv.webSearch !== undefined) request.webSearch = argv.webSearch;\n if (argv.linuxSandboxPath !== undefined) request.linuxSandboxPath = argv.linuxSandboxPath;\n if (argv.baseUrl !== undefined) request.baseUrl = argv.baseUrl;\n if (argv.apiKey !== undefined) request.apiKey = argv.apiKey;\n\n if (argv.configOverrides) {\n const defaultsOverrides = Array.isArray(request.configOverrides)\n ? [...request.configOverrides]\n : [];\n request.configOverrides = [...defaultsOverrides, ...argv.configOverrides];\n }\n\n if (argv.addDir) {\n const defaultsAddDir = Array.isArray(request.addDir) ? [...request.addDir] : [];\n request.addDir = [...defaultsAddDir, ...argv.addDir];\n }\n\n if (argv.image) {\n const defaultsImages = Array.isArray(request.images) ? [...request.images] : [];\n request.images = [...defaultsImages, ...argv.image];\n }\n\n const thread: ThreadOptions = {\n model: request.model,\n oss: request.oss,\n sandboxMode: request.sandboxMode,\n approvalMode: request.approvalMode,\n workingDirectory: request.workingDirectory ?? cwd,\n skipGitRepoCheck: false,\n };\n\n return { request, thread };\n}\n","import path from \"node:path\";\nimport os from \"node:os\";\nimport { parseArgs } from \"node:util\";\n\nimport { fastEmbedInit, reverieIndexSemantic, type ReverieSemanticSearchOptions } from \"../nativeBinding\";\n\nconst DEFAULT_MODEL = \"mixedbread-ai/mxbai-embed-large-v1\";\n\nconst INDEX_OPTION_DEFS = {\n \"codex-home\": { type: \"string\" } as const,\n \"project-root\": { type: \"string\" } as const,\n limit: { type: \"string\" } as const,\n \"max-candidates\": { type: \"string\" } as const,\n \"batch-size\": { type: \"string\" } as const,\n normalize: { type: \"boolean\" } as const,\n cache: { type: \"boolean\" } as const,\n \"embed-model\": { type: \"string\" } as const,\n \"embed-cache-dir\": { type: \"string\" } as const,\n \"embed-max-length\": { type: \"string\" } as const,\n \"no-progress\": { type: \"boolean\" } as const,\n \"skip-embed-init\": { type: \"boolean\" } as const,\n};\n\nexport async function executeReverieCommand(args: string[]): Promise<void> {\n const [first, ...rest] = args;\n const isFlag = first?.startsWith(\"-\");\n const command = !first || isFlag ? \"index\" : first;\n const tail = !first || isFlag ? args : rest;\n if (command !== \"index\") {\n throw new Error(`Unknown reverie command '${command}'. Supported subcommands: index`);\n }\n await runReverieIndex(tail);\n}\n\nasync function runReverieIndex(args: string[]): Promise<void> {\n const { values } = parseArgs({ args, options: INDEX_OPTION_DEFS, allowPositionals: false, strict: true });\n\n const codexHome = resolveCodexHome(values[\"codex-home\"]);\n const projectRoot = resolveProjectRoot(values[\"project-root\"]);\n const limit = parseOptionalInt(values.limit);\n const maxCandidates = parseOptionalInt(values[\"max-candidates\"]);\n const batchSize = parseOptionalInt(values[\"batch-size\"]);\n const embedMaxLength = parseOptionalInt(values[\"embed-max-length\"]);\n const normalize = typeof values.normalize === \"boolean\" ? values.normalize : undefined;\n const cache = typeof values.cache === \"boolean\" ? values.cache : undefined;\n const embedModel = typeof values[\"embed-model\"] === \"string\" ? values[\"embed-model\"] : DEFAULT_MODEL;\n const embedCacheDir = typeof values[\"embed-cache-dir\"] === \"string\" ? values[\"embed-cache-dir\"] : undefined;\n const showDownloadProgress = values[\"no-progress\"] ? false : true;\n const skipEmbedInit = values[\"skip-embed-init\"] === true;\n\n if (!skipEmbedInit) {\n await fastEmbedInit({\n model: embedModel,\n cacheDir: embedCacheDir ? path.resolve(embedCacheDir) : defaultCacheDir(),\n maxLength: embedMaxLength ?? undefined,\n showDownloadProgress,\n });\n }\n\n const options: ReverieSemanticSearchOptions = {\n limit,\n maxCandidates,\n projectRoot,\n batchSize,\n normalize,\n cache,\n };\n\n console.log(`📂 Codex home: ${codexHome}`);\n console.log(`📁 Project root: ${projectRoot}`);\n const stats = await reverieIndexSemantic(codexHome, options);\n console.log(\n `✅ Indexed ${stats.documentsEmbedded} conversation(s) across ${stats.batches} batch(es); cache warmed at ${projectRoot}`,\n );\n}\n\nfunction resolveCodexHome(explicit?: string): string {\n if (explicit) {\n return path.resolve(explicit);\n }\n if (process.env.CODEX_HOME) {\n return process.env.CODEX_HOME;\n }\n const home = os.homedir() || process.cwd();\n return path.join(home, \".codex\");\n}\n\nfunction resolveProjectRoot(explicit?: string): string {\n if (explicit) {\n return path.resolve(explicit);\n }\n return process.cwd();\n}\n\nfunction parseOptionalInt(value: unknown): number | undefined {\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (!Number.isNaN(parsed)) {\n return parsed;\n }\n }\n return undefined;\n}\n\nfunction defaultCacheDir(): string | undefined {\n if (process.env.CODEX_EMBED_CACHE) {\n return path.resolve(process.env.CODEX_EMBED_CACHE);\n }\n return path.join(os.tmpdir(), \"codex-embed-cache\");\n}\n","import { getNativeBinding } from \"../nativeBinding\";\nimport type {\n ApprovalHandler,\n ApprovalRegistration,\n CodexNativeConfig,\n CombinedConfig,\n HookConfig,\n HookRegistration,\n LoadedConfigFile,\n LoadedPlugin,\n PluginContext,\n ToolConfig,\n ToolInterceptorConfig,\n} from \"./types\";\n\nexport async function buildCombinedConfig(params: {\n cwd: string;\n config: LoadedConfigFile;\n}): Promise<CombinedConfig> {\n const { cwd, config } = params;\n const warnings = [...config.warnings];\n const combined: CombinedConfig = {\n runDefaults: {},\n tuiDefaults: {},\n tools: [],\n interceptors: [],\n approval: undefined,\n beforeStartHooks: [],\n onEventHooks: [],\n warnings,\n allowReservedInterceptors: false,\n };\n\n const pluginContext: PluginContext = { cwd, configPath: config.configPath };\n\n if (config.config) {\n accumulateConfig({\n combined,\n config: config.config,\n source: config.configPath ?? \"config\",\n warnings,\n });\n }\n\n for (const loaded of config.plugins) {\n const pluginConfig = await evaluatePlugin(loaded, pluginContext, warnings);\n if (pluginConfig) {\n accumulateConfig({\n combined,\n config: pluginConfig,\n source: loaded.spec,\n warnings,\n });\n }\n }\n\n combined.warnings = warnings;\n return combined;\n}\n\nexport function applyNativeRegistrations(combined: CombinedConfig): void {\n const binding = getNativeBinding();\n if (!binding) {\n throw new Error(\"Native binding is not available.\");\n }\n\n binding.clearRegisteredTools();\n\n // De‑dupe tools by name: first registration wins\n const seenTools = new Set<string>();\n for (const tool of combined.tools) {\n const { handler, ...info } = tool;\n const name = String((info as any).name);\n if (seenTools.has(name)) {\n combined.warnings.push(`Duplicate tool \"${name}\" ignored (first definition wins).`);\n continue;\n }\n seenTools.add(name);\n binding.registerTool(info as any, handler as any);\n }\n\n // Register approval callback first so its interceptors have priority\n if (combined.approval && typeof binding.registerApprovalCallback === \"function\") {\n binding.registerApprovalCallback(combined.approval.handler);\n }\n\n const RESERVED = new Set<string>([\"local_shell\", \"exec_command\", \"apply_patch\", \"web_search\"]);\n const seenInterceptors = new Set<string>();\n\n for (const interceptor of combined.interceptors) {\n const name = interceptor.toolName;\n if (RESERVED.has(name) && !combined.allowReservedInterceptors) {\n combined.warnings.push(\n `Interceptor for \"${name}\" ignored: reserved for approval gating. Use approvals() hook instead.`,\n );\n continue;\n }\n if (seenInterceptors.has(name)) {\n combined.warnings.push(\n `Multiple interceptors for \"${name}\" detected; only the first will be used.`,\n );\n continue;\n }\n seenInterceptors.add(name);\n binding.registerToolInterceptor(interceptor.toolName, interceptor.handler);\n }\n}\n\nasync function evaluatePlugin(\n loaded: LoadedPlugin,\n context: PluginContext,\n warnings: string[],\n): Promise<CodexNativeConfig | null> {\n const { plugin, spec } = loaded;\n\n try {\n if (typeof plugin === \"function\") {\n const result = await plugin(context);\n return coerceConfig(result, spec, warnings);\n }\n\n if (plugin && typeof plugin === \"object\") {\n const candidate = plugin as CodexNativeConfig & {\n setup?: (ctx: PluginContext) => unknown;\n config?: CodexNativeConfig | ((ctx: PluginContext) => unknown);\n };\n\n if (typeof candidate.setup === \"function\") {\n await candidate.setup(context);\n }\n\n if (typeof candidate.config === \"function\") {\n return coerceConfig(await candidate.config(context), spec, warnings);\n }\n\n if (candidate.config) {\n return coerceConfig(candidate.config, spec, warnings);\n }\n\n return coerceConfig(candidate, spec, warnings);\n }\n\n return coerceConfig(plugin, spec, warnings);\n } catch (error) {\n warnings.push(`Plugin \"${spec}\" threw an error: ${(error as Error).message}`);\n return null;\n }\n}\n\nfunction coerceConfig(\n value: unknown,\n source: string,\n warnings: string[],\n): CodexNativeConfig | null {\n if (!value) {\n return null;\n }\n\n if (typeof value === \"object\") {\n return value as CodexNativeConfig;\n }\n\n warnings.push(`Plugin \"${source}\" did not return a config object.`);\n return null;\n}\n\nfunction accumulateConfig(params: {\n combined: CombinedConfig;\n config: CodexNativeConfig;\n source: string;\n warnings: string[];\n}) {\n const { combined, config, source, warnings } = params;\n\n if (config.defaults?.run) {\n combined.runDefaults = { ...combined.runDefaults, ...config.defaults.run };\n }\n if (config.defaults?.tui) {\n combined.tuiDefaults = { ...combined.tuiDefaults, ...config.defaults.tui };\n }\n\n if (Array.isArray(config.tools)) {\n for (const tool of config.tools) {\n if (!tool || typeof tool !== \"object\" || typeof tool.handler !== \"function\") {\n warnings.push(`Invalid tool definition supplied by \"${source}\".`);\n continue;\n }\n combined.tools.push(tool);\n }\n }\n\n if (Array.isArray(config.interceptors)) {\n for (const interceptor of config.interceptors) {\n if (\n !interceptor ||\n typeof interceptor !== \"object\" ||\n typeof interceptor.toolName !== \"string\" ||\n typeof interceptor.handler !== \"function\"\n ) {\n warnings.push(`Invalid interceptor definition supplied by \"${source}\".`);\n continue;\n }\n combined.interceptors.push(interceptor);\n }\n }\n\n if (config.approvals) {\n if (typeof config.approvals !== \"function\") {\n warnings.push(`Approval callback from \"${source}\" must be a function.`);\n } else {\n if (combined.approval) {\n warnings.push(\n `Approval callback from \"${source}\" overrides handler from \"${combined.approval.source}\".`,\n );\n }\n combined.approval = { source, handler: config.approvals as ApprovalHandler };\n }\n }\n\n if (config.hooks) {\n addHooks(combined, config.hooks, source, warnings);\n }\n\n if (config.allowReservedInterceptors === true) {\n combined.allowReservedInterceptors = true;\n }\n}\n\nfunction addHooks(\n combined: CombinedConfig,\n hooks: HookConfig,\n source: string,\n warnings: string[],\n): void {\n if (hooks.beforeStart) {\n const beforeStartCallbacks = Array.isArray(hooks.beforeStart)\n ? hooks.beforeStart\n : [hooks.beforeStart];\n for (const callback of beforeStartCallbacks) {\n if (typeof callback !== \"function\") {\n warnings.push(`beforeStart hook from \"${source}\" must be a function.`);\n continue;\n }\n combined.beforeStartHooks.push({ source, callback });\n }\n }\n\n if (hooks.onEvent) {\n const eventCallbacks = Array.isArray(hooks.onEvent) ? hooks.onEvent : [hooks.onEvent];\n for (const callback of eventCallbacks) {\n if (typeof callback !== \"function\") {\n warnings.push(`onEvent hook from \"${source}\" must be a function.`);\n continue;\n }\n combined.onEventHooks.push({ source, callback });\n }\n }\n}\n\n"],"mappings":"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","names":["process","parseArgs","fs","fsPromises","path","process","path","process","path","fsPromises","fs","process","process","path","path","process","isInteractive","parseArgs"]}
|
package/dist/index.cjs
CHANGED
|
@@ -56,6 +56,7 @@ __export(src_exports, {
|
|
|
56
56
|
buildBranchContext: () => buildBranchContext,
|
|
57
57
|
buildFileContext: () => buildFileContext,
|
|
58
58
|
buildProjectContext: () => buildProjectContext,
|
|
59
|
+
clearCodexToolExecutors: () => clearCodexToolExecutors,
|
|
59
60
|
codexTool: () => codexTool,
|
|
60
61
|
collectRepoDiffSummary: () => collectRepoDiffSummary,
|
|
61
62
|
contextToQuery: () => contextToQuery,
|
|
@@ -76,6 +77,7 @@ __export(src_exports, {
|
|
|
76
77
|
formatDiagnosticsWithSummary: () => formatDiagnosticsWithSummary,
|
|
77
78
|
formatFileList: () => formatFileList,
|
|
78
79
|
formatStream: () => formatStream,
|
|
80
|
+
getCodexToolExecutor: () => getCodexToolExecutor,
|
|
79
81
|
gradeReverieRelevance: () => gradeReverieRelevance,
|
|
80
82
|
gradeReveriesInParallel: () => gradeReveriesInParallel,
|
|
81
83
|
isValidReverieExcerpt: () => isValidReverieExcerpt,
|
|
@@ -89,6 +91,7 @@ __export(src_exports, {
|
|
|
89
91
|
logReverieInsights: () => logReverieInsights,
|
|
90
92
|
logReverieSearch: () => logReverieSearch,
|
|
91
93
|
logger: () => logger,
|
|
94
|
+
registerCodexToolExecutor: () => registerCodexToolExecutor,
|
|
92
95
|
resolveWorkspaceRoot: () => resolveWorkspaceRoot,
|
|
93
96
|
reverieGetConversationInsights: () => reverieGetConversationInsights,
|
|
94
97
|
reverieIndexSemantic: () => reverieIndexSemantic,
|
|
@@ -2375,6 +2378,9 @@ function registerCodexToolExecutor(name, executor) {
|
|
|
2375
2378
|
function getCodexToolExecutor(name) {
|
|
2376
2379
|
return executors.get(name);
|
|
2377
2380
|
}
|
|
2381
|
+
function clearCodexToolExecutors() {
|
|
2382
|
+
executors.clear();
|
|
2383
|
+
}
|
|
2378
2384
|
|
|
2379
2385
|
// src/agents/CodexProvider.ts
|
|
2380
2386
|
var fs6 = __toESM(require("fs"));
|
|
@@ -2627,6 +2633,9 @@ var CodexModel = class {
|
|
|
2627
2633
|
* but the framework integration is not yet complete.
|
|
2628
2634
|
*/
|
|
2629
2635
|
async executeToolViaFramework(invocation) {
|
|
2636
|
+
console.log("[DEBUG executeToolViaFramework] invocation:", JSON.stringify(invocation, null, 2));
|
|
2637
|
+
console.log("[DEBUG executeToolViaFramework] invocation type:", typeof invocation);
|
|
2638
|
+
console.log("[DEBUG executeToolViaFramework] invocation keys:", invocation ? Object.keys(invocation) : "null/undefined");
|
|
2630
2639
|
if (!invocation) {
|
|
2631
2640
|
console.warn("Codex requested a tool execution without invocation data.");
|
|
2632
2641
|
return {
|
|
@@ -4974,6 +4983,7 @@ function sse(events) {
|
|
|
4974
4983
|
buildBranchContext,
|
|
4975
4984
|
buildFileContext,
|
|
4976
4985
|
buildProjectContext,
|
|
4986
|
+
clearCodexToolExecutors,
|
|
4977
4987
|
codexTool,
|
|
4978
4988
|
collectRepoDiffSummary,
|
|
4979
4989
|
contextToQuery,
|
|
@@ -4994,6 +5004,7 @@ function sse(events) {
|
|
|
4994
5004
|
formatDiagnosticsWithSummary,
|
|
4995
5005
|
formatFileList,
|
|
4996
5006
|
formatStream,
|
|
5007
|
+
getCodexToolExecutor,
|
|
4997
5008
|
gradeReverieRelevance,
|
|
4998
5009
|
gradeReveriesInParallel,
|
|
4999
5010
|
isValidReverieExcerpt,
|
|
@@ -5007,6 +5018,7 @@ function sse(events) {
|
|
|
5007
5018
|
logReverieInsights,
|
|
5008
5019
|
logReverieSearch,
|
|
5009
5020
|
logger,
|
|
5021
|
+
registerCodexToolExecutor,
|
|
5010
5022
|
resolveWorkspaceRoot,
|
|
5011
5023
|
reverieGetConversationInsights,
|
|
5012
5024
|
reverieIndexSemantic,
|