type RunStreamedResult = Unittype StreamedTurn = Unitpub struct Client {
// private fields
}fn ClientOptions::ClientOptions(executable_path_override? : Path, base_url? : String, api_key? : String, config? : Map[String, Json], env? : Map[String, String]) -> ClientOptionspub struct CommandExecutionItem {
id : String
command : String
aggregated_output : String
exit_code : Int?
status : CommandExecutionStatus
} derive(Eq, Debug)impl FromJson for CommandExecutionItemimpl ToJson for CommandExecutionStatusimpl FromJson for CommandExecutionStatustype Execpub struct FileChangeItem {
id : String
changes : ReadOnlyArray[FileUpdateChange]
status : PatchApplyStatus
} derive(Eq)impl FromJson for FileChangeItemimpl ToJson for FileUpdateChangeimpl FromJson for FileUpdateChangepub struct McpToolCallItem {
id : String
server : String
tool : String
arguments : Json
result : McpToolCallResult?
error : McpToolCallError?
status : McpToolCallStatus
} derive(Eq, Debug)impl FromJson for McpToolCallItemimpl ToJson for McpToolCallResultimpl FromJson for McpToolCallResultimpl ToJson for McpToolCallStatusimpl FromJson for McpToolCallStatusimpl ToJson for PatchApplyStatusimpl FromJson for PatchApplyStatusimpl ToJson for PatchChangeKindimpl FromJson for PatchChangeKindpub struct Thread {
// private fields
}async fn Thread::run_streamed(self : Thread, input : Input, on_event : async (ThreadEvent) -> Unit, turn_options? : TurnOptions) -> Unitasync test "run_streamed has task-owned cancellation" {
let streamed = async fn(thread : Thread) {
thread.run_streamed(Input::Prompt("Cancel this turn"), async fn(_) {
@async.pause()
})
}
ignore(streamed)
}pub enum ThreadEvent {
ThreadStarted(ThreadStartedEvent)
TurnStarted(TurnStartedEvent)
TurnCompleted(TurnCompletedEvent)
TurnFailed(TurnFailedEvent)
ItemStarted(ItemStartedEvent)
ItemUpdated(ItemUpdatedEvent)
ItemCompleted(ItemCompletedEvent)
StreamError(ThreadErrorEvent)
} derive(Eq)impl FromJson for ThreadEventpub enum ThreadItem {
AgentMessage(AgentMessageItem)
Reasoning(ReasoningItem)
CommandExecution(CommandExecutionItem)
FileChange(FileChangeItem)
McpToolCall(McpToolCallItem)
WebSearch(WebSearchItem)
TodoList(TodoListItem)
Error(ErrorItem)
} derive(Eq)impl FromJson for ThreadItempub struct ThreadOptions {
model : String?
sandbox_mode : SandboxMode?
working_directory : Path?
skip_git_repo_check : Bool?
model_reasoning_effort : ModelReasoningEffort?
network_access_enabled : Bool?
web_search_mode : WebSearchMode?
web_search_enabled : Bool?
approval_policy : ApprovalMode?
additional_directories : Array[Path]
} derive(Eq)fn ThreadOptions::ThreadOptions(model? : String, sandbox_mode? : SandboxMode, working_directory? : Path, skip_git_repo_check? : Bool, model_reasoning_effort? : ModelReasoningEffort, network_access_enabled? : Bool, web_search_mode? : WebSearchMode, web_search_enabled? : Bool, approval_policy? : ApprovalMode, additional_directories? : Array[Path]) -> ThreadOptionstest "ThreadOptions configures a thread" {
let options = ThreadOptions::ThreadOptions(
model="gpt-5.6",
sandbox_mode=ReadOnly,
approval_policy=Never,
)
match options.model {
Some(model) => assert_eq(model, "gpt-5.6")
None => fail("model is required for this example")
}
}impl FromJson for TodoListItem#alias(RunResult)
pub struct Turn {
items : ReadOnlyArray[ThreadItem]
final_response : String
usage : Usage?
} derive(Eq)test "TurnOptions accepts an output schema" {
let schema = @json.parse("{\"type\":\"object\"}")
let options = TurnOptions::TurnOptions(output_schema=schema)
assert_true(options.output_schema is Some(_))
}Install
Download zipMoonBit SDK for embedding the Codex agent in workflows and applications