MoonBit SDK for embedding the Codex agent in workflows and applications
import {
"totto2727/codex-sdk" @codex_sdk,
}async fn main {
let codex = @codex_sdk.Codex::Codex()
let thread = codex.start_thread()
let turn = thread.run(
@codex_sdk.Input::Prompt("Diagnose the test failure and propose a fix"),
)
println(turn.final_response)
}thread.run_streamed(
@codex_sdk.Input::Prompt("Diagnose the test failure"),
async event => {
match event {
ItemCompleted(completed) => println("\{completed.item}")
TurnCompleted(completed) => println("\{completed.usage}")
_ => ()
}
},
)let schema = Json::object({
"type": "object",
"properties": {
"summary": Json::object({ "type": "string" }),
},
"required": ["summary"],
"additionalProperties": false,
})
let turn = thread.run(
Prompt("Summarize repository status"),
turn_options=@codex_sdk.TurnOptions::TurnOptions(output_schema=schema),
)| Upstream TypeScript | MoonBit |
|---|---|
| codex.ts | codex.mbt |
| codexOptions.ts | codex_options.mbt |
| events.ts | events.mbt |
| exec.ts | exec.mbt |
| index.ts | index.mbt |
| items.ts | items.mbt |
| outputSchemaFile.ts | output_schema_file.mbt |
| thread.ts | thread.mbt |
| threadOptions.ts | thread_options.mbt |
| turnOptions.ts | turn_options.mbt |
moon test --target native mbt/package/codex-sdk/srctype RunStreamedResult = Unittype StreamedTurn = Unitpub struct Codex {
// private fields
}pub(all) enum CodexConfigValue {
ConfigString(String)
ConfigInt(Int)
ConfigDouble(Double)
ConfigBool(Bool)
ConfigArray(Array[CodexConfigValue])
ConfigObject(Map[String, CodexConfigValue])
} derive(Eq, Debug)type CodexExecpub(all) struct CodexOptions {
codex_path_override : Path?
base_url : String?
api_key : String?
config : Map[String, CodexConfigValue]?
env : Map[String, String]?
} derive(Eq)fn CodexOptions::CodexOptions(codex_path_override? : Path, base_url? : String, api_key? : String, config? : Map[String, CodexConfigValue], env? : Map[String, String]) -> CodexOptionspub(all) struct CommandExecutionItem {
id : String
command : String
aggregated_output : String
exit_code : Int?
status : CommandExecutionStatus
} derive(Eq, Debug)pub(all) struct FileChangeItem {
id : String
changes : ReadOnlyArray[FileUpdateChange]
status : PatchApplyStatus
} derive(Eq)pub(all) struct McpToolCallItem {
id : String
server : String
tool : String
arguments : Json
result : McpToolCallResult?
error : McpToolCallError?
status : McpToolCallStatus
} derive(Eq, Debug)pub struct Thread {
// private fields
}async fn Thread::run_streamed(self : Thread, input : Input, on_event : async (ThreadEvent) -> Unit, turn_options? : TurnOptions) -> Unitpub(all) enum ThreadEvent {
ThreadStarted(ThreadStartedEvent)
TurnStarted(TurnStartedEvent)
TurnCompleted(TurnCompletedEvent)
TurnFailed(TurnFailedEvent)
ItemStarted(ItemStartedEvent)
ItemUpdated(ItemUpdatedEvent)
ItemCompleted(ItemCompletedEvent)
StreamError(ThreadErrorEvent)
} derive(Eq)pub(all) enum ThreadItem {
AgentMessage(AgentMessageItem)
Reasoning(ReasoningItem)
CommandExecution(CommandExecutionItem)
FileChange(FileChangeItem)
McpToolCall(McpToolCallItem)
WebSearch(WebSearchItem)
TodoList(TodoListItem)
Error(ErrorItem)
} derive(Eq)pub(all) 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]) -> ThreadOptions#alias(RunResult)
pub(all) struct Turn {
items : ReadOnlyArray[ThreadItem]
final_response : String
usage : Usage?
} derive(Eq)Install
Download zipMoonBit SDK for embedding the Codex agent in workflows and applications