Provider-neutral MoonBit interfaces for agent CLI SDKs
Dependencies
| Package | Responsibility |
|---|---|
| totto2727/agent-sdk/cli | Common text/context prompt, session identifier, opaque continuation, final response, changed-file list, and cancellable session contract |
| totto2727/agent-sdk/cli/codex | Codex adapter configured with native ClientOptions, ThreadOptions, and TurnOptions |
| totto2727/agent-sdk/cli/opencode | OpenCode adapter configured with native ClientOptions and ThreadOptions |
flowchart LR
Core[agent-core-sdk/cli] --> CodexSDK[codex-sdk/cli]
Core --> OpenCodeSDK[opencode-sdk/cli]
CodexSDK --> CodexAdapter[agent-sdk/cli/codex]
OpenCodeSDK --> OpenCodeAdapter[agent-sdk/cli/opencode]
Common[agent-sdk/cli] --> CodexAdapter
Common --> OpenCodeAdapter
CodexAdapter --> Consumer[CLI consumer]
OpenCodeAdapter --> Consumerflowchart TD
Configure[Choose provider-native options] --> Adapter[Create Codex or OpenCode adapter]
Adapter --> Choice{New or continued session?}
Choice -->|New| Start[Cli.start]
Choice -->|Continuation| Continue[Cli.continue_session]
Start --> Prompt[CliSession.prompt]
Continue --> Prompt
Prompt --> Provider[Provider SDK Thread.run]
Provider --> Result[FinalResponse text plus opaque continuation]
Prompt -. task cancellation .-> Cancel[Provider cleanup then cancellation propagation]///|
async fn run(cli : @cli.Cli, prompt : String) -> @cli.FinalResponse {
cli.start().prompt(@cli.Prompt::Prompt(prompt))
}///|
let codex = @codex_adapter.codex_cli(
options=@codex.ClientOptions::ClientOptions(),
thread_options=@codex.ThreadOptions::ThreadOptions(),
turn_options=@codex.TurnOptions::TurnOptions(),
resume_thread_id?=None,
)
///|
let opencode = @opencode_adapter.opencode_cli(
options=@opencode.ClientOptions::ClientOptions(),
thread_options=@opencode.ThreadOptions::ThreadOptions(),
resume_thread_id?=None,
)moon update
moon info
moon check
moon test
moon build
moon package --listProvider-neutral MoonBit interfaces for agent CLI SDKs
Dependencies