MoonBit SDK for running OpenCode through its CLI
///|
async fn example {
let opencode = @opencode_sdk.OpenCode::OpenCode()
let thread = opencode.start_thread(
options=@opencode_sdk.ThreadOptions::ThreadOptions(
model="opencode-go/deepseek-v4-flash",
),
)
let turn = thread.run(
@opencode_sdk.Input::Prompt("Explain this repository in one paragraph."),
)
println(turn.final_response)
}import {
"totto2727/opencode-sdk@0.1.1",
}import {
"totto2727/opencode-sdk" @opencode_sdk,
}///|
async fn stream_example {
let thread = @opencode_sdk.OpenCode::OpenCode().start_thread()
thread.run_streamed(
@opencode_sdk.Input::Prompt("Summarize the current changes."),
async fn(event) {
match event {
@opencode_sdk.Text(text) => println(text.text)
_ => ()
}
@async.pause()
},
)
}type RunStreamedResult = Unittype StreamedTurn = Unitpub struct OpenCode {
// private fields
}pub(all) enum OpenCodeConfigValue {
ConfigString(String)
ConfigInt(Int)
ConfigDouble(Double)
ConfigBool(Bool)
ConfigArray(Array[OpenCodeConfigValue])
ConfigObject(Map[String, OpenCodeConfigValue])
} derive(Eq, Debug)pub(all) struct OpenCodeOptions {
opencode_path_override : Path?
config : Map[String, OpenCodeConfigValue]?
env : Map[String, String]?
} derive(Eq)fn OpenCodeOptions::OpenCodeOptions(opencode_path_override? : Path, config? : Map[String, OpenCodeConfigValue], env? : Map[String, String]) -> OpenCodeOptionspub struct Thread {
// private fields
}async fn Thread::run_streamed(self : Thread, input : Input, on_event : async (ThreadEvent) -> Unit) -> Unitpub(all) enum ThreadEvent {
Text(TextEvent)
Reasoning(ReasoningEvent)
ToolUse(ToolUseEvent)
StepStart(StepStartEvent)
StepFinish(StepFinishEvent)
StreamError(ThreadErrorEvent)
} derive(Eq, Debug)fn ThreadOptions::ThreadOptions(model? : String, agent? : String, working_directory? : Path, variant? : String, title? : String, thinking? : Bool) -> ThreadOptionspub(all) struct ToolUseEvent {
session_id : String
call_id : String
tool : String
status : ToolUseStatus
} derive(Eq, Debug)#alias(RunResult)
pub(all) struct Turn {
events : ReadOnlyArray[ThreadEvent]
final_response : String
} derive(Eq, Debug)