English | 简体中文
跨平台 AI Agent 框架,基于 Rust 构建 — 模块化、类型安全、领域可插拔、可评测、多 Agent 原生。
交互式 TUI(oneai-cli)在 Plan 模式下执行复杂任务 —— 思考气泡、计划清单面板、工具调用展示,以及 accept/reject 审批弹窗。
OneAI 兼容任何 OpenAI 兼容端点(OpenAI、Anthropic、Gemini、Ollama,以及阿里百炼/DashScope、DeepSeek、vLLM 等自建网关)。通过环境变量或配置文件设置凭据——环境变量优先级更高。
# OpenAI 兼容端点 —— 适用于 OpenAI / DashScope / DeepSeek 等
export ONEAI_API_KEY="sk-..."
export ONEAI_BASE_URL="https://api.openai.com/v1" # 或你的网关地址
export ONEAI_MODEL="gpt-4o" # 或 qwen-plus、deepseek-chat ...
# Ollama(本地,无需 key)
export ONEAI_BASE_URL="http://localhost:11434"
export ONEAI_MODEL="llama3"…或写入 ~/.oneai/config.toml:
[provider]
api_key = "sk-..."
base_url = "https://api.openai.com/v1"
model = "gpt-4o"
[domain]
default_pack = "coding" # coding | research | general
[ui]
theme = "dark"用 oneai config create 生成默认配置,oneai config show 查看。
cargo run -p oneai-cli-demo
# 或执行 cargo install --path examples/cli 后直接:oneai进入交互式 Agent。输入任务即可看到完整管线实时运行:流式思考气泡、工具调用、计划清单、用量/Token 统计、轨迹日志。
交互模式 —— 用 Shift+Tab 循环切换:
| 模式 | 行为 |
|---|---|
Normal |
默认 —— 高风险工具暂停等待审批 |
⚡ Auto |
全部自动批准(快速迭代) |
📋 Plan |
禁用工具执行 —— Agent 必须先给出计划;你在 accept/reject 弹窗中审阅后才开始执行 |
按键:
| 按键 | 动作 |
|---|---|
Enter |
发送 · Ctrl+Enter 换行 |
Shift+Tab |
循环模式(Normal → Auto → Plan) |
Tab |
切换侧边栏 |
↑↓ / Ctrl+↑↓ / PgUp / PgDn |
历史与聊天滚动 |
| 鼠标拖拽 | 选中文本复制 · 滚轮滚动 |
Esc |
Vim 模式 / 退出 |
对话内斜杠命令(输入 /help 查看完整列表):/skills /skill /tools /usage /context /session /domain /compact /wf /new /init /clear /quit。
oneai run "把 auth 模块重构为 async" --domain coding --model gpt-4oOneAI 把每个子系统都暴露为 CLI 子命令,无需写代码即可驱动:
oneai pack list # 浏览 DomainPack
oneai eval run coding-basic # 运行评测套件
oneai eval swebench --dataset ./swe_bench_lite.jsonl --instances astropy__astropy-12907 # SWE-bench 三轴评测
oneai studio # 启动 Web UI(StateGraph 可视化 + Checkpoint 时间旅行)
oneai mcp serve # 作为 MCP 服务器运行(兼容 Claude Code/Cursor)
oneai provider status # Provider 池健康与降级日志
oneai route # 查看 SmartRouter 最近的路由决策
oneai usage report # Token 用量报告(prompt/completion/total/calls,纯 token 维度)
oneai token --prompt "..." # 统计 Token、检查上下文窗口是否装得下
oneai team run code-review # 多 Agent 团队协作
oneai swarm run --task "..." # 群体编排
oneai session list / resume <id> # 持久化会话(SQLite)
oneai wasm list / run <name> # WASM 沙箱模块
oneai embed generate "text" # 生成向量 embedding
oneai a2a serve # 通过 A2A 协议暴露 Agent
oneai init [--format oneai|agents|claude] [--force] [--no-llm] # 生成项目指令文件(已配置 LLM 时由模型综合生成,否则启发式)use oneai_app::AppBuilder;
use oneai_domain::coding_pack;
#[tokio::main]
async fn main() {
let app = AppBuilder::new()
.noop_interaction_gate()
.default_parser()
.domain_pack(coding_pack("/project/dir")) // ← 一行领域切换
.build()
.expect("App 构建成功");
let session = app.create_session();
let result = session
.execute_tool("calculator", serde_json::json!({"expression": "2+3"}))
.await
.unwrap();
println!("结果: {}", result.content); // → "5"
}OneAI 是一个用 Rust 编写的全栈 Agent 框架。它提供了构建、运行和评测 AI Agent 所需的一切——从 LLM Provider 抽象到工具执行、记忆管理、工作流编排、领域专属配置、多 Agent 协作和轨迹日志——全部支持通过 UniFFI bindings 实现跨平台。LLM Provider 是可选的——纯工具或纯工作流的使用无需 Provider。
核心原则:
- 模块化设计 — 24 个独立 crate,各司其职,按需使用。
- 类型安全 — 密封枚举层级(每个公开枚举都加了
#[non_exhaustive])、trait 驱动抽象,无字符串配置。 - 领域可插拔 — DomainPack 系统让领域知识声明式、可组合、一行切换;可对照 JSON Schema 校验,并通过 pack 市场共享。
- 多 Agent 原生 — SubAgent、Team 协作(Coordinate/Route/Collaborate/Debate)、Handoff 协议、Swarm 群体编排(能力驱动路由)。
- 生产级基础设施 — ProviderPool 降级链、SmartRouter 多因子路由、用量统计、限流、熔断、Token 感知的上下文管理。
- 跨平台 — 通过 UniFFI 支持 macOS、Windows、Linux、Android、iOS 和 HarmonyOS(Kotlin、Swift、C++、C#)。
- 可评测 — 内置 OpenInference 兼容轨迹日志器 + 独立评测框架(6 指标、3 套件)。
- 人机协作 — 高风险工具通过原生 UI 对话框审批;执行前的 Plan 模式审批门。
- 动态 Agentic Loop — 不是固定管线;每轮迭代动态决策(直接回答/工具调用/委托子 Agent/切换范式)。
┌─────────────────────────────────────────────────────────────────────┐
│ oneai-app(集成层) │
│ AppBuilder → App → AppSession(唯一的组装入口) │
├──────────┬──────────┬──────────┬──────────┬──────────┬──────────────┤
│ oneai- │ oneai- │ oneai- │ oneai- │ oneai- │ oneai- │
│ agent │ workflow │ memory │ tool │ rag │ skill │
│ AgentLoop│ DAG + │ STM + │ Registry │ Document │ Selector │
│ +SubAgent│ StateGrph│ LTM + │ + MCP + │ Index + │ + Registry │
│ +ReAct │ 编译→执行│ Compress │ Interact │ Embedding│ + Skills │
│ +Plan │ │ +SQLite │ +12工具 │ Retrieval│ │
│ +Reflect │ │ 持久化 │ │ │ │
├──────────┴──────────┴──────────┴──────────┴──────────┴──────────────┤
│ oneai-domain(7 层 DomainPack + 市场 + 规范校验器) │
│ oneai-a2a oneai-wasm oneai-eval oneai-studio oneai-mcp │
│ A2A SDK Wasmtime 评测套件 Web UI MCP 服务/宿主 │
├──────────────────────────────────────────────────────────────────────┤
│ oneai-provider:OpenAI/Anthropic/Gemini/Ollama + ProviderPool + │
│ SmartRouter + 429 重试 │
│ oneai-parser(3 层)· oneai-persistence · oneai-trace · oneai- │
│ scheduler · oneai-uniffi · oneai-platform-{desktop,android,ios, │
│ harmony} │
├──────────────────────────────────────────────────────────────────────┤
│ oneai-core(基础层) │
│ ContentBlock, Message, Conversation, PermissionLevel, Budget, │
│ ContextBudgetManager, PlatformCapabilities, ModelContextResolver, │
│ 全部核心 trait (LlmProvider, Tool, InteractionGate, EmbeddingService,│
│ UsageTracker, RateLimiter, CircuitBreaker, TokenCounter) │
└─────────────────────────────────────────────────────────────────────┘
| Crate | 说明 | 测试数 |
|---|---|---|
oneai-core |
核心类型、trait、PermissionLevel、Budget、PlatformCapabilities | 259 |
oneai-provider |
LLM Provider(OpenAI/Anthropic/Gemini/Ollama)+ ProviderPool + SmartRouter | 95 |
oneai-parser |
3 层输出解析防御 | 12 |
oneai-memory |
记忆系统(STM、LTM、压缩、HNSW、MemoryManager + 持久化) | 59 |
oneai-tool |
工具注册、MCP 客户端、InteractionGate、执行器、12 工具 | 56 |
oneai-skill |
技能选择器 + 注册 + 内置领域技能 | 8 |
oneai-domain |
DomainPack 系统(7 层)、CodingPack、市场、规范校验器 | 127 |
oneai-agent |
AgentLoop + SubAgent + ReAct/Plan/Reflect + StreamParser + ContextAssembler + Team/Handoff/Swarm | 194 |
oneai-rag |
RAG + EmbeddingService(OpenAI/Anthropic/Voyage/Ollama/FastEmbed) | 61 |
oneai-workflow |
Workflow DAG + StateGraph + 编译器 + 执行器 | 44 |
oneai-scheduler |
内存任务调度 | 6 |
oneai-persistence |
渐进式 Checkpoint + SQLite(会话/用量)后端 | 40 |
oneai-a2a |
A2A 协议 SDK — 客户端 + 服务端宿主 + DomainPack→AgentCard | 88 |
oneai-wasm |
WASM 沙箱引擎 — Wasmtime + WasmTool + 模块注册 | 95 |
oneai-eval |
评测框架 — 用例/指标/Runner/3 套件 + SWE-bench 三轴 | 86 |
oneai-studio |
Studio Web UI — axum HTTP+WS + D3.js StateGraph 可视化 + Checkpoint 时间旅行 | 34 |
oneai-mcp |
MCP 服务生态 — 宿主 + 插件注册 + 配置 | 57 |
oneai-app |
应用集成层(AppBuilder) | 19 |
oneai-trace |
OpenInference 兼容轨迹日志器 | 14 |
oneai-uniffi |
UniFFI 绑定定义 | 18 |
oneai-platform-desktop |
桌面平台(macOS/Windows/Linux) | 2 |
oneai-platform-android |
Android 平台 | 2 |
oneai-platform-ios |
iOS 平台 | 1 |
oneai-platform-harmony |
HarmonyOS 平台 | 1 |
| 总计 | 1378 |
DomainPack 是 OneAI 的关键架构创新——它让领域知识变为声明式、可插拔、可组合,而非硬编码。一个 DomainPack 封装 7 层领域专属配置:
| 层级 | 组件 | 作用 |
|---|---|---|
| 1 | 工具 + ToolDecorator | 领域专属工具集与描述覆写 |
| 2 | ContextSource | 领域专属环境感知(含刷新策略) |
| 3 | PermissionProfile | 领域专属权限分类(拒绝/自动/确认) |
| 4 | ParadigmStrategy | 领域专属任务→范式映射 |
| 5 | CompressionTemplate | 领域专属上下文保留优先级 |
| 6 | Workflow + StateGraph | 领域预定义工作流与循环图 |
| 7 | MemoryProfile | 领域专属记忆策略(抽取 schema/召回/core 预算/自管理工具/跨会话习惯) |
let app = AppBuilder::new()
.provider(provider)
.domain_pack(coding_pack("/project/dir")) // ← 一行领域切换
.build()?;DomainPack 可合并用于多领域 Agent(coding + research)——权限"严格优先"、上下文源按优先级合并。Pack 可对照 JSON Schema(DomainPackSpec)做结构 + 语义校验,可从路径或 git URL 安装,并通过市场(PackSource + PackRegistry + 内置索引)共享。
oneai pack list # 浏览内置 pack
oneai pack validate spec.toml # 对照规范校验
oneai pack install ./my-pack # 从本地路径安装参照 Claude Code 的工作流嵌入机制:9 个工具(FileRead、FileEdit、Shell、Grep、Glob、FileList、NotebookEdit、Environment、WebFetch)、8 个工具装饰器、6 个带刷新策略的上下文源、权限配置(自动审批读取、确认编辑/Shell、拒绝 rm -rf/mkfs)、4 个范式策略、3 个子 Agent 类型(searcher / coder / reviewer)。
核心执行引擎是 动态循环——而非固定管线。每轮迭代模型动态决定下一步:
| 决策类型 | 行动 |
|---|---|
| DirectAnswer | 模型给出最终答案 → 循环结束 |
| ToolCalls | 模型调用工具 → 执行并回填结果 |
| Delegate | 模型委托子任务给专门的子 Agent |
| SwitchParadigm | 模型切换范式(Plan/Reflect/Explore)——会改 system prompt + 工具过滤 |
迭代上限由 TokenBudget 约束(而非硬编码 max_iterations)。delegate / switch_paradigm 由 meta_tool.rs 注入为模型可调用的 meta-tool——模型即可主动委托子 Agent 或切换范式,apply_paradigm_switch + AgentLoopGraphActionExecutor 内联升级范式(system prompt + 工具过滤)。内置生命周期钩子(PreToolUse/PostToolUse 等)、中断/恢复(CancellationToken)、结构化输出。
| 范式 | 模式 | 适用场景 |
|---|---|---|
| ReAct | 推理 → 行动 → 观察 循环 | 通用工具调用任务 |
| Plan | 分解 → 有序步骤列表 | 复杂多步任务 |
| Reflection | 验证 → 建议修正 | 质量保证、自检 |
| Parallel | ScopeState 隔离 → 合并 | 独立子任务 |
| Explore | 搜索 → 理解 → 概括 | 代码库/搜索探索 |
范式是模型/工作流驱动的——模型调用 switch_paradigm,或 StateGraph 节点发出 GraphDecision::SwitchParadigm,apply_paradigm_switch 随即改变 system prompt + 决策提示 + 工具过滤。用户侧的执行策略则是独立的 InteractionMode(Normal/Auto/Plan,Shift+Tab 切换)。
三级权限:Read(自动审批)、Standard(视策略而定)、Full(需审批)。解析顺序:deny_by_default → permission_overrides → auto_approve → require_confirmation → 工具自身 risk_level()。人机交互由统一的 InteractionGate 把守 5 个决策点:PreInfer(推理前可改写请求/跳过)、PostInfer(推理后可校验/替换)、ToolApproval(高风险工具放行,对接原生对话框)、PlanDecision(规划权衡选择)、PlanReview(最终计划 accept/reject/Revise)。内置实现:NoopInteractionGate(全点零延迟放行,等价自动批准)、ChannelInteractionGate(mpsc+oneshot 桥到 UI 线程,按点可配)、ThresholdInteractionGate(低风险自动放行、其余走通道)、DenyAllInteractionGate(全拒)。平台侧 PlatformInteractionGate 在 macOS/Windows/Linux/Android/iOS/HarmonyOS 用原生 NSAlert/MessageBox/AlertDialog/UIController/CommonDialog 处理 ToolApproval。旧的 ApprovalGate / on_plan_submitted 已移除。
内置 Provider:OpenAI、Anthropic、Gemini、Ollama,统一在 LlmProvider trait(infer + infer_stream)之下。其上是两个生产级层:
- ProviderPool — Provider 降级链,每个 Provider 自带熔断器、限流器和降级规则(如 Anthropic→OpenAI→本地)。自动处理 429/重试,解析
Retry-After。 - SmartRouter — 多因子路由(延迟/质量/均衡/自定义),给 Provider 打分后挑最优,集成熔断/限流/上下文约束。每次决策都记录日志可供查看。
let app = AppBuilder::new()
.default_provider_pool_anthropic() // Anthropic → OpenAI → Ollama 降级
.default_smart_router_balanced() // 多因子路由
.build()?;#[async_trait]
pub trait Tool: Send + Sync {
fn name(&self) -> &str;
fn description(&self) -> &str;
fn parameters_schema(&self) -> serde_json::Value;
fn risk_level(&self) -> RiskLevel;
async fn execute(&self, args: serde_json::Value) -> Result<ToolOutput>;
}
pub trait PermissionAwareTool: Tool { fn permission_level(&self) -> PermissionLevel; }内置 12 工具: ShellTool(安全黑名单+沙箱)、FileReadTool(offset+limit 分页)、FileEditTool、FileWriteTool、FileListTool、GrepTool、GlobTool、EnvironmentTool、NotebookEditTool、FileDeleteTool、CalculatorTool、WebFetchTool。MCP 客户端通过 rmcp 集成(stdio/SSE/streamable-http);MCP 服务端模式让 OneAI 自身向 Claude Code/Cursor 暴露工具(oneai mcp serve)。
| 模式 | 机制 |
|---|---|
| SubAgent | 分层委托给专门的子 Agent(Plan/Explore/Code/Review/Custom),可选 worktree 隔离 |
| Team | TeamCoordinator 4 策略——Coordinate/Route/Collaborate/Debate——加 4 预设(code_review/research_route/dev_pipeline/arch_debate) |
| Handoff | HandoffTool(handoff-as-tool-call)+ HandoffManager + 3 预设 |
| Swarm | 动态 Agent 池,3 路由策略(BestFit/LoadBalanced/Fastest),任务分解 + 质量校验 + 重试 |
- 三层记忆(Letta 式) — recall log(
Conversation)/core(常驻、有 token 预算、agent 自管理)/archival(全量事实向量库,按需召回)。Conversation是唯一原始日志,core 只存策展过的原子事实,不再冗余副本。 - MemoryProfile(DomainPack 第 7 层) — 声明领域级「抽取 schema(记什么)+ 召回策略 + core 预算 + 是否暴露自管理工具 + 习惯事实类型(跨会话)」,与
CompressionTemplate/ContextSource同级可合并。CodingPack/ResearchPack内置默认 profile。 - 压缩→归档增量抽取 —
ContextCompressor丢弃旧轮次前,按领域 schema 用FactExtractor抽取原子事实,经MemoryFactStore的 Mem0 式冲突更新(同 subject+predicate 更新而非追加)归档,堵住"压缩即丢失"。 - 抗压缩注入 —
CoreMemorySource(实现ContextSource,EveryIteration)每轮注入 core 块 + 召回上下文,压缩后自动重注入。 - 自管理记忆工具(领域 opt-in) —
memory_search/core_memory_edit/archival_memory_insert,让 agent 主动策展记忆 → "越用越好用"。 - 双命名空间 + 持久化 —
user_id(跨会话习惯)+session_id(本会话 episodic);统一memories表持久化,oneai memory search/list --user。--user标志命名空间化跨会话记忆。 - 短期记忆 — 滑动窗口,自动驱逐到长期记忆。
- 长期记忆 — HNSW 向量存储 + 内容存储 + 混合评分;通过配置的
EmbeddingService自动 embedding。 - STM↔LTM 闭环 —
MemoryReflection+inject_ltm_context+RecallStrategy。 - 上下文压缩 — Token 超限自动摘要,保留近期轮次;
ContextBudgetManager按比例分配每轮预算。 - 持久化 —
SqliteSessionStore持久化会话/LTM/事实;AppSession每次运行后自动保存。oneai session list / resume <id> / delete / info、oneai memory search <kw> --user <id> / list --user <id>。
- 用量记录(纯 token 维度) —
UsageTrackertrait +UsageRecord,内置InMemoryUsageTracker与持久化用的SqliteUsageTracker(oneai-persistence)。每次推理后由 AgentLoop 记录 prompt/completion/total tokens 与调用次数,不追踪任何 USD 金额或预算(USD 成本/预算管理已移除)——oneai usage report / session <id> / export。 - RateLimiter(
TokenWindowRateLimiter)+ CircuitBreaker(ThresholdCircuitBreaker,Closed/Open/HalfOpen)—— 在 AgentLoop 内强制执行。 - Token 计数 —
HeuristicTokenCounter(按 Provider、CJK 感知)+ContextWindowProfile+ 4 种裁剪策略 + 装得下检查 ——oneai token。
LLM 输出经 3 层防御:约束解码 → 模糊 JSON 修复(括号补全、正则提取、嵌入式 JSON 检测)→ 回退自纠重提示。请复用它,而非直接解析模型输出。
- WorkflowDag — 声明式 DAG,用于并行步骤编排。
- StateGraph — 有环有向图,用于需要迭代的 Agent 流程(ReAct 循环、条件路由、中断点)。StateGraph 与 AgentLoop 形成闭环:图节点可发出
GraphDecision::SwitchParadigm/Delegate/ToolCalls。
EmbeddingService trait,含 OpenAI/Anthropic/Voyage/Ollama/FastEmbed(本地 ONNX)实现,EmbeddingServiceRegistry(缓存+降级),AutoEmbeddingDocumentIndex 在 add_document() 时自动 embedding。分块:SentenceBoundary/FixedSize/Paragraph。
- A2A(
oneai-a2a)— Agent 间协议 SDK:客户端 + axum JSON-RPC 服务端宿主 + DomainPack→AgentCard 自动暴露。oneai a2a serve / discover / list / send。 - WASM(
oneai-wasm)— Wasmtime 沙箱执行不可信代码:WasmTool、WasmModuleRegistry、资源监控、WASI 受限访问、Native↔Wasm 执行模式。oneai wasm list / load / run / health / stats。 - Eval(
oneai-eval)—EvalCase/ExpectedOutput/EvalMetric/EvalRunner+ 6 内置指标 + 3 套件。oneai eval run <suite>/eval score。另含 SWE-bench 三轴评测(能力 resolved × 用量 usage × 效率 efficiency),见下文专节。 - Studio(
oneai-studio)— axum HTTP+WebSocket 服务、REST API、实时事件推送、D3.js SVG StateGraph 可视化、Checkpoint 时间旅行。oneai studio。 - MCP 生态(
oneai-mcp)—McpServerHost(JSON-RPC 服务端)+McpPluginRegistry(发现/配置/连接)+ TOML 配置 + stdio 传输。oneai mcp serve / list / add / remove / connect。
OpenInference 兼容轨迹用于 Agent 评测,外加 OTEL 导出器(OtlpCollector + OtelMetricsProvider):
let app = AppBuilder::new().trace_in_memory().build()?;
session.end_session(SpanStatus::Ok);
let tree = session.build_trace_tree();
println!("成功率: {:.1}%", tree.metrics.success_rate * 100.0);OneAI 接入 SWE-bench Lite(300 实例)做 coding agent 评测,按 能力(resolved)× 用量(usage)× 效率(efficiency) 三轴采集:
- 能力轴 ← SWE-bench 外部 harness 判定(
resolvedtrue/false),由SwebenchJudge调 Python subprocess 得到。 - 用量轴 ←
UsageTracker.session_usage()(api_calls + prompt/completion/total token 拆分,纯 token 维度,无 USD)。 - 效率轴 ←
TraceMetrics(total_tokens / tool_call_count / avg_iterations)+ 各阶段 wall-clock 耗时拆解。
每条实例:git clone <repo> → git checkout <base_commit> → 用 problem_statement 驱动 agent(CodingPack 提供 read_file/edit_file/grep/glob/shell)→ git diff 收 patch → 外部 harness 判 resolved,三轴全部写入 EvalResult。
# 1) 建 venv 并装 datasets + swebench + modal(一个 venv 两用:导数据 + 判定)
# macOS Homebrew Python 受 PEP 668 限制不能系统级装包,必须走 venv
python3 -m venv ~/.venvs/swebench
~/.venvs/swebench/bin/pip install datasets swebench modal httpx[socks]
~/.venvs/swebench/bin/modal token new # 登录 Modal
# 2) 用该 venv 的 python 导出数据集 JSONL 到本地(Rust 端不做 HF 网络)
~/.venvs/swebench/bin/python scripts/swebench/export_dataset.py
# → 生成 swe_bench_lite.jsonl(300 行)
# 3) LLM Provider(agent 真调 API = 真花钱)
export ONEAI_API_KEY=sk-...也可用 Verified(500 实例):
export_dataset.py --dataset princeton-nlp/SWE-bench_Verified --out swe_bench_verified.jsonl。scripts/swebench/另有fetch_instance.py(拉单个实例元数据)和make_prediction.py(手工 git diff→JSONL),是阶段一的手工通路,阶段二已被下面的 CLI 命令替代。 判定器默认找~/.venvs/swebench/bin/python(即上面建的 venv),用--python <path>可覆盖。
cargo run -p oneai-cli-demo -- eval swebench \
--dataset ./swe_bench_lite.jsonl \
--instances astropy__astropy-12907 \
--workspace ./swebench-workspace \
--run-id oneai-smoke# 限定 N 条(从数据集顺序取前 N,避免一次烧太多 API)
cargo run -p oneai-cli-demo -- eval swebench \
--dataset ./swe_bench_lite.jsonl \
--limit 10 \
--workspace ./swebench-workspace \
--run-id oneai-batch
# 或指定多个 instance id
cargo run -p oneai-cli-demo -- eval swebench \
--dataset ./swe_bench_lite.jsonl \
--instances astropy__astropy-12907,django__django-11099 \
--workspace ./swebench-workspace \
--run-id oneai-batchcargo run -p oneai-cli-demo -- eval swebench \
--dataset ./swe_bench_lite.jsonl \
--workspace ./swebench-workspace \
--run-id oneai-full-$(date +%Y%m%d) \
--format json全量 300 实例会真实克隆 300 个仓库、跑 300 轮 agent,API 费用和时间都不小——建议先单条冒烟再上批量。
每次运行在 --workspace 下产出:
| 文件 | 内容 |
|---|---|
predictions.jsonl |
agent 产出的 patch(可重跑/提交 harness) |
leaderboard.json |
swebench.com 提交 schema:instance_calls / resolved_count / total_instances / resolution_rate / per_instance:[{instance_id, api_calls, resolved}](USD 成本字段已移除,可比口径是 api_calls) |
evaluation_results/<run_id>/ |
swebench harness 自己写的判定明细 |
stdout 按下式输出报告:
--format |
输出 |
|---|---|
markdown(默认) |
人类可读报告(含每实例能力/用量/效率三轴) |
json |
完整 EvalReport JSON |
compact |
CI 友好的一行摘要 |
常用选项:--python <path> 指定判定器解释器(默认 ~/.venvs/swebench/bin/python);--modal false 改本地 docker(Apple Silicon 需 --namespace '',慢);--dataset-name princeton-nlp/SWE-bench_Lite 传给 harness;--run-id 控制 evaluation_results/ 子目录名。
| 平台 | 绑定语言 | InteractionGate | PlatformCapabilities |
|---|---|---|---|
| macOS / Windows / Linux | C++ / C# | NSAlert / MessageBox | 截屏、文件沙箱、通知 |
| Android | Kotlin | AlertDialog | 相机、截屏、网络 |
| iOS | Swift | UIAlertController | 相机(受限)、截屏 |
| HarmonyOS | C++ | CommonDialog | 相机、App 沙箱 |
oneai/
├── crates/
│ ├── oneai-core/ # 基础:类型、trait、PermissionLevel、Budget
│ ├── oneai-provider/ # OpenAI/Anthropic/Gemini/Ollama + ProviderPool + SmartRouter
│ ├── oneai-parser/ # 3 层输出解析
│ ├── oneai-memory/ # STM、LTM、压缩、HNSW、MemoryManager + 持久化
│ ├── oneai-tool/ # 注册、12 工具、MCP 客户端、审批、执行器
│ ├── oneai-skill/ # 技能注册 + 选择器 + 内置领域技能
│ ├── oneai-domain/ # DomainPack(7 层)、CodingPack、市场、规范校验器
│ ├── oneai-agent/ # AgentLoop、SubAgent、范式、Team/Handoff/Swarm、StreamParser
│ ├── oneai-rag/ # Document、Index、EmbeddingService、Retrieval
│ ├── oneai-workflow/ # DAG、StateGraph、编译器、验证器、执行器
│ ├── oneai-scheduler/ # InMemoryScheduler
│ ├── oneai-persistence/ # Checkpoint + SQLite 会话/用量后端
│ ├── oneai-a2a/ # A2A 协议 SDK(客户端 + 服务端宿主)
│ ├── oneai-wasm/ # Wasmtime 沙箱 + WasmTool + 模块注册
│ ├── oneai-eval/ # 评测用例/指标/Runner/套件
│ ├── oneai-studio/ # Studio Web UI(axum + WS + D3 可视化)
│ ├── oneai-mcp/ # MCP 服务端宿主 + 插件注册
│ ├── oneai-app/ # AppBuilder、App、AppSession
│ ├── oneai-trace/ # OpenInference 轨迹 + OTEL 导出器
│ ├── oneai-uniffi/ # UniFFI 绑定定义
│ └── oneai-platform-{desktop,android,ios,harmony}/
├── examples/
│ ├── cli/ # 交互式 TUI 演示(ratatui + crossterm)— bin: oneai-cli
│ ├── desktop-app/ # 桌面审批门演示
│ ├── rust/ # Channel 审批门演示
│ ├── android-app/ # Android 演示(Kotlin)
│ └── ios-app/ # iOS 演示(Swift)
├── bindings/ # 生成的 UniFFI 绑定(cpp/csharp/kotlin/swift)
├── scripts/ # generate_bindings.sh
└── Cargo.toml # Workspace 根配置(resolver = "2",edition 2021,v0.2.0)
cargo build # 构建整个 workspace
cargo test # 全部 1378 测试(24 个 crate)
cargo test -p oneai-agent # 单个 crate 的测试
cargo test -p oneai-agent plan # 单个测试/模块
cargo clippy --workspace --all-targets # 保持 lint 干净
cargo run -p oneai-cli-demo # 启动交互式 TUI(bin: oneai-cli)Workspace 使用 resolver = "2"、edition = "2021"、共享版本 0.2.0(来自 [workspace.package]),所有共享依赖在 [workspace.dependencies] 中锁定。公开枚举均加 #[non_exhaustive],作为 v0.2.0 API 稳定性承诺的一部分。
| 阶段 | 重点 | 状态 |
|---|---|---|
| 1–11 | 核心、Provider、Parser、范式、记忆、工具、工作流、持久化、AppBuilder、UniFFI、平台 UI、轨迹、DomainPack、TUI | ✅ 完成 |
| P2-1 | SubAgent + Worktree 隔离 + 并行执行 | ✅ 完成 |
| P2-2 | StateGraph ↔ AgentLoop 闭环执行 | ✅ 完成 |
| P2-3/4 | OTEL 可观测性 + STM↔LTM 闭环 | ✅ 完成 |
| P2-5 | A2A 协议 SDK | ✅ 完成 |
| P2-6 | WASM 沙箱引擎 | ✅ 完成 |
| P3-1 | API 稳定化(#[non_exhaustive]、v0.2.0) |
✅ 完成 |
| P3-2/3 | DomainPack 市场 + CLI 打磨(clap 子命令 + 配置) | ✅ 完成 |
| P3-4/5 | 评测框架 + Studio Web UI | ✅ 完成 |
| P3-6 | MCP 服务生态 | ✅ 完成 |
| P4-1/2 | A2A 服务端宿主 + MCP 客户端增强 | ✅ 完成 |
| P4-3/4 | DomainPack 规范校验器 + WASM 运行时增强 | ✅ 完成 |
| P5-1/2/3 | SQLite 持久化 + Embedding 服务 + 用量(token)管理 | ✅ 完成 |
| P6-1/2/3 | ProviderPool + SmartRouter + Token 计数/上下文管理 | ✅ 完成 |
| P7-1/2/3 | Team 协作 + Handoff 协议 + Swarm 群体编排 | ✅ 完成 |
| TUI | 工具展示、Plan 模式审批门、技能披露、滚动性能、鼠标选中 | ✅ 完成 |
Apache-2.0 — 详情见 LICENSE。
