@codex-native/sdk 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/outputSchemaFile.ts","../src/thread.ts","../src/nativeBinding.ts","../src/exec.ts","../src/codex.ts","../src/index.ts","../src/agents/CodexProvider.ts"],"sourcesContent":["import { promises as fs } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport type OutputSchemaFile = {\n schemaPath?: string;\n cleanup: () => Promise<void>;\n};\n\nexport async function createOutputSchemaFile(schema: unknown): Promise<OutputSchemaFile> {\n if (schema === undefined) {\n return { cleanup: async () => {} };\n }\n\n if (!isJsonObject(schema)) {\n throw new Error(\"outputSchema must be a plain JSON object\");\n }\n\n const schemaDir = await fs.mkdtemp(path.join(os.tmpdir(), \"codex-output-schema-\"));\n const schemaPath = path.join(schemaDir, \"schema.json\");\n const cleanup = async () => {\n try {\n await fs.rm(schemaDir, { recursive: true, force: true });\n } catch {\n // suppress\n }\n };\n\n try {\n await fs.writeFile(schemaPath, JSON.stringify(schema), \"utf8\");\n return { schemaPath, cleanup };\n } catch (error) {\n await cleanup();\n throw error;\n }\n}\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { CodexOptions } from \"./codexOptions\";\nimport { ThreadEvent, ThreadError, Usage } from \"./events\";\nimport { CodexExec } from \"./exec\";\nimport { ThreadItem } from \"./items\";\nimport { ThreadOptions } from \"./threadOptions\";\nimport { TurnOptions } from \"./turnOptions\";\nimport { createOutputSchemaFile } from \"./outputSchemaFile\";\n\n/** Completed turn. */\nexport type Turn = {\n items: ThreadItem[];\n finalResponse: string;\n usage: Usage | null;\n};\n\n/** Alias for `Turn` to describe the result of `run()`. */\nexport type RunResult = Turn;\n\n/** The result of the `runStreamed` method. */\nexport type StreamedTurn = {\n events: AsyncGenerator<ThreadEvent>;\n};\n\n/** Alias for `StreamedTurn` to describe the result of `runStreamed()`. */\nexport type RunStreamedResult = StreamedTurn;\n\n/** An input to send to the agent. */\nexport type UserInput =\n | {\n type: \"text\";\n text: string;\n }\n | {\n type: \"local_image\";\n path: string;\n };\n\nexport type Input = string | UserInput[];\n\n/** Respesent a thread of conversation with the agent. One thread can have multiple consecutive turns. */\nexport class Thread {\n private _exec: CodexExec;\n private _options: CodexOptions;\n private _id: string | null;\n private _threadOptions: ThreadOptions;\n\n /** Returns the ID of the thread. Populated after the first turn starts. */\n public get id(): string | null {\n return this._id;\n }\n\n /* @internal */\n constructor(\n exec: CodexExec,\n options: CodexOptions,\n threadOptions: ThreadOptions,\n id: string | null = null,\n ) {\n this._exec = exec;\n this._options = options;\n this._id = id;\n this._threadOptions = threadOptions;\n }\n\n /** Provides the input to the agent and streams events as they are produced during the turn. */\n async runStreamed(input: Input, turnOptions: TurnOptions = {}): Promise<StreamedTurn> {\n return { events: this.runStreamedInternal(input, turnOptions) };\n }\n\n private async *runStreamedInternal(\n input: Input,\n turnOptions: TurnOptions = {},\n ): AsyncGenerator<ThreadEvent> {\n const { schemaPath, cleanup } = await createOutputSchemaFile(turnOptions.outputSchema);\n const options = this._threadOptions;\n const { prompt, images } = normalizeInput(input);\n const generator = this._exec.run({\n input: prompt,\n baseUrl: this._options.baseUrl,\n apiKey: this._options.apiKey,\n threadId: this._id,\n images,\n model: options?.model,\n sandboxMode: options?.sandboxMode,\n workingDirectory: options?.workingDirectory,\n skipGitRepoCheck: options?.skipGitRepoCheck,\n outputSchemaFile: schemaPath,\n outputSchema: turnOptions.outputSchema,\n });\n try {\n for await (const item of generator) {\n let parsed: ThreadEvent;\n try {\n parsed = JSON.parse(item) as ThreadEvent;\n } catch (error) {\n throw new Error(`Failed to parse item: ${item}`, { cause: error });\n }\n if (parsed.type === \"thread.started\") {\n this._id = parsed.thread_id;\n }\n yield parsed;\n }\n } finally {\n await cleanup();\n }\n }\n\n /** Provides the input to the agent and returns the completed turn. */\n async run(input: Input, turnOptions: TurnOptions = {}): Promise<Turn> {\n const generator = this.runStreamedInternal(input, turnOptions);\n const items: ThreadItem[] = [];\n let finalResponse: string = \"\";\n let usage: Usage | null = null;\n let turnFailure: ThreadError | null = null;\n for await (const event of generator) {\n if (event.type === \"item.completed\") {\n if (event.item.type === \"agent_message\") {\n finalResponse = event.item.text;\n }\n items.push(event.item);\n } else if (event.type === \"turn.completed\") {\n usage = event.usage;\n } else if (event.type === \"turn.failed\") {\n turnFailure = event.error;\n break;\n }\n }\n if (turnFailure) {\n throw new Error(turnFailure.message);\n }\n return { items, finalResponse, usage };\n }\n}\n\nfunction normalizeInput(input: Input): { prompt: string; images: string[] } {\n if (typeof input === \"string\") {\n return { prompt: input, images: [] };\n }\n const promptParts: string[] = [];\n const images: string[] = [];\n for (const item of input) {\n if (item.type === \"text\") {\n promptParts.push(item.text);\n } else if (item.type === \"local_image\") {\n images.push(item.path);\n }\n }\n return { prompt: promptParts.join(\"\\n\\n\"), images };\n}\n","import { createRequire } from \"node:module\";\n\nimport type { SandboxMode } from \"./threadOptions\";\n\nexport type NativeRunRequest = {\n prompt: string;\n threadId?: string;\n images?: string[];\n model?: string;\n sandboxMode?: SandboxMode;\n workingDirectory?: string;\n skipGitRepoCheck?: boolean;\n outputSchema?: unknown;\n baseUrl?: string;\n apiKey?: string;\n linuxSandboxPath?: string;\n};\n\nexport type NativeBinding = {\n runThread(request: NativeRunRequest): Promise<string[]>;\n runThreadStream(\n request: NativeRunRequest,\n onEvent: (err: unknown, eventJson?: string) => void,\n ): Promise<void>;\n clearRegisteredTools(): void;\n registerTool(info: NativeToolInfo, handler: (call: NativeToolInvocation) => Promise<NativeToolResult> | NativeToolResult): void;\n};\n\nexport type NativeToolInfo = {\n name: string;\n description?: string;\n parameters?: unknown;\n strict?: boolean;\n supportsParallel?: boolean;\n};\n\nexport type NativeToolInvocation = {\n toolName: string;\n callId: string;\n arguments?: string;\n input?: string;\n};\n\nexport type NativeToolResult = {\n output?: string;\n success?: boolean;\n error?: string;\n};\n\nlet cachedBinding: NativeBinding | null | undefined;\n\nexport function getNativeBinding(): NativeBinding | null {\n if (cachedBinding !== undefined) {\n return cachedBinding;\n }\n\n const require = createRequire(import.meta.url);\n\n // For sdk/native: load the NAPI binding from the package root\n // The index.js is auto-generated by napi-rs and loads the .node file\n try {\n const binding: NativeBinding = require(\"../index.js\");\n cachedBinding = binding;\n return cachedBinding;\n } catch (error) {\n console.warn(\"Failed to load native NAPI binding:\", error);\n cachedBinding = null;\n return cachedBinding;\n }\n}\n","import { SandboxMode } from \"./threadOptions\";\nimport { NativeBinding, NativeRunRequest, getNativeBinding } from \"./nativeBinding\";\n\nexport type CodexExecArgs = {\n input: string;\n baseUrl?: string;\n apiKey?: string;\n threadId?: string | null;\n images?: string[];\n model?: string;\n sandboxMode?: SandboxMode;\n workingDirectory?: string;\n skipGitRepoCheck?: boolean;\n outputSchemaFile?: string;\n outputSchema?: unknown;\n};\n\n/**\n * CodexExec for the native package - uses NAPI bindings exclusively.\n * No CLI fallback.\n */\nexport class CodexExec {\n private readonly native: NativeBinding;\n\n constructor() {\n const nativeBinding = getNativeBinding();\n if (!nativeBinding) {\n throw new Error(\n \"Native NAPI binding not available. Make sure @openai/codex-native is properly installed and built.\"\n );\n }\n this.native = nativeBinding;\n }\n\n async *run(args: CodexExecArgs): AsyncGenerator<string> {\n const binding = this.native;\n const queue = new AsyncQueue<string>();\n\n const request: NativeRunRequest = {\n prompt: args.input,\n threadId: args.threadId ?? undefined,\n images: args.images && args.images.length > 0 ? args.images : undefined,\n model: args.model,\n sandboxMode: args.sandboxMode,\n workingDirectory: args.workingDirectory,\n skipGitRepoCheck: args.skipGitRepoCheck,\n outputSchema: args.outputSchema,\n baseUrl: args.baseUrl,\n apiKey: args.apiKey,\n };\n\n let runPromise: Promise<void>;\n try {\n runPromise = binding\n .runThreadStream(request, (err, eventJson) => {\n if (err) {\n queue.fail(err);\n return;\n }\n try {\n queue.push(eventJson ?? \"null\");\n } catch (error) {\n queue.fail(error);\n }\n })\n .then(\n () => {\n queue.end();\n },\n (error) => {\n queue.fail(error);\n },\n );\n } catch (error) {\n queue.fail(error);\n throw error;\n }\n\n let loopError: unknown;\n try {\n for await (const value of queue) {\n yield value;\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 }\n }\n}\n\ntype Resolver<T> = {\n resolve: (result: IteratorResult<T>) => void;\n reject: (error: unknown) => void;\n};\n\nclass AsyncQueue<T> implements AsyncIterable<T> {\n private readonly buffer: T[] = [];\n private waiters: Resolver<T>[] = [];\n private ended = false;\n private error: unknown;\n\n push(value: T) {\n if (this.ended) return;\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\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 { CodexOptions, NativeToolDefinition } from \"./codexOptions\";\nimport { CodexExec } from \"./exec\";\nimport { NativeBinding, getNativeBinding } from \"./nativeBinding\";\nimport { Thread } from \"./thread\";\nimport { ThreadOptions } from \"./threadOptions\";\n\n/**\n * Codex is the main class for interacting with the Codex agent.\n *\n * This is the native NAPI-based implementation that uses Rust bindings directly.\n *\n * Use the `startThread()` method to start a new thread or `resumeThread()` to resume a previously started thread.\n */\nexport class Codex {\n private exec: CodexExec;\n private options: CodexOptions;\n private readonly nativeBinding: NativeBinding | null;\n\n constructor(options: CodexOptions = {}) {\n const predefinedTools = options.tools ? [...options.tools] : [];\n this.nativeBinding = getNativeBinding();\n this.options = { ...options, tools: [] };\n if (this.nativeBinding) {\n // clearRegisteredTools may not be available in all builds\n if (typeof this.nativeBinding.clearRegisteredTools === 'function') {\n this.nativeBinding.clearRegisteredTools();\n }\n for (const tool of predefinedTools) {\n this.registerTool(tool);\n }\n }\n this.exec = new CodexExec();\n }\n\n registerTool(tool: NativeToolDefinition): void {\n if (!this.nativeBinding) {\n throw new Error(\"Native tool registration requires the NAPI binding\");\n }\n // registerTool may not be available in all builds\n if (typeof this.nativeBinding.registerTool !== 'function') {\n console.warn(\"registerTool is not available in this build - tools feature may be incomplete\");\n return;\n }\n const { handler, ...info } = tool;\n this.nativeBinding.registerTool(info, handler);\n if (!this.options.tools) {\n this.options.tools = [];\n }\n this.options.tools.push(tool);\n }\n\n /**\n * Starts a new conversation with an agent.\n * @returns A new thread instance.\n */\n startThread(options: ThreadOptions = {}): Thread {\n return new Thread(this.exec, this.options, options);\n }\n\n /**\n * Resumes a conversation with an agent based on the thread id.\n * Threads are persisted in ~/.codex/sessions.\n *\n * @param id The id of the thread to resume.\n * @returns A new thread instance.\n */\n resumeThread(id: string, options: ThreadOptions = {}): Thread {\n return new Thread(this.exec, this.options, options, id);\n }\n}\n","export type {\n ThreadEvent,\n ThreadStartedEvent,\n TurnStartedEvent,\n TurnCompletedEvent,\n TurnFailedEvent,\n ItemStartedEvent,\n ItemUpdatedEvent,\n ItemCompletedEvent,\n ThreadError,\n ThreadErrorEvent,\n Usage,\n} from \"./events\";\nexport type {\n ThreadItem,\n AgentMessageItem,\n ReasoningItem,\n CommandExecutionItem,\n FileChangeItem,\n McpToolCallItem,\n WebSearchItem,\n TodoListItem,\n ErrorItem,\n} from \"./items\";\n\nexport { Thread } from \"./thread\";\nexport type { RunResult, RunStreamedResult, Input, UserInput } from \"./thread\";\n\nexport { Codex } from \"./codex\";\n\nexport type { CodexOptions, NativeToolDefinition } from \"./codexOptions\";\nexport type { NativeToolInvocation, NativeToolResult } from \"./nativeBinding\";\n\nexport type { ThreadOptions, ApprovalMode, SandboxMode } from \"./threadOptions\";\nexport type { TurnOptions } from \"./turnOptions\";\n\n// OpenAI Agents framework integration\nexport { CodexProvider } from \"./agents\";\nexport type { CodexProviderOptions } from \"./agents\";\n","import type { Codex } from \"../codex\";\nimport type { Thread } from \"../thread\";\nimport type { ThreadEvent, Usage as CodexUsage } from \"../events\";\nimport type { ThreadItem } from \"../items\";\nimport type { Input, UserInput } from \"../thread\";\nimport type { CodexOptions } from \"../codexOptions\";\nimport type { ThreadOptions } from \"../threadOptions\";\nimport type {\n ModelProvider,\n Model,\n ModelRequest,\n ModelResponse,\n StreamEvent,\n AgentInputItem,\n AgentOutputItem,\n Usage,\n AssistantMessageItem,\n OutputText,\n} from \"./types\";\n\n/**\n * Options for creating a CodexProvider\n */\nexport interface CodexProviderOptions extends CodexOptions {\n /**\n * Default model to use when none is specified\n */\n defaultModel?: string;\n\n /**\n * Working directory for Codex operations\n * @default process.cwd()\n */\n workingDirectory?: string;\n\n /**\n * Skip git repository check\n * @default false\n */\n skipGitRepoCheck?: boolean;\n}\n\n/**\n * Provider implementation that uses Codex as the backend for OpenAI Agents\n *\n * @example\n * ```typescript\n * import { CodexProvider } from '@openai/codex-native/agents';\n * import { Agent, Runner } from '@openai/agents';\n *\n * const provider = new CodexProvider({\n * apiKey: process.env.CODEX_API_KEY,\n * defaultModel: 'claude-sonnet-4.5'\n * });\n *\n * const agent = new Agent({\n * name: 'CodeAssistant',\n * instructions: 'You are a helpful coding assistant'\n * });\n *\n * const runner = new Runner({ modelProvider: provider });\n * const result = await runner.run(agent, 'Fix the failing tests');\n * ```\n */\nexport class CodexProvider implements ModelProvider {\n private codex: Codex | null = null;\n private options: CodexProviderOptions;\n\n constructor(options: CodexProviderOptions = {}) {\n this.options = {\n workingDirectory: options.workingDirectory || process.cwd(),\n skipGitRepoCheck: options.skipGitRepoCheck ?? false,\n ...options,\n };\n }\n\n /**\n * Lazy initialization of Codex instance\n */\n private getCodex(): Codex {\n if (!this.codex) {\n // Dynamic import to avoid circular dependencies\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Codex: CodexClass } = require(\"../codex\");\n this.codex = new CodexClass({\n apiKey: this.options.apiKey,\n baseUrl: this.options.baseUrl,\n }) as Codex;\n }\n return this.codex;\n }\n\n getModel(modelName?: string): Model {\n const model = modelName || this.options.defaultModel;\n return new CodexModel(this.getCodex(), model, this.options);\n }\n}\n\n/**\n * Model implementation that wraps a Codex Thread\n */\nclass CodexModel implements Model {\n private codex: Codex;\n private modelName?: string;\n private thread: Thread | null = null;\n private options: CodexProviderOptions;\n\n constructor(codex: Codex, modelName: string | undefined, options: CodexProviderOptions) {\n this.codex = codex;\n this.modelName = modelName;\n this.options = options;\n }\n\n /**\n * Get or create the thread for this model instance\n */\n private getThread(conversationId?: string): Thread {\n if (conversationId && !this.thread) {\n // Resume existing thread\n this.thread = this.codex.resumeThread(conversationId, this.getThreadOptions());\n } else if (!this.thread) {\n // Create new thread\n this.thread = this.codex.startThread(this.getThreadOptions());\n }\n return this.thread;\n }\n\n private getThreadOptions(): ThreadOptions {\n return {\n model: this.modelName,\n workingDirectory: this.options.workingDirectory,\n skipGitRepoCheck: this.options.skipGitRepoCheck,\n };\n }\n\n async getResponse(request: ModelRequest): Promise<ModelResponse> {\n const thread = this.getThread(request.conversationId || request.previousResponseId);\n const input = this.convertRequestToInput(request);\n\n // Run Codex (it handles tools internally)\n const turn = await thread.run(input, {\n outputSchema: request.outputType?.schema,\n });\n\n // Convert Codex response to ModelResponse format\n return {\n usage: this.convertUsage(turn.usage),\n output: this.convertItemsToOutput(turn.items, turn.finalResponse),\n responseId: thread.id || undefined,\n };\n }\n\n async *getStreamedResponse(request: ModelRequest): AsyncIterable<StreamEvent> {\n const thread = this.getThread(request.conversationId || request.previousResponseId);\n const input = this.convertRequestToInput(request);\n\n const { events } = await thread.runStreamed(input, {\n outputSchema: request.outputType?.schema,\n });\n\n let accumulatedText = \"\";\n\n for await (const event of events) {\n const streamEvents = this.convertCodexEventToStreamEvent(event, accumulatedText);\n\n // Update accumulated text for text deltas\n if (event.type === \"item.completed\" && event.item.type === \"agent_message\") {\n accumulatedText = event.item.text;\n }\n\n for (const streamEvent of streamEvents) {\n yield streamEvent;\n }\n }\n }\n\n /**\n * Convert ModelRequest to Codex Input format\n */\n private convertRequestToInput(request: ModelRequest): Input {\n const parts: UserInput[] = [];\n\n // Add system instructions as a text preamble if provided\n if (request.systemInstructions) {\n parts.push({\n type: \"text\",\n text: `<system>\\n${request.systemInstructions}\\n</system>\\n\\n`,\n });\n }\n\n // Convert input\n if (typeof request.input === \"string\") {\n parts.push({ type: \"text\", text: request.input });\n } else {\n // Convert AgentInputItem[] to UserInput[]\n for (const item of request.input) {\n if (item.type === \"input_text\") {\n parts.push({ type: \"text\", text: item.text });\n } else if (item.type === \"input_image\") {\n // Handle image input\n if (typeof item.image === \"string\") {\n // Base64 or URL - we need to save to temp file for Codex\n // For now, skip images (TODO: implement temp file handling)\n continue;\n } else if (\"url\" in item.image) {\n // URL images - skip for now\n continue;\n } else if (\"fileId\" in item.image) {\n // File ID - skip for now\n continue;\n }\n }\n // Other input types (audio, files) are not yet supported\n }\n }\n\n // If only one text part, return as string\n if (parts.length === 1 && parts[0]!.type === \"text\") {\n return parts[0]!.text;\n }\n\n return parts;\n }\n\n /**\n * Convert Codex Usage to ModelResponse Usage\n */\n private convertUsage(usage: CodexUsage | null): Usage {\n if (!usage) {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n };\n }\n\n const inputTokensDetails = usage.cached_input_tokens\n ? [{ cachedTokens: usage.cached_input_tokens }]\n : undefined;\n\n return {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n totalTokens: usage.input_tokens + usage.output_tokens,\n inputTokensDetails,\n };\n }\n\n /**\n * Convert Codex ThreadItems to AgentOutputItems\n */\n private convertItemsToOutput(items: ThreadItem[], finalResponse: string): AgentOutputItem[] {\n const output: AgentOutputItem[] = [];\n\n for (const item of items) {\n switch (item.type) {\n case \"agent_message\": {\n const content: OutputText[] = [\n {\n type: \"output_text\",\n text: item.text,\n },\n ];\n\n output.push({\n type: \"message\",\n role: \"assistant\",\n status: \"completed\",\n content,\n } as any); // Using 'any' because our type definition has 'assistant_message' but the framework expects 'message'\n break;\n }\n\n case \"reasoning\": {\n output.push({\n type: \"reasoning\",\n reasoning: item.text,\n });\n break;\n }\n\n // Codex handles tools internally, so we don't expose them as function calls\n // The results are already incorporated into the agent_message\n case \"command_execution\":\n case \"file_change\":\n case \"mcp_tool_call\":\n // Skip - these are internal to Codex\n break;\n\n default:\n // Unknown item type - skip\n break;\n }\n }\n\n // If no items were converted, add the final response as a message\n if (output.length === 0 && finalResponse) {\n output.push({\n type: \"message\",\n role: \"assistant\",\n status: \"completed\",\n content: [\n {\n type: \"output_text\",\n text: finalResponse,\n },\n ],\n } as any);\n }\n\n return output;\n }\n\n /**\n * Convert Codex ThreadEvent to OpenAI Agents StreamEvent\n */\n private convertCodexEventToStreamEvent(\n event: ThreadEvent,\n previousText: string\n ): StreamEvent[] {\n const events: StreamEvent[] = [];\n\n switch (event.type) {\n case \"thread.started\":\n events.push({ type: \"response_started\" });\n break;\n\n case \"turn.started\":\n // No equivalent in StreamEvent - skip\n break;\n\n case \"item.started\":\n // Could emit output_text_delta if we had partial text\n break;\n\n case \"item.completed\":\n if (event.item.type === \"agent_message\") {\n // Emit text done event\n events.push({\n type: \"output_text_done\",\n text: event.item.text,\n });\n } else if (event.item.type === \"reasoning\") {\n events.push({\n type: \"reasoning_done\",\n reasoning: event.item.text,\n });\n }\n break;\n\n case \"turn.completed\":\n // Emit response done with full response\n events.push({\n type: \"response_done\",\n response: {\n usage: this.convertUsage(event.usage),\n output: [], // Items were already emitted\n responseId: this.thread?.id || undefined,\n },\n });\n break;\n\n case \"turn.failed\":\n events.push({\n type: \"error\",\n error: {\n message: event.error.message,\n },\n });\n break;\n\n default:\n // Unknown event type - skip\n break;\n }\n\n return events;\n }\n}\n"],"mappings":"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","names":["require"]}
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-darwin-arm64`
2
+
3
+ This is the **aarch64-apple-darwin** binary for `@openai/codex-native`
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@codex-native/darwin-arm64",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "arm64"
6
+ ],
7
+ "main": "codex_native.darwin-arm64.node",
8
+ "files": [
9
+ "codex_native.darwin-arm64.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "darwin"
20
+ ]
21
+ }
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-darwin-x64`
2
+
3
+ This is the **x86_64-apple-darwin** binary for `@openai/codex-native`
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@codex-native/darwin-x64",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "x64"
6
+ ],
7
+ "main": "codex_native.darwin-x64.node",
8
+ "files": [
9
+ "codex_native.darwin-x64.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "darwin"
20
+ ]
21
+ }
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-linux-arm64-gnu`
2
+
3
+ This is the **aarch64-unknown-linux-gnu** binary for `@openai/codex-native`
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@codex-native/linux-arm64-gnu",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "arm64"
6
+ ],
7
+ "main": "codex_native.linux-arm64-gnu.node",
8
+ "files": [
9
+ "codex_native.linux-arm64-gnu.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "linux"
20
+ ],
21
+ "libc": [
22
+ "glibc"
23
+ ]
24
+ }
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-linux-arm64-musl`
2
+
3
+ This is the **aarch64-unknown-linux-musl** binary for `@openai/codex-native`
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@codex-native/linux-arm64-musl",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "arm64"
6
+ ],
7
+ "main": "codex_native.linux-arm64-musl.node",
8
+ "files": [
9
+ "codex_native.linux-arm64-musl.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "linux"
20
+ ],
21
+ "libc": [
22
+ "musl"
23
+ ]
24
+ }
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-linux-x64-gnu`
2
+
3
+ This is the **x86_64-unknown-linux-gnu** binary for `@openai/codex-native`
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@codex-native/linux-x64-gnu",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "x64"
6
+ ],
7
+ "main": "codex_native.linux-x64-gnu.node",
8
+ "files": [
9
+ "codex_native.linux-x64-gnu.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "linux"
20
+ ],
21
+ "libc": [
22
+ "glibc"
23
+ ]
24
+ }
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-linux-x64-musl`
2
+
3
+ This is the **x86_64-unknown-linux-musl** binary for `@openai/codex-native`
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@codex-native/linux-x64-musl",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "x64"
6
+ ],
7
+ "main": "codex_native.linux-x64-musl.node",
8
+ "files": [
9
+ "codex_native.linux-x64-musl.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "linux"
20
+ ],
21
+ "libc": [
22
+ "musl"
23
+ ]
24
+ }
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-win32-arm64-msvc`
2
+
3
+ This is the **aarch64-pc-windows-msvc** binary for `@openai/codex-native`
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@codex-native/win32-arm64-msvc",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "arm64"
6
+ ],
7
+ "main": "codex_native.win32-arm64-msvc.node",
8
+ "files": [
9
+ "codex_native.win32-arm64-msvc.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "win32"
20
+ ]
21
+ }
@@ -0,0 +1,3 @@
1
+ # `@openai/codex-native-win32-x64-msvc`
2
+
3
+ This is the **x86_64-pc-windows-msvc** binary for `@openai/codex-native`
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@codex-native/win32-x64-msvc",
3
+ "version": "0.0.1",
4
+ "cpu": [
5
+ "x64"
6
+ ],
7
+ "main": "codex_native.win32-x64-msvc.node",
8
+ "files": [
9
+ "codex_native.win32-x64-msvc.node"
10
+ ],
11
+ "description": "Native bindings that bridge Codex CLI into the JavaScript SDK.",
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "os": [
19
+ "win32"
20
+ ]
21
+ }
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@codex-native/sdk",
3
+ "version": "0.0.1",
4
+ "description": "Native NAPI-based Codex SDK - complete standalone implementation.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "npm",
11
+ "*.node"
12
+ ],
13
+ "scripts": {
14
+ "build": "npm run build:napi && npm run build:ts",
15
+ "build:napi": "napi build --platform --release",
16
+ "build:napi:debug": "napi build --platform",
17
+ "build:ts": "tsup",
18
+ "create-npm-dirs": "napi create-npm-dirs",
19
+ "artifacts": "napi artifacts",
20
+ "prepublishOnly": "napi prepublish -t npm",
21
+ "pretest": "npm run build:ts",
22
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest",
23
+ "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
24
+ "coverage": "NODE_OPTIONS=--experimental-vm-modules jest --coverage",
25
+ "version": "napi version",
26
+ "release:patch": "npm version patch && npm run release",
27
+ "release:minor": "npm version minor && npm run release",
28
+ "release:major": "npm version major && npm run release",
29
+ "release": "npm run build && npm run test && npm publish",
30
+ "release:dry": "npm run build && npm run test && npm publish --dry-run"
31
+ },
32
+ "napi": {
33
+ "binaryName": "codex_native",
34
+ "targets": [
35
+ "aarch64-apple-darwin",
36
+ "x86_64-apple-darwin",
37
+ "aarch64-unknown-linux-gnu",
38
+ "x86_64-unknown-linux-gnu",
39
+ "aarch64-unknown-linux-musl",
40
+ "x86_64-unknown-linux-musl",
41
+ "aarch64-pc-windows-msvc",
42
+ "x86_64-pc-windows-msvc"
43
+ ]
44
+ },
45
+ "optionalDependencies": {
46
+ "@codex-native/sdk-darwin-arm64": "0.0.1",
47
+ "@codex-native/sdk-darwin-x64": "0.0.1",
48
+ "@codex-native/sdk-linux-arm64-gnu": "0.0.1",
49
+ "@codex-native/sdk-linux-x64-gnu": "0.0.1",
50
+ "@codex-native/sdk-linux-arm64-musl": "0.0.1",
51
+ "@codex-native/sdk-linux-x64-musl": "0.0.1",
52
+ "@codex-native/sdk-win32-arm64-msvc": "0.0.1",
53
+ "@codex-native/sdk-win32-x64-msvc": "0.0.1"
54
+ },
55
+ "engines": {
56
+ "node": ">=18"
57
+ },
58
+ "publishConfig": {
59
+ "access": "public"
60
+ },
61
+ "devDependencies": {
62
+ "@jest/globals": "^29.7.0",
63
+ "@napi-rs/cli": "^3.4.1",
64
+ "@openai/agents": "^0.2.1",
65
+ "@types/node": "^22.0.0",
66
+ "jest": "^29.7.0",
67
+ "tsup": "^8.5.0",
68
+ "typescript": "^5.7.2"
69
+ }
70
+ }