xworkmate-app/docs/architecture/public-api/ffi-and-rust.md
2026-06-06 12:00:13 +08:00

7.5 KiB
Raw Permalink Blame History

FFI And Rust

Purpose

rust/ 目录已退役,下面这份文档仅作为历史记录保留。它描述的是曾经存在的 Codex FFI 草图实现,不代表当前可用能力。

历史上这里的重点是:

  • Rust 公开结构体与状态模型
  • C ABI 函数签名
  • Dart / Flutter 侧应该如何理解这些函数的参数与返回值
  • 当前实现仍然是 stub 的地方在哪里

Crate Layout

File Responsibility
rust/src/lib.rs 对外 pub use#[no_mangle] extern "C" 导出
rust/src/runtime.rs Rust-native runtime/config/state
rust/src/types.rs FFI-safe message/result/event/account/model 结构
rust/src/error.rs CodexError 错误类型

CodexConfig

  • Source: rust/src/runtime.rs
  • Type: struct
  • Responsibility: C ABI 输入配置,描述 Codex 二进制、工作目录、sandbox/approval policy、model、gateway 和 debug。

Fields

Field Type Meaning
codex_path *const c_char Codex 可执行文件路径
working_directory *const c_char 工作目录
sandbox_mode i32 0=read-only, 1=workspace-write, 2=danger-full-access
approval_policy i32 0=suggest, 1=auto-edit, 2=full-auto
model *const c_char 模型标识
api_key *const c_char gateway API key
gateway_url *const c_char gateway URL
debug bool debug logging 开关

Returns

API Returns Meaning
Default::default() CodexConfig 默认 FFI config
to_rust(&self) Result<CodexConfigRust, CodexError> 转成 Rust-native 配置

CodexConfigRust

  • Source: rust/src/runtime.rs
  • Type: struct
  • Responsibility: Rust-native 配置对象,所有指针型字符串都已经转成 Option<String>

ThreadHandle

  • Source: rust/src/runtime.rs
  • Type: struct
  • Responsibility: 作为 C ABI 的 thread opaque handle。

Fields and Returns

API Returns Meaning
id u64 线程句柄 ID
new(id) ThreadHandle 构造有效句柄
null() ThreadHandle 零值句柄
is_null() bool 判空

RuntimeState

  • Source: rust/src/runtime.rs
  • Type: enum
  • Responsibility: Rust runtime 的内部状态机:Disconnected / Connecting / Connected / Ready / Error

CodexRuntime

  • Source: rust/src/runtime.rs
  • Type: struct
  • Responsibility: Rust 侧管理 Codex 进程与错误状态的核心对象。

Fields

Field Type Meaning
config CodexConfigRust Rust-native 配置
state RuntimeState 当前状态
last_error CString 最近错误信息

Key Returns

API Returns Meaning
new(config: CodexConfig) CodexRuntime 由 FFI config 构造
with_config(config: CodexConfigRust) CodexRuntime 由 Rust-native config 构造
state(&self) RuntimeState 当前状态
set_error(&mut self, message: &str) () 更新错误并切 Error
find_codex_binary(&self) Option<PathBuf> 查找 codex 二进制
start(&mut self) Result<(), CodexError> 启动 runtime
stop(&mut self) Result<(), CodexError> 停止 runtime

Notes

  • 当前 start/stop 仍然是 stub 型实现,尚未真正管理外部进程生命周期

CodexResult

  • Source: rust/src/types.rs
  • Type: struct
  • Responsibility: 最通用的 FFI-safe 成败返回值。

Fields

Field Type Meaning
success bool 是否成功
error_code i32 错误码
error_message *const c_char 错误消息指针

Returns

API Returns Meaning
ok() CodexResult 成功结果
err(code, message) CodexResult 失败结果

CodexMessage

  • Source: rust/src/types.rs
  • Type: struct
  • Responsibility: FFI-safe 消息载体。

Fields

Field Type Meaning
message_type *const c_char text/code/tool_call 等类型
content *const c_char 消息文本
thread_id *const c_char thread ID
turn_id *const c_char turn ID

CodexEvent

  • Source: rust/src/types.rs
  • Type: struct
  • Responsibility: FFI-safe 事件载体。

Fields

Field Type Meaning
event_type *const c_char started/delta/completed/error
thread_id *const c_char thread ID
turn_id *const c_char turn ID
data *const c_char JSON 负载
timestamp i64 Unix millis

CodexError

  • Source: rust/src/error.rs
  • Type: enum
  • Responsibility: Rust 侧统一错误表示,供 runtime 和 FFI 转换使用。

Exported FFI Functions

下面这些函数曾定义在 rust/src/lib.rs,是 Flutter / Dart 侧的 C ABI 面。

codex_init

  • Type: FFI function
  • Signature role: 初始化入口,必须先于其它 FFI 调用。

Parameters and Returns

Parameters Returns Meaning
none i32 0 表示成功

codex_runtime_create

  • Type: FFI function
  • Responsibility: 创建 CodexRuntime 并返回原始指针。

Parameters and Returns

Parameters Returns Meaning
config: *const CodexConfig *mut CodexRuntime 成功返回 runtime 指针,空指针表示失败

Notes

  • 调用方负责后续 codex_runtime_destroy

codex_runtime_destroy

  • Type: FFI function
  • Responsibility: 释放由 codex_runtime_create 返回的 runtime 指针。

Parameters and Returns

Parameters Returns Meaning
runtime: *mut CodexRuntime void 空指针时 no-op

codex_start_thread

  • Type: FFI function
  • Responsibility: 以 cwd 启动 thread目前返回 stub ThreadHandle::new(0)

Parameters and Returns

Parameters Returns Meaning
runtime: *mut CodexRuntime, cwd: *const c_char ThreadHandle cwd 为空时返回 null handle

codex_send_message

  • Type: FFI function
  • Responsibility: 向指定 thread 发送消息,目前仍是 stub。

Parameters and Returns

Parameters Returns Meaning
runtime, thread, message i32 0 成功,-1 表示参数非法

codex_poll_events

  • Type: FFI function
  • Responsibility: 从 runtime 读取事件数组,目前仍返回 0

Parameters and Returns

Parameters Returns Meaning
runtime, events, max_events usize 实际写入事件数量

codex_shutdown

  • Type: FFI function
  • Responsibility: 优雅关闭 runtime目前仍是 stub。

Parameters and Returns

Parameters Returns Meaning
runtime: *mut CodexRuntime i32 0 成功,空指针返回 -1

codex_last_error

  • Type: FFI function
  • Responsibility: 返回最近错误的 C 字符串指针。

Parameters and Returns

Parameters Returns Meaning
runtime: *mut CodexRuntime *const c_char 指向静态有效到下次 FFI 调用前的错误文本

Dart Integration Notes

  • Dart 侧对应阅读顺序:
    1. lib/runtime/codex_runtime.dart
    2. lib/runtime/codex_config_bridge.dart
    3. rust/src/lib.rs
    4. rust/src/runtime.rs
    5. rust/src/types.rs
  • 当前 FFI 面仅停留在结构体/函数签名骨架消息收发、event polling、thread lifecycle 都未完成