Codex CLI integration for workgraph
///|
pub async fn run_codex_graph() -> String raise {
let entry = @core.NodeId::NodeId("codex")
let agent = @codex.codex_agent(
@coding.CodingAgentId::CodingAgentId("codex-cli"),
@codex.CodexAgentOptions::CodexAgentOptions(),
)
let node = @coding.coding_agent_node(
entry,
@core.NodeMetadata::NodeMetadata(
name="Codex",
description=None,
kind=@core.CodingAgent,
tags=[],
),
@coding.CodingAgentNodeSpec::CodingAgentNodeSpec(
agent~,
resource_key=@core.ResourceKey::ResourceKey("codex-session"),
resource_scope=@core.Run,
open_context=fn(context, _state) {
@coding.CodingAgentOpenContext::CodingAgentOpenContext(
run_id=context.run_id,
task_group=context.task_group,
workspace=@coding.WorkspaceRef::WorkspaceRef(@path.Path("."), []),
approval=@coding.Never,
network=@coding.Disabled,
environment=@immut_hashmap.new(),
events=context.events,
)
},
build_prompt=fn(_context, state : String) { @cli.Prompt::Prompt(state) },
select_continuation=fn(_context, _state) { None },
decode_response=fn(_state, response, _continuation) {
@core.NodeOutput::NodeOutput(Some(response.text), None)
},
),
)
let definition = @core.GraphDefinition::GraphDefinition(
@core.Reducer::Reducer(fn(_state : String, patch : String) { patch }),
)
definition.add_node(node)
definition.set_router(
entry,
@core.router([], fn(_state, _completion) { @core.End }),
)
definition.set_entry(entry)
let result = @core.GraphRuntime::GraphRuntime(definition.compile()).invoke(
"Reply with WORKGRAPH_CODEX_OK only. Do not modify files or use tools.",
)
result.final_state
}pub struct CodexAgentOptions {
codex_path_override : Path?
base_url : String?
api_key : String?
config : Map[String, Json]?
resume_thread_id : String?
model : String?
sandbox : SandboxMode?
skip_git : Bool?
reasoning : ModelReasoningEffort?
web_search : WebSearchMode?
}fn CodexAgentOptions::CodexAgentOptions(codex_path_override? : Path, base_url? : String, api_key? : String, config? : Map[String, Json], resume_thread_id? : String, model? : String, sandbox? : SandboxMode, skip_git? : Bool, reasoning? : ModelReasoningEffort, web_search? : WebSearchMode) -> CodexAgentOptions