Expand description
CrabMate 库:OpenAI 兼容多供应商 LLM、Agent 主循环、HTTP 服务、工具与工作流。
二进制入口见 src/main.rs 的 run 包装。
§公开 API(semver)
白名单见仓库 docs/design/crates_io_single_package.md §2.4。
- 承诺
protocol(Client / WASM):六个模块cm_types、cm_display_rules、cm_api_contract、cm_chat_export、cm_turn_layout、cm_sse_protocol。 没有types/sse/config别名。 - 承诺
server(默认,含protocol):组合面模块名agent/config/llm/sse/types的存在;以及run、run_agent_turn、build_tools*、ProcessHandles、tool_sandbox等根上显式pub use。 - 不承诺:
#[doc(hidden)]的cm_agent/cm_llm/cm_config/cm_workflow/cm_internal、e2e_scenario、test_serve;agent::agent_turn等组合面内部路径。cm_tools/cmd_mate等为实现模块,pub(crate)。
本 crate 默认 feature 是带库的 serve 服务器,不是通用嵌入式 Agent SDK。
HTTP 线契约以 docs/SSE协议.md、cm_api_contract 与 GET /openapi.json 为准。
日志由 tracing 处理;observability::init_tracing_subscriber(cm_internal)安装 tracing-subscriber 并用 tracing-log 桥接既有 log:: 调用。RUST_LOG 优先。未设置时:--serve 默认 info;其它 CLI 模式默认 warn(不输出 info);--log <FILE> 在未设置 RUST_LOG 时默认 info。时间戳默认本机本地时区(RFC3339)。设 CM_LOG_JSON=1 时输出 JSON 行(便于 jq / 日志平台)。
Re-exports§
pub use crate::cm_sse_protocol::sse;pub use crate::cm_types as types;pub use config::LlmHttpAuthMode;pub use llm::ChatCompletionsBackend;pub use llm::CompleteChatRetryingParams;pub use llm::E2eMode;pub use llm::OPENAI_COMPAT_BACKEND;pub use llm::OpenAiCompatBackend;pub use llm::StreamChatParams;pub use llm::TraceEvent;pub use llm::TraceSink;pub use llm::default_chat_completions_backend;pub use types::ChatRequest;pub use types::FunctionCall;pub use types::LlmSeedOverride;pub use types::Message;pub use types::ToolCall;pub use types::message_content_as_str;
Modules§
- agent
- Agent 回合、上下文裁剪/摘要、PER、工作流与终答规划解析(与
lib中 HTTP 路由、tools实现解耦)。 - cm_
api_ contract - CrabMate HTTP JSON 契约(纯
serde;无 axum / Leptos)。 - cm_
chat_ export - 会话导出契约:JSON 信封常量 /
ChatSessionFile/DisplayChatSessionFile,以及 Markdown 分段(无 I/O)。 - cm_
display_ rules - 聊天区展示层共用的字符串规则(无 UI / 无 I/O)。
- cm_
sse_ protocol - CrabMate
POST /chat/stream控制面 JSON 的协议版本常量、SSE 帧层工具函数与运行时。 - cm_
turn_ layout - Canonical
Turnlayout + reducer + projector(对齐 OpenAI assistant→tool→assistant 与 AG-UI 段边界)。 - cm_
types - API 与对话相关类型
- dev_tag
- Development 工具子域标签:按语言栈 / 职责过滤,与 [
super::ToolCategory::Development] 配合使用。 - http_
client - 对外部模型 API(及同类 HTTPS 端点)的
reqwest::Client单例构造。 - llm
- 与大模型(OpenAI 兼容
/chat/completions)交互的封装层。 - text_
sanitize - 面向用户可见正文的轻量清洗(规划摘要等)。 面向用户可见正文的轻量清洗(聊天、规划摘要等)。
- tool_
sandbox - Docker 沙盒内
tool-runner-internal入口;二进制与main经此路径调用。 Docker 沙盒(sync_default_tool_sandbox_mode = docker):在隔离容器中执行多类工具(见ToolInvocationLine.kind)。
Structs§
- Agent
Config - Agent 运行配置(组合式;各子域字段含义见对应
*Config结构体文档)。 - Agent
Turn LlmOverrides - 本回合对
chat/completions的采样与模型路由覆盖(相对config::AgentConfig)。 - Agent
Turn Transport - 回合传输与端点表现(SSE、取消、审批上下文等),与模型采样/路由覆盖解耦。
- CliExit
Error - E2eCli
Args e2e解析结果(供cli_run执行)。- Long
Term Memory Runtime - 进程内共享:SQLite 连接 + 可选 fastembed(首次 embed 时初始化;未编译
fastembedfeature 时无嵌入器)。 - Parsed
CliArgs parse_args的返回值:具名字段替代长元组,便于增删选项与调用方阅读。- PerTurn
Flight - 单条
/chat//chat/stream任务在跑run_agent_turn时,PER 相关状态的只读镜像(进程内、按job_id区分)。 - Process
Handles - Web
serve与 CLIchat/repl共用的进程级句柄(显式Arc传递,替代模块级static)。 - Read
File Turn Cache - 一轮对话内的
read_file缓存(Arc<Mutex<…>>由run_agent_turn创建并共享给各工具调用)。 - RunAgent
Turn Attach - 记忆 / 工具策略附件(入口袋;进环后映射到
RunLoopAttach相关字段)。 - RunAgent
Turn Obs - 可观测与进程句柄(入口袋;与环内
RunLoopObs对应,勿与之混淆)。 - RunAgent
Turn Params - Web/CLI/基准测试共用的
run_agent_turn入参(避免长参数列表)。 - RunAgent
Turn Session - 会话消息与工作区(入口袋;与环内
RunLoopCore工作区字段对应)。 - RunAgent
Turn Shared Inputs - Web/CLI/bench 共用的 LLM 接入侧不变输入(HTTP 客户端、密钥、配置快照、工具表)。
- Tool
Dispatch Meta - Tools
Build Options - 构建工具列表时的分类与开发子域标签过滤。
- Tracing
Chat Turn - Web
/chat*单任务:job_id/conversation_id根 span + 可递增的外层轮次;工具日志前更新tool_call_seq/tool_call_id(展示标签,协议层仍以原始 id 为准)。 - Turn
Process Handles run_agent_turn/ 工具执行所需的进程句柄面(不含侧栏任务表与 CLI LTM)。- WebChat
Json Build Args - 构造
RunAgentTurnParams::web_chat_json所需的参数包。 - WebChat
Stream Build Args - 构造
RunAgentTurnParams::web_chat_stream所需的参数包(避免长形参列表)。 - WebRequest
Audit - 单次 HTTP 对话任务携带的审计上下文(队列 →
run_agent_turn)。 - WebTool
Runtime
Enums§
- Extra
CliCommand parse_args扩展槽:非默认 CLI 流程(doctor / models / probe)。- Planner
Executor Mode - 规划器与执行器的运行模式。
- Save
Session Format save-session --format取值- Tool
Execution Class - 工具在运行时的执行类别。
- Tool
Replay Cli tool-replay子命令解析结果(供runtime::cli执行)- WebBearer
Cli web-bearer解析结果(供runtime执行;不要求API_KEY)
Constants§
- EXIT_
GENERAL - 一般失败(配置、I/O、未分类错误)
- EXIT_
MODEL_ ERROR - 模型接口或解析失败
- EXIT_
QUOTA_ OR_ RATE_ LIMIT - 配额 / 限流
- EXIT_
TOOLS_ ALL_ RUN_ COMMAND_ DENIED - Historical:同进程
chat下本回合内所有run_command均被用户拒绝(码 4)。 D2.2 后生产路径不再发出该码(无同进程 CLI 工具审批);契约测试仍断言常量值 == 4 作占位。 - EXIT_
TOOL_ REPLAY_ MISMATCH tool-replay下存在不一致的工具输出- EXIT_
USAGE - 参数/用法错误
Traits§
- Expose
Secret - 敏感字符串(
Debug/ 结构化日志默认脱敏);取值请用ExposeSecret::expose_secret。 Expose a reference to an inner secret
Functions§
- all_
dispatch_ metadata - 注册表中显式声明的工具;其余名称运行时走
SyncDefault(同步run_tool)。 - build_
tools - 构建传给 API 的工具列表(表驱动注册)。
- build_
tools_ filtered - 构建传给 API 的工具列表:可按顶层分类过滤([
ToolCategory::Basic] / [ToolCategory::Development])。 - build_
tools_ with_ options - 同时支持顶层分类与 Development 子域标签过滤(见
ToolsBuildOptions)。 - classify_
model_ error_ message - 根据
run_agent_turn/ LLM 层常见错误文案归类退出码(启发式,与llm::api用户可见串对齐)。 - execution_
class_ for_ tool - 合并「注册表元数据 + 默认同步」的执行类别,便于文档或将来生成 OpenAPI。
- is_
readonly_ tool - 判断工具是否为只读(不修改工作区文件系统),供并行执行决策使用。
- load_
config - 加载配置:嵌入的
config/default_config.toml、config/session.toml、config/context_inject.toml、config/tools.toml、config/sandbox.toml、config/planning.toml、config/memory.toml为底,再被配置文件覆盖,最后被环境变量覆盖。 若指定config_path,则只从该文件读取覆盖;否则优先 cwd 的config.toml/.agent_demo.toml,再尝试$XDG_CONFIG_HOME/crabmate/config.toml(可从/etc/crabmate首次种子;源码树内默认跳过,除非设CM_CRABMATE_CONFIG_DIR)。 若最终 api_base、model 或任一运行参数仍未设置则返回错误。 默认system_prompt_file在 [super::finalize::finalize] 中按 cwd、各已加载配置文件目录(逆序)、run_command_working_dir解析相对路径。 - load_
config_ for_ cli - CLI 子命令入口:加载失败时打印错误并映射为
InvalidData,与历史lib::run行为一致。 - new_
turn_ cache_ handle - 供
run_agent_turn在启用缓存时构造句柄。 - normalize_
legacy_ argv - 若 argv 在 未写子命令名 时使用历史平铺 flag(
--serve、--benchmark等),改写为serve/bench/ … 形式再交给 clap。 - parse_
args - 解析命令行:须显式子命令(
serve/bench/config/doctor/ …);同进程chat|repl|tui入口已移除。 - parse_
args_ from_ argv - 使用给定
argv(首元素为程序名)解析 CLI,供契约/集成测试;生产请用parse_args。 - root_
clap_ command_ for_ man_ page - 与当前构建一致的根级
clap::Command,供crabmate-gen-man生成man/crabmate.1(troff)。 - run
- CLI 入口逻辑(与历史二进制
main等价):解析参数、加载配置、启动 Web / REPL 等。 - run_
agent_ turn - 执行一轮 Agent:发请求、若遇 tool_calls 则执行工具并继续,直到模型返回最终回复。
cfg建议使用Arc共享(与进程内 Web 服务状态一致),以便工具在spawn_blocking路径中复用同一份配置而不反复深拷贝。 若提供 transport.out,则流式 content 会通过 out 发送(供 SSE 等使用);transport.no_stream为 true 时 API 使用stream: false, 有正文则通过out一次性下发整段。 effective_working_dir 为当前生效的工作目录(可与前端设置的工作区一致)。transport.cancel为Some时,各轮请求会在流式读与重试间隔中轮询其标志;置位后尽快结束并返回Ok(或Err:[agent::agent_turn::RunAgentTurnError] 中含取消 / 限流 / SSE 早停等,用户可见串与常量crate::types::LLM_CANCELLED_ERROR对齐),供协作取消等场景使用。 分阶段规划下若规划轮未解析出合法agent_reply_planv1:不再整轮失败退出:保留规划轮助手正文并降级为与门控拒绝时相同的常规run_agent_outer_loop(含工具)。规划轮会先丢弃 API 返回的原生tool_calls,再视情况执行工具,避免网关误报tool_calls时静默无动作。transport.per_flight仅 Web 队列任务传入,用于GET /status的per_active_jobs镜像;运维 CLI 传None。 自定义ChatCompletionsBackend见AgentTurnTransport::llm_backend。 - run_
cli_ from_ parsed - 已解析 CLI 参数后的入口;
main在block_on时优先调用本函数以减小 future 嵌套深度。 - try_
dispatch_ meta - 若在
all_dispatch_metadata中登记则返回其元数据,否则None(运行时走同步run_tool)。
Type Aliases§
- Read
File Turn Cache Handle - Shared
Agent Config - 进程内共享的
AgentConfig(serve/repl/chat/bench);热重载时write更新,回合开始时read+clone得快照传入run_agent_turn。