xworkmate-app/docs/reports/codex-ffi-status-report.md
Haitao Pan 9e797eab40 docs: add comprehensive planning for unimplemented features
- Add roadmap for 4 phases of feature implementation
- Phase 1: AI Gateway enhancements (P0, 1-2 weeks)
- Phase 2: OpenClaw task scheduling (P1, 2-3 weeks)
- Phase 3: OpenClaw long-term memory (P1, 2-3 weeks)
- Phase 4: Codex FFI Rust embedded mode (P2, 4-6 weeks)
- Include task breakdown, acceptance criteria, and success metrics
- Add dependencies, milestones, and resource requirements
- Document risks and mitigation strategies
2026-03-14 10:32:19 +08:00

6.2 KiB
Raw Blame History

Codex Agent FFI 集成状态报告

测试执行时间

2026-03-14 10:20

FFI 库状态

文件路径: /Applications/XWorkmate.app/Contents/Frameworks/libcodex_ffi.dylib 大小: 302 KB (ARM64) 架构: Mach-O 64-bit dynamically linked shared library arm64

FFI 函数可用性测试

可用的 FFI 函数(已导出)

函数名 状态 说明
codex_init() 可用 初始化库,返回 0 表示成功
codex_runtime_create() 可用 创建运行时实例,返回有效指针
codex_runtime_destroy() 可用 销毁运行时实例,清理内存
codex_start_thread() 可用 启动线程,返回 ThreadHandle (id=0 表示空句柄)
codex_send_message() 可用 发送消息,返回 0 表示成功
codex_poll_events() 可用 轮询事件,返回 0 (未实现)
codex_shutdown() 可用 关闭运行时,返回 0 表示成功
codex_last_error() 可用 获取最后错误信息

核心功能实现状态

根据 Rust 源码分析 (rust/src/lib.rsrust/src/runtime.rs)

功能 实现状态 代码位置
Codex CLI 进程启动 未实现 runtime.rs:235 - // TODO: Start process
异步消息发送 未实现 lib.rs:87 - // TODO: Implement async message sending
事件轮询机制 未实现 lib.rs:108 - // TODO: Implement event polling
响应流处理 未实现 无相关代码
进程停止管理 未实现 runtime.rs:247 - // TODO: Stop process
Codex 二进制查找 已实现 runtime.rs:202-221

对话功能测试结果

测试尝试

尝试通过 FFI 发送消息并轮询响应:

// 1. 创建运行时 ✅
runtime = codex_runtime_create(config);
// 结果: 成功,返回有效指针

// 2. 启动线程 ✅
thread = codex_start_thread(runtime, cwd);
// 结果: 返回 ThreadHandle但 id=0 (空句柄)

// 3. 发送消息 ✅
result = codex_send_message(runtime, thread, message);
// 结果: 返回 0 (成功),但消息实际上未发送

// 4. 轮询响应 ❌
events = codex_poll_events(runtime, buffer, bufferSize);
// 结果: 返回 0 (无事件)
// 原因: 未实现事件队列和处理逻辑

结论

无法进行真正的 Codex agent 对话

原因:

  1. Codex CLI 进程从未启动
  2. FFI 函数只是桩代码stubs返回预定义值
  3. 没有实际的消息处理和响应机制
  4. 事件轮询返回 0因为没有事件队列

执行功能测试结果

虽拟执行测试

尝试通过 FFI 执行类似 "创建文件" 的操作:

// 发送执行指令
codex_send_message(runtime, thread, "Create a file named test.txt");
// 结果: 返回 0 (成功),但:
// 1. Codex 进程未启动,无法接收指令
// 2. 没有执行管道和输出捕获
// 3. 没有文件系统操作的实际代码

结论

无法执行任何 Codex agent 操作

原因:

  • 没有进程管理代码
  • 没有 stdio 管道建立
  • 没有输出流处理
  • 没有文件系统操作接口

当前架构评估

已完成的部分

  1. FFI 接口定义 - 所有必要的函数签名已定义
  2. 内存管理 - Box 智能指针正确用于 FFI 边界
  3. 类型安全 - Rust Struct 和 Dart FFI 类型对应正确
  4. 编译构建 - dylib 成功编译并可加载
  5. 基础测试 - 简单的 FFI 调用可以成功执行

缺失的关键部分

  1. 进程管理 - 无子进程启动、监控、停止机制
  2. IPC 通信 - 无消息队列、事件通知机制
  3. 异步处理 - Rust 端无异步代码Dart 端无回调接口
  4. Codex 集成 - 无实际调用 Codex CLI 的代码
  5. 错误处理 - 所有错误都被忽略,返回固定值

离线模式实际工作原理

由于 Codex FFI 未完全实现,当前应用在"离线模式"下:

实际使用的是

  • Stdio 桥接模式 - 通过 CodexRuntime Dart 类直接调用外部 Codex CLI
  • 外部 CLI 模式 - 启动独立的 codex 可执行文件进程,通过 stdin/stdout 通信

不是使用

  • 内置 FFI Rust 库 (libcodex_ffi.dylib)
  • 内存内的 Codex 实现
  • Rust 嵌入式 Codex

完整对话和执行的实现路径

要使 libcodex_ffi.dylib 能够进行真正的对话和执行,需要:

1. Rust 端实现

// 需要实现的核心组件:
- ProcessManager: 启动/停止 Codex CLI 进程
- MessageQueue: 异步消息队列
- EventStream: 事件流输出 (响应、日志、错误)
- StdioHandler: stdin/stdout/stderr 处理
- TaskScheduler: 任务执行调度

2. FFI 接口扩展

// 新增需要的函数:
- codex_execute_command() - 执行 shell 命令
- codex_read_file() - 读取文件内容
- codex_write_file() - 写入文件
- codex_list_directory() - 列出目录
- codex_get_response() - 获取 AI 响应流

3. Dart 端实现

// 需要实现:
- StreamController: 处理响应流
- CallbackHandler: Rust 回调转 Dart
- ErrorHandler: 错误传播
- TimeoutManager: 超时管理

建议

短期(当前可行)

继续使用外部 CLI 模式

  • 通过 CodexRuntime.dart 直接启动 codex 可执行文件
  • 使用 Stdio 进行通信
  • 不依赖 FFI Rust 库

中期(需要开发)

实现基本 FFI 功能:

  1. 进程管理(启动/停止 Codex
  2. 基础消息传递
  3. 简单响应接收

长期(完整功能)

完整 Rust FFI 实现:

  1. 嵌入式 Codex无需外部 CLI
  2. 异步事件流
  3. 文件系统操作
  4. 任务执行和监控

总结

测试项 结果 说明
FFI 库加载 通过 dylib 可正常加载
FFI 函数调用 通过 所有函数可调用
对话功能 失败 未实现Codex 进程未启动
执行功能 失败 未实现,无 IPC 机制
响应接收 失败 未实现,无事件流

当前状态: libcodex_ffi.dylib 提供了 FFI 接口的骨架,但缺乏实现对话和执行所需的核心逻辑

实际可用方案: 应用当前通过外部 Codex CLIStdio 模式)在离线模式下运行,不依赖 Rust FFI 库。